我正在使用Corda帐户。 在我的场景中,该帐户在节点M上创建并与节点D共享。 节点D运行状态创建流程,其中帐户是参与者。 通过对解决方案建模,事务必须在节点D上注册,但不能在节点M上注册。 问题在于,当使用属于节点M的帐户时,需要节点M的会话。当我不对响应程序流执行ReceiveFinalityFlow时,会生成UnexpectedFlowEndException异常。
我需要能够通过accountId进行电子仓库查询。
问题是,我可以在一个节点上拥有一个帐户并使用该帐户进行交易,而不会将状态保留在帐户节点上吗?
答案 0 :(得分:1)
FinalityFlow
(请参见here),并且您的帐户是参与者,则FlowSession
会引发错误。因此您需要为节点FlowSession
提供一个M
。 FlowSession
传递了M
,因此应该有一个响应者流,其中节点M
调用ReceiveFinalityFlow
;否则您的启动器流程将挂起,因为FinalityFlow
将执行send()
来将事务发送到M
,而M
没有receive()
调用( ReceiveFinalityFlow
执行)。 ReceiveFinalityFlow
并将输入参数statesToRecord
设置为NONE
来满足要求。默认情况下,该参数设置为ONLY_RELEVANT
(请参阅流定义here)。 here说明了StatesToRecord
的各种类型。 if
语句,如果getOurIdentity()
是节点M
,则用ReceiveFinalityFlow
调用statesToRecord == NONE
(因为您不想M
记录状态),如果它是节点D
,则用ReceiveFinalityFlow
调用statesToRecord == RELEVANT
(因为您希望D
记录状态)。 M
将执行您的版本;编写响应者流程通常是另一个节点的责任;他们的开发人员可以编写自己的响应者版本,在其中使用ReceiveFinalityFlow
调用statesToRecord == RELEVANT
(这意味着节点M
将注册结果状态)。阅读this article中的第一个不正确。 M
:
让我知道事情的进展。
也可以按帐户查询,请在my article中阅读以下2部分: