链码可以随时通过更改其版本来升级,这是SignedCDS的一部分。其他部分,如所有者和实例化策略是可选的。然而,链码名称必须相同;否则将被视为完全不同的链码。
在升级之前,新版本的链码必须安装在所需的支持者身上。升级是类似于实例化事务的事务,它将新版本的链码绑定到通道。绑定到旧版本的链码的其他渠道仍然与旧版本一起运行。换句话说,升级事务只会影响一个通道,即交易提交的通道。
请注意,由于链码的多个版本可能同时处于活动状态,所以升级过程不会自动删除旧版本,因此用户必须暂时进行管理。
与实例化事务有一个微妙的区别:根据当前链码实例化策略检查升级事务,而不是新策略(如果指定)。这是为了确保只有当前实例化策略中指定的现有成员可以升级链码。
请注意,在升级期间,调用chaincode Init函数来执行任何数据相关更新或重新初始化它,因此必须注意在升级链码时避免复位状态。