pub struct BlockchainExecutionClient { /* private fields */ }Expand description
Execution client for blockchain interactions including balance tracking and order execution.
Implementations§
Source§impl BlockchainExecutionClient
impl BlockchainExecutionClient
Sourcepub fn new(
core_client: ExecutionClientCore,
config: BlockchainExecutionClientConfig,
) -> Result<Self>
pub fn new( core_client: ExecutionClientCore, config: BlockchainExecutionClientConfig, ) -> Result<Self>
Creates a new BlockchainExecutionClient instance for the specified configuration.
§Errors
Returns an error if transaction limits are missing or invalid, independent verification is missing or conflicts with the configured chain, the deployment manifest or provider topology is invalid, a configured address or token pair is invalid, the router allowlist is empty, or the slippage bounds are inconsistent or not below 100%.
Sourcepub async fn preflight(
&self,
instrument_id: &InstrumentId,
) -> Result<BlockchainPreflightReport>
pub async fn preflight( &self, instrument_id: &InstrumentId, ) -> Result<BlockchainPreflightReport>
Runs a read-only execution preflight for the pool selected by instrument_id.
Verifies the RPC chain ID against configuration, deployed bytecode at the router, pool, and token addresses, wallet native and token balances, exact router allowance of the pool’s base (input) token, and current fee conditions. Changes no state.
§Errors
Returns an error if the instrument ID cannot be resolved to a cached Uniswap V3 pool
on the client’s chain, or if any RPC call fails. On-chain readiness failures are
reported in the returned BlockchainPreflightReport, not as errors.
Sourcepub async fn wrap(&mut self, amount_wei: U256) -> Result<B256>
pub async fn wrap(&mut self, amount_wei: U256) -> Result<B256>
Wraps native currency into the wrapped native token via a WETH deposit()
transaction carrying amount_wei of native value.
This is an explicit operator operation; it never runs inside submit_order.
§Errors
Returns an error if the amount is zero, the WETH target is not a deployed ERC-20 contract,
the client is not connected, another transaction is in flight, no durable store is
configured, the WETH balance does not increase by amount_wei, or any RPC, policy, signing,
persistence, or broadcast step fails. A persistence failure after signing, or a failed
postcondition after finality, leaves the in-flight slot occupied.
Sourcepub async fn approve(
&mut self,
token: Address,
amount: U256,
router: Address,
) -> Result<B256>
pub async fn approve( &mut self, token: Address, amount: U256, router: Address, ) -> Result<B256>
Approves an allowlisted SwapRouter to spend amount of token via an ERC-20
approve transaction. Zero always revokes the allowance. For nonzero requests,
unlimited_approval changes the target to U256::MAX.
This is an explicit operator operation; it never runs inside submit_order.
§Errors
Returns an error if the router or token fails policy and deployment checks, a nonzero allowance was not cleared first, approval simulation returns false or malformed data, the client is not connected, another transaction is in flight, no durable store is configured, the resulting allowance differs from the target, or any RPC, signing, persistence, or broadcast step fails. A persistence failure after signing, or a failed postcondition after finality, leaves the in-flight slot occupied.
Sourcepub async fn check_payload_storage(
&self,
batch_size: usize,
) -> Result<PayloadStorageCheck>
pub async fn check_payload_storage( &self, batch_size: usize, ) -> Result<PayloadStorageCheck>
Authenticates every persisted signed transaction in this execution database.
Run this while the execution client is disconnected. The check takes a stable table lock,
reads in bounded batches, and returns counts, deployment identity, key IDs, and database
roles with direct ownership or SELECT grants.
§Errors
Returns an error for inconsistent storage state, missing keys, or any payload which cannot be opened and authenticated against its durable intent.
Sourcepub async fn protect_payload_storage(&self) -> Result<()>
pub async fn protect_payload_storage(&self) -> Result<()>
Activates or resumes protected signed-transaction storage for this execution database.
Run this while the execution client is disconnected. A full payload check must succeed before a later execution connection is permitted.
§Errors
Returns an error if the client is connected, an active key or deployment identity is unavailable, or any stored payload cannot be migrated and authenticated.
Sourcepub async fn rewrap_payload_storage(&self, batch_size: usize) -> Result<()>
pub async fn rewrap_payload_storage(&self, batch_size: usize) -> Result<()>
Rewraps all protected payloads in this execution database with the configured active key.
The prior active key must remain configured as a retired key until this method and a subsequent full check both succeed.
§Errors
Returns an error if the client is connected, storage is not protected, required keys are unavailable, or any bounded rewrap batch fails authentication.
Sourcepub async fn rollback_payload_storage(&self, batch_size: usize) -> Result<()>
pub async fn rollback_payload_storage(&self, batch_size: usize) -> Result<()>
Restores authenticated plaintext payloads and removes protection from this database.
This incident-only operation is resumable. Keep the complete key set configured until it succeeds and the unprotected database passes a full payload check.
§Errors
Returns an error if the client is connected, storage is not protected, required keys are unavailable, or any bounded rollback batch fails authentication.
Trait Implementations§
Source§impl Debug for BlockchainExecutionClient
impl Debug for BlockchainExecutionClient
Source§impl ExecutionClient for BlockchainExecutionClient
impl ExecutionClient for BlockchainExecutionClient
fn is_connected(&self) -> bool
fn client_id(&self) -> ClientId
fn account_id(&self) -> AccountId
fn venue(&self) -> Venue
Source§fn handles_order_venue(&self, venue: Venue) -> bool
fn handles_order_venue(&self, venue: Venue) -> bool
fn oms_type(&self) -> OmsType
fn get_account(&self) -> Option<AccountAny>
Source§fn generate_account_state(
&self,
balances: Vec<AccountBalance>,
margins: Vec<MarginBalance>,
reported: bool,
ts_event: UnixNanos,
info: Option<Params>,
) -> Result<()>
fn generate_account_state( &self, balances: Vec<AccountBalance>, margins: Vec<MarginBalance>, reported: bool, ts_event: UnixNanos, info: Option<Params>, ) -> Result<()>
Source§fn submit_order(&self, cmd: SubmitOrder) -> Result<()>
fn submit_order(&self, cmd: SubmitOrder) -> Result<()>
Source§fn submit_order_list(&self, cmd: SubmitOrderList) -> Result<()>
fn submit_order_list(&self, cmd: SubmitOrderList) -> Result<()>
Source§fn batch_cancel_orders(&self, cmd: BatchCancelOrders) -> Result<()>
fn batch_cancel_orders(&self, cmd: BatchCancelOrders) -> Result<()>
Source§fn query_account(&self, cmd: QueryAccount) -> Result<()>
fn query_account(&self, cmd: QueryAccount) -> Result<()>
Source§fn query_order(&self, cmd: QueryOrder) -> Result<()>
fn query_order(&self, cmd: QueryOrder) -> Result<()>
Source§fn connect<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = Result<()>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn connect<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = Result<()>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn disconnect<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = Result<()>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn disconnect<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = Result<()>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn generate_order_status_report<'life0, 'life1, 'async_trait>(
&'life0 self,
_cmd: &'life1 GenerateOrderStatusReport,
) -> Pin<Box<dyn Future<Output = Result<Option<OrderStatusReport>>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn generate_order_status_report<'life0, 'life1, 'async_trait>(
&'life0 self,
_cmd: &'life1 GenerateOrderStatusReport,
) -> Pin<Box<dyn Future<Output = Result<Option<OrderStatusReport>>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn generate_order_status_reports<'life0, 'life1, 'async_trait>(
&'life0 self,
_cmd: &'life1 GenerateOrderStatusReports,
) -> Pin<Box<dyn Future<Output = Result<Vec<OrderStatusReport>>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn generate_order_status_reports<'life0, 'life1, 'async_trait>(
&'life0 self,
_cmd: &'life1 GenerateOrderStatusReports,
) -> Pin<Box<dyn Future<Output = Result<Vec<OrderStatusReport>>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn generate_fill_reports<'life0, 'async_trait>(
&'life0 self,
_cmd: GenerateFillReports,
) -> Pin<Box<dyn Future<Output = Result<Vec<FillReport>>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn generate_fill_reports<'life0, 'async_trait>(
&'life0 self,
_cmd: GenerateFillReports,
) -> Pin<Box<dyn Future<Output = Result<Vec<FillReport>>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn generate_position_status_reports<'life0, 'life1, 'async_trait>(
&'life0 self,
_cmd: &'life1 GeneratePositionStatusReports,
) -> Pin<Box<dyn Future<Output = Result<Vec<PositionStatusReport>>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn generate_position_status_reports<'life0, 'life1, 'async_trait>(
&'life0 self,
_cmd: &'life1 GeneratePositionStatusReports,
) -> Pin<Box<dyn Future<Output = Result<Vec<PositionStatusReport>>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn generate_mass_status<'life0, 'async_trait>(
&'life0 self,
_lookback_mins: Option<u64>,
) -> Pin<Box<dyn Future<Output = Result<Option<ExecutionMassStatus>>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn generate_mass_status<'life0, 'async_trait>(
&'life0 self,
_lookback_mins: Option<u64>,
) -> Pin<Box<dyn Future<Output = Result<Option<ExecutionMassStatus>>> + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
§fn position_reconciliation_tolerance(&self) -> Decimal
fn position_reconciliation_tolerance(&self) -> Decimal
§fn provides_bulk_position_coverage(&self, _instrument_id: InstrumentId) -> bool
fn provides_bulk_position_coverage(&self, _instrument_id: InstrumentId) -> bool
§fn reset(&mut self) -> Result<(), Error>
fn reset(&mut self) -> Result<(), Error>
§fn batch_modify_orders(&self, cmd: BatchModifyOrders) -> Result<(), Error>
fn batch_modify_orders(&self, cmd: BatchModifyOrders) -> Result<(), Error>
§fn register_external_order(
&self,
_client_order_id: ClientOrderId,
_venue_order_id: VenueOrderId,
_instrument_id: InstrumentId,
_strategy_id: StrategyId,
_ts_init: UnixNanos,
)
fn register_external_order( &self, _client_order_id: ClientOrderId, _venue_order_id: VenueOrderId, _instrument_id: InstrumentId, _strategy_id: StrategyId, _ts_init: UnixNanos, )
§fn on_instrument(&mut self, _instrument: InstrumentAny)
fn on_instrument(&mut self, _instrument: InstrumentAny)
Auto Trait Implementations§
impl !Freeze for BlockchainExecutionClient
impl !RefUnwindSafe for BlockchainExecutionClient
impl !Send for BlockchainExecutionClient
impl !Sync for BlockchainExecutionClient
impl !UnwindSafe for BlockchainExecutionClient
impl Unpin for BlockchainExecutionClient
impl UnsafeUnpin for BlockchainExecutionClient
Blanket Implementations§
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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 more