如果某个节点想要在流的一端执行自己的特定业务逻辑,那么如何实现呢?
例如,如果公司想要调用内部公司api来验证传入的事务数据,它是否可以在流程中执行此操作?如果是这样,流量是否需要一般性地写入,以便所有使用相同Cordapp(和流)的公司呼叫他们自己的内部api。也许api url存储在本地配置文件中。
或者是另一个选项让每个公司都有单独的Cordapps,其中包含特定于他们的流程,这些流程可以与其他公司特定的其他Cordapps中的流程进行通信。这似乎很快就会非常复杂。
答案 0 :(得分:4)
不确定。我写了很多东西,我可以粘贴在这里!
构建CorDapps
CorDapps可以分为共享和私有元素:
共享CorDapp元素
通常,CorDapp的共享元素包括:
通常建议保持共享CorDapp JAR尽可能小,这是因为包含状态和合约定义的JAR在网络中传播,其中包含JAR中定义的类型状态的事务。事务的下游验证器可能需要验证包含它们不与之交易的状态的事务,因此它们不需要其类路径上的流。因此,将状态和契约定义(以及任何依赖关系)分别打包到其他所有内容是有意义的。
私有CorDapp元素
corDapp的私有元素通常包括:
如上所述,CorDapp开发人员可以共享其流的抽象表示并保持实现私有。流框架允许各方实现自己的流,只要它们符合公共接口,即InitiatingFlow
和InitiatedBy
流在流中的预期点发送和接收相同的类型。
只要流程执行此操作,就可以自定义其余的实现。例如,自定义私有实现可能会扩展到内部系统或使用专有类型,因此,它们不应与CorDapp的共享元素打包在一起。
Flow版本化
除了平台的发展之外,在平台上运行的流程也可以发展。您要从中启动其他流的任何流都必须使用@InitiatingFlow
注释进行注释,该注释定义为:
annotation class InitiatingFlow(val version: Int = 1)
注意,可选的version属性(默认为1)用于指定流的版本。此暂时存在的整数值纯粹用于指导开发人员,只要存在具有与先前版本不向后兼容的更改的流的发布,就应该递增该整数值。非向后兼容的更改是更改流的接口的更改。
目前,处理流版本控制由CorDapp开发人员负责。但是,将来该平台将实施规定的规则。
一组流的接口是什么?
flow接口定义InitiatingFlow和InitiatedBy流之间的发送和接收顺序以及发送和接收的类型。最好用序列图说明:
在上图中,InitiatingFlow:
InitiatedBy流程恰恰相反:
同时提供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开发人员之一编写的,在上面的文件中,有一个抽象流程定义,其中只有买方知道私有实现。