Concept of randomised voting has been introduced in 5irechain to provide a better alternative to nominated or delegated voting. We believe that nodes should be rewarded and punished based on individual basis and not on collective reward and punishment basis. Therefore, in randomised voting nodes will use a pseudo random voting algorithm to vote for the nodes randomly and then will attest the blocks created by those nodes. This will help us curb the coercion where nodes can persuade the other nodes to vote them in return for better return on their stake. We believe that this coercion promotes cartelisation of the network where nodes keep voting for the same nodes and get more share in block creation than the stake they represent.
Nodes are rewarded and punished based on their individual acts, because it is possible that a block creating nodes gets compromised and creates a fraudulent block. PoS algorithms are typically programmed to punish all the nodes who voted for this fraudulent node even though it was not their fault, because it is possible that a node can get compromised by a malware. Therefore 5irechain will only slash the stake of fraudulent nodes and not of those who voted for the node as votes are random. Stake of voting nodes will only be slashed if they also attested the fraudulent block, because in this case it will be certain that it is a collusion.
In the current consensus mechanism, the selection of validators is done on the basis of weights calculated from various parameters concerning a node or a group of nodes. Let us assume that there are n nodes U1,U_2,...,U_n who are in the race of becoming a block-validator. The weights of these nodes are w_1,w_2,...,w_n respectively. These are the top nnodes in terms of weight. Let us define a_0 = 0, and (∑(j=1)^i wj)/(∑(j=1)^n wj ) for all i∈[1,n]. There are s slots in an epoch that needs to be distributed among these n nodes. Now, for each slot c∈[1,s], generate a random number x_c in the range [0, 1], allocate it to the node U_k, such that x_c∈[a(k-1 ),a_(k )). This protocol can eliminate cartelization and will also ensure that the nodes get a fair share of opportunities to produce the blocks. The probability of a node getting a slot will directly be proportional to her weight. However, this will ensure that one node does not get to assemble all the blocks in the same epoch. In order for generating random numbers x_c, for all c∈[1,s], we can use the following technique. All nodes participating in the race of becoming validators may be asked to provide commitments to a random number. They can provide this information at the same time while locking their stakes. Later, they can open the commitments. Now, these committed numbers can be fed into a pseudorandom number generator to generate a sequence of random fractional numbers in the range [0,1], which can be used to allocate slots to the winning nodes.The following figure shows how a sequence of 3255 slots can be distributed among winning nodes depending on their weights. There are 20 nodes that were chosen on the basis of their weights. Each of them is allocated a number of slots proportionate to its own weight.