以太坊的整个实现机制比比特币复杂得多,所以它的区块结构也比比特币的复杂,而且它的存储不止区块这一种方式,咱们花几天的时间来好好学习一下以太坊的区块和存储。
先从区块开始。跟比特币一样,以太坊的区块结构也分为区块头和区块体,这一篇我们先讲区块头。以太坊的区块头包含15个字段:
ParentHash
这是上一个区块的哈希值,跟比特币一样,我们可以把它看成一个指针,指向上一个区块,正是有这个指针,区块和区块才串联起来,才有区块链。
Coinbase
在比特币里也有一个coinbase,但那个coinbase是指一笔特殊的交易,就是系统奖励比特币给区块创建者的那笔交易。但在以太坊这里,是区块创建者留下的以太坊地址,用于接收系统奖励和交易手续费。
UncleHash
以太坊有一个独特的东西,叫叔区块,咱们下一篇会仔细讲讲。现在只要知道这个字段就是所有叔区块用RLP编码后再哈希出来的值即可。
Root
这是一棵MPT树的根哈希,这棵树存储了所有以太坊账户。
TxHash
这也是一棵MPT树的根哈希,这棵树存储了所有的交易信息。
ReceiptHash
这还是一棵MPT树的根哈希。对于以太坊账户和交易我们都已讲过,MPT我们也讲过,用MPT树来存储它们好理解。那这棵树又是存什么的呢?其实,这棵树存储的是收据信息。什么是收据?就是交易完成后会提供一个清单给你,告诉你一些信息:比如这笔交易被哪个区块打包了,这笔交易最终花费了多少gas、执行交易时创建的一些日志等等。
Bloom
我们可以在合约中通过定义“事件”来生成日志。上面说了,在收据树里