调用CordaRPCOps.startFlow时发生IllegalFlowLogicException

在一个CorDapp中,我定义了以下流程:

@InitiatingFlow @StartableByRPC class EchoFlow(private val msg: String): FlowLogic() { 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调用流?

CordaRPCOps.startFlow通过传递一个流构造函数来使用, CordaRPCOps.startFlow是流的参数variables。 所以在Kotlin中,你可以通过运行来调用流程:

 val result = proxy.startFlow(::EchoFlow, "msg").returnValue.getOrThrow() 

Where ::ClassName是获取对流的构造函数的引用的Kotlin语法。

或者,您可以使用CordaRPCOps.startFlowDynamic 。 这个方法取一个流程实例,如下所示:

 val result = proxy.startFlowDynamic(EchoFlow("msg")).returnValue.getOrThrow()