개발 학습/블록체인
S4: Over/Under flow를 막아주는 SafeMath
StelthPark
2021. 11. 26. 14:47
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 라이브러리의 함수에서는 단순 연산의 결과값을 반환하기 때문에 상태 변수를 읽거나 쓰지 않습니다...