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

最佳答案

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

关于java - 如何在corda中创建像CollectSignaturesFlow/SignTransactionFlow这样的自定义内联子流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52638848/

10-09 01:37