EVM Blockchain Skill: Query 8 Chains, Wallets, Tokens, Gas & ENS
Read-only EVM client: wallets, tokens, gas across 8 chains.
Written by Neura Market from the official Hermes Agent documentation for Evm. Commands, paths, and version numbers are reproduced from the source unchanged.
Read the official documentationThe EVM Blockchain skill gives Hermes Agent read-only access to Ethereum, BNB Chain, Base, Arbitrum One, Polygon, Optimism, Avalanche C-Chain, and zkSync Era. You get 14 commands for wallet portfolios, token metadata, transaction inspection, gas tracking, whale detection, ENS resolution, contract inspection, and allowance checking. No API key, no pip installs, no external dependencies beyond Python 3.8+. This is the skill you reach for when a user asks "what's in this wallet?" or "what did that transaction do?" across any EVM chain.
What it does
- Wallet portfolio: native balance plus known ERC-20 tokens, sorted by USD value, on any of the 8 supported chains.
- Multi-chain scan: same wallet on all 8 chains simultaneously, with a grand total USD.
- Token info & price: by symbol or contract address, including market cap and supply.
- Transaction details & decode: raw tx data plus human-readable function signature via 4byte.directory.
- Activity: recent transactions for an address (last 200 blocks).
- Gas tracker: gwei price plus USD cost for common operations (transfer, swap, NFT mint, etc.) on any chain.
- Compare: gas prices and native token prices across all 8 chains in one call.
- Whale detection: large transfers above a configurable USD threshold in recent blocks.
- ENS resolution: forward (name to address) and reverse (address to name) with avatar and social links.
- Allowance checker: flags ERC-20 approvals granted to known DEX/bridge contracts, marking UNLIMITED as HIGH risk.
- Contract inspector: detects proxy patterns (EIP-1967/EIP-1167), ERC-20, ERC-721, ERC-165, and shows bytecode size and implementation address.
Supersedes the standalone
baseskill. Base-specific tokens (AERO, DEGEN, TOSHI, BRETT, WELL, cbETH, cbBTC, wstETH, rETH) and all Base RPC functionality previously living underoptional-skills/blockchain/base/have been folded into this skill. Pass--chain baseto any command for Base coverage.
Before you start
- Python 3.8+ is required. The skill uses only the standard library (urllib, json, argparse, threading). No pip installs.
- Pricing data comes from CoinGecko's free API, which is rate-limited to roughly 10-30 requests per minute.
- ENS resolution uses ensideas.com public API.
- Transaction decoding uses 4byte.directory public API.
- The helper script lives at
~/.hermes/skills/blockchain/evm/scripts/evm_client.py. Set the environment variableEVM_RPC_URLto override the default public RPC endpoint. - The skill is installed on demand (optional tier). It is available on Linux, macOS, and Windows.
Quick Reference
SCRIPT=~/.hermes/skills/blockchain/evm/scripts/evm_client.py
# Network & prices
python3 $SCRIPT stats # Ethereum stats
python3 $SCRIPT stats --chain arbitrum # Arbitrum stats
python3 $SCRIPT compare # Gas + prices ALL 8 chains
# Wallet
python3 $SCRIPT wallet 0xd8dA...96045 # Portfolio (ETH + ERC-20)
python3 $SCRIPT wallet 0xd8dA...96045 --chain bsc
python3 $SCRIPT multichain 0xd8dA...96045 # Same wallet on ALL chains
# Tokens & prices
python3 $SCRIPT price ETH
python3 $SCRIPT price 0xdAC1...1ec7 # By contract address
python3 $SCRIPT token 0xdAC1...1ec7 # ERC-20 metadata + market cap
# Transactions
python3 $SCRIPT tx 0x5c50...f060 # Transaction details
python3 $SCRIPT decode 0x5c50...f060 # Decode input data (4byte.directory)
python3 $SCRIPT activity 0xd8dA...96045 # Recent transactions
# Gas
python3 $SCRIPT gas # Gas prices + cost estimates
python3 $SCRIPT gas --chain optimism
# Security
python3 $SCRIPT allowance 0xd8dA...96045 # Dangerous ERC-20 approvals
python3 $SCRIPT contract 0xdAC1...1ec7 # Contract inspection (proxy? standards?)
# ENS
python3 $SCRIPT ens vitalik.eth # Name -> address + profile
python3 $SCRIPT ens 0xd8dA...96045 # Address -> ENS name
# Whale detection
python3 $SCRIPT whale # Large transfers (last 20 blocks, >$10k)
python3 $SCRIPT whale --blocks 50 --min-usd 100000 --chain arbitrum
Procedure
0. Setup Check
python3 --version # 3.8+ required
python3 ~/.hermes/skills/blockchain/evm/scripts/evm_client.py stats
1. Wallet Portfolio
Native balance + known ERC-20 tokens, sorted by USD value.
python3 $SCRIPT wallet 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
python3 $SCRIPT wallet 0xd8dA... --chain bsc --no-prices # faster
2. Multi-Chain Scan
Scans all 8 chains simultaneously for the same address using threads.
python3 $SCRIPT multichain 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
Output: per-chain native balance + token holdings + grand total USD.
3. Compare (Gas + Prices)
All 8 chains queried in parallel. Shows cheapest/most expensive chain.
python3 $SCRIPT compare
4. Transaction Details & Decode
python3 $SCRIPT tx 0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060
python3 $SCRIPT decode 0x5c504ed... # Shows human-readable function signature
Decode uses 4byte.directory to translate 0xa9059cbb -> transfer(address,uint256).
5. ENS Resolution
python3 $SCRIPT ens vitalik.eth # -> 0xd8dA... + avatar + social links
python3 $SCRIPT ens 0xd8dA...96045 # -> vitalik.eth
6. Allowance Checker (Security)
Checks ERC-20 approvals granted to known DEX/bridge contracts.
python3 $SCRIPT allowance 0xYourWallet
Flags UNLIMITED approvals as HIGH risk.
7. Contract Inspector
python3 $SCRIPT contract 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 # USDC (proxy)
python3 $SCRIPT contract 0xdAC17F958D2ee523a2206206994597C13D831ec7 # USDT (ERC-20)
Detects: proxy (EIP-1967/EIP-1167), ERC-20, ERC-721, ERC-165. Shows bytecode size and implementation address for proxies.
8. Whale Detection
python3 $SCRIPT whale # ETH, last 20 blocks, >$10k
python3 $SCRIPT whale --blocks 50 --min-usd 50000 --chain bsc
9. Gas Tracker
python3 $SCRIPT gas
python3 $SCRIPT gas --chain polygon
Shows gwei price + USD cost for: transfer, ERC-20 transfer, approve, swap, NFT mint, NFT transfer.
Supported Chains
| Key | Name | Native | Chain ID |
|---|---|---|---|
| ethereum | Ethereum | ETH | 1 |
| bsc | BNB Chain | BNB | 56 |
| base | Base | ETH | 8453 |
| arbitrum | Arbitrum One | ETH | 42161 |
| polygon | Polygon | POL | 137 |
| optimism | Optimism | ETH | 10 |
| avalanche | Avalanche C | AVAX | 43114 |
| zksync | zkSync Era | ETH | 324 |
Pitfalls
- CoinGecko free tier: ~10-30 req/min. Use
--no-pricesfor faster wallet scans. - Public RPCs may throttle. Set EVM_RPC_URL to a private endpoint for production.
walletandallowanceonly check known token list (~30 tokens per chain). Use a block explorer for complete token discovery.activityscans recent blocks only (max 200). For full history, use Etherscan API.multichainruns 8 parallel threads, can trigger rate limits on public RPCs.- ENS resolution depends on a single public endpoint (ensideas.com / ens.vitalik.ca) with no fallback. If that endpoint is down,
enswill fail, re-run later or use a block explorer. - Tx decoding depends on a single public endpoint (4byte.directory) with no fallback. Selectors not in their database show up as
unknown. - L2 gas estimates are L2-execution only. On rollups like Base, Arbitrum, Optimism, and zkSync, the actual transaction cost also includes an L1 data-posting fee that depends on calldata size and current L1 gas prices. The
gascommand does not estimate that L1 component. For Base specifically, see the network's L1 fee oracle (contract0x420000000000000000000000000000000000000F). - Address / tx-hash inputs are validated for 0x-prefix + correct length + hex, but EIP-55 checksum casing is not enforced (RPC endpoints accept any-case hex).
Verification
# Should print current block, gas price, ETH price
python3 ~/.hermes/skills/blockchain/evm/scripts/evm_client.py stats
# Should resolve vitalik.eth to 0xd8dA...
python3 ~/.hermes/skills/blockchain/evm/scripts/evm_client.py ens vitalik.eth
When not to use it
If you need write capabilities (sending transactions, deploying contracts), this skill is read-only. For Solana blockchain queries, use the related solana skill instead. For complete token discovery beyond the ~30-token known list per chain, or for full historical transaction data, use a dedicated block explorer API.
Limits and gotchas
All the pitfalls listed above apply. The most common surprises: rate limits on public RPCs and CoinGecko, the L2 gas estimate caveat, and the single-point-of-failure for ENS and 4byte.directory lookups. The --no-prices flag is your friend when speed matters.
Related skills
- solana: Solana blockchain queries, similar read-only pattern.