北大-区块链技术与应用17-ETH中的交易树和收据树

Zoella Lv4

以太坊中的交易树和收据树也是 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分开始):

https://www.bilibili.com/video/BV1Vt411X7JF?spm_id_from=333.788.player.switch&vd_source=69ac93649ea21c4726fe85f272b6d968&p=17

  • Title: 北大-区块链技术与应用17-ETH中的交易树和收据树
  • Author: Zoella
  • Created at : 2025-01-16 21:33:51
  • Updated at : 2025-01-16 23:26:21
  • Link: https://zoella-w.github.io/2025/01/16/46-北大区块链-ETH交易树&收据树/
  • License: This work is licensed under CC BY-NC-SA 4.0.
On this page
北大-区块链技术与应用17-ETH中的交易树和收据树