NAC_Blockchain/charter-std/asset/gnacs.ch

301 lines
9.6 KiB
Plaintext
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.

///! # 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);
}