Remix не разрешает публичные массивы

Я видел пример кода в разных местах, где есть общедоступные массивы, но когда я пытаюсь создать этот контракт в Remix :

pragma solidity ^0.4.19;
contract Ballot {
  uint8[] public proposals;
}

Всегда терпит неудачу с

undefined errored: VM error: invalid opcode.
invalid opcode  The constructor should be payable if you send value.
    The execution might have thrown.
    Debug the transaction to get more information.

Опять же, это во время создания контракта. Я пытался отправить значение (и добавить оплачиваемый конструктор); ошибка меняется ( VM error: revert.), но все равно не удается. Я также пробовал отлаживать; он проходит через конструктор (если он есть), а затем проходит через поле состояния и там терпит неудачу.

Размещенный вами код компилируется и работает с компилятором Remix и solc версии 0.4.19. Непонятно, как именно воспроизвести ошибку (не очевидно). Как правило, вы можете игнорировать "оплачиваемый" аспект сообщения об ошибке конструктора. Это шаблонная подсказка. Сообщение просто означает, что конструктор (не показан) потерпел неудачу.
@RobHitchens Я смог скомпилировать, но получаю сообщение об ошибке при нажатии кнопки «Создать» на вкладке «Выполнить». Конструктора нет.
Это выдает ошибку, но если вы проверите справа под кнопкой «Создать», вы увидите, что ваш контракт был создан.
@CNuts: Верно. И это также дает ту же ошибку, когда я вызываю некоторые функции, но они тоже работают. Пожалуйста, оставьте свой комментарий в качестве ответа.
TBH Я еще не чувствую этого с новым ремиксом, и я упустил из виду, что большинство людей, вероятно, не используют yann300.github.io/remix04 . Ваш контракт в порядке. Я вижу ошибку сейчас. Нет, это не складывается для меня.
@RobHitchens: я новичок, и документы относятся только к официальному ремиксу, а не к версии yann300. Но спасибо за наводку!

Ответы (2)

Это выдает ошибку, но если вы проверите справа под кнопкой «Создать», вы увидите, что ваш контракт был создан.

введите описание изображения здесь

Так же такая же ошибка вылетает при вызове функций по контракту. Ошибка отображается после успешного результата функции. Мой разум просто увидел ошибку как последнее сообщение, предположил, что она не удалась, и не стал прокручивать вверх, чтобы увидеть, что эти функции действительно выполняются успешно.

Вы получаете ошибку «Исключение VM: недопустимый код операции» в солидности, когда я установил значение в «вводе значения» перед созданием контракта. Таким образом, чтобы устранить такую ​​ошибку, вы можете установить для «ввода значения» значение 0 и повторить попытку создания контракта. Это будет работать нормально.

Установка значения, отличного от 0, вызовет ошибку без создания контракта. Наличие 0 в качестве значения по-прежнему будет генерировать ту же ошибку, но создаст контракт.