【问题标题】:How to change the Initiator of a flow within a flow in Corda?如何在 Corda 的流程中更改流程的发起者?
【发布时间】:2019-02-07 20:33:52
【问题描述】:

我有 2 个节点,分别是甲方和乙方。我通过甲方的节点使用一些数据访问 API,然后我需要处理(在流中)这些数据并创建一个状态,说状态 A(甲方将参与者)然后我需要使用已处理的数据(来自第一个流本身)和 B 方作为发起者来启动另一个流。那么我将如何做到这一点? .基本上我需要做的就像我需要在一个 API 调用中启动 2 个不同启动器的流。

【问题讨论】:

    标签: corda


    【解决方案1】:

    我认为您可以使用sendAndReceive。在由第二方发起的Responder类中,可以利用由第一方发起的MainClassInitiator发送的数据。

        class MainClass {
            @InitiatingFlow
            @StartableByRPC
            open class MainClassInitiator(val ParameterFromApi: DataType,
                                          val NodeB: Party) : FlowLogic<SignedTransaction>() {
                @Suspendable
                override fun call(): SignedTransaction {
    
                    val notary = serviceHub.networkMapCache.notaryIdentities[0]
    
                    val initiator = NodeB
    
                    val session = initiateFlow(initiator)
                    val initiatorValue = session.sendAndReceive<SignedTransaction>(ParameterFromApi).unwrap { it }
                }
            }
    
            @InitiatedBy(MainClassInitiator::class)
            class Responder(val session: FlowSession) : FlowLogic<SignedTransaction>() {
                @Suspendable
                override fun call(): SignedTransaction {
    
                    val request = session.receive<DataType>().unwrap { it }
    
        }
    }
    }
    

    【讨论】:

    • 我们可以使用多个响应器类吗?
    • 我认为我们不能使用。但可以多次调用。
    猜你喜欢
    • 1970-01-01
    • 2020-08-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多