Просмотр исходного кода

doc: fmt doc/src/arch/consensus.md

draoi 2 лет назад
Родитель
Сommit
26a7b352ed
1 измененных файлов с 56 добавлено и 53 удалено
  1. 56 53
      doc/src/arch/consensus.md

+ 56 - 53
doc/src/arch/consensus.md

@@ -21,16 +21,17 @@ blockchain achieve consensus.
 DarkFi is using Proof of Work RandomX algorithm paired with delayed finality.
 DarkFi is using Proof of Work RandomX algorithm paired with delayed finality.
 Therefore, block production involves the following steps:
 Therefore, block production involves the following steps:
 
 
-First, a miner grabs its current best ranking fork and extends it with a block composed of
-unproposed transactions from the miner's mempool.
+First, a miner grabs its current best ranking fork and extends it with a block
+composed of unproposed transactions from the miner's mempool.
 
 
-Then the miner tries to find a nonce such that when the block header is hashed its bytes produce
-a number that is less than the current difficulty target of the network,
-using the [RandomX mining algorithm](https://github.com/tevador/RandomX).
+Then the miner tries to find a nonce such that when the block header is hashed
+its bytes produce a number that is less than the current difficulty target of
+the network, using the [RandomX mining
+algorithm](https://github.com/tevador/RandomX).
 
 
-Once the miner finds such a nonce, it broadcasts its block proposal
-to the P2P network. Finally the miner triggers a finalization check to
-see if its newly extended fork can be finalized.
+Once the miner finds such a nonce, it broadcasts its block proposal to the P2P
+network. Finally the miner triggers a finalization check to see if its newly
+extended fork can be finalized.
 
 
 Pseudocode:
 Pseudocode:
 ```
 ```
@@ -51,46 +52,47 @@ loop {
 
 
 ## Listening for block proposals
 ## Listening for block proposals
 
 
-Each node listens for new block proposals on the network.
-Upon receiving block proposals, nodes try to extend the proposals
-onto a fork held in memory (this process is described in the
-next section). Then nodes trigger a finalization check to
-see if their newly extended fork can be finalized.
+Each node listens for new block proposals on the network. Upon receiving block
+proposals, nodes try to extend the proposals onto a fork held in memory (this
+process is described in the next section). Then nodes trigger a finalization
+check to see if their newly extended fork can be finalized.
 
 
-Upon receiving a new block proposal, miners also check if the
-extended fork rank is better than the one they are currently trying to extend. If the fork rank is better,
-the miner will stop mining its proposal and start mining the new best fork.
+Upon receiving a new block proposal, miners also check if the extended fork
+rank is better than the one they are currently trying to extend. If the fork
+rank is better, the miner will stop mining its proposal and start mining the
+new best fork.
 
 
 ## Ranking
 ## Ranking
 
 
-Block producers create a reward transaction containing a `ECVRF` proof that contributes
-to ranking logic. The `VRF` is built using the `pallas::Base`
-of the $`(n-1)`$-block proposal nonce, the $`(n-1)`$-block proposal hash, and
-the `pallas::Base` of the proposal's block height. The `VRF`'s purpose is to eliminate
-long range attacks by predicting a future block with a high ranking that we can produce in advance.
+Block producers create a reward transaction containing a `ECVRF` proof that
+contributes to ranking logic. The `VRF` is built using the `pallas::Base` of
+the $`(n-1)`$-block proposal nonce, the $`(n-1)`$-block proposal hash, and the
+`pallas::Base` of the proposal's block height. The `VRF`'s purpose is to
+eliminate long range attacks by predicting a future block with a high ranking
+that we can produce in advance.
 
 
-Each block proposal is ranked based on the modulus of the $`(n-1)`$-block 
-proposal, a `VRF` proof (attached to the block producer's reward
-transaction) and its `nonce`.
+Each block proposal is ranked based on the modulus of the $`(n-1)`$-block
+proposal, a `VRF` proof (attached to the block producer's reward transaction)
+and its `nonce`.
 
 
 The rank of the genesis block is 0. The rank of the following 2 blocks is equal
 The rank of the genesis block is 0. The rank of the following 2 blocks is equal
-to the nonce, since there is no `n-1` block producer 
-or a `VRF` attached to the reward transaction. For all other blocks, the rank
-is computed as follows:
+to the nonce, since there is no `n-1` block producer or a `VRF` attached to the
+reward transaction. For all other blocks, the rank is computed as follows:
 
 
 1. Grab the `VRF` proof from the reward transaction of the $`(n-1)`$-block proposal
 1. Grab the `VRF` proof from the reward transaction of the $`(n-1)`$-block proposal
 2. Generate a `pallas::Base` from the `blake3::Hash` bytes of the proof
 2. Generate a `pallas::Base` from the `blake3::Hash` bytes of the proof
 3. Generate a `u64` using the first 8 bytes from the `pallas::Base` of the proofs hash
 3. Generate a `u64` using the first 8 bytes from the `pallas::Base` of the proofs hash
 4. Compute the rank: `vrf_u64` % `nonce` (If `nonce` is 0, rank is equal to `vrf_u64`)
 4. Compute the rank: `vrf_u64` % `nonce` (If `nonce` is 0, rank is equal to `vrf_u64`)
 
 
-To calculate each fork rank, we simply multiply the sum of every block proposal rank in the fork 
-by the fork's length. We use the length multiplier to give a preference to longer forks, as longer forks have a chance at a higher ranking.
+To calculate each fork rank, we simply multiply the sum of every block proposal
+rank in the fork by the fork's length. We use the length multiplier to give a
+preference to longer forks, as longer forks have a chance at a higher ranking.
 
 
 ## Fork extension
 ## Fork extension
 
 
-Since there can be more than one block producer, each node holds a set of
-known forks in memory. Nodes extend the best
-ranking fork in memory when producing a block.
+Since there can be more than one block producer, each node holds a set of known
+forks in memory. Nodes extend the best ranking fork in memory when producing a
+block.
 
 
 Upon receiving a block, one of the following cases may occur:
 Upon receiving a block, one of the following cases may occur:
 
 
@@ -155,23 +157,24 @@ Extending the canonical blockchain with a new block proposal:
 
 
 When the finalization check kicks in, each node will grab its best fork.
 When the finalization check kicks in, each node will grab its best fork.
 
 
-If more than one fork exists with same rank, the node will not finalize any block proposals.
-If the fork's length exceeds the security threshold, the node
-will finalize all block proposals, excluding the $`(n-1)`$-block proposal, by appending them to the
-canonical blockchain. We exclude the $`(n-1)`$-block proposal to eliminate network race
-conditions for same block heights.
+If more than one fork exists with same rank, the node will not finalize any
+block proposals. If the fork's length exceeds the security threshold, the node
+will finalize all block proposals, excluding the $`(n-1)`$-block proposal, by
+appending them to the canonical blockchain. We exclude the $`(n-1)`$-block
+proposal to eliminate network race conditions for same block heights.
 
 
-Once finalized, all the remaining fork chains are removed from the node's memory pool.
+Once finalized, all the remaining fork chains are removed from the node's
+memory pool.
 
 
-Because of this design, finalization cannot occur while there are
-competing fork chains of the same rank whose length exceeds the security threshold.
-In such a case, finalization will occur when a single highest ranking fork emerges.
+Because of this design, finalization cannot occur while there are competing
+fork chains of the same rank whose length exceeds the security threshold. In
+such a case, finalization will occur when a single highest ranking fork
+emerges.
 
 
 We continue Case 3 from the previous section to visualize this logic.
 We continue Case 3 from the previous section to visualize this logic.
 
 
-The finalization threshold used in this example is 3 blocks.
-A node observes 2 proposals. One extends the F0 fork, and the other
-extends the F2 fork:
+The finalization threshold used in this example is 3 blocks. A node observes 2
+proposals. One extends the F0 fork, and the other extends the F2 fork:
 
 
                    |--[M0]--[M2]+--[M5] <-- F0
                    |--[M0]--[M2]+--[M5] <-- F0
     [C]--...--[C]--|
     [C]--...--[C]--|
@@ -181,8 +184,8 @@ extends the F2 fork:
                    |
                    |
                    |--[M4]              <-- F3
                    |--[M4]              <-- F3
 
 
-The two competing fork chains also have the same rank,
-therefore finalization cannot occur.
+The two competing fork chains also have the same rank, therefore finalization
+cannot occur.
 
 
 Later, the node only observes 1 proposal, extending the F2 fork:
 Later, the node only observes 1 proposal, extending the F2 fork:
 
 
@@ -194,8 +197,8 @@ Later, the node only observes 1 proposal, extending the F2 fork:
                    |
                    |
                    |--[M4]                    <-- F3
                    |--[M4]                    <-- F3
 
 
-When the finalization sync period starts, the node finalizes fork
-F2 and all other forks get dropped:
+When the finalization sync period starts, the node finalizes fork F2 and all
+other forks get dropped:
 
 
                    |/--[M0]--[M2]--[M5]      <-- F0
                    |/--[M0]--[M2]--[M5]      <-- F0
     [C]--...--[C]--|
     [C]--...--[C]--|
@@ -205,15 +208,15 @@ F2 and all other forks get dropped:
                    |
                    |
                    |/--[M4]                  <-- F3
                    |/--[M4]                  <-- F3
 
 
-The canonical blockchain now contains blocks M0, M3, M6 from fork F2,
-and the current state is:
+The canonical blockchain now contains blocks M0, M3, M6 from fork F2, and the
+current state is:
 
 
     [C]--...--[C]--|--[M7] <-- F2
     [C]--...--[C]--|--[M7] <-- F2
 
 
 # Appendix
 # Appendix
 
 
-This section gives further details about the high level structures that will
-be used by the protocol.
+This section gives further details about the high level structures that will be
+used by the protocol.
 
 
 ## Header
 ## Header
 
 
@@ -255,5 +258,5 @@ be used by the protocol.
 | Field       | Type              | Description                            |
 | Field       | Type              | Description                            |
 |-------------|-------------------|----------------------------------------|
 |-------------|-------------------|----------------------------------------|
 | `canonical` | `Blockchain`      | Canonical (finalized) blockchain       |
 | `canonical` | `Blockchain`      | Canonical (finalized) blockchain       |
-| `forks`     | `Vec<Blockchain>` | Fork chains containing block proposals |
+g `forks`     | `Vec<Blockchain>` | Fork chains containing block proposals |