Blockchain · Tarea de clase 3 — dApp en Vercel + onramp testnet
Plazo: antes de clase 4 (sábado 30/05).
Pre-requisito: la clase 3 completa — proyecto Next.js + wagmi + RainbowKit,
TestnetOnramp.solyMockUSDC.sollistos.
Qué hay que entregar
Antes del próximo sábado, en el campus, en su repo:
- dApp deployada en Vercel (URL pública), con:
- Connect wallet funcionando.
- Form de pago con
approve+paycompletos. - Feed de eventos
Paiden vivo (useWatchContractEvent).
TestnetOnramp+MockUSDCdeployados y verificados en Sepolia (links a Etherscan de ambos).PaymentGatewayredeployado apuntando alMockUSDC(no al de Circle), para que el ciclo cierre solo dentro de la dApp.- Video de 90 segundos mostrando: connect → comprar 50 mUSDC con tarjeta → approve → pay → ver evento. Súbanlo al campus.
Lo que no hace falta esta semana: estilos lindos, mobile responsive, multi-cuenta. Eso lo pulen en la semana de clase 4.
Cómo probar que está bien
Checklist de aceptación:
-
- Muestra un spinner falso 1.5s (simulación de card flow).
- Llama
buyWithCard()convalue: parseEther('0.05'). - Termina en “✅ 50 mUSDC en tu wallet”.
Si algo falla
| Síntoma | Probable causa | Fix |
|---|---|---|
WalletConnect Project ID is not valid |
Variable mal pegada en .env.local |
Verificá con echo $NEXT_PUBLIC_WC_PROJECT_ID, reiniciá
npm run dev |
| RainbowKit no abre el modal | Falta import '@rainbow-me/rainbowkit/styles.css' |
Agregalo en providers.tsx |
| MetaMask dice “Wrong network” | Wallet en mainnet o Goerli | Click en el botón rojo de RainbowKit → “Switch network” |
pay revierte con transfer failed |
No hiciste approve antes, o approve por menos |
El UI tiene que mostrar “Approve” antes que “Pay” |
pay revierte con amount=0 |
parseUnits recibió string vacío |
Validá amount > 0 antes del click |
| El feed de eventos no muestra nada | RPC público con rate limit | Cambiá a un RPC de Alchemy (free tier alcanza) |
| Vercel build falla con “process is not defined” | Variable sin prefijo NEXT_PUBLIC_ |
Todas las vars que usa el browser tienen que
arrancar con NEXT_PUBLIC_ |
parseUnits da número raro |
USDC tiene 6 decimales, no 18 | Usá parseUnits(x, 6), no
parseEther(x) |
useWatchContractEvent no dispara |
Address de contrato mal | Verificá NEXT_PUBLIC_PAYGW_ADDRESS y reiniciá |
Onramp revierte con OwnableUnauthorizedAccount |
Olvidaste transferOwnership del MockUSDC al onramp |
Re-deploy con el script que sí lo hace |