如何将参与者添加到现有Corda状态,并确保他们收到更新?

如何将参与者添加到现有Corda状态,并确保他们收到更新?,corda,state-management,Corda,State Management,下面是一个示例场景: 甲方在乙方拥有Corda节点和身份之前从乙方接收数据。甲方使用乙方的临时字符串标识符临时管理其共享状态。当乙方启动节点时,甲方需要使用乙方的标识更新共享状态(将状态中的临时标识替换为参与方引用) 在这一点上,B应该意识到这个状态,如果有任何更改,B应该接收更新。确保这最后一部分的正确方法是什么?您将创建一个事务: 获取共享状态的输入,其中B使用临时字符串标识 作为输出具有相同的共享状态,但使用参与方对象识别并添加到参与者中的B 作为参与者,B将作为FinalityFlo

下面是一个示例场景:

甲方在乙方拥有Corda节点和身份之前从乙方接收数据。甲方使用乙方的临时字符串标识符临时管理其共享状态。当乙方启动节点时,甲方需要使用乙方的标识更新共享状态(将状态中的临时标识替换为参与方引用)


在这一点上,B应该意识到这个状态,如果有任何更改,B应该接收更新。确保这最后一部分的正确方法是什么?

您将创建一个事务:

  • 获取共享状态的输入,其中B使用临时字符串标识
  • 作为输出具有相同的共享状态,但使用
    参与方
    对象识别并添加到参与者中的B
作为参与者,B将作为
FinalityFlow
的一部分接收交易

您需要考虑如何处理这样一个事实,即状态中的字段可以是标识符字符串或
参与方
对象。一些选择:

  • 有两个全局状态的子类,它们因此字段而不同
  • 在同一个字段中有可为空的字段
  • 定义包装标识符或
    参与方
    对象的某种类型

谢谢@joel!所以B什么都不需要做?它们不需要某些接受者类型的流来避免被其他节点添加到状态对象时发出垃圾邮件?默认情况下,您的节点安装了一个
FinalityHandler
流来接收作为
FinalityFlow
的一部分广播的事务。因此,您不需要
接受程序
流。