在 Corda 中,如果响应者流拒绝交易,他们如何将消息传递回发起者流?

In Corda, how can a responder flow pass a message back to the initiator flow if they reject a transaction?

假设我有以下流对:

如果 Responder 流节点 运行 拒绝签名,他如何将拒绝的原因传递回 Initiator 流节点 运行?

节点运行 Responder 流需要抛出一个FlowExceptionFlowException 是一种特殊的异常类型,当您希望异常的消息对交易对手可见时,应该在流中抛出它。

所以在 Responder 中,你可以这样写:

val signTransactionFlow = object : SignTransactionFlow(otherPartyFlow) {
    override fun checkTransaction(stx: SignedTransaction) {
        val counterparty = otherPartyFlow.counterparty
        throw FlowException("I refuse to trade with $counterparty")
    }
}

return subFlow(signTransactionFlow)

而在Initiator中,您可以选择处理异常:

try {
    val fullySignedTx = subFlow(CollectSignaturesFlow(partSignedTx, setOf(otherPartyFlow), GATHERING_SIGS.childProgressTracker()))
} catch (e: FlowException) {
    logger.error(e.message)
    TODO("Handle error.")
}