Solidity unchecked

Solidity 0.8.0 버전부터 SafeMath가 기본적으로 적용된다. 계산을 할 때마다 오버플로우가 발생하지 않았는 지 확인한다. 이를 확인하는 데에는 가스를 소모한다. 오버플로우가 발생하지 않을 것을 확신하는 상황에서 이를 중복 확인하는 것은 낭비적이다. 이러한 상황에는 unchecked를 이용한다. unchecked 스코프 내의 코드에는 SafeMath를 적용하지 않는다.

unchecked 내에서 함수 호출 시

contract Test {
    uint256 public var1;
    function func1() public {
 
        var1 ++;
 
        unchecked{
            var1++;
            internalFunc1();
        }
    }
 
    function internalFunc1() internal  {
        var1 ++;
    }
}

위와 같이 unchecked 에서 함수를 호출한 경우, internalFunc1 에서는 SafeMath가 적용된다. 함수 코드가 분리되어 있고, JMP로 이동하니까… (bytecode 레벨에서 생각해보라)


tags: blockchain, smart contract, solidity, solidity safemath, gas optimization