在许多示例流程中,我看到以下模式:
// Notarises and records transaction
val stx = subFlow(FinalityFlow(signedTx))
waitForLedgerCommit(stx.id)
当我在waitForLedgerCommit
之后添加FinalityFlow
时,系统的行为有何变化?我需要在每个流中还是仅在某些流中使用此模式?
答案 0 :(得分:2)
waitForLedgerCommit
暂停流程,直到收到具有指定ID的事务,成功验证并发送给Vault进行处理为止。
FinalityFlow
验证给定的交易,然后将其发送给指定的公证人。如果公证人同意该交易是可以接受的,则从那时起它将被提交到分类帐,并将被写入到金库中。
如果您查看FinalityFlow
中的代码,您会看到它调用了函数notariseAndRecord()
,该函数依次调用了serviceHub.recordTransactions()
。我们在这里将经过验证的交易记录到我们的保管库中。
如果FinalityFlow
成功完成,则可以保证交易已通过验证并已发送到Vault进行处理,因此,我们不需要waitForLedgerCommit
。
答案 1 :(得分:1)
要添加到Cais的答案中,假设您有两个参与者(爱丽丝和鲍勃)来往。爱丽丝(Alice)正在对一笔交易进行FinalityFlow
的交易,而鲍勃则想在交易完成后立即执行一项操作。
鲍勃在执行操作之前会叫waitForLedgerCommit
等待FinalityFlow
完成并在其金库中记录交易。
换句话说,您通常会看到此消息不是由调用FinalityFlow
的一方使用,而是由流程的其他各方使用。