Contrato trabajando en Javascript VM y no en Web3 Provider, ¿por qué?

Aquí está el código:

Contrato de llamada:

pragma solidity ^0.4.24;

contract Caller {

    address public called_address;

    constructor() public payable {

    }

    function set_address(address _addy) public {
        called_address = address(_addy);
    }
    function () public payable{
        Called c = Called(called_address);
        if (c.get() > 10 ){
            revert("Too much sauce");
        }
        c.set();
    }

}

interface Called{

    function set() external;
    function get() external view returns (uint);
}

Contrato llamado:

pragma solidity ^0.4.24;

contract Called{

    uint public number;

    function myuint() public view returns(uint _number) {
        _number = number;
    }

    function set() public {
        number++;
    }

    function get() public view returns (uint){
        return number;
    }
}

Cuando llamo a la función de reserva, aparece un error. Esto solo sucede cuando se usa el proveedor Web3, pero funciona bien en la VM de JavaScript. También vi esta pregunta . No puedo llamar a otra función constante de contrato en Remix en el modo de proveedor Web3, pero funciona en Javascript VM

¿Es un error en Remix? ¿Mi código tiene un error? ¿Por qué obtengo resultados diferentes con los diferentes entornos?

Respuestas (1)

La versión en línea actual de remix (0.6.4) tiene algunos errores relacionados con la comunicación entre contratos que están presentes cuando se usa un proveedor o instalación web3 externa. Intente usar la versión alfa actual ( http://remix-alpha.ethereum.org ) y, si todo está bien, simplemente cambie a ella. La versión alfa actual será la versión en línea actual (como versión 0.7.0) en resumen.