Corda流的任何一侧都可以存在于单独的Cordapps中吗?

时间:2017-12-15 15:21:22

标签: corda

如果某个节点想要在流的一端执行自己的特定业务逻辑,那么如何实现呢?

例如,如果公司想要调用内部公司api来验证传入的事务数据,它是否可以在流程中执行此操作?如果是这样,流量是否需要一般性地写入,以便所有使用相同Cordapp(和流)的公司呼叫他们自己的内部api。也许api url存储在本地配置文件中。

或者是另一个选项让每个公司都有单独的Cordapps,其中包含特定于他们的流程,这些流程可以与其他公司特定的其他Cordapps中的流程进行通信。这似乎很快就会非常复杂。

1 个答案:

答案 0 :(得分:4)

不确定。我写了很多东西,我可以粘贴在这里!

构建CorDapps

CorDapps可以分为共享和私有元素:

共享CorDapp元素

通常,CorDapp的共享元素包括:

  • 数据结构和自定义类型,它们组成状态对象或用作有效负载以在流之间发送数据
  • 状态和合约定义必须可用于所有可能必须验证包含一个或多个CorDapp状态对象的事务的节点
  • 抽象流定义用于定义流的公共表示,同时隐藏它的实际实现(可以是私有的)。这是因为InitiatedBy流注释需要FlowLogic子类型用于类路径上的相应InitatingFlow,因此可以注册流启动器
  • 使用节点服务的共享实用程序函数通常从流中使用并获取ServiceHub参数 - 通常使用相同方法重写相反的方法比编写另一个流或混乱现有流更有意义
  • 在需要简单工作流程且不需要任何自定义且将由运行CorDapp的所有各方执行的情况下,通常需要共享流程

通常建议保持共享CorDapp JAR尽可能小,这是因为包含状态和合约定义的JAR在网络中传播,其中包含JAR中定义的类型状态的事务。事务的下游验证器可能需要验证包含它们不与之交易的状态的事务,因此它们不需要其类路径上的流。因此,将状态和契约定义(以及任何依赖关系)分别打包到其他所有内容是有意义的。

私有CorDapp元素

corDapp的私有元素通常包括:

  • 定制流程实施
  • Corda服务
  • 上述
  • 所需的任何类型定义

如上所述,CorDapp开发人员可以共享其流的抽象表示并保持实现私有。流框架允许各方实现自己的流,只要它们符合公共接口,即InitiatingFlowInitiatedBy流在流中的预期点发送和接收相同的类型。

只要流程执行此操作,就可以自定义其余的实现。例如,自定义私有实现可能会扩展到内部系统或使用专有类型,因此,它们不应与CorDapp的共享元素打包在一起。

Flow版本化

除了平台的发展之外,在平台上运行的流程也可以发展。您要从中启动其他流的任何流都必须使用@InitiatingFlow注释进行注释,该注释定义为:

annotation class InitiatingFlow(val version: Int = 1)

注意,可选的version属性(默认为1)用于指定流的版本。此暂时存在的整数值纯粹用于指导开发人员,只要存在具有与先前版本不向后兼容的更改的流的发布,就应该递增该整数值。非向后兼容的更改是更改流的接口的更改。

目前,处理流版本控制由CorDapp开发人员负责。但是,将来该平台将实施规定的规则。

一组流的接口是什么?

flow接口定义InitiatingFlow和InitiatedBy流之间的发送和接收顺序以及发送和接收的类型。最好用序列图说明:

enter image description here

在上图中,InitiatingFlow:

  1. 发送Int
  2. 接收字符串
  3. 发送字符串
  4. 接收CustomType
  5. InitiatedBy流程恰恰相反:

    1. 收到Int
    2. 发送字符串
    3. 接收字符串
    4. 发送CustomType
    5. 同时提供IntiatingFlowInitiatedBy流符合接口定义的序列,其余流可以以任何方式实现,并且可以包含不与其他流共享的专有业务逻辑派对。实际上,这是编写流程的预期方式。

      有关实际如何执行此操作的示例,请查看此处:https://github.com/sollecitom/corda-foreign-exchange-example/blob/master/buyer-api/src/main/kotlin/net/corda/examples/fx/buyer/BuyCurrencyFlowDefinitions.kt

      这是由Corda开发人员之一编写的,在上面的文件中,有一个抽象流程定义,其中只有买方知道私有实现。