pub struct TradingInfrastructure {
pub rpc: Arc<SolanaRpcClient>,
pub swqos_clients: Arc<Vec<Arc<SwqosClient>>>,
pub config: InfrastructureConfig,
pub max_sender_concurrency: usize,
pub effective_core_ids: Arc<Vec<CoreId>>,
}Expand description
Shared infrastructure components that can be reused across multiple wallets
This struct holds the expensive-to-initialize components (RPC client, SWQOS clients) that are wallet-independent and can be shared when only the trading wallet changes.
Fields§
§rpc: Arc<SolanaRpcClient>Shared RPC client for blockchain interactions
swqos_clients: Arc<Vec<Arc<SwqosClient>>>Shared SWQOS clients for transaction priority and routing. Arc<Vec<..>> so cloning into SwapParams is a single Arc clone.
config: InfrastructureConfigConfiguration used to create this infrastructure
max_sender_concurrency: usizePrecomputed at init: min(max SWQOS submit lanes, 2/3 * num_cores). Not computed on trade hot path.
effective_core_ids: Arc<Vec<CoreId>>Precomputed at init: first max_sender_concurrency CoreIds for job affinity. Empty if no cores. Not computed on trade hot path.
Implementations§
Source§impl TradingInfrastructure
impl TradingInfrastructure
Sourcepub async fn new(config: InfrastructureConfig) -> Self
pub async fn new(config: InfrastructureConfig) -> Self
Create new shared infrastructure from configuration
This performs the expensive initialization:
- Creates RPC client with connection pool
- Creates SWQOS clients (each with their own HTTP client)
- Initializes rent cache and starts background updater
Auto Trait Implementations§
impl Freeze for TradingInfrastructure
impl !RefUnwindSafe for TradingInfrastructure
impl Send for TradingInfrastructure
impl Sync for TradingInfrastructure
impl Unpin for TradingInfrastructure
impl UnsafeUnpin for TradingInfrastructure
impl !UnwindSafe for TradingInfrastructure
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request