В FinalityFlow
вызывающая сторона использует следующую строку для отправки нотариально заверенной транзакции в participants
всех состояний:
subFlow(SendTransactionFlow(session, notarised))
Если мы посмотрим на AbstractNode.installCoreFlows
, мы увидим, что узел устанавливает обработчик по умолчанию для FinalityFlow
с именем FinalityHandler
. FinalityHandler
отвечает на вызов SendTransactionFlow
в FinalityFlow
, вызывая ReceiveTransactionFlow
.
Внутри ReceiveTransactionFlow
мы видим, что узел разрешает зависимости транзакции, проверяет транзакцию и проверяет ее подписи:
val stx = otherSideSession.receive<SignedTransaction>().unwrap {
subFlow(ResolveTransactionsFlow(it, otherSideSession))
it.verify(serviceHub, checkSufficientSignatures)
it
}
Как часть разрешения зависимостей транзакции в ResolveTransactionsFlow
, узел проверяет каждую и проверяет свои подписи (по умолчанию verify
проверяет подписи в транзакции):
result.forEach {
it.verify(serviceHub)
serviceHub.recordTransactions(StatesToRecord.NONE, listOf(it))
}
Нотариус будет ходить по цепочке таким образом, только если он является проверяющим нотариусом.