NAC_Blockchain/nac-udm/DEVELOPMENT_GUIDE.md

1046 lines
28 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# NAC统一定义模块UDM开发说明文档
**版本**: v0.1.0
**作者**: NAC公链开发小组
**日期**: 2025-02-07
**状态**: 开发中
---
## 目录
1. [项目概述](#项目概述)
2. [架构设计](#架构设计)
3. [核心组件](#核心组件)
4. [已实现模块](#已实现模块)
5. [开发指南](#开发指南)
6. [测试指南](#测试指南)
7. [多语言支持](#多语言支持)
8. [路线图](#路线图)
---
## 项目概述
NAC统一定义模块Unified Definition Module, UDM是NAC原生公链的**单一真理来源Single Source of Truth**统一管理整个NAC生态系统中的所有类型定义、函数签名、常量和版本信息。
### 设计哲学
**"定义即真理,规则即共识"**
UDM采用元定义系统Meta-Definition System实现了"定义如何定义"的自举机制确保所有定义在整个NAC生态中保持一致性和可追溯性。
### 核心特性
- **语言无关**: 支持Rust、Go、Charter三种语言的自动绑定生成
- **版本管理**: 基于语义化版本SemVer 2.0.0)的定义版本控制
- **分层架构**: 完全遵循NAC的3层架构L2/L1/L0
- **类型安全**: 强类型系统,编译时检查
- **可追溯性**: 每个定义都有唯一的UID和完整的元数据
### 技术栈
- **实现语言**: Rust 1.70+
- **序列化**: serde + serde_json
- **哈希算法**: SHA-256
- **测试框架**: Rust内置测试框架
---
## 架构设计
### 3层架构
NAC采用清晰的3层架构设计UDM完全遵循这一架构
```
┌─────────────────────────────────────────────────────────┐
│ L2: 宪法治理层 (Constitutional Governance Layer) │
│ - 宪法收据、宪法条款、网络规则、CCRN授权 │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ L1: 多链协议层 (Multi-Chain Protocol Layer) │
│ - CBPP共识、GNACS分类、ACC协议族、NVM虚拟机 │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ L0: CSNP结构化网络层 (CSNP Structured Network Layer) │
│ - GIDS、MA-RCM、AA-PE、FTAN、UCA │
└─────────────────────────────────────────────────────────┘
```
### 目录结构
```
nac-udm/
├── Cargo.toml # Rust项目配置
├── README.md # 项目说明
├── CHANGELOG.md # 版本变更日志
├── DEVELOPMENT_GUIDE.md # 本文档
├── API_SPECIFICATION.md # API规范文档待生成
├── src/
│ ├── lib.rs # 模块入口
│ │
│ ├── registry/ # 核心注册表系统
│ │ ├── mod.rs
│ │ ├── uid.rs # 统一标识符
│ │ ├── version.rs # 版本管理
│ │ ├── definition.rs # 定义抽象
│ │ ├── registry.rs # 定义注册表
│ │ └── language.rs # 多语言支持
│ │
│ ├── primitives/ # 基础原语类型
│ │ ├── mod.rs
│ │ ├── address.rs # 地址类型20字节
│ │ ├── hash.rs # 哈希类型32字节
│ │ ├── timestamp.rs # 时间戳类型
│ │ └── signature.rs # 签名类型
│ │
│ ├── l2_governance/ # L2: 宪法治理层
│ │ ├── mod.rs
│ │ ├── constitutional/ # 宪法收据、CEE
│ │ ├── clauses/ # 宪法条款库
│ │ ├── rules/ # 网络规则定义
│ │ ├── ccrn/ # 跨链中继节点授权
│ │ └── penalties/ # 惩罚条款
│ │
│ ├── l1_protocol/ # L1: 多链协议层
│ │ ├── mod.rs
│ │ ├── cbpp/ # 宪政区块生产协议
│ │ │ ├── mod.rs
│ │ │ ├── constitutional_receipt.rs
│ │ │ ├── fluid_block.rs
│ │ │ ├── open_production_network.rs
│ │ │ └── gossip_protocol.rs
│ │ ├── gnacs/ # 全球资产分类系统
│ │ │ ├── mod.rs
│ │ │ ├── code.rs
│ │ │ ├── category.rs
│ │ │ ├── jurisdiction.rs
│ │ │ ├── compliance.rs
│ │ │ └── risk.rs
│ │ ├── acc/ # ACC协议族待实现
│ │ └── nvm/ # NVM 2.0虚拟机(待实现)
│ │
│ ├── l0_native/ # L0: CSNP网络层
│ │ ├── mod.rs
│ │ ├── gids/ # 全域身份目录服务
│ │ ├── ma_rcm/ # 多链自适应连接管理器
│ │ ├── aa_pe/ # 资产感知传播引擎
│ │ ├── ftan/ # 碎片化交易聚合网络
│ │ └── uca/ # 统一跨链审计器
│ │
│ └── utils/ # 工具函数
│ └── mod.rs
├── tests/ # 集成测试
├── docs/ # 文档
└── tools/ # 工具脚本
```
---
## 核心组件
### 1. 统一标识符UID
UID是UDM的核心标识系统为每个定义分配唯一的分层命名空间标识符。
**格式**: `nac.<layer>.<module>.<definition>`
**示例**:
- `nac.primitives.Address.v1` - 地址类型
- `nac.cbpp.ConstitutionalReceipt.v1` - 宪法收据
- `nac.gnacs.GNACSCode.v1` - GNACS编码
**特性**:
- 分层命名空间Layer、Module、Definition
- 父子关系查询
- 层级过滤
- 字符串解析和验证
### 2. 版本管理Version
基于语义化版本SemVer 2.0.0)的版本管理系统。
**格式**: `major.minor.patch[-prerelease][+build]`
**示例**:
- `1.0.0` - 稳定版本
- `2.1.3` - 功能更新
- `3.0.0-alpha.1` - 预发布版本
- `1.2.3+20250207` - 带构建元数据
**特性**:
- 版本比较(>, <, ==
- 兼容性检查
- 版本递增bump_major, bump_minor, bump_patch
- 预发布和构建元数据支持
### 3. 定义抽象Definition
元定义系统的核心,定义"什么是定义"。
**字段**:
- `uid`: UID - 唯一标识符
- `version`: Version - 版本号
- `name`: String - 定义名称
- `description`: String - 定义描述
- `definition_type`: DefinitionType - 定义类型
- `tags`: Vec<String> - 标签
- `deprecated`: bool - 是否弃用
- `dependencies`: Vec<UID> - 依赖关系
- `language_bindings`: HashMap<Language, LanguageBinding> - 多语言绑定
**定义类型**:
- `Type` - 类型定义struct、enum
- `Function` - 函数定义
- `Constant` - 常量定义
- `Protocol` - 协议定义
- `Module` - 模块定义
### 4. 定义注册表DefinitionRegistry
线程安全的定义管理系统。
**特性**:
- 多版本支持(同一定义可以有多个版本)
- 标签索引(快速按标签查询)
- 类型索引(快速按类型查询)
- 依赖追踪(查询定义的所有依赖)
- 线程安全使用RwLock
**API**:
```rust
// 注册定义
registry.register(definition)?;
// 查询定义
let def = registry.get(&uid)?;
// 按标签查询
let defs = registry.find_by_tag("cbpp");
// 按类型查询
let types = registry.find_by_type(DefinitionType::Type);
// 获取所有版本
let versions = registry.get_all_versions(&uid);
```
### 5. 多语言支持Language
支持Rust、Go、Charter三种语言的自动绑定生成。
**语言类型**:
- `Rust` - Rust语言
- `Go` - Go语言
- `Charter` - NAC智能合约语言
**语言绑定**:
```rust
pub struct LanguageBinding {
pub language: Language,
pub code: String, // 生成的代码
pub imports: Vec<String>, // 导入依赖
pub type_mappings: HashMap<String, String>, // 类型映射
}
```
**基础类型映射表**:
| NAC类型 | Rust | Go | Charter |
|---------|------|----|----|
| u8 | u8 | uint8 | u8 |
| u64 | u64 | uint64 | u64 |
| u128 | u128 | *big.Int | u128 |
| u256 | U256 | *big.Int | u256 |
| address | Address | [20]byte | address |
| hash | Hash | [32]byte | hash |
| bytes | Vec<u8> | []byte | bytes |
| string | String | string | string |
---
## 已实现模块
### 基础原语类型Primitives
#### Address地址类型
**UID**: `nac.primitives.Address.v1`
20字节地址类型用于标识账户、合约等实体。
**字段**:
- `bytes: [u8; 20]` - 20字节数组
**方法**:
- `new(bytes: [u8; 20]) -> Self` - 创建新地址
- `from_slice(slice: &[u8]) -> Result<Self, String>` - 从切片创建
- `from_hex(hex: &str) -> Result<Self, String>` - 从十六进制字符串创建
- `as_bytes(&self) -> &[u8; 20]` - 获取字节数组
- `to_hex(&self) -> String` - 转换为十六进制字符串
- `zero() -> Self` - 零地址
- `is_zero(&self) -> bool` - 检查是否为零地址
**示例**:
```rust
use nac_udm::primitives::Address;
// 创建地址
let addr = Address::new([1u8; 20]);
// 从十六进制创建
let addr = Address::from_hex("0x1234567890abcdef1234567890abcdef12345678")?;
// 转换为十六进制
let hex = addr.to_hex();
```
#### Hash哈希类型
**UID**: `nac.primitives.Hash.v1`
32字节哈希类型使用SHA-256算法。
**字段**:
- `bytes: [u8; 32]` - 32字节数组
**方法**:
- `new(bytes: [u8; 32]) -> Self` - 创建新哈希
- `from_slice(slice: &[u8]) -> Result<Self, String>` - 从切片创建
- `from_hex(hex: &str) -> Result<Self, String>` - 从十六进制字符串创建
- `sha256(data: &[u8]) -> Self` - 计算SHA-256哈希
- `as_bytes(&self) -> &[u8; 32]` - 获取字节数组
- `to_hex(&self) -> String` - 转换为十六进制字符串
- `zero() -> Self` - 零哈希
- `is_zero(&self) -> bool` - 检查是否为零哈希
**示例**:
```rust
use nac_udm::primitives::Hash;
// 计算哈希
let hash = Hash::sha256(b"hello world");
// 从十六进制创建
let hash = Hash::from_hex("a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e")?;
```
#### Timestamp时间戳类型
**UID**: `nac.primitives.Timestamp.v1`
Unix时间戳类型秒级精度
**字段**:
- `secs: u64` - Unix时间戳
**方法**:
- `now() -> Self` - 当前时间
- `from_secs(secs: u64) -> Self` - 从秒数创建
- `as_secs(&self) -> u64` - 获取秒数
- `is_expired(&self, duration: u64) -> bool` - 检查是否过期
- `add_secs(&self, secs: u64) -> Self` - 增加秒数
- `sub_secs(&self, secs: u64) -> Self` - 减少秒数
**示例**:
```rust
use nac_udm::primitives::Timestamp;
// 当前时间
let now = Timestamp::now();
// 1小时后
let future = now.add_secs(3600);
// 检查是否过期
if now.is_expired(3600) {
println!("已过期");
}
```
#### Signature签名类型
**UID**: `nac.primitives.Signature.v1`
数字签名类型(可变长度)。
**字段**:
- `bytes: Vec<u8>` - 签名字节
**方法**:
- `new(bytes: Vec<u8>) -> Self` - 创建新签名
- `from_slice(slice: &[u8]) -> Self` - 从切片创建
- `from_hex(hex: &str) -> Result<Self, String>` - 从十六进制字符串创建
- `as_bytes(&self) -> &[u8]` - 获取字节切片
- `to_hex(&self) -> String` - 转换为十六进制字符串
- `is_empty(&self) -> bool` - 检查是否为空
- `len(&self) -> usize` - 获取长度
- `empty() -> Self` - 空签名
### CBPP宪政区块生产协议
#### ConstitutionalReceipt宪法收据
**UID**: `nac.cbpp.ConstitutionalReceipt.v1`
宪法收据是CBPP的核心组件任何试图改变链状态的操作必须先获得CR。
**字段**:
- `receipt_id: Hash` - 收据ID
- `transaction_hash: Hash` - 交易哈希
- `constitutional_hash: Hash` - 宪法哈希
- `execution_result_hash: Hash` - 执行结果哈希
- `timestamp: Timestamp` - 签发时间戳
- `validity_window: u64` - 有效期窗口(秒)
- `issuer_pubkey: Vec<u8>` - 签发者公钥CEE实例
- `signature: Signature` - 签名
- `validation_results: Vec<ValidationResult>` - 验证结果列表
**验证类型**:
- `KYC` - KYC验证
- `AML` - 反洗钱
- `AssetValuation` - 资产估值
- `ComplianceCheck` - 合规审查
- `JurisdictionCheck` - 司法辖区验证
- `ConstitutionalClause` - 宪法条款验证
- `SmartContractValidation` - 智能合约验证
- `Other(String)` - 其他
**方法**:
- `new(...) -> Self` - 创建新收据
- `add_validation_result(&mut self, result: ValidationResult)` - 添加验证结果
- `sign(&mut self, signature: Signature)` - 签名收据
- `verify(&self, current_time: Timestamp, valid_constitutional_hash: &Hash) -> bool` - 验证收据
- `is_expired(&self, current_time: Timestamp) -> bool` - 检查是否过期
- `get_weight(&self) -> u64` - 获取权重
**示例**:
```rust
use nac_udm::l1_protocol::cbpp::*;
// 创建宪法收据
let mut cr = ConstitutionalReceipt::new(
tx_hash,
const_hash,
exec_hash,
issuer_key,
3600, // 1小时有效期
);
// 添加验证结果
cr.add_validation_result(ValidationResult::new(
ValidationType::KYC,
true,
b"KYC passed",
));
// 签名
cr.sign(signature);
// 验证
if cr.verify(Timestamp::now(), &const_hash) {
println!("收据有效");
}
```
#### FluidBlock流体区块
**UID**: `nac.cbpp.FluidBlock.v1`
流体区块使用三维坐标系统:(Epoch, Round, Branch)支持DAG结构。
**字段**:
- `coordinates: BlockCoordinates` - 三维坐标
- `hash: Hash` - 区块哈希
- `parent_hashes: Vec<Hash>` - 父区块哈希列表
- `constitutional_hash: Hash` - 宪法哈希
- `timestamp: Timestamp` - 时间戳
- `transactions: Vec<TransactionWithReceipt>` - 交易列表
- `producer_pubkey: Vec<u8>` - 区块生产者公钥
- `signature: Signature` - 区块签名
- `size: u64` - 区块大小(字节)
- `weight: u64` - 区块权重
**三维坐标**:
- `epoch: u64` - 纪元
- `round: u64` - 轮次
- `branch: u32` - 分支
**方法**:
- `new(...) -> Self` - 创建新区块
- `sign(&mut self, signature: Signature)` - 签名区块
- `verify(&self, current_time: Timestamp, valid_constitutional_hash: &Hash) -> bool` - 验证区块
- `should_produce_block(last_block_time: Timestamp, pending_tx_count: usize, config: &BlockConfig) -> bool` - 检查是否应该出块
**示例**:
```rust
use nac_udm::l1_protocol::cbpp::*;
// 创建区块坐标
let coords = BlockCoordinates::new(1, 100, 0);
// 创建流体区块
let mut block = FluidBlock::new(
coords,
parent_hashes,
const_hash,
producer_key,
transactions,
);
// 签名区块
block.sign(signature);
// 验证区块
if block.verify(Timestamp::now(), &const_hash) {
println!("区块有效");
}
```
#### OpenProductionNetwork开放生产网络
**UID**: `nac.cbpp.OpenProductionNetwork.v1`
OPN管理区块生产者节点任何满足条件的节点都可以加入。
**字段**:
- `producers: Vec<BlockProducer>` - 所有区块生产者
- `min_stake: u128` - 最低质押要求
- `min_reputation: f64` - 最低信誉要求
**区块生产者**:
- `pubkey: Vec<u8>` - 节点公钥
- `stake: u128` - 质押金额
- `reputation: f64` - 信誉分数
- `joined_at: Timestamp` - 加入时间
- `last_active: Timestamp` - 最后活跃时间
- `blocks_produced: u64` - 生产的区块数
- `blocks_validated: u64` - 验证的区块数
**方法**:
- `new(min_stake: u128, min_reputation: f64) -> Self` - 创建OPN
- `add_producer(&mut self, producer: BlockProducer) -> Result<(), String>` - 添加生产者
- `remove_producer(&mut self, pubkey: &[u8]) -> Result<(), String>` - 移除生产者
- `active_producer_count(&self, timeout_secs: u64) -> usize` - 获取活跃生产者数量
#### GossipProtocolGossip协议
**UID**: `nac.cbpp.GossipProtocol.v1`
RVGP负责在网络中传播和验证宪法收据。
**消息类型**:
- `NewReceipt` - 新收据广播
- `ReceiptValidation` - 收据验证结果
- `NewBlock` - 区块广播
- `BlockValidation` - 区块验证结果
**方法**:
- `GossipMessage::new(...) -> Self` - 创建Gossip消息
- `verify(&self) -> bool` - 验证消息
- `GossipNode::new(pubkey: Vec<u8>) -> Self` - 创建Gossip节点
- `add_peer(&mut self, peer_pubkey: Vec<u8>)` - 添加对等节点
- `has_received(&self, message_hash: &Hash) -> bool` - 检查消息是否已接收
- `broadcast(&self, message: &GossipMessage) -> Vec<Vec<u8>>` - 广播消息
### GNACS全球资产分类系统
#### GNACSCode48位编码
**UID**: `nac.gnacs.GNACSCode.v1`
48位GNACS编码为每个资产分配唯一的"数字基因"。
**编码结构**:
```
┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
│ 8 bits │ 8 bits │ 8 bits │ 8 bits │ 8 bits │ 8 bits │
│ Category │ SubCat │ Juris │ Comp │ Risk │ Checksum │
└──────────┴──────────┴──────────┴──────────┴──────────┴──────────┘
```
**方法**:
- `new(...) -> Self` - 创建新编码
- `from_bytes(bytes: [u8; 6]) -> Result<Self, String>` - 从字节数组创建
- `from_hex(hex: &str) -> Result<Self, String>` - 从十六进制创建
- `to_hex(&self) -> String` - 转换为十六进制
- `category(&self) -> AssetCategory` - 获取资产大类
- `jurisdiction(&self) -> Jurisdiction` - 获取司法辖区
- `compliance_level(&self) -> ComplianceLevel` - 获取合规级别
- `risk_level(&self) -> RiskLevel` - 获取风险等级
- `verify_checksum(&self) -> bool` - 验证校验和
- `format_readable(&self) -> String` - 格式化为人类可读字符串
**示例**:
```rust
use nac_udm::l1_protocol::gnacs::*;
// 创建GNACS编码
let code = GNACSCode::new(
AssetCategory::Equity,
1,
Jurisdiction::US,
ComplianceLevel::High,
RiskLevel::Medium,
);
// 转换为十六进制
let hex = code.to_hex();
// 格式化输出
println!("{}", code); // GNACS-0101-0102-0305
```
#### AssetCategory资产分类
**UID**: `nac.gnacs.AssetCategory.v1`
11种资产大类
- `Equity` (0x01) - 股权资产
- `Debt` (0x02) - 债权资产
- `Physical` (0x03) - 实物资产
- `IntellectualProperty` (0x04) - 知识产权
- `Derivatives` (0x05) - 金融衍生品
- `Digital` (0x06) - 数字资产
- `Commodities` (0x07) - 大宗商品
- `RealEstate` (0x08) - 房地产
- `ArtCollectibles` (0x09) - 艺术品与收藏品
- `CarbonCredits` (0x0A) - 碳信用
- `Other` (0xFF) - 其他
**方法**:
- `from_u8(value: u8) -> Self` - 从u8转换
- `name(&self) -> &'static str` - 获取分类名称
- `description(&self) -> &'static str` - 获取分类描述
- `all() -> Vec<Self>` - 获取所有分类
#### Jurisdiction司法辖区
**UID**: `nac.gnacs.Jurisdiction.v1`
17个司法辖区
- `US` (0x01) - 美国
- `CN` (0x02) - 中国
- `EU` (0x03) - 欧盟
- `UK` (0x04) - 英国
- `JP` (0x05) - 日本
- `SG` (0x06) - 新加坡
- `HK` (0x07) - 香港
- `CH` (0x08) - 瑞士
- `AE` (0x09) - 阿联酋
- `KY` (0x0A) - 开曼群岛
- `VG` (0x0B) - 英属维尔京群岛
- `LU` (0x0C) - 卢森堡
- `AU` (0x0D) - 澳大利亚
- `CA` (0x0E) - 加拿大
- `KR` (0x0F) - 韩国
- `Global` (0xFE) - 全球/跨境
- `Other` (0xFF) - 其他
**方法**:
- `from_u8(value: u8) -> Self` - 从u8转换
- `iso_code(&self) -> &'static str` - 获取ISO代码
- `full_name(&self) -> &'static str` - 获取全称
- `all() -> Vec<Self>` - 获取所有司法辖区
#### ComplianceLevel合规级别
**UID**: `nac.gnacs.ComplianceLevel.v1`
6个合规等级
- `VeryHigh` (0x01) - 极高100分
- `High` (0x02) - 高80分
- `Medium` (0x03) - 中60分
- `Low` (0x04) - 低40分
- `VeryLow` (0x05) - 极低20分
- `Unknown` (0xFF) - 未知0分
**方法**:
- `from_u8(value: u8) -> Self` - 从u8转换
- `name(&self) -> &'static str` - 获取级别名称
- `description(&self) -> &'static str` - 获取级别描述
- `score(&self) -> u8` - 获取数值分数0-100
#### RiskLevel风险等级
**UID**: `nac.gnacs.RiskLevel.v1`
6个风险等级
- `VeryLow` (0x01) - 极低20分
- `Low` (0x02) - 低40分
- `Medium` (0x03) - 中60分
- `High` (0x04) - 高80分
- `VeryHigh` (0x05) - 极高100分
- `Unknown` (0xFF) - 未知0分
**方法**:
- `from_u8(value: u8) -> Self` - 从u8转换
- `name(&self) -> &'static str` - 获取级别名称
- `description(&self) -> &'static str` - 获取级别描述
- `score(&self) -> u8` - 获取数值分数0-100
---
## 开发指南
### 环境准备
**系统要求**:
- Rust 1.70+
- Cargo
- Git
**安装Rust**:
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
### 编译项目
```bash
# 克隆项目
cd /home/ubuntu/nac-workspace/nac-udm
# 检查编译
cargo check
# 编译
cargo build
# 编译发布版本
cargo build --release
```
### 运行测试
```bash
# 运行所有测试
cargo test
# 运行特定模块的测试
cargo test primitives
# 运行特定测试
cargo test test_address_creation
# 显示测试输出
cargo test -- --nocapture
```
### 添加新定义
#### 步骤1: 创建定义文件
在相应的层级目录下创建新的定义文件,例如:
```rust
// src/l1_protocol/acc/acc20.rs
use crate::primitives::{Address, Hash};
use serde::{Deserialize, Serialize};
/// ACC-20 可替代代币标准
///
/// UID: nac.acc.ACC20.v1
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ACC20Token {
/// 代币名称
pub name: String,
/// 代币符号
pub symbol: String,
/// 小数位数
pub decimals: u8,
/// 总供应量
pub total_supply: u128,
/// 合约地址
pub contract_address: Address,
}
impl ACC20Token {
/// 创建新的ACC-20代币
pub fn new(name: String, symbol: String, decimals: u8, total_supply: u128) -> Self {
Self {
name,
symbol,
decimals,
total_supply,
contract_address: Address::zero(),
}
}
}
```
#### 步骤2: 更新模块导出
在`mod.rs`中导出新定义:
```rust
// src/l1_protocol/acc/mod.rs
pub mod acc20;
pub use acc20::*;
```
#### 步骤3: 添加测试
```rust
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_acc20_creation() {
let token = ACC20Token::new(
"Test Token".to_string(),
"TEST".to_string(),
18,
1_000_000_000,
);
assert_eq!(token.name, "Test Token");
assert_eq!(token.symbol, "TEST");
assert_eq!(token.decimals, 18);
}
}
```
#### 步骤4: 注册到UDM
```rust
use nac_udm::registry::*;
// 创建定义
let definition = Definition::builder()
.uid(UID::parse("nac.acc.ACC20.v1")?)
.version(Version::new(1, 0, 0))
.name("ACC20Token")
.description("ACC-20 fungible token standard")
.definition_type(DefinitionType::Type)
.add_tag("acc")
.add_tag("token")
.build();
// 注册到注册表
let registry = DefinitionRegistry::new();
registry.register(definition)?;
```
### 代码规范
**命名规范**:
- 类型名称PascalCase如`ConstitutionalReceipt`
- 函数名称snake_case如`add_validation_result`
- 常量名称SCREAMING_SNAKE_CASE如`MAX_BLOCK_SIZE`
- 模块名称snake_case如`constitutional_receipt`
**文档规范**:
- 所有公开类型和函数必须有文档注释
- 使用`///!`注释模块
- 使用`///`注释类型和函数
- 包含示例代码
**测试规范**:
- 每个公开函数至少一个测试
- 测试函数命名:`test_<function_name>_<scenario>`
- 使用`assert_eq!`、`assert!`等宏进行断言
---
## 测试指南
### 单元测试
每个模块都应该包含单元测试:
```rust
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_example() {
// 测试代码
assert_eq!(1 + 1, 2);
}
}
```
### 集成测试
在`tests/`目录下创建集成测试:
```rust
// tests/integration_test.rs
use nac_udm::prelude::*;
#[test]
fn test_full_workflow() {
// 完整的工作流测试
}
```
### 测试覆盖率
```bash
# 安装tarpaulin
cargo install cargo-tarpaulin
# 运行覆盖率测试
cargo tarpaulin --out Html
```
---
## 多语言支持
### Rust绑定
Rust是UDM的原生实现语言直接使用即可
```rust
use nac_udm::prelude::*;
let addr = Address::new([1u8; 20]);
```
### Go绑定待实现
计划使用代码生成工具自动生成Go绑定
```go
package nac
type Address [20]byte
func NewAddress(bytes [20]byte) Address {
return Address(bytes)
}
```
### Charter绑定待实现
计划为Charter智能合约语言生成绑定
```charter
struct Address {
bytes: [u8; 20]
}
impl Address {
fn new(bytes: [u8; 20]) -> Self {
Self { bytes }
}
}
```
---
## 路线图
### 已完成v0.1.0
- ✅ 核心注册表系统UID、Version、Definition、Registry、Language
- ✅ 基础原语类型Address、Hash、Timestamp、Signature
- ✅ CBPP完整模块ConstitutionalReceipt、FluidBlock、OPN、Gossip
- ✅ GNACS完整模块GNACSCode、AssetCategory、Jurisdiction、ComplianceLevel、RiskLevel
### 进行中v0.2.0
- ⏳ ACC协议族13个协议
- ACC-20可替代代币
- ACC-721不可替代代币
- ACC-1155多代币标准
- ACC-RWARWA资产
- ACC-Compliance合规
- ACC-Valuation估值
- ACC-Custody托管
- ACC-Collateral抵押
- ACC-Redemption赎回
- ACC-Insurance保险
- ACC-Governance治理
- ACC-XTZH稳定币
- ACC-Reserve储备
- ⏳ NVM 2.0虚拟机
- 225个基础操作码
- 125个RWA专属指令
- Gas计量模型
### 计划中v0.3.0
- ⏳ L2宪法治理层
- 宪法条款库
- 网络规则定义
- CCRN授权管理
- 惩罚条款
- ⏳ L0 CSNP网络层
- GIDS全域身份目录服务
- MA-RCM多链自适应连接管理器
- AA-PE资产感知传播引擎
- FTAN碎片化交易聚合网络
- UCA统一跨链审计器
### 未来v1.0.0
- ⏳ 多语言绑定生成
- Go绑定生成器
- Charter绑定生成器
- 类型映射优化
- ⏳ 工具链完善
- 定义验证器
- 定义迁移工具
- 代码生成器
- ⏳ 文档完善
- API规范文档
- 使用示例
- 最佳实践
---
## 附录
### 参考资料
- NAC原生公链完全去以太坊化架构设计
- CSNP V2.0技术白皮书
- 宪政区块生产协议CBPP技术白皮书
- 资产加密DNA管理系统技术白皮书
### 贡献指南
欢迎贡献代码、文档和测试!请遵循以下流程:
1. Fork项目
2. 创建特性分支(`git checkout -b feature/amazing-feature`
3. 提交更改(`git commit -m 'Add amazing feature'`
4. 推送到分支(`git push origin feature/amazing feature`
5. 创建Pull Request
### 许可证
MIT License
---
**文档版本**: v0.1.0
**最后更新**: 2025-02-07
**维护者**: NAC公链开发小组