【问题标题】:Cannot add state to TransactionBuilder after sending it to another party in a flow将状态发送到流中的另一方后无法将状态添加到 TransactionBuilder
【发布时间】:2018-03-27 22:12:47
【问题描述】:

我有一个流程发生以下情况:

  • PartyA 创建一个 TransactionBuilder
  • PartyATransactionBuilder 发送到PartyB
  • PartyB 将状态添加到 TransactionBuilder

但是,当PartyB 尝试向构建器设置状态时,它们会收到以下异常:

[WARN ] 2018-03-20T16:02:35,932Z [Node thread-1] flow.[99246baf-1a1d-44e5-b2f9-f4eb341b97d4].run - Terminated by unexpected exception {}
java.lang.UnsupportedOperationException: null
    at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055) ~[?:1.8.0_162]
    at net.corda.core.transactions.TransactionBuilder.addInputState(TransactionBuilder.kt:149) ~[corda-core-corda-3.0.jar:?]

这里发生了什么?为什么PartyB 不能向TransactionBuilder 添加项目?

【问题讨论】:

    标签: corda


    【解决方案1】:

    在 Corda 中,对象在通过网络发送之前被序列化。在反序列化接收到的对象时,无法检测任何正在反序列化的Lists 最初是可变的还是不可变的。总的来说,我们决定我们的序列化引擎应该让任何被反序列化的Lists 不可变,而不是可变。

    这导致了您在上面观察到的问题。在后台,您在不可变列表上调用 add

    您可以使用TransactionBuilder.copy 绕过此问题,以再次复制具有可变状态列表的TransactionBuilder

    【讨论】:

      【解决方案2】:

      问题仅出现在 Corda V3 中,其中往返序列化将可变对象转换为非可变对象。在 Corda V2 或更低版本中不是这种情况。

      【讨论】:

        猜你喜欢
        • 2018-05-27
        • 1970-01-01
        • 2020-10-01
        • 2021-09-29
        • 2021-05-31
        • 2013-06-28
        • 2019-07-16
        • 2018-03-21
        • 1970-01-01
        相关资源
        最近更新 更多