Contract-Development
適用於 Remix 的 Solidity 版本 0.4.24 的智能合約互動(與另一個合約)範例
我正在瀏覽這段程式碼,我決定在 RemixIDE 上對其進行測試… 創建一個呼叫另一個合約的函式
當我從呼叫者合約執行函式時,我不斷收到“處理事務時出現 VM 異常:還原”。我用Google搜尋了這個錯誤,嘗試了所有解決問題的建議,但沒有一個奏效。
我之前曾嘗試執行本教程中的程式碼(仍然是關於智能合約互動)https://www.youtube.com/watch?v=zjUbLC21avw&t=425s出現錯誤,然後經過研究發現程式碼語法過時,因此出現錯誤.
所以我的問題是……是來自創建呼叫另一個合約的函式的程式碼,過時的,還是 Remix/Solidity 中的錯誤……如果是錯誤,你如何擺脫它?0.4.24 版是否有目前有效的契約互動範例?
我在混音 IDE 上執行的程式碼是……
pragma solidity ^0.4.24; contract Caller { Called public called_address; function set_address(address _addy) public { called_address = Called(_addy); } function set(uint256 _var) public { called_address.set(_var); } function set_call(address _called, uint256 _var) public { require(_called.call(bytes4(keccak256("set(uint256)")), _var)); } } interface Called{ function set(uint) external; function get() external view returns (uint); }
被呼叫合約的程式碼
pragma solidity ^0.4.24; contract Called{ uint public myuint; function myuint() public view returns(uint _myuint) { _myuint = myuint; } function set(uint _var) public { myuint = _var; } function get() public view returns (uint){ return myuint; } }
另外要注意的是,我必須自己定義一個 getter 函式,因為 IDE 給我一個錯誤,說一些函式沒有定義/使用……謝謝你的幫助。
我正在通過 Genache 將 web3 提供程序與區塊鏈的本地實例一起使用
最後…我有有效的程式碼…
來電程式碼:
pragma solidity ^0.4.24; contract Caller { address public called_address; function set_address(address _addy) public { called_address = address(_addy); } function getCalleeValue() public view returns (uint){ Called c = Called(called_address); return c.get(); } function setCalleeValue(uint newValue) public returns (uint){ Called c = Called(called_address); c.set(newValue); } interface Called{ function set(uint) external; function get() external view returns (uint); }
呼叫合約程式碼:
pragma solidity ^0.4.24; contract Called{ uint public myuint; function myuint() public view returns(uint _myuint) { _myuint = myuint; } function set(uint _var) public { myuint = _var; } function get() public view returns (uint){ return myuint; } }
第一個程式碼如何儲存地址似乎存在問題。現在我已更改程式碼以將地址顯式儲存為地址類型,在使用 Web3 提供程序和 Genache 作為本地區塊鏈的 Remix IDE 中沒有問題。