# nac-acc-1410 模块深度分析报告 **模块名称**: nac-acc-1410 **版本**: 1.0.0 **分析日期**: 2026-02-18 **分析人员**: NAC开发团队 --- ## 📋 模块概览 **功能定位**: ACC-1410部分同质化资产协议 - 扩展ACC-20,增加分区(Partition)功能 **英文全称**: Asset Classification Code 1410 - Partially Fungible Token Standard **代码行数**: 1,388行 **完成度**: 75% **测试覆盖**: 85% (12个测试全部通过) **编译状态**: ✅ 通过 --- ## 🏗️ 架构设计 ### 核心功能 nac-acc-1410是NAC公链的分区型资产协议,允许同一资产类别内的代币被分为不同的分区: 1. **分区管理**: 创建、关闭、查询分区 2. **分区余额**: 查询账户在特定分区的余额 3. **分区转账**: 在分区间转移代币 4. **操作员授权**: 授权第三方操作员代理转账 5. **GNACS扩展**: 64位扩展编码(48位基础+16位扩展) 6. **账户锁定**: 支持账户锁定和解锁 7. **转账控制**: 支持暂停和恢复转账 ### 模块结构 ``` nac-acc-1410/ ├── src/ │ ├── lib.rs (448行) - 主接口 │ ├── types.rs (274行) - 类型定义 │ ├── partition.rs (187行) - 分区管理 │ ├── transfer.rs (434行) - 转账管理 │ └── error.rs (45行) - 错误定义 └── Cargo.toml ``` ### 技术栈 | 组件 | 技术 | 版本 | 说明 | |------|------|------|------| | 序列化 | serde | 1.0 | 数据序列化 | | 哈希 | sha3 | 0.10 | 哈希计算 | | 时间 | chrono | 0.4 | 时间处理 | | 日志 | tracing | 0.1 | 日志记录 | --- ## 🔍 核心功能详解 ### 1. 数据结构 #### 1.1 分区类型 ```rust pub enum PartitionType { CommonStock = 0x01, // 普通股 PreferredStock = 0x02, // 优先股 RestrictedStock = 0x03, // 限制性股票(锁定期) EmployeeOption = 0x04, // 员工期权 IncomeRight = 0x05, // 收益权(无投票权) VotingRight = 0x06, // 投票权(无收益权) } ``` **支持的分区类型**: - **普通股**: 完整的所有权和投票权 - **优先股**: 优先分红权 - **限制性股票**: 有锁定期的股票 - **员工期权**: 员工激励期权 - **收益权**: 只有收益权,无投票权 - **投票权**: 只有投票权,无收益权 --- #### 1.2 GNACS扩展编码 ```rust pub struct GNACSExtension { pub partition_type: u8, // 分区类型(4位) pub vesting_years: u8, // 锁定期限(4位) pub voting_multiplier: u8, // 投票权倍数(4位) pub dividend_priority: u8, // 分红优先级(4位) } ``` **编码方案**: - 总共16位(2字节) - 第1字节: 分区类型(4位) + 锁定期限(4位) - 第2字节: 投票权倍数(4位) + 分红优先级(4位) **完整GNACS**: ```rust pub struct ExtendedGNACS { pub base_gnacs: Vec, // 48位基础GNACS(6字节) pub extension: GNACSExtension, // 16位扩展(2字节) } // 总共64位(8字节) ``` --- #### 1.3 分区信息 ```rust pub struct PartitionInfo { pub id: [u8; 32], // 分区ID(32字节哈希) pub extended_gnacs: ExtendedGNACS, // 64位GNACS pub name: String, // 分区名称 pub partition_type: PartitionType, // 分区类型 pub total_supply: u64, // 总供应量 pub is_active: bool, // 是否激活 pub created_at: i64, // 创建时间 } ``` --- #### 1.4 分区结构 ```rust pub struct Partition { pub info: PartitionInfo, pub balances: HashMap, // 账户余额 pub operators: HashMap>, // 操作员授权 pub locked_accounts: HashMap, // 锁定账户 } ``` --- ### 2. 分区管理 (partition.rs - 187行) #### 2.1 创建分区 ```rust pub fn create_partition( &mut self, name: String, extended_gnacs: ExtendedGNACS, partition_type: PartitionType, ) -> Result<[u8; 32]> ``` **功能**: 创建新的资产分区 **实现**: 1. 计算分区ID(SHA3哈希) 2. 创建PartitionInfo 3. 初始化Partition 4. 存储到partitions映射 --- #### 2.2 关闭分区 ```rust pub fn close_partition(&mut self, partition_id: &[u8; 32]) -> Result<()> ``` **功能**: 关闭分区,禁止新的操作 --- #### 2.3 查询分区 ```rust pub fn get_partition_info(&self, partition_id: &[u8; 32]) -> Result pub fn get_all_partition_ids(&self) -> Vec<[u8; 32]> ``` --- ### 3. 余额管理 #### 3.1 查询余额 ```rust pub fn balance_of_by_partition( &self, partition_id: &[u8; 32], account: &str, ) -> Result ``` **功能**: 查询账户在特定分区的余额 --- #### 3.2 查询账户的所有分区 ```rust pub fn partitions_of(&self, account: &str) -> Vec<[u8; 32]> ``` **功能**: 返回账户持有代币的所有分区ID --- ### 4. 代币发行和销毁 #### 4.1 发行代币 ```rust pub fn issue_to_partition( &mut self, partition_id: &[u8; 32], to: &str, amount: u64, ) -> Result<()> ``` **功能**: 向指定分区发行代币 --- #### 4.2 销毁代币 ```rust pub fn burn_from_partition( &mut self, partition_id: &[u8; 32], from: &str, amount: u64, ) -> Result<()> ``` **功能**: 从指定分区销毁代币 --- ### 5. 转账管理 (transfer.rs - 434行) #### 5.1 分区内转账 ```rust pub fn transfer_by_partition( &mut self, from: &str, to: &str, amount: u64, partition_id: &[u8; 32], ) -> Result ``` **功能**: 在同一分区内转账 **验证**: 1. 检查分区是否存在 2. 检查余额是否足够 3. 检查账户是否锁定 4. 检查转账是否暂停 5. 执行转账 --- #### 5.2 操作员代理转账 ```rust pub fn operator_transfer_by_partition( &mut self, operator: &str, from: &str, to: &str, amount: u64, partition_id: &[u8; 32], ) -> Result ``` **功能**: 操作员代理账户进行转账 **验证**: 1. 检查操作员授权 2. 执行转账 --- ### 6. 操作员管理 #### 6.1 授权操作员 ```rust pub fn authorize_operator(&mut self, account: &str, operator: &str) ``` **功能**: 授权操作员代理账户操作 --- #### 6.2 撤销操作员 ```rust pub fn revoke_operator(&mut self, account: &str, operator: &str) ``` **功能**: 撤销操作员授权 --- #### 6.3 查询操作员 ```rust pub fn is_operator(&self, account: &str, operator: &str) -> bool ``` **功能**: 检查是否为授权操作员 --- ### 7. 账户锁定 #### 7.1 锁定账户 ```rust pub fn lock_account(&mut self, account: &str, unlock_time: u64) ``` **功能**: 锁定账户,禁止转出 --- #### 7.2 解锁账户 ```rust pub fn unlock_account(&mut self, account: &str) ``` **功能**: 提前解锁账户 --- #### 7.3 检查锁定状态 ```rust pub fn is_account_locked(&self, account: &str) -> bool ``` --- ### 8. 转账控制 #### 8.1 暂停转账 ```rust pub fn halt_transfers(&mut self) ``` **功能**: 全局暂停所有转账 --- #### 8.2 恢复转账 ```rust pub fn resume_transfers(&mut self) ``` **功能**: 恢复转账 --- ## 🧪 测试分析 ### 测试覆盖 | 测试类别 | 测试数量 | 状态 | |---------|---------|------| | 分区管理 | 3个 | ✅ 通过 | | 余额查询 | 2个 | ✅ 通过 | | 转账功能 | 3个 | ✅ 通过 | | 操作员管理 | 2个 | ✅ 通过 | | 账户锁定 | 1个 | ✅ 通过 | | 转账控制 | 1个 | ✅ 通过 | | **总计** | **12个** | **✅ 全部通过** | **测试覆盖率**: 85% --- ## 🐛 发现的问题 ### 问题1: 缺少分区间转账 **严重程度**: ⚠️ 中等 **描述**: 只支持同一分区内转账,不支持跨分区转账 **建议**: 添加分区间转账 ```rust pub fn transfer_between_partitions( &mut self, from: &str, to: &str, amount: u64, from_partition: &[u8; 32], to_partition: &[u8; 32], ) -> Result ``` **状态**: ❌ 待实现 --- ### 问题2: 缺少批量操作 **严重程度**: ⚠️ 低 **描述**: 不支持批量转账 **建议**: 添加批量转账 ```rust pub fn batch_transfer_by_partition( &mut self, from: &str, transfers: Vec<(String, u64)>, partition_id: &[u8; 32], ) -> Result> ``` **状态**: ❌ 待实现 --- ### 问题3: 缺少事件通知 **严重程度**: ⚠️ 中等 **描述**: 没有事件通知机制 **建议**: 添加事件 ```rust pub enum Acc1410Event { PartitionCreated { id: [u8; 32], name: String }, TokensIssued { partition_id: [u8; 32], to: String, amount: u64 }, TokensTransferred { partition_id: [u8; 32], from: String, to: String, amount: u64 }, } ``` **状态**: ❌ 待实现 --- ### 问题4: 缺少分区合并和拆分 **严重程度**: ⚠️ 低 **描述**: 不支持分区合并和拆分 **建议**: 添加分区操作 ```rust pub fn merge_partitions( &mut self, partition1: &[u8; 32], partition2: &[u8; 32], ) -> Result<[u8; 32]> pub fn split_partition( &mut self, partition_id: &[u8; 32], ratio: f64, ) -> Result<([u8; 32], [u8; 32])> ``` **状态**: ❌ 待实现 --- ## 📊 完成度评估 | 功能模块 | 代码行数 | 完成度 | 状态 | |---------|---------|--------|------| | 类型定义 | 274行 | 95% | ✅ 完成 | | 分区管理 | 187行 | 90% | ✅ 完成 | | 转账管理 | 434行 | 80% | ✅ 完成 | | 操作员管理 | 包含在transfer.rs | 90% | ✅ 完成 | | 账户锁定 | 包含在transfer.rs | 85% | ✅ 完成 | | 错误处理 | 45行 | 100% | ✅ 完成 | | 分区间转账 | 0行 | 0% | ❌ 未实现 | | 批量操作 | 0行 | 0% | ❌ 未实现 | | 事件通知 | 0行 | 0% | ❌ 未实现 | | 分区合并拆分 | 0行 | 0% | ❌ 未实现 | | 测试覆盖 | 包含在各文件 | 85% | ✅ 良好 | | **总计** | **1,388行** | **75%** | **✅ 大部分完成** | --- ## 🌟 设计亮点 1. **清晰的模块划分** - types.rs: 类型定义 - partition.rs: 分区管理 - transfer.rs: 转账管理 - error.rs: 错误定义 2. **完整的GNACS扩展** - 64位编码(48位基础+16位扩展) - 支持分区类型、锁定期、投票权、分红优先级 3. **丰富的分区类型** - 6种分区类型 - 支持不同的权益组合 4. **完善的测试** - 12个测试用例 - 85%覆盖率 - 全部通过 5. **灵活的操作员机制** - 支持授权和撤销 - 操作员代理转账 --- ## 🔗 模块依赖关系 ``` nac-acc-1410 ├── 依赖 │ ├── serde (序列化) │ ├── sha3 (哈希) │ ├── chrono (时间) │ └── tracing (日志) └── 被依赖 ├── nac-acc-1400 (证券型资产) └── 其他ACC协议 ``` --- ## 📝 开发建议 ### 短期目标 (1周) 1. **添加分区间转账** (优先级P2) 2. **添加事件通知** (优先级P2) 3. **完善文档** (优先级P3) ### 中期目标 (2周) 4. **添加批量操作** (优先级P3) 5. **添加分区合并拆分** (优先级P3) 6. **优化性能** (优先级P3) --- ## 💡 使用示例 ### 基础操作 ```rust use nac_acc_1410::*; // 创建ACC-1410实例 let mut acc1410 = Acc1410::new(); // 创建分区 let extended_gnacs = ExtendedGNACS { base_gnacs: vec![0x94, 0x01, 0x00, 0x04, 0x02, 0x01], extension: GNACSExtension { partition_type: 0x01, vesting_years: 0, voting_multiplier: 1, dividend_priority: 1, }, }; let partition_id = acc1410.create_partition( "Common Stock".to_string(), extended_gnacs, PartitionType::CommonStock, )?; // 发行代币 acc1410.issue_to_partition(&partition_id, "user1", 1000)?; // 转账 acc1410.transfer_by_partition("user1", "user2", 300, &partition_id)?; // 查询余额 let balance = acc1410.balance_of_by_partition(&partition_id, "user1")?; println!("余额: {}", balance); ``` --- **分析完成时间**: 2026-02-18 **下一步**: 实现分区间转账和事件通知