Expand description
EIP-155 (EVM) chain support for the x402 payment protocol.
This crate provides implementations of the x402 payment protocol for EVM-compatible
blockchains using the EIP-155 chain ID standard. It supports both V1 and V2 protocol
versions with the “exact” payment scheme based on ERC-3009 transferWithAuthorization.
§Features
- V1 and V2 Protocol Support: Implements both protocol versions with network name (V1) and CAIP-2 chain ID (V2) addressing
- ERC-3009 Payments: Gasless token transfers using
transferWithAuthorization - Smart Wallet Support: EIP-1271 for deployed wallets, EIP-6492 for counterfactual wallets
- Multiple Signers: Round-robin signer selection for load distribution
- Nonce Management: Automatic nonce tracking with pending transaction awareness
§Architecture
The crate is organized into several modules:
chain- Core EVM chain types, providers, and configurationv1_eip155_exact- V1 protocol implementation with network namesv2_eip155_exact- V2 protocol implementation with CAIP-2 chain IDs
§Feature Flags
server- Server-side price tag generationclient- Client-side payment signingfacilitator- Facilitator-side payment verification and settlementtelemetry- OpenTelemetry tracing support
§Usage Examples
§Server: Creating a Price Tag
ⓘ
use x402_chain_eip155::{V1Eip155Exact, KnownNetworkEip155};
use x402_types::networks::USDC;
// Get USDC deployment on Base
let usdc = USDC::base();
// Create a price tag for 1 USDC
let price_tag = V1Eip155Exact::price_tag(
"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
usdc.amount(1_000_000u64),
);§Client: Signing a Payment
ⓘ
use x402_chain_eip155::V1Eip155ExactClient;
use alloy_signer_local::PrivateKeySigner;
let signer = PrivateKeySigner::random();
let client = V1Eip155ExactClient::new(signer);
// Use client to sign payment candidates
let candidates = client.accept(&payment_required);§Facilitator: Verifying and Settling
ⓘ
use x402_chain_eip155::{V1Eip155Exact, Eip155ChainProvider};
use x402_types::scheme::X402SchemeFacilitatorBuilder;
let provider = Eip155ChainProvider::from_config(&config).await?;
let facilitator = V1Eip155Exact.build(provider, None)?;
// Verify payment
let verify_response = facilitator.verify(&verify_request).await?;
// Settle payment
let settle_response = facilitator.settle(&settle_request).await?;Re-exports§
pub use v1_eip155_exact::V1Eip155Exact;pub use v2_eip155_exact::V2Eip155Exact;pub use v2_eip155_upto::V2Eip155Upto;pub use v1_eip155_exact::client::V1Eip155ExactClient;pub use v2_eip155_exact::client::V2Eip155ExactClient;pub use v2_eip155_upto::client::V2Eip155UptoClient;pub use chain::types::decimal_u256;
Modules§
- chain
- EVM chain support for x402 payments via EIP-155.
- v1_
eip155_ exact - V1 EIP-155 “exact” payment scheme implementation.
- v2_
eip155_ exact - V2 EIP-155 “exact” payment scheme implementation.
- v2_
eip155_ upto - V2 EIP-155 “upto” payment scheme implementation.
Traits§
- Known
Network Eip155 - Trait providing convenient methods to get instances for well-known EVM networks (eip155 namespace).