Skip to content

Commit

Permalink
feat: convenience functions for nonce and gas on ProviderBuilder (#378
Browse files Browse the repository at this point in the history
)

* feat: convenience functions for nonce and gas on `ProviderBuilder` (#373)

* feat: update doctest
  • Loading branch information
leruaa committed Mar 24, 2024
1 parent 988f8db commit 28cab90
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 13 deletions.
26 changes: 25 additions & 1 deletion crates/provider/src/builder.rs
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -111,6 +114,27 @@ impl<L, N> ProviderBuilder<L, N> {
self.layer(SignerLayer::new(signer))
}

/// Add gas estimation to the stack being built.
///
/// See [`GasEstimatorLayer`]
pub fn with_gas_estimation(self) -> ProviderBuilder<Stack<GasEstimatorLayer, L>, N> {
self.layer(GasEstimatorLayer)
}

/// Add nonce management to the stack being built.
///
/// See [`ManagedNonceLayer`]
pub fn with_nonce_management(self) -> ProviderBuilder<Stack<ManagedNonceLayer, L>, N> {
self.layer(ManagedNonceLayer)
}

/// Add preconfigured set of layers handling gas estimation and nonce management
pub fn with_recommended_layers(
self,
) -> ProviderBuilder<Stack<ManagedNonceLayer, Stack<GasEstimatorLayer, L>>, 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
Expand Down
18 changes: 9 additions & 9 deletions crates/provider/src/layers/gas.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ use std::marker::PhantomData;
/// ```rs
/// # async fn test<T: Transport + Clone, S: NetworkSigner<Ethereum>>(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));
///
Expand Down Expand Up @@ -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};
Expand All @@ -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)));

Expand Down Expand Up @@ -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)));

Expand Down Expand Up @@ -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)));

Expand Down
6 changes: 3 additions & 3 deletions crates/provider/src/layers/nonce.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ use tokio::sync::Mutex;
/// ```rs
/// # async fn test<T: Transport + Clone, S: NetworkSigner<Ethereum>>(transport: T, signer: S) {
/// let provider = ProviderBuilder::new()
/// .layer(ManagedNonceLayer)
/// .with_nonce_management()
/// .signer(EthereumSigner::from(signer)) // note the order!
/// .provider(RootProvider::new(transport));
///
Expand Down Expand Up @@ -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)));

Expand All @@ -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)));

Expand Down

0 comments on commit 28cab90

Please sign in to comment.