Corda-新参数是强制性的,必须为空才能使演进正常工作

时间:2019-02-05 17:40:58

标签: corda

我一直在使用Corda Enterprise 3.2和SQL Server数据库运行CorDapp。最近更新了CorDapp之后,我现在看到此错误:

  

由于:java.io.NotSerializableException:   net.corda.core.contracts.TransactionState->   net.corda.core.contracts.TransactionState->   数据(net.corda.core.contracts.ContractState)->   发票(java.util.Set)-> java.util.Set ->新建   参数foo是强制性的,必须为空才能使演化正常工作

为什么升级会导致此异常?

2 个答案:

答案 0 :(得分:0)

请问更多信息,您是否已经第一次执行数据库迁移以部署Corda Enterprise? 跟随此链接https://docs.corda.r3.com/database-management.html#database-management-tool

答案 1 :(得分:0)

Corda中的状态演化要求添加到状态的所有新字段都可以为空,因为它们可能是从不具有该字段的状态的先前版本创建的,因此nullable是针对新实例化状态的唯一逻辑选项对象结构。

例如...

data class OldState(val foo: Int)

data class NewState(val foo: Int, var bar: String? = null)

OldState升级到NewState会将foo映射到foo,因为属性相同,但是由于存在在以前的状态下,没有任何东西可以使用不可为空的值填充该字段。