使用Truffle MetaCoin Box开发时,前端获取账户余额出现异常超大数值
解决Truffle MetaCoin Box前端获取账户余额显示超大数值的问题
我一眼就看出问题出在哪了——你完全混淆了以太坊的单位概念!
Truffle测试里打印的10000、9990是ether单位,但web3.eth.getBalance()返回的数值默认是wei单位(1 ether = 10^18 wei),你直接用.toNumber()拿到的其实是10000*10^18这种天文数字,自然看起来异常超大。
给你调整下前端代码,把wei转换成ether就正常了:
var coinbase = web3.eth.coinbase; var balanceWei = web3.eth.getBalance(coinbase); // 将wei转换为ether单位后再转数字 var balance = web3.utils.fromWei(balanceWei, 'ether').toNumber();
如果想写得更简洁也可以这样:
var coinbase = web3.eth.coinbase; var balance = web3.utils.fromWei(web3.eth.getBalance(coinbase), 'ether').toNumber();
另外补充个细节:如果你用的是Web3.js v1.x版本,web3.eth.getBalance()返回的是Promise,异步场景下得用await处理才不会出问题,正确写法参考:
async function fetchBalance() { const coinbase = await web3.eth.getCoinbase(); const balanceWei = await web3.eth.getBalance(coinbase); const balance = web3.utils.fromWei(balanceWei, 'ether'); console.log(balance); } fetchBalance();
这样处理后,你得到的数值就会和测试里显示的完全一致了。
内容的提问来源于stack exchange,提问作者tic30
相关产品推荐
相关产品推荐

