NAC_Blockchain/_archive/acc1155_v1_backup.rs

255 lines
6.5 KiB
Rust
Raw Permalink 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.

//! ACC-1155: 多代币证书协议
//!
//! UID: nac.acc.ACC1155.v2
//!
//! ACC-1155是NAC原生的多代币证书协议用于在单个证书中管理多种代币类型。
//! 与ERC-1155不同ACC-1155集成了NAC的核心特性
//! - GNACS 48位编码
//! - 代币类型DNA
//! - 主权类型
//! - 合规掩码
//! - 批量操作优化
//! - 混合资产管理(可替代+不可替代)
//! - 托管信息
//! - 保险信息
//! - 碎片化支持
use crate::primitives::{Address, Hash, Timestamp};
use crate::l1_protocol::gnacs::GNACSCode;
use crate::l2_governance::SovereigntyRight;
use serde::{Deserialize, Serialize};
/// 代币ID类型
pub type TokenId = u128;
/// 代币类型(可替代性)
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum TokenType {
/// 可替代代币Fungible Token类似ACC-20
Fungible,
/// 不可替代代币Non-Fungible Token类似ACC-721
NonFungible,
/// 半可替代代币Semi-Fungible Token如游戏道具
SemiFungible,
}
/// 代币类型DNA
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TokenTypeDNA {
/// DNA哈希Blake3哈希
pub dna_hash: Hash,
/// 代币类型ID
pub token_id: TokenId,
/// GNACS编码
pub gnacs_code: GNACSCode,
/// 代币类型(可替代性)
pub token_type: TokenType,
/// 主权类型
pub sovereignty_type: SovereigntyRight,
/// 元数据哈希
pub metadata_hash: Hash,
/// 生成时间
pub generated_at: Timestamp,
}
/// 代币类型元数据
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TokenTypeMetadata {
/// 代币类型ID
pub token_id: TokenId,
/// 代币名称
pub name: String,
/// 代币符号
pub symbol: String,
/// 代币类型
pub token_type: TokenType,
/// 元数据URI
pub uri: String,
/// 最大供应量None表示无限制
pub max_supply: Option<u128>,
/// 当前供应量
pub current_supply: u128,
/// 创建时间
pub created_at: Timestamp,
}
/// 批量转移记录
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchTransfer {
/// 发送者地址
pub from: Address,
/// 接收者地址
pub to: Address,
/// 代币ID列表
pub token_ids: Vec<TokenId>,
/// 数量列表
pub amounts: Vec<u128>,
/// 转移时间
pub transferred_at: Timestamp,
/// 宪法收据哈希
pub constitutional_receipt: Hash,
}
/// 批量铸造记录
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchMint {
/// 接收者地址
pub to: Address,
/// 代币ID列表
pub token_ids: Vec<TokenId>,
/// 数量列表
pub amounts: Vec<u128>,
/// 铸造时间
pub minted_at: Timestamp,
/// 宪法收据哈希
pub constitutional_receipt: Hash,
}
/// 批量销毁记录
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchBurn {
/// 持有者地址
pub from: Address,
/// 代币ID列表
pub token_ids: Vec<TokenId>,
/// 数量列表
pub amounts: Vec<u128>,
/// 销毁时间
pub burned_at: Timestamp,
/// 宪法收据哈希
pub constitutional_receipt: Hash,
}
/// 托管信息(按代币类型)
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TokenCustodyInfo {
/// 代币类型ID
pub token_id: TokenId,
/// 托管方地址
pub custodian: Address,
/// 托管开始时间
pub custody_start: Timestamp,
/// 托管状态
pub is_active: bool,
/// 托管证明哈希
pub custody_proof: Hash,
}
/// 保险信息(按代币类型)
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TokenInsuranceInfo {
/// 代币类型ID
pub token_id: TokenId,
/// 保险提供者地址
pub insurer: Address,
/// 单位保险金额XTZH
pub coverage_per_unit_xtzh: u128,
/// 保险开始时间
pub insurance_start: Timestamp,
/// 保险到期时间
pub insurance_expiry: Timestamp,
/// 保险单号
pub policy_number: String,
}
/// 代币类型估值
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TokenTypeValuation {
/// 代币类型ID
pub token_id: TokenId,
/// 单位估值金额XTZH
pub value_per_unit_xtzh: u128,
/// 估值提供者地址
pub valuation_provider: Address,
/// 估值时间
pub valued_at: Timestamp,
/// 估值有效期(秒)
pub validity_period: u64,
}
/// 授权信息
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ApprovalInfo {
/// 所有者地址
pub owner: Address,
/// 被授权者地址
pub operator: Address,
/// 是否授权
pub approved: bool,
/// 授权时间
pub approved_at: Timestamp,
}
/// 代币余额信息
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TokenBalance {
/// 持有者地址
pub holder: Address,
/// 代币类型ID
pub token_id: TokenId,
/// 余额
pub balance: u128,
/// 最后更新时间
pub last_updated: Timestamp,
}
/// 混合资产池(同时管理可替代和不可替代代币)
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HybridAssetPool {
/// 证书地址
pub certificate_address: Address,
/// 可替代代币ID列表
pub fungible_token_ids: Vec<TokenId>,
/// 不可替代代币ID列表
pub non_fungible_token_ids: Vec<TokenId>,
/// 半可替代代币ID列表
pub semi_fungible_token_ids: Vec<TokenId>,
/// 创建时间
pub created_at: Timestamp,
}
/// 代币类型配置
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TokenTypeConfig {
/// 代币类型ID
pub token_id: TokenId,
/// 是否可铸造
pub mintable: bool,
/// 是否可销毁
pub burnable: bool,
/// 是否可暂停
pub pausable: bool,
/// 是否需要合规检查
pub compliance_required: bool,
/// 最小转移数量
pub min_transfer_amount: u128,
/// 创建时间
pub created_at: Timestamp,
}
#[cfg(test)]
mod tests {
use super::*;
use crate::primitives::SovereigntyType;
#[test]
fn test_token_type() {
let fungible = TokenType::Fungible;
let non_fungible = TokenType::NonFungible;
let semi_fungible = TokenType::SemiFungible;
assert_ne!(fungible, non_fungible);
assert_ne!(fungible, semi_fungible);
assert_ne!(non_fungible, semi_fungible);
}
#[test]
fn test_sovereignty_type() {
let a0 = SovereigntyType::A0;
let c0 = SovereigntyType::C0;
assert_ne!(a0, c0);
}
}