在将流发送给流中的另一方之后,无法向TransactionBuilder添加状态

Joe*_*oel 1 corda

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

  • PartyA 创造一个 TransactionBuilder
  • PartyA发送TransactionBuilderPartyB
  • 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:?]
Run Code Online (Sandbox Code Playgroud)

这里发生了什么事?为什么不能PartyB添加物品TransactionBuilder

Joe*_*oel 5

在Corda中,对象在通过线路发送之前被序列化.在对接收到的对象进行反序列化时,不可能检测到List被反序列化的s 是否最初是可变的或不可变的.总的来说,我们决定我们的序列化引擎应该使任何List反序列化不可变,而不是可变.

这导致了您在上面观察到的问题.在引擎盖下,你正在调用add一个不可变的列表.

您可以绕过此问题,TransactionBuilder.copy以便再次制作TransactionBuilder具有可变状态列表的副本.