Did you know that you can navigate the posts by swiping left and right?
원문: https://github.com/randao/randao
결정론적 시스템에서의 Random Number Generator (난수 발생기) 는 매우 어렵다.
누구나 참여할 수 있는 DAO1와 난수는 모든 참가자들에 의해서 함께 만들어진다. 먼저, 블록체인 내에서 RANDAO 게약을 생성해야하는데, 이 RANDAO 계약이란 참여 규칙을 정의한다. 그러면 난수를 만드는 기본적인 과정이 3단계로 나뉜다.
난수 생성에 참여하고 싶은 사람은 \(m\) ETH(보증금의 개념)와 SHA3(s)의 결과값을 정해진 기간 내에 (예를 들어, 6블록 기한, 약 72초) \(C\) 계약으로 보내야한다. 여기서 \(s\)는 참여자 개인이 선택한 비밀의 숫자(비밀키)이다.
1단계 이후, SHA3(s)를 성공적으로 보낸 사람들은 정해진 시간 내에 1단계에서 사용한 값 \(s\)를 \(C\) 계약으로 보내야한다. 계약 \(C\)에서는 \(s\)에 대해서 SHA3을 돌려서 값 \(s\)가 유효한지를 확인하고 이전에 받았던 데이터와 일치하는지 확인한다. 유효한 값 \(s\)는 시드집합(Collection of seeds)에 저장되어 최종적으로 난수를 만들 것이다.
모든 비밀키가 성공적으로 수집된 이후에, 계약 \(C\)는 함수 \(f(s_1, s_2, …, s_n)\)로 부터 난수값을 계산하고, 결과값은 계약 \(C\)의 저장소(Storage)에 저장됩니다. 또한 결과값은 난수값을 요청한 다른 계약들에게 전송됩니다.
계약 \(C\)는 1단계에서 거둔 ETH(이더리움, 보증금)를 돌려주고, 이익금은 공정하게 나누어 보너스로서 참가자들에게 돌려준다. 이 이익금은 다른 계약에서 난수를 요청할 때 발생한 수수료로부터 나온다.
안전성과 효율성, 그리고 Random Number Generator가 조작되지 않았다는 사실을 증명하기 위해서 계약 \(C\)는 다음과 같은 부수적인 규칙을 따른다.
1단계에서 만약 2개 이상의 같은 SHA3(s) 값을 제출받는다면, 첫번째 것만 승낙된다.
1단게에서 최소한의 참가자 수의 제한이 존재한다. 만약에 충분한 SHA3(s) 값을 제출받지 못한다면 이번 블록에서의 Random Number Generator는 실패한 것으로 간주한다.
만약, 참가자가 SHA3(s)를 제출하고, 계약 \(C\)에 의해서 승인된다면, 참가자는 반드시 2단계에서 \(s\)값을 제출해야한다.
3-1. 만약, 참가자가 2단계에서 \(s\)값을 제출하는데 실패한다면, 1단계에서 보냈던 보증금인 \(m\) ETH는 몰수되며 돌려주지 않는다.
3-2. 만약, 2단계에서 1개 이상의 \(s\)값이 밝혀지지 않으면, 이번 블록에서의 Random Number Generator는 실패한 것으로 간주한다. 압수된 이더리움들은 공평하게 나눠서 2단계에서 \(s\)값을 보냈던 다른 참가자들에게 보낸다. 또한 다른 계약에서 보낸 수수료는 다시 환불해준다.
Decentralized Autonomous Organization ↩