区块链学习笔记(二)

区块链的基本结构

区块是一个包含了很多有效交易数字账簿。这些交易通过Merkle hash tree的形式组织起来。那么每个区块包含什么东西呢?
下面我们分别介绍比特币,以太坊中区块的结构:

比特币区块

区块链学习笔记(二)_第1张图片

  1. Magic number是一个定值,用来记录一个新的区块的开始,已经用来标示当前的区块链网络。
  2. Previous Block Hash是上一个区块的Merkle Root值,区块就是以这种形式连接起来形成一个链的。Previous Block Hash是上一个区块的Merkle Root值,区块就是以这种形式连接起来形成一个链的。
  3. Timestamp,Difficulty Target和Nonce是用来挖矿的时候使用的。
    区块链学习笔记(二)_第2张图片
    上面的树形结构就是Merkle Hash Tree。树的结构和每个节点的含义以及计算方法都如图所示。

以太坊区块

和比特币的区块结构类似,由于考虑到其能力有限(例如不能提供验证当前账号持有多少资产的方法),以太坊对其区块结构进行了修正,以太坊的区块在起头中包含三棵Merkle Hash Tree的根,这三棵树分别是交易树收据树状态树
区块链学习笔记(二)_第3张图片
其中的交易树和收据树类似于银行系统的交易记录和收据记录,状态树用来储存账户的整体信息,类似于银行系统的账户总览。

同样的,在以太坊中,Merkle Hash Tree的结构也发生了些许的变化。因为对于交易树来讲,二叉树的Merkle Hash Tree已经足够使用,因为交易完成以后不会再发生变化。但是,对于状态树,二叉树就不够用了,因为状态是一个key-value的存储形式,key是账户的地址,value包含了余额,nonce,代码和存储等。为了让树的插入和更新操作更加高效,需要一种新的数据结构–Patricia Tree

这种新的数据结构使得树的整体高度是有限制的,哪怕有攻击者故意增加交易来尝试着增加树的高度。另外, 树根的hash值和内部数据的次序无关,这样,插入操作的顺序不会影响根节点的计算。

EOS区块

此部分尚未完全整理清楚,整理清楚后再来填坑。

你可能感兴趣的:(区块链)