Blockchain Reorg Content

This commit is contained in:
Josh Green
2020-01-02 14:17:44 -05:00
committed by root
parent d5f2a3ed9a
commit 64e13308f2
2 changed files with 39 additions and 8 deletions
+34 -3
View File
@@ -17,7 +17,7 @@ With this property, changing old blocks becomes nearly impossible as long as the
Blocks are applied sequentially, and therefore for a given chain, a block can be identified by its distance from the Genesis Block.
This distance is commonly referred to as `Block Height`.
There may be multiple blocks at the same `Block Height` if two blocks are built that share a previous Block's Hash.
Multiple Blocks with the same `Block Height` are often referred to as "sibling" Blocks.
Multiple Blocks with the same `Block Height` are often referred to as "sibling" Blocks, or "contentious" blocks.
Sibling Blocks can happen if a Block is created with sufficient Work before the mining Node has been made aware of the new (Sibling) Block.
Sibling Blocks are incompatible with one another, and eventually one will become orphaned.
The [Genesis Block](/protocol/blockchain#genesis-block) is the first Block in a chain, and has a `Block Height` of `0` (as its distance to the Genesis Block is zero).
@@ -27,10 +27,41 @@ As of [BIP-0034](/blockchain/forks/bip-34), the `Block Height` is included withi
## Work
The longest valid chain with the most [Proof of Work](/protocol/blockchain/proof-of-work) is generally considered to be the main chain.
Work can be quickly verified by evaluating the Block's [Difficulty](/protocol/blockchain/proof-of-work/difficulty).
The [Chain Work](/protocol/blockchain/proof-of-work#chain-work) is the summation of all work done up to a point on the Blockchain.
Work can be quickly verified by evaluating the Block's [Difficulty](/protocol/blockchain/proof-of-work/difficulty) and validated by checking the Block's hash.
[Chain Work](/protocol/blockchain/proof-of-work#chain-work) is the summation of all work done on each block up to a point on the Blockchain.
As of [HF-20171113](/protocol/forks/hf-20171113), Chain Work is used to calculate new Block's [difficulty adjustment](/protocol/blockchain/proof-of-work/difficulty-adjustment-algorithm) as of Block Height.
## Blockchain Reorganization
When two valid blocks share the same block height, they are considered contentious blocks.
Contentious blocks can happen organically due to the random nature of mining—the likeliness being proportional to the block propagation speed and the time between blocks.
Slow-propagating blocks require a longer block interval in order to prevent contentious blocks.
When two blocks become contentious, the first-seen block is usually considered the valid block on the main chain; however, different nodes across the network may have seen different blocks first.
Consensus is formed when a second block is mined on a contentious block.
This second block may also be contentious, although a rare circumstance.
In this case, the process repeats and the race continues until consensus is reached.
```diagramLabel
1. Blocks 2a and 2b are mined before the either have fully propogated throughout the network.
2. Some Nodes follow Block 2a, others follow Block 2b, depending on which Block they received first.
3. Block 3 is mined on top of Block 2b. Nodes originally following Block 2a abandon Block 2A, and begin following Block 2b/3.
```
```mermaid
graph LR
0 --> 1
1 --> 2a
1 --> 2b
2b --> 3
style 2a stroke: #AAAAAA, stroke-dasharray: 5, 5
```
## Genesis Block