lifecycle - CordApp 生命周期
问题描述
Corda 是否有任何受支持的方式可以将 CordApp 的更改推广到所有具有旧版本的节点?或者我将如何分发一个新的 CordApp ?
理想情况下,不需要每个人(每个受影响的节点所有者)做任何事情。
现在这意味着更新 gradle 中的依赖关系,重建和重新启动节点,当我的节点是许多业务网络的一部分时,这是相当不方便的。
有没有计划有一些类似于 WebServer 的东西,比如我可以部署一个战争文件的 tomcat?
解决方案
首先,并不是说您不需要运行deployNodes
来创建新的 CorDapp JAR。相反,您可以使用 Gradlejar
命令:
- Unix/Mac OSX:
./gradlew jar
- 视窗:
gradlew.bat jar
这将在build/libs
. 然后,通过将新的 CorDapp JAR 添加到cordapps
将使用新 CorDapp 的每个节点的文件夹中来安装新的 CorDapp。
从 Corda 3 开始,要获取新的 CorDapp,必须重新启动节点(未来,我们希望 Corda 支持 CorDapp 的热重载)。这里有几个考虑:
如果您要升级一个或多个现有流程:
- 您应该耗尽节点当前正在运行的流
- 只要您所做的流更改是向后兼容的,就不必在每个节点上立即升级流。如果您在尚未为其安装响应程序的流的上下文中与另一个节点通信,您只会遇到错误
- 有关更多详细信息,请参阅有关升级流程的文档
如果您要升级一个或多个现有状态或合同:
- 您需要同时在类路径上保留旧的和新的状态和合同定义(例如
IOUState
和IOUStateV2
) - 不必同时在每个节点上升级状态和合约。如果您向另一个节点发送他们没有定义的状态或合同,您只会遇到错误
- 有关更多详细信息,请参阅有关升级合同和状态的文档
- 您需要同时在类路径上保留旧的和新的状态和合同定义(例如
如果您对 CorDapp 的合约使用区域约束,则需要更新兼容区域的网络参数
- 如果您使用哈希约束或 Corda 4 中引入的签名约束,则不需要此步骤
推荐阅读
- reactjs - 从材料 ui 处理单击并更改自动完成组件
- heroku - Connecting to Heroku Postgres Database from Outside of Heroku App with JDBC
- apollo-client - 使用 useLazyQuery 钩子进行异步验证
- ios - Scene Reconstruction with ARGeoTrackingConfiguration
- aws-lambda - 如何将 AWS cloudwatch 事件添加到基于具有 terraform 的容器映像的 aws_lambda_function?
- r - Customize highlight between between plotly figure and leaflet map
- javascript - React - 使用 IF 和 Else 重构代码
- odoo - Why I'm getting error when creating a new sale order line in odoo?
- sql - SQL中如何将0添加到数字属性中,以便属性中的所有数字都是10位数字
- java - 如何使用 java 流来检索 x 名称的值?