概要

 

  • 流(Flow)自动化更新账单过程
  • 节点之间的交流仅仅是发生在这些有流(Flow)的上下文,并且是点对点的方式
  • 流(Flow)提供自动化普通任务

 

 

动机(Motivation)

 

Corda网络使用点对点的方式进行交流而不是全局广播。这也就是说对应的账单更新需要网络参与者来确定需要什么样的信息,又以怎样的顺序发送到对方。

如下是一个交互例子描述:

   1,Alice 创建一个交易并签名,并发送给Bob

   2,Bob接收到交易,进行验证,签名,然后又发送给Alice

   3,Alice验证交易,并验证Bob的签名

   4,在这个网络上的其他节点,甚至根本就不知道发生了这样一次交易

 

 

流框架(The flow framework)

 

这些步骤不需要手动确切地指定,Corda使用flow自动化处理。一个流其实是一系列的步骤,这些步骤告诉节点怎样去更新账单,比如发行一分资产或者结算一个贸易。

如下就是一个flow的顺序,涉及到上面所提到的一个简单的账单更新:

flowable BusinessKey干嘛的_阻塞状态

 

 

运行流(Running flows)

 

一旦一个业务逻辑过程压缩到流(flow)中并安装在节点中(节点是CorDapp的一部分),这个节点的拥有者,在任何的时间,通过使用RPC调用来指导节点开始这个业务逻辑过程。这个流把网络,I/O和并发问题从节点的拥有者处分离开。

节点的所有活动都发生在这些流的上下文中。不像合约,流不在一个沙箱中执行,也就是说节点能够执行的行为比如网络,I/O和在流的执行过程中随意使用资源。

 

 

Inter-node communication

节点通过在流之间传递信息进行交流。这些节点有一个或者多个流类,这些流类注册为接收其他流信息并进行响应。

假设,Alice与Bob都是网络上的节点,Alice与Bob达成一个更新账单的协议。为了与Bob进行交流,Alice必须:

  • 开始一个流,并且Bob必须注册为响应这个流
  • 在这个流的上下文中给Bob发送一条信息
  • Bob将会开始他注册的对方的流(启动可以响应Alice信息的流)

现在,一个连接已经建立起来了。Alice和Bob可以来回地进行一些进行传递和交流,这些步骤都是严格的(Flow指定了步骤)。

 

 

子流(Subflows)

 

流可以被加强,通过在一个流的上下文中开启一个子处理过程。这个被开启的子处理过程就叫做子流(subflow)。这个父流需要等到子流返回后,方可继续执行。

 

 

流库(The flow library)

 

Corda提供了一个流的库来处理普通任务,也就意味着开发者在普通处理过程的背后不需要进行流定义,比如:

  • 公证和记录交易
  • 从参与者聚集签名
  • 验证交易链

 

并发(Concurrency)

 

流框架运行节点在一次有很多流活动。这些流可能会持续几天,节点重启甚至更新。

无论任何时候进入到一个阻塞状态的时候,就把流序列化到磁盘上,由此实现流持久。(比如当他们等待I/O或者网络调用)。而不是等待流不是出于阻塞状态,节点在其他工作计划中的流立即开始工作,仅仅返回流的最原始状态在随后的某个日期。