Web3.eth.getBalance(...)。toNumber()返回巨大的数字

时间:2018-03-21 07:50:01

标签: javascript ethereum truffle web3

我在松露开发模式下使用Truffle MetaCoin框。前端试图获得一个帐户的余额,但得到一个巨大的数字。

前端代码如下:

var coinbase = web3.eth.coinbase;
var balance = web3.eth.getBalance(coinbase).toNumber();

更具体地说,默认情况下,第一个帐户松露生成应该有10k余额。运行一个测试后,如上面的链接。它的余额应该是9990.如果我在测试文件中console.log,它就能正常工作。

但我从前端得到的balance变量是100000000000000000000。经过测试,它变为99917820100000000000.这个差别显然不是10或其指数。

为什么以及如何解决这个问题?

被修改

有关余额的错误。修正如上。

2 个答案:

答案 0 :(得分:3)

它只显示wei或ether * 10^18中的余额,换句话说,而不是.000000000000000001以太显示1

如果您想要整数,则将所有内容除以1e18,这很可能是为了避免浮点错误。根据他们的文档,测试帐户以10个以太网和10,000个MetaCoins开头,这是你的困惑所在。

你的第二个号码不是9990000的原因是因为交易费

答案 1 :(得分:2)

web3.eth.getBalance()以wei的形式返回帐户的以太币余额。以太有10 ^ 18 wei。 100000000000000000000 wei是10以太,我想这是您本地测试网络中默认的帐户余额。 99917820100000000000可能是为您运行的测试案例支付燃气后剩余的乙醚量。

您希望看到余额为10,000,因为您正在考虑应该由该帐户拥有的 MetaCoins 的数量。 (这与以太的数量无关。)

要获取MetaCoin的数量,您需要在balanceOf(account)合约上调用MetaCoin。如果您查看测试代码,您将会看到它检查帐户的MetaCoin余额所做的工作。