我什么时候需要waitForLedgerCommit

时间:2018-12-26 10:37:58

标签: corda

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

// Notarises and records transaction
val stx = subFlow(FinalityFlow(signedTx))
waitForLedgerCommit(stx.id)

当我在waitForLedgerCommit之后添加FinalityFlow时,系统的行为有何变化?我需要在每个流中还是仅在某些流中使用此模式?

2 个答案:

答案 0 :(得分:2)

waitForLedgerCommit暂停流程,直到收到具有指定ID的事务,成功验证并发送给Vault进行处理为止。

FinalityFlow验证给定的交易,然后将其发送给指定的公证人。如果公证人同意该交易是可以接受的,则从那时起它将被提交到分类帐,并将被写入到金库中。

如果您查看FinalityFlow中的代码,您会看到它调用了函数notariseAndRecord(),该函数依次调用了serviceHub.recordTransactions()。我们在这里将经过验证的交易记录到我们的保管库中。

如果FinalityFlow成功完成,则可以保证交易已通过验证并已发送到Vault进行处理,因此,我们不需要waitForLedgerCommit

答案 1 :(得分:1)

要添加到Cais的答案中,假设您有两个参与者(爱丽丝和鲍勃)来往。爱丽丝(Alice)正在对一笔交易进行FinalityFlow的交易,而鲍勃则想在交易完成后立即执行一项操作。

鲍勃在执行操作之前会叫waitForLedgerCommit等待FinalityFlow完成并在其金库中记录交易。

换句话说,您通常会看到此消息不是由调用FinalityFlow的一方使用,而是由流程的其他各方使用。