Practical wallet, public RPC, and Etherscan/Sourcify setup for smart contract hunters — burner accounts, read-only chain access, and a lab that explains one historical public Ethereum…
Learn how to install Kali Linux dual boot alongside Windows 10/11. Complete step-by-step guide with partitioning, GRUB setup, troubleshooting, and safety warnings to prevent data loss.
13 min read
Transparent vs UUPS, uninitialized implementations, and storage-layout collisions — local forge inspect lab. No live upgrades.
35 min read
Before you fuzz a vault or file an Immunefi report, you need a safe read surface: a throwaway wallet, a public JSON-RPC endpoint, and fluency with block explorers. This Andrax tutorial — by Syed Zada Abrar — covers ~30% theory and ~70% practical.
Prerequisites: How to Start Web3 Bug Hunting in 2026 (Ethical Path Only). Series hub: Web3 Bug Hunting Learning Path 2026.
Hard lab rule: create a burner wallet, use public RPCs, and study historical public transactions. Never paste seed phrases or private keys into notes, screenshots, CMS drafts, Discord, or git. Never send exploit transactions to mainnet or public testnets “to confirm” — Immunefi bans that.
Smart-contract hunting is mostly reading: verified source, storage, logs, and prior transactions that show how a protocol actually behaves. Three pieces of infrastructure support that:
| Piece | What it gives you | What it is not |
|---|---|---|
| Wallet (EOA) | An address + keys to sign txs if you ever need them | A place to store life savings while learning |
| JSON-RPC URL | Machine-readable chain state (eth_call, receipts, code) per the Ethereum JSON-RPC API | Permission to blast live programs with scanners |
| Block explorer | Human UI for txs, internal txs, token transfers, verified code | A substitute for local PoCs |
Etherscan for smart contract auditors (and hunters) is a daily driver: Contract tab, Read/Write contract (read-only for study), Events, and transaction traces. Pair it with Sourcify (docs) when you want decentralized verification metadata and reproducible source matching.
Hunters also use wallets badly. Common failure modes: one MetaMask profile for personal funds and experimental dapps; screenshots that include seed phrases; “temporary” private keys committed to a repo; connecting the hunting wallet to random claim sites. Fix those before you install Foundry.
eth_getTransactionByHash against a public RPC to see explorer ↔ node parity.No contract deployment required. No mainnet “test exploit.” No funding required beyond optional dust you can afford to lose forever on the burner.
Use a mainstream wallet such as MetaMask (or another EOA wallet you already trust operationally). For hunting practice:
ANDRAX-BURNER-READ or similar.0x…)Do not import this burner into production ops, CI, or shared team password managers without a deliberate secrets process. For this lab, paper or a password manager entry that you control is enough — still never paste keys into Andrax drafts.
Address literacy refresher: What is an Ethereum Address? (Etherscan Knowledge Base).
Wallets and Foundry both need an RPC URL. Per ethereum.org, applications talk to nodes through the JSON-RPC API. For beginners:
| Approach | When to use | Caution |
|---|---|---|
| Wallet default RPC | Quick UI browsing | Rate limits; less control for Foundry |
| Public community RPC | Learning cast / curl | Fair-use; may throttle; do not abuse with scrapers |
| Free tier from a node provider | Steady study | Store API keys like secrets — not in public git |
| Local Anvil / your own node | PoCs and forks (later spoke) | Best for exploit confirmation |
Practical steps:
curl -s -X POST https://cloudflare-eth.com \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
Expected idea: "result":"0x1" for mainnet. If you get errors, switch provider — do not start spraying random IPs.
ETH_RPC_URL in a local env file that is gitignored. Today, prove you can reach a node without putting keys in the URL path casually pasted into chat.Hunter rule: public RPCs are for read and for local fork backends later. They are not a free scanner farm against in-scope production systems. Immunefi and most program pages prohibit reckless automation and forbid mainnet exploit testing.
Open Etherscan and practice this navigation on any public verified contract you already know is famous (for example WETH’s token page code tab — study only):
view/pure getters (safe curiosity).Then open Sourcify / repo.sourcify.dev and search the same address when available. Sourcify’s model emphasizes exact verification metadata — useful when Etherscan UI and compiler settings disagree with what you see in a repo.
Etherscan for smart contract auditors checklist (copy into notes):
Deeper reading of verified vs unverified contracts is next: How to Read Verified and Unverified Smart Contracts.
Goal: prove you can read a transaction the way a hunter does — on a finished, public example — without touching any bounty target.
Chosen example: the sample transaction used in ethereum.org’s JSON-RPC documentation for eth_getTransactionByHash:
Verified via public RPC (eth_getTransactionByHash / eth_getTransactionReceipt on 2026-09-30) and the ethereum.org example object:
| Field | Value (this tx) | Hunter reading |
|---|---|---|
| Hash | 0x88df0164…713944b | Stable ID; paste into notes/reports |
| Block | 0x5daf3b → 6139707 | When it finalized on mainnet history |
| Status | 0x1 success | Failed txs matter too — read the revert later with traces |
| From | 0xa7d9ddbe1f17865597fbd27ec712455208b6b76d | Signer EOA |
| To | 0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb | Recipient (EOA or contract) |
| Value | 0xf3dbb76162000 → 0.00429 ETH | Native ETH moved with the call |
| Input | 0x68656c6c6f21 → ASCII hello! | Calldata; here a short greeting, not a function selector |
| Gas limit / gas used | limit 0xc350 (50000); used 0x53a0 (21408) | Headroom vs actual; contract calls often use more |
| Gas price | 0x4a817c800 (20 gwei) | Legacy tx type 0x0 in this example |
| Contract created? | null | Not a create tx |
| Logs | none | No events emitted |
curl -s -X POST https://cloudflare-eth.com \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'
Compare from, to, value, and input to the Etherscan UI. Matching them builds trust that explorers and nodes agree before you rely on either in a report.
from addressBackground on transactions generally: ethereum.org — Transactions. Explorer API reference (when you automate public reads carefully): Etherscan docs.
You are not installing Foundry in this spoke — that is a later tutorial — but your RPC and burner habits should already match how Foundry will behave:
ETH_RPC_URL points at a public or API-key RPC for fork readscast tx 0x88df…944b should show the same from / to / value you wrote in the lab tableanvil --fork-url $ETH_RPC_URL becomes the place you flush PoCs — never cast send against a live in-scope contract for “quick confirmation”If today’s curl eth_chainId check failed, fix RPC access before you touch foundryup. Broken RPC hygiene is how beginners paste API keys into public gists.
These are operational security basics, not paranoia. Web3 hunting fails more often from account compromise than from missing a clever math bug on week one.
msg.sender vs tx.origin, call vs delegatecallExternal companions remain Cyfrin Updraft, Ethernaut, and Damn Vulnerable DeFi — still local/CTF first.
Educational content by Syed Zada Abrar for Andrax (andraxpentester.in). Authorized research only.
How to write an Immunefi-ready bug report: structure, PoC expectations, severity language — template practice only.
40 min read
Sign in to leave a comment.