验证公证节点是否有意义维持UTXO设置以加速tx验证?

时间:2017-07-10 22:36:43

标签: corda

如果我们必须运行ResolveTransactions流以验证每个事务,那么维护UTXO集似乎可以减少计算:

https://docs.corda.net/releases/release-M10.1/key-concepts-data-model.html

当事务作为流的一部分呈现给节点时,可能需要检查它。检查原始事务有效性是ResolveTransactions流程的责任。此流程对事务图执行广度优先搜索,将任何丢失的事务下载到本地存储并验证它们。搜索在没有输入的交易中触底(例如,这些主要是从发行交易中创建的)。如果某个事务的任何传递依赖性无效,则该事务不被视为有效。

2 个答案:

答案 0 :(得分:4)

理查德布朗,R3的CTO。

这是一个非常好的问题,我们在早期的Corda设计会议上进行了很多辩论。

首先,你是100%正确的,公证集群的工作(验证或非验证)是维护已用完的输出的日志。这就是它如何兑现承诺永远不会签署试图花费以前被公证交易消耗的状态对象的交易。

至于缓存未使用的输出,它不会减少实际计算 - 只需移动您支付成本的时间,对吧?即在创建输出时而不是在消耗时。但它也会导致隐私减少:未实际输出的存在将在实际消费之前以公证方式显示。

请注意:在一般情况下,同一个公证群集将用于系列中的大多数交易......因此实际上无法解决任何问题。公证集群已经知道了依赖关系,因为它也对先前的事务进行了公证。

当公证人更改时,是的..可能会有很多事务处理决议要做。但是,同样,预先通知新UTXO的公证人只需更改 该工作必须完成。我同意它可以改善某些边缘情况下的延迟,所以这不是我排除的。但是,现在,系统按照您的描述工作:公证集群只会在花费时了解输出的存在。即我们在最大程度上优先考虑隐私。

答案 1 :(得分:2)

为了回答自己,保持UTXO设置会加快速度。然而,它必须保持Spent TXO设置以实现最佳性能。