1 line
27 KiB
JSON
1 line
27 KiB
JSON
{"repo": "billionairiam/matrix", "files": {"src/main.rs": {"91e843fa752ee2b32e7bff682110df5684b8e2ee": {"t": 1785745838.784079, "n": 5477, "h": "bde11961756b737b", "c": "use std::{env, sync::Arc};\n\nuse anyhow::{Result, anyhow};\nuse api::crypto_handler::CryptoHandler;\nuse api::server::Server;\nuse auth::jwt_auth::set_jwt_secret;\nuse backtest::manager::Manager as BacktestManager;\nuse backtest::persistence_db::use_database;\nuse config_lib::config;\nuse crypto::crypto::CryptoService;\nuse dotenvy::dotenv;\nuse logger::logger;\nuse manager::trader_manager::TraderManager;\nuse market::monitor::WSMonitor;\nuse mcp::{Provider, deepseek_client::DeepseekProvider};\nuse store::CryptoProvider;\nuse store::store::Store;\nuse tracing::{error, info, warn};\n\npub struct AppCrypto {\n service: Arc<CryptoService>,\n}\n\nimpl AppCrypto {\n pub fn new(service: Arc<CryptoService>) -> Self {\n Self { service }\n }\n}\n\nimpl CryptoProvider for AppCrypto {\n fn encrypt(&self, plaintext: &str) -> String {\n if plaintext.is_empty() {\n return plaintext.to_string();\n }\n\n match self.service.encrypt_for_storage(plaintext, &[]) {\n Ok(encrypted) => encrypted,\n Err(e) => {\n warn!(\"⚠️ Encryption failed: {:?}\", e);\n plaintext.to_string()\n }\n }\n }\n\n fn decrypt(&self, encrypted: &str) -> String {\n if encrypted.is_empty() {\n return encrypted.to_string();\n }\n\n if !self.service.is_encrypted_storage_value(encrypted) {\n return encrypted.to_string();\n }\n\n match self.service.decrypt_from_storage(encrypted, &[]) {\n Ok(decrypted) => decrypted,\n Err(e) => {\n warn!(\"⚠️ Decryption failed: {:?}\", e);\n encrypted.to_string()\n }\n }\n }\n}\n\n#[tokio::main]\nasync fn main() -> Result<()> {\n dotenv().ok();\n\n logger::init(\"MATRIX\");\n\n info!(\"╔════════════════════════════════════════════════════════════╗\");\n info!(\"║ 🤖 AI Multi-Model Trading System - DeepSeek & Qwen ║\");\n info!(\"╚════════════════════════════════════════════════════════════╝\");\n\n let config = config::get();\n info!(\"✅ Configuration loaded\");\n\n let db_path = env::args().nth(1).unwrap_or_else(|| \"data.db\".to_string());\n info!(\"📋 Initializing database: {}\", db_path);\n\n let st = Arc::new(\n Store::new(&db_path)\n .await\n .map_err(|e| anyhow!(\"❌ Failed to initialize database: {:?}\", e))?,\n );\n\n use_database(st.pool.clone());\n info!(\"🔐 Initializing encryption service...\");\n\n let crypto_service = Arc::new(\n CryptoService::new()\n .map_err(|e| anyhow!(\"❌ Failed to initialize encryption service: {:?}\", e))?,\n );\n\n let app_crypto = AppCrypto::new(crypto_service.clone());\n st.set_provider(app_crypto).await;\n\n info!(\"✅ Crypto service initialized successfully\");\n\n // Set JWT secret\n set_jwt_secret(&config.jwt_secret);\n info!(\"🔑 JWT secret configured\");\n\n // Start WebSocket market monitor FIRST (before loading traders that may need market data)\n // This ensures WSMonitorCli is initialized before any trader tries to access it\n tokio::spawn(async move {\n WSMonitor::global().await;\n });\n info!(\"📊 WebSocket market monitor started\");\n\n // Give WebSocket monitor time to initialize\n tokio::time::sleep(tokio::time::Duration::from_millis(500)).await;\n\n // Create TraderManager and BacktestManager\n let trader_manager = Arc::new(TraderManager::new());\n let mcp_client = new_shared_mcp_client();\n let backtest_manager = BacktestManager::new(mcp_client);\n backtest_manager.restore_runs().await?;\n\n // Start position sync manager (detects manual closures, TP/SL triggers)\n let position_sync_manager = TraderManager::new(); // 0 = use default 10s interval\n position_sync_manager.start_all().await;\n\n // Load traders from database\n trader_manager.load_traders_from_store(&st).await?;\n\n // Display loaded trader information\n let traders = st.trader().await.list(\"default\").await?;\n info!(\"🤖 AI Trader Configurations in Database:\");\n if traders.is_empty() {\n info!(\" (No trader configurations, please create via Web interface)\");\n } else {\n for trader in traders {\n let status = if trader.is_running {\n \"✅ Running\"\n } else {\n \"❌ Stopped\"\n };\n info!(\n \" • {} [{}] {} - AI Model: {}, Exchange: {}\",\n trader.name, trader.id, status, trader.ai_model_id, trader.exchange_id\n );\n }\n }\n\n // Start API server\n let crypto_handler = Arc::new(CryptoHandler::new(crypto_service));\n let server = Server::new(\n trader_manager.clone(),\n st.clone(),\n crypto_handler.clone(),\n Some(backtest_manager),\n config.api_server_port,\n );\n tokio::spawn(async move {\n if let Err(e) = server.run().await {\n error!(\"❌ Failed to start API server: {:?}\", e);\n }\n });\n\n // Wait for interrupt signal\n tokio::signal::ctrl_c().await.unwrap();\n info!(\"🛑 Received interrupt signal, shutting down...\");\n\n // Stop all traders\n trader_manager.stop_all().await;\n info!(\"✅ All traders stopped\");\n\n Ok(())\n}\n\nfn new_shared_mcp_client() -> Option<Arc<dyn Provider>> {\n let api_key = env::var(\"DEEPSEEK_API_KEY\").ok();\n if let Some(_api_key) = api_key {\n return Some(Arc::new(DeepseekProvider));\n }\n warn!(\"❌ DEEPSEEK_API_KEY not set, AI features will be unavailable\");\n None\n}\n"}, "ac84cdc6df63159cd21b1a159a580cf50200aafa": {"t": 1785757077.3061378, "n": 5477, "h": "bde11961756b737b", "c": "use std::{env, sync::Arc};\n\nuse anyhow::{Result, anyhow};\nuse api::crypto_handler::CryptoHandler;\nuse api::server::Server;\nuse auth::jwt_auth::set_jwt_secret;\nuse backtest::manager::Manager as BacktestManager;\nuse backtest::persistence_db::use_database;\nuse config_lib::config;\nuse crypto::crypto::CryptoService;\nuse dotenvy::dotenv;\nuse logger::logger;\nuse manager::trader_manager::TraderManager;\nuse market::monitor::WSMonitor;\nuse mcp::{Provider, deepseek_client::DeepseekProvider};\nuse store::CryptoProvider;\nuse store::store::Store;\nuse tracing::{error, info, warn};\n\npub struct AppCrypto {\n service: Arc<CryptoService>,\n}\n\nimpl AppCrypto {\n pub fn new(service: Arc<CryptoService>) -> Self {\n Self { service }\n }\n}\n\nimpl CryptoProvider for AppCrypto {\n fn encrypt(&self, plaintext: &str) -> String {\n if plaintext.is_empty() {\n return plaintext.to_string();\n }\n\n match self.service.encrypt_for_storage(plaintext, &[]) {\n Ok(encrypted) => encrypted,\n Err(e) => {\n warn!(\"⚠️ Encryption failed: {:?}\", e);\n plaintext.to_string()\n }\n }\n }\n\n fn decrypt(&self, encrypted: &str) -> String {\n if encrypted.is_empty() {\n return encrypted.to_string();\n }\n\n if !self.service.is_encrypted_storage_value(encrypted) {\n return encrypted.to_string();\n }\n\n match self.service.decrypt_from_storage(encrypted, &[]) {\n Ok(decrypted) => decrypted,\n Err(e) => {\n warn!(\"⚠️ Decryption failed: {:?}\", e);\n encrypted.to_string()\n }\n }\n }\n}\n\n#[tokio::main]\nasync fn main() -> Result<()> {\n dotenv().ok();\n\n logger::init(\"MATRIX\");\n\n info!(\"╔════════════════════════════════════════════════════════════╗\");\n info!(\"║ 🤖 AI Multi-Model Trading System - DeepSeek & Qwen ║\");\n info!(\"╚════════════════════════════════════════════════════════════╝\");\n\n let config = config::get();\n info!(\"✅ Configuration loaded\");\n\n let db_path = env::args().nth(1).unwrap_or_else(|| \"data.db\".to_string());\n info!(\"📋 Initializing database: {}\", db_path);\n\n let st = Arc::new(\n Store::new(&db_path)\n .await\n .map_err(|e| anyhow!(\"❌ Failed to initialize database: {:?}\", e))?,\n );\n\n use_database(st.pool.clone());\n info!(\"🔐 Initializing encryption service...\");\n\n let crypto_service = Arc::new(\n CryptoService::new()\n .map_err(|e| anyhow!(\"❌ Failed to initialize encryption service: {:?}\", e))?,\n );\n\n let app_crypto = AppCrypto::new(crypto_service.clone());\n st.set_provider(app_crypto).await;\n\n info!(\"✅ Crypto service initialized successfully\");\n\n // Set JWT secret\n set_jwt_secret(&config.jwt_secret);\n info!(\"🔑 JWT secret configured\");\n\n // Start WebSocket market monitor FIRST (before loading traders that may need market data)\n // This ensures WSMonitorCli is initialized before any trader tries to access it\n tokio::spawn(async move {\n WSMonitor::global().await;\n });\n info!(\"📊 WebSocket market monitor started\");\n\n // Give WebSocket monitor time to initialize\n tokio::time::sleep(tokio::time::Duration::from_millis(500)).await;\n\n // Create TraderManager and BacktestManager\n let trader_manager = Arc::new(TraderManager::new());\n let mcp_client = new_shared_mcp_client();\n let backtest_manager = BacktestManager::new(mcp_client);\n backtest_manager.restore_runs().await?;\n\n // Start position sync manager (detects manual closures, TP/SL triggers)\n let position_sync_manager = TraderManager::new(); // 0 = use default 10s interval\n position_sync_manager.start_all().await;\n\n // Load traders from database\n trader_manager.load_traders_from_store(&st).await?;\n\n // Display loaded trader information\n let traders = st.trader().await.list(\"default\").await?;\n info!(\"🤖 AI Trader Configurations in Database:\");\n if traders.is_empty() {\n info!(\" (No trader configurations, please create via Web interface)\");\n } else {\n for trader in traders {\n let status = if trader.is_running {\n \"✅ Running\"\n } else {\n \"❌ Stopped\"\n };\n info!(\n \" • {} [{}] {} - AI Model: {}, Exchange: {}\",\n trader.name, trader.id, status, trader.ai_model_id, trader.exchange_id\n );\n }\n }\n\n // Start API server\n let crypto_handler = Arc::new(CryptoHandler::new(crypto_service));\n let server = Server::new(\n trader_manager.clone(),\n st.clone(),\n crypto_handler.clone(),\n Some(backtest_manager),\n config.api_server_port,\n );\n tokio::spawn(async move {\n if let Err(e) = server.run().await {\n error!(\"❌ Failed to start API server: {:?}\", e);\n }\n });\n\n // Wait for interrupt signal\n tokio::signal::ctrl_c().await.unwrap();\n info!(\"🛑 Received interrupt signal, shutting down...\");\n\n // Stop all traders\n trader_manager.stop_all().await;\n info!(\"✅ All traders stopped\");\n\n Ok(())\n}\n\nfn new_shared_mcp_client() -> Option<Arc<dyn Provider>> {\n let api_key = env::var(\"DEEPSEEK_API_KEY\").ok();\n if let Some(_api_key) = api_key {\n return Some(Arc::new(DeepseekProvider));\n }\n warn!(\"❌ DEEPSEEK_API_KEY not set, AI features will be unavailable\");\n None\n}\n"}, "e197b6c7c53b1a78d3f10615db0fcb8896da1fdf": {"t": 1785757078.7597747, "n": 5491, "h": "3148fbd5e1c587c1", "c": "use std::{env, sync::Arc};\n\nuse anyhow::{Result, anyhow};\nuse api::crypto_handler::CryptoHandler;\nuse api::server::Server;\nuse auth::jwt_auth::set_jwt_secret;\nuse backtest::manager::Manager as BacktestManager;\nuse backtest::persistence_db::use_database;\nuse config_lib::config;\nuse crypto::crypto::CryptoService;\nuse dotenvy::dotenv;\nuse logger::logger;\nuse manager::trader_manager::TraderManager;\nuse market::monitor::WSMonitor;\nuse mcp::{Provider, deepseek_client::DeepseekProvider};\nuse store::CryptoProvider;\nuse store::store::Store;\nuse tracing::{error, info, warn};\n\npub struct AppCrypto {\n service: Arc<CryptoService>,\n}\n\nimpl AppCrypto {\n pub fn new(service: Arc<CryptoService>) -> Self {\n Self { service }\n }\n}\n\nimpl CryptoProvider for AppCrypto {\n fn encrypt(&self, plaintext: &str) -> String {\n if plaintext.is_empty() {\n return plaintext.to_string();\n }\n\n match self.service.encrypt_for_storage(plaintext, &[]) {\n Ok(encrypted) => encrypted,\n Err(e) => {\n warn!(\"⚠️ Encryption failed: {:?}\", e);\n plaintext.to_string()\n }\n }\n }\n\n fn decrypt(&self, encrypted: &str) -> String {\n if encrypted.is_empty() {\n return encrypted.to_string();\n }\n\n if !self.service.is_encrypted_storage_value(encrypted) {\n return encrypted.to_string();\n }\n\n match self.service.decrypt_from_storage(encrypted, &[]) {\n Ok(decrypted) => decrypted,\n Err(e) => {\n warn!(\"⚠️ Decryption failed: {:?}\", e);\n encrypted.to_string()\n }\n }\n }\n}\n\n#[tokio::main]\nasync fn main() -> Result<()> {\n dotenv().ok();\n\n logger::init(\"MATRIX\");\n\n info!(\"╔════════════════════════════════════════════════════════════╗\");\n info!(\"║ 🤖 AI Multi-Model Trading System - DeepSeek & Qwen ║\");\n info!(\"╚════════════════════════════════════════════════════════════╝\");\n\n let config = config::get();\n info!(\"✅ Configuration loaded\");\n\n let db_path = env::args().nth(1).unwrap_or_else(|| \"data.db\".to_string());\n info!(\"📋 Initializing database: {}\", db_path);\n\n let st = Arc::new(\n Store::new(&db_path)\n .await\n .map_err(|e| anyhow!(\"❌ Failed to initialize database: {:?}\", e))?,\n );\n\n use_database(st.pool.clone());\n info!(\"🔐 Initializing encryption service...\");\n\n let crypto_service = Arc::new(\n CryptoService::new()\n .map_err(|e| anyhow!(\"❌ Failed to initialize encryption service: {:?}\", e))?,\n );\n\n let app_crypto = AppCrypto::new(crypto_service.clone());\n st.set_provider(app_crypto).await;\n\n info!(\"✅ Crypto service initialized successfully\");\n\n // Set JWT secret\n set_jwt_secret(&config.jwt_secret);\n info!(\"🔑 JWT secret configured\");\n\n // Start WebSocket market monitor FIRST (before loading traders that may need market data)\n // This ensures WSMonitorCli is initialized before any trader tries to access it\n tokio::spawn(async move {\n WSMonitor::new(100).start(vec![]).await;\n });\n info!(\"📊 WebSocket market monitor started\");\n\n // Give WebSocket monitor time to initialize\n tokio::time::sleep(tokio::time::Duration::from_millis(500)).await;\n\n // Create TraderManager and BacktestManager\n let trader_manager = Arc::new(TraderManager::new());\n let mcp_client = new_shared_mcp_client();\n let backtest_manager = BacktestManager::new(mcp_client);\n backtest_manager.restore_runs().await?;\n\n // Start position sync manager (detects manual closures, TP/SL triggers)\n let position_sync_manager = TraderManager::new(); // 0 = use default 10s interval\n position_sync_manager.start_all().await;\n\n // Load traders from database\n trader_manager.load_traders_from_store(&st).await?;\n\n // Display loaded trader information\n let traders = st.trader().await.list(\"default\").await?;\n info!(\"🤖 AI Trader Configurations in Database:\");\n if traders.is_empty() {\n info!(\" (No trader configurations, please create via Web interface)\");\n } else {\n for trader in traders {\n let status = if trader.is_running {\n \"✅ Running\"\n } else {\n \"❌ Stopped\"\n };\n info!(\n \" • {} [{}] {} - AI Model: {}, Exchange: {}\",\n trader.name, trader.id, status, trader.ai_model_id, trader.exchange_id\n );\n }\n }\n\n // Start API server\n let crypto_handler = Arc::new(CryptoHandler::new(crypto_service));\n let server = Server::new(\n trader_manager.clone(),\n st.clone(),\n crypto_handler.clone(),\n Some(backtest_manager),\n config.api_server_port,\n );\n tokio::spawn(async move {\n if let Err(e) = server.run().await {\n error!(\"❌ Failed to start API server: {:?}\", e);\n }\n });\n\n // Wait for interrupt signal\n tokio::signal::ctrl_c().await.unwrap();\n info!(\"🛑 Received interrupt signal, shutting down...\");\n\n // Stop all traders\n trader_manager.stop_all().await;\n info!(\"✅ All traders stopped\");\n\n Ok(())\n}\n\nfn new_shared_mcp_client() -> Option<Arc<dyn Provider>> {\n let api_key = env::var(\"DEEPSEEK_API_KEY\").ok();\n if let Some(_api_key) = api_key {\n return Some(Arc::new(DeepseekProvider));\n }\n warn!(\"❌ DEEPSEEK_API_KEY not set, AI features will be unavailable\");\n None\n}\n"}, "5a02379b5d2c107fec94e38633d1b7514cd25f32": {"t": 1785757080.9454134, "n": 5485, "h": "67b42cf3564fa6d4", "c": "use std::{env, sync::Arc};\n\nuse anyhow::{Result, anyhow};\nuse api::crypto_handler::CryptoHandler;\nuse api::server::Server;\nuse auth::jwt_auth::set_jwt_secret;\nuse backtest::manager::Manager as BacktestManager;\nuse backtest::persistence_db::use_database;\nuse config_lib::config;\nuse crypto::crypto::CryptoService;\nuse dotenvy::dotenv;\nuse logger::logger;\nuse manager::trader_manager::TraderManager;\nuse market::monitor::WSMonitor;\nuse mcp::{Provider, deepseek_client::DeepseekProvider};\nuse store::CryptoProvider;\nuse store::store::Store;\nuse tracing::{error, info, warn};\n\npub struct AppCrypto {\n service: Arc<CryptoService>,\n}\n\nimpl AppCrypto {\n pub fn new(service: Arc<CryptoService>) -> Self {\n Self { service }\n }\n}\n\nimpl CryptoProvider for AppCrypto {\n fn encrypt(&self, plaintext: &str) -> String {\n if plaintext.is_empty() {\n return plaintext.to_string();\n }\n\n match self.service.encrypt_for_storage(plaintext, &[]) {\n Ok(encrypted) => encrypted,\n Err(e) => {\n warn!(\"⚠️ Encryption failed: {:?}\", e);\n plaintext.to_string()\n }\n }\n }\n\n fn decrypt(&self, encrypted: &str) -> String {\n if encrypted.is_empty() {\n return encrypted.to_string();\n }\n\n if !self.service.is_encrypted_storage_value(encrypted) {\n return encrypted.to_string();\n }\n\n match self.service.decrypt_from_storage(encrypted, &[]) {\n Ok(decrypted) => decrypted,\n Err(e) => {\n warn!(\"⚠️ Decryption failed: {:?}\", e);\n encrypted.to_string()\n }\n }\n }\n}\n\n#[tokio::main]\nasync fn main() -> Result<()> {\n dotenv().ok();\n\n logger::init(\"MATRIX\");\n\n info!(\"╔════════════════════════════════════════════════════════════╗\");\n info!(\"║ 🤖 AI Multi-Model Trading System - DeepSeek & Qwen ║\");\n info!(\"╚════════════════════════════════════════════════════════════╝\");\n\n let config = config::get();\n info!(\"✅ Configuration loaded\");\n\n let db_path = env::args().nth(1).unwrap_or_else(|| \"data.db\".to_string());\n info!(\"📋 Initializing database: {}\", db_path);\n\n let st = Arc::new(\n Store::new(&db_path)\n .await\n .map_err(|e| anyhow!(\"❌ Failed to initialize database: {:?}\", e))?,\n );\n\n use_database(st.pool.clone());\n info!(\"🔐 Initializing encryption service...\");\n\n let crypto_service = Arc::new(\n CryptoService::new()\n .map_err(|e| anyhow!(\"❌ Failed to initialize encryption service: {:?}\", e))?,\n );\n\n let app_crypto = AppCrypto::new(crypto_service.clone());\n st.set_provider(app_crypto).await;\n\n info!(\"✅ Crypto service initialized successfully\");\n\n // Set JWT secret\n set_jwt_secret(&config.jwt_secret);\n info!(\"🔑 JWT secret configured\");\n\n // Start WebSocket market monitor FIRST (before loading traders that may need market data)\n // This ensures WSMonitorCli is initialized before any trader tries to access it\n tokio::spawn(async move {\n WSMonitor::new(100).start(vec![]);\n });\n info!(\"📊 WebSocket market monitor started\");\n\n // Give WebSocket monitor time to initialize\n tokio::time::sleep(tokio::time::Duration::from_millis(500)).await;\n\n // Create TraderManager and BacktestManager\n let trader_manager = Arc::new(TraderManager::new());\n let mcp_client = new_shared_mcp_client();\n let backtest_manager = BacktestManager::new(mcp_client);\n backtest_manager.restore_runs().await?;\n\n // Start position sync manager (detects manual closures, TP/SL triggers)\n let position_sync_manager = TraderManager::new(); // 0 = use default 10s interval\n position_sync_manager.start_all().await;\n\n // Load traders from database\n trader_manager.load_traders_from_store(&st).await?;\n\n // Display loaded trader information\n let traders = st.trader().await.list(\"default\").await?;\n info!(\"🤖 AI Trader Configurations in Database:\");\n if traders.is_empty() {\n info!(\" (No trader configurations, please create via Web interface)\");\n } else {\n for trader in traders {\n let status = if trader.is_running {\n \"✅ Running\"\n } else {\n \"❌ Stopped\"\n };\n info!(\n \" • {} [{}] {} - AI Model: {}, Exchange: {}\",\n trader.name, trader.id, status, trader.ai_model_id, trader.exchange_id\n );\n }\n }\n\n // Start API server\n let crypto_handler = Arc::new(CryptoHandler::new(crypto_service));\n let server = Server::new(\n trader_manager.clone(),\n st.clone(),\n crypto_handler.clone(),\n Some(backtest_manager),\n config.api_server_port,\n );\n tokio::spawn(async move {\n if let Err(e) = server.run().await {\n error!(\"❌ Failed to start API server: {:?}\", e);\n }\n });\n\n // Wait for interrupt signal\n tokio::signal::ctrl_c().await.unwrap();\n info!(\"🛑 Received interrupt signal, shutting down...\");\n\n // Stop all traders\n trader_manager.stop_all().await;\n info!(\"✅ All traders stopped\");\n\n Ok(())\n}\n\nfn new_shared_mcp_client() -> Option<Arc<dyn Provider>> {\n let api_key = env::var(\"DEEPSEEK_API_KEY\").ok();\n if let Some(_api_key) = api_key {\n return Some(Arc::new(DeepseekProvider));\n }\n warn!(\"❌ DEEPSEEK_API_KEY not set, AI features will be unavailable\");\n None\n}\n"}, "d6841b39913737c7f01d7fd0e6dc07e7b311cf61": {"t": 1785757082.8558962, "n": 2534, "h": "43e7f63afad9d545", "c": "use std::env;\n\nuse anyhow::{Result, anyhow};\nuse backtest::persistence_db::use_database;\nuse config_lib::config;\nuse crypto::crypto::CryptoService;\nuse dotenvy::dotenv;\nuse logger::logger;\nuse store::CryptoProvider;\nuse store::store::Store;\nuse tracing::{info, warn};\n\npub struct AppCrypto {\n service: CryptoService,\n}\n\nimpl AppCrypto {\n pub fn new(service: CryptoService) -> Self {\n Self { service }\n }\n}\n\nimpl CryptoProvider for AppCrypto {\n fn encrypt(&self, plaintext: &str) -> String {\n if plaintext.is_empty() {\n return plaintext.to_string();\n }\n\n // Go: encrypted, err := cryptoService.EncryptForStorage(plaintext)\n match self.service.encrypt_for_storage(plaintext, &[]) {\n Ok(encrypted) => encrypted,\n Err(e) => {\n warn!(\"⚠️ Encryption failed: {:?}\", e);\n plaintext.to_string()\n }\n }\n }\n\n fn decrypt(&self, encrypted: &str) -> String {\n if encrypted.is_empty() {\n return encrypted.to_string();\n }\n\n if !self.service.is_encrypted_storage_value(encrypted) {\n return encrypted.to_string();\n }\n\n match self.service.decrypt_from_storage(encrypted, &[]) {\n Ok(decrypted) => decrypted,\n Err(e) => {\n // Go: logger.Warnf(...) return encrypted\n warn!(\"⚠️ Decryption failed: {:?}\", e);\n encrypted.to_string()\n }\n }\n }\n}\n\n#[tokio::main]\nasync fn main() -> Result<()> {\n dotenv().ok();\n\n logger::init(\"MATRIX\");\n\n info!(\"╔════════════════════════════════════════════════════════════╗\");\n info!(\"║ 🤖 AI Multi-Model Trading System - DeepSeek & Qwen ║\");\n info!(\"╚════════════════════════════════════════════════════════════╝\");\n\n let config = config::get();\n info!(\"✅ Configuration loaded\");\n\n let db_path = env::args().nth(1).unwrap_or_else(|| \"data.db\".to_string());\n info!(\"📋 Initializing database: {}\", db_path);\n\n let st = Store::new(&db_path)\n .await\n .map_err(|e| anyhow!(\"❌ Failed to initialize database: {:?}\", e))?;\n\n use_database(st.pool.clone());\n info!(\"🔐 Initializing encryption service...\");\n\n let crypto_service = CryptoService::new()\n .map_err(|e| anyhow!(\"❌ Failed to initialize encryption service: {:?}\", e))?;\n\n let app_crypto = AppCrypto::new(crypto_service);\n st.set_provider(app_crypto).await;\n\n info!(\"✅ Crypto service initialized successfully\");\n Ok(())\n}\n"}, "27fd239348e643c63ac451b1ad5264f1fb4c7401": {"t": 1785757084.3503513, "n": 45, "h": "b1713adaf16c3f6c", "c": "fn main() {\n println!(\"Hello, world!\");\n}\n"}}}} |