use crate::mempool::{consts, reorg_pool::ReorgPoolConfig, unconfirmed_pool::UnconfirmedPoolConfig};
use serde::{Deserialize, Serialize};
use std::time::Duration;
use tari_common::{configuration::seconds, NetworkConfigPath};
#[derive(Clone, Copy, Deserialize, Serialize)]
pub struct MempoolConfig {
pub unconfirmed_pool: UnconfirmedPoolConfig,
pub reorg_pool: ReorgPoolConfig,
}
impl Default for MempoolConfig {
fn default() -> Self {
Self {
unconfirmed_pool: UnconfirmedPoolConfig::default(),
reorg_pool: ReorgPoolConfig::default(),
}
}
}
impl NetworkConfigPath for MempoolConfig {
fn main_key_prefix() -> &'static str {
"mempool"
}
}
#[derive(Clone, Copy, Deserialize, Serialize)]
pub struct MempoolServiceConfig {
#[serde(with = "seconds")]
pub request_timeout: Duration,
pub initial_sync_num_peers: usize,
pub initial_sync_max_transactions: usize,
}
impl Default for MempoolServiceConfig {
fn default() -> Self {
Self {
request_timeout: consts::MEMPOOL_SERVICE_REQUEST_TIMEOUT,
initial_sync_num_peers: 2,
initial_sync_max_transactions: 10_000,
}
}
}
impl NetworkConfigPath for MempoolServiceConfig {
fn main_key_prefix() -> &'static str {
"mempool_service"
}
}
#[cfg(test)]
mod test {
use super::{
consts::{MEMPOOL_REORG_POOL_CACHE_TTL, MEMPOOL_REORG_POOL_STORAGE_CAPACITY},
MempoolConfig,
};
use config::Config;
use tari_common::DefaultConfigLoader;
#[test]
pub fn test_mempool() {
let mut config = Config::new();
config
.set("mempool.unconfirmed_pool.storage_capacity", 3)
.expect("Could not set ''");
let my_config = MempoolConfig::load_from(&config).expect("Could not load configuration");
assert_eq!(my_config.unconfirmed_pool.storage_capacity, 3);
assert_eq!(
my_config.reorg_pool.storage_capacity,
MEMPOOL_REORG_POOL_STORAGE_CAPACITY
);
assert_eq!(my_config.reorg_pool.tx_ttl, MEMPOOL_REORG_POOL_CACHE_TTL);
config
.set("mempool.mainnet.unconfirmed_pool.storage_capacity", 20)
.expect("Could not set ''");
config
.set("mempool.network", "mainnet")
.expect("Could not set 'network'");
let my_config = MempoolConfig::load_from(&config).expect("Could not load configuration");
assert_eq!(my_config.unconfirmed_pool.storage_capacity, 20);
assert_eq!(
my_config.reorg_pool.storage_capacity,
MEMPOOL_REORG_POOL_STORAGE_CAPACITY
);
assert_eq!(my_config.reorg_pool.tx_ttl, MEMPOOL_REORG_POOL_CACHE_TTL);
config
.set("mempool.network", "wrong_network")
.expect("Could not set 'network'");
assert!(MempoolConfig::load_from(&config).is_err());
}
}