corda - 如何更新 Cordapp 中的状态和模式?
问题描述
在 Corda 开发模式下,
例如,我创建了一个具有 3 个参数的状态,也为该状态创建了 Schema。
我已经构建了项目并运行它。
由于业务需要需要2个以上的参数。
以下是我从corda docs中了解到的要点。
- 改变状态。
- 更改架构
- 更改合同
- 合约和状态升级流程
我了解现有状态已使用新的合同约束进行更新。
通过给出 {runMigrations=true},模式是否会在节点启动期间自行更新
需要帮忙。
解决方案
- 首先 runMigrations 属性仅用于 Corda Enterprise 而不是 Corda Open Source。查看企业和开源中可用的节点配置。
https://docs.corda.net/docs/corda-os/4.3/corda-configuration-file.html
在开源和企业中执行状态升级的处理方式不同。在企业版中,表被创建为 liquibase 表,并且 liquibase 用于执行自动数据库迁移。在开源中,不使用 liquibase,表被创建为休眠实体。
要进行状态升级,您可以将三个新参数添加到您的状态,构建新 jar,用新 jar 替换旧 jar,hibernate 将负责将这些新列添加到表中。关于这一点的另一点是,即使 Hibernate 也建议不要使用 Hibernate 来修改架构/数据迁移,所以我建议您创建自己的 sql 脚本并在数据库上运行它。(这是由企业中的 liquibase 自动完成的)
使用使用签名约束的corda 4升级很容易,用新jar替换旧jar(新jar必须使用与旧jar签名相同的签名),启动节点。因此,您不必进行复杂的合约升级过程。
推荐阅读
- ios - 带有 Swift 的 MobileVLCKit,如何将 Rtsp 流录制为 .mp4 文件
- c++ - 加载图像时出现 SFML RuntimeError
- django - 如何在 Django Rest Framework 中使用自定义创建的日期时间创建新令牌?
- kotlin - 使用 Kotlin 协程同时进行多个 Web 服务调用
- javascript - 根据客户端的时区 (JavaScript) 在下拉列表中选择值
- terminal - XTerm js 不处理 term.write 中的特殊字符,如 \n "\u001b[H\u001b[2J\u001b[3J""
- youtube-api - 无法在 api 控制台中将测试用户添加到我的 youtube 数据 api 应用程序
- python - IndexError:列表索引超出范围 Python 第 36 行
- installation - 我不知道如何将 WIN98 的 VMare Fusion 捆绑文件安装到我的新 Intel 处理器 BigSur Mac
- java - cmake for Java,如何指定主类并使jar文件可执行?