1
0
mirror of https://github.com/bitcoinbook/bitcoinbook synced 2024-11-26 18:08:31 +00:00

block and merkle diagrams

This commit is contained in:
Andreas M. Antonopoulos 2014-06-28 16:14:59 -04:00
parent 4a010418db
commit bf5e12fba2
7 changed files with 32 additions and 2 deletions

View File

@ -74,13 +74,43 @@ $ bitcoind getblock 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8c
| 4 bytes | Nonce | A counter used for the proof-of-work algorithm | 4 bytes | Nonce | A counter used for the proof-of-work algorithm
|======= |=======
=== Linking Blocks in a Chain
[[chain_of_blocks]]
.Blocks linked in a chain, by reference to the previous block header hash
image::images/ChainOfBlocks.png["chain_of_blocks"]
=== The Genesis Block
=== Merkle Trees === Merkle Trees
A _Merkle Tree_ is a data structure created by Ralph Merkle used for efficiently summarizing and verifying the integrity of large sets of data. Merkle Trees are binary trees containing cryptographic hashes. When N data elements are hashed and summarized in a Merkle Tree, you can check to see if any one data element is included in the tree with at most +log(N)+ calculations, making this a very efficient data structure.
[[simple_merkle]]
.Calculating the nodes in a Merkle Tree
image::images/MerkleTree.png["merkle_tree"]
[[merkle_tree_odd]]
.An even number of data elements, by duplicating one data element
image::images/MerkleTreeOdd.png["merkle_tree_odd"]
[[merkle_tree_large]]
.A Merkle Tree summarizing many data elements
image::images/MerkleTreeLarge.png["merkle_tree_large"]
[[merkle_tree_path]]
.A Merkle Path used to prove inclusion of a data element
image::images/MerkleTreePathToK.png["merkle_tree_path"]
=== Proof-of-Work (Mining) and Consensus === Proof-of-Work (Mining) and Consensus
==== Consensus Mechanism ==== Consensus Mechanism
==== Proof-of-Work Algorithm ==== Proof-of-Work Algorithm
==== Difficulty Target and Re-Targetting ==== Difficulty Target and Re-Targetting
==== Blockchain Forks
[[chainforks]]
.A blockchain showing two instances of forking
image::images/BlockChainWithForks.png["chainforks"]
==== Highest Difficulty Chain Selection ==== Highest Difficulty Chain Selection
==== Competition and Coinbase ==== Competition and Coinbase
==== Mining Pools ==== Mining Pools
@ -90,7 +120,7 @@ $ bitcoind getblock 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8c
==== Consensus Attacks ==== Consensus Attacks
===== 51% Attack ===== 51% Attack
===== Selfish Mining Attack ===== Selfish Mining Attack
=== Chain Forking
==== Normal Forks ==== Normal Forks
==== Soft Forks ==== Soft Forks
==== Hard Forks ==== Hard Forks

BIN
images/BlockChainWithForks.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
images/ChainOfBlocks.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
images/MerkleTree.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
images/MerkleTreeLarge.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
images/MerkleTreeOdd.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
images/MerkleTreePathToK.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB