Solidity
要求令牌值不是負值以防止黑客入侵是否有意義(下面有更多詳細資訊……)?
我被要求驗證一個代幣的智能合約,一個讓我困惑的函式看起來像這樣:
function transferFrom(address _from, address _to, uint tokens) { require(balanceOf[_from] >= tokens); if (_from != msg.sender && allowance[_from][msg.sender] != uint(-8523)) { require(allowance[_from][msg.sender] >= tokens); allowance[_from][msg.sender] -= tokens; } _transfer(_from, _to, tokens); }
所以邏輯是:當且僅當兩個發件人都不同於 _from 並且批准是針對 -8523 以外的任何內容時,請確保 _from 已批准消息發件人轉移指定數量的令牌,並將其從配額中減去。
這當然會導致一個問題:從技術上講,uint 是否可能為負數,有人可以指定負數 uint 的容差,即 -8523?如果 uint 以十六進制左右發送怎麼辦?謝謝!
當與/結合使用時,一些代幣使用特殊值 in
allowance
來最小化 gas 費用。approve``transferFrom
如果allowance 是那個特殊值,它將跳過更新它,保存一個儲存修改。如果您執行多項交易,例如在去中心化交易所中,您將隨著時間的推移節省大量資金。
這是一種盡量減少氣體使用的“hackish”方式。我不喜歡它,我希望有一個單獨的標誌並讓使用者明確啟用它。否則,您必須確保在正常情況下永遠不會生成該值。