Corda 无法从同一资产的进一步交易中删除参与者
业务中的各方强> 甲、乙、丙三方 资产:订单 甲方为乙方和丙方发送第一笔交易 乙方向A和C发送下一笔交易(在同一订单上,我们使用vault查询获取输入状态) 现在,我们希望丙方今后不会收到该订单的任何交易。当我们从参与者列表中删除C时,我们得到以下错误。看起来Corda正在从输入状态获取参与者列表。请提出解决这个问题的办法Corda 无法从同一资产的进一步交易中删除参与者,corda,Corda,业务中的各方 甲、乙、丙三方 资产:订单 甲方为乙方和丙方发送第一笔交易 乙方向A和C发送下一笔交易(在同一订单上,我们使用vault查询获取输入状态) 现在,我们希望丙方今后不会收到该订单的任何交易。当我们从参与者列表中删除C时,我们得到以下错误。看起来Corda正在从输入状态获取参与者列表。请提出解决这个问题的办法 java.lang.IllegalArgumentException:未为以下事务参与者提供流会话:[O=C,L=NV,C=US]此错误消息来自FinalityFlow: 为了
java.lang.IllegalArgumentException:未为以下事务参与者提供流会话:[O=C,L=NV,C=US]此错误消息来自
FinalityFlow
:
为了解释出现错误的原因,让我们回到参与者的定义:
参与者是在创建或使用状态时应得到通知的任何一方
在该语句之后,当您的事务具有一个(或多个)输入和一个(或多个)输出时,则应将该事务记录在所有输入和输出状态的所有参与者的联合中(即最终化
),因为:;按照参与者的定义,当他们的状态被创建或使用时,应该通知他们
这就是为什么finality flow要求事务中的每个参与者都有一个FlowSession
,并抛出您在发现缺少的错误时看到的错误
现在,关于隐私问题(你问题的另一部分);即使FinalityFlow
在所有参与者的联合中记录最终交易;它不会记录所有保险库中的所有输出状态,它有一个名为StatesToRecord
的参数,默认为仅与相关的
:
这意味着,节点将只注册其参与的状态
总之,交易将记录在所有参与者(所有输入/输出状态)的联合中,但每个参与者将只在其vault中注册相关的输出状态
重要提示:调用ReceiveFinalityFlow
的对等节点可能会覆盖statesToRecord
的默认值,并选择ALL\u VISIBLE
,这意味着记录事务的所有输出状态,无论它是否为参与者:
我建议你在这里阅读我关于使用CDL进行隐私分析的文章;关于这个主题的内容更为详细:非常感谢您提供了许多有用的信息。我能用你的建议解决我的问题。