Corda 第三方是否可以检查他不知道的状态,并将此状态添加到流中作为输入状态?

Corda 第三方是否可以检查他不知道的状态,并将此状态添加到流中作为输入状态?,corda,Corda,这是我的名片 我的场景: A向B发行代币 B向C下订单 C将货物交付给B,并尝试启动从B检索令牌的流程 我的问题: C能知道B拥有的令牌状态的状态吗 C能否将这个令牌状态添加到“正在检索”流中作为输入状态 根据Joel的建议,我尝试在OrderDeliveredFlow中发送一些请求并在PartyC上从PartyB接收StateAndRef 不幸的是,JAVA似乎不支持“展开”,但Kotlin支持。 在我为send和receive Java.String添加了一个小段,并在一个可行的流(我

这是我的名片

我的场景:

  • A向B发行代币
  • B向C下订单
  • C将货物交付给B,并尝试启动从B检索令牌的流程
  • 我的问题:

    • C能知道B拥有的令牌状态的状态吗
    • C能否将这个令牌状态添加到“正在检索”流中作为输入状态

    根据Joel的建议,我尝试在OrderDeliveredFlow中发送一些请求并在PartyC上从PartyB接收StateAndRef

    不幸的是,JAVA似乎不支持“展开”,但Kotlin支持。 在我为send和receive Java.String添加了一个小段,并在一个可行的流(我的令牌发布流)中取消了它之后,这个流将产生这个错误

    我认为一个可能的解决方案是在Kotlin中创建一个新的流,就像“CollectSignaturesFlow”。
    否则,我必须将Java代码翻译成Kotlin。

    C不知道令牌状态的存在,因此无法将它们添加到事务中

    相反,C应该要求B发送她想要花费的令牌状态,并将它们添加到事务中

    流代码看起来像:

    val otherPartySession = initiateFlow(otherParty)
    val tokenState = otherPartySession.receive<StateAndRef<Cash.State>>().unwrap { it }
    txBuilder.addInputState(tokenState)
    
    val otherPartySession=initiateFlow(另一方)
    val tokenState=otherPartySession.receive().unwrap{it}
    txBuilder.addInputState(令牌状态)
    
    C不知道令牌状态的存在,因此无法将它们添加到事务中

    相反,C应该要求B发送她想要花费的令牌状态,并将它们添加到事务中

    流代码看起来像:

    val otherPartySession = initiateFlow(otherParty)
    val tokenState = otherPartySession.receive<StateAndRef<Cash.State>>().unwrap { it }
    txBuilder.addInputState(tokenState)
    
    val otherPartySession=initiateFlow(另一方)
    val tokenState=otherPartySession.receive().unwrap{it}
    txBuilder.addInputState(令牌状态)
    
    作为乔尔回答的替代方案。您可以考虑将C添加为令牌状态的参与者

    e、 g.在科特林,其他将被设置为C

    override val participants: List<AbstractParty> get() = listOf(issuer, owner, other)
    
    覆盖val参与者:List get()=listOf(颁发者、所有者、其他)
    
    C将知道B拥有的令牌的状态。但是,您可以看到,这需要发行人B事先了解C


    当然,你的选择完全取决于你的隐私模型。

    作为乔尔回答的替代方案。您可以考虑将C添加为令牌状态的参与者

    e、 g.在科特林,其他将被设置为C

    override val participants: List<AbstractParty> get() = listOf(issuer, owner, other)
    
    覆盖val参与者:List get()=listOf(颁发者、所有者、其他)
    
    C将知道B拥有的令牌的状态。但是,您可以看到,这需要发行人B事先了解C


    当然,您选择的路线取决于您的隐私模型。

    我认为,实际上,C可能只是在向B颁发令牌后加入此系统。因此,C没有机会成为令牌颁发流程中的一方。而且,没有必要告诉系统中的每个人B从A那里得到了一些令牌,如果是这样,这将违反Corda的隐私规则。但是,必须有一些方法来验证令牌是否有效。我认为,实际上,C可能只是在向B发出令牌后加入该系统。因此,C没有机会成为该令牌发行流中的一方。而且,没有必要告诉系统中的每个人B从A那里得到了一些令牌,如果是这样,这将违反Corda的隐私规则。但是,必须有某种方法来验证令牌是否有效。我试图在流中添加会话“receive/send”,但在启动流时出现“索引0{}处缺少参数名”错误。如果删除“unwrap”行,则不会再次出现此错误。我为发送/接收状态Andref添加了一个Kotlin类,此问题已得到解决。我尝试在流中添加会话“receive/send”,但在启动流时出现“索引0{}处缺少参数名”错误。如果删除“展开”行,则不会再次出现此错误。我添加了一个用于发送/接收StateAndRef的Kotlin类,此问题已得到解决。