我试图通过查看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/