как создать пользовательские встроенные подпотоки в корде, такие как CollectSignaturesFlow / SignTransactionFlow - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь понять Встроенные подпотоки , изучая исходный код и документацию Корда CollectSignaturesFlow / SignTransactionFlow .Кто-нибудь может сказать мне, как подпоток collectsignature вызывает signTxnFlow на другой стороне (в исходном коде)?Если бы вы могли дать какую-то ссылку, это было бы очень полезно для написания некоторых пользовательских пар.

1 Ответ

0 голосов
/ 04 октября 2018

Встроенный подпоток - это просто поток, который не помечен @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, чтобы они добавили свою собственную проверку для транзакций, которые они подписывают.

...