私有链交易时账户余额归零问题已解决:web3声明错误所致
解决Truffle私有网络中Metamask/Mist显示余额与实际交易余额不符的问题
我之前用Truffle搭建私有网络时,碰到过一个特别头疼的问题:Metamask和Mist明明都显示我的账户有100ETH,但实际发起交易的时候,系统却提示我账户余额为0!
因为我部署的合约逻辑比较复杂,一开始根本找不到问题根源。我试了各种常规操作:
- 重启Truffle节点
- 多次重新编译并部署合约
- 甚至把Metamask卸载重装了好几次
结果这些操作全都不管用,问题依然存在。
后来终于找到问题所在了:我在代码里错误地声明了this.web3,而不是直接使用全局的web3。
在Truffle的开发环境中,全局的web3对象已经被正确初始化,并且和你的私有网络节点建立了连接,能正确读取到账户的真实余额。但如果错误地使用this.web3,相当于创建了一个未正确配置的web3实例,这个实例并没有连接到你的私有网络,自然无法获取到正确的账户余额信息——交易时系统用这个错误的实例去校验余额,就会出现“余额为0”的提示,而Metamask/Mist是直接连接到私有网络节点读取的余额,所以显示正常。
如果你们也碰到类似的问题,除了常规的重启、重装操作,一定要先检查web3实例的初始化是否正确,别在变量声明上踩了坑!
内容的提问来源于stack exchange,提问作者Blacknex
相关产品推荐
相关产品推荐

