1、查询合约账户余额(address(this).balance)报错
在自己的Geth私链上查询合约账户余额时报错,但是使用Remix的 Javascript VM 执行时正常,使用测试网络Goerli也正常,能够查看合约余额。
(1)执行函数
//查询合约账户余额,使用view修饰符
function getContractAccountBalance() public view returns (uint256){
return address(this).balance; //this为本合约对象
}
(2)错误信息
call to functionModifier.getContractAccountBalance
call to functionModifier.getContractAccountBalance errored: Internal JSON-RPC error.
{
"code": -32000,
"message": "invalid opcode: SELFBALANCE"
}
如图所示:
(3)解决方案
在genesis.json中的config增加 ”istanbulBlock“设置,如下所示:{
"config": {
"chainId": 1422,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock":0,
"ethash": {}
},
"difficulty": "1",
"gasLimit": "8000000",
"alloc": {
"7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
"f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
}
}
关闭所有节点,重新运行init命令启用新的链配置。已测试,可以正常执行查询合约账户余额了