如何在像CollectSignaturesFlow / SignTransactionFlow这样的corda中创建自定义的内联子流

时间:2018-10-04 04:07:13

标签: java kotlin corda

我试图通过研究 CollectSignaturesFlow / SignTransactionFlow 的源代码和Corda文档来理解内联子流。 有人可以告诉我collectsignature子流如何在另一端(在源代码中)调用signTxnFlow吗?如果您可以提供参考,将对编写一些自定义对很有帮助。

1 个答案:

答案 0 :(得分:0)

内联子流只是没有用@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,以确保他们为自己正在签名的交易添加自己的支票。