黄纸上写着:
交易收据。为了对有关事务的信息进行编码,对其形成零知识证明或索引和搜索可能是有用的,我们编码包含执行过程中的某些信息的每个事务的接收。
为什么这些信息没有存储在事务本身中?这样,就可以在块头中再保存一个字段。那么这背后的设计理念是什么呢?
发布于 2018-09-12 01:47:29
因为事务是通过散列标识的。在事务的所有字段上计算事务哈希。在签署了事务后,您不能在不更改哈希的情况下修改它,如果在挖掘它之前就这样做了,网络就会将它视为不同的事务。
当事务创建合同时,合同地址存储在收据中。如何在不更改其哈希的情况下将这些数据添加到事务struct
中?您不能这样做。封闭事务结果的唯一方法是创建另一个struct
并将其存储在那里。这就是Receipts
,它是事务的output
,这是一个非常不同的概念,而Transaction
数据是input
。
简而言之,以这种方式设计事物的决定是正确的。
顺便说一句,事务不存储在块头中,事务存储在单独的trie中。只有块的所有事务的散列保存在标头中。
https://ethereum.stackexchange.com/questions/58528
复制相似问题