【问题标题】:How do I define multiple responder flows, each in a different CorDapp?如何定义多个响应者流,每个流在不同的 CorDapp 中?
【发布时间】:2018-07-15 09:30:07
【问题描述】:

在 Corda 中,我想创建几个不同版本的响应程序流,每个版本供不同的节点使用。

为此,我了解我需要在单独的 CorDapp 中定义每个响应程序流。但是,它们也都需要通过InitiatedBy 注解依赖于启动流类。

我如何构建包含响应程序流的不同实现的 CorDapp,以便它们都依赖于这个通用的启动流,而不包括我定义启动流的同一个 CorDapp 中的所有响应程序流?

【问题讨论】:

    标签: corda


    【解决方案1】:

    您需要先定义包含启动流程的 CorDapp,然后将此 CorDapp 设置为每个包含响应程序流程的 CorDapp 的依赖项。详情请见https://docs.corda.net/cordapp-build-systems.html#dependencies-on-other-cordapps

    例如,假设 CorDapp 1 定义了以下启动流程:

    @InitiatingFlow
    @StartableByRPC
    class Initiator : FlowLogic<Unit>() {
        ...
    }
    

    然后你有 CorDapp 2A,它定义了以下响应者流程:

    @InitiatedBy(Initiator::class)
    @StartableByRPC
    class ResponderA : FlowLogic<Unit>() {
        ...
    }
    

    还有 CorDapp 2B,它定义了以下响应者流程:

    @InitiatedBy(Initiator::class)
    @StartableByRPC
    class ResponderB : FlowLogic<Unit>() {
        ...
    }
    

    CorDapp 2ACorDapp 2B 需要在它们的 build.gradle 文件中添加一个依赖项,使这些 CorDapp 依赖于 CorDapp 1,其中定义了启动流程。

    【讨论】:

      【解决方案2】:

      那么问题来了,

      为什么 CorDapp1 的所有者分享他们的业务流程逻辑 给其他?如果企业想要保持流程实现代码库对他们私有怎么办?

      我认为以下是项目结构和实施:

      例如。我有三方 PartyA、PartyB、PartyC,每个方都有自己的 CorDapp 版本。

      1. cordapp-contract-states - 此 CorDapp 包含共享的 contractstatesabstract initiating flowscounter-parties 将使用它们来实现他们的 responder flow logic此 CorDapp 与所有必需的交易对手共享。

        @InitiatingFlow 抽象类 CreateTradeBaseFlow : FlowLogic {

        }

      2. cordapp-partyA - 此 CorDapp 包含用于创建交易的 FlowLogic 实现。

        @StartableByRPC class CreateTradeFlow : CreateTradeBaseFlow { //Actual implementation of initiator flow goes here... }

      3. cordapp-partyB - 这个 CorDapp 包含 CreateTradeFlow 的响应者流和其他业务特定的流逻辑实现。

        @InitiatedBy(CreateTradeBaseFlow::class) class ResponderPartyB(private val otherSideSession: FlowSession) : FlowLogic<SignedTransaction>() { //implementation of responder flow goes here... }

      4. cordapp-partyC - 这个 CorDapp 包含 CreateTradeFlow 的响应者流和其他业务特定的流逻辑实现。

        @InitiatedBy(CreateTradeBaseFlow::class) class ResponderPartyC(private val otherSideSession: FlowSession) : FlowLogic<SignedTransaction>() { //implementation of responder flow goes here... }

      你的想法是什么?

      【讨论】:

        猜你喜欢
        • 2018-07-25
        • 1970-01-01
        • 2020-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-02
        • 1970-01-01
        相关资源
        最近更新 更多