솔리디티(solidity) - 난수 랜덤 생성(keccak256, random)
이번 글에서는 솔리디티(solidity) 개발언어에서 난수(랜덤수)를 생성하는 방법을 알아보도록하겠습니다.
솔리디티에서는 랜덤한 수를 생성할 때 해시함수를 사용해서 난수를 만들게됩니다. 캐깍(keccak256)은 SHA256의 해시를 생성하게되는데 내부테 위 예시 코드와 같이 now(현재시간, 저번 포스팅참고)와 msg.sender 그리고 1씩 증가하는 Nonce를 넣어주어서 해시를 발생시키게됩니다.
이 때 %100을 해주어 0부터 99까지의 랜덤한 숫자를 발생시키게됩니다. 이는 uint형으로 형변환을 해줌으로써 우리가 사용할용도에 맞게 가공해서 사용할 수 있습니다. 그러나 이러한 방법은 블록체인상에서 보안상 안전하지 않고 그 해답으로는 StackOverflow post 에서 참고할 수 있다.
순간복습
함수제어자(modifier)작성시에 _; 부분을 빼먹지 않도록 주의하여 작성하자. 간과해서 빼먹는 경우가 많다. 결국 오류로 이어져서 찾긴 하겠지만, 매번 번거롭게 하기보다는 습관을 확실히 만들어 주는 것이 좋다.
뜬금복습
구조체 내부에서 uint형의 비트를 조정하여 데이터를 압축시킬 수 있으며, 속성 정의시 같은 형식을 묶어서 정의하면 더 효율적으로 구조체를 만들 수 있다. 최종적으로는 가스(연료)의 절약으로 이어지기 때문에 돈과 연관된다고 생각하면 지키기 쉬울 것이다.
'Ethereum Solidity' 카테고리의 다른 글
솔리디티(solidity) - overflow,underflow 방지 SafeMath Library (0) | 2018.06.22 |
---|---|
이더리움(Ethereum) - ERC20 토큰, ERC721 표준 (다중상속) (0) | 2018.06.21 |
솔리디티(solidity) - payable (0) | 2018.06.19 |
솔리디티(solidity) - 배열, memory, new (+for) (0) | 2018.06.18 |
솔리디티(solidity) - 포인터 storage, struct 전달 (+modifier) (0) | 2018.06.17 |