NAC_Blockchain/nac-nrpc4/src/l5_value.rs

81 lines
2.2 KiB
Rust

//! L5 价值层: XIC/XTZH跨文明价值交换
use crate::types::{CivilizationId, ValueExchangeMessage};
use crate::error::Result;
use tracing::info;
use std::collections::HashMap;
/// 跨文明价值交换器
pub struct CrossCivilizationValueExchanger {
/// 汇率表 (from_civ, to_civ) -> rate
exchange_rates: HashMap<(CivilizationId, CivilizationId), f64>,
}
impl CrossCivilizationValueExchanger {
pub fn new() -> Self {
info!("Creating CrossCivilizationValueExchanger");
Self {
exchange_rates: HashMap::new(),
}
}
/// 创建价值交换消息
pub fn create_exchange(
&self,
from: CivilizationId,
to: CivilizationId,
value_type: String,
amount: u128,
) -> Result<ValueExchangeMessage> {
let rate = self.get_exchange_rate(&from, &to);
let converted_amount = (amount as f64 * rate) as u128;
Ok(ValueExchangeMessage {
from_civilization: from,
to_civilization: to,
value_type,
amount,
converted_amount,
exchange_rate: rate,
timestamp: Self::current_timestamp(),
})
}
/// 获取汇率
pub fn get_exchange_rate(&self, from: &CivilizationId, to: &CivilizationId) -> f64 {
self.exchange_rates
.get(&(from.clone(), to.clone()))
.copied()
.unwrap_or(1.0)
}
/// 设置汇率
pub fn set_exchange_rate(&mut self, from: CivilizationId, to: CivilizationId, rate: f64) {
self.exchange_rates.insert((from, to), rate);
}
/// 执行价值交换
pub fn execute_exchange(&self, message: &ValueExchangeMessage) -> Result<bool> {
info!("Executing value exchange from {:?} to {:?}, amount: {}",
message.from_civilization, message.to_civilization, message.amount);
// TODO: 实际的价值转移逻辑
Ok(true)
}
}
impl CrossCivilizationValueExchanger {
fn current_timestamp() -> u64 {
use std::time::{SystemTime, UNIX_EPOCH};
SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_secs()
}
}
impl Default for CrossCivilizationValueExchanger {
fn default() -> Self {
Self::new()
}
}