Solidity
虛擬機錯誤:還原。交易已恢復到初始狀態
我一直在嘗試訪問另一個契約中的一個契約的功能,如下所示。我實際上想呼叫函式
changeName()
並receiveName()
在foreignContract{}
from中定義myContract{}
。交易正在被探勘,但執行失敗。pragma solidity ^0.4.0; contract myContract { foreignContract created; function myContract() { created = foreignContract(msg.sender); } function changeNameMycontract(string name) returns(bool, address) { return (created.changeName(name), msg.sender); } function ReturnName()returns(string) { return created.receiveName(); } } contract foreignContract { string name; function changeName(string Name) returns(bool) { name = Name; return true; } function receiveName() returns(string) { return name; } }
我得到的錯誤是
Transact to myContract.changeNameMycontract errored:VM error.reverted revert 交易已經恢復到初始狀態。注意:如果您發送值,則應支付建構子。
我對這種可靠性和區塊鏈概念不熟悉 - 任何幫助都將不勝感激
pragma solidity ^ 0.4.24; import "./foreignContract.sol"; contract myContract { foreignContract created; constructor() public payable { created = new foreignContract(); } function changeNameMycontract(string name) public returns(bool) { return created.changeName(name); } function ReturnName() public view returns(string) { return created.receiveName(); } } contract foreignContract { string name; function changeName(string Name) public returns(bool) { name = Name; return true; } function receiveName() public view returns(string) { return name; } }
嘗試以下更正的程式碼它將編譯並執行而不會出現任何錯誤。程式碼不需要支付修飾符,因為您沒有發送任何 ETH,唯一的修改是使用“new”關鍵字來創建合約實例。