在Corda中,我想创建一个响应者流的几个不同版本,每个版本都由不同的节点使用。
为此,我了解我需要在单独的CorDapp中定义每个响应者流。但是,它们也都需要通过InitiatedBy
注释依赖于启动流类。
如何构建包含响应程序流的不同实现的CorDapps,以便它们都依赖于这个公共启动流,而不是在我定义启动流的同一个CorDapp中包含所有响应器流?
答案 0 :(得分:3)
您需要首先定义包含启动流的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文件,使这些CorDapps依赖于 CorDapp 1 ,其中确定了启动流程。
答案 1 :(得分: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
的响应者流以及其他特定于业务的flowlogic实现。
@InitiatedBy(CreateTradeBaseFlow::class)
class ResponderPartyB(private val otherSideSession: FlowSession) : FlowLogic<SignedTransaction>() {
//implementation of responder flow goes here...
}
cordapp-partyC - 此CorDapp包含CreateTradeFlow
的响应者流以及其他特定于业务的flowlogic实现。
@InitiatedBy(CreateTradeBaseFlow::class)
class ResponderPartyC(private val otherSideSession: FlowSession) : FlowLogic<SignedTransaction>() {
//implementation of responder flow goes here...
}
你的想法是什么?