問題一覧に戻る
上級セキュリティパターン
問題76: オーバーフロー対策
Solidityの整数オーバーフロー/アンダーフロー保護を学習します - バージョン0.8.0以降は自動です。0.8以前は、算術演算が無言でラップアラウンドし、重大な脆弱性を引き起こす可能性がありました。SafeMathライブラリが安全な計算に不可欠でした。現在Solidityはオーバーフロー時に自動的にリバートし、デフォルトでコントラクトをより安全にします。uncheckedブロックはオーバーフローが不可能な場合のガス最適化のためにこれらのチェックをバイパスします。
pragma solidity ^0.8.0;
contract OverflowProtection {
// Solidity 0.8+:自動オーバーフロー保護
function safeAdd(uint256 a, uint256 b)
public pure returns (uint256) {
// 自動的に安全
return a b;
}
// ガス最適化のためチェックを無効化
function unsafeAdd(uint256 a, uint256 b)
public pure returns (uint256) {
{
return a + b;
}
}
// レガシー:手動SafeMathパターン
function legacySafeAdd(uint256 a, uint256 b)
public pure returns (uint256) {
uint256 c = a + b;
(c >= a, "Overflow!");
return c;
}
}