381 lines
8.5 KiB
Markdown
381 lines
8.5 KiB
Markdown
# Issue #25: NAC模块升级机制分析报告
|
||
|
||
**工单编号**: #25
|
||
**工单标题**: 增加所有模块的升级机制
|
||
**分析日期**: 2026-02-19
|
||
**分析人**: NAC开发团队
|
||
|
||
---
|
||
|
||
## 📋 项目概况
|
||
|
||
### 模块统计
|
||
- **总模块数**: 42个
|
||
- **已有升级机制**: 3个(部分实现)
|
||
- **需要添加升级机制**: 39个
|
||
|
||
### 已有升级机制的模块
|
||
1. **nac-ai-compliance** - AI合规模块,有模型升级功能
|
||
2. **nac-cee** - 宪法执行引擎,有升级验证器
|
||
3. **nac-constitution-state** - 宪法状态管理,有pending_upgrades
|
||
|
||
---
|
||
|
||
## 🎯 升级机制需求分析
|
||
|
||
### 1. 核心需求
|
||
|
||
#### 1.1 版本管理
|
||
所有模块需要统一的版本管理系统:
|
||
- 语义化版本号(Semantic Versioning)
|
||
- 版本兼容性检查
|
||
- 版本依赖管理
|
||
- 版本历史记录
|
||
|
||
#### 1.2 升级协议
|
||
需要定义统一的升级协议:
|
||
- 升级提案格式
|
||
- 升级投票机制
|
||
- 升级执行流程
|
||
- 升级状态追踪
|
||
|
||
#### 1.3 回滚机制
|
||
必须支持安全的回滚:
|
||
- 状态快照
|
||
- 回滚条件检查
|
||
- 自动回滚触发
|
||
- 手动回滚接口
|
||
|
||
#### 1.4 升级治理
|
||
与NAC宪法治理集成:
|
||
- 升级提案需要治理投票
|
||
- 不同模块可能有不同的投票阈值
|
||
- 紧急升级特殊流程
|
||
- 升级审计日志
|
||
|
||
---
|
||
|
||
## 📐 技术方案设计
|
||
|
||
### 1. 统一升级框架
|
||
|
||
#### 1.1 核心Trait定义
|
||
```rust
|
||
// nac-upgrade-framework/src/lib.rs
|
||
|
||
pub trait Upgradeable {
|
||
/// 获取当前版本
|
||
fn current_version(&self) -> Version;
|
||
|
||
/// 检查是否可以升级到目标版本
|
||
fn can_upgrade_to(&self, target: &Version) -> Result<bool>;
|
||
|
||
/// 执行升级
|
||
fn upgrade(&mut self, target: Version, data: UpgradeData) -> Result<()>;
|
||
|
||
/// 创建状态快照
|
||
fn create_snapshot(&self) -> Result<Snapshot>;
|
||
|
||
/// 从快照回滚
|
||
fn rollback(&mut self, snapshot: Snapshot) -> Result<()>;
|
||
|
||
/// 获取升级历史
|
||
fn upgrade_history(&self) -> Vec<UpgradeRecord>;
|
||
}
|
||
|
||
pub trait UpgradeGovernance {
|
||
/// 提交升级提案
|
||
fn propose_upgrade(&self, proposal: UpgradeProposal) -> Result<ProposalId>;
|
||
|
||
/// 对升级提案投票
|
||
fn vote(&self, proposal_id: ProposalId, vote: Vote) -> Result<()>;
|
||
|
||
/// 执行已批准的升级
|
||
fn execute_upgrade(&mut self, proposal_id: ProposalId) -> Result<()>;
|
||
|
||
/// 获取提案状态
|
||
fn proposal_status(&self, proposal_id: ProposalId) -> Result<ProposalStatus>;
|
||
}
|
||
```
|
||
|
||
#### 1.2 版本管理
|
||
```rust
|
||
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
|
||
pub struct Version {
|
||
pub major: u32,
|
||
pub minor: u32,
|
||
pub patch: u32,
|
||
}
|
||
|
||
impl Version {
|
||
pub fn new(major: u32, minor: u32, patch: u32) -> Self {
|
||
Self { major, minor, patch }
|
||
}
|
||
|
||
pub fn is_compatible_with(&self, other: &Version) -> bool {
|
||
// Major version must match
|
||
self.major == other.major
|
||
}
|
||
|
||
pub fn is_breaking_change(&self, other: &Version) -> bool {
|
||
self.major != other.major
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 1.3 升级提案
|
||
```rust
|
||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
pub struct UpgradeProposal {
|
||
pub proposal_id: ProposalId,
|
||
pub module_name: String,
|
||
pub current_version: Version,
|
||
pub target_version: Version,
|
||
pub description: String,
|
||
pub upgrade_data: UpgradeData,
|
||
pub proposer: Address,
|
||
pub created_at: Timestamp,
|
||
pub voting_deadline: Timestamp,
|
||
pub execution_time: Option<Timestamp>,
|
||
pub status: ProposalStatus,
|
||
}
|
||
|
||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
pub enum ProposalStatus {
|
||
Pending,
|
||
Voting,
|
||
Approved,
|
||
Rejected,
|
||
Executed,
|
||
Failed,
|
||
Cancelled,
|
||
}
|
||
```
|
||
|
||
#### 1.4 升级数据
|
||
```rust
|
||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
pub struct UpgradeData {
|
||
pub migration_script: Option<Vec<u8>>,
|
||
pub config_changes: HashMap<String, String>,
|
||
pub state_migrations: Vec<StateMigration>,
|
||
pub breaking_changes: Vec<String>,
|
||
}
|
||
|
||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
pub struct StateMigration {
|
||
pub from_schema: String,
|
||
pub to_schema: String,
|
||
pub migration_fn: String, // 迁移函数名
|
||
}
|
||
```
|
||
|
||
#### 1.5 快照和回滚
|
||
```rust
|
||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
pub struct Snapshot {
|
||
pub snapshot_id: SnapshotId,
|
||
pub module_name: String,
|
||
pub version: Version,
|
||
pub state_data: Vec<u8>,
|
||
pub created_at: Timestamp,
|
||
}
|
||
|
||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
pub struct UpgradeRecord {
|
||
pub record_id: u64,
|
||
pub module_name: String,
|
||
pub from_version: Version,
|
||
pub to_version: Version,
|
||
pub executed_at: Timestamp,
|
||
pub executed_by: Address,
|
||
pub success: bool,
|
||
pub error_message: Option<String>,
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 📦 实施计划
|
||
|
||
### Phase 1: 创建升级框架(3天)
|
||
- [ ] 创建nac-upgrade-framework模块
|
||
- [ ] 实现Upgradeable trait
|
||
- [ ] 实现UpgradeGovernance trait
|
||
- [ ] 实现Version管理
|
||
- [ ] 实现Snapshot机制
|
||
|
||
### Phase 2: 集成到核心模块(5天)
|
||
优先级高的核心模块:
|
||
- [ ] nac-nvm (虚拟机)
|
||
- [ ] nac-cbpp (共识)
|
||
- [ ] nac-csnp (网络)
|
||
- [ ] nac-lens (RPC)
|
||
- [ ] nac-constitution-state (宪法状态)
|
||
|
||
### Phase 3: 集成到ACC协议模块(3天)
|
||
- [ ] nac-acc-1400
|
||
- [ ] nac-acc-1410
|
||
- [ ] nac-acc-1594
|
||
- [ ] nac-acc-1643
|
||
- [ ] nac-acc-1644
|
||
|
||
### Phase 4: 集成到AI模块(2天)
|
||
- [ ] nac-ai-compliance (已有部分,需统一)
|
||
- [ ] nac-ai-valuation
|
||
|
||
### Phase 5: 集成到跨链模块(2天)
|
||
- [ ] nac-cross-chain-bridge
|
||
- [ ] nac-bridge-ethereum
|
||
- [ ] nac-bridge-contracts
|
||
|
||
### Phase 6: 集成到其他模块(3天)
|
||
- [ ] nac-wallet-core
|
||
- [ ] nac-wallet-cli
|
||
- [ ] nac-vision-wallet
|
||
- [ ] nac-api-server
|
||
- [ ] nac-monitor
|
||
- [ ] nac-deploy
|
||
- [ ] 其他辅助模块
|
||
|
||
### Phase 7: 测试和文档(3天)
|
||
- [ ] 单元测试
|
||
- [ ] 集成测试
|
||
- [ ] 升级场景测试
|
||
- [ ] 回滚测试
|
||
- [ ] 编写使用文档
|
||
- [ ] 编写升级指南
|
||
|
||
### Phase 8: 提交和验收(1天)
|
||
- [ ] 代码审查
|
||
- [ ] 提交Git
|
||
- [ ] 关闭工单
|
||
|
||
**总预计工期**: 22天(约3周)
|
||
|
||
---
|
||
|
||
## 🎯 验收标准
|
||
|
||
### 功能完整性
|
||
- [ ] 所有42个模块都实现Upgradeable trait
|
||
- [ ] 所有模块都支持版本管理
|
||
- [ ] 所有模块都支持快照和回滚
|
||
- [ ] 升级治理与宪法系统集成
|
||
|
||
### 代码质量
|
||
- [ ] 零编译警告
|
||
- [ ] 零编译错误
|
||
- [ ] 所有测试通过
|
||
- [ ] 代码覆盖率>80%
|
||
|
||
### 文档完善
|
||
- [ ] API文档完整
|
||
- [ ] 升级指南清晰
|
||
- [ ] 示例代码可运行
|
||
- [ ] FAQ覆盖常见问题
|
||
|
||
---
|
||
|
||
## ⚠️ 风险和挑战
|
||
|
||
### 技术风险
|
||
1. **状态迁移复杂度**
|
||
- 不同模块的状态结构差异大
|
||
- 需要为每个模块编写迁移脚本
|
||
- 缓解:提供迁移脚本模板和工具
|
||
|
||
2. **向后兼容性**
|
||
- 升级可能破坏现有功能
|
||
- 需要严格的兼容性测试
|
||
- 缓解:强制语义化版本,breaking change必须major版本升级
|
||
|
||
3. **回滚安全性**
|
||
- 回滚可能导致数据不一致
|
||
- 需要完整的状态快照
|
||
- 缓解:快照包含所有必要数据,回滚前验证
|
||
|
||
### 工程风险
|
||
1. **工作量巨大**
|
||
- 42个模块需要逐一集成
|
||
- 每个模块可能有特殊需求
|
||
- 缓解:分阶段实施,优先核心模块
|
||
|
||
2. **测试复杂度**
|
||
- 需要测试各种升级场景
|
||
- 需要测试跨版本升级
|
||
- 缓解:自动化测试,CI集成
|
||
|
||
---
|
||
|
||
## 💡 最佳实践
|
||
|
||
### 1. 升级前检查
|
||
```rust
|
||
// 升级前必须检查
|
||
- 版本兼容性
|
||
- 依赖模块版本
|
||
- 状态迁移脚本
|
||
- 治理投票结果
|
||
```
|
||
|
||
### 2. 升级执行
|
||
```rust
|
||
// 升级执行步骤
|
||
1. 创建状态快照
|
||
2. 验证升级数据
|
||
3. 执行状态迁移
|
||
4. 更新模块版本
|
||
5. 验证升级结果
|
||
6. 记录升级历史
|
||
```
|
||
|
||
### 3. 回滚触发
|
||
```rust
|
||
// 自动回滚条件
|
||
- 升级执行失败
|
||
- 状态验证失败
|
||
- 关键功能异常
|
||
- 手动触发回滚
|
||
```
|
||
|
||
### 4. 治理流程
|
||
```rust
|
||
// 升级治理流程
|
||
1. 提交升级提案
|
||
2. 社区讨论(3-7天)
|
||
3. 投票期(7-14天)
|
||
4. 执行期(投票通过后)
|
||
5. 审计和监控
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 参考资料
|
||
|
||
### 相关标准
|
||
- Semantic Versioning 2.0.0
|
||
- Ethereum EIP-1967 (Proxy Upgrade Pattern)
|
||
- Cosmos SDK Upgrade Module
|
||
|
||
### NAC相关文档
|
||
- NAC技术宪法
|
||
- 附件G:多编译器协同使用细则
|
||
- CBPP共识协议
|
||
- 宪法治理流程
|
||
|
||
---
|
||
|
||
## 📝 下一步行动
|
||
|
||
1. **立即开始**: 创建nac-upgrade-framework模块
|
||
2. **优先级**: 先实现核心trait和数据结构
|
||
3. **验证**: 在nac-nvm上进行首次集成测试
|
||
4. **迭代**: 根据反馈优化框架设计
|
||
|
||
---
|
||
|
||
**报告生成时间**: 2026-02-19 01:30:00 GMT+4
|
||
**报告生成者**: NAC开发团队
|
||
**状态**: 待审核
|