블록체인

[ethereum] solidity overflow, underflow에 대해서

멍개. 2022. 8. 28. 07:23

solidity 8.x부터 overflow, underflow가 발생하는 연산은 revert가 발생합니다.

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.10;

contract Test {
    function f(uint a, uint b) pure public returns(uint) {
        return a - b;
    }
}

0에서 1을 감소하면 underflow가 발생하기 때문에 revert가 발생합니다.

만약 의도적인 underflow를 발생해야 한다면 unchecked를 이용하면 됩니다.

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.10;

contract Test {
    function g(uint a, uint b) pure public returns(uint) {
        unchecked { return a - b; }
    }
}