본문 바로가기
개발 학습/블록체인

S4: Over/Under flow를 막아주는 SafeMath

by StelthPark 2021. 11. 26.

Safe Math 구조

library SafeMath {
  	function mul(uint256 a, uint256 b) internal pure returns (uint256) {
		uint256 c = a * b;
		assert(a == 0 || c / a == b);
		return c;
  	}

  	function div(uint256 a, uint256 b) internal pure returns (uint256) {
	    uint256 c = a / b;
		return c;
  	}

  	function sub(uint256 a, uint256 b) internal pure returns (uint256) {
		assert(b <= a);
		return a - b;
  	}

  	function add(uint256 a, uint256 b) internal pure returns (uint256) {
		uint256 c = a + b;
		assert(c >= a);
		return c;
	}
}

 

자료형 uint256에 대해서 SafeMath 라이브러리를 사용하도록 선언할 수있다.

 using SafeMath for uint256;

 

함수내에서 연산자 + 와 -가 사용되는 부분을 안전한 연산자로 바꿀 수 있다.

만약 오버/언더 플로가 발생한면 require문에서 제어하여 오류메세지가 나타나게 된다.

 

SafeMath문에서 internal과 pure

  • internal은 함수가 컨트랙트 내부에서만 사용될 수 있도록 제한할 때 사용합니다.
  • pure 는 함수가 상태 변수를 읽거나 쓰지 않을 때 사용합니다. SafeMath 라이브러리의 함수에서는 단순 연산의 결과값을 반환하기 때문에 상태 변수를 읽거나 쓰지 않습니다...

댓글