Corda 如何序列化TransactionBuilder

Corda 如何序列化TransactionBuilder,corda,Corda,我需要几个节点来构建一个事务。为了实现这一点,我创建了一个TransactionBuilder,并将其传递给节点,然后将它们的状态添加到其中 这似乎是一种合法的做法,因为提及的[TransactionBuilder]旨在通过添加新的状态/命令对合同进行编辑。 但是,在运行单元测试时,网络会引发以下异常: 类net.corda.core.transactions.TransactionBuilder不在白名单上,也没有用@CordaSerializable注释。 java.io.NotSeria

我需要几个节点来构建一个事务。为了实现这一点,我创建了一个
TransactionBuilder
,并将其传递给节点,然后将它们的状态添加到其中

这似乎是一种合法的做法,因为提及的
[TransactionBuilder]旨在通过添加新的状态/命令对合同进行编辑。

但是,在运行单元测试时,网络会引发以下异常:


类net.corda.core.transactions.TransactionBuilder不在白名单上,也没有用@CordaSerializable注释。
java.io.NotSerializableException:Class net.corda.core.transactions.TransactionBuilder不在白名单上,也不带@CordaSerializable注释。

我尝试了白名单
TransactionBuilder
,但它抛出了以下内容:


net.corda.core.transactions.TransactionBuilder->输出(java.util.List)->java.util.List->net.corda.core.contracts.TransactionState->数据(net.corda.core.contracts.ContractState)->状态(com.luxoft.poc.mobi.data.state.TransportAgreement$state)->Class Class com.luxoft.poc.mobi.data.state.TransportAgreement$state不在白名单上,也不带@CordaSerializable注释。
java.io.NotSerializableException:net.corda.core.transactions.TransactionBuilder->输出(java.util.List)->java.util.List->net.corda.core.contracts.TransactionState->数据(net.corda.core.contracts.ContractState)->状态(com.luxoft.poc.mobi.data.state.TransportAgreement$state)->Class Class com.luxoft.poc.mobi.data.state.TransportAgreement$state不在白名单上,也不带@CordaSerializable注释。

我做错了什么?我如何解决这个问题


我们使用Corda 3.3

基于错误消息,您还需要将
TransportAgreement.State
添加到白名单中,因为您将其作为事务生成器的一部分发送。

您能否解释为什么
TransactionBuilder
不能即时序列化?文件表明应该是这样的,这是有争议的。它被保留为不可序列化,因为在将签名应用于事务之前(即,当它仍然是生成器时),任何交易对手都可以通过添加/删除组件来修改它。如果在取回事务生成器时不小心检查此问题,则可能会在未意识到事务包含什么内容的情况下意外签署事务。