Corda流程的两个端点可以存在于不同的Cordapp中吗?

3
如果一个节点想要在流程的一个特定阶段执行它们自己的业务逻辑,应该如何实现?
例如,如果一家公司想要调用内部公司API来验证传入的交易数据,这可以在流程中完成吗?如果可以,在写流程时是否需要通用化,以便使用相同Cordapp(和流程)的所有公司调用它们自己的内部API。也许API URL存储在本地配置文件中。
另一个选项是每个公司都有单独的Cordapps,其中包含针对他们的流程,这些流程可以与其他公司特定的Cordapp中的流程交互。这似乎会很快变得非常复杂。
1个回答

6
Sure. 我写了很多关于这个的东西,我可以在这里粘贴!
结构化CorDapps
CorDapps可以分为共享和私有元素:
共享CorDapp元素
通常,CorDapp的共享元素将包括:
- 数据结构和自定义类型,这些类型被组合成状态对象或用作有效载荷在流之间发送数据 - 状态和合同定义必须对所有可能需要验证包含一个或多个CorDapp状态对象的交易的节点可用 - 抽象流定义用于定义流的公共表示,同时隐藏它的实际实现(这可以是私有的)。这是因为InitiatedBy流注释需要相应InitatingFlow的FlowLogic子类型在类路径上,因此可以注册流启动器 - 通常从流中使用节点服务的共享实用程序函数需要ServiceHub参数 - 这通常比编写另一个流或在现有流中重复相同方法更有意义 - 共享流通常在需要简单工作流且不需要任何定制并将由运行CorDapp的所有方执行的情况下使用
通常建议将共享的CorDapp JAR尽可能保持小型化,原因是包含状态和合约定义的JAR会随着包含该类型状态的交易在网络中传播。下游交易验证者可能需要验证包含他们不进行交易的状态的交易,因此他们不需要在其类路径上拥有流程。因此,将状态和合约定义(以及任何依赖项)与其他内容分开打包是有意义的。
私有CorDapp元素
corDapp的私有元素通常包括:
- 定制流程实现 - Corda服务 - 为上述内容所需的任何类型定义
如上所述,CorDapp开发人员可以共享其流程的抽象表示,并保持实现私有化。流程框架允许各方实现自己的流程,只要它们符合共同接口,即InitiatingFlow和InitiatedBy流程在流程中的预期点发送和接收相同类型的内容。
只要流程这样做,其余的实现就可以定制。例如,自定义的私有实现可能会访问内部系统或使用专有类型,因此不应与CorDapp的共享元素打包在一起。
流版本控制
除了平台的演进,运行在平台上的流程也可以发展。任何想要启动其他流程的流必须用@InitiatingFlow注释进行标注,该注释定义如下:
annotation class InitiatingFlow(val version: Int = 1)

注意,可选的版本属性默认为1,用于指定流程的版本。这个整数值目前仅存在于指导开发人员,应在具有与先前版本不兼容的更改的流程发布时递增。非向后兼容的更改是指更改流程的接口的更改。
目前,处理流程版本控制由CorDapp开发人员完成。然而,将来平台将实施规定的规则。
流程集的接口是什么?
流程接口定义了InitiatingFlow和InitiatedBy flow之间发送和接收的顺序以及发送和接收的类型。最好用一个序列图来说明。

enter image description here

在上图中,InitiatingFlow:
  1. 发送Int
  2. 接收String
  3. 发送String
  4. 接收CustomType
InitiatedBy流程则相反:
  1. 接收Int
  2. 发送String
  3. 接收String
  4. 发送CustomType
只要IntiatingFlow和InitiatedBy流程符合接口定义的顺序,其余流程可以以任何方式实现,并且可以包括不与其他方共享的专有业务逻辑。实际上,这是编写流程的预期方式。

举个例子,实际上如何去做,请看这里:https://github.com/sollecitom/corda-foreign-exchange-example/blob/master/buyer-api/src/main/kotlin/net/corda/examples/fx/buyer/BuyCurrencyFlowDefinitions.kt

这篇文章是由Corda开发人员撰写的,在上面的文件中,有一个抽象流程定义,它有一个仅买方知道的私有实现。


我从示例中看到,他们在通用的Initiating流程中使用了一个抽象类。在Acceptor端是否也可以这样做?如果可以,@InitiatedBy注释应该放在抽象类上还是放在Acceptor流程的私有实现上? - BrianRice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接