Corda 我什么时候需要waitForLedgerCommit

Corda 我什么时候需要waitForLedgerCommit,corda,Corda,在许多示例流中,我看到以下模式: // Notarises and records transaction val stx = subFlow(FinalityFlow(signedTx)) waitForLedgerCommit(stx.id) 当我在FinalityFlow之后添加waitForLedgerCommit时,系统的行为会发生怎样的变化?我是否需要在每个流中使用此模式,还是仅在某些流中使用此模式?waitForLedgerCommit将暂停该流,直到接收到具有指定ID的事务并成

在许多示例流中,我看到以下模式:

// Notarises and records transaction
val stx = subFlow(FinalityFlow(signedTx))
waitForLedgerCommit(stx.id)
当我在FinalityFlow之后添加waitForLedgerCommit时,系统的行为会发生怎样的变化?我是否需要在每个流中使用此模式,还是仅在某些流中使用此模式?

waitForLedgerCommit将暂停该流,直到接收到具有指定ID的事务并成功验证并发送到vault进行处理

FinalityFlow验证给定的事务,然后将其发送给指定的公证人。如果公证人同意该交易是可接受的,则从该点起,该交易将被提交至分类账,并将被写入保险库

如果您查看FinalityFlow中的代码,您将看到它调用函数EnjuriseSeandRecord,该函数反过来调用serviceHub.recordTransactions。在这里,我们将已验证的交易记录到我们的保险库中

如果FinalityFlow成功完成,我们可以保证事务已被验证并发送到vault进行处理,因此,我们不需要waitForLedgerCommit。

waitForLedgerCommit将暂停流,直到收到具有指定ID的事务并成功验证并发送到vault进行处理

FinalityFlow验证给定的事务,然后将其发送给指定的公证人。如果公证人同意该交易是可接受的,则从该点起,该交易将被提交至分类账,并将被写入保险库

如果您查看FinalityFlow中的代码,您将看到它调用函数EnjuriseSeandRecord,该函数反过来调用serviceHub.recordTransactions。在这里,我们将已验证的交易记录到我们的保险库中


如果FinalityFlow成功完成,我们保证交易已被验证并发送到vault进行处理,因此,我们不需要waitForLedgerCommit。

要添加到Cais的答案中,假设您有一个包含两个参与者的流,Alice和Bob。Alice正在调用事务的FinalityFlow,Bob希望在事务完成后执行操作

Bob会调用waitForLedgerCommit,等待FinalityFlow完成并在其vault中记录事务,然后再执行操作


换句话说,您通常不会看到调用FinalityFlow的一方使用它,而是流的其他方使用它。

要添加到Cais的答案中,假设您有一个包含两个参与者的流,Alice和Bob。Alice正在调用事务的FinalityFlow,Bob希望在事务完成后执行操作

Bob会调用waitForLedgerCommit,等待FinalityFlow完成并在其vault中记录事务,然后再执行操作

换句话说,您通常不会看到调用FinalityFlow的一方使用它,而是流的其他各方使用它