前言:该问题与以太坊收据的内容与区块头的哈希值之间的关系有关。
问题描述:我想知道,在以太坊中,blockid是基于区块的哈希值的。标头包含收据Trie根的哈希值。收据中包含该区块的ID。
但是在将区块的ID放入收据之前,需要先知道区块本身的哈希(其中包含Receipts Trie的哈希),换句话说,我们已经有了循环依赖项。
现在,我看到4种可能性:
1)该区块包含该区块中包含的交易收据;如果不是这样,那将很容易;收据将存储在连续的块中;但这会使事情复杂化;因为可能需要激励其他节点包括外部收据,进行分发等。
2)收据Trie的散列不考虑收据中的blockID字段。这将导致某些数据具有延展性(不受PoW保护)。
3)blockID不是基于整个标头的哈希值。因此,不考虑收据Trie的哈希值。 (再次考虑到某些数据的可延展性)
4)收据内没有blockID;但是后来我看到这些包含在此处提供的一些JSON打印输出中。这些值是命令的处理接口隐式附加的吗?
是哪一种,也许是另一种可能性?
答案 0 :(得分:0)
来自the yellow paper,第4.3.1节:
交易收据R是四个项目的元组,包括:交易发生后立即在包含交易收据的块中使用的累积气体Ru,通过交易执行创建的日志集, Rl和Bloom筛选器由这些日志中的信息Rb和事务的状态码Rz组成:
(20)R≡(Ru,Rb,Rl,Rz)
因此,交易收据本身并未指定该收据所属的区块的任何详细信息。