use std::any::Any;
use nautilus_common::factories::ClientConfig;
use nautilus_infrastructure::sql::pg::PostgresConnectOptions;
use nautilus_model::{
defi::{Chain, DexType, SharedChain},
identifiers::{AccountId, TraderId},
};
use nautilus_network::websocket::TransportBackend;
#[derive(Debug, Clone, bon::Builder)]
#[cfg_attr(
feature = "python",
pyo3::pyclass(
module = "nautilus_trader.core.nautilus_pyo3.blockchain",
from_py_object
)
)]
#[cfg_attr(
feature = "python",
pyo3_stub_gen::derive::gen_stub_pyclass(module = "nautilus_trader.blockchain")
)]
pub struct DexPoolFilters {
#[builder(default = true)]
pub remove_pools_with_empty_erc20fields: bool,
}
impl Default for DexPoolFilters {
fn default() -> Self {
Self::builder().build()
}
}
#[derive(Debug, Clone, bon::Builder)]
#[cfg_attr(
feature = "python",
pyo3::pyclass(
module = "nautilus_trader.core.nautilus_pyo3.blockchain",
from_py_object
)
)]
#[cfg_attr(
feature = "python",
pyo3_stub_gen::derive::gen_stub_pyclass(module = "nautilus_trader.blockchain")
)]
pub struct BlockchainDataClientConfig {
pub chain: SharedChain,
#[builder(default)]
pub dex_ids: Vec<DexType>,
#[builder(default)]
pub use_hypersync_for_live_data: bool,
pub http_rpc_url: String,
pub rpc_requests_per_second: Option<u32>,
#[builder(default = 200)]
pub multicall_calls_per_rpc_request: u32,
pub wss_rpc_url: Option<String>,
pub proxy_url: Option<String>,
pub from_block: Option<u64>,
#[builder(default)]
pub pool_filters: DexPoolFilters,
pub postgres_cache_database_config: Option<PostgresConnectOptions>,
#[builder(default)]
pub transport_backend: TransportBackend,
}
#[derive(Debug, Clone, bon::Builder)]
pub struct BlockchainExecutionClientConfig {
pub trader_id: TraderId,
pub client_id: AccountId,
pub chain: Chain,
pub wallet_address: String,
pub tokens: Option<Vec<String>>,
pub http_rpc_url: String,
pub rpc_requests_per_second: Option<u32>,
#[builder(default)]
pub transport_backend: TransportBackend,
}
impl ClientConfig for BlockchainExecutionClientConfig {
fn as_any(&self) -> &dyn Any {
self
}
}