在Corda中,FinityFlow:
participants
按照共识,验证涉及到走链。
我查看了FinalityFlow代码。沿着链走的事情到底发生在什么地方?
公证人和participants
也会顺其自然吗?如果是,他们会检查链中每笔交易的签名,但是它在代码中的确切位置发生了?
据我了解,SendTransactionFlow
将交易发送给participants
列表中的其他各方。另一方也要求提供附件和交易依存关系。连锁经营实际上发生在哪里?
我需要从编码的角度理解链条。
答案 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))
}
公证人只有经过验证的公证人才会以这种方式走链。