Solidity

要求令牌值不是負值以防止黑客入侵是否有意義(下面有更多詳細資訊……)?

  • November 19, 2019

我被要求驗證一個代幣的智能合約,一個讓我困惑的函式看起來像這樣:

    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 以十六進制左右發送怎麼辦?謝謝!

當與/結合使用時,一些代幣使用特殊值 inallowance來最小化 gas 費用。approve``transferFrom

如果allowance 是那個特殊值,它將跳過更新它,保存一個儲存修改。如果您執行多項交易,例如在去中心化交易所中,您將隨著時間的推移節省大量資金。

這是一種盡量減少氣體使用的“hackish”方式。我不喜歡它,我希望有一個單獨的標誌並讓使用者明確啟用它。否則,您必須確保在正常情況下永遠不會生成該值。

引用自:https://ethereum.stackexchange.com/questions/77598