EVM Blockchain Skill: Query 8 Chains with 14 Read-Only Commands
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 is a read-only client for querying blockchain data across eight EVM-compatible chains, all from a single Python script. It is built for developers, analysts, and automation builders who need wallet portfolios, token prices, gas estimates, transaction details, and security checks without running a node or managing API keys. If you work with Ethereum, BNB Chain, Base, Arbitrum, Polygon, Optimism, Avalanche, or zkSync, this skill gives you a fast, dependency-free way to pull on-chain data into your workflows.
What it does
This skill bundles 14 commands that cover the most common blockchain data lookups. You can check a wallet's native and ERC-20 balances, scan the same address across all eight chains at once, compare gas prices and token prices, inspect transactions and decode their input data, resolve ENS names, detect dangerous token approvals, inspect smart contracts, and spot large whale transfers. Everything runs through a single Python script that uses only the standard library, so there are no pip installs and no external dependencies beyond public APIs.
The skill is designed for quick, interactive use. You call it from the command line with a subcommand and an address, transaction hash, or token symbol. Output is plain text, which makes it easy to pipe into other tools or parse in scripts. Because it is read-only, it never sends transactions or modifies state, so it is safe to run in any environment.
Before you start
You need Python 3.8 or later. The skill uses only the standard library, so no additional packages are required. It relies on public APIs: CoinGecko for pricing (free tier, rate-limited to roughly 10-30 requests per minute), ensideas.com for ENS resolution, and 4byte.directory for transaction decoding. These are free but have usage limits, so keep them in mind for heavy use.
The script lives at ~/.hermes/skills/blockchain/evm/scripts/evm_client.py. You can override the default RPC endpoint by setting the environment variable EVM_RPC_URL to a private endpoint, which is useful if public RPCs throttle you.
Quick Reference
The following block shows the main commands. The $SCRIPT variable points to the helper script, so you can copy this into your shell and start querying immediately.
SCRIPT=~/.hermes/skills/blockchain/evm/scripts/evm_client.py
# Network & prices
python $SCRIPT stats # Ethereum stats
python $SCRIPT stats --chain arbitrum # Arbitrum stats
python $SCRIPT compare # Gas + prices ALL 8 chains
# Wallet
python $SCRIPT wallet 0xd8dA...96045 # Portfolio (ETH + ERC-20)
python $SCRIPT wallet 0xd8dA...96045 --chain bsc
python $SCRIPT multichain 0xd8dA...96045 # Same wallet on ALL chains
# Tokens & prices
python $SCRIPT price ETH
python $SCRIPT price 0xdAC1...1ec7 # By contract address
python $SCRIPT token 0xdAC1...1ec7 # ERC-20 metadata + market cap
# Transactions
python $SCRIPT tx 0x5c50...f060 # Transaction details
python $SCRIPT decode 0x5c50...f060 # Decode input data (4byte.directory)
python $SCRIPT activity 0xd8dA...96045 # Recent transactions
# Gas
python $SCRIPT gas # Gas prices + cost estimates
python $SCRIPT gas --chain optimism
# Security
python $SCRIPT allowance 0xd8dA...96045 # Dangerous ERC-20 approvals
python $SCRIPT contract 0xdAC1...1ec7 # Contract inspection (proxy? standards?)
# ENS
python $SCRIPT ens vitalik.eth # Name -> address + profile
python $SCRIPT ens 0xd8dA...96045 # Address -> ENS name
# Whale detection
python $SCRIPT whale # Large transfers (last 20 blocks, >$10k)
python $SCRIPT whale --blocks 50 --min-usd 100000 --chain arbitrum
Procedure
0. Setup Check
Before anything else, confirm your Python version and that the script runs. The stats command is a good smoke test because it hits the network and returns current block, gas price, and ETH price.
python --version # 3.8+ required
python ~/.hermes/skills/blockchain/evm/scripts/evm_client.py stats
1. Wallet Portfolio
Get the native balance plus known ERC-20 tokens for an address, sorted by USD value. The first command shows the full portfolio with prices. The second uses --no-prices to skip the price lookup, which is faster and avoids CoinGecko rate limits.
python $SCRIPT wallet 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
python $SCRIPT wallet 0xd8dA... --chain bsc --no-prices # faster
2. Multi-Chain Scan
Scan the same address across all eight chains simultaneously using threads. This is the fastest way to see where a wallet holds value, but it can trigger rate limits on public RPCs because it fires eight parallel requests.
python $SCRIPT multichain 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
Output: per-chain native balance + token holdings + grand total USD.
3. Compare (Gas + Prices)
Query all eight chains in parallel to compare gas prices and token prices. The output shows the cheapest and most expensive chain, which is useful before deciding where to transact.
python $SCRIPT compare
4. Transaction Details & Decode
Inspect a transaction by hash to see its details, then decode the input data to understand what the transaction did. The decode command uses 4byte.directory to translate function selectors into human-readable signatures, for example 0xa9059cbb becomes transfer(address,uint256).
python $SCRIPT tx 0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060
python $SCRIPT decode 0x5c504ed... # Shows human-readable function signature
Decode uses 4byte.directory to translate 0xa9059cbb -> transfer(address,uint256).
5. ENS Resolution
Resolve an ENS name to an address, or do a reverse lookup to find the name for an address. The forward lookup also returns profile data like avatar and social links.
python $SCRIPT ens vitalik.eth # -> 0xd8dA... + avatar + social links
python $SCRIPT ens 0xd8dA...96045 # -> vitalik.eth
6. Allowance Checker (Security)
Check the ERC-20 approvals that a wallet has granted to known DEX and bridge contracts. This is a quick way to spot dangerous approvals, especially unlimited ones, which are flagged as HIGH risk.
python $SCRIPT allowance 0xYourWallet
Flags UNLIMITED approvals as HIGH risk.
7. Contract Inspector
Inspect a smart contract to determine what it is. The command detects proxy patterns (EIP-1967/EIP-1167), ERC-20, ERC-721, and ERC-165, and shows bytecode size and the implementation address for proxies. The examples use USDC (a proxy) and USDT (a standard ERC-20).
python $SCRIPT contract 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 # USDC (proxy)
python $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
Find large transfers in recent blocks. By default it looks at the last 20 blocks on Ethereum for transfers over $10,000. You can adjust the block range, the minimum USD value, and the chain.
python $SCRIPT whale # ETH, last 20 blocks, >$10k
python $SCRIPT whale --blocks 50 --min-usd 50000 --chain bsc
9. Gas Tracker
Get current gas prices and USD cost estimates for common transaction types: transfer, ERC-20 transfer, approve, swap, NFT mint, and NFT transfer. You can specify a chain to see its specific gas data.
python $SCRIPT gas
python $SCRIPT gas --chain polygon
Shows gwei price + USD cost for: transfer, ERC-20 transfer, approve, swap, NFT mint, NFT transfer.
Supported Chains
The skill supports eight chains, each with a key you pass to --chain, a native token, and a chain ID.
| 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
Run these two commands to confirm the skill works. The first should print current block, gas price, and ETH price. The second should resolve vitalik.eth to its address.
# Should print current block, gas price, ETH price
python ~/.hermes/skills/blockchain/evm/scripts/evm_client.py stats
# Should resolve vitalik.eth to 0xd8dA...
python ~/.hermes/skills/blockchain/evm/scripts/evm_client.py ens vitalik.eth
When not to use it
This skill is read-only and does not send transactions. If you need to sign or broadcast a transaction, you need a different tool. It also only checks a known list of about 30 tokens per chain for wallet and allowance queries, so for complete token discovery you should use a block explorer. For full transaction history beyond the most recent 200 blocks, the activity command is not enough; use Etherscan or a similar API.
Limits and gotchas
The main limitations are the public API rate limits and the single-endpoint dependencies for ENS and transaction decoding. If CoinGecko is rate-limited, wallet scans slow down; use --no-prices to avoid that. If ensideas.com or 4byte.directory is down, those commands fail without a fallback. The gas estimates on L2s are incomplete because they ignore the L1 data-posting fee, so treat them as execution-only costs. Finally, address validation does not enforce EIP-55 checksum casing, so any-case hex is accepted.
What pairs with this
The related skill is solana, which covers the Solana blockchain. If you work across both EVM and Solana ecosystems, you can use both skills to cover a broader range of chains. The EVM skill also supersedes the standalone base skill, so any Base-specific tokens and RPC functionality are now included here; pass --chain base to any command for Base coverage.