Skill: ijaack/evalanche (version 1.9.7)

--- name: evalanche description: > Multi-EVM agent wallet SDK with onchain identity (ERC-8004), payment rails (x402), cross-chain liquidity (Li.Fi bridging + DEX aggregation + DeFi Composer), destination gas funding (Gas.zip), perpetual futures trading (dYdX v4), market intelligence (CoinGecko), prediction markets (Polymarket CLOB), and DeFi operations (liquid staking + EIP-4626 vaults). 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), same-chain DEX swaps (31+ aggregators via Li.Fi), one-click DeFi operations (Composer: bridge + deposit into Morpho/Aave/Pendle/Lido/etc), tracking cross-chain transfer status, discovering tokens and prices across chains, querying gas prices, finding available bridges and DEX aggregators, 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, trading perpetual futures on dYdX v4 (100+ markets), searching for perp markets across venues, querying CoinGecko market data, searching Polymarket markets and order books, buying or selling Polymarket outcome shares on Polygon, staking/unstaking sAVAX via Benqi, depositing/withdrawing from EIP-4626 vaults (yoUSD, Morpho, Aave, etc), and resolving known Avalanche/Base DeFi contracts with canonical chain routing or interoperable-address inputs. Don't use when: managing ENS (use moltbook scripts). Network: yes (EVM RPCs via Routescan + public fallbacks, dYdX Cosmos chain). Cost: gas fees per transaction. metadata: { "openclaw": { "emoji": "⛓️", "homepage": "https://github.com/iJaack/evalanche", "source": "https://github.com/iJaack/evalanche", "requires": { "bins": ["node"] }, "env": [ { "name": "AGENT_PRIVATE_KEY", "description": "Hex-encoded private key (EVM). Optional if using boot() or AGENT_MNEMONIC.", "required": false, "secret": true, }, { "name": "AGENT_MNEMONIC", "description": "BIP-39 mnemonic phrase (required for Avalanche multi-VM X/P-Chain). Optional if using boot() or AGENT_PRIVATE_KEY.", "required": false, "secret": true, }, { "name": "AGENT_ID", "description": "ERC-8004 agent token ID for identity resolution (Avalanche C-Chain only).", "required": false, }, { "name": "AGENT_KEYSTORE_DIR", "description": "Directory for encrypted keystore in boot() mode. Default: ~/.evalanche/keys", "required": false, }, { "name": "AVALANCHE_NETWORK", "description": "EVM chain alias: 'ethereum', 'base', 'arbitrum', 'optimism', 'polygon', 'bsc', 'avalanche', 'fuji', etc. Default: avalanche.", "required": false, }, { "name": "EVM_CHAIN", "description": "Alias for AVALANCHE_NETWORK. EVM chain to connect to.", "required": false, }, ], "configPaths": ["~/.evalanche/keys/agent.json"], "install": [ { "id": "node", "kind": "node", "package": "evalanche", "bins": ["evalanche-mcp"], "label": "Install evalanche (npm)", }, ], }, } --- # Evalanche — Multi-EVM Agent Wallet Headless wallet SDK with ERC-8004 identity, x402 payments, Li.Fi cross-chain liquidity (bridging + DEX aggregation + DeFi Composer), Gas.zip gas funding, dYdX v4 perpetuals, CoinGecko market intelligence, Polymarket market discovery and execution, contract interaction helpers (approve-and-call + UUPS upgrade), and DeFi operations (liquid staking + EIP-4626 vaults). Works on 21+ EVM chains. Works as CLI 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: 1. **First run:** Generates a BIP-39 mnemonic via `ethers.HDNodeWallet.createRandom()` 2. **Encryption:** AES-128-CTR + scrypt KDF (geth-compatible keystore format) 3. **Password derivation:** 32-byte random entropy file via `crypto.randomBytes(32)` 4. **File permissions:** chmod 0o600 (owner read/write only) 5. **Storage location:** `~/.evalanche/keys/` by default ### MCP Server Access Controls - **Stdio mode (default):** stdin/stdout only. No network exposure. - **HTTP mode (`--http`):** localhost:3402 by default and requires `EVALANCHE_MCP_HTTP_TOKEN` (or `startHTTP({ authToken })`). Do not expose publicly without additional network controls. ### OpenClaw External Secrets (Preferred when available) Priority: OpenClaw secrets → raw env vars → encrypted keystore. ## Setup ### 1. Install ```bash npm install -g evalanche ``` ### 2. Boot on any chain ```javascript 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 ```bash 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) | ### Polymarket (Polygon) | Tool | Description | |------|-------------| | `pm_search` | Search active Polymarket markets by keyword | | `pm_market` | Get market details and outcome tokens by condition ID | | `pm_positions` | Get Polymarket positions for a wallet | | `pm_orderbook` | Get the order book for an outcome token | | `pm_balances` | Get normalized collateral and outcome-token balances | | `pm_order` | Get venue-truth order status and reconciliation | | `pm_cancel_order` | Cancel an open Polymarket order | | `pm_open_orders` | List open Polymarket orders | | `pm_trades` | List recent Polymarket venue trades | | `pm_approve` | Approve collateral spending for Polymarket on Polygon | | `pm_preflight` | Run deterministic buy/sell/limit-sell preflight checks | | `pm_buy` | Buy YES/NO shares with market or limit orders | | `pm_sell` | Slippage-protected immediate YES/NO sell toward a target USDC proceeds amount | | `pm_limit_sell` | Post or take a YES/NO limit sell depending on `postOnly` | | `pm_reconcile` | Reconcile balances, positions, orders, and trades against venue truth | | `pm_withdraw` | Withdraw Polygon USDC.e from the Polymarket wallet through the official Polymarket bridge | | `pm_redeem` | Redeem winning positions from a resolved Polymarket market for USDC via the CTF contract | ### Contract Interaction Helpers (v0.9.0) | Tool | Description | |------|-------------| | `approve_and_call` | Approve ERC-20 spending, then execute a follow-up contract call | | `upgrade_proxy` | Upgrade a UUPS proxy via `upgradeToAndCall` | ### Bridging & Cross-Chain | 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 | | `check_bridge_status` | Poll cross-chain transfer status (PENDING/DONE/FAILED) | | `fund_destination_gas` | Fund gas via Gas.zip | ### Li.Fi Liquidity SDK (v0.8.0) | Tool | Description | |------|-------------| | `lifi_swap_quote` | Get same-chain DEX swap quote (31+ aggregators) | | `lifi_swap` | Execute same-chain DEX swap | | `lifi_get_tokens` | List tokens with prices on specified chains | | `lifi_get_token` | Get specific token info (symbol, decimals, priceUSD) | | `lifi_get_chains` | List all Li.Fi supported chains | | `lifi_get_tools` | List available bridges and DEX aggregators | | `lifi_gas_prices` | Get gas prices across all chains | | `lifi_gas_suggestion` | Get gas suggestion for a specific chain | | `lifi_get_connections` | Discover possible transfer paths between chains | | `lifi_compose` | Cross-chain DeFi Composer (bridge + deposit into Morpho/Aave/Pendle/Lido/etc in one tx) | `lifi_swap` and `lifi_compose` return execution envelopes with `request`, `submission`, `verification`, and `warnings`. ### 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) | ### dYdX v4 Perpetuals (v0.7.0 — requires mnemonic) | Tool | Description | |------|-------------| | `dydx_get_markets` | List all dYdX perpetual markets with prices/leverage | | `dydx_has_market` | Check if a specific perp market exists (e.g. AKT-USD) | | `dydx_get_balance` | Get USDC equity on dYdX subaccount | | `dydx_get_positions` | Get all open perpetual positions | | `dydx_place_market_order` | Place a market order (BUY/SELL) | | `dydx_place_limit_order` | Place a limit order | | `dydx_cancel_order` | Cancel an open order | | `dydx_close_position` | Close position with reduce-only market order | | `dydx_get_orders` | List orders (optionally filter by status) | | `hyperliquid_get_markets` | List Hyperliquid perpetual markets | | `hyperliquid_get_account_state` | Get Hyperliquid account summary | | `hyperliquid_get_positions` | Get Hyperliquid open positions | | `hyperliquid_place_market_order` | Place Hyperliquid market order | | `hyperliquid_place_limit_order` | Place Hyperliquid limit order | | `hyperliquid_cancel_order` | Cancel Hyperliquid order | | `hyperliquid_close_position` | Close Hyperliquid position | | `hyperliquid_get_order` | Get Hyperliquid order status | | `hyperliquid_get_orders` | List Hyperliquid open orders | | `hyperliquid_get_trades` | List Hyperliquid recent fills | | `find_perp_market` | Search for a market across all connected perp venues | ## Programmatic Usage ### Check balance on Base ```bash 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) ```bash 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: [REDACTED_SECRET], toToken: [REDACTED_SECRET], fromAmount: '0.1', fromAddress: agent.address, }).then(r => console.log('tx:', r.txHash)); " ``` ### Same-chain DEX swap (ETH → USDC on Base) ```bash node -e " const { Evalanche } = require('evalanche'); const agent = new Evalanche({ privateKey: process.env.AGENT_PRIVATE_KEY, network: 'base' }); agent.swap({ fromChainId: 8453, toChainId: 8453, fromToken: [REDACTED_SECRET], toToken: [REDACTED_SECRET], fromAmount: '0.05', fromAddress: agent.address, }).then(r => console.log('swap tx:', r.txHash)); " ``` ### Track bridge transfer status ```bash node -e " const { Evalanche } = require('evalanche'); const agent = new Evalanche({ privateKey: process.env.AGENT_PRIVATE_KEY, network: 'ethereum' }); agent.checkBridgeStatus({ txHash: '0x...', fromChainId: 1, toChainId: 8453 }) .then(s => console.log(s.status, s.substatus)); " ``` ### Token discovery ```bash node -e " const { Evalanche } = require('evalanche'); const agent = new Evalanche({ privateKey: process.env.AGENT_PRIVATE_KEY, network: 'base' }); agent.getToken(8453, [REDACTED_SECRET]) .then(t => console.log(t.symbol, t.priceUSD)); " ``` ### Cross-chain transfer on Avalanche (requires mnemonic) ```bash 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 Cross-Chain Liquidity (v0.8.0) - **Bridging:** Aggregated routes across 27+ bridges (Across, Stargate, Hop, etc.) - **DEX Aggregation:** Same-chain swaps via 31+ DEX aggregators (1inch, Paraswap, Jupiter, etc.) - **DeFi Composer:** One-tx cross-chain DeFi (bridge + deposit into Morpho, Aave V3, Euler, Pendle, Lido wstETH, EtherFi, etc.) - **Status Tracking:** Poll transfer status (PENDING → DONE/FAILED with substatus) - **Token Discovery:** List/lookup tokens with prices across all chains - **Gas Pricing:** Gas prices and suggestions per chain - 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 | [REDACTED_SECRET] | AVAX C-Chain (43114) | | Reputation Registry | [REDACTED_SECRET] | AVAX C-Chain (43114) | | sAVAX (Benqi) | [REDACTED_SECRET] | AVAX C-Chain (43114) | | yoUSD Vault | [REDACTED_SECRET] | Base (8453) | ### DeFi — Liquid Staking & EIP-4626 Vaults (v1.2.0) ```javascript const { agent } = await Evalanche.boot({ network: 'avalanche' }); const { staking, vaults } = agent.defi(); // sAVAX unstake (instant if pool available, delayed otherwise) const q = await staking.sAvaxUnstakeQuote('5'); // { avaxOut, isInstant, poolBalance, minOutput } await staking.sAvaxUnstakeInstant('5'); // redeemInstant on Benqi await staking.sAvaxUnstakeDelayed('5'); // requestRedeem (no pool needed) // Stake AVAX → sAVAX await staking.sAvaxStake('10', 50); // 50bps slippage // EIP-4626 vault deposit (any chain) const YOUSD = [REDACTED_SECRET]; const baseAgent = new Evalanche({ privateKey: '0x...', network: 'base' }); const { vaults: baseVaults } = baseAgent.defi(); const info = await baseVaults.vaultInfo(YOUSD); // { assetDecimals: 6, shareDecimals: 18, ... } await baseVaults.deposit(YOUSD, '1000'); // approve + deposit await baseVaults.withdraw(YOUSD, '998'); // redeem shares ``` **MCP tools (defi):** `savax_stake_quote`, `savax_stake`, `savax_unstake_quote`, `savax_unstake`, `vault_info`, `vault_deposit_quote`, `vault_deposit`, `vault_withdraw_quote`, `vault_withdraw` Known DeFi routing behavior: - yoUSD auto-routes to Base - sAVAX auto-routes to Avalanche - explicit wrong-chain overrides fail clearly before contract reads - interoperable address inputs like `0x...@base` are accepted for address-based DeFi tools ### Live Smoke Checklist Use [docs/live-smoke-checklist.md](/Users/jaack/Desktop/Github/evalanche/docs/live-smoke-checklist.md) as the release-certification runbook for: - Polymarket tiny write + reconciliation - Hyperliquid tiny trade + order verification - LI.FI tiny swap/bridge execution + tx verification - sAVAX / EIP-4626 tiny round-trip + balance/share verification


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: suspicious | SkillSpector: suspicious (MEDIUM)