chore: replace rpc urls with generic ones (#2199)

This commit is contained in:
DaniPopes 2023-02-27 23:16:33 +01:00 committed by GitHub
parent 5d15031b38
commit 319b86a643
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 48 additions and 72 deletions

View File

@ -173,9 +173,7 @@ documentation test:
/// use ethers::providers::{JsonRpcClient, Provider, Http}; /// use ethers::providers::{JsonRpcClient, Provider, Http};
/// use std::convert::TryFrom; /// use std::convert::TryFrom;
/// ///
/// let provider = Provider::<Http>::try_from( /// let provider = Provider::<Http>::try_from("https://eth.llamarpc.com").expect("could not instantiate HTTP Provider");
/// "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"
/// ).expect("could not instantiate HTTP Provider");
/// ///
/// # async fn foo<P: JsonRpcClient>(provider: &Provider<P>) -> Result<(), Box<dyn std::error::Error>> { /// # async fn foo<P: JsonRpcClient>(provider: &Provider<P>) -> Result<(), Box<dyn std::error::Error>> {
/// let block = provider.get_block(100u64).await?; /// let block = provider.get_block(100u64).await?;

View File

@ -4,12 +4,12 @@ Ethers-rs allows application to connect the blockchain using web3 providers. Pro
Some common actions you can perform using a provider include: Some common actions you can perform using a provider include:
* Getting the current block number - Getting the current block number
* Getting the balance of an Ethereum address - Getting the balance of an Ethereum address
* Sending a transaction to the blockchain - Sending a transaction to the blockchain
* Calling a smart contract function - Calling a smart contract function
* Subscribe logs and smart contract events - Subscribe logs and smart contract events
* Getting the transaction history of an address - Getting the transaction history of an address
Providers are an important part of web3 libraries because they allow you to easily interact with the Ethereum blockchain without having to manage the underlying connection to the node yourself. Providers are an important part of web3 libraries because they allow you to easily interact with the Ethereum blockchain without having to manage the underlying connection to the node yourself.
@ -22,7 +22,7 @@ Code below shows a basic setup to connect a provider to a node:
// to import each dependency individually. // to import each dependency individually.
use ethers::prelude::*; use ethers::prelude::*;
const RPC_URL: &str = "https://mainnet.infura.io/v3/your-project-id"; const RPC_URL: &str = "https://eth.llamarpc.com";
#[tokio::main] #[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> { async fn main() -> Result<(), Box<dyn std::error::Error>> {

View File

@ -16,7 +16,7 @@ use std::sync::Arc;
#[tokio::main] #[tokio::main]
async fn main() -> eyre::Result<()> { async fn main() -> eyre::Result<()> {
let rpc_url = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; let rpc_url = "https://eth.llamarpc.com";
let provider: Arc<Provider<Http>> = Arc::new(Provider::<Http>::try_from(rpc_url)?); let provider: Arc<Provider<Http>> = Arc::new(Provider::<Http>::try_from(rpc_url)?);
let from_adr: H160 = "0x6fC21092DA55B392b045eD78F4732bff3C580e2c".parse()?; let from_adr: H160 = "0x6fC21092DA55B392b045eD78F4732bff3C580e2c".parse()?;
@ -50,7 +50,7 @@ use std::sync::Arc;
#[tokio::main] #[tokio::main]
async fn main() -> eyre::Result<()> { async fn main() -> eyre::Result<()> {
let rpc_url = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; let rpc_url = "https://eth.llamarpc.com";
let provider: Arc<Provider<Http>> = Arc::new(Provider::<Http>::try_from(rpc_url)?); let provider: Arc<Provider<Http>> = Arc::new(Provider::<Http>::try_from(rpc_url)?);
let from_adr: H160 = "0x6fC21092DA55B392b045eD78F4732bff3C580e2c".parse()?; let from_adr: H160 = "0x6fC21092DA55B392b045eD78F4732bff3C580e2c".parse()?;
@ -85,7 +85,7 @@ use std::sync::Arc;
#[tokio::main] #[tokio::main]
async fn main() -> eyre::Result<()> { async fn main() -> eyre::Result<()> {
let rpc_url = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; let rpc_url = "https://eth.llamarpc.com";
let provider: Arc<Provider<Http>> = Arc::new(Provider::<Http>::try_from(rpc_url)?); let provider: Arc<Provider<Http>> = Arc::new(Provider::<Http>::try_from(rpc_url)?);
let from_adr: H160 = "0x6fC21092DA55B392b045eD78F4732bff3C580e2c".parse()?; let from_adr: H160 = "0x6fC21092DA55B392b045eD78F4732bff3C580e2c".parse()?;

View File

@ -12,7 +12,7 @@ use ethers::providers::{Http, Middleware, Provider};
#[tokio::main] #[tokio::main]
async fn main() -> eyre::Result<()> { async fn main() -> eyre::Result<()> {
// Initialize a new Http provider // Initialize a new Http provider
let rpc_url = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; let rpc_url = "https://eth.llamarpc.com";
let provider = Provider::try_from(rpc_url)?; let provider = Provider::try_from(rpc_url)?;
Ok(()) Ok(())
@ -60,7 +60,7 @@ use ethers::providers::{Http, Middleware, Provider};
#[tokio::main] #[tokio::main]
async fn main() -> eyre::Result<()> { async fn main() -> eyre::Result<()> {
let rpc_url = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; let rpc_url = "https://eth.llamarpc.com";
let provider = Provider::try_from(rpc_url)?; let provider = Provider::try_from(rpc_url)?;
let chain_id = provider.get_chainid().await?; let chain_id = provider.get_chainid().await?;
@ -88,7 +88,7 @@ abigen!(
#[tokio::main] #[tokio::main]
async fn main() -> eyre::Result<()> { async fn main() -> eyre::Result<()> {
let rpc_url = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; let rpc_url = "https://eth.llamarpc.com";
let provider = Arc::new(Provider::try_from(rpc_url)?); let provider = Arc::new(Provider::try_from(rpc_url)?);
// Initialize a new instance of the Weth/Dai Uniswap V2 pair contract // Initialize a new instance of the Weth/Dai Uniswap V2 pair contract
@ -108,13 +108,12 @@ This example is a little more complicated, so let's walk through what is going o
It is very common to wrap a provider in an `Arc` to share the provider across threads. Let's look at another example where the provider is used asynchronously across two tokio threads. In the next example, a new provider is initialized and used to asynchronously fetch the number of Ommer blocks from the most recent block, as well as the previous block. It is very common to wrap a provider in an `Arc` to share the provider across threads. Let's look at another example where the provider is used asynchronously across two tokio threads. In the next example, a new provider is initialized and used to asynchronously fetch the number of Ommer blocks from the most recent block, as well as the previous block.
```rust ```rust
use std::sync::Arc;
use ethers::providers::{Http, Middleware, Provider}; use ethers::providers::{Http, Middleware, Provider};
use std::sync::Arc;
#[tokio::main] #[tokio::main]
async fn main() -> eyre::Result<()> { async fn main() -> eyre::Result<()> {
let rpc_url = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; let rpc_url = "https://eth.llamarpc.com";
let provider = Arc::new(Provider::try_from(rpc_url)?); let provider = Arc::new(Provider::try_from(rpc_url)?);
let current_block_number = provider.get_block_number().await?; let current_block_number = provider.get_block_number().await?;

View File

@ -134,7 +134,7 @@ impl MulticallVersion {
/// let abi: Abi = serde_json::from_str(r#"[{"inputs":[{"internalType":"string","name":"value","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"author","type":"address"},{"indexed":true,"internalType":"address","name":"oldAuthor","type":"address"},{"indexed":false,"internalType":"string","name":"oldValue","type":"string"},{"indexed":false,"internalType":"string","name":"newValue","type":"string"}],"name":"ValueChanged","type":"event"},{"inputs":[],"name":"getValue","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"value","type":"string"}],"name":"setValue","outputs":[],"stateMutability":"nonpayable","type":"function"}]"#)?; /// let abi: Abi = serde_json::from_str(r#"[{"inputs":[{"internalType":"string","name":"value","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"author","type":"address"},{"indexed":true,"internalType":"address","name":"oldAuthor","type":"address"},{"indexed":false,"internalType":"string","name":"oldValue","type":"string"},{"indexed":false,"internalType":"string","name":"newValue","type":"string"}],"name":"ValueChanged","type":"event"},{"inputs":[],"name":"getValue","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"value","type":"string"}],"name":"setValue","outputs":[],"stateMutability":"nonpayable","type":"function"}]"#)?;
/// ///
/// // connect to the network /// // connect to the network
/// let client = Provider::<Http>::try_from("https://goerli.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27")?; /// let client = Provider::<Http>::try_from("http://localhost:8545")?;
/// ///
/// // create the contract object. This will be used to construct the calls for multicall /// // create the contract object. This will be used to construct the calls for multicall
/// let client = Arc::new(client); /// let client = Arc::new(client);

View File

@ -43,15 +43,7 @@ and can be overriden with the [`ens`](./struct.Provider.html#method.ens) method
# use ethers_core::types::Address; # use ethers_core::types::Address;
# use ethers_providers::{Provider, Http, Middleware, Ws}; # use ethers_providers::{Provider, Http, Middleware, Ws};
# async fn foo() -> Result<(), Box<dyn std::error::Error>> { # async fn foo() -> Result<(), Box<dyn std::error::Error>> {
// HTTP Provider let provider = Provider::<Http>::try_from("https://eth.llamarpc.com")?;
let provider = Provider::<Http>::try_from(
"https://mainnet.infura.io/v3/YOUR_API_KEY"
)?;
// Websocket Provider
let provider = Provider::<Ws>::connect(
"wss://mainnet.infura.io/v3/YOUR_API_KEY"
).await?;
let block = provider.get_block(100u64).await?; let block = provider.get_block(100u64).await?;
println!("Got block: {}", serde_json::to_string(&block)?); println!("Got block: {}", serde_json::to_string(&block)?);
@ -68,9 +60,8 @@ Using ENS:
```rust,no_run ```rust,no_run
# use ethers_providers::{Provider, Http, Middleware}; # use ethers_providers::{Provider, Http, Middleware};
# async fn foo() -> Result<(), Box<dyn std::error::Error>> { # async fn foo() -> Result<(), Box<dyn std::error::Error>> {
# let provider = Provider::<Http>::try_from( let provider = Provider::<Http>::try_from("https://eth.llamarpc.com")?;
# "https://mainnet.infura.io/v3/YOUR_API_KEY"
# )?;
// Resolve ENS name to Address // Resolve ENS name to Address
let name = "vitalik.eth"; let name = "vitalik.eth";
let address = provider.resolve_name(name).await?; let address = provider.resolve_name(name).await?;

View File

@ -242,7 +242,7 @@ pub trait Middleware: Sync + Send + Debug {
/// # use std::convert::TryFrom; /// # use std::convert::TryFrom;
/// # #[tokio::main(flavor = "current_thread")] /// # #[tokio::main(flavor = "current_thread")]
/// # async fn main() { /// # async fn main() {
/// # let provider = Provider::<HttpProvider>::try_from("https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27").unwrap(); /// # let provider = Provider::<HttpProvider>::try_from("https://eth.llamarpc.com").unwrap();
/// let avatar = provider.resolve_avatar("parishilton.eth").await.unwrap(); /// let avatar = provider.resolve_avatar("parishilton.eth").await.unwrap();
/// assert_eq!(avatar.to_string(), "https://i.imgur.com/YW3Hzph.jpg"); /// assert_eq!(avatar.to_string(), "https://i.imgur.com/YW3Hzph.jpg");
/// # } /// # }
@ -264,7 +264,7 @@ pub trait Middleware: Sync + Send + Debug {
/// # use std::{str::FromStr, convert::TryFrom}; /// # use std::{str::FromStr, convert::TryFrom};
/// # #[tokio::main(flavor = "current_thread")] /// # #[tokio::main(flavor = "current_thread")]
/// # async fn main() { /// # async fn main() {
/// # let provider = Provider::<HttpProvider>::try_from("https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27").unwrap(); /// # let provider = Provider::<HttpProvider>::try_from("https://eth.llamarpc.com").unwrap();
/// let token = ethers_providers::erc::ERCNFT::from_str("erc721:0xc92ceddfb8dd984a89fb494c376f9a48b999aafc/9018").unwrap(); /// let token = ethers_providers::erc::ERCNFT::from_str("erc721:0xc92ceddfb8dd984a89fb494c376f9a48b999aafc/9018").unwrap();
/// let token_image = provider.resolve_nft(token).await.unwrap(); /// let token_image = provider.resolve_nft(token).await.unwrap();
/// assert_eq!(token_image.to_string(), "https://creature.mypinata.cloud/ipfs/QmNwj3aUzXfG4twV3no7hJRYxLLAWNPk6RrfQaqJ6nVJFa/9018.jpg"); /// assert_eq!(token_image.to_string(), "https://creature.mypinata.cloud/ipfs/QmNwj3aUzXfG4twV3no7hJRYxLLAWNPk6RrfQaqJ6nVJFa/9018.jpg");

View File

@ -87,7 +87,7 @@ impl FromStr for NodeClient {
/// use std::convert::TryFrom; /// use std::convert::TryFrom;
/// ///
/// let provider = Provider::<Http>::try_from( /// let provider = Provider::<Http>::try_from(
/// "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27" /// "https://eth.llamarpc.com"
/// ).expect("could not instantiate HTTP Provider"); /// ).expect("could not instantiate HTTP Provider");
/// ///
/// let block = provider.get_block(100u64).await?; /// let block = provider.get_block(100u64).await?;
@ -1387,20 +1387,20 @@ mod sealed {
/// ///
/// Note that this will send an RPC to retrieve the chain id. /// Note that this will send an RPC to retrieve the chain id.
/// ///
/// ``` /// ```no_run
/// # use ethers_providers::{Http, Provider, ProviderExt}; /// # use ethers_providers::{Http, Provider, ProviderExt};
/// # async fn t() { /// # async fn t() {
/// let http_provider = Provider::<Http>::connect("https://eth-mainnet.alchemyapi.io/v2/API_KEY").await; /// let http_provider = Provider::<Http>::connect("https://eth.llamarpc.com").await;
/// # } /// # }
/// ``` /// ```
/// ///
/// This is essentially short for /// This is essentially short for
/// ///
/// ``` /// ```no_run
/// use std::convert::TryFrom; /// use std::convert::TryFrom;
/// use ethers_core::types::Chain; /// use ethers_core::types::Chain;
/// use ethers_providers::{Http, Provider, ProviderExt}; /// use ethers_providers::{Http, Provider, ProviderExt};
/// let http_provider = Provider::<Http>::try_from("https://eth-mainnet.alchemyapi.io/v2/API_KEY").unwrap().set_chain(Chain::Mainnet); /// let http_provider = Provider::<Http>::try_from("https://eth.llamarpc.com").unwrap().set_chain(Chain::Mainnet);
/// ``` /// ```
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))] #[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
#[cfg_attr(not(target_arch = "wasm32"), async_trait)] #[cfg_attr(not(target_arch = "wasm32"), async_trait)]

View File

@ -6,8 +6,7 @@ use eyre::Result;
#[tokio::main] #[tokio::main]
async fn main() -> Result<()> { async fn main() -> Result<()> {
// ensure `anvil` is available in $PATH // ensure `anvil` is available in $PATH
let anvil = let anvil = Anvil::new().fork("https://eth.llamarpc.com").spawn();
Anvil::new().fork("https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27").spawn();
println!("Anvil running at `{}`", anvil.endpoint()); println!("Anvil running at `{}`", anvil.endpoint());

View File

@ -63,7 +63,7 @@ async fn rust_inline_generation() -> Result<()> {
]"#, ]"#,
); );
const RPC_URL: &str = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; const RPC_URL: &str = "https://eth.llamarpc.com";
const WETH_ADDRESS: &str = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; const WETH_ADDRESS: &str = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2";
let provider = Provider::<Http>::try_from(RPC_URL)?; let provider = Provider::<Http>::try_from(RPC_URL)?;

View File

@ -14,7 +14,7 @@ abigen!(
]"#, ]"#,
); );
const WSS_URL: &str = "wss://mainnet.infura.io/ws/v3/c60b0bb42f8a4c6481ecd229eddaca27"; const WSS_URL: &str = "wss://eth.llamarpc.com";
const WETH_ADDRESS: &str = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; const WETH_ADDRESS: &str = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2";
#[tokio::main] #[tokio::main]

View File

@ -17,9 +17,7 @@ abigen!(
#[tokio::main] #[tokio::main]
async fn main() -> Result<()> { async fn main() -> Result<()> {
let client = let client = Provider::<Ws>::connect("wss://eth.llamarpc.com").await?;
Provider::<Ws>::connect("wss://mainnet.infura.io/ws/v3/c60b0bb42f8a4c6481ecd229eddaca27")
.await?;
let client = Arc::new(client); let client = Arc::new(client);

View File

@ -5,7 +5,7 @@ use ethers::{
use eyre::Result; use eyre::Result;
use std::sync::Arc; use std::sync::Arc;
const HTTP_URL: &str = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; const HTTP_URL: &str = "https://eth.llamarpc.com";
const V3FACTORY_ADDRESS: &str = "0x1F98431c8aD98523631AE4a59f267346ea31F984"; const V3FACTORY_ADDRESS: &str = "0x1F98431c8aD98523631AE4a59f267346ea31F984";
const DAI_ADDRESS: &str = "0x6B175474E89094C44Da98b954EedeAC495271d0F"; const DAI_ADDRESS: &str = "0x6B175474E89094C44Da98b954EedeAC495271d0F";
const USDC_ADDRESS: &str = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; const USDC_ADDRESS: &str = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";

View File

@ -10,7 +10,7 @@ use ethers::{
}; };
use std::convert::TryFrom; use std::convert::TryFrom;
const RPC_URL: &str = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; const RPC_URL: &str = "https://eth.llamarpc.com";
const SIGNING_KEY: &str = "fdb33e2105f08abe41a8ee3b758726a31abdd57b7a443f470f23efce853af169"; const SIGNING_KEY: &str = "fdb33e2105f08abe41a8ee3b758726a31abdd57b7a443f470f23efce853af169";
/// In ethers-rs, middleware is a way to customize the behavior of certain aspects of the library by /// In ethers-rs, middleware is a way to customize the behavior of certain aspects of the library by

View File

@ -73,7 +73,7 @@ async fn polygon() {
} }
async fn provider_oracle() { async fn provider_oracle() {
const RPC_URL: &str = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; const RPC_URL: &str = "https://eth.llamarpc.com";
let provider = Provider::<Http>::try_from(RPC_URL).unwrap(); let provider = Provider::<Http>::try_from(RPC_URL).unwrap();
let oracle = ProviderOracle::new(provider); let oracle = ProviderOracle::new(provider);
match oracle.fetch().await { match oracle.fetch().await {

View File

@ -5,7 +5,7 @@ use ethers::prelude::*;
use reqwest::header::{HeaderMap, HeaderValue}; use reqwest::header::{HeaderMap, HeaderValue};
use std::sync::Arc; use std::sync::Arc;
const RPC_URL: &str = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; const RPC_URL: &str = "https://eth.llamarpc.com";
#[tokio::main] #[tokio::main]
async fn main() -> eyre::Result<()> { async fn main() -> eyre::Result<()> {

View File

@ -10,7 +10,7 @@ use ethers::prelude::*;
use reqwest::Url; use reqwest::Url;
use std::time::Duration; use std::time::Duration;
const RPC_URL: &str = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; const RPC_URL: &str = "https://eth.llamarpc.com";
#[tokio::main] #[tokio::main]
async fn main() -> eyre::Result<()> { async fn main() -> eyre::Result<()> {

View File

@ -6,7 +6,7 @@
use ethers::prelude::*; use ethers::prelude::*;
const WSS_URL: &str = "wss://mainnet.infura.io/ws/v3/c60b0bb42f8a4c6481ecd229eddaca27"; const WSS_URL: &str = "wss://eth.llamarpc.com";
#[tokio::main] #[tokio::main]
async fn main() -> eyre::Result<()> { async fn main() -> eyre::Result<()> {

View File

@ -10,9 +10,7 @@ use std::sync::Arc;
#[tokio::main] #[tokio::main]
async fn main() -> Result<()> { async fn main() -> Result<()> {
let client: Provider<Ws> = let client: Provider<Ws> = Provider::<Ws>::connect("wss://eth.llamarpc.com").await?;
Provider::<Ws>::connect("wss://mainnet.infura.io/ws/v3/c60b0bb42f8a4c6481ecd229eddaca27")
.await?;
let client = Arc::new(client); let client = Arc::new(client);
let last_block = client.get_block(BlockNumber::Latest).await?.unwrap().number.unwrap(); let last_block = client.get_block(BlockNumber::Latest).await?.unwrap().number.unwrap();

View File

@ -17,9 +17,7 @@ abigen!(
#[tokio::main] #[tokio::main]
async fn main() -> Result<()> { async fn main() -> Result<()> {
let client = Provider::<Http>::try_from( let client = Provider::<Http>::try_from("https://eth.llamarpc.com")?;
"https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27",
)?;
let client = Arc::new(client); let client = Arc::new(client);
// ETH/USDT pair on Uniswap V2 // ETH/USDT pair on Uniswap V2

View File

@ -46,7 +46,5 @@ async fn main() -> Result<(), Box<dyn Error>> {
} }
async fn get_client() -> Provider<Ws> { async fn get_client() -> Provider<Ws> {
Provider::<Ws>::connect("wss://mainnet.infura.io/ws/v3/c60b0bb42f8a4c6481ecd229eddaca27") Provider::<Ws>::connect("wss://eth.llamarpc.com").await.unwrap()
.await
.unwrap()
} }

View File

@ -10,9 +10,7 @@ use std::sync::Arc;
#[tokio::main] #[tokio::main]
async fn main() -> Result<()> { async fn main() -> Result<()> {
let client = let client = Provider::<Ws>::connect("wss://eth.llamarpc.com").await?;
Provider::<Ws>::connect("wss://mainnet.infura.io/ws/v3/c60b0bb42f8a4c6481ecd229eddaca27")
.await?;
let client = Arc::new(client); let client = Arc::new(client);
let last_block = client.get_block(BlockNumber::Latest).await?.unwrap().number.unwrap(); let last_block = client.get_block(BlockNumber::Latest).await?.unwrap().number.unwrap();

View File

@ -4,7 +4,7 @@ use std::time::Duration;
#[tokio::main] #[tokio::main]
async fn main() -> Result<()> { async fn main() -> Result<()> {
let ws_endpoint = "wss://mainnet.infura.io/ws/v3/c60b0bb42f8a4c6481ecd229eddaca27"; let ws_endpoint = "wss://eth.llamarpc.com";
let ws = Ws::connect(ws_endpoint).await?; let ws = Ws::connect(ws_endpoint).await?;
let provider = Provider::new(ws).interval(Duration::from_millis(2000)); let provider = Provider::new(ws).interval(Duration::from_millis(2000));
let mut stream = provider.watch_blocks().await?.take(1); let mut stream = provider.watch_blocks().await?.take(1);

View File

@ -7,8 +7,7 @@ use eyre::Result;
#[tokio::main] #[tokio::main]
async fn main() -> Result<()> { async fn main() -> Result<()> {
// fork mainnet // fork mainnet
let anvil = let anvil = Anvil::new().fork("https://eth.llamarpc.com").spawn();
Anvil::new().fork("https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27").spawn();
let from = anvil.addresses()[0]; let from = anvil.addresses()[0];
// connect to the network // connect to the network
let provider = Provider::<Http>::try_from(anvil.endpoint()).unwrap().with_sender(from); let provider = Provider::<Http>::try_from(anvil.endpoint()).unwrap().with_sender(from);

View File

@ -23,7 +23,7 @@ abigen!(
const ETH_DECIMALS: u32 = 18; const ETH_DECIMALS: u32 = 18;
const USD_PRICE_DECIMALS: u32 = 8; const USD_PRICE_DECIMALS: u32 = 8;
const ETH_USD_FEED: &str = "0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419"; const ETH_USD_FEED: &str = "0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419";
const RPC_URI: &str = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27"; const RPC_URI: &str = "https://eth.llamarpc.com";
/// Retrieves the USD amount per gas unit, using a Chainlink price oracle. /// Retrieves the USD amount per gas unit, using a Chainlink price oracle.
/// Function gets the amount of `wei` to be spent per gas unit then multiplies /// Function gets the amount of `wei` to be spent per gas unit then multiplies