是否可以挂起流,以便可以通过 RPC 调用恢复流?



我正在尝试在Corda中实现以下用例: FlowA 已通过startFlowDynamic在 A 方调用。FlowA 创建一个部分签名的交易,并通过sendAndReceive在 B 方上调用 FlowB。人类用户现在应查看并手动批准此交易。理想情况下,FlowB 应在收到交易后暂停。我希望能够通过 RPC 查询 FlowB 的挂起实例,并在我的 UI 中向用户呈现这些实例(或者更确切地说是其中事务的一些表示形式(。然后,在用户执行他的批准后,我想通过 RPC 恢复 FlowB,然后 RPC 将签署交易并将其返回给 A 方的 FlowA。

我注意到我可以通过CordaRPCOps.stateMachineAndUpdates在一定程度上检查挂起的流,并且我阅读了有关进度跟踪的教程,但这还不足以满足我的情况。我还读到与流中的人互动被列为未来的功能,我只是想知道是否还没有办法实现这一目标?

我不确定这是否是一种"推荐的方法",但我在我的流程中实现了与类星体兼容的 AsynchListenableFuture,正如其他人在这里描述的那样。

我需要挂起一个流并等待从另一个流生成状态(以响应用户交互(。它似乎有效,但怀疑它可以被视为相当偏离滑雪道(?!

将活动拆分为由 UI 交互直接调用的原子流很好,但我需要一种"监控"流来等待外部(例如用户(事件,然后再确定接下来要启动哪个子流,这需要自动发生并从用户交互之前已经调用的流中 - 然后流逻辑以用户交互或来自另一个节点的传入事务。在我的例子中,这个高级监控流检测节点上已知状态的消耗,然后调用子流作为响应。 高级流在 AsynchListenableFuture 上等待,如上面引用的答案中所述。我在感兴趣的合约状态类型的状态属性上创建了一个复合 VaultQuery(例如自定义字段 X = Y(,并将返回的可观察量(从 trackBy.future 返回(转换为与类星体兼容的 AsynchListenableFuture。当状态被由外部操作触发的流创建的事务消耗时,将来返回并执行自动事件(在我的情况下是与另一方创建另一个事务(。

我只是在试验/评估 Corda,不确定这种方法在生产现实中有多强大,但它似乎工作正常,希望这在某种程度上有所帮助。

Corda 中某种形式的更高级别工作流流,它可以等待外部事件并根据外部操作有条件地调用其他流,这在我的上下文中将真正令人感兴趣。

请参阅协商 Cordapp 示例,了解这在实践中如何工作的示例。

Corda目前不支持挂起用户交互的流。

但是,您可以支持此类工作流,如下所示。假设您正在为贷款申请编写CorDapp。您可以有一个初始流,该流同意在双方之间创建loanApplication状态。从那里,审批者可以检查贷款申请,并启动创建事务以将loanApplication转换为approvedLoan状态的approve流,或者启动reject流以使用loanApplication状态而不发出approvedLoan状态。

同样,您可以向loan状态添加状态字段,指定loan是否获得批准。最初,loan状态会将字段设置为unapproved。然后,审批者可以启动两个流之一来更新loan状态,使其具有approvedrejected状态。

最新更新