Contrato siempre sin gasolina en Remix

Estoy tratando de probar e implementar mi contrato usando el último ganache-cli v6.0.3 (ganache-core: 2.0.2) con Remix (versión http!) en http://remix.ethereum.org . Entonces, después de iniciar ganache-cli sin ningún parámetro adicional en el puerto estándar 8545, me conecto en Remix a través del proveedor web3 http://127.0.0.1:8545 y aparecen mis cuentas, como muestra Ganache.

Este es el contrato que quiero implementar:

pragma solidity ^0.4.20;

contract Test {

    uint[4] public arr; // [0,0,0,0]
    event TestLog(string logmessage);

    function Test() public {
        arr[0] = 1; // [1,0,0,0]
    }

    function checkArray() public {
        if(arr[0] == 1) { // arr == [1,?,?,?]
            arr[1] = 1;
            arr[0] = 0; // switch values [0,1,0,0]
        }
        TestLog("some log");
    }

}

Funciona bien con la máquina virtual Javascript incorporada en Remix:[vm] from:0xca3...a733c, to:Test.checkArray() 0x692...77b3a, value:0 wei, data:0x7b3...f7296, 1 logs, hash:0xa6f...87209

Si trato de ejecutar la función checkArray en Remix conectado a ganache a través del proveedor web3, aparece un transact to Test.checkArray errored: VM Exception while processing transaction: out of gaserror.

¿Qué estoy haciendo mal aquí? Aumentar gasLimit con ganache-cli -l 5000000no ayudó, así como valores aún más altos y una prueba de seguimiento con un gasPrice muy pequeño y un límite de gas alto. ¿Es un problema de Remix establecer límites de gas incorrectos en el sitio web de Remix al crear la transacción? También lo probé en un nodo geth privado con el mismo resultado: sin combustible...

¡Cualquier ayuda se agradece!

Respuestas (2)

Esto parece ser un error de testrpc/ganache. La línea que crea problemas es configurar respectivamente restablecer el valor de la matriz en la posición 0 a cero arr[0] = 0;.

Usé Rinkeby con el mismo contrato y funciona como se esperaba inicialmente. Puede probarlo aquí: https://rinkeby.etherscan.io/address/0x78aC7667BdeDC3b1CdF43611AdF7a88e05b600F5

Como esta es una funcionalidad muy básica, me queda por decir: ¿qué diablos?

En mi opinión , la configuración arr[0]es incorrecta porque ese elemento no existe. Es/estaba siempre saliendo del final de la matriz. Úselo arr.push(1)para extender la longitud de la matriz.

Espero eso ayude.