背景
在各种区块链项目中(例如以太坊),节点往往需要维护三个 Trie Root
https://github.com/ethereum/go-ethereum:44a3b8c04cf18dc0a796f96d5972beb0e3cbe79b:core/types/block.go,L69-86:
stateRoot TransactionsRoot ReceiptsRoot
问题在于ReceiptsRoot的必要性。我们是否能省略ReceiptsRoot,仅检查stateRoot是否正确来对block的transaction是否执行正确。
Root存储的内容
- TransactionsRoot
TransactionsRoot 存储的是 block中transactions组成的Trie的Root
TransactionsRoot的作用最简单,用于接收者检查block中transactions的完整性。 - ReceiptsRoot
ReceiptsRoot存储的是交易回执内容
receipt本身记录交易是否在block被成功执行。
receipts, logs