0
点赞
收藏
分享

微信扫一扫

Solidity 问题汇总

七千22 2022-04-22 阅读 105
智能合约

1、查询合约账户余额(address(this).balance)报错

在自己的Geth私链上查询合约账户余额时报错,但是使用Remix的 Javascript VM 执行时正常,使用测试网络Goerli也正常,能够查看合约余额。

(1)执行函数

    //查询合约账户余额,使用view修饰符
    function getContractAccountBalance() public view returns (uint256){
        return address(this).balance;  //this为本合约对象
    }

(2)错误信息

 如图所示:

 

(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命令启用新的链配置。已测试,可以正常执行查询合约账户余额了

可参考:blockchain - Geth private network return error "invalid opcode: SELFBALANCE" when executing a simple contract - Stack Overflow

或官网:Private Networks | Go Ethereum

举报

相关推荐

0 条评论