为什么分类帐与其父分类帐的关闭时间一起散列?

Why is a ledger hashed with the close time of its parent ledger?

这似乎是不必要的,因为分类帐 hashed 有自己的关闭时间和其父级的摘要(因此合并了父级的关闭时间)。

有些事务需要知道当前时间才能正确执行。例如,将一种资产换成另一种资产的交易需要确保它不会执行过期的报价。

那段时间真的只有两个地方。您可以从上一个账本的关闭时间获取,也可以从本账本的关闭时间获取。我选择的选项是使用前一个账本的关闭时间。

做出该选择的原因是,在开始执行该交易之前,您必须了解可能影响交易结果的一切。在执行其中的任何交易之前必须知道分类账的关闭时间会导致显着的额外计算费用。

软件 运行 收到每笔交易后都会确保交易能够执行并收取费用。这对于防止中继不收取费用的交易和允许可能导致拒绝服务攻击的免费中继是必要的。事务 运行 实际执行时越相似,所需的磁盘 I/O 和额外计算就越少。因此,当您 运行 真实交易时,您希望向交易提供与测试时相同的输入。这意味着使用 parent 账本的关闭时间而不是实际账本的关闭时间,后者直到很久以后才知道。

既然我们需要 parent 的关闭时间,为什么我们把它放在账本 header 中?真的没有特别好的理由。实际上,您需要在内存中有前一个分类帐的 header 才能生成下一个分类帐。但是,如果不将前一个分类帐的关闭时间放在 header 中,则意味着如果您只有一个分类帐,除非您查看前一个分类帐,否则您将不知道交易的有效时间。这将使理解在订单执行或其他需要时间的操作期间应用了哪些规则变得更加困难。

总而言之,出于合理的工程原因,决定使用先前分类帐的关闭时间,主要关注执行交易的关键路径的性能"for real"。但是,将关闭时间放入分类帐 header 的决定实际上只是一种温和的人为便利,可以更轻松地了解分类帐中的交易应用了多少有效壁挂时间,而无需查看分类帐外部即可知道.