Корда: Можно ли использовать выходные данные одной транзакции в другой транзакции в одном и том же потоке с несколькими одинаковыми подписавшими? - PullRequest
0 голосов
/ 25 октября 2018

Существует поток согласно сценарию ниже.Инициирующая сторона: PartyAОтвечающая сторона: Сторона BТранзакция 1: Входное состояние A - КонтрактA приводит к выходному состоянию B - КонтрактA.Участниками являются PartyA и PartyBТранзакция 2: Состояние ввода B - Контракт A и нет вывода.Участниками являются PartyA и PartyBЭто возможно в Корде?Пожалуйста, поделитесь примером с ответом.Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Звучит так, как будто вы получаете два разных сообщения об ошибке:

  • Если вы не пытаетесь инициировать второй сеанс потока, чтобы получить вторую подпись, вы получите что-то вроде:

    net.corda.core.flows.UnexpectedFlowEndException: поток контрагента по O = фиктивная компания 2, L = Лондон, C = GB завершена без отправки данных

  • Если вы инициируете второй сеанс потока, чтобы получить вторую подпись, вы получите что-то вроде:

    java.lang.IllegalStateException: Попытка вызвать initiateFlow () дважды втот же InitiatingFlow com.example.flow.ExampleFlow$Initiator@312d7fe4 для одной и той же стороны O = Mock Company 2, L = London, C = GB.Это не поддерживается в этой версии Corda.В качестве альтернативы вы можете инициировать новый поток, вызвав initiateFlow () в подпотоке @InitiatingFlow.

В первом случае ошибка вызвана тем, что контрагентпоток уже завершен.Вы пытаетесь обойти это путем создания второго сеанса потока, но каждый поток Initiating может инициировать только один сеанс потока с указанным контрагентом.

Вместо этого вам просто нужно изменить поток респондента, чтобы подписатьдважды.Например:

@InitiatedBy(Initiator::class)
class Acceptor(val otherPartyFlow: FlowSession) : FlowLogic<Unit>() {
    @Suspendable
    override fun call() {
        val signTransactionFlow = object : SignTransactionFlow(otherPartyFlow) {
            override fun checkTransaction(stx: SignedTransaction) = requireThat {
                // Transaction checks...
            }
        }

        subFlow(signTransactionFlow)
        subFlow(signTransactionFlow)
    }
}
0 голосов
/ 25 октября 2018

да, это возможно. Пожалуйста, найдите ссылку, чтобы узнать больше

https://docs.corda.net/key-concepts-transactions.html

...