Corda在FinalityFlow中走链

时间:2018-11-15 07:22:47

标签: corda

在Corda中,FinityFlow:

  1. 验证发起方节点上的交易
  2. 公证交易
  3. 坚持将交易签名到发起方的保险库中
  4. 将交易分配到participants

按照共识,验证涉及到走链。

我查看了FinalityFlow代码。沿着链走的事情到底发生在什么地方?

公证人和participants也会顺其自然吗?如果是,他们会检查链中每笔交易的签名,但是它在代码中的确切位置发生了?

据我了解,SendTransactionFlow将交易发送给participants列表中的其他各方。另一方也要求提供附件和交易依存关系。连锁经营实际上发生在哪里?

我需要从编码的角度理解链条。

1 个答案:

答案 0 :(得分:0)

FinalityFlow中,调用方使用以下行将经过公证的交易发送到所有状态的participants

subFlow(SendTransactionFlow(session, notarised))

如果我们查看AbstractNode.installCoreFlows,我们会看到该节点为FinalityFlow安装了称为FinalityHandler的默认处理程序。 FinalityHandler通过调用SendTransactionFlow来响应FinalityFlow中对ReceiveTransactionFlow的呼叫。

ReceiveTransactionFlow内部,我们可以看到该节点解析了交易的依赖关系,验证了交易并检查了其签名:

val stx = otherSideSession.receive<SignedTransaction>().unwrap {
    subFlow(ResolveTransactionsFlow(it, otherSideSession))
    it.verify(serviceHub, checkSufficientSignatures)
    it
}

作为解决ResolveTransactionsFlow中交易依赖关系的一部分,节点验证每个交易并检查其签名(默认情况下,verify检查交易中的签名):

result.forEach {
    it.verify(serviceHub)
    serviceHub.recordTransactions(StatesToRecord.NONE, listOf(it))
}

公证人只有经过验证的公证人才会以这种方式走链。