区块链的基本结构
区块是一个包含了很多有效交易的数字账簿。这些交易通过Merkle hash tree的形式组织起来。那么每个区块包含什么东西呢?
下面我们分别介绍比特币,以太坊中区块的结构:
比特币区块
- Magic number是一个定值,用来记录一个新的区块的开始,已经用来标示当前的区块链网络。
- Previous Block Hash是上一个区块的Merkle Root值,区块就是以这种形式连接起来形成一个链的。Previous Block Hash是上一个区块的Merkle Root值,区块就是以这种形式连接起来形成一个链的。
- Timestamp,Difficulty Target和Nonce是用来挖矿的时候使用的。
上面的树形结构就是Merkle Hash Tree。树的结构和每个节点的含义以及计算方法都如图所示。
以太坊区块
和比特币的区块结构类似,由于考虑到其能力有限(例如不能提供验证当前账号持有多少资产的方法),以太坊对其区块结构进行了修正,以太坊的区块在起头中包含三棵Merkle Hash Tree的根,这三棵树分别是交易树,收据树和状态树。
其中的交易树和收据树类似于银行系统的交易记录和收据记录,状态树用来储存账户的整体信息,类似于银行系统的账户总览。
同样的,在以太坊中,Merkle Hash Tree的结构也发生了些许的变化。因为对于交易树来讲,二叉树的Merkle Hash Tree已经足够使用,因为交易完成以后不会再发生变化。但是,对于状态树,二叉树就不够用了,因为状态是一个key-value的存储形式,key是账户的地址,value包含了余额,nonce,代码和存储等。为了让树的插入和更新操作更加高效,需要一种新的数据结构–Patricia Tree。
这种新的数据结构使得树的整体高度是有限制的,哪怕有攻击者故意增加交易来尝试着增加树的高度。另外, 树根的hash值和内部数据的次序无关,这样,插入操作的顺序不会影响根节点的计算。
EOS区块
此部分尚未完全整理清楚,整理清楚后再来填坑。