Solidity问题查询合约账户余额(address(this).balance)报错

文章讲述了在Geth私链上查询合约账户余额时遇到错误,通过在Genesis.json中添加istanbulBlock配置解决。在Remix和Goerli上正常,解决方法是关闭节点并重启,应用新链配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值