(Verifiable Random Function) will generate pseudorandom numbers in a deterministic fashion. That is to say, simply generating a random number is not good enough. We need to be able to prove it is random and this goal will be achieved using Verifiable Random Function.
We need to create a module that can generate a deterministic random function. This random number should be able to be verified by other participants.
Each node takes a seed and private key to generate a pseudo random number and a proof pi.
Fx(seed number) = random number, proof pi
Fx (last hash) = 1421123151, 131235231
Using the random number, the node will shuffle the participating list of nodes and divide them into 3 buckets.
Original list [ node 1, node 2, node 3, node 4, node 5, node 6]
Fx(seed, original list) = shuffled list
Shuffled list = [ node 3, node 6, node 5, node 2, node 4, node 1]
Divide them into three sub list
fx(shuffled list) = [1, 2] [3, 4] [5, 6] (Role list)
A = [node 3, node 6],
B = [ node 5, node 2],
C = [node 4, node 1]
Verify other participants' random results.
Return the following result
Build a function that can generate / access the public key and private key.
Build a function that will take the private key, seed (some seed value), and generate the following
Pi (A verifiable number)
Build a function that can use the random number to shuffle all the participating nodes and divide them into three sub lists. Example: Shuffle the list and divide them into 3 lists and assign each sub list a role( A, B, C).
Return the following to all participating nodes
Build a function that can take the seed, pi and public key to generate the same random number. Verify each others random number
Build a function that can find the node with the lowest random number and select them as leader node and use that node’s role list for that round
All of the above functions will be bundled in a package/module and will be accessible to other modules/packages in our system.