2020.코딩일지
[solidity] library_SafeMath overflow (feat.솔리디티깨부수기) 본문
728x90
오버플로우
0.8버전 기준으로 이전과 이후를 비교
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
//40강
/*
library: 기본에 만들던 스컨과 다른 종류의 스컨이라 할 수 있다. 라이브러리를 사용함으로써 몇가지 이점과 제한사항이 있다.
이점
1. 재사용 : 블록체인에 라이브러리가 배포되면, 다른 스컨들에 적용가능.
2. 가스 소비 줄임 : 라이브러리는 재사용가능 한 코드,
즉 여러개의 스컨에서 공통으로 쓰이는 코드를 따로 라이브러리 통해서 배포하기에,
다른 스컨에 명시를 해주는 것이 아니라, 라이브러리를 적용만 하면 되기에 가스 소비량을 줄일 수 있다.
왜냐하면, 가스는 스컨의 사이즈/길이에 영향을 많이 받기 때문이다.
3. 데이터 타입 적용 : 라이브러리의 기능들은 데이터 타입에 적용할 수 있기에, 좀 더 쉽게 사용할 수 있다.
제한사항
1. fallback 함수 불가 : fallback함수를 라이브러리 안에 정의를 못하기때문에 이더를 갖고 있을 수 없다.
2. 상속불가
3. payable 함수 정의 불가
*/
//0.8 -> overflow revert
// overflow: 0~255 -> 257 -> 1
library SafeMath {
//0~255; 0.8이전버전에서는 합이 255가 넘으면 오버플로우가 발생.
// 0.8이후버전에서는 255가 넘으면 에러발생
// a:1 b:255 -> a+b= 256 -> (오버플로우로 0이됨)0 >= 1 -> false
// a:0 b:256 -> b에서 uint8이라 에러발생
function add(uint8 a, uint8 b) internal pure returns (uint8) {
require(a+b >= a, "SafeMath: addition overflow");
return a + b;
}
}
contract lec40 {
using SafeMath for uint8;
uint8 public a;
function becomeOverflow(uint8 _num1, uint8 _num2) public {
a = _num1.add(_num2);
//또는 아래와같이 쓸수있다.
//a = SafeMath.add(_num1, _num2);
//또는
//a = _num1 + _num2;
}
}
'Block Chain' 카테고리의 다른 글
[solidity] enum/interface (feat.솔리디티깨부수기) (0) | 2022.12.05 |
---|---|
[solidity] fallback과 receive (feat.솔리디티깨부수기) (0) | 2022.12.05 |
[solidity] payable/balance와 msg.sender (feat.솔리디티깨부수기) (0) | 2022.12.05 |
[solidity] modifier (feat.솔리디티깨부수기) (0) | 2022.12.05 |
[solidity] return/SPDX (feat.솔리디티깨부수기) (0) | 2022.12.05 |
Comments