Protocol
In this page, we're going to describe the process that allows a group of participants to generate the grand randomness of an epoch.
Last updated
In this page, we're going to describe the process that allows a group of participants to generate the grand randomness of an epoch.
Last updated
Orand is a trustless source of randomness. As a system application of Orochi Computation Layer, Orand can provide randomness for all distributed applications on Orochi Computation Layer and smart contracts on supported Layer-1 blockchains. We present the protocol in the sequences. Deliberate proofs for some properties on the cross-chain randomness of Orand such as counter-manipulation, open-sourced transparency, verifiability and high throughput will be published in recognized scientific venues. We have released Orand as an open source project. At this stage, Orand has already been implemented and under testing at .
We assume that the node id of participants is the digest of their public key
According to the gossip process, a given participant can reconstruct the current state of the Gossip Graph. They can perform virtual voting and find dishonest participants. The gossip process will grow the knowledge of all participants and guarantee that the share of randomness will increase over time for each participant.
If there are some dishonest participants based on the current state of all nodes, anyone can ask dishonest participants to commit the missing shares. If the share is not committed after the audit phase, the dishonest participants will be imposed with penalty.
There are two following scenarios:
Unhappy ending: If there are insufficient shares to reconstruct randomness by any participants, all participants will lose their collateral.
Assuming there are participants (validators) denoted by , each participant plays two roles in our system dealer and verifier. Each participant has their own key-pair and the public key is available to all other participants.
All participants will need to generate their secrets and also randomness by using Verifiable Random Function (VRF) with as the grand randomness of the previous epoch, we have In the genesis epoch, although the value is pseudo-random, the draw values from it are different because it depends on from which many participants will contribute entropy to the value of . And therefore hashing known public keys and then XOR them together is the fastest way to generate an initial seed for the network at the very beginning. In order words, can be generated by combining participants' hashes of public keys. Therefore, we have at the genesis epoch computed as follows
The participant (also known as the dealer ) will split their into shares . So in this phase we want to use a Public Verifiable Secret Sharing (PVSS) scheme to split the value into many shares so that at the same time it also generates besides the shares . This process aims to prepare for the shares to be distributed while ensuring that only the receiver gets the secret while all participants can verify that the shares have been transmitted. We want to use a mechanism to create a temporary black box and protect all shares and the secret value . We propose to use Stadler's PVSS scheme in our protocol for this purpose.
All other participants need shares to reconstruct , . In our protocol we choose . Then each participant can forge their message corresponding to the share and distribute to other participants (also known as verifier ) by
To prevent the participant to deal all of their shares to the colluding party, we require all participants to draw distribution parameter by using VRF. Each epoch will have different , with
Moreover, if the share distribution of is as follows
Then, after creating the , we want to distribute them to the ``nearby subset of participants'' (its neighbors) to avoid the fact that a participant can gossip all about its colluding party. Since our process is gossip-based and recorded on a gossip graph, in general, any cheat should be detected. So we adopt the XOR metric introduced in Kademlia Protocol for that purpose by setting to be the distance between node id and share distribution. We will distribute the share corresponding to the node which has the closest node id to . By performing this method repeatedly, we can multi-cast the shares to all nodes in the network randomly. This process is transparent and verifiable for all participants.
Happy ending: All participants commit all their shares, then any of them could reconstruct and the grand randomness by using this simple method The last process is that all participants must agree to use threshold signing and multi-party computation to commit the result to the blockchain.