///! # GNACS类型系统 ///! ///! Global NAC Asset Classification System (GNACS) ///! 全球NAC资产分类系统 ///! ///! **版本**: v1.0 ///! **模块**: charter-std/asset/gnacs.ch // ============================================================================ // GNACS编码结构(48位) // ============================================================================ /// GNACS编码结构 /// /// 48位编码结构: /// - 位1-8: 资产类别 (asset_class) /// - 位9-16: 子类别 (sub_class) /// - 位17-24: 司法辖区 (jurisdiction) /// - 位25-28: 风险等级 (risk_level, 0-15) /// - 位29-32: 流动性等级 (liquidity_level, 0-15) /// - 位33-36: 合规状态 (compliance_status, 0-15) /// - 位37-40: 版本号 (version, 0-15) /// - 位41-48: 保留位 (reserved) struct GNACSCode { asset_class: u8, // 资产类别(8位) sub_class: u8, // 子类别(8位) jurisdiction: u8, // 司法辖区(8位) risk_level: u4, // 风险等级(4位,0-15) liquidity_level: u4, // 流动性等级(4位,0-15) compliance_status: u4, // 合规状态(4位,0-15) version: u4, // 版本号(4位,0-15) reserved: u8 // 保留位(8位) } // ============================================================================ // GNACS编码实现 // ============================================================================ impl GNACSCode { /// 从48位整数解析GNACS编码 /// /// # 参数 /// - `code`: 48位GNACS编码 /// /// # 返回 /// - `GNACSCode`: 解析后的GNACS结构 pub fn from_u48(code: u48) -> GNACSCode { GNACSCode { asset_class: ((code >> 40) & 0xFF) as u8, sub_class: ((code >> 32) & 0xFF) as u8, jurisdiction: ((code >> 24) & 0xFF) as u8, risk_level: ((code >> 20) & 0x0F) as u4, liquidity_level: ((code >> 16) & 0x0F) as u4, compliance_status: ((code >> 12) & 0x0F) as u4, version: ((code >> 8) & 0x0F) as u4, reserved: (code & 0xFF) as u8 } } /// 转换为48位整数 /// /// # 返回 /// - `u48`: 48位GNACS编码 pub fn to_u48(&self) -> u48 { ((self.asset_class as u48) << 40) | ((self.sub_class as u48) << 32) | ((self.jurisdiction as u48) << 24) | ((self.risk_level as u48) << 20) | ((self.liquidity_level as u48) << 16) | ((self.compliance_status as u48) << 12) | ((self.version as u48) << 8) | (self.reserved as u48) } /// 验证GNACS编码有效性 /// /// # 返回 /// - `bool`: true表示有效,false表示无效 pub fn validate(&self) -> bool { // 检查资产类别是否有效(1-9) if self.asset_class < 1 || self.asset_class > 9 { return false; } // 检查风险等级是否有效(0-15) if self.risk_level > 15 { return false; } // 检查流动性等级是否有效(0-15) if self.liquidity_level > 15 { return false; } // 检查合规状态是否有效(0-15) if self.compliance_status > 15 { return false; } return true; } /// 获取资产类别名称 /// /// # 返回 /// - `String`: 资产类别名称 pub fn get_asset_class_name(&self) -> String { match self.asset_class { REAL_ESTATE => "不动产", FINANCIAL_ASSETS => "金融资产", ART_COLLECTIBLES => "艺术品与收藏品", COMMODITIES => "大宗商品", INTELLECTUAL_PROPERTY => "知识产权", CARBON_CREDITS => "碳信用与环境权益", DIGITAL_ASSETS => "数字资产", REVENUE_RIGHTS => "收益权", OTHER => "其他", _ => "未知" } } /// 获取风险等级描述 /// /// # 返回 /// - `String`: 风险等级描述 pub fn get_risk_level_description(&self) -> String { match self.risk_level { 0..=3 => "低风险", 4..=7 => "中低风险", 8..=11 => "中高风险", 12..=15 => "高风险", _ => "未知" } } /// 获取流动性等级描述 /// /// # 返回 /// - `String`: 流动性等级描述 pub fn get_liquidity_level_description(&self) -> String { match self.liquidity_level { 0..=3 => "低流动性", 4..=7 => "中低流动性", 8..=11 => "中高流动性", 12..=15 => "高流动性", _ => "未知" } } /// 检查是否为实物资产 /// /// # 返回 /// - `bool`: true表示实物资产,false表示非实物资产 pub fn is_physical_asset(&self) -> bool { match self.asset_class { REAL_ESTATE | ART_COLLECTIBLES | COMMODITIES => true, _ => false } } /// 检查是否为数字资产 /// /// # 返回 /// - `bool`: true表示数字资产,false表示非数字资产 pub fn is_digital_asset(&self) -> bool { self.asset_class == DIGITAL_ASSETS } } // ============================================================================ // 资产类别常量(9种主要类别) // ============================================================================ /// 1. 不动产 (Real Estate) pub const REAL_ESTATE: u8 = 1; /// 2. 金融资产 (Financial Assets) pub const FINANCIAL_ASSETS: u8 = 2; /// 3. 艺术品与收藏品 (Art & Collectibles) pub const ART_COLLECTIBLES: u8 = 3; /// 4. 大宗商品 (Commodities) pub const COMMODITIES: u8 = 4; /// 5. 知识产权 (Intellectual Property) pub const INTELLECTUAL_PROPERTY: u8 = 5; /// 6. 碳信用与环境权益 (Carbon Credits & Environmental Rights) pub const CARBON_CREDITS: u8 = 6; /// 7. 数字资产 (Digital Assets) pub const DIGITAL_ASSETS: u8 = 7; /// 8. 收益权 (Revenue Rights) pub const REVENUE_RIGHTS: u8 = 8; /// 9. 其他 (Other) pub const OTHER: u8 = 9; // ============================================================================ // 子类别常量示例 // ============================================================================ // 不动产子类别 pub const RESIDENTIAL_REAL_ESTATE: u8 = 1; // 住宅 pub const COMMERCIAL_REAL_ESTATE: u8 = 2; // 商业地产 pub const INDUSTRIAL_REAL_ESTATE: u8 = 3; // 工业地产 pub const LAND: u8 = 4; // 土地 // 金融资产子类别 pub const EQUITY: u8 = 1; // 股权 pub const DEBT: u8 = 2; // 债权 pub const DERIVATIVES: u8 = 3; // 衍生品 pub const FUNDS: u8 = 4; // 基金 // 数字资产子类别 pub const CRYPTOCURRENCY: u8 = 1; // 加密货币 pub const NFT: u8 = 2; // NFT pub const DIGITAL_SECURITIES: u8 = 3; // 数字证券 // ============================================================================ // 司法辖区常量(部分示例) // ============================================================================ pub const JURISDICTION_US: u8 = 1; // 美国 pub const JURISDICTION_UK: u8 = 2; // 英国 pub const JURISDICTION_CN: u8 = 3; // 中国 pub const JURISDICTION_HK: u8 = 4; // 香港 pub const JURISDICTION_SG: u8 = 5; // 新加坡 pub const JURISDICTION_JP: u8 = 6; // 日本 pub const JURISDICTION_DE: u8 = 7; // 德国 pub const JURISDICTION_FR: u8 = 8; // 法国 pub const JURISDICTION_CH: u8 = 9; // 瑞士 pub const JURISDICTION_AE: u8 = 10; // 阿联酋 // ============================================================================ // 合规状态常量 // ============================================================================ pub const COMPLIANCE_PENDING: u4 = 0; // 待审核 pub const COMPLIANCE_APPROVED: u4 = 1; // 已批准 pub const COMPLIANCE_REJECTED: u4 = 2; // 已拒绝 pub const COMPLIANCE_SUSPENDED: u4 = 3; // 已暂停 pub const COMPLIANCE_REVOKED: u4 = 4; // 已撤销 pub const COMPLIANCE_EXPIRED: u4 = 5; // 已过期 pub const COMPLIANCE_UNDER_REVIEW: u4 = 6; // 审核中 // ============================================================================ // 辅助函数 // ============================================================================ /// 创建标准GNACS编码 /// /// # 参数 /// - `asset_class`: 资产类别 /// - `sub_class`: 子类别 /// - `jurisdiction`: 司法辖区 /// - `risk_level`: 风险等级 /// - `liquidity_level`: 流动性等级 /// /// # 返回 /// - `u48`: 48位GNACS编码 pub fn create_gnacs_code( asset_class: u8, sub_class: u8, jurisdiction: u8, risk_level: u4, liquidity_level: u4 ) -> u48 { let gnacs = GNACSCode { asset_class: asset_class, sub_class: sub_class, jurisdiction: jurisdiction, risk_level: risk_level, liquidity_level: liquidity_level, compliance_status: COMPLIANCE_PENDING, version: 1, reserved: 0 }; return gnacs.to_u48(); } /// 解析GNACS编码字符串(十六进制) /// /// # 参数 /// - `hex_string`: 十六进制字符串(如"0x010101120187") /// /// # 返回 /// - `GNACSCode`: 解析后的GNACS结构 pub fn parse_gnacs_hex(hex_string: String) -> GNACSCode { // 移除"0x"前缀 let hex = hex_string.trim_start_matches("0x"); // 转换为u48 let code = u48::from_hex(hex); return GNACSCode::from_u48(code); }