New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Design and implement quorum balancing #240
Comments
Depends on #209 |
I think this sentence is not entirely correct. It should be predictable given another number X, which itself is unpredictable (and based on the preimage). So the algorithm to select the quorum is predictable, but its inputs are not predictable. |
According to the yellow paper: |
I would actually add that past performance of a validator should be taken into account when assigning quorums. For example:
This could be gamed by a new player that spins up 5 new nodes and stakes more than the next 5 highest staked nodes. If we could incorporate the number N, where N is the number of times a node's public key participated in a finalized (accepted) vote for a block, then we could take into account the past performance of a node too. It should be a sort of "weight" to the algorithm. |
Some research notes: This post describes the new quorum config in Stellar, and also has a general overview of how quorums in Stellar work: https://medium.com/stellar-developers-blog/why-quorums-matter-and-how-stellar-approaches-them-547336c1275 The two PRs implementing semi-automatic quorum configuration and an "intersection-checker" Here's a paper linked to from the blog post: https://arxiv.org/pdf/1902.06493.pdf. From the paper:
In our case we wouldn't mark any nodes as belong to an "organization" and the "quality" of the nodes would not be hardcoded, but instead we would just use the amount of stake as the marker of quality. After all, if a node misbehaves then it will get slashed, and its staked amount becomes lower (and therefore the "quality" of the node drops). The blog post describes a commit we're not using yet (https://github.com/stellar/stellar-core/releases/tag/v11.2.0) which was released in June 28th 2019. We're using a commit from May 20th 2019. It might be possible to reuse / adapt these Stellar routines ( Edit: Another useful article: https://www.stellar.org/developers-blog/intuitive-stellar-consensus-protocol |
The generator uses a provided source of randomness to shuffle the nodes into different quorums. The source of randomness should be derived from the revealed preimages of the validators. Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
The generator uses a provided source of randomness to shuffle the nodes into different quorums. The source of randomness should be derived from the revealed preimages of the validators. Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
The generator uses a provided source of randomness to shuffle the nodes into different quorums. The source of randomness should be derived from the revealed preimages of the validators. Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
The generator uses a provided source of randomness to shuffle the nodes into different quorums. The source of randomness should be derived from the revealed preimages of the validators. Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
The generator uses a provided source of randomness to shuffle the nodes into different quorums. The source of randomness should be derived from the revealed preimages of the validators. Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
The generator uses a provided source of randomness to shuffle the nodes into different quorums. The source of randomness should be derived from the revealed preimages of the validators. Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
The generator uses a provided source of randomness to shuffle the nodes into different quorums. The source of randomness should be derived from the revealed preimages of the validators. Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
The generator uses a provided source of randomness to shuffle the nodes into different quorums. The source of randomness should be derived from the revealed preimages of the validators. Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
The generator uses a provided source of randomness to shuffle the nodes into different quorums. The source of randomness should be derived from the revealed preimages of the validators. Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
The generator uses a provided source of randomness to shuffle the nodes into different quorums. The source of randomness should be derived from the revealed preimages of the validators. Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
The generator uses a provided source of randomness to shuffle the nodes into different quorums. The source of randomness should be derived from the revealed preimages of the validators. Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
The generator uses a provided source of randomness to shuffle the nodes into different quorums. The source of randomness should be derived from the revealed preimages of the validators. Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
The generator uses a provided source of randomness to shuffle the nodes into different quorums. The source of randomness should be derived from the revealed preimages of the validators. Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
Nodes which have a higher staken amount have a higher chance of being included in each node's quorum set. Part of: bosagora#240
Nodes which have a higher stake compared to the rest of the network will have a higher chance of being included in other node's quorum sets. Part of: bosagora#240
Currently the only part that is not fully implemented is:
Right now the quorums only get reshuffled when the validator set changes (new enrollment, expired enrollment). But we may want to shuffle quorums regularly, for example every N blocks (N would be defined by the protocol). However I think this will require more preimage support. In our unittests we have tests such as:
The nodes won't have any preimages on startup except the commitment in the enrollment in the genesis block. If we set the "periodic shuffle" N parameter to 10, then on boot-up the nodes would generate the quorums for block height 0 and then on block height 10. But it's not possible to test this right now because the preimages are missing for height 10, so this would lead to an assertion failure. |
bpalaggi commentedAug 23, 2019
•
edited by AndrejMitrovic
As a developer, I need to know what algorithm to follow for quorum assignment in order for the protocol to prevent censorship while being open.
Description
We can consider two degenerate cases for quorum balancing:
The goal of quorum balancing is to produce a network graph with optimal safety & overhead. Note that the nodes that are quorum intersections are likely to be higher-staking nodes, as they have more to lose.
Example of rules:
Definition of done:
Tentative approach:
The text was updated successfully, but these errors were encountered: