Kotlin Corda:一个事务的输出是否可以用于同一流程中具有多个相同签名者的另一个事务?

Kotlin Corda:一个事务的输出是否可以用于同一流程中具有多个相同签名者的另一个事务?,kotlin,corda,Kotlin,Corda,有一个符合以下场景的流程。 发起方:甲方 响应方:PartyB 事务1:输入状态A-ContractA导致输出状态B-ContractA。参与者是PartyA和PartyB 事务2:输入状态B-ContractA,无输出。参与者是PartyA和PartyB 在科尔达这可能吗?请分享一个有回应的例子。谢谢。是的,这是可能的。请查找链接了解更多信息 听起来您收到了两条不同的错误消息: 如果不尝试启动第二个流会话来获取第二个签名,则会得到如下结果: net.corda.core.flows.unex

有一个符合以下场景的流程。
发起方:甲方
响应方:PartyB
事务1:输入状态A-ContractA导致输出状态B-ContractA。参与者是PartyA和PartyB
事务2:输入状态B-ContractA,无输出。参与者是PartyA和PartyB

在科尔达这可能吗?请分享一个有回应的例子。谢谢。

是的,这是可能的。请查找链接了解更多信息


听起来您收到了两条不同的错误消息:

  • 如果不尝试启动第二个流会话来获取第二个签名,则会得到如下结果:

    net.corda.core.flows.unexpected FlowEndException:交易对手流动 O=模拟公司2,L=伦敦,C=GB已完成,未发送数据

  • 如果您确实启动了第二个流会话以获取第二个签名,则会得到如下结果:

    java.lang.IllegalStateException:尝试在中启动两次流() 同样的启动流程 com.example.flow.ExampleFlow$Initiator@312d7fe4为同一方 O=模拟公司2,L=伦敦,C=GB。此版本不支持此操作 科尔达的。或者,您可以通过调用 @InitiatingFlow子流中的initiateFlow()

在第一种情况下,错误是由于交易对手的流程已经完成。您尝试通过创建第二个流会话来绕过此问题,但每个
启动
流只能启动与给定对手的单个流会话

相反,您只需修改响应程序流以进行两次签名。例如:

@InitiatedBy(Initiator::class)
class Acceptor(val otherPartyFlow: FlowSession) : FlowLogic<Unit>() {
    @Suspendable
    override fun call() {
        val signTransactionFlow = object : SignTransactionFlow(otherPartyFlow) {
            override fun checkTransaction(stx: SignedTransaction) = requireThat {
                // Transaction checks...
            }
        }

        subFlow(signTransactionFlow)
        subFlow(signTransactionFlow)
    }
}
@InitiatedBy(启动器::类)
类接受程序(val otherPartyFlow:FlowSession):FlowLogic(){
@暂停
覆盖有趣的调用(){
val signTransactionFlow=对象:signTransactionFlow(otherPartyFlow){
覆盖有趣的checkTransaction(stx:SignedTransaction)=要求{
//事务检查。。。
}
}
子流(signTransactionFlow)
子流(signTransactionFlow)
}
}

尝试按照执行此操作时遇到了什么问题?我得到的错误是与另一方的会话已完成。此外,我尝试与该方发起新会话,但我得到错误,我们无法从同一发起流与同一方发起多个会话。这是有意义的。你能把题目和问题改一下吗?这并不是在同一流程中使用一笔交易的输出,而是在同一流程中两次从同一交易对手处收集签名。更新了问题,但corda-3.2是否可能实现这一点?