솔리디티(solidity) - overflow,underflow 방지 SafeMath
솔리디티(solidity) 에서도 마찬가지로 오버플로(overflow) 와 언더플로우(underflow)가 발생할 수 있다. uint16 등이 표현할 수 있는 최대치에 +1을 해주게되면 0이되거나 0에서 -1을 해주면 최대치가 되는 경우가 바로 그 경우입니다.
이럴 경우에 사용할 수 있는 것이바로 SafeMath 라이브러리(Library) 입니다. 라이브러리는 솔리디티에서 특수한 contract입니다. uint같은 데이터 형식에 함수를 사용할 수 있게됩니다. (ex, 100.add(1) )
그리고 라이브러리를 사용할 때는 using 키워드를 사용합니다. 여기서는 using SafeMath for uint256 이런식으로 사용합니다.
여기서 보면 assert 구문을 사용한 것을 알 수 있습니다. assert 구문은 SafeMath에서 오버,언더 플로우를 방지해주는 역할을 하게 됩니다. 사실 assert는 조건이 성립되지 않을시 error를 일으키게 됩니다. 뭐랑 비슷한것 같죠? 맞습니다. require랑 비슷해보입니다. 이 둘의 차이점은 바로 가스소모에있습니다. require는 가스를 돌려주지만, assert는 가스를 되돌려주지 않습니다.
사용 예시는 위와 같습니다. uint형에 바로 .을 붙여서 add나 sub, mul, div를 사용하면 안전하게 연산을 수행할 수 있습니다.
주석
주석 다는 법은 여 타 언어와 비슷하기 슬래시 2개를 사용해서 주석을 달 수 있습니다. 예를 들면 //my code1 이런식으로 주석을 달 수 있습니다.
주석 다는 방법에 또 다른 방법이 있습니다. 우선 위 코드에는 없지만, 여러줄의 주석을 달 수 있는 /* */ 주석과 위 코드에있는 natspec형식의 주석입니다. ///를 사용해서 달게되는데, 이러한 주석은 코드가 어떻게 돌아가는지 설명해 줍니다.
@param 은 매개변수, @return은 반환값을 의미하며 나머지 의미들은 사진 내부를 참고하시기 바랍니다.
'Ethereum Solidity' 카테고리의 다른 글
비쥬얼스튜디오(visual studio)로 이더리움 솔리디티(sol) 코드 개발하기 (0) | 2018.07.02 |
---|---|
이더리움 솔리디티 geth 사설서버 가동하기 .json파일 (2) | 2018.06.24 |
이더리움(Ethereum) - ERC20 토큰, ERC721 표준 (다중상속) (0) | 2018.06.21 |
솔리디티(solidity) - 난수 랜덤 생성(keccak256, random) (0) | 2018.06.20 |
솔리디티(solidity) - payable (0) | 2018.06.19 |