Creé dos contratos para separar las reglas de almacenamiento y validación.
ValidationService.sol
pragma solidity ^0.4.16;
import "./Storage.sol";
contract ValidationService {
Storage public store;
constructor(address add) public{
store=Storage(add);
}
function getMyNumber() public constant returns (uint) {
return store.getNumber();
}
}
Almacenamiento.sol
pragma solidity ^0.4.16;
contract Storage {
uint public mynum = 5;
function getNumber() public constant returns (uint) {
return mynum;
}
}
Llamé al método getMyNumber que llamó al método getNumber del contrato de almacenamiento y debería devolver 5 como salida.
validationservice.getMyNumber.call()
El código anterior funciona bien en el entorno de desarrollo de remezclas y trufas, pero no funciona en la red blockchain privada que usa Geth.
Si llamo al método getNumber del contrato de almacenamiento directamente desde la consola geth, funciona bien.
¿Alguien puede guiarme dónde está mi error?
He resuelto el problema. Utilicé "byzantiumBlock": 0 en el archivo genesis.json y recreé una cadena de bloques privada.
Para obtener más detalles, consulte
Código de operación no válido 0x3d
Gracias a todos
Esto funciona bien. El único caso en el que no funcionará es si no está pasando la dirección correcta al implementar validationService
.
Espero que esto ayude
Si obtiene el siguiente error-
call to ValidationService.getMyNumber errored: VM error: revert.
revert The transaction has been reverted to the initial state.
Note: The constructor should be payable if you send value. Debug the transaction to get more information.
entonces estás usando la dirección incorrecta. Sería genial si pudiera compartir más información sobre el error al que se enfrenta.
Gunavant