【问题标题】:Web3.eth.getBalance(...).toNumber() returns huge numberWeb3.eth.getBalance(...).toNumber() 返回巨大的数字
【发布时间】:2018-03-21 07:50:00
【问题描述】:

我在 truffle development 模式下使用 Truffle MetaCoin box。前端试图获取一个帐户的余额,但得到一个巨大的数字。

前端代码如下:

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

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

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

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

已编辑

余额有误。固定在上面。

【问题讨论】:

  • 您能否说明您对代币余额或以太币余额感兴趣?似乎两者之间可能存在混淆。您正在测量以太币余额(100000000000000000000 wei 是 10 以太币,而 99835640200000000000 可能是为某些测试用例支付 gas 后的以太币余额)。
  • 交易费用
  • 交易费6.43598?根据文档,返回值以 wei 为单位,因此它是一个大整数:github.com/ethereum/wiki/wiki/JavaScript-API#web3ethgetbalance
  • @Ryan 但 OP 目前没有使用真正的以太坊区块链

标签: javascript ethereum truffle web3


【解决方案1】:

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

如果您想要整数,则将所有内容除以 1e18,它很可能这样做是为了避免浮点错误。根据他们的文档,一个测试账户从 10 个以太币和 10,000 个元币开始,这就是你的困惑所在。

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

【讨论】:

  • 感谢您指出1e16 问题。但我注意到一件事,我实际上运行了测试两次。经过一次测试,余额为9991.78201,大于9990。这是有线的。为什么gas费之后,它会变得更多?
【解决方案2】:

web3.eth.getBalance()返回账户的以太币余额,单位为wei。一个以太中有 10^18 wei。 100000000000000000000 wei 是 10 以太币,我想这是您本地测试网络中账户的默认起始余额。 99917820100000000000 大概是为您运行的测试用例支付 gas 后剩余的以太量。

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

要获得元币的数量,您需要在MetaCoin 合约上调用balanceOf(account)。如果您查看测试代码,您会看到它正在检查帐户的 MetaCoin 余额。

【讨论】:

    猜你喜欢
    • 2019-07-19
    • 2022-01-15
    • 2020-02-06
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    相关资源
    最近更新 更多