313 lines
8.7 KiB
Rust
313 lines
8.7 KiB
Rust
//! 常量定义
|
||
//!
|
||
//! 本模块定义XTZH AI系统中所有常量,包括模型参数、数据工程参数、
|
||
//! 预言机网络参数等。
|
||
|
||
// ============================================================================
|
||
// 模型架构常量
|
||
// ============================================================================
|
||
|
||
/// 输入特征维度(50维宏观状态向量)
|
||
pub const INPUT_DIM: usize = 50;
|
||
|
||
/// Transformer编码器层数
|
||
pub const TRANSFORMER_LAYERS: usize = 4;
|
||
|
||
/// 注意力头数
|
||
pub const ATTENTION_HEADS: usize = 8;
|
||
|
||
/// 嵌入维度
|
||
pub const EMBED_DIM: usize = 256;
|
||
|
||
/// 宏观上下文向量维度
|
||
pub const CONTEXT_DIM: usize = 128;
|
||
|
||
/// 商品偏离系数维度
|
||
pub const COMMODITY_DELTA_DIM: usize = 18;
|
||
|
||
/// 模型总参数量
|
||
pub const MODEL_PARAMETERS: usize = 2_100_000;
|
||
|
||
/// 最大约束数量(zkML编译)
|
||
pub const MAX_CONSTRAINTS: usize = 25_000_000;
|
||
|
||
// ============================================================================
|
||
// 特征工程常量
|
||
// ============================================================================
|
||
|
||
/// 全球增长因子维度
|
||
pub const GROWTH_FACTOR_DIM: usize = 10;
|
||
|
||
/// 通胀压力因子维度
|
||
pub const INFLATION_FACTOR_DIM: usize = 8;
|
||
|
||
/// 货币政策立场维度
|
||
pub const MONETARY_POLICY_DIM: usize = 6;
|
||
|
||
/// 风险与不确定性维度
|
||
pub const RISK_FACTOR_DIM: usize = 8;
|
||
|
||
/// 实体活动高频代理维度
|
||
pub const ACTIVITY_PROXY_DIM: usize = 10;
|
||
|
||
/// 商品市场内部结构维度
|
||
pub const COMMODITY_STRUCTURE_DIM: usize = 8;
|
||
|
||
/// 数据更新时间(UTC小时)
|
||
pub const DATA_UPDATE_HOUR: u32 = 12;
|
||
|
||
/// 数据延迟容忍度(分钟)
|
||
pub const DATA_DELAY_TOLERANCE_MINUTES: u32 = 5;
|
||
|
||
/// z-score标准化基准期开始年份
|
||
pub const NORMALIZATION_START_YEAR: i32 = 2015;
|
||
|
||
/// z-score标准化基准期结束年份
|
||
pub const NORMALIZATION_END_YEAR: i32 = 2025;
|
||
|
||
/// 历史数据回溯开始年份
|
||
pub const HISTORICAL_DATA_START_YEAR: i32 = 2000;
|
||
|
||
// ============================================================================
|
||
// 量化常量
|
||
// ============================================================================
|
||
|
||
/// INT8量化缩放因子
|
||
pub const QUANTIZATION_SCALE: f32 = 0.023529;
|
||
|
||
/// INT8量化零点
|
||
pub const QUANTIZATION_ZERO_POINT: i8 = 0;
|
||
|
||
/// INT8最小值
|
||
pub const INT8_MIN: i8 = -128;
|
||
|
||
/// INT8最大值
|
||
pub const INT8_MAX: i8 = 127;
|
||
|
||
// ============================================================================
|
||
// 权重约束常量(宪法层)
|
||
// ============================================================================
|
||
|
||
/// 货币层权重基准(基点)
|
||
pub const W_FX_BASE: u32 = 4000; // 40.00%
|
||
|
||
/// 黄金层权重基准(基点)
|
||
pub const W_AU_BASE: u32 = 1000; // 10.00%
|
||
|
||
/// 商品层权重基准(基点)
|
||
pub const W_COM_BASE: u32 = 5000; // 50.00%
|
||
|
||
/// 黄金层权重最小值(基点)
|
||
pub const W_AU_MIN: u32 = 500; // 5.00%
|
||
|
||
/// 黄金层权重最大值(基点)
|
||
pub const W_AU_MAX: u32 = 2000; // 20.00%
|
||
|
||
/// 权重和(基点)
|
||
pub const WEIGHT_SUM: u32 = 10000; // 100.00%
|
||
|
||
/// 黄金永续合约信任锚覆盖率(基点)
|
||
pub const GOLD_TRUST_ANCHOR_COVERAGE: u32 = 12500; // 125.00%
|
||
|
||
// ============================================================================
|
||
// 性能指标常量
|
||
// ============================================================================
|
||
|
||
/// 宏观预测R²最小值
|
||
pub const MIN_R_SQUARED: f64 = 0.65;
|
||
|
||
/// 单一指数R²最小值
|
||
pub const MIN_SINGLE_R_SQUARED: f64 = 0.5;
|
||
|
||
/// XTZH汇率预测RMSE最大值(SDR)
|
||
pub const MAX_RATE_RMSE: f64 = 0.02;
|
||
|
||
/// 极端情景波动率倍数
|
||
pub const EXTREME_VOLATILITY_MULTIPLIER: f64 = 2.0;
|
||
|
||
/// 2008金融危机最大回撤(百分比)
|
||
pub const MAX_DRAWDOWN_2008: f64 = 15.0;
|
||
|
||
/// 模型推理最大时间(毫秒)
|
||
pub const MAX_INFERENCE_TIME_MS: u64 = 100;
|
||
|
||
/// ZK证明生成最大时间(秒)
|
||
pub const MAX_ZK_PROOF_TIME_SECS: u64 = 10;
|
||
|
||
/// TEE推理最大时间(毫秒)
|
||
pub const MAX_TEE_INFERENCE_TIME_MS: u64 = 500;
|
||
|
||
/// 单元测试覆盖率最小值(百分比)
|
||
pub const MIN_TEST_COVERAGE: f64 = 80.0;
|
||
|
||
// ============================================================================
|
||
// 预言机网络常量
|
||
// ============================================================================
|
||
|
||
/// ZK节点数量
|
||
pub const ZK_NODE_COUNT: usize = 3;
|
||
|
||
/// TEE节点数量
|
||
pub const TEE_NODE_COUNT: usize = 2;
|
||
|
||
/// 乐观节点数量
|
||
pub const OPTIMISTIC_NODE_COUNT: usize = 2;
|
||
|
||
/// 总节点数量
|
||
pub const TOTAL_NODE_COUNT: usize = ZK_NODE_COUNT + TEE_NODE_COUNT + OPTIMISTIC_NODE_COUNT;
|
||
|
||
/// 最小有效响应数量
|
||
pub const MIN_VALID_RESPONSES: usize = 5;
|
||
|
||
/// 汇率偏差容忍度(基点)
|
||
pub const RATE_DEVIATION_TOLERANCE_BPS: u32 = 30; // 0.3%
|
||
|
||
/// BLS签名最小节点数
|
||
pub const MIN_BLS_SIGNERS: usize = 5;
|
||
|
||
/// Leader选举周期(小时)
|
||
pub const LEADER_ELECTION_PERIOD_HOURS: u64 = 24;
|
||
|
||
/// Leader超时时间(秒)
|
||
pub const LEADER_TIMEOUT_SECS: u64 = 30;
|
||
|
||
/// 节点质押金额(XIC)
|
||
pub const NODE_STAKE_AMOUNT: u64 = 100_000;
|
||
|
||
/// Leader额外质押金额(XIC)
|
||
pub const LEADER_EXTRA_STAKE_AMOUNT: u64 = 500_000;
|
||
|
||
/// 罚没比例(百分比)
|
||
pub const SLASHING_PERCENTAGE: f64 = 50.0;
|
||
|
||
// ============================================================================
|
||
// 证明系统常量
|
||
// ============================================================================
|
||
|
||
/// Groth16证明大小(字节)
|
||
pub const GROTH16_PROOF_SIZE: usize = 1216;
|
||
|
||
/// 验证密钥大小(字节)
|
||
pub const VERIFICATION_KEY_SIZE: usize = 51200; // ~50KB
|
||
|
||
/// 证明密钥大小(字节)
|
||
pub const PROVING_KEY_SIZE: usize = 1_258_291_200; // ~1.2GB
|
||
|
||
/// 链上验证Gas成本
|
||
pub const VERIFICATION_GAS_COST: u64 = 20_000;
|
||
|
||
/// TEE认证报告大小(字节)
|
||
pub const TEE_ATTESTATION_SIZE: usize = 4096; // ~4KB
|
||
|
||
/// Ed25519签名大小(字节)
|
||
pub const ED25519_SIGNATURE_SIZE: usize = 64;
|
||
|
||
// ============================================================================
|
||
// 数据格式常量
|
||
// ============================================================================
|
||
|
||
/// 汇率定点数精度
|
||
pub const RATE_PRECISION: u64 = 1_000_000; // 1e6
|
||
|
||
/// 权重基点精度
|
||
pub const WEIGHT_BASIS_POINTS: u32 = 10_000; // 1e4
|
||
|
||
/// 商品偏离系数最小值
|
||
pub const DELTA_MIN: i8 = -30;
|
||
|
||
/// 商品偏离系数最大值
|
||
pub const DELTA_MAX: i8 = 30;
|
||
|
||
// ============================================================================
|
||
// API常量
|
||
// ============================================================================
|
||
|
||
/// gRPC默认端口
|
||
pub const GRPC_DEFAULT_PORT: u16 = 50051;
|
||
|
||
/// JSON-RPC默认端口
|
||
pub const JSON_RPC_DEFAULT_PORT: u16 = 8545;
|
||
|
||
/// Prometheus指标端口
|
||
pub const METRICS_PORT: u16 = 9090;
|
||
|
||
/// 健康检查端点
|
||
pub const HEALTH_CHECK_ENDPOINT: &str = "/healthz";
|
||
|
||
/// API请求速率限制(每秒)
|
||
pub const API_RATE_LIMIT_PER_SEC: u32 = 100;
|
||
|
||
/// API超时时间(秒)
|
||
pub const API_TIMEOUT_SECS: u64 = 30;
|
||
|
||
// ============================================================================
|
||
// 文件路径常量
|
||
// ============================================================================
|
||
|
||
/// 模型文件名
|
||
pub const MODEL_FILE_NAME: &str = "xtzh_model_v1.0.onnx";
|
||
|
||
/// INT8量化模型文件名
|
||
pub const MODEL_INT8_FILE_NAME: &str = "xtzh_model_v1.0.int8.onnx";
|
||
|
||
/// FP16模型文件名
|
||
pub const MODEL_FP16_FILE_NAME: &str = "xtzh_model_v1.0.fp16.onnx";
|
||
|
||
/// 证明密钥文件名
|
||
pub const PROVING_KEY_FILE_NAME: &str = "circuit.zkey";
|
||
|
||
/// 验证密钥文件名
|
||
pub const VERIFICATION_KEY_FILE_NAME: &str = "verification_key.json";
|
||
|
||
/// 配置文件名
|
||
pub const CONFIG_FILE_NAME: &str = "xtzh_config.toml";
|
||
|
||
// ============================================================================
|
||
// 测试
|
||
// ============================================================================
|
||
|
||
#[cfg(test)]
|
||
mod tests {
|
||
use super::*;
|
||
|
||
#[test]
|
||
fn test_feature_dimensions() {
|
||
assert_eq!(
|
||
GROWTH_FACTOR_DIM
|
||
+ INFLATION_FACTOR_DIM
|
||
+ MONETARY_POLICY_DIM
|
||
+ RISK_FACTOR_DIM
|
||
+ ACTIVITY_PROXY_DIM
|
||
+ COMMODITY_STRUCTURE_DIM,
|
||
INPUT_DIM
|
||
);
|
||
}
|
||
|
||
#[test]
|
||
fn test_weight_sum() {
|
||
assert_eq!(W_FX_BASE + W_AU_BASE + W_COM_BASE, WEIGHT_SUM);
|
||
}
|
||
|
||
#[test]
|
||
fn test_node_count() {
|
||
assert_eq!(
|
||
ZK_NODE_COUNT + TEE_NODE_COUNT + OPTIMISTIC_NODE_COUNT,
|
||
TOTAL_NODE_COUNT
|
||
);
|
||
}
|
||
|
||
#[test]
|
||
fn test_gold_weight_constraints() {
|
||
assert!(W_AU_MIN >= 500);
|
||
assert!(W_AU_MAX <= 2000);
|
||
assert!(W_AU_BASE >= W_AU_MIN);
|
||
assert!(W_AU_BASE <= W_AU_MAX);
|
||
}
|
||
|
||
#[test]
|
||
fn test_quantization_constants() {
|
||
assert_eq!(QUANTIZATION_ZERO_POINT, 0);
|
||
assert!(QUANTIZATION_SCALE > 0.0);
|
||
}
|
||
}
|