---
name: "reading_block_explorers"
description: "Read Etherscan/Basescan-style block explorer pages operationally: verify a token contract is the real one, read transactions, internal transactions, token transfers, and event logs, spot fake/spoof token contracts, and confirm a specific transaction's status via its hash. Trigger when an agent must verify an on-chain payment, token contract, wallet, or transaction instead of trusting claims about it."
metadata: { "includeInPrompt": true }
---

## Purpose

Give an agent the operational moves to answer "did this transaction happen?", "is this the real token contract?", and "who sent what to whom?" from a block explorer page — the Etherscan-family explorers (etherscan.io, basescan.org; other chains' Etherscan clones follow the same URL shape). Facts come from the explorer's rendered fields and event logs, never from a token's name or from a screenshot-like summary.

## Workflow

1. **Build the URL.** Same path shape across the Etherscan family (all three patterns verified live on basescan.org, plus /tx/ on etherscan.io, 2026-09-21):
   - Transaction: `https://<explorer>/tx/0x<HASH>`
   - Token contract: `https://<explorer>/token/0x<ADDRESS>`
   - Any address (wallet or contract): `https://<explorer>/address/0x<ADDRESS>` (verified: resolves to the address page, e.g. "Circle: USDC Token | Address: ... | BaseScan")
   - Explorer base: etherscan.io = Ethereum, basescan.org = Base, arbiscan.io = Arbitrum, etc. The domain names the chain; the chain names which explorer to use.
2. **Confirm a transaction.** Open `/tx/0x...` and read the detail fields: Status (Success vs Failed), Block (block number = it mined; more confirmations = deeper), From, To, Value (native currency moved; usually 0 for token swaps), and Gas/Fees. Failed status means state changes did not execute — token movements listed under it did not happen. Cross-check the same hash on a second source (another RPC or blockscout.com API) before reporting high-stakes results.
3. **Read token movement from the right place.** On the tx page, find the "Token Transfers" section (exact tab wording can shift — confirm against the live page): this is the list of ERC-20 transfers for that tx, each row naming the token contract that emitted the event. "Internal Transactions" (sometimes under a tab of that name) shows value moved *inside* contract calls — different from normal From/To. "Logs" shows the raw event stream if you need to settle an argument.
4. **Verify a token contract is the real one.** Open `/token/0x...` and check, in order:
   - The contract address is the one you expect — an exact match, character for character. Everything else is secondary.
   - Cross-check name/symbol/decimals against a keyless API: `GET https://base.blockscout.com/api/v2/tokens/0x<ADDRESS>` returns `name`, `symbol`, `decimals` (verified live: canonical Base USDC `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` → USDC / 6). Same pattern: `https://eth.blockscout.com/api/v2/tokens/0x...` for mainnet (confirm against the live API).
   - Look for the source-code verification mark (a ✓ checkmark / "verified" badge near the contract name — wording and icon can change, confirm against the live page). Verified + address match = strong signal. Unverified is not automatic fraud, just unverifiable.
   - Sanity-check the token page's Transfers and Holders: the real token has the deep history you expect; a fresh page with a handful of transfers for a famous token name is a red flag.
5. **Spot spoofs.** Forged `Transfer` events are cheap: anyone can deploy a lookalike contract that emits Transfer events with the real token's name/symbol. A "token transfer" row only means *that contract* emitted the event — it does not mean the canonical token moved. Rule of thumb: trust the contract address, never the display name. If a page shows transfers for "USDC" but the emitting contract address is not the canonical one, the USDC did not move.
6. **Trace an address.** Open `/address/0x...` to see the full transaction list. Filter to the token you care about (use the token page's Transfers or the address page's token filter, wording varies) and confirm each transfer's direction, amount, and the emitting contract before concluding anything about flows in or out.

## Output Contract

Every explorer-based claim the agent produces must be accompanied by:
- the exact URL(s) inspected (full tx hash or address, not truncated),
- the specific fields read (e.g. "Status: Success", "Token Transfers row 1: 1.460879 USDC, contract 0x8335…2913"),
- what was *not* verified (e.g. "source badge wording not checked", "second source not consulted"),
- and for "this is the real token" claims: the exact contract address matched against which expected address.

If a page fails to load, report what was requested and mark the claim unverified — never reconstruct the page content from memory.

## Operating Rules

1. **Match addresses exactly, character for character.** One-character-off addresses are real and exist on-chain — a near-match is a mismatch, full stop.
2. **Token display names are labels, not identities.** A contract named "USDC" is not USDC unless the contract address is the canonical one. Say the contract address out loud in your report.
3. **A transfer row is an event from a contract, not a fact about the canonical token.** Check the emitting contract address on every row that matters.
4. **Failed transactions moved nothing.** Read Status before reading transfers.
5. **Prefer facts from explorer fields and event logs.** Token page metadata, tx detail fields, and Logs outrank anything in marketing copy, forum posts, or the token's own name.
6. **High-stakes claims need a second source.** For anything involving real money, cross-check the hash or address on an independent explorer or API before acting.
7. **Soften UI-dependent wording.** Tab labels, badge icons, and page layouts change; write "the Transfers section (exact label may differ — confirm against the live page)" rather than asserting a permanent label.
8. **Never report an on-chain event as done unless the page shows it.** "The task said the tx happened" is not confirmation; Status: Success on the explorer is.
