以太坊 收据树
每个区块都有一棵独立的 收据树 (receiptsRoot)。
收据树中包含了执行交易期间产生的相应的收据,就和我们去超市买东西,在交易完毕后拿到的收据小票一样。
如果一笔交易是一次智能合约的执行,则在以太坊执虚拟机执行的过程中会产生程序员自定义的日志,日志是智能合约自定义的格式。日志(Log)包含了日志产生方的地址、日志话题(topics)、日志数据(可选)。收据的集合通过一棵树来组织,如下图的最右侧所示。
从左到右:日志、交易收据,收据树的构成
若我们取出收据树中的一个节点并放大来仔细查看,则一个节点就是一次交易的收据。 交易 收据 (transaction receipt)是一个键值对映射,它的 键 是交易的编号,它的 值 是 RLP 编码过的四个域:交易后的状态、交易实际花费的交易费、交易产生的日志集合、日志的索引结构组成。
在实际应用中,在本区块内的数笔交易都顺利执行完毕后,也产生了数笔相对应的交易收据,由 MPT 树组织起来,计算得出根哈希值,称为receiptsRoot 交易树 ,该值将进入区块头部被永久保留。所有收据和对应着收据的日志将被存于世界各地以太坊节点计算机的数据库里,方便客户进行查询。
一个 “区块” 究竟长成什么样子? 区块之间如何串联起来成为单向的区块链?以太坊对的区块定义是一个对象,包含了区块头和区块体两个组成部分。区块头 较为轻量级,包含了一系列的数值、引用的数值以及哈希值, ...