diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 5e0c5823f1..9c367ce35d 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -765,6 +765,74 @@ func (s *SGXConsensus) VerifyNetworkConsistency(peer *Peer) error { 1. **度量值匹配**:对方节点的 MRENCLAVE/MRSIGNER 必须在允许列表中 2. **Chain ID 匹配**:对方节点的 Chain ID 必须与本节点一致 +#### 6.1.0 设计目的:支持硬分叉升级 + +准入控制的核心目的是**支持硬分叉升级**,类似于以太坊的 EIP 实现机制。当需要发布新版代码实现新特性时,通过更新 MRENCLAVE 白名单来控制网络升级。 + +**硬分叉升级场景:** + +1. **新特性发布**:类似 EIP-1559、EIP-4844 等协议升级,需要所有节点运行新版代码 +2. **安全修复**:发现安全漏洞后,强制所有节点升级到修复版本 +3. **性能优化**:优化后的代码产生不同的 MRENCLAVE,需要协调升级 + +**升级流程:** + +``` +时间线 + | + v ++------------------+ +| 阶段 1: 准备 | 发布新版代码,公布新 MRENCLAVE ++------------------+ + | + v ++------------------+ +| 阶段 2: 过渡 | 节点配置同时允许新旧 MRENCLAVE +| | mrenclave = ["旧版本", "新版本"] ++------------------+ + | + v ++------------------+ +| 阶段 3: 升级 | 节点逐步升级到新版本 +| | 新旧节点可以互相连接和同步 ++------------------+ + | + v ++------------------+ +| 阶段 4: 完成 | 移除旧版 MRENCLAVE +| | mrenclave = ["新版本"] +| | 未升级节点被隔离(硬分叉) ++------------------+ +``` + +**版本兼容性管理示例:** + +```toml +# config.toml - 过渡期配置 +[sgx] +# 同时允许 v1.0.0 和 v1.1.0 版本 +mrenclave = [ + "abc123...", # v1.0.0 - 当前稳定版 + "def456...", # v1.1.0 - 新版本(包含 XIP-001 特性) +] + +# 升级完成后的配置 +[sgx] +mrenclave = [ + "def456...", # v1.1.0 - 仅允许新版本 +] +# 运行 v1.0.0 的节点将无法连接,形成硬分叉 +``` + +**与以太坊 EIP 的对比:** + +| 特性 | 以太坊 EIP | X Chain XIP | +|------|-----------|-------------| +| 升级触发 | 区块高度 | MRENCLAVE 白名单 | +| 强制升级 | 需要社区共识 | 通过准入控制强制 | +| 回滚可能 | 困难 | 恢复旧 MRENCLAVE 即可 | +| 验证方式 | 区块验证规则 | SGX 远程证明 | + #### 6.1.1 命令行参数 ```bash