Невозможно получить значение, вызвав метод из другого контракта

Я создал два контракта, чтобы разделить правила хранения и проверки.

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();

 }


}

Storage.sol

pragma solidity ^0.4.16;

contract Storage {

uint public mynum = 5;


  function getNumber() public constant returns (uint) {
    return mynum;
  }

 }

Я вызвал метод getMyNumber, который вызвал метод getNumber контракта Storage, и он должен возвращать 5 в качестве вывода.

validationservice.getMyNumber.call()

Приведенный выше код отлично работает в среде разработки ремиксов и трюфелей, но не работает в частной сети блокчейна с использованием Geth.

Если я вызываю метод контракта хранилища getNumber непосредственно из консоли geth, он работает нормально.

Может кто подскажет где моя ошибка

Я нашел ошибку в консоли майнера после включения опции многословия. Ethereum выдавал сообщение об ошибке «Неверный код операции 0x3d» всякий раз, когда я вызываю метод getMyNumber. Пожалуйста, помогите мне, если кто-нибудь знает об этой ошибке и как ее решить.

Ответы (3)

Я решил проблему. Я использовал «byzantiumBlock»: 0 в файле genesis.json и воссоздал частную цепочку блоков.

Для более подробной информации см.

Неверный код операции 0x3d

Спасибо вам всем

Это прекрасно работает. Единственный случай, когда это не сработает, — это если вы не передаете правильный адрес при развертывании validationService.

Надеюсь это поможет

Я передаю правильный адрес. Метод успешно выполнен без ошибок, но всегда возвращает 0 вместо 5.

Если вы получаете ошибку ниже

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. 

тогда вы используете неправильный адрес. Было бы здорово, если бы вы могли поделиться дополнительной информацией об ошибке, с которой вы столкнулись.

Метод выполняется успешно без каких-либо ошибок. Он возвращает 0 вместо 5 на консоли Geth.
Я запустил майнер, используя уровень детализации 5, и обнаружил, что он выдавал сообщение об ошибке «Неверный код операции 0x3d» всякий раз, когда я вызываю метод getMyNumber. Подскажите что это за ошибка и как ее решить