【问题标题】:Corda: Can the output of one transaction be used in another transaction within the same flow with multiple same signers?Corda:一个事务的输出是否可以用于具有多个相同签名者的同一流中的另一个事务?
【发布时间】:2018-11-01 19:21:57
【问题描述】:

根据以下情况有一个流程。
发起方:甲方
应诉方:甲方
事务 1:输入 StateA - ContractA 导致输出 StateB - ContractA。参与者是甲方和乙方
事务 2:输入 StateB - ContractA 并且没有输出。参与者是甲方和乙方
这在 Corda 中可能吗?请务必与响应分享一个示例。谢谢。

【问题讨论】:

  • 您在尝试按照stackoverflow.com/questions/52929072/… 执行此操作时遇到什么问题?
  • 我得到的错误是与对方的会话已完成。此外,我尝试与该方发起一个新会话,但我收到错误消息,我们无法从同一发起流程与同一方发起多个会话。
  • 有道理。你能改写问题的标题和问题吗?这实际上并不是要在同一流程中使用一笔交易的输出,而是要在一个流程中从同一交易对手那里收集两次签名。
  • 更新了问题,但是corda-3.2可以做到吗?

标签: kotlin corda


【解决方案1】:

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

  • 如果您不尝试启动第二个流程会话以获取第二个签名,您会得到类似的结果:

    net.corda.core.flows.UnexpectedFlowEndException:交易对手流程开启 O=Mock Company 2, L=London, C=GB 已完成但未发送数据

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

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

在第一种情况下,错误是由于交易对手的流程已经完成造成的。您尝试通过创建第二个流会话来解决此问题,但每个 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)
    }
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 2023-02-26
      相关资源
      最近更新 更多