1. 条款文件拆分:amendments.cnnl -> 6个独立章节文件 - infrastructure.cnnl (A04-A08) - asset_compliance.cnnl (A09-A16) - governance.cnnl (A17-A24) - xtzh_currency.cnnl (A25-A32) - jurisdiction.cnnl (A33-A38) - ai_compliance.cnnl (A39-A43) 2. constitution_hash 升级:新增 calculate_constitution_merkle_root() 使用 SHA3-384 计算所有激活条款的 Merkle 根(48字节/96位十六进制) 3. L3 存储层对接:state_database_ext.rs v2 - 新增 ConstitutionClauseId 枚举(A01-A56 完整56条) - constitution_ref 字段类型安全验证 - ConstitutionRefValidator 验证器 4. nac_lens 协议对接:constitution-service main.rs v2 - 8个 nac_lens 方法(verify_clause/get_hash/issue_cr等) - TCP 监听 22050 端口 - 完整请求/响应结构体 Issue: #CONSTITUTION-LAYER-002 Closes: 条款拆分/哈希升级/L3对接/nac_lens对接 |
||
|---|---|---|
| .. | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
| TICKET_10_COMPLETION_LOG.md | ||
README.md
NAC宪法状态管理系统
NAC (New Asset Chain) 宪法状态管理系统是一个完整的宪法版本管理、升级验证、持久化和历史追踪解决方案。该系统为NAC公链提供了强大的宪法治理能力,确保宪法升级的安全性、可追溯性和透明度。
核心特性
NAC宪法状态管理系统提供了一套完整的宪法治理工具,包括版本管理、升级验证、状态持久化和历史审计等核心功能。系统采用模块化设计,各模块职责清晰,易于维护和扩展。
版本管理
系统支持完整的宪法版本生命周期管理。每个宪法版本包含版本号、宪法哈希、生效区块高度、条款数量、创建时间戳、创建者地址和版本描述等完整信息。版本管理器提供了版本添加、查询、排序和范围检索等功能,确保版本信息的完整性和可访问性。
版本比较功能支持按版本号进行排序和比较,生效性检查功能可以根据当前区块高度判断版本是否已生效。版本验证功能确保每个版本的条款数量和描述信息完整有效。
升级验证
升级验证器提供了多层次的安全验证机制。权限验证确保只有授权地址才能提议、执行或取消升级。升级条件验证包括版本号递增检查、生效高度验证、升级间隔验证和条款数量增量验证等多个维度。
系统支持配置最小升级间隔和最小条款增量,防止频繁升级或恶意升级。宪法哈希唯一性验证确保新版本确实包含了实质性的修改。所有验证规则都可以根据治理需求进行调整。
状态持久化
存储管理器提供了完整的状态持久化能力。状态快照包含当前版本、历史版本和待处理升级的完整信息。系统支持状态保存、加载、备份和恢复等操作,确保状态数据的安全性和可靠性。
状态序列化采用JSON格式,便于人工审查和调试。存储路径可配置,支持多环境部署。备份和恢复功能为系统提供了灾难恢复能力。
历史追踪
历史追踪器记录了所有宪法相关操作的完整审计日志。支持的操作类型包括版本创建、升级提议、升级执行、升级取消和版本回滚。每条历史记录包含操作类型、版本号、操作者地址、时间戳、区块高度和操作描述。
审计日志为每条记录分配唯一ID,支持按ID范围查询。历史查询功能支持多维度过滤,包括操作类型、版本号、操作者、时间范围和区块高度范围等。所有历史记录都持久化存储,确保审计追踪的完整性。
系统架构
系统采用模块化设计,主要包含以下核心模块:
lib.rs: 核心状态机实现,提供宪法状态管理的主要接口和逻辑。
version.rs: 版本管理模块,负责宪法版本的创建、查询和管理。
upgrade.rs: 升级验证模块,提供升级提议的多层次验证机制。
storage.rs: 持久化模块,负责状态的序列化、存储和恢复。
history.rs: 历史追踪模块,记录和查询所有宪法相关操作的审计日志。
error.rs: 错误类型定义,提供统一的错误处理机制。
使用示例
创建状态机
use nac_constitution_state::{ConstitutionStateMachine, ConstitutionVersion};
use nac_udm::primitives::{Hash, Address};
use std::path::PathBuf;
// 创建初始版本
let initial_version = ConstitutionVersion::new(
1, // 版本号
Hash::zero(), // 宪法哈希
1000, // 生效区块高度
10, // 条款数量
1234567890, // 创建时间戳
Address::zero(), // 创建者地址
"Initial version".to_string(), // 版本描述
);
// 创建状态机
let storage_path = PathBuf::from("/path/to/storage");
let mut state_machine = ConstitutionStateMachine::new(
initial_version,
storage_path
).unwrap();
提议升级
// 创建新版本
let new_version = ConstitutionVersion::new(
2, // 版本号
Hash::zero(), // 宪法哈希
3000, // 生效区块高度
15, // 条款数量
1234567900, // 创建时间戳
Address::zero(), // 创建者地址
"Version 2 upgrade".to_string(), // 版本描述
);
// 提议升级
let proposer = Address::zero();
state_machine.propose_upgrade(new_version, proposer).unwrap();
执行升级
// 执行升级(当达到生效高度时)
let version = 2;
let current_height = 3000;
state_machine.execute_upgrade(version, current_height).unwrap();
查询历史
use nac_constitution_state::{HistoryFilter, HistoryRecordType};
// 创建查询过滤器
let filter = HistoryFilter {
record_type: Some(HistoryRecordType::UpgradeExecuted),
version: Some(2),
..Default::default()
};
// 查询历史记录
let records = state_machine.query_history(filter).unwrap();
状态同步
use nac_constitution_state::StateSnapshot;
// 从远程节点获取状态快照
let remote_state = get_remote_state(); // 假设的函数
// 同步状态
state_machine.sync(remote_state).unwrap();
API文档
ConstitutionVersion
宪法版本结构体,包含完整的版本信息。
字段:
version: u64- 版本号constitution_hash: Hash- 宪法哈希(48字节)effective_from: u64- 生效区块高度clause_count: u64- 条款数量created_at: u64- 创建时间戳created_by: Address- 创建者地址(32字节)description: String- 版本描述
方法:
new()- 创建新版本compare()- 比较版本号is_effective()- 检查是否已生效validate()- 验证版本有效性
ConstitutionStateMachine
宪法状态机,管理宪法版本和升级。
方法:
new()- 创建新的状态机load()- 从存储加载状态机save()- 保存状态到存储propose_upgrade()- 提议升级execute_upgrade()- 执行升级cancel_upgrade()- 取消升级rollback()- 回滚到指定版本get_current_version()- 获取当前版本get_history()- 获取历史版本get_version()- 获取指定版本get_pending_upgrades()- 获取待处理的升级query_history()- 查询历史记录get_audit_log()- 获取审计日志sync()- 同步状态
UpgradeValidator
升级验证器,验证升级提议的合法性。
方法:
new()- 创建新的验证器add_authorized_address()- 添加授权地址remove_authorized_address()- 移除授权地址is_authorized()- 检查地址是否授权validate_permission()- 验证权限validate_upgrade()- 验证升级set_min_upgrade_interval()- 设置最小升级间隔set_min_clause_increment()- 设置最小条款增量
HistoryTracker
历史追踪器,记录和查询审计日志。
方法:
new()- 创建新的追踪器load()- 从存储加载追踪器record_version()- 记录版本创建record_proposal()- 记录升级提议record_upgrade()- 记录升级执行record_cancellation()- 记录升级取消record_rollback()- 记录版本回滚query()- 查询历史记录get_audit_log()- 获取审计日志get_all_records()- 获取所有记录
测试
系统包含22个单元测试,覆盖所有核心功能。
运行测试:
cargo test
测试覆盖范围:
- 版本创建和验证(3个测试)
- 版本管理器功能(5个测试)
- 升级验证功能(5个测试)
- 存储功能(2个测试)
- 历史追踪功能(4个测试)
- 状态机核心功能(3个测试)
依赖
nac-udm: NAC统一数据模型,提供Hash和Address等基础类型serde: 序列化和反序列化支持serde_json: JSON格式支持
版本历史
v0.2.0 (2026-02-18)
- ✅ 完整实现版本管理功能
- ✅ 完整实现升级验证功能
- ✅ 完整实现持久化功能
- ✅ 完整实现历史追踪功能
- ✅ 添加22个单元测试
- ✅ 完善API文档
v0.1.0
- 基础的ConstitutionVersion结构
- 简单的ConstitutionStateMachine
- 基本的upgrade方法
许可证
NAC公链项目专有
作者
NAC开发团队