# evm-client
**Repository Path**: rust_cn/evm-client
## Basic Information
- **Project Name**: evm-client
- **Description**: 一个轻量级的 EVM 客户端 Rust 库,可与多个 EVM 兼容的区块链无缝交互。支持连接 15 条以上的链,具备自动 RPC 故障转移功能支持。
- **Primary Language**: Rust
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-09
- **Last Updated**: 2026-04-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
🤵 EVM 客户端
一个轻量级的 EVM 客户端 Rust 库,可与多个 EVM 兼容的区块链无缝交互。支持连接 15 条以上的链,具备自动 RPC 故障转移功能支持。
简体中文 | English
# 依赖
```shell
cargo add evm-client
```
# 例子
## 基本连接示例
创建一个支持以太坊主网自动 RPC 选择的客户端
```rust
use evm_client::{EvmClient, EvmType};
#[tokio::main]
async fn main() -> Result<(), Box> {
let client = EvmClient::from_type(EvmType::ETHEREUM_MAINNET).await?;
println!("✅ Connected to Ethereum Mainnet");
client.health().await?;
println!("✅ Health check passed");
Ok(())
}
```
## 自定义 RPC 连接
使用特定的 RPC 端点进行连接
```rust
use evm_client::EvmClient;
#[tokio::main]
async fn main() -> Result<(), Box> {
let client = EvmClient::from_rpc("https://mainnet.infura.io/v3/your-api-key").await?;
println!("✅ Connected via custom RPC");
Ok(())
}
```
## 钱包整合
创建带有钱包的客户端以进行交易签名
```rust
use evm_client::{EvmClient, EvmType};
#[tokio::main]
async fn main() -> Result<(), Box> {
let private_key = "0xYourPrivateKeyHere";
let client = EvmClient::from_wallet(EvmType::POLYGON_MAINNET, private_key).await?;
println!("✅ Wallet client created");
let chain_id = client.provider.get_chainid().await?;
println!("🔗 Chain ID: {}", chain_id);
Ok(())
}
```
## 多链测试
测试跨多条链的连接性
```rust
use evm_client::{EvmClient, EvmType};
#[tokio::main]
async fn main() -> Result<(), Box> {
let chains = [
EvmType::ETHEREUM_MAINNET,
EvmType::BSC_MAINNET,
EvmType::POLYGON_MAINNET,
EvmType::ARB_MAINNET,
EvmType::BASE_MAINNET,
];
for chain in chains {
match EvmClient::from_type(chain).await {
Ok(client) => {
let chain_id = client.provider.get_chainid().await?;
println!("✅ {} - Chain ID: {} - Connected", chain.name(), chain_id);
}
Err(e) => {
println!("❌ {} - Connection failed: {}", chain.name(), e);
}
}
}
Ok(())
}
```
## 错误处理
处理连接失败错误
```rust
use evm_client::{EvmClient, EvmType, EvmClientError};
#[tokio::main]
async fn main() {
match EvmClient::from_type(EvmType::ETHEREUM_MAINNET).await {
Ok(client) => {
println!("✅ Connection successful");
match client.health().await {
Ok(()) => println!("✅ Health check passed"),
Err(EvmClientError::RpcError(msg)) => {
eprintln!("❌ Health check failed: {}", msg);
}
}
}
Err(EvmClientError::RpcError(msg)) => {
eprintln!("❌ Connection failed: {}", msg);
}
}
}
```
## 带钱包的自定义 RPC
将自定义 RPC 与钱包功能相结合
```rust
use evm_client::EvmClient;
#[tokio::main]
async fn main() -> Result<(), Box> {
let rpc_url = "https://polygon-rpc.com";
let private_key = "0xYourPrivateKeyHere";
let client = EvmClient::from_rpc_and_wallet(rpc_url, private_key).await?;
println!("✅ Custom RPC wallet client created");
Ok(())
}
```
## 链信息
获取有关支持链的详细信息
```rust
use evm_client::EvmType;
fn main() {
let chains = [
EvmType::ETHEREUM_MAINNET,
EvmType::ARB_MAINNET,
EvmType::OPTIMISM_MAINNET,
];
for chain in chains {
println!("📋 Chain: {}", chain.name());
println!(" ID: {}", chain.chain_id());
println!(" RPC Endpoints: {}", chain.rpc().len());
println!("---");
}
}
```