首页 > 解决方案 > 如何更新 Cordapp 中的状态和模式?

问题描述

在 Corda 开发模式下,

例如,我创建了一个具有 3 个参数的状态,也为该状态创建了 Schema。

我已经构建了项目并运行它。

由于业务需要需要2个以上的参数。

以下是我从corda docs中了解到的要点。

  1. 改变状态。
  2. 更改架构
  3. 更改合同
  4. 合约和状态升级流程

我了解现有状态已使用新的合同约束进行更新。

通过给出 {runMigrations=true},模式是否会在节点启动期间自行更新

需要帮忙。

标签: corda

解决方案


  1. 首先 runMigrations 属性仅用于 Corda Enterprise 而不是 Corda Open Source。查看企业和开源中可用的节点配置。

https://docs.corda.net/docs/corda-enterprise/4.3/corda-configuration-file.html#database-properties-ref

https://docs.corda.net/docs/corda-os/4.3/corda-configuration-file.html

  1. 在开源和企业中执行状态升级的处理方式不同。在企业版中,表被创建为 liquibase 表,并且 liquibase 用于执行自动数据库迁移。在开源中,不使用 liquibase,表被创建为休眠实体。

  2. 要进行状态升级,您可以将三个新参数添加到您的状态,构建新 jar,用新 jar 替换旧 jar,hibernate 将负责将这些新列添加到表中。关于这一点的另一点是,即使 Hibernate 也建议不要使用 Hibernate 来修改架构/数据迁移,所以我建议您创建自己的 sql 脚本并在数据库上运行它。(这是由企业中的 liquibase 自动完成的)

  3. 使用使用签名约束的corda 4升级很容易,用新jar替换旧jar(新jar必须使用与旧jar签名相同的签名),启动节点。因此,您不必进行复杂的合约升级过程。


推荐阅读