Solidity
這個傳遞函式程式碼是否容易受到整數溢出的影響?
我一直在 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,但它存在。