0xv4l3nt1n3/etherscan/SKILL.md
Query EVM chain data via Etherscan API v2. Use for on-chain lookups where Etherscan v2 applies: balances, transactions, token transfers (ERC-20/721/1155), contract source/ABI, gas prices, event logs, and verification of transaction completion. Also trigger when another tool submits a transaction and you need to confirm it finalized on-chain.
npx skillsauth add openclaw/skills etherscanInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Your job: Query EVM chains without guessing. Wrong module/action = empty results. Wrong chain = silent failure.
| | |
| -------------- | --------------------------------------------------- |
| Base URL | https://api.etherscan.io/v2/api |
| Auth | ?apikey={key} query param |
| Rate limit | ~5/second (free tier). Exceed → message=NOTOK |
| Citation | End with "Powered by Etherscan" — required. |
Try sources in order:
~/.config/etherscan/credentials.json → {"api_key":"..."}$ETHERSCAN_API_KEYNo key? → https://etherscan.io/apidashboard (register, generate free key)
Save it:
mkdir -p ~/.config/etherscan
cat > ~/.config/etherscan/credentials.json << 'EOF'
{"api_key":"USER_KEY_HERE"}
EOF
chmod 600 ~/.config/etherscan/credentials.json
Do NOT hardcode chain IDs. Fetch and cache on first call:
curl -s "https://api.etherscan.io/v2/chainlist"
Returns chain map: {"result": [{"chainid": "1", "name": "Ethereum Mainnet"}, ...]}. Map user's chain name → chainid. If ambiguous, ask. Never assume default.
Refresh when: session start, cache miss, user says "refresh", or >24hr stale.
Wrong module/action wastes a call. Match the task:
| You need | module | action | Key params |
| ---------------------- | ----------- | ------------------------- | ---------------------------------------- |
| Native balance | account | balance | address, tag=latest |
| Multi-address balance | account | balancemulti | address (comma-sep, max 20) |
| Normal transactions | account | txlist | address, page, offset, sort=desc |
| Internal transactions | account | txlistinternal | address or txhash |
| ERC-20 transfers | account | tokentx | address, optional contractaddress |
| ERC-721 transfers | account | tokennfttx | address |
| ERC-1155 transfers | account | token1155tx | address |
| ERC-20 token balance | account | tokenbalance | contractaddress, address |
| Contract ABI | contract | getabi | address (verified only) |
| Contract source | contract | getsourcecode | address |
| Contract creator | contract | getcontractcreation | contractaddresses (comma-sep) |
| Gas prices | gastracker| gasoracle | — |
| Tx receipt status | transaction | gettxreceiptstatus | txhash |
| Event logs | logs | getLogs | address, fromBlock, toBlock, topics|
| Latest block | proxy | eth_blockNumber | — |
| Tx by hash | proxy | eth_getTransactionByHash| txhash |
| Full receipt | proxy | eth_getTransactionReceipt| txhash |
Format: GET https://api.etherscan.io/v2/api?module={module}&action={action}&chainid={chainid}&apikey={key}&{params}
Don't guess addresses. Use these:
| Token | Chain | Decimals | Address |
| ----- | ---------- | -------- | -------------------------------------------- |
| WETH | Ethereum | 18 | 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 |
| USDC | Ethereum | 6 | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 |
| USDT | Ethereum | 6 | 0xdAC17F958D2ee523a2206206994597C13D831ec7 |
| DAI | Ethereum | 18 | 0x6B175474E89094C44Da98b954EedeAC495271d0F |
| WBTC | Ethereum | 8 | 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 |
| WBNB | BSC | 18 | 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c |
| USDC | BSC | 18 | 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d |
| WMATIC| Polygon | 18 | 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270 |
| USDC | Polygon | 6 | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 |
| WETH | Arbitrum | 18 | 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1 |
| USDC | Arbitrum | 6 | 0xaf88d065e77c8cC2239327C5EDb3A432268e5831 |
| ARB | Arbitrum | 18 | 0x912CE59144191C1204E64559FE8253a0e49E6548 |
| WETH | Base | 18 | 0x4200000000000000000000000000000000000006 |
| USDC | Base | 6 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
| WETH | Optimism | 18 | 0x4200000000000000000000000000000000000006 |
| USDC | Optimism | 6 | 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85 |
| OP | Optimism | 18 | 0x4200000000000000000000000000000000000042 |
Native tokens (ETH, BNB, MATIC): Use module=account&action=balance, no contract address.
curl -s "https://api.etherscan.io/v2/api?module=account&action=balance&address=0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb&chainid=1&tag=latest&apikey=${API_KEY}"
curl -s "https://api.etherscan.io/v2/api?module=account&action=txlist&address=0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb&chainid=1&page=1&offset=10&sort=desc&apikey=${API_KEY}"
curl -s "https://api.etherscan.io/v2/api?module=account&action=tokenbalance&contractaddress=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&address=0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb&chainid=1&tag=latest&apikey=${API_KEY}"
# Returns raw integer — divide by 10^6 for USDC
curl -s "https://api.etherscan.io/v2/api?module=transaction&action=gettxreceiptstatus&txhash=0xABC...&chainid=1&apikey=${API_KEY}"
# result.status = "1" → success, "0" → failed
curl -s "https://api.etherscan.io/v2/api?module=gastracker&action=gasoracle&chainid=1&apikey=${API_KEY}"
# Returns SafeGasPrice, ProposeGasPrice, FastGasPrice in Gwei
Pagination: Always include page=1&offset=100&sort=desc on list endpoints. For "all" results, paginate until result.length < offset.
Token balances: Returned as raw integers. Divide by 10^decimals.
Time filtering: Most endpoints lack server-side time filters. Fetch results, filter by timeStamp client-side.
Errors:
status=0, empty result → wrong chain or actionmessage=NOTOK → rate limit or invalid paramsTransaction verification: Never assume finality. Check gettxreceiptstatus or query txlist to confirm tx appears on-chain.
Full docs: https://docs.etherscan.io/llms.txt
tools
Use when the user wants to connect to, test, or use the McDonalds service at mcp.mcd.cn, including checking authentication, probing MCP endpoints, listing tools, or calling McDonalds MCP tools through a reusable local CLI.
development
Web scraping platform — Twitter/X data, Vinted marketplace, and general web scraping API
development
SlowMist AI Agent Security Review — comprehensive security framework for skills, repositories, URLs, on-chain addresses, and products (Claude Code version)
data-ai
去除中文文本中的 AI 写作痕迹,使其读起来自然。基于维基百科 AI 写作特征指南,检测 24 种 AI 模式。触发词:humanizer-cn、去除 AI 痕迹、去除 AI 写作痕迹、中文文本人性化。