以太坊收据blockid和哈希

时间:2019-05-09 07:38:43

标签: ethereum

前言:该问题与以太坊收据的内容与区块头的哈希值之间的关系有关。

问题描述:我想知道,在以太坊中,blockid是基于区块的哈希值的。标头包含收据Trie根的哈希值。收据中包含该区块的ID。

但是在将区块的ID放入收据之前,需要先知道区块本身的哈希(其中包含Receipts Trie的哈希),换句话说,我们已经有了循环依赖项。

现在,我看到4种可能性:

1)该区块包含该区块中包含的交易收据;如果不是这样,那将很容易;收据将存储在连续的块中;但这会使事情复杂化;因为可能需要激励其他节点包括外部收据,进行分发等。

2)收据Trie的散列不考虑收据中的blockID字段。这将导致某些数据具有延展性(不受PoW保护)。

3)blockID不是基于整个标头的哈希值。因此,不考虑收据Trie的哈希值。 (再次考虑到某些数据的可延展性)

4)收据内没有blockID;但是后来我看到这些包含在此处提供的一些JSON打印输出中。这些值是命令的处理接口隐式附加的吗?

是哪一种,也许是另一种可能性?

1 个答案:

答案 0 :(得分:0)

来自the yellow paper,第4.3.1节:

  

交易收据R是四个项目的元组,包括:交易发生后立即在包含交易收据的块中使用的累积气体Ru,通过交易执行创建的日志集, Rl和Bloom筛选器由这些日志中的信息Rb和事务的状态码Rz组成:

     

(20)R≡(Ru,Rb,Rl,Rz)

因此,交易收据本身并未指定该收据所属的区块的任何详细信息。