Встроенный подпоток - это просто поток, который не помечен @InitiatingFlow
.Он наследует номер версии и контекст потока, который его вызывает.
В терминах CollectSignaturesFlow/SignTransactionFlow
:
Вы увидите, что для сбора подписи каждого контрагента, CollectSignaturesFlow
неоднократно подпоток в CollectSignatureFlow
Предполагается, что контрагент регистрирует свой собственный поток ответчика, который подклассов SignTransactionFlow
, и инициируется потоком, который вызвал CollectSignaturesFlow
какподпоток
Вот пример:
@InitiatedBy(Initiator::class)
class Acceptor(val otherPartyFlow: FlowSession) : FlowLogic<SignedTransaction>() {
@Suspendable
override fun call(): SignedTransaction {
val signTransactionFlow = object : SignTransactionFlow(otherPartyFlow) {
override fun checkTransaction(stx: SignedTransaction) = requireThat {
val output = stx.tx.outputs.single().data
"This must be an IOU transaction." using (output is IOUState)
val iou = output as IOUState
"I won't accept IOUs with a value over 100." using (iou.value <= 100)
}
}
return subFlow(signTransactionFlow)
}
}
Мы заставляем пользователя переопределить SignTransactionFlow
, чтобы они добавили свою собственную проверку для транзакций, которые они подписывают.