Remix no permite arreglos públicos

He visto código de muestra en varios lugares que tienen arreglos públicos, pero cuando trato de crear este contrato en Remix :

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

Siempre falla con

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.

Nuevamente, esto es durante la creación del contrato. Intenté enviar valor (y agregar un constructor pagable); el error cambia ( VM error: revert.), pero sigue sin tener éxito. También probé la depuración; pasa por el constructor (si está presente), y luego pasa por el campo de estado y falla allí.

El código que publicaste compila y funciona con Remix y el compilador solc versión 0.4.19. No está claro cómo replicar exactamente el error (no es obvio). Por lo general, puede ignorar el aspecto "pagadero" del mensaje de falla del constructor. Es una pista repetitiva. El mensaje simplemente significa que el constructor (no se muestra) falló.
@RobHitchens Pude compilar pero aparece el error al hacer clic en el botón Crear en la pestaña Ejecutar. No hay constructor.
Da el error, pero si marca a la derecha debajo del botón Crear, verá que se creó su contrato.
@CNuts: Cierto. Y también da el mismo error cuando llamo a algunas funciones, pero también parecen estar funcionando. Por favor, publique su comentario como respuesta.
TBH Todavía no lo siento con el nuevo Remix y perdí de vista cómo la mayoría de las personas probablemente no usan yann300.github.io/remix04 . Tu contrato está bien. Veo el error ahora. No, no me cuadra.
@RobHitchens: soy un novato y los documentos solo se refieren al Remix oficial y no a la versión yann300. Pero gracias por el puntero!

Respuestas (2)

Da el error, pero si marca a la derecha debajo del botón Crear, verá que se creó su contrato.

ingrese la descripción de la imagen aquí

Además, el mismo error se escupe cuando se llaman funciones en el contrato. El error se muestra después del resultado de la función exitosa. Mi mente solo vio el error como el último mensaje, asumió que falló y no se desplazó hacia arriba para ver que esas funciones realmente estaban funcionando correctamente.

Obtiene el error "Excepción de VM: código de operación no válido" en Solidity, cuando había establecido un valor en la "entrada de valor" antes de crear el contrato. Entonces, para resolver dicho error, puede establecer "entrada de valor" en 0 y volver a intentar crear el contrato. Funcionará bien.

Establecer el valor en algo diferente a 0 provocará un error sin crear el contrato. Tener 0 como valor aún generará el mismo error pero creará el contrato.