Go-Ethereum

來自不同契約的 geth 呼叫功能不起作用,ganache 和 remix 工作

  • September 25, 2018

我正在嘗試從另一個合約呼叫合約函式,使用web3.js.

當使用ganacheremix一切正常時:web3.js返回觸發的事件和使用的氣體(本例中為 33938)以及契約中的相關欄位正在更改。

但是,當我使用geth上述所有工作時,但前提是我不呼叫另一個合約的函式。

這樣做時,不會返回事件,不會更改欄位,並且返回的氣體是 90000 或我在 web3send選項中發送的氣體(例如c1.methods.transferToC2(1).send({from: <my account address>, gas: 2000000});

這不完全是契約,但為了對問題的一般理解,相關的契約結構類似於:

Contract c1 () {
   event Event(uint256 someNumber);
   address private c2Address = 0x208bcebf6cfa80fe2862fcdacdeb6ad9d3533017;
   address private someAddress = 0x5e7105a34ed27f0b72285f2f951394f3da3ea5eb;
   function transferToC2(uint256 someNumber) public  {
       Event(someNumber);
       IERC20(c2Address).foo(someAddress, someNumber);
   }
}

Contract c2 is ERC20 () { 

}

interface IERC20 {
   function foo(address someAddress, uint256 someNumber) public returns (bool);
}

contract ERC20 is IERC20 {
   mapping (address => uint256) internal someMapping;
   function foo(address someAddress, uint256 someNumber) public  {
       someMapping[someAddress] = someNumber;
       return true;
   }
}

我正在部署契約,truffle migrate --network <network> --reset輸出類似於:

Deploying c1...
... 0x703293ce078c3c50e6da8725c6e9a4b91ae904c2943929c8e4189069dccc3de8
c1: 0xed8b7d949b961b1135199e08a9180f5328234426
Deploying c2...
... 0x1b54c170d4fccc13724ee9000078ff437b49883438413e5bf8da68d9343ca6d8
c2: 0x208bcebf6cfa80fe2862fcdacdeb6ad9d3533017

在 geth 節點內,我的帳戶地址的餘額似乎一直在增長,我認為這是挖礦的結果。

按照伊斯梅爾的指示,我添加genesis.jsonbyzantiumBlock定義,例如:

"config": {
   "chainId": 6035,
   "homesteadBlock": 0,
   "byzantiumBlock": 0 //added this
},

問題停止了。

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