use serde::{Deserialize, Serialize};
use tari_common::SubConfigPath;
use crate::mempool::{reorg_pool::ReorgPoolConfig, unconfirmed_pool::UnconfirmedPoolConfig};
#[derive(Clone, Deserialize, Serialize, Default, Debug)]
#[serde(deny_unknown_fields)]
pub struct MempoolConfig {
override_from: Option<String>,
pub unconfirmed_pool: UnconfirmedPoolConfig,
pub reorg_pool: ReorgPoolConfig,
pub service: MempoolServiceConfig,
}
impl SubConfigPath for MempoolConfig {
fn main_key_prefix() -> &'static str {
"mempool"
}
}
#[derive(Clone, Deserialize, Serialize, Debug)]
#[serde(deny_unknown_fields)]
pub struct MempoolServiceConfig {
pub initial_sync_num_peers: usize,
pub initial_sync_max_transactions: usize,
pub block_sync_trigger: usize,
}
impl Default for MempoolServiceConfig {
fn default() -> Self {
Self {
initial_sync_num_peers: 2,
initial_sync_max_transactions: 10_000,
block_sync_trigger: 5,
}
}
}
#[cfg(test)]
mod test {
use config::Config;
use tari_common::DefaultConfigLoader;
use super::MempoolConfig;
use crate::mempool::reorg_pool::ReorgPoolConfig;
#[test]
pub fn test_mempool_config() {
let config = Config::builder()
.set_override("mempool.unconfirmed_pool.storage_capacity", 3)
.unwrap()
.build()
.unwrap();
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.expiry_height,
ReorgPoolConfig::default().expiry_height
);
let config = Config::builder()
.add_source(config)
.set_override("mainnet.mempool.unconfirmed_pool.storage_capacity", 20)
.unwrap()
.set_override("mempool.override_from", "mainnet")
.unwrap()
.build()
.unwrap();
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.expiry_height,
ReorgPoolConfig::default().expiry_height
);
}
}