Track 8 · Capstones · lesson 1
Send test ETH between wallets
30 min
The capstones are yours to build, on your own machine, with the Foundry and frontend setup from track 6. Seven of them, and the help shrinks as you go — this first one hands you almost everything.
Scaffolding tier: full. A starter repo, a file-by-file checklist, and the acceptance tests visible up front. Your job is to fill in the blanks and make the tests pass.
The build
A page that sends testnet ETH from your wallet to any address you type, and shows the transaction through to confirmation.
No contract at all — this is pure frontend, on purpose. It proves the wallet → transaction → receipt loop end to end before you add contracts on top.
Starter layout
send-eth/
├── src/
│ ├── App.tsx // TODO: layout + connect button
│ ├── wagmi.ts // TODO: config for Sepolia
│ └── SendForm.tsx // TODO: the form and send logic
└── .env // your Sepolia RPC URL
File-by-file TODOs:
- wagmi.ts — configure wagmi for Sepolia with an injected connector.
- App.tsx — a connect/disconnect button using
useAccount, and the form once connected. - SendForm.tsx — an address input, an amount input, a send button that uses
useSendTransaction, and a status line driven byuseWaitForTransactionReceipt.
Acceptance criteria
- Connecting shows the account; disconnecting hides the form.
- Sending validates the address and amount before enabling the button.
- The button shows "confirm in wallet", then "sending", then success or a clear failure — the three states from track 6.
- On success, the recipient's balance visibly increases.
Check
This capstone has no smart contract. What is it actually testing that you can do?
Worth remembering
- Capstone 1, full scaffolding: starter repo, file-by-file TODOs, tests visible.
- A pure-frontend send-ETH page — no contract, on purpose.
- Proves the connect → send → wait-for-receipt loop before contracts are added.
- Acceptance: three-state button, validated inputs, visible balance change.