티스토리 뷰

솔리디티(solidity) - overflow,underflow 방지 SafeMath

 솔리디티(solidity) 에서도 마찬가지로 오버플로(overflow) 와 언더플로우(underflow)가 발생할 수 있다. uint16 등이 표현할 수 있는 최대치에 +1을 해주게되면 0이되거나 0에서 -1을 해주면 최대치가 되는 경우가 바로 그 경우입니다.

solidity SafeMath

 이럴 경우에 사용할 수 있는 것이바로 SafeMath 라이브러리(Library) 입니다. 라이브러리는 솔리디티에서 특수한 contract입니다. uint같은 데이터 형식에 함수를 사용할 수 있게됩니다. (ex, 100.add(1) ) 

 그리고 라이브러리를 사용할 때는 using 키워드를 사용합니다. 여기서는 using SafeMath for uint256 이런식으로 사용합니다.

 여기서 보면 assert 구문을 사용한 것을 알 수 있습니다. assert 구문은 SafeMath에서 오버,언더 플로우를 방지해주는 역할을 하게 됩니다. 사실 assert는 조건이 성립되지 않을시 error를 일으키게 됩니다. 뭐랑 비슷한것 같죠? 맞습니다. require랑 비슷해보입니다. 이 둘의 차이점은 바로 가스소모에있습니다. require는 가스를 돌려주지만, assert는 가스를 되돌려주지 않습니다. 

add sub

 사용 예시는 위와 같습니다. uint형에 바로 .을 붙여서 add나 sub, mul, div를 사용하면 안전하게 연산을 수행할 수 있습니다.

 주석

 주석 다는 법은 여 타 언어와 비슷하기 슬래시 2개를 사용해서 주석을 달 수 있습니다. 예를 들면 //my code1 이런식으로 주석을 달 수 있습니다.

natspec

 주석 다는 방법에 또 다른 방법이 있습니다. 우선 위 코드에는 없지만, 여러줄의 주석을 달 수 있는 /* */ 주석과 위 코드에있는 natspec형식의 주석입니다. ///를 사용해서 달게되는데, 이러한 주석은 코드가 어떻게 돌아가는지 설명해 줍니다.

 @param 은 매개변수, @return은 반환값을 의미하며 나머지 의미들은 사진 내부를 참고하시기 바랍니다.

이더리움(Ethereum) - ERC20 토큰, ERC721 표준 (다중상속)

난수 랜덤 생성(keccak256, random)

payable

댓글
최근에 올라온 글
최근에 달린 댓글
네이버 이웃추가
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함