diff --git a/src/bridge.rs b/src/bridge.rs index 20d6f1b3..f53ef3aa 100644 --- a/src/bridge.rs +++ b/src/bridge.rs @@ -17,6 +17,7 @@ use solana_client::{ nonblocking::{pubsub_client::PubsubClient, rpc_client::RpcClient, tpu_client::TpuClient}, rpc_config::{RpcContextConfig, RpcRequestAirdropConfig}, rpc_response::{Response as RpcResponse, RpcBlockhash, RpcResponseContext, RpcVersionInfo}, + tpu_client::TpuClientConfig, }; use solana_sdk::{ commitment_config::{CommitmentConfig, CommitmentLevel}, @@ -38,11 +39,21 @@ pub struct LiteBridge { } impl LiteBridge { - pub async fn new(rpc_url: reqwest::Url, ws_addr: &str) -> anyhow::Result { + pub async fn new( + rpc_url: reqwest::Url, + ws_addr: &str, + fanout_slots: u64, + ) -> anyhow::Result { let rpc_client = Arc::new(RpcClient::new(rpc_url.to_string())); - let tpu_client = - Arc::new(TpuClient::new(rpc_client.clone(), ws_addr, Default::default()).await?); + let tpu_client = Arc::new( + TpuClient::new( + rpc_client.clone(), + ws_addr, + TpuClientConfig { fanout_slots }, + ) + .await?, + ); let pub_sub_client = Arc::new(PubsubClient::new(ws_addr).await?); diff --git a/src/cli.rs b/src/cli.rs index c9583949..451968bb 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -1,5 +1,5 @@ use crate::{ - DEFAULT_CLEAN_INTERVAL_MS, DEFAULT_RPC_ADDR, DEFAULT_TX_BATCH_INTERVAL_MS, + DEFAULT_CLEAN_INTERVAL_MS, DEFAULT_FANOUT_SIZE, DEFAULT_RPC_ADDR, DEFAULT_TX_BATCH_INTERVAL_MS, DEFAULT_TX_BATCH_SIZE, DEFAULT_WS_ADDR, }; use clap::Parser; @@ -18,6 +18,9 @@ pub struct Args { /// batch size of each batch forward #[arg(short = 'b', long, default_value_t = DEFAULT_TX_BATCH_SIZE)] pub tx_batch_size: usize, + /// tpu fanout + #[arg(short = 'f', long, default_value_t = DEFAULT_FANOUT_SIZE) ] + pub fanout_size: u64, /// interval between each batch forward #[arg(short = 'i', long, default_value_t = DEFAULT_TX_BATCH_INTERVAL_MS)] pub tx_batch_interval_ms: u64, diff --git a/src/lib.rs b/src/lib.rs index 854057a1..216ff1a5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -20,6 +20,8 @@ pub const DEFAULT_TX_MAX_RETRIES: u16 = 1; #[from_env] pub const DEFAULT_TX_BATCH_SIZE: usize = 1 << 7; #[from_env] +pub const DEFAULT_FANOUT_SIZE: u64 = 32; +#[from_env] pub const DEFAULT_TX_BATCH_INTERVAL_MS: u64 = 1; #[from_env] pub const DEFAULT_CLEAN_INTERVAL_MS: u64 = 5 * 60 * 1000; // five minute diff --git a/src/main.rs b/src/main.rs index 17ef5d7e..b544f910 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,12 +24,14 @@ pub async fn main() -> anyhow::Result<()> { lite_rpc_http_addr, tx_batch_interval_ms, clean_interval_ms, + fanout_size, } = Args::parse(); let tx_batch_interval_ms = Duration::from_millis(tx_batch_interval_ms); let clean_interval_ms = Duration::from_millis(clean_interval_ms); - let light_bridge = LiteBridge::new(Url::from_str(&rpc_addr).unwrap(), &ws_addr).await?; + let light_bridge = + LiteBridge::new(Url::from_str(&rpc_addr).unwrap(), &ws_addr, fanout_size).await?; let services = light_bridge .start_services(