Go-Ethereum
來自不同契約的 geth 呼叫功能不起作用,ganache 和 remix 工作
我正在嘗試從另一個合約呼叫合約函式,使用
web3.js
.當使用
ganache
或remix
一切正常時:web3.js
返回觸發的事件和使用的氣體(本例中為 33938)以及契約中的相關欄位正在更改。但是,當我使用
geth
上述所有工作時,但前提是我不呼叫另一個合約的函式。這樣做時,不會返回事件,不會更改欄位,並且返回的氣體是 90000 或我在 web3
send
選項中發送的氣體(例如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.json
了byzantiumBlock
定義,例如:"config": { "chainId": 6035, "homesteadBlock": 0, "byzantiumBlock": 0 //added this },
問題停止了。