如果节点希望在流的一侧执行自己的特定业务逻辑,那么如何实现呢?
例如,如果公司要调用内部公司api来验证传入的交易数据,可以在流程中执行此操作吗?如果是这样,是否需要通用编写流程,以便所有使用相同Cordapp(和流程)的公司都调用其自己的内部api。也许api网址存储在本地配置文件中。
或者是让每个公司拥有包含特定于它们的流的单独Cordapp的另一种选择,它们可以与特定于其他公司的其他Cordapp中的流进行通信。这似乎很快就会变得非常复杂。
当然。我在上面写了很多东西,我可以贴在这里!
构建CorDapps
CorDapps可以分为共享元素和私有元素:
共享的CorDapp元素
通常,CorDapp的共享元素包括:
通常建议将共享的CorDapp JAR保持尽可能的小,这是因为包含状态和合同定义的JAR会通过网络进行传输,并且包含包含JAR中定义的类型的状态的事务。事务的下游验证者可能需要验证包含未与其进行交易的状态的事务,因此它们不需要类路径上的流。因此,将状态和合同定义(以及任何依赖项)分别打包到其他所有内容中是有意义的。
私人CorDapp元素
corDapp的私有元素通常包括:
如上所述,CorDapp开发人员可以共享其流程的抽象表示,并将实现保持私有状态。流框架允许各方实现自己的流,前提是它们遵循公共接口,即InitiatingFlow和InitiatedBy流都在流的预期点发送和接收相同的类型。
只要流程能够做到这一点,其余的实现都可以自定义。例如,自定义的私有实现可能会扩展到内部系统或使用专有类型,因此,不应将它们与CorDapp的共享元素打包在一起。
流版本控制
除了平台的发展之外,在平台之上运行的流程也可以发展。您要从其启动其他流的任何流都必须使用注释进行注释,该@InitiatingFlow注释定义为:
annotation class InitiatingFlow(val version: Int = 1)
Run Code Online (Sandbox Code Playgroud)
注意,可选的version属性(默认为1)用于指定流的版本。目前,此整数值仅用于指导开发人员,每当发布某个版本的更改与先前版本不向后兼容时,都应增加此整数值。非向后兼容更改是更改流接口的更改。
当前,处理流版本控制留给了CorDapp开发人员。但是,将来平台将执行规定的规则。
一组流的接口是什么?
流接口定义了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开发人员之一编写的,并且在上面的文件中,有一个抽象的流程定义,该定义具有仅买方知道的私有实现。