如果我们必须运行ResolveTransactions流来验证每个事务,维护UTXO集似乎可以减少计算量:
https://docs.corda.net/releases/release-M10.1/key-concepts-data-model.html
当事务作为流的一部分呈现给节点时,可能需要检查它。检查原始事务的有效性是ResolveTransactions流的责任。此流程对事务图执行广度优先搜索,将所有丢失的事务下载到本地存储中并进行验证。搜索在没有输入的交易中达到最低点(例如,这些交易大多数是由发行交易创建的)。如果事务的任何传递依赖项无效,则该事务不视为有效。
最佳答案
R3的首席技术官Richard Brown在这里。
这是一个非常好的问题,在Corda的早期设计会议上我们进行了很多辩论。
首先,您对公证集群的工作(验证或未验证)的维护是正确的,即100%是正确的。这样一来,它就可以兑现其 promise ,从不签署任何试图花费以前由公证交易消耗掉的状态对象的交易。
至于缓存未使用的输出,它不会减少实际的计算-只需移动您支付成本的时间,对吗?即何时创建输出而不是何时使用输出。但这也将导致隐私减少:未消费的输出的存在将在实际消费之前以公证的方式揭示出来。
请注意:在一般情况下,同一公证群集将用于一系列的大多数事务...因此实际上没有任何要解决的问题。公证集群将已经知道依赖关系,因为它也公证了先前的事务。
当公证人确实发生变化时,可以肯定的是,可能会有很多交易解决方案要做。但是,再次提醒,新的UTXO的公证人只是在必须完成这项工作时才发生变化。我同意这可以改善某些情况下的延迟,因此我不排除它。但是,现在,该系统按照您所描述的那样工作:公证集群仅在花费输出时才知道其存在。也就是说,我们会尽最大可能优先考虑隐私。