我试图通过研究 CollectSignaturesFlow / SignTransactionFlow 的源代码和Corda文档来理解内联子流。 有人可以告诉我collectsignature子流如何在另一端(在源代码中)调用signTxnFlow吗?如果您可以提供参考,将对编写一些自定义对很有帮助。
答案 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
,以确保他们为自己正在签名的交易添加自己的支票。