Solidity
檢查 msg.value > 0 的原因
我遇到了已發布的智能合約(比如來自 ConsensSys 的這個),它檢查
msg.value
其應付函式是否嚴格大於零。在想知道是否
msg.value
可以否定之後,我發現這個問題的答案說不可能。因此,這些檢查對我來說似乎是不必要的。這是為了確保不會成為另一個負交易價值漏洞的受害者嗎?零價值交易會構成威脅嗎?
一般來說,
0
價值交易不會構成威脅。然而,在實踐中,不接受不包含任何價值的交易是合乎邏輯的,尤其是在其全部目的是轉移價值的交易中。由於與所有其他數字相比的唯一性,許多實現要求
value
大於這樣做。例如,有人這樣做是因為它可能是邏輯流程中某個點的等式中的除數,這會拋出(因為你不能除以 0)。0``0``value
在 ERC20 標準的設計過程中,關於如果沒有代幣轉移交易失敗的問題進行了長時間的討論。最終決定價值交易沒有問題
0
,並且遵循規範的代幣允許這樣做。