我需要几个节点来建立一个事务。为此,我创建了一个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
答案 0 :(得分:0)
在Java中,如果您接收到其中一个字段为List
的序列化对象,则无法检查所讨论的列表最初是可变的还是不可变的。因此,在Corda中,我们默认将这些列表反序列化为不可变列表。
您应该像已经做的那样复制原始TransactionBuilder
的副本。