변수 시퀀스 - 2

우리는 이전에 단일 슬롯에 여러 변수를 맞추면 실행 시 가스가 절약되는 것을 보았습니다.

그러나 이 경우에는 예외가 있습니다.
이전 관찰을 기억해 봅시다. 다음 계약을 고려하십시오.

contract varSequence2_1{
    uint var1;
    uint var2;
    uint var3;

    function updateVar(uint num) external {
        var1 = num;
        var2 = num;
        var3 = num;
    }

}

contract varSequence2_2{
    uint8 var1;
    uint8 var2;
    uint8 var3;

    function updateVar(uint8 num) external {
        var1 = num;
        var2 = num;
        var3 = num;
    }

}

updateVar 함수 실행에 더 많은 가스 비용이 드는 계약은 무엇입니까? 추측했다면 varSequence2_1 맞습니다. 이것은 우리가 에서 본 것과 비슷합니다.

이제 다음 계약을 고려하십시오.

contract varSequence2_1{
    uint var1;
    uint var2;
    uint var3;

    function updateVar(uint num) external {
        var1 = num;
    }

}

contract varSequence2_2{
    uint8 var1;
    uint8 var2;
    uint8 var3;

    function updateVar(uint8 num) external {
        var1 = num;
    }

}


현재 어떤 계약이 updateVar 함수 실행에 더 많은 비용이 들 것이라고 생각하십니까? varSequence2_2가 됩니다. 그런데 왜 그렇습니까?

결론



이는 특정 요소를 찾아 스토리지 슬롯에서 가려야 할 때 opcode가 증가하기 때문에 관찰됩니다. 따라서 가스가 증가합니다.

좋은 웹페이지 즐겨찾기