Evalanche — Multi-EVM Agent Wallet
Headless wallet SDK with ERC-8004 identity, x402 payments, Li.Fi bridging, and Gas.zip gas funding. Works on 21+ EVM chains. Works as CLI tools or MCP server.
Source: https://github.com/iJaack/evalanche
License: MIT
Supported Chains
Ethereum, Base, Arbitrum, Optimism, Polygon, BSC, Avalanche, Fantom, Gnosis, zkSync Era, Linea, Scroll, Blast, Mantle, Celo, Moonbeam, Cronos, Berachain, + testnets (Fuji, Sepolia, Base Sepolia).
Routescan RPCs preferred where available, with public fallback RPCs.
Security Model
Key Storage & Encryption
Evalanche.boot() manages keys autonomously with encrypted-at-rest storage:
- First run: Generates a BIP-39 mnemonic via
ethers.HDNodeWallet.createRandom()
- Encryption: AES-128-CTR + scrypt KDF (geth-compatible keystore format)
- Password derivation: 32-byte random entropy file via
crypto.randomBytes(32)
- File permissions: chmod 0o600 (owner read/write only)
- Storage location:
~/.evalanche/keys/ by default
MCP Server Access Controls
- Stdio mode (default): stdin/stdout only. No network exposure.
- HTTP mode (
--http): localhost:3402. Do not expose publicly without auth.
OpenClaw External Secrets (Preferred when available)
Priority: OpenClaw secrets → raw env vars → encrypted keystore.
Setup
1. Install
npm install -g evalanche
2. Boot on any chain
import { Evalanche } from 'evalanche';
// Base
const { agent } = await Evalanche.boot({ network: 'base' });
// Ethereum
const { agent: eth } = await Evalanche.boot({ network: 'ethereum' });
// Arbitrum
const { agent: arb } = await Avalanche.boot({ network: 'arbitrum' });
// Avalanche (with identity)
const { agent: avax } = await Evalanche.boot({
network: 'avalanche',
identity: { agentId: '1599' },
});
3. Run as MCP server
AVALANCHE_NETWORK=base evalanche-mcp
Available Tools (MCP)
Wallet
| Tool |
Description |
get_address |
Get agent wallet address |
get_balance |
Get native token balance |
sign_message |
Sign arbitrary message |
send_avax |
Send native tokens |
call_contract |
Call a contract method |
Identity (ERC-8004)
| Tool |
Description |
resolve_identity |
Resolve agent identity + reputation |
resolve_agent |
Look up any agent by ID |
Payments (x402)
| Tool |
Description |
pay_and_fetch |
x402 payment-gated HTTP request |
Reputation
| Tool |
Description |
submit_feedback |
Submit on-chain reputation feedback |
Network & Chains
| Tool |
Description |
get_network |
Get current network config |
get_supported_chains |
List all 21+ supported chains |
get_chain_info |
Get details for a specific chain |
switch_network |
Switch to different EVM chain |
Arena DEX (Avalanche)
| Tool |
Description |
arena_buy |
Buy Arena community tokens via bonding curve (spends $ARENA) |
arena_sell |
Sell Arena community tokens for $ARENA |
arena_token_info |
Get token info (fees, curve params) by address |
arena_buy_cost |
Calculate $ARENA cost for a given buy amount (read-only) |
Bridging
| Tool |
Description |
get_bridge_quote |
Get cross-chain bridge quote (Li.Fi) |
get_bridge_routes |
Get all bridge route options |
bridge_tokens |
Bridge tokens between chains |
fund_destination_gas |
Fund gas via Gas.zip |
Platform CLI (requires platform-cli binary — go install github.com/ava-labs/platform-cli@latest)
| Tool |
Description |
platform_cli_available |
Check if platform-cli is installed |
subnet_create |
Create a new Avalanche subnet |
subnet_convert_l1 |
Convert subnet to L1 blockchain |
subnet_transfer_ownership |
Transfer subnet ownership |
add_validator |
Add validator with BLS keys to Primary Network |
l1_register_validator |
Register a new L1 validator |
l1_add_balance |
Add balance to L1 validator |
l1_disable_validator |
Disable an L1 validator |
node_info |
Get NodeID + BLS keys from running node |
pchain_send |
Send AVAX on P-Chain (P→P) |
Programmatic Usage
Check balance on Base
node -e "
const { Evalanche } = require('evalanche');
const agent = new Evalanche({ privateKey: process.env.AGENT_PRIVATE_KEY, network: 'base' });
agent.provider.getBalance(agent.address).then(b => {
const { formatEther } = require('ethers');
console.log(formatEther(b) + ' ETH');
});
"
Bridge tokens (Ethereum → Arbitrum)
node -e "
const { Evalanche } = require('evalanche');
const agent = new Evalanche({ privateKey: process.env.AGENT_PRIVATE_KEY, network: 'ethereum' });
agent.bridgeTokens({
fromChainId: 1, toChainId: 42161,
fromToken: '0x0000000000000000000000000000000000000000',
toToken: '0x0000000000000000000000000000000000000000',
fromAmount: '0.1', fromAddress: agent.address,
}).then(r => console.log('tx:', r.txHash));
"
Cross-chain transfer on Avalanche (requires mnemonic)
node -e "
const { Evalanche } = require('evalanche');
const agent = new Evalanche({ mnemonic: process.env.AGENT_MNEMONIC, multiVM: true });
agent.transfer({ from: 'C', to: 'P', amount: '25' })
.then(r => console.log('export:', r.exportTxId, 'import:', r.importTxId));
"
Key Concepts
ERC-8004 Agent Identity (Avalanche only)
- On-chain agent identity registry on Avalanche C-Chain
- Agent ID → tokenURI, owner, reputation score (0-100), trust level
- Trust levels: high (≥75), medium (≥40), low (<40)
Li.Fi Bridging
- Aggregated bridge routes across all major bridges (Across, Stargate, Hop, etc.)
- Supports native tokens and ERC-20s across all chains
- Uses Li.Fi REST API (no SDK dependency needed)
Gas.zip
- Cheap cross-chain gas funding
- Send gas to any destination chain via deposit addresses
x402 Payment Protocol
- HTTP 402 Payment Required → parse requirements → sign payment → retry
maxPayment prevents overspending
Multi-VM (Avalanche X-Chain, P-Chain)
- Requires mnemonic and
network: 'avalanche' or 'fuji'
- C-Chain: EVM (ethers v6), X-Chain: AVM (UTXO), P-Chain: PVM (staking)
Contracts
| Contract |
Address |
Chain |
| Identity Registry |
0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 |
AVAX C-Chain (43114) |
| Reputation Registry |
0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 |
AVAX C-Chain (43114) |
1---2name: evalanche3description: Multi-EVM agent wallet SDK with onchain identity (ERC-8004), payment rails (x402), cross-chain bridging (Li.Fi), and destination gas funding (Gas.zip). Supports 21+ EVM chains: Ethereum, Base, Arbitrum, Optimism, Polygon, BSC, Avalanche, and more. Agents generate and manage their own keys — no human input required. Use when: booting an autonomous agent wallet on any EVM chain, sending tokens, calling contracts, resolving agent identity, checking reputation, making x402 payment-gated API calls, bridging tokens cross-chain (Li.Fi), funding gas on destination chains (Gas.zip), cross-chain transfers (Avalanche C↔X↔P), delegating stake, querying validators, signing messages, creating subnets, managing L1 validators, adding validators with BLS keys, querying node info. Don't use when: managing ENS (use moltbook scripts). Network: yes (EVM RPCs via Routescan + public fallbacks). Cost: gas fees per transaction.4---56# Evalanche — Multi-EVM Agent Wallet78Headless wallet SDK with ERC-8004 identity, x402 payments, Li.Fi bridging, and Gas.zip gas funding. Works on 21+ EVM chains. Works as CLI tools or MCP server.910**Source:** https://github.com/iJaack/evalanche11**License:** MIT1213## Supported Chains1415Ethereum, Base, Arbitrum, Optimism, Polygon, BSC, Avalanche, Fantom, Gnosis, zkSync Era, Linea, Scroll, Blast, Mantle, Celo, Moonbeam, Cronos, Berachain, + testnets (Fuji, Sepolia, Base Sepolia).1617Routescan RPCs preferred where available, with public fallback RPCs.1819## Security Model2021### Key Storage & Encryption2223`Evalanche.boot()` manages keys autonomously with **encrypted-at-rest** storage:24251. **First run:** Generates a BIP-39 mnemonic via `ethers.HDNodeWallet.createRandom()`262. **Encryption:** AES-128-CTR + scrypt KDF (geth-compatible keystore format)273. **Password derivation:** 32-byte random entropy file via `crypto.randomBytes(32)`284. **File permissions:** chmod 0o600 (owner read/write only)295. **Storage location:** `~/.evalanche/keys/` by default3031### MCP Server Access Controls3233- **Stdio mode (default):** stdin/stdout only. No network exposure.34- **HTTP mode (`--http`):** localhost:3402. Do not expose publicly without auth.3536### OpenClaw External Secrets (Preferred when available)3738Priority: OpenClaw secrets → raw env vars → encrypted keystore.3940## Setup4142### 1. Install43```bash44npm install -g evalanche45```4647### 2. Boot on any chain48```javascript49import { Evalanche } from 'evalanche';5051// Base52const { agent } = await Evalanche.boot({ network: 'base' });5354// Ethereum55const { agent: eth } = await Evalanche.boot({ network: 'ethereum' });5657// Arbitrum58const { agent: arb } = await Avalanche.boot({ network: 'arbitrum' });5960// Avalanche (with identity)61const { agent: avax } = await Evalanche.boot({62 network: 'avalanche',63 identity: { agentId: '1599' },64});65```6667### 3. Run as MCP server68```bash69AVALANCHE_NETWORK=base evalanche-mcp70```7172## Available Tools (MCP)7374### Wallet75| Tool | Description |76|------|-------------|77| `get_address` | Get agent wallet address |78| `get_balance` | Get native token balance |79| `sign_message` | Sign arbitrary message |80| `send_avax` | Send native tokens |81| `call_contract` | Call a contract method |8283### Identity (ERC-8004)84| Tool | Description |85|------|-------------|86| `resolve_identity` | Resolve agent identity + reputation |87| `resolve_agent` | Look up any agent by ID |8889### Payments (x402)90| Tool | Description |91|------|-------------|92| `pay_and_fetch` | x402 payment-gated HTTP request |9394### Reputation95| Tool | Description |96|------|-------------|97| `submit_feedback` | Submit on-chain reputation feedback |9899### Network & Chains100| Tool | Description |101|------|-------------|102| `get_network` | Get current network config |103| `get_supported_chains` | List all 21+ supported chains |104| `get_chain_info` | Get details for a specific chain |105| `switch_network` | Switch to different EVM chain |106107### Arena DEX (Avalanche)108| Tool | Description |109|------|-------------|110| `arena_buy` | Buy Arena community tokens via bonding curve (spends $ARENA) |111| `arena_sell` | Sell Arena community tokens for $ARENA |112| `arena_token_info` | Get token info (fees, curve params) by address |113| `arena_buy_cost` | Calculate $ARENA cost for a given buy amount (read-only) |114115### Bridging116| Tool | Description |117|------|-------------|118| `get_bridge_quote` | Get cross-chain bridge quote (Li.Fi) |119| `get_bridge_routes` | Get all bridge route options |120| `bridge_tokens` | Bridge tokens between chains |121| `fund_destination_gas` | Fund gas via Gas.zip |122123### Platform CLI (requires `platform-cli` binary — `go install github.com/ava-labs/platform-cli@latest`)124| Tool | Description |125|------|-------------|126| `platform_cli_available` | Check if platform-cli is installed |127| `subnet_create` | Create a new Avalanche subnet |128| `subnet_convert_l1` | Convert subnet to L1 blockchain |129| `subnet_transfer_ownership` | Transfer subnet ownership |130| `add_validator` | Add validator with BLS keys to Primary Network |131| `l1_register_validator` | Register a new L1 validator |132| `l1_add_balance` | Add balance to L1 validator |133| `l1_disable_validator` | Disable an L1 validator |134| `node_info` | Get NodeID + BLS keys from running node |135| `pchain_send` | Send AVAX on P-Chain (P→P) |136137## Programmatic Usage138139### Check balance on Base140```bash141node -e "142const { Evalanche } = require('evalanche');143const agent = new Evalanche({ privateKey: process.env.AGENT_PRIVATE_KEY, network: 'base' });144agent.provider.getBalance(agent.address).then(b => {145 const { formatEther } = require('ethers');146 console.log(formatEther(b) + ' ETH');147});148"149```150151### Bridge tokens (Ethereum → Arbitrum)152```bash153node -e "154const { Evalanche } = require('evalanche');155const agent = new Evalanche({ privateKey: process.env.AGENT_PRIVATE_KEY, network: 'ethereum' });156agent.bridgeTokens({157 fromChainId: 1, toChainId: 42161,158 fromToken: '0x0000000000000000000000000000000000000000',159 toToken: '0x0000000000000000000000000000000000000000',160 fromAmount: '0.1', fromAddress: agent.address,161}).then(r => console.log('tx:', r.txHash));162"163```164165### Cross-chain transfer on Avalanche (requires mnemonic)166```bash167node -e "168const { Evalanche } = require('evalanche');169const agent = new Evalanche({ mnemonic: process.env.AGENT_MNEMONIC, multiVM: true });170agent.transfer({ from: 'C', to: 'P', amount: '25' })171 .then(r => console.log('export:', r.exportTxId, 'import:', r.importTxId));172"173```174175## Key Concepts176177### ERC-8004 Agent Identity (Avalanche only)178- On-chain agent identity registry on Avalanche C-Chain179- Agent ID → tokenURI, owner, reputation score (0-100), trust level180- Trust levels: **high** (≥75), **medium** (≥40), **low** (<40)181182### Li.Fi Bridging183- Aggregated bridge routes across all major bridges (Across, Stargate, Hop, etc.)184- Supports native tokens and ERC-20s across all chains185- Uses Li.Fi REST API (no SDK dependency needed)186187### Gas.zip188- Cheap cross-chain gas funding189- Send gas to any destination chain via deposit addresses190191### x402 Payment Protocol192- HTTP 402 Payment Required → parse requirements → sign payment → retry193- `maxPayment` prevents overspending194195### Multi-VM (Avalanche X-Chain, P-Chain)196- Requires **mnemonic** and `network: 'avalanche'` or `'fuji'`197- C-Chain: EVM (ethers v6), X-Chain: AVM (UTXO), P-Chain: PVM (staking)198199## Contracts200201| Contract | Address | Chain |202|----------|---------|-------|203| Identity Registry | `0x8004A169FB4a3325136EB29fA0ceB6D2e539a432` | AVAX C-Chain (43114) |204| Reputation Registry | `0x8004BAa17C55a88189AE136b182e5fdA19dE9b63` | AVAX C-Chain (43114) |