From 28cab90c70ef2df16571e1ec131aebbba7bc4412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien?= <3535019+leruaa@users.noreply.github.com> Date: Sun, 24 Mar 2024 19:14:55 +0100 Subject: [PATCH] feat: convenience functions for nonce and gas on `ProviderBuilder` (#378) * feat: convenience functions for nonce and gas on `ProviderBuilder` (#373) * feat: update doctest --- crates/provider/src/builder.rs | 26 +++++++++++++++++++++++++- crates/provider/src/layers/gas.rs | 18 +++++++++--------- crates/provider/src/layers/nonce.rs | 6 +++--- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/crates/provider/src/builder.rs b/crates/provider/src/builder.rs index 98c7591a5dd..38bc0da1470 100644 --- a/crates/provider/src/builder.rs +++ b/crates/provider/src/builder.rs @@ -1,4 +1,7 @@ -use crate::{layers::SignerLayer, Provider, RootProvider}; +use crate::{ + layers::{GasEstimatorLayer, ManagedNonceLayer, SignerLayer}, + Provider, RootProvider, +}; use alloy_network::{Ethereum, Network}; use alloy_rpc_client::RpcClient; use alloy_transport::Transport; @@ -111,6 +114,27 @@ impl ProviderBuilder { self.layer(SignerLayer::new(signer)) } + /// Add gas estimation to the stack being built. + /// + /// See [`GasEstimatorLayer`] + pub fn with_gas_estimation(self) -> ProviderBuilder, N> { + self.layer(GasEstimatorLayer) + } + + /// Add nonce management to the stack being built. + /// + /// See [`ManagedNonceLayer`] + pub fn with_nonce_management(self) -> ProviderBuilder, N> { + self.layer(ManagedNonceLayer) + } + + /// Add preconfigured set of layers handling gas estimation and nonce management + pub fn with_recommended_layers( + self, + ) -> ProviderBuilder>, N> { + self.with_gas_estimation().with_nonce_management() + } + /// Change the network. /// /// By default, the network is `Ethereum`. This method must be called to configure a different diff --git a/crates/provider/src/layers/gas.rs b/crates/provider/src/layers/gas.rs index cfcd3bede01..fc84ea55fba 100644 --- a/crates/provider/src/layers/gas.rs +++ b/crates/provider/src/layers/gas.rs @@ -32,8 +32,8 @@ use std::marker::PhantomData; /// ```rs /// # async fn test>(transport: T, signer: S) { /// let provider = ProviderBuilder::new() -/// .layer(ManagedNonceLayer) -/// .layer(GasEstimatorLayer) +/// .with_nonce_management() +/// .with_gas_estimation() /// .signer(EthereumSigner::from(signer)) // note the order! /// .provider(RootProvider::new(transport)); /// @@ -181,7 +181,7 @@ where #[cfg(test)] mod tests { use super::*; - use crate::{layers::ManagedNonceLayer, ProviderBuilder}; + use crate::ProviderBuilder; use alloy_network::EthereumSigner; use alloy_node_bindings::Anvil; use alloy_primitives::{address, U128}; @@ -199,8 +199,8 @@ mod tests { let wallet = alloy_signer_wallet::Wallet::from(anvil.keys()[0].clone()); let provider = ProviderBuilder::new() - .layer(ManagedNonceLayer) - .layer(GasEstimatorLayer) + .with_nonce_management() + .with_gas_estimation() .signer(EthereumSigner::from(wallet)) .provider(RootProvider::new(RpcClient::new(http, true))); @@ -233,8 +233,8 @@ mod tests { let wallet = alloy_signer_wallet::Wallet::from(anvil.keys()[0].clone()); let provider = ProviderBuilder::new() - .layer(ManagedNonceLayer) - .layer(GasEstimatorLayer) + .with_nonce_management() + .with_gas_estimation() .signer(EthereumSigner::from(wallet)) .provider(RootProvider::new(RpcClient::new(http, true))); @@ -265,8 +265,8 @@ mod tests { let wallet = alloy_signer_wallet::Wallet::from(anvil.keys()[0].clone()); let provider = ProviderBuilder::new() - .layer(ManagedNonceLayer) - .layer(GasEstimatorLayer) + .with_nonce_management() + .with_gas_estimation() .signer(EthereumSigner::from(wallet)) .provider(RootProvider::new(RpcClient::new(http, true))); diff --git a/crates/provider/src/layers/nonce.rs b/crates/provider/src/layers/nonce.rs index cb57419b74e..7562fa5dbf8 100644 --- a/crates/provider/src/layers/nonce.rs +++ b/crates/provider/src/layers/nonce.rs @@ -27,7 +27,7 @@ use tokio::sync::Mutex; /// ```rs /// # async fn test>(transport: T, signer: S) { /// let provider = ProviderBuilder::new() -/// .layer(ManagedNonceLayer) +/// .with_nonce_management() /// .signer(EthereumSigner::from(signer)) // note the order! /// .provider(RootProvider::new(transport)); /// @@ -151,7 +151,7 @@ mod tests { let wallet = alloy_signer_wallet::Wallet::from(anvil.keys()[0].clone()); let provider = ProviderBuilder::new() - .layer(ManagedNonceLayer) + .with_nonce_management() .signer(EthereumSigner::from(wallet)) .provider(RootProvider::new(RpcClient::new(http, true))); @@ -176,7 +176,7 @@ mod tests { let wallet = alloy_signer_wallet::Wallet::from(anvil.keys()[0].clone()); let provider = ProviderBuilder::new() - .layer(ManagedNonceLayer) + .with_nonce_management() .signer(EthereumSigner::from(wallet)) .provider(RootProvider::new(RpcClient::new(http, true)));