Gas Golf | Solidity 0.8

แชร์
ฝัง
  • เผยแพร่เมื่อ 1 ธ.ค. 2024

ความคิดเห็น • 41

  • @akshaytarpara5025
    @akshaytarpara5025 2 ปีที่แล้ว +22

    This can more gas optimized by adding unchecked overflow i increment. I added one more optimization in your code.
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.10;
    // 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
    // unchecked i increment overflow - 47645 gas
    uint 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(uint[] calldata nums) external {
    uint _total = total;
    uint len = nums.length;
    for (uint i = 0; i < len; i=unchecked_inc(i)) {
    uint num = nums[i];
    if (num % 2 == 0 && num < 99) {
    _total += num;
    }
    }
    total = _total;
    }
    function unchecked_inc(uint i) internal pure returns(uint){
    unchecked {
    i++;
    }
    return i;
    }
    }

    • @sirstroopwafel
      @sirstroopwafel 2 ปีที่แล้ว

      this is awesome, can you explain what does it mean to be unchecked?

    • @akshaytarpara5025
      @akshaytarpara5025 2 ปีที่แล้ว +1

      @@sirstroopwafel from the solidity 0.8.0 inbuilt checking overflow/underflow condition on arithmetic operations. In this example, there is already declaration of the variable "i" is not greater than the array length, that's why "i" will never overflow from the Uint. So we can simply bypass the overflow/underflow condition by using "unchecked" method.

    • @sirstroopwafel
      @sirstroopwafel 2 ปีที่แล้ว

      @@akshaytarpara5025 I see, thank you!

    • @eduardobenitez6376
      @eduardobenitez6376 2 ปีที่แล้ว

      Awesome observation. Thanks!

  • @Morais479
    @Morais479 2 ปีที่แล้ว +11

    Your videos are absolutely amazing. The best to do it, and there is no way I can show how much your videos have helped me grow as a Solidity dev. All the best to you and keep up the great work!!!

  • @Sydra.
    @Sydra. 2 ปีที่แล้ว +1

    Hahh! I watched all 62 videos. You are the best!

  • @matteotambussi
    @matteotambussi 2 ปีที่แล้ว +2

    this channel is definitely a public good.

  • @jungwoolee3198
    @jungwoolee3198 2 ปีที่แล้ว

    You're genius at Solidity. Best courses I've ever seen so far. Thank you.

  • @eltucangaming8332
    @eltucangaming8332 2 ปีที่แล้ว

    you help me growing up as a solidity dev, thanks you are the real MVP

  • @dev.regotube
    @dev.regotube 2 ปีที่แล้ว +3

    Another technique is to disable safemath by using unchecked. For example the variable i will never overflow.

  • @joaovictorrabelo4751
    @joaovictorrabelo4751 2 ปีที่แล้ว

    Thank you very much for all that knowledge!

  • @isk_explains6676
    @isk_explains6676 2 ปีที่แล้ว

    Thank you for your great efforts.

  • @Ts2pc
    @Ts2pc 2 ปีที่แล้ว

    A real Engineer!

  • @MDobreff
    @MDobreff 2 ปีที่แล้ว

    Great video, thanks!

  • @kahuna2588
    @kahuna2588 10 หลายเดือนก่อน

    even more gas can be saved by using "continue" in the for loop

  • @gregoriocasas3259
    @gregoriocasas3259 2 ปีที่แล้ว

    neat as always

  • @salem232
    @salem232 2 ปีที่แล้ว

    As awesome as alwasy!!! 😍

  • @鹊桥仙-p9o
    @鹊桥仙-p9o 2 ปีที่แล้ว

    so damn good

  • @kimtiller
    @kimtiller 2 ปีที่แล้ว

    Thank you 💕

  • @oliverli9630
    @oliverli9630 2 ปีที่แล้ว

    good trick!

  • @personallisten4105
    @personallisten4105 2 ปีที่แล้ว

    thank you for your technique

  • @hurdurstudy295
    @hurdurstudy295 2 ปีที่แล้ว

    hey man, great video !!

  • @muhanadtur8785
    @muhanadtur8785 2 ปีที่แล้ว

    great content dude!

  • @KirillDvoretskov
    @KirillDvoretskov 2 ปีที่แล้ว

    🤙👍

  • @MrCoreyTexas
    @MrCoreyTexas 5 หลายเดือนก่อน

    In C, instead of x % 2 you can do x & 1 (for odd numbers this evaluates to 1 or true), so you do a bitwise and instead of a division, but I don't know if Solidity does bit twiddling stuff though.

  • @Yash-qe3bv
    @Yash-qe3bv 2 ปีที่แล้ว

    great vid! I'm another wannabe optimizoor! by the way video recommendation: writing assembly? if you don't already have one! keep up the good work!

  • @vanensurya506
    @vanensurya506 2 ปีที่แล้ว

    Awasome dude (y)

  • @mosipvp
    @mosipvp 2 ปีที่แล้ว

    awesome as always.
    type of allocation into the functions are STACK, and put data in air. true?

    • @smartcontractprogrammer
      @smartcontractprogrammer  2 ปีที่แล้ว

      put data in air? what that does mean?

    • @mosipvp
      @mosipvp 2 ปีที่แล้ว

      @@smartcontractprogrammer like memory

  • @ПавелГорбушин-м7з
    @ПавелГорбушин-м7з 2 ปีที่แล้ว

    👍 why ++i and not i++ here?

  • @jairofraga2606
    @jairofraga2606 2 ปีที่แล้ว +1

    Does anyone know why it is called golf?

    • @tskn6547
      @tskn6547 2 ปีที่แล้ว +7

      Golf - Lower score is better
      Gas - Lower gas is better

    • @jairofraga2606
      @jairofraga2606 2 ปีที่แล้ว

      @@tskn6547 Oh, makes sense now. Thank you!

  • @gr3it
    @gr3it 2 ปีที่แล้ว

    Why did you used ++i instead of i++ in the for loop?

  • @gaetboot
    @gaetboot 2 ปีที่แล้ว

    So we are sacrificing readability over gas efficiency...
    That's a bit sad :(

    • @smartcontractprogrammer
      @smartcontractprogrammer  2 ปีที่แล้ว

      Yeah it's a balancing act

    • @gaetboot
      @gaetboot 2 ปีที่แล้ว

      @@smartcontractprogrammer Maybe in the future there will be compiler to automatically transform it into the most gas efficient code!