오버플로우와 언더플로우는 계산이 변수의 데이터 유형 범위를 벗어날 때 발생하는 산술 오류입니다. 오버플로우는 최대값을 초과하여 최소값으로 감싸는 현상이 발생하고, 언더플로우는 최소값 아래로 떨어져 최대값으로 점프하는 현상이 발생합니다. 솔리디티 버전 0.8.0 이전에는 이러한 오류에 대한 내장 보호 기능이 없었기 때문에 SafeMath 라이브러리를 사용해야 했습니다. 솔리디티 0.8.0부터 컴파일러는 자동으로 이러한 오류를 확인하며, 이러한 오류를 만나는 트랜잭션은 "Panic" 오류와 함께 되돌아갑니다. 개발자가 계산이 안전하다고 알고 가스를 절약하려는 경우에 이러한 확인을 우회하는 데 사용할 수 있는 "unchecked" 블록이 있습니다. 주요 예방 방법은 솔리디티 >= 0.8.0을 사용하는 것입니다. 그러나 더 큰 데이터 유형에서 더 작은 데이터 유형으로 형변환할 때 조심해야 합니다. 조용한 래핑이 발생할 수 있기 때문입니다. 특정 저장 제약이 없는 경우 일반적으로 uint256을 사용하는 것이 좋습니다. 이는 매우 큰 값 범위를 제공하여 오버플로우의 위험을 줄주기 때문입니다.
dev.to
Ethereum-Solidity Quiz Q29: What is an Overflow/Underflow?
