12 KiB
NAC一键上链系统 - API调用实现方案
核心理念
所有9个模块都通过调用已有的API接口实现,不重新开发底层功能。
模块1: 编排引擎
职责: 协调各模块API调用,管理状态机
实现方式:
- 状态机管理(本地实现)
- 调用其他8个模块的API
- 错误处理和重试(本地实现)
代码位置: src/services/orchestrator.rs
模块2: AI合规审批模块
API调用: nac-sdk → L4适配器 → nac-ai-compliance
调用方式:
use nac_sdk::adapters::NACAdapter;
let adapter = NACAdapter::new(&config).await?;
// 调用AI合规审批
let compliance_result = adapter.l4()
.compliance_check(asset_type, legal_docs, kyc_level, jurisdiction)
.await?;
返回数据:
- 合规性评分
- 审批结果哈希
- 证明数据
代码位置: src/services/compliance.rs
模块3: AI估值模块
API调用: nac-sdk → L4适配器 → nac-ai-valuation
调用方式:
// 调用AI估值
let valuation_result = adapter.l4()
.asset_valuation(asset_type, market_data, historical_data)
.await?;
返回数据:
- 估值结果(SDR计价)
- 估值结果哈希
- 估值模型参数
代码位置: src/services/valuation.rs
模块4: DNA生成模块
API调用: nac-sdk → L1适配器 → nac-gnacs
调用方式:
// 生成GNACS编码
let gnacs_code = adapter.l1()
.gnacs_encode(asset_type, risk_weight, compliance_level)
.await?;
// 生成资产DNA
let dna = create_asset_dna(gnacs_code, asset_info);
let dna_hash = adapter.l0().hash_sha3_384(&dna)?;
返回数据:
- 48位GNACS编码
- 资产DNA结构
- DNA哈希
代码位置: src/services/dna.rs
模块5: 宪法执行引擎(CEE)
API调用: nac-sdk → L2适配器 → nac-constitution
调用方式:
// 提交宪法审查
let cr_compliance = adapter.l2()
.submit_constitutional_review(compliance_result)
.await?;
// 查询审查结果
let review_result = adapter.l2()
.query_review_result(review_id)
.await?;
返回数据:
- 宪法收据(CR)
- 审查结果
- 合规证明
代码位置: src/services/constitution.rs
模块6: 托管对接模块
API调用:
nac-sdk→L2适配器→ 获取托管机构白名单- 直接调用托管机构API(HTTPS + 数字签名)
调用方式:
// 获取托管机构白名单
let custody_list = adapter.l2()
.get_custody_whitelist(asset_type, jurisdiction)
.await?;
// 选择托管机构
let custody_provider = select_custody_provider(&custody_list);
// 调用托管机构API
let custody_receipt = call_custody_api(
custody_provider,
asset_dna,
valuation_result,
legal_docs
).await?;
// 验证托管凭证
let verified = adapter.l2()
.verify_custody_receipt(custody_receipt)
.await?;
返回数据:
- 托管凭证(含数字签名)
- 托管凭证哈希
代码位置: src/services/custody.rs
模块7: XTZH铸造模块
API调用: nac-sdk → L1适配器 → nac-xtzh
调用方式:
// 计算铸造数量(估值 × 125%)
let xtzh_amount = valuation_result.value * 1.25;
// 铸造XTZH
let mint_result = adapter.l1()
.xtzh_mint(
issuer_address,
xtzh_amount,
asset_dna,
custody_receipt,
vec![cr_compliance, cr_valuation, cr_dna, cr_custody]
)
.await?;
返回数据:
- 铸造交易哈希
- XTZH数量
- 铸造记录
代码位置: src/services/xtzh.rs
模块8: 权益代币发行模块
API调用: nac-sdk → L1适配器 → nac-nvm
调用方式:
// 选择合约模板
let template = select_token_template(asset_type);
// 部署代币合约
let contract_address = adapter.l1()
.deploy_contract(
template,
gnacs_code,
total_supply,
issuer_address,
vec![cr_compliance, cr_valuation, cr_dna, cr_custody, cr_xtzh]
)
.await?;
// 转移代币所有权
let transfer_result = adapter.l1()
.acc20_transfer(contract_address, from, to, amount)
.await?;
返回数据:
- 代币合约地址
- 部署交易哈希
- 代币信息
代码位置: src/services/token.rs
模块9: 链上公示模块
API调用: nac-sdk → L5适配器 → 浏览器/钱包/交易所API
调用方式:
// 注册到区块链浏览器
let browser_result = adapter.l5()
.register_asset_to_browser(
gnacs_code,
contract_address,
asset_metadata
)
.await?;
// 推送到钱包
let wallet_result = adapter.l5()
.push_token_to_wallet(
contract_address,
token_info
)
.await?;
// 提交交易所上币申请
let exchange_result = adapter.l5()
.submit_listing_application(
contract_address,
token_info,
vec![all_crs]
)
.await?;
返回数据:
- 浏览器注册结果
- 钱包推送结果
- 交易所申请结果
代码位置: src/services/listing.rs
完整流程示例
// src/services/orchestrator.rs
pub async fn process_asset_onboarding(
asset_submission: AssetSubmission,
adapter: &NACAdapter
) -> Result<OnboardingResult, Error> {
// 1. 初始化状态
let mut state = OnboardingState::Pending;
// 2. AI合规审批
state = OnboardingState::ComplianceCheck;
let compliance_result = compliance::check(
&asset_submission,
adapter
).await?;
// 3. AI估值
state = OnboardingState::Valuation;
let valuation_result = valuation::valuate(
&asset_submission,
adapter
).await?;
// 4. DNA生成
state = OnboardingState::DNAGeneration;
let dna_result = dna::generate(
&asset_submission,
&compliance_result,
&valuation_result,
adapter
).await?;
// 5. 宪法审查(获取所有CR)
let crs = constitution::review_all(
&compliance_result,
&valuation_result,
&dna_result,
adapter
).await?;
// 6. 托管对接
state = OnboardingState::Custody;
let custody_result = custody::custody(
&asset_submission,
&dna_result,
&valuation_result,
adapter
).await?;
// 7. XTZH铸造
state = OnboardingState::XTZHMinting;
let xtzh_result = xtzh::mint(
&asset_submission,
&valuation_result,
&dna_result,
&custody_result,
&crs,
adapter
).await?;
// 8. 权益代币发行
state = OnboardingState::TokenIssuance;
let token_result = token::issue(
&asset_submission,
&dna_result,
&xtzh_result,
&crs,
adapter
).await?;
// 9. 链上公示
state = OnboardingState::Listed;
let listing_result = listing::list(
&asset_submission,
&dna_result,
&token_result,
adapter
).await?;
// 10. 完成
Ok(OnboardingResult {
asset_id: asset_submission.id,
state: OnboardingState::Listed,
compliance_result,
valuation_result,
dna_result,
custody_result,
xtzh_result,
token_result,
listing_result,
crs,
})
}
数据库设计
表1: assets(资产表)
CREATE TABLE assets (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
asset_type VARCHAR(50) NOT NULL,
asset_info JSON NOT NULL,
legal_docs JSON NOT NULL,
kyc_level INT NOT NULL,
jurisdiction VARCHAR(50) NOT NULL,
state VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id),
INDEX idx_state (state)
);
表2: onboarding_records(上链记录表)
CREATE TABLE onboarding_records (
id VARCHAR(36) PRIMARY KEY,
asset_id VARCHAR(36) NOT NULL,
state VARCHAR(50) NOT NULL,
compliance_result JSON,
valuation_result JSON,
dna_result JSON,
custody_result JSON,
xtzh_result JSON,
token_result JSON,
listing_result JSON,
crs JSON,
error_message TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (asset_id) REFERENCES assets(id),
INDEX idx_asset_id (asset_id),
INDEX idx_state (state)
);
表3: state_transitions(状态转换表)
CREATE TABLE state_transitions (
id VARCHAR(36) PRIMARY KEY,
record_id VARCHAR(36) NOT NULL,
from_state VARCHAR(50) NOT NULL,
to_state VARCHAR(50) NOT NULL,
transition_data JSON,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (record_id) REFERENCES onboarding_records(id),
INDEX idx_record_id (record_id)
);
API接口设计
1. 提交资产上链申请
POST /api/v1/assets/submit
Content-Type: application/json
Authorization: Bearer <token>
{
"asset_type": "real-estate",
"asset_info": {
"name": "商业地产A",
"location": "上海市浦东新区",
"area": 1000,
...
},
"legal_docs": [
{
"type": "legal_opinion",
"hash": "0x..."
}
],
"kyc_level": 2,
"jurisdiction": "CN"
}
Response:
{
"success": true,
"data": {
"asset_id": "uuid",
"state": "Pending"
}
}
2. 查询上链进度
GET /api/v1/assets/{asset_id}/status
Authorization: Bearer <token>
Response:
{
"success": true,
"data": {
"asset_id": "uuid",
"state": "ComplianceCheck",
"progress": 20,
"current_step": "AI合规审批中",
"estimated_time": "3分钟"
}
}
3. 获取资产详情
GET /api/v1/assets/{asset_id}
Authorization: Bearer <token>
Response:
{
"success": true,
"data": {
"asset_id": "uuid",
"state": "Listed",
"compliance_result": {...},
"valuation_result": {...},
"dna_result": {
"gnacs_code": "...",
"dna_hash": "0x...",
"code": "..."
},
"token_result": {
"contract_address": "0x...",
"token_symbol": "...",
"total_supply": "..."
}
}
}
4. 下载链上权证
GET /api/v1/assets/{asset_id}/certificate
Authorization: Bearer <token>
Response: PDF文件
实施步骤
第1步: 创建项目结构(已完成)
第2步: 实现数据库模型
src/models/asset.rssrc/models/onboarding_record.rssrc/models/state_transition.rs
第3步: 实现9个服务模块
src/services/orchestrator.rs- 编排引擎src/services/compliance.rs- AI合规审批src/services/valuation.rs- AI估值src/services/dna.rs- DNA生成src/services/constitution.rs- 宪法执行引擎src/services/custody.rs- 托管对接src/services/xtzh.rs- XTZH铸造src/services/token.rs- 权益代币发行src/services/listing.rs- 链上公示
第4步: 实现API处理器
src/handlers/asset.rs- 资产相关APIsrc/handlers/auth.rs- 认证相关APIsrc/handlers/admin.rs- 管理员相关API
第5步: 实现主程序
src/main.rs- 启动服务器
第6步: 创建前端界面
- 使用React + TypeScript + Tailwind
- 用户前台 + 系统后台
第7步: 部署到备份服务器
- 配置域名和SSL
- 配置数据库
- 启动服务
质量保证
✅ 100%使用API调用 - 不重新实现底层功能
✅ 完整的错误处理 - 每个API调用都有错误处理
✅ 完整的日志记录 - 记录所有API调用和结果
✅ 完整的测试覆盖 - 单元测试 + 集成测试
✅ 完整的文档 - API文档 + 用户手册
制定人: NAC开发团队
制定时间: 2026-02-19
文档状态: 正式版