# Crypto Wallet

> Check cryptocurrency wallet balances, token holdings, transaction history, token approvals, ENS name resolution, and on-chain activity. Use when asked about wallet balance, what tokens an address holds, transaction history, pending transactions, token allowances, ENS lookup, or address portfolio.

- Skill: `jiayaoqijia/crypto-wallet` (Agent Skill)
- Install (CLI): `npx skillmds@latest add jiayaoqijia/crypto-wallet`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jiayaoqijia/crypto-wallet/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: jiayaoqijia (https://skillmd.com/u/jiayaoqijia)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jiayaoqijia/crypto-wallet

---


# Crypto Wallet

Query on-chain wallet data: balances, tokens, transactions, approvals, and ENS resolution.

## Common ERC-20 Function Selectors

| Function | Selector | Params |
|----------|----------|--------|
| `balanceOf(address)` | `0x70a08231` | address (32 bytes, left-padded) |
| `allowance(address,address)` | `0xdd62ed3e` | owner + spender (each 32 bytes) |
| `decimals()` | `0x313ce567` | none |
| `symbol()` | `0x95d89b41` | none |
| `name()` | `0x06fdde03` | none |
| `totalSupply()` | `0x18160ddd` | none |

## APIs

### ETH Balance via Public RPC

**Native ETH balance** (eth_getBalance):
```
exec command="curl -s -X POST https://eth.llamarpc.com -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBalance\",\"params\":[\"0xADDRESS\",\"latest\"],\"id\":1}'"
```

**ERC-20 token balance** (eth_call with balanceOf):
```
exec command="curl -s -X POST https://eth.llamarpc.com -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0xTOKEN_CONTRACT\",\"data\":\"0x70a08231000000000000000000000000WALLET_NO_0x\"},\"latest\"],\"id\":1}'"
```

> Result is hex. Convert: `parseInt(result, 16) / 10^decimals`

### Multi-chain Public RPCs

| Chain | RPC URL |
|-------|---------|
| Ethereum | `https://eth.llamarpc.com` |
| Arbitrum | `https://arb1.arbitrum.io/rpc` |
| Optimism | `https://mainnet.optimism.io` |
| Base | `https://mainnet.base.org` |
| Polygon | `https://polygon-rpc.com` |
| BSC | `https://bsc-dataseed.binance.org` |
| Avalanche | `https://api.avax.network/ext/bc/C/rpc` |

### Etherscan / Block Explorers (Free tier, API key optional)

Base URLs:
- Ethereum: `https://api.etherscan.io/api`
- Arbitrum: `https://api.arbiscan.io/api`
- Base: `https://api.basescan.org/api`
- Optimism: `https://api-optimistic.etherscan.io/api`
- Polygon: `https://api.polygonscan.com/api`
- BSC: `https://api.bscscan.com/api`

**Token balances for address** (requires free API key):
```
web_fetch url="https://api.etherscan.io/api?module=account&action=tokentx&address=0xADDRESS&page=1&offset=50&sort=desc&apikey=YOUR_KEY"
```

**Normal transactions**:
```
web_fetch url="https://api.etherscan.io/api?module=account&action=txlist&address=0xADDRESS&startblock=0&endblock=99999999&page=1&offset=20&sort=desc&apikey=YOUR_KEY"
```

**ETH balance** (no key needed, rate limited):
```
web_fetch url="https://api.etherscan.io/api?module=account&action=balance&address=0xADDRESS&tag=latest"
```

### ENS Resolution

**Forward (name to address)** via RPC:
```
exec command="curl -s -X POST https://eth.llamarpc.com -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41\",\"data\":\"0x3b3b57de{NAMEHASH}\"},\"latest\"],\"id\":1}'"
```

**Simpler: use ENS public API**:
```
web_fetch url="https://ensdata.net/ADDRESS_OR_NAME"
```

### Token Approvals

**Check allowance** (how much a spender can use):
```
exec command="curl -s -X POST https://eth.llamarpc.com -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0xTOKEN\",\"data\":\"0xdd62ed3e000000000000000000000000OWNER_NO_0x000000000000000000000000SPENDER_NO_0x\"},\"latest\"],\"id\":1}'"
```

> Unlimited approval = `0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`

## External Tools (Optional)

- **EVM MCP Server**: `npx @mcpdotdirect/evm-mcp-server` — read balances, tokens, NFTs across 60+ EVM chains
- **Base MCP**: `github.com/base/base-mcp` — Coinbase-official Base chain tools

## Usage Tips

- Always pad addresses to 32 bytes (64 hex chars) in eth_call data fields
- Strip `0x` prefix from address when embedding in calldata, then left-pad with zeros
- Results from eth_call are hex-encoded; parse with `parseInt(hex, 16)`
- For ERC-20 balances, divide by `10^decimals` (USDC=6, most tokens=18)
- For multi-token portfolios, use Etherscan tokentx endpoint rather than individual RPC calls
- Verify chain before querying — same address can exist on multiple chains with different balances

