发送后,TransactionBuilder变得不可变

时间:2018-12-12 14:18:32

标签: corda

我需要几个节点来建立一个事务。为此,我创建了一个TransactionBuilder并将其传递给节点,然后将其状态添加到其中。

这似乎是一种合法的做法,因为official documentation提到TransactionBuilder的目的是围绕可以通过添加新状态/命令对其进行编辑的合同进行传递。

我已将TransactionBuilder添加到序列化白名单中,以便Corda可以发送/接收它。

但是,在运行单元测试时,网络会抛出此异常:

java.lang.UnsupportedOperationException: null
at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055)
at net.corda.core.transactions.TransactionBuilder.addInputState(TransactionBuilder.kt:149)

我在调试器中进行了调查,收到后的生成器类型为UnmodifiableList

我的工作方式是在收到构建器后将其复制。

但是为什么这样呢?我对文档的解释有误吗?

我们使用Corda 3.3

1 个答案:

答案 0 :(得分:0)

在Java中,如果您接收到其中一个字段为List的序列化对象,则无法检查所讨论的列表最初是可变的还是不可变的。因此,在Corda中,我们默认将这些列表反序列化为不可变列表。

您应该像已经做的那样复制原始TransactionBuilder的副本。