Solidity

虛擬機錯誤:還原。交易已恢復到初始狀態

  • January 2, 2019

我一直在嘗試訪問另一個契約中的一個契約的功能,如下所示。我實際上想呼叫函式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”關鍵字來創建合約實例。

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