問題一覧に戻る
上級ガス最適化
問題85: ショートサーキットの活用
Solidityのショートサーキット評価を学習 - 条件ロジックのガス効率最適化。論理演算子(&&と||)は結果が確定した時点で評価を停止。安い条件を先に置くことで、高価な操作を回避してガスを節約できます。この最適化は複雑な検証ロジック、アクセス制御、複数条件を持つ任意の関数に重要。適切な順序付けは平均ガスコストを大幅に削減できます。
pragma solidity ^0.8.0;
contract ShortCircuit {
mapping(address => uint256) public balances;
mapping(address => bool) public authorized;
// 高価な操作
function expensiveCheck(address user) internal view returns (bool) {
// 高価な計算
return balances[user] > 1000 ether;
}
// 非効率:高価なチェックが先
function badValidation(address user) public view returns (bool) {
return expensiveCheck(user) authorized[user];
}
// 効率的:安いチェックが先
function goodValidation(address user) public view returns (bool) {
return authorized[user] expensiveCheck(user);
}
// 複雑な条件の順序付け
function complexCheck(address user, uint256 amount) public view returns (bool) {
return user != address(0)
amount > 0
balances[user] >= amount
;
}
// 最適化されたrequire文
function optimizedRequire(address user, uint256 amount) public view {
// 計算コストで順序付け
require(user != address(), "Zero address");
require(amount > , "Zero amount");
require(balances[user] >= , "Insufficient balance");
require(, "Not authorized");
}
}