pub struct GasFiller;Expand description
A TxFiller that populates gas related fields in transaction requests if
unset.
Gas related fields are gas_price, gas_limit, max_fee_per_gas max_priority_fee_per_gas and max_fee_per_blob_gas.
The layer fetches the estimations for these via the
Provider::get_gas_price, Provider::estimate_gas and
Provider::estimate_eip1559_fees methods.
§Note:
The layer will populate gas fields based on the following logic:
- if
gas_priceis set, it will process as a legacy tx and populate thegas_limitfield if unset. - if
access_listis set, it will process as a 2930 tx and populate thegas_limitandgas_pricefield if unset. - if
blob_sidecaris set, it will process as a 4844 tx and populate thegas_limit,max_fee_per_gas,max_priority_fee_per_gasandmax_fee_per_blob_gasfields if unset. - Otherwise, it will process as a EIP-1559 tx and populate the
gas_limit,max_fee_per_gasandmax_priority_fee_per_gasfields if unset. - If the network does not support EIP-1559, it will fallback to the legacy tx and populate the
gas_limitandgas_pricefields if unset.
§Example
let pk: PrivateKeySigner = "0x...".parse()?;
let provider = ProviderBuilder::<_, _, Ethereum>::default()
.with_gas_estimation()
.wallet(pk)
.connect_http(url);
provider.send_transaction(TransactionRequest::default()).await;Trait Implementations§
Source§impl<N: Network> TxFiller<N> for GasFiller
impl<N: Network> TxFiller<N> for GasFiller
Source§type Fillable = GasFillable
type Fillable = GasFillable
The properties that this filler retrieves from the RPC. to fill in the
TransactionRequest.
Source§fn status(&self, tx: &<N as Network>::TransactionRequest) -> FillerControlFlow
fn status(&self, tx: &<N as Network>::TransactionRequest) -> FillerControlFlow
Return a control-flow enum indicating whether the filler is ready to
fill in the transaction request, or if it is missing required
properties.
Source§fn fill_sync(&self, _tx: &mut SendableTx<N>)
fn fill_sync(&self, _tx: &mut SendableTx<N>)
Performs any synchronous filling. This should be called before
TxFiller::prepare and TxFiller::fill to fill in any properties
that can be filled synchronously.Source§async fn prepare<P>(
&self,
provider: &P,
tx: &<N as Network>::TransactionRequest,
) -> TransportResult<Self::Fillable>where
P: Provider<N>,
async fn prepare<P>(
&self,
provider: &P,
tx: &<N as Network>::TransactionRequest,
) -> TransportResult<Self::Fillable>where
P: Provider<N>,
Prepares fillable properties, potentially by making an RPC request.
Source§async fn fill(
&self,
fillable: Self::Fillable,
tx: SendableTx<N>,
) -> TransportResult<SendableTx<N>>
async fn fill( &self, fillable: Self::Fillable, tx: SendableTx<N>, ) -> TransportResult<SendableTx<N>>
Fills in the transaction request with the fillable properties.
Source§fn join_with<T>(self, other: T) -> JoinFill<Self, T>where
T: TxFiller<N>,
fn join_with<T>(self, other: T) -> JoinFill<Self, T>where
T: TxFiller<N>,
Joins this filler with another filler to compose multiple fillers.
Source§fn continue_filling(&self, tx: &SendableTx<N>) -> bool
fn continue_filling(&self, tx: &SendableTx<N>) -> bool
Returns
true if the filler should continue filling.Source§fn ready(&self, tx: &N::TransactionRequest) -> bool
fn ready(&self, tx: &N::TransactionRequest) -> bool
Returns
true if the filler is ready to fill in the transaction request.Source§fn finished(&self, tx: &N::TransactionRequest) -> bool
fn finished(&self, tx: &N::TransactionRequest) -> bool
Returns
true if the filler is finished filling in the transaction request.Source§fn fill_envelope(
&self,
fillable: Self::Fillable,
tx: SendableTx<N>,
) -> impl Send + Future<Output = Result<N::TxEnvelope, FillEnvelopeError<N::TransactionRequest>>>
fn fill_envelope( &self, fillable: Self::Fillable, tx: SendableTx<N>, ) -> impl Send + Future<Output = Result<N::TxEnvelope, FillEnvelopeError<N::TransactionRequest>>>
Fills in the transaction request and try to convert it to an envelope.
Source§fn prepare_and_fill<P>(
&self,
provider: &P,
tx: SendableTx<N>,
) -> impl Send + Future<Output = TransportResult<SendableTx<N>>>where
P: Provider<N>,
fn prepare_and_fill<P>(
&self,
provider: &P,
tx: SendableTx<N>,
) -> impl Send + Future<Output = TransportResult<SendableTx<N>>>where
P: Provider<N>,
Prepares and fills the transaction request with the fillable properties.
Source§fn prepare_call(
&self,
tx: &mut N::TransactionRequest,
) -> impl Send + Future<Output = TransportResult<()>>
fn prepare_call( &self, tx: &mut N::TransactionRequest, ) -> impl Send + Future<Output = TransportResult<()>>
Prepares transaction request with necessary fillers required for eth_call operations
asynchronously
Source§fn prepare_call_sync(
&self,
tx: &mut N::TransactionRequest,
) -> TransportResult<()>
fn prepare_call_sync( &self, tx: &mut N::TransactionRequest, ) -> TransportResult<()>
Prepares transaction request with necessary fillers required for eth_call operations
synchronously
impl Copy for GasFiller
Auto Trait Implementations§
impl Freeze for GasFiller
impl RefUnwindSafe for GasFiller
impl Send for GasFiller
impl Sync for GasFiller
impl Unpin for GasFiller
impl UnwindSafe for GasFiller
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
Converts
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>
Converts
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