Corda 无法从同一资产的进一步交易中删除参与者

Corda 无法从同一资产的进一步交易中删除参与者,corda,Corda,业务中的各方 甲、乙、丙三方 资产:订单 甲方为乙方和丙方发送第一笔交易 乙方向A和C发送下一笔交易(在同一订单上,我们使用vault查询获取输入状态) 现在,我们希望丙方今后不会收到该订单的任何交易。当我们从参与者列表中删除C时,我们得到以下错误。看起来Corda正在从输入状态获取参与者列表。请提出解决这个问题的办法 java.lang.IllegalArgumentException:未为以下事务参与者提供流会话:[O=C,L=NV,C=US]此错误消息来自FinalityFlow: 为了

业务中的各方 甲、乙、丙三方

资产:订单

甲方为乙方和丙方发送第一笔交易

乙方向A和C发送下一笔交易(在同一订单上,我们使用vault查询获取输入状态)

现在,我们希望丙方今后不会收到该订单的任何交易。当我们从参与者列表中删除C时,我们得到以下错误。看起来Corda正在从输入状态获取参与者列表。请提出解决这个问题的办法


java.lang.IllegalArgumentException:未为以下事务参与者提供流会话:[O=C,L=NV,C=US]此错误消息来自
FinalityFlow

为了解释出现错误的原因,让我们回到
参与者的定义:

参与者是在创建或使用状态时应得到通知的任何一方

在该语句之后,当您的事务具有一个(或多个)输入和一个(或多个)输出时,则应将该事务记录在所有输入和输出状态的所有
参与者的联合中(即
最终化
),因为:;按照
参与者的定义,当他们的状态被创建或使用时,应该通知他们

这就是为什么finality flow要求事务中的每个参与者都有一个
FlowSession
,并抛出您在发现缺少的错误时看到的错误

现在,关于隐私问题(你问题的另一部分);即使
FinalityFlow
在所有参与者的联合中记录最终交易;它不会记录所有保险库中的所有输出状态,它有一个名为
StatesToRecord
的参数,默认为
仅与相关的

这意味着,节点将只注册其参与的状态

总之,交易将记录在所有参与者(所有输入/输出状态)的联合中,但每个参与者将只在其vault中注册相关的输出状态

重要提示:调用
ReceiveFinalityFlow
的对等节点可能会覆盖
statesToRecord
的默认值,并选择
ALL\u VISIBLE
,这意味着记录事务的所有输出状态,无论它是否为参与者:


我建议你在这里阅读我关于使用CDL进行隐私分析的文章;关于这个主题的内容更为详细:

非常感谢您提供了许多有用的信息。我能用你的建议解决我的问题。