This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
how_qortal_s_consensus_works [04/27/2023 18:28] – gfactor | how_qortal_s_consensus_works [11/02/2023 14:12] (current) – crowetic | ||
---|---|---|---|
Line 2: | Line 2: | ||
{{: | {{: | ||
- | |||
- | Here is an explanation from @CalDescent (Qortal’s current lead core developer) on how exactly the consensus in Qortal functions: | ||
- | |||
- | Every node with a Level 5 (or higher) self-share " | ||
- | |||
- | |||
- | Here is an explanation from @CalDescent (Qortal’s current lead core developer) on how exactly the consensus in Qortal functions: | ||
Every node with a Level 5 (or higher) self-share " | Every node with a Level 5 (or higher) self-share " | ||
- | 1. Key distance. This is essentially a lottery for each block, where each minting account has only one ticket each time, and everyone knows the lottery numbers of the other minting accounts. To achieve this, we convert the previous block' | + | 1. **Key distance.** This is essentially a lottery for each block, where each minting account has only one ticket each time, and everyone knows the lottery numbers of the other minting accounts. To achieve this, we convert the previous block' |
- | 2. Minter level. The number from Step 1 is then divided by the account level of the block signer. So a level 5 account would end up with a number 5 times lower than a level 1 account, assuming that they both had comparable key distances. However, if a level 1 produces a key distance 10 times smaller than a level 5, its resulting number would be smaller than the level 5's number. On average, higher levels will produce smaller numbers than lower levels. | + | 2. **Minter level.** The number from Step 1 is then divided by the account level of the block signer. So a level 5 account would end up with a number 5 times lower than a level 1 account, assuming that they both had comparable key distances. However, if a level 1 produces a key distance 10 times smaller than a level 5, its resulting number would be smaller than the level 5's number. On average, higher levels will produce smaller numbers than lower levels. |
Lower numbers translate to a lower time delta for the next block, and higher numbers translate to higher time deltas. So some nodes could sign their blocks with a timestamp 50 seconds after the previous block, and others could sign blocks with timestamp 80 seconds after the previous block, etc etc. In practice, timestamps range from around 60-90 seconds because of the way they are weighted, with the average historical delta being around 65 seconds. | Lower numbers translate to a lower time delta for the next block, and higher numbers translate to higher time deltas. So some nodes could sign their blocks with a timestamp 50 seconds after the previous block, and others could sign blocks with timestamp 80 seconds after the previous block, etc etc. In practice, timestamps range from around 60-90 seconds because of the way they are weighted, with the average historical delta being around 65 seconds. | ||
Line 24: | Line 17: | ||
Nodes sync to the most ideal block that they can find, and the process repeats. If another, better block is found by a subset of the network, this will eventually propagate through and cause nodes on a different block to " | Nodes sync to the most ideal block that they can find, and the process repeats. If another, better block is found by a subset of the network, this will eventually propagate through and cause nodes on a different block to " | ||
- | To summarize with this system: | ||
- | |||
- | 1) Higher level accounts are preferred as block signers, on average. | ||
- | |||
- | 2) Verifiable randomness is created, to ensure that minters on each level get a reasonably equal distribution of blocks signed, and no-one can jump the queue by minting a block with an earlier timestamp than it should have technicalities, | ||
- | |||
- | 1. Key distance. This is essentially a lottery for each block, where each minting account has only one ticket each time, and everyone knows the lottery numbers of the other minting accounts. To achieve this, we convert the previous block' | ||
- | |||
- | 2. Minter level. The number from Step 1 is then divided by the account level of the block signer. So a level 5 account would end up with a number 5 times lower than a level 1 account, assuming that they both had comparable key distances. However, if a level 1 produces a key distance 10 times smaller than a level 5, its resulting number would be smaller than the level 5's number. On average, higher levels will produce smaller numbers than lower levels. | ||
- | |||
- | Lower numbers translate to a lower time delta for the next block, and higher numbers translate to higher time deltas. So some nodes could sign their blocks with a timestamp 50 seconds after the previous block, and others could sign blocks with timestamp 80 seconds after the previous block, etc etc. In practice, timestamps range from around 60-90 seconds because of the way they are weighted, with the average being historical delta being around 65 seconds. | ||
- | |||
- | Each block has a " | ||
- | |||
- | Once the allocated timestamp is reached, nodes start submitting their block candidates to the network. Peers then start to find out about the various block candidates and choose the best one based on block weight. Once a minting node receives another candidate for the block it is about to mint, it will not submit its own candidate. So the idea is that nodes quickly sync to the early block candidates (which will generally be higher weights because they have lower timestamps) and therefore a lot of the lower level minters or those with high key distances won't bother submitting their (lower weight) block candidates at all. | ||
- | |||
- | Nodes sync to the most ideal block that they can find, and the process repeats. If another, better block is found by a subset of the network, this will eventually propagate through and cause nodes on a different block to " | ||
- | |||
- | To summarize with this system: | ||
- | 1) Higher level accounts are preferred as block signers, on average. | ||
- | 2) Verifiable randomness is created, to ensure that minters on each level get a reasonably equal distribution of blocks signed, and no-one can jump the queue by minting a block with an earlier timestamp than it should have. |