Sitelet https://github.com/lcfr-eth/examples/commit/2b6ae9d5022aa5dc58368057bbec00cf92956368
Skip to content

Commit 2b6ae9d

Browse files
authored
fix(provider): update examples to use ProviderBuilder best practices (alloy-rs#43)
* use ProviderBuilder instead of ReqwestProvider * use new bindings `on_ws`, `on_ipc`, `on_reqwest_http` * remove hyper example, requires some more work * update to bfd0fda * move rpc_url to appropriate sections, closer to the provider it is used
1 parent 2f109ec commit 2b6ae9d

30 files changed

Lines changed: 98 additions & 157 deletions

‎Cargo.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ unnecessary_struct_initialization = "allow"
8181
use_self = "allow"
8282

8383
[workspace.dependencies]
84-
alloy = { git = "https://github.com/alloy-rs/alloy", rev = "27d5ba9", features = [
84+
alloy = { git = "https://github.com/alloy-rs/alloy", rev = "bfd0fda", features = [
8585
"contract",
8686
"network",
8787
"node-bindings",

‎examples/anvil/examples/deploy_contract_anvil.rs‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use alloy::{
55
node_bindings::Anvil,
66
primitives::U256,
77
providers::{Provider, ProviderBuilder},
8-
rpc::client::RpcClient,
98
signers::wallet::LocalWallet,
109
sol,
1110
};
@@ -40,9 +39,8 @@ async fn main() -> Result<()> {
4039

4140
// Create a provider with a signer and the network.
4241
let rpc_url = anvil.endpoint().parse()?;
43-
let provider = ProviderBuilder::new()
44-
.signer(EthereumSigner::from(signer))
45-
.on_client(RpcClient::new_http(rpc_url));
42+
let provider =
43+
ProviderBuilder::new().signer(EthereumSigner::from(signer)).on_reqwest_http(rpc_url)?;
4644

4745
println!("Anvil running at `{}`", anvil.endpoint());
4846

‎examples/contracts/examples/deploy_from_artifact.rs‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use alloy::{
55
node_bindings::Anvil,
66
primitives::U256,
77
providers::{Provider, ProviderBuilder},
8-
rpc::client::RpcClient,
98
signers::wallet::LocalWallet,
109
sol,
1110
};
@@ -30,9 +29,8 @@ async fn main() -> Result<()> {
3029

3130
// Create a provider with a signer.
3231
let rpc_url = anvil.endpoint().parse()?;
33-
let provider = ProviderBuilder::new()
34-
.signer(EthereumSigner::from(signer))
35-
.on_client(RpcClient::new_http(rpc_url));
32+
let provider =
33+
ProviderBuilder::new().signer(EthereumSigner::from(signer)).on_reqwest_http(rpc_url)?;
3634

3735
println!("Anvil running at `{}`", anvil.endpoint());
3836

‎examples/contracts/examples/deploy_from_contract.rs‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use alloy::{
55
node_bindings::Anvil,
66
primitives::U256,
77
providers::{Provider, ProviderBuilder},
8-
rpc::client::RpcClient,
98
signers::wallet::LocalWallet,
109
sol,
1110
};
@@ -40,9 +39,8 @@ async fn main() -> Result<()> {
4039

4140
// Create a provider with a signer.
4241
let rpc_url = anvil.endpoint().parse()?;
43-
let provider = ProviderBuilder::new()
44-
.signer(EthereumSigner::from(signer))
45-
.on_client(RpcClient::new_http(rpc_url));
42+
let provider =
43+
ProviderBuilder::new().signer(EthereumSigner::from(signer)).on_reqwest_http(rpc_url)?;
4644

4745
println!("Anvil running at `{}`", anvil.endpoint());
4846

‎examples/contracts/examples/interact_with_abi.rs‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Example of generating code from ABI file to interact with the contract.
22
3-
use alloy::{node_bindings::Anvil, providers::ProviderBuilder, rpc::client::RpcClient, sol};
3+
use alloy::{node_bindings::Anvil, providers::ProviderBuilder, sol};
44
use eyre::Result;
55

66
// Codegen from ABI file to interact with the contract.
@@ -18,8 +18,8 @@ async fn main() -> Result<()> {
1818
let anvil = Anvil::new().fork("https://eth.merkle.io").try_spawn()?;
1919

2020
// Create a provider.
21-
let provider =
22-
ProviderBuilder::<_>::new().on_client(RpcClient::new_http(anvil.endpoint().parse()?));
21+
let rpc_url = anvil.endpoint().parse()?;
22+
let provider = ProviderBuilder::new().on_reqwest_http(rpc_url)?;
2323

2424
// Create a contract instance.
2525
let contract = IERC20::new("0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2".parse()?, provider);

‎examples/layers/examples/nonce_layer.rs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use alloy::{
55
node_bindings::Anvil,
66
primitives::{address, U256},
77
providers::{layers::NonceManagerLayer, Provider, ProviderBuilder},
8-
rpc::{client::RpcClient, types::eth::request::TransactionRequest},
8+
rpc::types::eth::request::TransactionRequest,
99
signers::wallet::LocalWallet,
1010
};
1111
use eyre::Result;
@@ -40,7 +40,7 @@ async fn main() -> Result<()> {
4040
// includes the `NonceManagerLayer`.
4141
.layer(NonceManagerLayer)
4242
.signer(EthereumSigner::from(signer))
43-
.on_client(RpcClient::new_http(rpc_url));
43+
.on_reqwest_http(rpc_url)?;
4444

4545
// Create an EIP-1559 type transaction.
4646
let tx = TransactionRequest::default()

‎examples/layers/examples/recommended_layers.rs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use alloy::{
55
node_bindings::Anvil,
66
primitives::{address, U256},
77
providers::{Provider, ProviderBuilder},
8-
rpc::{client::RpcClient, types::eth::request::TransactionRequest},
8+
rpc::types::eth::request::TransactionRequest,
99
signers::wallet::LocalWallet,
1010
};
1111
use eyre::Result;
@@ -32,7 +32,7 @@ async fn main() -> Result<()> {
3232
// .with_gas_estimation()
3333
// .with_nonce_management()
3434
.signer(EthereumSigner::from(signer))
35-
.on_client(RpcClient::new_http(rpc_url));
35+
.on_reqwest_http(rpc_url)?;
3636

3737
// Create an EIP-1559 type transaction.
3838
// Notice that the `nonce` field is set by the `NonceManagerLayer`.

‎examples/layers/examples/signer_layer.rs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use alloy::{
55
node_bindings::Anvil,
66
primitives::{address, b256, U256},
77
providers::{Provider, ProviderBuilder},
8-
rpc::{client::RpcClient, types::eth::request::TransactionRequest},
8+
rpc::types::eth::request::TransactionRequest,
99
signers::wallet::LocalWallet,
1010
};
1111
use eyre::Result;
@@ -28,7 +28,7 @@ async fn main() -> Result<()> {
2828
let provider = ProviderBuilder::new()
2929
// Add the `SignerLayer` to the provider
3030
.signer(EthereumSigner::from(signer))
31-
.on_client(RpcClient::new_http(rpc_url));
31+
.on_reqwest_http(rpc_url)?;
3232

3333
// Create a legacy type transaction.
3434
let tx = TransactionRequest::default()

‎examples/providers/examples/builder.rs‎

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ use alloy::{
44
network::{EthereumSigner, TransactionBuilder},
55
node_bindings::Anvil,
66
primitives::U256,
7-
providers::{Provider, ProviderBuilder, RootProvider},
8-
rpc::{client::RpcClient, types::eth::TransactionRequest},
7+
providers::{Provider, ProviderBuilder},
8+
rpc::types::eth::TransactionRequest,
99
signers::wallet::LocalWallet,
1010
};
1111
use eyre::Result;
@@ -23,11 +23,10 @@ async fn main() -> Result<()> {
2323
let alice = wallet.address();
2424
let bob = anvil.addresses()[1];
2525

26-
// Set up the HTTP transport which is consumed by the RPC client.
27-
let rpc_client = RpcClient::new_http(anvil.endpoint().parse()?);
28-
let provider_with_signer = ProviderBuilder::new()
29-
.signer(EthereumSigner::from(wallet))
30-
.provider(RootProvider::new(rpc_client));
26+
// Set up the HTTP provider with the `reqwest` crate.
27+
let rpc_url = anvil.endpoint().parse()?;
28+
let provider =
29+
ProviderBuilder::new().signer(EthereumSigner::from(wallet)).on_reqwest_http(rpc_url)?;
3130

3231
// Create a transaction.
3332
let mut tx = TransactionRequest::default()
@@ -39,7 +38,7 @@ async fn main() -> Result<()> {
3938
tx.set_gas_price(U256::from(20e9));
4039

4140
// Send the transaction and wait for the receipt.
42-
let pending_tx = provider_with_signer.send_transaction(tx).await?;
41+
let pending_tx = provider.send_transaction(tx).await?;
4342

4443
println!("Pending transaction...{:?}", pending_tx.tx_hash());
4544

‎examples/providers/examples/connect_builtin.rs‎

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,28 @@
1-
//! Example of using the `RootProvider<N, T: BoxTransport>::connect_builtin` to create a provider
2-
//! from a connection string. The connection string can be a HTTP, WS or IPC endpoint.
1+
//! Example of using the `on_builtin` method in the provider.
32
43
use alloy::{
5-
network::Ethereum,
64
node_bindings::Anvil,
7-
providers::{Provider, RootProvider},
8-
transports::BoxTransport,
5+
providers::{Provider, ProviderBuilder},
96
};
107
use eyre::Result;
118
use futures_util::StreamExt;
129

1310
#[tokio::main]
1411
async fn main() -> Result<()> {
1512
let anvil = Anvil::new().block_time(1).try_spawn()?;
16-
let http = anvil.endpoint();
17-
let ws = anvil.ws_endpoint();
1813

19-
// Instantiate a HTTP transport provider by passing the http endpoint url
20-
let http_provider =
21-
RootProvider::<BoxTransport, Ethereum>::connect_builtin(http.as_str()).await?;
14+
// Instantiate a HTTP transport provider by passing the HTTP endpoint url
15+
let http_rpc_url = anvil.endpoint();
16+
let http_provider = ProviderBuilder::new().on_builtin(&http_rpc_url).await?;
2217

2318
// Get latest block number
2419
let block_number = http_provider.get_block_number().await?;
2520

2621
println!("Latest block number: {block_number:?}");
2722

2823
// This requires the `pubsub` and `ws` features to be enabled on alloy-provider
29-
let ws_provider = RootProvider::<BoxTransport, Ethereum>::connect_builtin(ws.as_str()).await?;
24+
let ws_rpc_url = anvil.ws_endpoint();
25+
let ws_provider = ProviderBuilder::new().on_builtin(&ws_rpc_url).await?;
3026

3127
let sub = ws_provider.subscribe_blocks().await?;
3228

@@ -42,11 +38,10 @@ async fn main() -> Result<()> {
4238

4339
handle.await?;
4440

45-
let ipc_path = "/tmp/reth.ipc";
46-
4741
// This requires the `pubsub` and `ipc` features to be enabled on alloy-provider
4842
// This would throw a runtime error if the ipc does not exist
49-
let ipc_provider = RootProvider::<BoxTransport, Ethereum>::connect_builtin(ipc_path).await?;
43+
let ipc_path = "/tmp/reth.ipc";
44+
let ipc_provider = ProviderBuilder::new().on_builtin(ipc_path).await?;
5045

5146
let _block_number = ipc_provider.get_block_number().await?;
5247

0 commit comments

Comments
 (0)