Read-only EVM client: wallets, tokens, gas across 8 chains.
66
81%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Query EVM-compatible blockchain data across 8 chains with USD pricing. 14 commands: wallet portfolio, token info, transactions, activity, gas tracker, network stats, price lookup, multi-chain scan, whale detection, ENS resolution, allowance checker, contract inspector, and transaction decoder.
Supports 8 chains: Ethereum, BNB Chain (BSC), Base, Arbitrum One, Polygon, Optimism, Avalanche (C-Chain), zkSync Era.
No API key needed. Zero external dependencies — Python standard library only (urllib, json, argparse, threading).
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.
Python 3.8+ standard library only. No pip installs required. Pricing: CoinGecko free API (rate-limited, ~10-30 req/min). ENS: ensideas.com public API. Tx decoding: 4byte.directory public API.
Override RPC endpoint: export EVM_RPC_URL=https://your-rpc.com
Helper script path: ~/.hermes/skills/blockchain/evm/scripts/evm_client.py
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 arbitrumpython --version # 3.8+ required
python ~/.hermes/skills/blockchain/evm/scripts/evm_client.py statsNative balance + known ERC-20 tokens, sorted by USD value.
python $SCRIPT wallet 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
python $SCRIPT wallet 0xd8dA... --chain bsc --no-prices # fasterScans all 8 chains simultaneously for the same address using threads.
python $SCRIPT multichain 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045Output: per-chain native balance + token holdings + grand total USD.
All 8 chains queried in parallel. Shows cheapest/most expensive chain.
python $SCRIPT comparepython $SCRIPT tx 0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060
python $SCRIPT decode 0x5c504ed... # Shows human-readable function signatureDecode uses 4byte.directory to translate 0xa9059cbb -> transfer(address,uint256).
python $SCRIPT ens vitalik.eth # -> 0xd8dA... + avatar + social links
python $SCRIPT ens 0xd8dA...96045 # -> vitalik.ethChecks ERC-20 approvals granted to known DEX/bridge contracts.
python $SCRIPT allowance 0xYourWalletFlags UNLIMITED approvals as HIGH risk.
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.
python $SCRIPT whale # ETH, last 20 blocks, >$10k
python $SCRIPT whale --blocks 50 --min-usd 50000 --chain bscpython $SCRIPT gas
python $SCRIPT gas --chain polygonShows gwei price + USD cost for: transfer, ERC-20 transfer, approve, swap, NFT mint, NFT transfer.
| 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 |
--no-prices for faster wallet scans.wallet and allowance only check known token list (~30 tokens per chain). Use a block explorer for complete token discovery.activity scans recent blocks only (max 200). For full history, use Etherscan API.multichain runs 8 parallel threads — can trigger rate limits on public RPCs.ens will fail — re-run later or use a block explorer.unknown.gas command does not estimate that L1 component. For Base specifically, see the network's L1 fee oracle (contract 0x420000000000000000000000000000000000000F).# 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.eth6680afb
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.