@x402/evm
v2.1.0
Published
x402 Payment Protocol EVM Implementation
Downloads
1,990
Readme
@x402/evm
EVM (Ethereum Virtual Machine) implementation of the x402 payment protocol using the Exact payment scheme with EIP-3009 TransferWithAuthorization.
Installation
npm install @x402/evmOverview
This package provides three main components for handling x402 payments on EVM-compatible blockchains:
- Client - For applications that need to make payments (have wallets/signers)
- Facilitator - For payment processors that verify and execute on-chain transactions
- Service - For resource servers that accept payments and build payment requirements
Package Exports
Main Package (@x402/evm)
V2 Protocol Support - Modern x402 protocol with CAIP-2 network identifiers
Client:
ExactEvmClient- V2 client implementation using EIP-3009toClientEvmSigner(account)- Converts viem accounts to x402 signersClientEvmSigner- TypeScript type for client signers
Facilitator:
ExactEvmFacilitator- V2 facilitator for payment verification and settlementtoFacilitatorEvmSigner(wallet)- Converts viem wallets to facilitator signersFacilitatorEvmSigner- TypeScript type for facilitator signers
Service:
ExactEvmServer- V2 service for building payment requirements
V1 Package (@x402/evm/v1)
V1 Protocol Support - Legacy x402 protocol with simple network names
Exports:
ExactEvmClientV1- V1 client implementationExactEvmFacilitatorV1- V1 facilitator implementationNETWORKS- Array of all supported V1 network names
Supported V1 Networks:
[
"abstract", "abstract-testnet",
"base-sepolia", "base",
"avalanche-fuji", "avalanche",
"iotex", "sei", "sei-testnet",
"polygon", "polygon-amoy",
"peaq", "story", "educhain",
"skale-base-sepolia"
]Client Builder (@x402/evm/client)
Convenience builder for creating fully-configured EVM clients
Exports:
createEvmClient(config)- Creates x402Client with EVM supportEvmClientConfig- Configuration interface
What it does:
- Automatically registers V2 wildcard scheme (
eip155:*) - Automatically registers all V1 networks from
NETWORKS - Optionally applies payment policies
- Optionally uses custom payment selector
Example:
import { createEvmClient } from "@x402/evm/client";
import { toClientEvmSigner } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount("0x...");
const signer = toClientEvmSigner(account);
const client = createEvmClient({ signer });
// Ready to use with both V1 and V2!Version Differences
V2 (Main Package)
- Network format: CAIP-2 (
eip155:8453) - Wildcard support: Yes (
eip155:*) - Payload structure: Partial (core wraps with metadata)
- Extensions: Full support
- Validity window: 1 hour (default)
V1 (V1 Package)
- Network format: Simple names (
base-sepolia) - Wildcard support: No (fixed list)
- Payload structure: Complete
- Extensions: Limited
- Validity window: 10 minutes with buffer
Usage Patterns
1. Using Pre-built Builder (Recommended)
import { createEvmClient } from "@x402/evm/client";
import { wrapFetchWithPayment } from "@x402/fetch";
const client = createEvmClient({ signer: myEvmSigner });
const paidFetch = wrapFetchWithPayment(fetch, client);2. Direct Registration (Full Control)
import { x402Client } from "@x402/core/client";
import { ExactEvmClient } from "@x402/evm";
import { ExactEvmClientV1 } from "@x402/evm/v1";
const client = new x402Client()
.register("eip155:*", new ExactEvmClient(signer))
.registerSchemeV1("base-sepolia", new ExactEvmClientV1(signer))
.registerSchemeV1("base", new ExactEvmClientV1(signer));3. Using Config (Flexible)
import { x402Client } from "@x402/core/client";
import { ExactEvmClient } from "@x402/evm";
const client = x402Client.fromConfig({
schemes: [
{ network: "eip155:*", client: new ExactEvmClient(signer) },
{ network: "base-sepolia", client: new ExactEvmClientV1(signer), x402Version: 1 }
],
policies: [myCustomPolicy]
});Supported Networks
V2 Networks (via CAIP-2):
eip155:1- Ethereum Mainneteip155:8453- Base Mainneteip155:84532- Base Sepoliaeip155:*- Wildcard (matches all EVM chains)- Any
eip155:<chainId>network
V1 Networks (simple names):
See NETWORKS constant in @x402/evm/v1
Asset Support
Supports any ERC-3009 compatible token:
- USDC (primary)
- EURC
- Any token implementing
transferWithAuthorization()
Development
# Build
npm run build
# Test
npm run test
# Integration tests
npm run test:integration
# Lint & Format
npm run lint
npm run formatRelated Packages
@x402/core- Core protocol types and client@x402/fetch- HTTP wrapper with automatic payment handling@x402/svm- Solana/SVM implementation
