Flows

一个流程示例

包括两个方面:

  • Initiator:发起方
  • Responder:响应方

发起方包含如下流程:

Part1——建立交易

  • 选择公证人
  • 创建交易生成器(transaction builder)
  • 从库中提出所有的输入状态,并添加到生成器中
  • 创建所有输出并添加到生成器中
  • 添加commands,attachments和time-window

Part2——签名

  • 对交易生成器签名
  • 将生成器转换为签名过的交易(signed transtraction)

Part3——验证交易

  • 通过合同(contracts)验证交易

Part4——收集交易对手的签名

  • 将交易

关闭会话API

  • FLowsession中有clolse()
  • FlowLogic中有closw(sessions:NonEmpty<FlowSession>)
val session = initiateFlow(party)
try {
    ...
} finally {
    session.close()
}
val session = initiateFlow(party)
session.use {
    ...
}

不要在finally语句块中使用close(),有如下两个原因:

  • 没有必要。上面如果报错,流就会终止,状态机会释放资源和内存等,不需要再调用close()
  • 出现我们不期望的结果。例如:我们本应该收到错误信息,但是由于在finally中添加了close(),我们可能得到的是关闭flow的相关信息,而没有得到期望的错误信息。