Solidity

這個傳遞函式程式碼是否容易受到整數溢出的影響?

  • November 10, 2022

我一直在 etherscan.io 上進行一些 bug 搜尋,並且遇到了許多使用這種程式碼的契約。具體來說,那些不使用安全數學庫的,比solidity 0.8 更舊,並且不明確檢查溢出。有人可以告訴我這段程式碼是否正常且安全,或者是否應該在審計中將其標記為易受攻擊。如果它是脆弱的,那麼嚴重性是什麼?它可以用來破壞智能合約的代幣餘額。

function transfer(address _to, uint256 _value) returns (bool success) {
       require(balances[msg.sender] >= _value);
       balances[msg.sender] -= _value;
       balances[_to] += _value;
       Transfer(msg.sender, _to, _value);
       return true;
   }

提前致謝。

由於solidity 0.8,內置了溢出檢查。檢查文件

溢出檢查非常常見,因此我們將它們設為預設值以提高程式碼的可讀性,即使它會稍微增加 gas 成本。

對於您的問題-是的,程式碼已保存。

要完成 Hristo,如果 <0.8 那麼由於您使用 require 進行了檢查,因此您可以避免下溢。

對於溢出,風險很低,因為您使用的是 Uint256,但它存在。

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