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