区块链是中本聪发明的比特币使用的底层技术架构。它本身是一串连接的数据区块,区块之间的连接指针是区块头散列指针,它们是使用密码学散列算法生成的。区块本质上就是一个数据包,比特币的交易记录会保存在区块中,大约每10min生成一个新的区块。所谓的区块,其实可以定义为记录一段时间内发生的交易和状态结果的数据结构,是对当前账本状态的一次共识。
比特币的每个数据区块一般包含区块头(Header)和区块体(Body)两部分。区块头封装了前一个区块的散列值(Prev_Hash)、时间戳(Timestamp)、随机数(Nonce)、Merkle树的根值(Tx_Root)和当前区块的散列值等信息。区块体中则主要包含交易计数和交易详情,区块结构如图2-2所示。
图2-2 比特币区块结构
每一笔交易都被永久地记录在区块中,任何人都可以查询。交易是通过Merkle树(具体介绍见2.4.1节)的数据结构记录的,其中每一笔交易都包含了数字签名,如此可以保证每一笔交易都不可伪造,不能篡改。所有的交易过程都将通过Merkle树的Hash过程生成一个唯一的Tx_Root记录到区块中。用户在验证区块的有效性时,只需要根据Merkle树的Hash方法计算出根值并与区块中的Tx_Root值进行比对,即可验证其真伪,若相同即有效,若不同则无效。
以太坊同样使用了比特币区块链的技术,但是它在比特币区块链技术上做了一些调整。区块主要由区块头、交易列表和叔区块头三部分组成。区块头 包含下列信息:父块的散列值(Prev Hash)、叔区块 的散列值(Uncles Hash)、状态树根散列值(stateRoot)、交易树根散列值(Transaction Root)、收据树根散列值(Receipt Root)、时间戳(Timestamp)、随机数(Nonce)等。以太坊区块链上区块数据结构的一个重大改变就是保存了三棵Merkle树根,分别是状态树、交易树和收据树。存储三棵树可方便账户做更多查询。交易列表是由矿工 从交易池中选择收入区块中的一系列交易。区块链上的第一个区块称为“创世区块”,区块链上除了创世区块以外每个区块都有它的父区块,这些区块连接起来组成一个区块链。以太坊大约每15s可以挖出一个新的区块。图2-3显示了以太坊区块结构中状态树的更新。
图2-3 以太坊区块结构