Context:

An epoch smart contract gathers the final DKG results from each node (specifically, the public key shares pk_i and the public group key PK) The overall Epoch setup succeeds if enough nodes end up computing the same results. How much is “enough” ?

DKG native threshold

In Flow, DKG is used to set up the keys of a threshold signature scheme. The DKG parameter t is therefore set to be equal to the parameter t used by the threshold signature scheme and the overall random beacon design.

For details please see Threshold Signatures.

Notation:

Flow protocol chose t to be floor((n-1)/2) to maximize the number of malicious participants m (as defined above) the beacon can handle. That value is referred to informally as “50%” although it’s not precisely equal to half.

For the overall DKG and the epoch setup phase to succeed, it’s required that at least t+1 nodes agree on the same result (by submitting the same result to the epoch contract). This is the native required success threshold t_native = t+1 (informally 50% +1). Note that this is a threshold expressed in number of nodes, not in staked value. We make the assumption that all honest nodes (online and behaving per the protocol rules) succeed DKG.

Hotstuff

Hotstuff is run among the same DKG participants $C$ (in mature Flow, DKG participants are only a subset of Hotstuff participants). Hotstuff makes the assumption that malicious nodes $M \\sub C$ (or nodes controlled by a malicious adversary) do not reach 1/3 of the total staked value (not in number of nodes!).

We can distinguish two ways to model the adversary:

To make the analysis simpler, we will assume all participants have staked equally, so that the remaining reasoning only focuses on number of nodes. In this case, Hotstuff’s requirement about 1/3 stake is simplified to: