Solidity
檢查餘額的最佳方法?msg.sender.balance 與餘額米克__.發送___呃_米sG.s和nd和rmsg.sender
如果我想檢查付款人是否有足夠的資金,我應該使用…
msg.sender.balance
或者
balances[msg.sender]
?
我還看到人們通常通過以下方式檢查餘額:
require((balances[msg.sender] + msg.value) >= balances[msg.sender]);
我想我錯過了一些東西,因為對我來說最合乎邏輯的方式是:
require(msg.sender.balance >= msg.value );
提前致謝!
我想我錯過了什麼
你肯定錯過了一些東西——這是兩種不同的平衡:
msg.sender.balance
是乙太餘額msg.sender
balances[msg.sender]
是的代幣餘額msg.sender
後者僅在維護儲存變數的合約中有效(可以編譯):
mapping (address => uint) balances
或者在繼承此類合約的合約中(通常是代幣合約)。
他們是兩個不同的東西。
msg.sender.balance
是協議級別的乙太坊餘額。
balances[msg.sender
將是包含數據的數組或映射中的元素,通常是用於內部會計目的的數字。例如,如果您有一個為使用者保存 ETH 的 ATM 合約,則映射
mapping(address => uint) balances
可以保存所有存款人的餘額資訊,而手頭的 ETH 總量將全部在address(this).balance
.使用者在系統外的錢會在裡面,
msg.sender.balance
但這可能不相關。檢查使用者沒有發送比他們擁有的更多的錢並不重要,因為協議會處理這個問題。至關重要的是,檢查使用者提款的金額是否超出契約內部會計規定的金額,因為契約中的可用資金超過了個人使用者應收到的金額。
希望能幫助到你。