//! 账户管理模块 //! //! 负责账户的创建、导入、导出和管理 use crate::error::{VisionError, Result}; use crate::types::{AccountInfo, AccountType, Address}; use tracing::{debug, info}; use std::collections::HashMap; /// 账户管理器 pub struct AccountManager { /// 账户列表 accounts: HashMap, /// 当前活跃账户 active_account: Option
, } impl AccountManager { /// 创建新的账户管理器 pub fn new() -> Result { info!("Creating new AccountManager"); Ok(Self { accounts: HashMap::new(), active_account: None, }) } /// 创建新账户 pub fn create_account(&mut self, nickname: Option) -> Result
{ // 简化实现: 生成模拟地址 let address = format!("NAC{:016x}", rand::random::()); info!("Creating new account: {}", address); let account = AccountInfo { address: address.clone(), balance: 0, nickname, account_type: AccountType::Normal, }; self.accounts.insert(address.clone(), account); // 如果没有活跃账户,设置为活跃账户 if self.active_account.is_none() { self.active_account = Some(address.clone()); } Ok(address) } /// 导入账户 pub fn import_account(&mut self, private_key: &str, nickname: Option) -> Result
{ debug!("Importing account from private key"); // 简化实现: 从私钥生成地址 let address = format!("NAC{:016x}", private_key.len() as u64); let account = AccountInfo { address: address.clone(), balance: 0, nickname, account_type: AccountType::Normal, }; self.accounts.insert(address.clone(), account); Ok(address) } /// 获取账户信息 pub fn get_account(&self, address: &Address) -> Result<&AccountInfo> { self.accounts.get(address) .ok_or_else(|| VisionError::AccountError(format!("Account not found: {}", address))) } /// 获取所有账户 pub fn list_accounts(&self) -> Vec<&AccountInfo> { self.accounts.values().collect() } /// 设置活跃账户 pub fn set_active_account(&mut self, address: Address) -> Result<()> { if !self.accounts.contains_key(&address) { return Err(VisionError::AccountError(format!("Account not found: {}", address))); } self.active_account = Some(address); Ok(()) } /// 获取活跃账户 pub fn get_active_account(&self) -> Result<&AccountInfo> { let address = self.active_account.as_ref() .ok_or_else(|| VisionError::AccountError("No active account".to_string()))?; self.get_account(address) } /// 更新账户余额 pub fn update_balance(&mut self, address: &Address, balance: u128) -> Result<()> { let account = self.accounts.get_mut(address) .ok_or_else(|| VisionError::AccountError(format!("Account not found: {}", address)))?; account.balance = balance; Ok(()) } } // 简化实现: 使用固定随机数生成器 mod rand { pub fn random() -> T where T: From { // 简化实现: 返回固定值 T::from(12345678u64) } } #[cfg(test)] mod tests { use super::*; #[test] fn test_create_account() { let mut manager = AccountManager::new().unwrap(); let address = manager.create_account(Some("Test Account".to_string())).unwrap(); assert!(!address.is_empty()); assert!(address.starts_with("NAC")); } #[test] fn test_get_account() { let mut manager = AccountManager::new().unwrap(); let address = manager.create_account(None).unwrap(); let account = manager.get_account(&address).unwrap(); assert_eq!(account.address, address); } #[test] fn test_active_account() { let mut manager = AccountManager::new().unwrap(); let address = manager.create_account(None).unwrap(); let active = manager.get_active_account().unwrap(); assert_eq!(active.address, address); } #[test] fn test_update_balance() { let mut manager = AccountManager::new().unwrap(); let address = manager.create_account(None).unwrap(); manager.update_balance(&address, 1000000).unwrap(); let account = manager.get_account(&address).unwrap(); assert_eq!(account.balance, 1000000); } }