Я создал два контракта, чтобы разделить правила хранения и проверки.
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, он работает нормально.
Может кто подскажет где моя ошибка
Я решил проблему. Я использовал «byzantiumBlock»: 0 в файле genesis.json и воссоздал частную цепочку блоков.
Для более подробной информации см.
Спасибо вам всем
Это прекрасно работает. Единственный случай, когда это не сработает, — это если вы не передаете правильный адрес при развертывании validationService
.
Надеюсь это поможет
Если вы получаете ошибку ниже
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.
тогда вы используете неправильный адрес. Было бы здорово, если бы вы могли поделиться дополнительной информацией об ошибке, с которой вы столкнулись.
Гунавант