Skip to main content

lifiswap_evm/
lib.rs

1//! `LiFi` SDK - EVM chain provider (alloy-based).
2//!
3//! This crate provides an EVM-specific implementation of the [`lifiswap::provider::Provider`]
4//! trait, using [alloy](https://docs.rs/alloy) for on-chain interactions.
5//!
6//! # Example
7//!
8//! ```ignore
9//! use lifiswap::{LiFiClient, LiFiConfig};
10//! use lifiswap::execution::execute_route;
11//! use lifiswap_evm::{EvmProvider, LocalSigner};
12//! use alloy::signers::local::PrivateKeySigner;
13//!
14//! let key: PrivateKeySigner = "0xac0974...".parse().unwrap();
15//! let rpc_url: url::Url = "https://eth.llamarpc.com".parse().unwrap();
16//! let signer = LocalSigner::new(key, rpc_url.clone());
17//! let provider = EvmProvider::new(signer, rpc_url);
18//!
19//! let client = LiFiClient::new(LiFiConfig::builder().integrator("my-app").build())?;
20//! let route = client.get_routes(&req).await?.routes.remove(0);
21//! let result = execute_route(&client, route, &[Box::new(provider)], Default::default()).await?;
22//! ```
23
24mod errors;
25mod executor;
26pub mod permit2;
27mod provider;
28pub mod rpc;
29pub mod signer;
30mod tasks;
31
32use alloy::primitives::Address;
33pub use alloy::signers::local::PrivateKeySigner;
34pub use executor::Permit2Config;
35pub use provider::EvmProvider;
36pub use rpc::{RpcUrlResolver, StaticRpcUrls};
37pub use signer::{BatchCall, BatchCallReceipt, EvmSigner, LocalSigner};
38
39/// Check whether a token address represents the native token (ETH).
40pub(crate) fn is_native_token(address: &str) -> bool {
41    address.parse::<Address>().is_ok_and(|a| a.is_zero())
42        || address.eq_ignore_ascii_case("0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE")
43}