OptionalBlockchainVersion 1.0.0

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 documentation

The 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.

KeyNameNativeChain ID
ethereumEthereumETH1
bscBNB ChainBNB56
baseBaseETH8453
arbitrumArbitrum OneETH42161
polygonPolygonPOL137
optimismOptimismETH10
avalancheAvalanche CAVAX43114
zksynczkSync EraETH324

Pitfalls

  • CoinGecko free tier: ~10-30 req/min. Use --no-prices for faster wallet scans.
  • Public RPCs may throttle. Set EVM_RPC_URL to a private endpoint for production.
  • 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 resolution depends on a single public endpoint (ensideas.com / ens.vitalik.ca) with no fallback. If that endpoint is down, ens will 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 gas command does not estimate that L1 component. For Base specifically, see the network's L1 fee oracle (contract 0x420000000000000000000000000000000000000F).
  • 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.

Skills the docs pair this with

More Blockchain skills