这似乎是不必要的,因为分类帐使用其自己的关闭时间和其父级的摘要(因此包含父级的关闭时间)进行哈希处理。
1 回答
有些事务需要知道当前时间才能正确执行。例如,将一种资产换成另一种资产的交易需要确保它不会执行过期的报价。
那时你真的只有两个地方可以得到。您可以从上一个账本的关闭时间获取它,也可以从这个账本的关闭时间获取它。我选择的选项是使用前一个账本的关闭时间。
这种选择的原因是您必须先了解可能影响事务结果的所有内容,然后才能开始执行该事务。必须知道账本的关闭时间才能执行其中的任何交易,这将导致大量额外的计算费用。
该软件在收到每笔交易时都会运行它,以确保交易能够执行并收取费用。这对于防止中继不收取费用的交易并允许免费中继可能导致拒绝服务攻击是必要的。事务在实际执行时运行的越相似,需要的磁盘 I/O 和额外计算就越少。因此,当您真正运行它时,您希望向交易提供相同的输入,就像您测试它时一样。这意味着使用父分类帐的关闭时间而不是实际分类帐的关闭时间,直到很久以后才知道。
那么既然我们需要parent的close时间,为什么我们要把它放在ledger header中呢?确实没有什么特别好的理由。在实践中,无论如何,您都需要在内存中拥有前一个分类帐的标题才能生成下一个分类帐。但是,不将前一个账本的关闭时间放在标题中意味着如果您只有一个账本,除非您查看前一个账本,否则您将不知道交易的有效时间是多少。这将使得更难理解在订单执行或其他需要时间的操作期间应用了哪些规则。
总而言之,使用前一个分类帐的关闭时间的决定是出于合理的工程原因,主要集中在“真正”执行交易的关键路径中的性能。但是,将关闭时间放在分类帐标题中的决定实际上只是一种温和的人类便利,以便更容易知道分类帐中的交易应用了哪些有效的挂起时间,而无需查看分类帐之外的信息。