use alloy_provider::{DynProvider, ProviderBuilder};
use clap::Parser;
use tracing::debug;
use super::{EvmeError, Result};
#[derive(Parser, Debug, Clone)]
#[command(next_help_heading = "RPC Options")]
pub struct RpcArgs {
#[arg(
long = "rpc",
visible_aliases = ["rpc-url"],
alias = "fork.rpc",
env = "RPC_URL",
default_value = "http://localhost:8545"
)]
pub rpc_url: String,
}
pub type OpProvider = DynProvider<op_alloy_network::Optimism>;
impl RpcArgs {
pub fn build_provider(&self) -> Result<OpProvider> {
let url = self.rpc_url.parse().map_err(|e| {
EvmeError::RpcError(format!("Invalid RPC URL '{}': {}", self.rpc_url, e))
})?;
debug!(rpc_url = %self.rpc_url, "Building RPC provider");
let provider = ProviderBuilder::new()
.disable_recommended_fillers()
.network::<op_alloy_network::Optimism>()
.connect_http(url);
Ok(DynProvider::new(provider))
}
}