前面文章介绍了状态树,接下来介绍交易树和收据树,跟哈希值对应区块头中的TxHash和ReceiptHash。
交易树跟比特币系统中的默克尔树类似,就是当前区块中所有交易组成的一棵树,不同的是交易树类型是MPT(Merkle Patricia Tree)树,键值是交易在发布区块时的序号。
每个交易执行完毕后,都会有一个收据,这个收据记录交易的相关信息。每个区块中,所有交易的收据会组织成一颗收据树,与交易树是一一对应的,同样也是MPT树类型。
在以太坊中最重要的功能是加入了智能合约,而智能合约的执行过程比较复杂,收据树的作用是利于系统快速查询执行结果。
Bloom Filter在前面文章有讲解过,这里不再阐述,有兴趣的可以翻阅前面文章。大致总结如下几点:
2.有可能出现漏报,但一定不会出现漏报(哈希碰撞)。可以采用一组哈希函数映射,避免出现哈希碰撞。
3.普通的Bloom Filter不支持删除元素操作。删除元素时改变位状态,可能存在其他元素映射到相同位置而受到影响。
在区块头中有一个总的Bloom Filter,是区块中所有交易收据的Bloom Filter的并集。
当我们需要查找过去某段时间某个智能合约相关的所有交易时,第一步,在区块头中查找是否存在相关的交易类型;第二步,若存在,则在区块内部的所有收据里的Bloom Filter中查找。若第一步中没有查到,则无需第二步了,直接查找下个区块。
状态树、交易树、收据树都是MPT树。发布区块时,状态树是保存的所有账户(发生过交易的账户)的树,而交易树和收据树是当前区块的交易组织起来的。
交易树和收据树,由于文章篇幅有限,这里只讲解了一些基本原理,若要深入研究,可参考以太坊的源码和官方文档深入理解。

