No se puede obtener un valor llamando al método de otro contrato

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?

Encontré el error en la consola del minero, después de habilitar la opción de verbosidad. Ethereum arrojó el mensaje de error "Código de operación no válido 0x3d" cada vez que llamo al método getMyNumber. Por favor, ayúdenme si alguien sabe acerca de este error y cómo resolverlo.

Respuestas (3)

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

Estoy pasando la dirección correcta. El método se ha ejecutado con éxito sin ningún error, pero siempre devuelve 0 en lugar de 5.

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.

El método se ejecuta con éxito sin ningún error. Devuelve 0 en lugar de 5 en la consola Geth.
Ejecuté el minero usando el nivel de Verbosidad 5 y descubrí que me daba el mensaje de error "código de operación 0x3d no válido" cada vez que llamo al método getMyNumber. Por favor orienteme cual es este error y como solucionarlo