앞서 포스팅을 했듯이 블록체인에서 난수생성은 어려운 문제다. 기존의 블록체인에서의 난수 생성 방식은 대부분 해쉬값을 스마트 컨트랙에 보내고(commit) 시드를 보내서(reveal) 난수를 생성하는 방법이 가장 직관적이다. 이 방식을 commit and reveal 이라 하는데 대표적인게 RANDAO 이고 Siginidice 은 변형이라고 볼 수 있다. commit and reveal의 단점은 아래와 같다.
- 난수 생성에 발생하는 비용이 오라클 보다 큼
- 저장 공간이 발생하게 됨 (메모리도 비용)
- 장애로 인해 난수 생성 비용을 모두 의도하지 않게 날릴 수 있음
기존의 블록체인들은 마이너가 블록에 들어가는 모든 값들을 미리 알 수가 있다. 블록을 생성한 후 마이너가 예측할 수 없는 시드를 하나씩 추가해주는 식으로 블록을 설계하면 난수를 생성하는데 충분한 도움이 될 수 있다. 예를 들어 10초에 하나씩 블록이 생성되는 블록체인에 블록이 생성된 지 1~2초 정도 뒤에 시드가 트랜잭션 혹은 파라미터 값으로 추가되면 해당 시드를 이용해 난수를 만들고 검증하는 것이 가능해진다. 스마트 컨트랙은 특정 블록번호에 해당하는 시드로 난수를 발생시키도록 구현하면 된다. 대략 아래와 같은 프로세스를 거친다.
- 특정 블록번호의 난수를 시드로 하는 난수 발생 스마트 컨트랙을 생성
- 참여자들은 해당 스마트 컨트랙에 참여(follow)
- 특정 블록번호에서 생성된 시드를 이용해 스마트 컨트랙은 난수를 생성
- 참여자들은 해당 난수를 수신하여 다음 프로세스를 진행
난수를 생성하는 블록체인을 만들면 사실 어렵지 않은 문제이긴 하지만 일단 이러한 체인이 ICO를 받을 수 있을지 모르기 때문에 -_-.. 기존의 블록체인에 난수를 삽입하는 방법을 좀 더 고민할 필요가 있다. 극단적인 방법으론 시드를 블록마다 꾸준히 트랜잭션에 기록해주는 스마트컨트랙이 있으면 좋을 텐데 이 방법은 스마트 컨트랙을 운영하는 주체를 신뢰할 수 있어야 되고 비용이 많이 발생한다. 블록체인은 탈중앙화 시스템을 지향하는 만큼 사용자들의 리소스를 비용으로 지불할 수밖에 없다. 따라서 이 합리적으로 비용을 지불하고, 참여자에게 인센티브를 공평하게 줄 수 있는지의 고민이 필요하다.
'기술' 카테고리의 다른 글
신경망 암호와 ECC (1) | 2019.05.23 |
---|---|
RANDAO (0) | 2019.04.15 |
블록체인에서의 난수 생성 (0) | 2019.03.28 |
탈중앙화(Decentralization)에 관하여 (0) | 2019.02.25 |
블록체인에 대한 단상 (0) | 2019.02.20 |