教程区块链区块链技术ch1515.4 链码生命周期管理与升级

本页目录

Fabric 链码可以不停机升级,这是其 RABC(Release Application Business Continuity)体系的一部分。版本管理通过 sequence 号approval 流程实现治理。


15.4.1 链码事务生命周期

graph TD
    A[Pack 打包] --> B[Install 安装到 peer]
    B --> C[Approve 各组织批准]
    C --> D[Check Commit Readiness]
    D --> E[Commit 提交到通道]
    E --> F[Invoke 调用]

    C -.升级.-> A
    
    style A fill:#e3f2fd
    style E fill:#c8e6c9

15.4.2 升级演练

bash
# 1. 打包新版本的链码
peer chaincode package assettransfer_v2.tar.gz -p ./ -l golang

# 2. 在所有组织的 peer 上安装
peer chaincode install assettransfer_v2.tar.gz

# 3. 各组织批准新版本(sequence 增加)
peer lifecycle chaincode approveformyorg \
  --name assettransfer \
  --version 2.0 \                    # 语义版本
  --package-id $NEW_PACKAGE_ID \
  --sequence 2 \                     # 序列号必须递增
  --channelID mychannel \
  --signature-policy "OR('Org1MSP.peer','Org2MSP.peer')"

# 4. 检查足够多组织已批准
peer lifecycle chaincode checkcommitreadiness \
  --channelID mychannel \
  --name assettransfer \
  --version 2.0 \
  --sequence 2

# 5. 提交升级(任何组织可以执行)
peer lifecycle chaincode commit \
  --name assettransfer \
  --version 2.0 \
  --sequence 2

关键的兼容性检查

检查项规则
Sequence + 1必须递增
Package ID新代码包哈希
Version人读的语义版本(v2.0)
Organization 背书需要各组织显式 approveformyorg

15.4.3 状态兼容性

升级时世界状态保留。新链码必须兼容旧状态数据结构:

go
// 升级后的 Asset 结构可以添加新字段
// 但必须兼容旧 JSON
// 策略:新版本读取旧数据时填充默认值

type AssetV2 struct {
    // 原有字段保留
    ID          string `json:"id"`
    Color       string `json:"color"`
    // ...
    // 新增字段,omitempty 兼容旧数据
    LastService  string `json:"lastService,omitempty"`
    Status       string `json:"status,omitempty"`
}

15.4.4 应急处置:链码错误

bash
# 如果升级后的链码有 bug,影响无法 Invoke
# 可回滚到旧版本(降级)
peer lifecycle chaincode approveformyorg \
  --name assettransfer \
  --version 1.0 --sequence 3  # 降回旧版本,sequence 继续递增
  # ... 然后 commit

关键洞察:sequence 永远递增,不可以用旧 sequence 重新部署。


> ← 15.3 链码开发 | 前往 → 15.5 SDK 后端开发 |*

评论

0

评论加载中…

发表评论

0/2000