我在松露开发模式下使用Truffle MetaCoin框。前端试图获得一个帐户的余额,但得到一个巨大的数字。
前端代码如下:
var coinbase = web3.eth.coinbase;
var balance = web3.eth.getBalance(coinbase).toNumber();
更具体地说,默认情况下,第一个帐户松露生成应该有10k余额。运行一个测试后,如上面的链接。它的余额应该是9990.如果我在测试文件中console.log
,它就能正常工作。
但我从前端得到的balance
变量是100000000000000000000。经过测试,它变为99917820100000000000.这个差别显然不是10或其指数。
为什么以及如何解决这个问题?
被修改
有关余额的错误。修正如上。
答案 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余额所做的工作。