首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最好的检查平衡的方法?msg.sender.balance vs balances[msg.sender]

最好的检查平衡的方法?msg.sender.balance vs balances[msg.sender]
EN

Ethereum用户
提问于 2020-12-22 17:10:57
回答 2查看 1.8K关注 0票数 2

如果我想检查付款人是否有足够的资金,我应该使用.

代码语言:javascript
复制
 msg.sender.balance 

代码语言:javascript
复制
balances[msg.sender] 

我还看到,人们通常以下列方式检查平衡:

代码语言:javascript
复制
require((balances[msg.sender] + msg.value) >= balances[msg.sender]);

我想我错过了什么,因为对我来说最合乎逻辑的方法是:

代码语言:javascript
复制
require(msg.sender.balance >= msg.value );

提前感谢!

EN

回答 2

Ethereum用户

回答已采纳

发布于 2020-12-22 17:57:12

我想我错过了什么

你肯定遗漏了什么--这是两种不同的平衡:

  • msg.sender.balancemsg.sender的乙醚平衡
  • balances[msg.sender]msg.sender的令牌平衡。

后者仅在维护存储变量的合同中有效(可以编译):

代码语言:javascript
复制
mapping (address => uint) balances

或继承这类合同的合同(通常是象征性合同)。

票数 5
EN

Ethereum用户

发布于 2020-12-23 06:28:53

它们是两种不同的东西。

msg.sender.balance是协议级的均衡.

balances[msg.sender将是数组或映射中包含数据的元素,通常是用于内部会计目的的数字。

例如,如果您有一个为用户保存ETH的自动取款机合同,则像mapping(address => uint) balances这样的映射可以为所有储户保存余额信息,而手头上的全部ETH都在address(this).balance中。

用户在系统之外的钱将在msg.sender.balance中支付,但这可能与此无关。这将不是重要的检查,以确保用户没有发送更多的钱,因为协议处理这一点。

这将是至关重要的检查用户没有取款比合同的内部会计说,他们有权,因为合同将有更多的钱比个人用户应该得到。

希望能帮上忙。

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

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

复制
相关文章

相似问题

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