Skip to main content

Example of a distributed validator creation

Let’s now show an example of how the creation of a new distributed validators protocol works. We assume five operators are registered in the DSC and have different nodes assigned to them, as described in [Figure 2].

operators

Figure 2: Diva Operators with a different number of Diva Nodes registered.

operator1=0x0123...operator_{1} = \mathtt{0x0123}...

operator2=0x4567...operator_{2} = \mathtt{0x4567}...

operator3=0x89AB...operator_{3} = \mathtt{0x89AB}...

operator4=0xCDEF...operator_{4} = \mathtt{0xCDEF}...

operator5=0x9876...operator_{5} = \mathtt{0x9876}...

If the DSC detects that the balance of the Diva Pool is more than 32 ETHs, it will use the RANDAO\mathtt{RANDAO} to generate one random seed of value and derive the distributed validator UUID from it:

Seed0=0xBB9b...Seed_{0}=\mathtt{0xBB9b}...

From this seed, the DSC calculates the UUID that represents the creation of the new distributed validator as HASH(Seed0)\mathtt{HASH}(Seed_{0}):

ValidatorID1=HASH(0xBB9b...)=0xD154...ValidatorID_1 = \mathtt{HASH}(\mathtt{0xBB9b}...)=\mathtt{0xD154}...

Participants and coordinators will calculate their weights relative to Seed0xD154participantsSeed_{\mathtt{0xD154}}^{participants} and Seed0xD154coordinatorsSeed_{\mathtt{0xD154}}^{coordinators} respectively.

Seed0xD154participants=HASH(0xD154...,0)=0x5050...Seed_{\mathtt{0xD154}}^{participants} = \mathtt{HASH}(\mathtt{0xD154}...,0)=\mathtt{0x5050}... Weightparticipant1=HASH(0x5050...,0x0123...)=0x5173...Weight_{participant_{1}}=\mathtt{HASH}(\mathtt{0x5050}..., \mathtt{0x0123}...)=\mathtt{0x5173}... Weightparticipant2=HASH(0x5050...,0x4567...)=0x1537...Weight_{participant_{2}}=\mathtt{HASH}(\mathtt{0x5050}..., \mathtt{0x4567}...)=\mathtt{0x1537}... Weightparticipant3=HASH(0x5050...,0x89AB...)=0xD9FB...Weight_{participant_{3}}=\mathtt{HASH}(\mathtt{0x5050}..., \mathtt{0x89AB}...)=\mathtt{0xD9FB}... Weightparticipant4=HASH(0x5050...,0xCDEF...)=0x9DBF...Weight_{participant_{4}}=\mathtt{HASH}(\mathtt{0x5050}..., \mathtt{0xCDEF}...)=\mathtt{0x9DBF}... Weightparticipant5=HASH(0x5050...,0x9876...)=0xC826...Weight_{participant_{5}}=\mathtt{HASH}(\mathtt{0x5050}..., \mathtt{0x9876}...)=\mathtt{0xC826}...

The participants colored in yellow are the ones with the lowest weight and therefore form the best set of participants for ValidatorID1ValidatorID_1.

Assuming all operators are also coordinators, the weights of the coordinators are:

Seed0xD154coordinators=HASH(0xD154...,1)=0xBA98...Seed_{\mathtt{0xD154}}^{coordinators} = \mathtt{HASH}(\mathtt{0xD154}...,1)=\mathtt{0xBA98}... Weightcoordinator1=HASH(0xBA98...,0x0123...)=0xBBBB...Weight_{coordinator_{1}}=\mathtt{HASH}(\mathtt{0xBA98}..., \mathtt{0x0123}...)=\mathtt{0xBBBB}... Weightcoordinator2=HASH(0xBA98...,0x4567...)=0xFFFF...Weight_{coordinator_{2}}=\mathtt{HASH}(\mathtt{0xBA98}..., \mathtt{0x4567}...)=\mathtt{0xFFFF}... Weightcoordinator3=HASH(0xBA98...,0x89AB...)=0x3333...Weight_{coordinator_{3}}=\mathtt{HASH}(\mathtt{0xBA98}..., \mathtt{0x89AB}...)=\mathtt{0x3333}... Weightcoordinator4=HASH(0xBA98...,0xCDEF...)=0x7777...Weight_{coordinator_{4}}=\mathtt{HASH}(\mathtt{0xBA98}..., \mathtt{0xCDEF}...)=\mathtt{0x7777}...

The optimal DKG set is the one with the lowest WeightmintotalWeight_{min}^{total} that submits a valid BLS public key signed by all the nodes (using their Ethereum wallet). The optimal coordinator is the one that submits the optimal DKG set and has the lowest coordinator weight.

OptimalΒ DKGΒ participantsΒ set={user1,user2,user4}Optimal\ DKG \ participants\ set = \{ user_1, user_2, user_4 \} Weightmintotal=Weightuser1+Weightuser2+Weightuser4=0x5173...+0x1537...+0x9DBF...=0x10469...Weight_{min}^{total} = Weight_{user_1}+Weight_{user_2}+Weight_{user_4}=\mathtt{0x5173}...+\mathtt{0x1537}...+\mathtt{0x9DBF}...=\mathtt{0x10469}... OptimalΒ coordinatorΒ ofΒ theΒ set=user5Optimal\ coordinator \ of\ the \ set = user_5 min(Weightcoordinatori)=min(Weightcoordinator5)=0x22EE...min(Weight_{coordinator_{i}})=min(Weight_{coordinator_{5}})=\mathtt{0x22EE}...

Any coordinator can potentially be contacted by any set of participants to perform the DKG, but the submission with the lowest participant's weight and coordinator's weight will win. Therefore, the submitter will send only the results distributed by the coordinators containing participants with low weight in a DKG (the higher the weight, the lower the probability of being included in a set).

Ideally, only the optimal ser of coordinators will be contacted by the optimal set of participants (among others), and they will perform the DKG [[Figure 3]].

timeframes

Figure 3: Diva nodes (DKG participants) performing DKG. They send the resulting BLS public key signed to the coordinator to claim the creation of a new distributed validator.