【问题标题】:Can 3rd party check the state that he does not know, and add this state in a flow as a input state?3rd 方可以检查他不知道的状态,并将该状态添加到流中作为输入状态吗?
【发布时间】:2019-01-04 03:01:22
【问题描述】:

这是我的deliverydemo source code on github。

我的场景:

  1. A 向 B 颁发令牌
  2. B 向 C 下订单
  3. C 将货物交付给 B,并尝试启动从 B 取回令牌的流程。

我的问题:

  • C 可以知道 B 拥有的令牌状态的状态吗?
  • C 能否将此令牌状态添加到“检索”流中作为输入状态?

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

不幸的是,JAVA 似乎不支持“解包”,但 Kotlin 支持。 在我添加一个用于发送和接收 Java.String 的小段并在一个可行的流程中解开它之后 - 我的令牌问题流程,这个流程会引发这个错误 - "missing parameter name at index 0 {}"。

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

【问题讨论】:

    标签: corda


    【解决方案1】:

    C 不知道令牌状态的存在,因此不能自己将它们添加到事务中。

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

    流程代码如下所示:

    val otherPartySession = initiateFlow(otherParty)
    val tokenState = otherPartySession.receive<StateAndRef<Cash.State>>().unwrap { it }
    txBuilder.addInputState(tokenState)
    

    【讨论】:

    • 我尝试在我的流程中添加会话“接收/发送”,但在启动流程时出现“索引 0 {} 处缺少参数名称”错误。如果我删除“unwrap”行,就不会再出现这个错误了。
    • 我添加了一个 Kotlin 类用于发送/接收 StateAndRef,这个问题已经解决了。
    【解决方案2】:

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

    例如在 Kotlin 中,其中 other 将设置为 C

    override val participants: List<AbstractParty> get() = listOf(issuer, owner, other)
    

    C 会知道 B 拥有的令牌的状态。但是,您可以看到这需要 issuer 或 B 事先了解 C。

    当然,您采取的路线完全取决于您的隐私模型。

    【讨论】:

    • 我认为,实际上,C 可能只是在 A 向 B 发行令牌后才加入这个系统。因此,C 没有机会成为该令牌发行流程的一方。而且,这不需要告诉这个系统中的每个人 B 从 A 那里得到了一些令牌,如果是这样,那将违反 Corda 的隐私规则。但是,必须有某种方法来验证令牌是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2019-05-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    相关资源
    最近更新 更多