首页 > 解决方案 > Corda:Corda 在隐式升级状态上的行为

问题描述

Corda 是否强制不降级隐式升级状态?

https://github.com/corda/corda/pull/4741/commits - 这删除了降级规则执行 - 我想知道为什么要删除它吗?

标签: corda

解决方案


您可以将状态降级为旧版本的合同,是的。

我们在 Corda 4 中做了一些尝试来解决这个问题,但不得不放弃。这就是为什么 C4 花费的时间比我们希望的要长的原因之一。

该问题与滚动升级有关。在应用程序的滚动升级过程中,一些节点将使用旧版本的应用程序,而一些节点将使用新版本。当升级的流程从 Vault 中获取 V1 状态时,它可能会填写一个新字段或执行一些不同的操作来生成 V2 状态。创建 V2 状态的交易将使用 V2 智能合约并被发送到仍在 V1 上的节点。现在这没问题,因为新的智能合约逻辑将附加到交易中,通过 p2p 网络发送到对等方,如果它被列入白名单(或将来在沙箱内运行),则执行。但这仅适用于合约逻辑,而不是允许做更多事情的流程。因此,旧节点将从保管库中获取 V2 状态,

这意味着在一个应用程序的V1和V2同时上线的升级期间,数据可能会反复升级和降级,直到升级完成。这是在可以在不同时间升级的不同方之间传递数据位的性质所固有的。因此,我们无法保护用户免于降级,因为我们不知道何时认为升级已完成。

将来我们可能会再次尝试解决这个问题。目前,可以通过使用哨兵字段在应用程序级别实施降级保护。


推荐阅读