Siblearn Academy siblearn academy

Gas Saving Techniques

برخی از تکنیک های صرفه جویی در گاز

  • جایگزین کردن حافظه با داده های تماس
  • در حال بارگذاری متغیر حالت در حافظه
  • برای حلقه جایگزین کنید i ++ با ++ i
  • ذخیره عناصر آرایه
  • مدار کوتاه

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

// gas golf
contract GasGolf {
    // start - 50908 gas
    // use calldata - 49163 gas
    // load state variables to memory - 48952 gas
    // short circuit - 48634 gas
    // loop increments - 48244 gas
    // cache array length - 48209 gas
    // load array elements to memory - 48047 gas
    // uncheck i overflow/underflow - 47309 gas

    uint256 public total;

    // start - not gas optimized
    // function sumIfEvenAndLessThan99(uint[] memory nums) external {
    //     for (uint i = 0; i < nums.length; i += 1) {
    //         bool isEven = nums[i] % 2 == 0;
    //         bool isLessThan99 = nums[i] < 99;
    //         if (isEven && isLessThan99) {
    //             total += nums[i];
    //         }
    //     }
    // }

    // gas optimized
    // [1, 2, 3, 4, 5, 100]
    function sumIfEvenAndLessThan99(uint256[] calldata nums) external {
        uint256 _total = total;
        uint256 len = nums.length;

        for (uint256 i = 0; i < len;) {
            uint256 num = nums[i];
            if (num % 2 == 0 && num < 99) {
                _total += num;
            }
            unchecked {
                ++i;
            }
        }

        total = _total;
    }
}

روی محیط توسعه ی Remix امتحان بکنید

  • GasGolf.sol
  • بازگشت به لیست