Corda Flow Responder 对方逻辑
Corda Flow Responder counter party logic
基本上,我有启动状态生成交易的流程,涉及 3 方:
甲方 - 我们的身份
乙方 - 应该签
PartyC - 应该签
发起流程创建新状态并构建交易,然后收集其他方的签名。
PartyB和PartyC应该自己做具体的业务逻辑验证。
将这些支票放在流量响应器中是否正确,如果不正确 - 将它们放在哪里?
另外,我可以将响应程序代码分开,例如:
override fun call(): SignedTransaction {
val signTransactionFlow = object : SignTransactionFlow(otherPartySession) {
override fun checkTransaction(stx: SignedTransaction) = requireThat {
val output = stx.tx.outputs.single().data
if (otherPartySession.counterParty == output.participantB) {
// Do checks for PartyB
}
if (otherPartySession.counterParty == output.participantC) {
// Do checks for PartyC
}
}
}
val txId = subFlow(signTransactionFlow).id
return subFlow(ReceiveFinalityFlow(otherPartySession, expectedTxId = txId))
}
是的,PartyB和PartyC的交易验证应该放在Responder流程中。您提出的解决方案是正确的。
更常见的是,Responder流程也可以拆分到不同的节点,一个在PartyB的节点,一个在PartyC的节点,这样他们就看不到彼此的实现。
基本上,我有启动状态生成交易的流程,涉及 3 方:
甲方 - 我们的身份
乙方 - 应该签
PartyC - 应该签
发起流程创建新状态并构建交易,然后收集其他方的签名。
PartyB和PartyC应该自己做具体的业务逻辑验证。
将这些支票放在流量响应器中是否正确,如果不正确 - 将它们放在哪里?
另外,我可以将响应程序代码分开,例如:
override fun call(): SignedTransaction {
val signTransactionFlow = object : SignTransactionFlow(otherPartySession) {
override fun checkTransaction(stx: SignedTransaction) = requireThat {
val output = stx.tx.outputs.single().data
if (otherPartySession.counterParty == output.participantB) {
// Do checks for PartyB
}
if (otherPartySession.counterParty == output.participantC) {
// Do checks for PartyC
}
}
}
val txId = subFlow(signTransactionFlow).id
return subFlow(ReceiveFinalityFlow(otherPartySession, expectedTxId = txId))
}
是的,PartyB和PartyC的交易验证应该放在Responder流程中。您提出的解决方案是正确的。 更常见的是,Responder流程也可以拆分到不同的节点,一个在PartyB的节点,一个在PartyC的节点,这样他们就看不到彼此的实现。