如果我想检查付款人是否有足够的资金,我应该使用.
msg.sender.balance 或
balances[msg.sender] ?
我还看到,人们通常以下列方式检查平衡:
require((balances[msg.sender] + msg.value) >= balances[msg.sender]);我想我错过了什么,因为对我来说最合乎逻辑的方法是:
require(msg.sender.balance >= msg.value );提前感谢!
发布于 2020-12-22 17:57:12
我想我错过了什么
你肯定遗漏了什么--这是两种不同的平衡:
msg.sender.balance是msg.sender的乙醚平衡balances[msg.sender]是msg.sender的令牌平衡。后者仅在维护存储变量的合同中有效(可以编译):
mapping (address => uint) balances或继承这类合同的合同(通常是象征性合同)。
发布于 2020-12-23 06:28:53
它们是两种不同的东西。
msg.sender.balance是协议级的均衡.
balances[msg.sender将是数组或映射中包含数据的元素,通常是用于内部会计目的的数字。
例如,如果您有一个为用户保存ETH的自动取款机合同,则像mapping(address => uint) balances这样的映射可以为所有储户保存余额信息,而手头上的全部ETH都在address(this).balance中。
用户在系统之外的钱将在msg.sender.balance中支付,但这可能与此无关。这将不是重要的检查,以确保用户没有发送更多的钱,因为协议处理这一点。
这将是至关重要的检查用户没有取款比合同的内部会计说,他们有权,因为合同将有更多的钱比个人用户应该得到。
希望能帮上忙。
https://ethereum.stackexchange.com/questions/91416
复制相似问题