北大-区块链技术与应用17-ETH中的交易树和收据树
以太坊中的交易树和收据树也是 MPT,其好处是支持查找操作,查找的键值是交易在发布的区块中的序号(即排第几),其顺序由发布交易的区块确定
交易树和收据树都是只把当前区块发布的交易组织起来,而状态树是把系统中所有账户的状态都包含进去(原因是:便于查找账户余额,尤其是很久没发生过交易的区块,更重要的是无法找到新账户)
上节课讲到,多个区块的状态树是共享节点的;而每个区块的交易树和收据树是独立的
交易树和收据树的用途是:提供 Merkle proof,交易树可以证明某个交易被打包到区块里,收据树的可以证明某个交易的执行结果
1、Bloom filter(布隆过滤器)
以太坊的收据树包含一个 Bloom filter
Bloom filter 可以支持高效的查找某元素是否在某个大的集合。通过将大的集合中的元素做哈希,映射到一个小的数组,该数组元素初始全为0,最终如果有元素映射到该位置,则置为1
用 Bloom filter 检测元素是否在某个集合中,可能会出现 false positive(假阳性),即 实际不在、但是检测结果在,但检测结果在、实际一定在。且 Bloom filter 不支持删除元素
Bloom filter 在以太坊中的用途是支持复杂查询操作,比如:找到过去10天所有 和某个智能合约有关 / 众筹 / 发布新币的交易
每个交易执行后会形成一个收据,收据里包含一个 Bloom filter,记录该交易的类型、地址和其他信息。发布的区块在块头里也有一个总的 Bloom filter,是区块里所有交易 Bloom filter 的并集
轻节点只有块头信息,可以通过 Bloom filter 过滤掉很多区块,只保留符合条件的(即可能含有该交易的)区块,然后向全节点获取进一步的信息
以太坊的运行过程,可以看做一个 transaction-driven state machine(交易驱动的状态机),状态是所有账户的状态,交易是每次发布的区块中的交易,执行交易会驱动系统转移到下一个状态
比特币也可以看做一个交易驱动的状态机,其状态是 UTXO
2、交易树、收据树、叔父数组 源码
有点复杂,暂时没搞明白,详见以下课程链接(从29分开始):
- Title: 北大-区块链技术与应用17-ETH中的交易树和收据树
- Author: Gabrielle
- Created at : 2025-01-16 21:33:51
- Updated at : 2025-05-20 10:47:28
- Link: https://zoella-w.github.io/2025/01/16/46-北大区块链-ETH交易树&收据树/
- License: This work is licensed under CC BY-NC-SA 4.0.