Solidity

無法通過呼叫另一個合約的方法來獲取值

  • June 25, 2018

我創建了兩個契約來分離儲存和驗證規則。

驗證服務.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();

}


}

儲存.sol

pragma solidity ^0.4.16;

contract Storage {

uint public mynum = 5;


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

}

我呼叫了 getMyNumber 方法,該方法呼叫了 Storage 合約的 getNumber 方法,它應該返回 5 作為輸出。

validationservice.getMyNumber.call()

上面的程式碼在 remix 和 truffle 開發環境中執行良好,但在使用 Geth 的私有區塊鍊網路中無法執行。

如果我直接從 geth 控制台呼叫儲存合約的 getNumber 方法,它工作正常。

誰能指導我的錯誤在哪裡

我已經解決了這個問題。我在 genesis.json 文件中使用了 “byzantiumBlock”: 0並重新創建了私有區塊鏈。

更多詳情,請參考

無效的操作碼 0x3d

謝謝大家

這工作正常。它不起作用的唯一情況是,如果您在部署時沒有傳遞正確的地址validationService

希望這可以幫助

引用自:https://ethereum.stackexchange.com/questions/51489