Skip to content

Latest commit

 

History

History
52 lines (39 loc) · 1.58 KB

File metadata and controls

52 lines (39 loc) · 1.58 KB

16. ShortCircuit

运行

根据Foundry 官方文档配置好运行环境后,于本项目下执行下列命令,即可看到实际 gas 差异对比。

forge test --contracts 16_ShortCircuit/ShortCircuit.t.sol --gas-report

功能简述

短路是一种常用的编程技术,在Solidity中,这种技术同样适用,并且可以有效地用于节省gas。短路发生在使用逻辑AND(&&)和逻辑OR(||)操作符时。

在一个逻辑表达式中:

  • 对于逻辑AND(&&),如果第一个条件为false,则不会评估第二个条件,因为整个表达式已经确定为false
  • 对于逻辑OR(||),如果第一个条件为true,则不会评估第二个条件,因为整个表达式已经确定为 true

DemoCode

下面示例中,调用 shortCircuit() 函数比调用 normal() 函数每次节省 123162 gas:

contract ShortCircuit {
    function f() public pure returns (bool res) {
        uint result;
        for (uint256 i; i < 1000; i++) {
            result += 1;
        }
        res = true;
    }

    function g() public pure returns (bool res) {
        res = true;
    }

    // no short circuit: high gas 123,282 
    function normal() external pure {
        f() || g();
    }

    // lower gas: 120
    function shortCircuit() external pure {
        g() || f();
    }
}
数据类型 gas 消耗 节省 结果
normal 123282
shortCircuit 120 123162 ✅ 建议