Contract-Development

契約在 Javascript VM 而不是 Web3 Provider 上工作,為什麼?

  • March 17, 2021

這是程式碼:

呼叫合約:

pragma solidity ^0.4.24;

contract Caller {

   address public called_address;

   constructor() public payable {

   }

   function set_address(address _addy) public {
       called_address = address(_addy);
   }
   function () public payable{
       Called c = Called(called_address);
       if (c.get() > 10 ){
           revert("Too much sauce");
       }
       c.set();
   }

}

interface Called{

   function set() external;
   function get() external view returns (uint);
}

稱為契約:

pragma solidity ^0.4.24;

contract Called{

   uint public number;

   function myuint() public view returns(uint _number) {
       _number = number;
   }

   function set() public {
       number++;
   }

   function get() public view returns (uint){
       return number;
   }
}

當我呼叫回退函式時,我得到一個錯誤。這僅在使用 Web3 提供程序時發生,但在 JavaScript VM 中執行良好。也看到了這個問題Can’t call another contract constant function in Remix in Web3 provider mode, but it works in Javascript VM

它是 Remix 中的錯誤嗎?我的程式碼有錯誤嗎?為什麼我在不同的環境下得到不同的結果?

目前的 remix 線上版本 (0.6.4) 存在一些與契約間通信相關的錯誤,這些錯誤存在於使用外部 web3 提供程序或設施的情況下。嘗試使用目前的 alpha 版本(http://remix-alpha.ethereum.org),如果一切正常,只需切換到它。目前的 alpha 版本簡稱為目前線上版本(如 0.7.0 版本)。

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