Звучит так, как будто вы получаете два разных сообщения об ошибке:
Если вы не пытаетесь инициировать второй сеанс потока, чтобы получить вторую подпись, вы получите что-то вроде:
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)
}
}