<p>A bitcoin full node independently validates the history of the network. To do so, it must validate each block in sequence (which includes all transactions in each block). </p>

<p>A merkle tree provides a cryptographic commitment to some data, but does not hold that data itself (it just holds hashes of the data). So a merkle tree alone is insufficient to validate the history of the network. Nodes need block and transaction data to do so, not just the merkle tree commitment. </p>

CC BY-SA 4.0
2019-02-17T18:09:57.363Z
I don't see it yet. I could imagine just putting the data as another field in the merkle tree nodes (leaf nodes). Or why not just have blocks and no merkle tree. Basically, why not just have one data structure instead of these two or three.
Lance Pollard
CC BY-SA 4.0
2019-02-17T20:19:26.420Z
The merkle tree is not included in a block, only the merkle root is. The merkle root serves as a cryptographic commitment to the transactions being included in the block (it is part of the block header, and the block header is what is hashed to find a valid PoW). Including it allows lightwallets a mechanism to verify that certain transactions are included in the longest valid chain, in a much less resource intensive way than a full node’s full validation process.
chytrik
CC BY-SA 4.0
2019-02-18T13:37:36.150Z
Merkle tree IS in the block. The Merkle root is in the header only (which is what you meant by the looks of it).
Jannes
CC BY-SA 4.0
2019-02-18T19:08:33.243Z
@Jannes I meant that all intermediate nodes in the merkle tree are not stored explicitly, as a node can use the block to compute the entire tree itself. Storing the entire tree explicitly would be redundant, a waste of blockspace.
chytrik
CC BY-SA 4.0
2019-02-17T17:38:00.617Z
2019-02-17T17:38:00.617Z
chytrik
<p>I am reading <a href="https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch09.asciidoc#mining" rel="nofollow noreferrer">this</a> and now wondering why the blockchain isn't just implemented as a Merkle tree, or the reverse, why you can't just have a single data structure (i.e. a transaction chain) instead of the block chain with nested Merkle tree of transactions.</p>

CC BY-SA 4.0
2019-02-17T20:50:52.253Z
It [seems to me](https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch09.asciidoc#merkle_tree_large) the block is just there to make the merkle tree work, since it requires bottom-up calculation and doesn't support appending to the tree very well, so instead you want to create a small compact tree and group it into blocks. Please correct if wrong.
Lance Pollard
CC BY-SA 4.0
2019-02-17T20:51:33.737Z
Don't understand why you need to "prove that a specific transaction is included in a block".
Lance Pollard
<blockchain><merkle-tree>
Why the blockchain isn't just a Merkle tree
Lance Pollard
# Why the blockchain isn't just a Merkle tree

(Asked by: username_0 on 2019-02-17)

I am reading [this](https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch09.asciidoc#mining) and now wondering why the blockchain isn't just implemented as a Merkle tree, or the reverse, why you can't just have a single data structure (i.e. a transaction chain) instead of the block chain with nested Merkle tree of transactions.

**Tags:** blockchain, merkle-tree

> **Comments:**
> **username_0**: It [seems to me](https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch09.asciidoc#merkle_tree_large) the block is just there to make the merkle tree work, since it requires bottom-up calculation and doesn't support appending to the tree very well, so instead you want to create a small compact tree and group it into blocks. Please correct if wrong.  
> **username_0**: Don't understand why you need to "prove that a specific transaction is included in a block".  

---

## 1 answers

### Answer by username_1 on 2019-02-17. Score: 1

A bitcoin full node independently validates the history of the network. To do so, it must validate each block in sequence (which includes all transactions in each block).

A merkle tree provides a cryptographic commitment to some data, but does not hold that data itself (it just holds hashes of the data). So a merkle tree alone is insufficient to validate the history of the network. Nodes need block and transaction data to do so, not just the merkle tree commitment.

> **Comments:**
> **username_0**: I don't see it yet. I could imagine just putting the data as another field in the merkle tree nodes (leaf nodes). Or why not just have blocks and no merkle tree. Basically, why not just have one data structure instead of these two or three.  
> **username_1**: The merkle tree is not included in a block, only the merkle root is. The merkle root serves as a cryptographic commitment to the transactions being included in the block (it is part of the block header, and the block header is what is hashed to find a valid PoW). Including it allows lightwallets a mechanism to verify that certain transactions are included in the longest valid chain, in a much less resource intensive way than a full node’s full validation process.  
> **username_2**: Merkle tree IS in the block. The Merkle root is in the header only (which is what you meant by the looks of it).  
> **username_1**: @username_2 I meant that all intermediate nodes in the merkle tree are not stored explicitly, as a node can use the block to compute the entire tree itself. Storing the entire tree explicitly would be redundant, a waste of blockspace.  

---

