首页 > 解决方案 > CordApp 生命周期

问题描述

Corda 是否有任何受支持的方式可以将 CordApp 的更改推广到所有具有旧版本的节点?或者我将如何分发一个新的 CordApp ?

理想情况下,不需要每个人(每个受影响的节点所有者)做任何事情。

现在这意味着更新 gradle 中的依赖关系,重建和重新启动节点,当我的节点是许多业务网络的一部分时,这是相当不方便的。

有没有计划有一些类似于 WebServer 的东西,比如我可以部署一个战争文件的 tomcat?

标签: lifecyclecorda

解决方案


首先,并不是说您不需要运行deployNodes来创建新的 CorDapp JAR。相反,您可以使用 Gradlejar命令:

  • Unix/Mac OSX:./gradlew jar
  • 视窗:gradlew.bat jar

这将在build/libs. 然后,通过将新的 CorDapp JAR 添加到cordapps将使用新 CorDapp 的每个节点的文件夹中来安装新的 CorDapp。

从 Corda 3 开始,要获取新的 CorDapp,必须重新启动节点(未来,我们希望 Corda 支持 CorDapp 的热重载)。这里有几个考虑:

  • 如果您要升级一个或多个现有流程:

  • 如果您要升级一个或多个现有状态或合同:

    • 您需要同时在类路径上保留旧的和新的状态和合同定义(例如IOUStateIOUStateV2
    • 不必同时在每个节点上升级状态和合约。如果您向另一个节点发送他们没有定义的状态或合同,您只会遇到错误
    • 有关更多详细信息,请参阅有关升级合同和状态的文档
  • 如果您对 CorDapp 的合约使用区域约束,则需要更新兼容区域的网络参数

    • 如果您使用哈希约束或 Corda 4 中引入的签名约束,则不需要此步骤

推荐阅读