首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Ether.js库获得合同的余额

如何使用Ether.js库获得合同的余额
EN

Ethereum用户
提问于 2022-02-02 18:37:53
回答 2查看 739关注 0票数 0

当我使用(await provider.getBalance(contractAddress)).toNumber()时,我得到了零的余额。在此之前,我已经派了1以太去签订智能合同。我做错了什么?

EN

回答 2

Ethereum用户

发布于 2022-02-02 19:20:48

我不是JavaScript专家,但我认为问题是您使用.toNumber()来实现承诺(因为.toNumber()将立即运行,而不是等待承诺返回),这将是未定义的(或者我猜是0?)

我认为这样做是可行的:

代码语言:javascript
运行
复制
numStr = await provider.getBalance(contractAddress);
number = parseInt(numStr);

在这里,number将是一个整数的余额,所以您应该期望‘数= 1000000000000000000’

如果你想用乙醚,你可以

代码语言:javascript
运行
复制
numStr = await provider.getBalance(contractAddress);
wei = parseInt(numStr);
ether = web3.utils.fromWei(wei, "ether");

很明显,ether应该是1

票数 1
EN

Ethereum用户

发布于 2023-02-28 04:35:06

EthersJS将平衡作为BigNumber类的一个对象存储在卫中。toNumber()试图将输入(在您的例子中)转换为Integer,这还不足以容纳一个在Wei中表示的ETH。Ethereum中的许多操作操作的数字超出了在JavaScript中使用的安全值的范围。

1ETH = 1000000000000000000韦特(vs MAX_SAFE_INTEGER为9007199254740991,见下文)

代码语言:javascript
运行
复制
console.log(Number.MAX_SAFE_INTEGER);
// Expected output: 9007199254740991

如果您试图简单地显示余额,则可以将其转换为String

代码语言:javascript
运行
复制
(await provider.getBalance(contractAddress)).toString()

将返回1000000000000000000

BigNumber是一个安全地允许对任意大小的数字进行数学运算的对象。下面是操作方法的常用BigNumber类列表

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/120605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档