【发布时间】:2018-07-15 09:30:07
【问题描述】:
在 Corda 中,我想创建几个不同版本的响应程序流,每个版本供不同的节点使用。
为此,我了解我需要在单独的 CorDapp 中定义每个响应程序流。但是,它们也都需要通过InitiatedBy 注解依赖于启动流类。
我如何构建包含响应程序流的不同实现的 CorDapp,以便它们都依赖于这个通用的启动流,而不包括我定义启动流的同一个 CorDapp 中的所有响应程序流?
【问题讨论】:
标签: corda
在 Corda 中,我想创建几个不同版本的响应程序流,每个版本供不同的节点使用。
为此,我了解我需要在单独的 CorDapp 中定义每个响应程序流。但是,它们也都需要通过InitiatedBy 注解依赖于启动流类。
我如何构建包含响应程序流的不同实现的 CorDapp,以便它们都依赖于这个通用的启动流,而不包括我定义启动流的同一个 CorDapp 中的所有响应程序流?
【问题讨论】:
标签: corda
您需要先定义包含启动流程的 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 2A 和 CorDapp 2B 需要在它们的 build.gradle 文件中添加一个依赖项,使这些 CorDapp 依赖于 CorDapp 1,其中定义了启动流程。
【讨论】:
那么问题来了,
为什么 CorDapp1 的所有者分享他们的业务流程逻辑 给其他?如果企业想要保持流程实现代码库对他们私有怎么办?
我认为以下是项目结构和实施:
例如。我有三方 PartyA、PartyB、PartyC,每个方都有自己的 CorDapp 版本。
cordapp-contract-states - 此 CorDapp 包含共享的 contract、states 和 abstract initiating flows,counter-parties 将使用它们来实现他们的 responder flow logic。 此 CorDapp 与所有必需的交易对手共享。
@InitiatingFlow 抽象类 CreateTradeBaseFlow : FlowLogic {
}
cordapp-partyA - 此 CorDapp 包含用于创建交易的 FlowLogic 实现。
@StartableByRPC
class CreateTradeFlow : CreateTradeBaseFlow {
//Actual implementation of initiator flow goes here...
}
cordapp-partyB - 这个 CorDapp 包含 CreateTradeFlow 的响应者流和其他业务特定的流逻辑实现。
@InitiatedBy(CreateTradeBaseFlow::class)
class ResponderPartyB(private val otherSideSession: FlowSession) : FlowLogic<SignedTransaction>() {
//implementation of responder flow goes here...
}
cordapp-partyC - 这个 CorDapp 包含 CreateTradeFlow 的响应者流和其他业务特定的流逻辑实现。
@InitiatedBy(CreateTradeBaseFlow::class)
class ResponderPartyC(private val otherSideSession: FlowSession) : FlowLogic<SignedTransaction>() {
//implementation of responder flow goes here...
}
你的想法是什么?
【讨论】: