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

时间:2018-10-25 06:56:16

标签: kotlin corda

按照以下方案进行操作。
发起方:PartyA
响应方:PartyB
事务1:输入StateA-ContractA产生输出StateB-ContractA。参加者是甲方和乙方
事务2:输入状态B-合同A,无输出。参加者是甲方和乙方
在科尔达有可能吗?请与响应分享一个例子。谢谢。

2 个答案:

答案 0 :(得分:0)

是可以的。请找到链接以了解更多信息

https://docs.corda.net/key-concepts-transactions.html

答案 1 :(得分:0)

听起来您会收到两种不同的错误消息:

  • 如果您不尝试启动第二个流会话以获取第二个签名,则会得到类似以下内容的信息:

      

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

  • 如果您确实启动第二个流会话以获取第二个签名,则会得到类似以下内容的信息:

      

    java.lang.IllegalStateException:尝试在两次中初始化InitialFlow()   相同的InitiatingFlow   com.example.flow.ExampleFlow$Initiator@312d7fe4对于同一方   O =模拟公司2,L =伦敦,C = GB。此版本不支持此功能   科尔达。或者,您可以通过调用以下命令来启动新流程   @InitiatingFlow子流中的initializeFlow()。

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

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

@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)
    }
}