在CorDapp中,我定义了以下流程:
@InitiatingFlow
@StartableByRPC
class EchoFlow(private val msg: String): FlowLogic<String>() {
override fun call(): String {
return msg
}
}
然后我将CorDapp部署到节点并尝试按如下方式运行它:
val result = proxy.startFlow { EchoFlow("msg") }.returnValue.getOrThrow()
但是,我收到了以下例外情况:
Exception in thread "main" net.corda.core.flows.IllegalFlowLogicException:
FlowLogicRef cannot be constructed for FlowLogic of type com.template.EchoFlow due to missing constructor for arguments: []
我应该如何使用CordaRPCOps.startFlow
调用流?
答案 0 :(得分:1)
CordaRPCOps.startFlow
用于传递流构造函数,后跟流的vararg参数。所以在Kotlin中,你可以通过运行来调用流程:
val result = proxy.startFlow(::EchoFlow, "msg").returnValue.getOrThrow()
其中::ClassName
是用于获取对流的构造函数的引用的Kotlin语法。
或者,您可以使用CordaRPCOps.startFlowDynamic
。此方法采用流实例,如下所示:
val result = proxy.startFlowDynamic(EchoFlow("msg")).returnValue.getOrThrow()