Manual técnico · ChallengePool / OtterPot

Para desarrollo, depuración y demo. Datos de contratos desde .env.local / config — no inventamos ABI.

1. Objetivo

Usuario → MetaMask → Arbitrum Sepolia
         → USDC → ChallengePool → resultado

Fuente de verdad del dinero = blockchain. Firebase = índice / UI / perfiles.

2. Redes

ElementoArb Sepolia
Chain ID421614
ChallengePool
Gas del poolETH Arb Sepolia

Para ejecutar ChallengePool debes estar en Arbitrum Sepolia.

3. Contratos (reales del proyecto)

Pool: 0x7f02be32247ca5c32468d69ef059e4a9114e56d4

USDC: 0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d · decimals 6

4. Approve → Deposit

1) balanceOf(user)
2) allowance(user, pool)
3) si falta → USDC.approve(pool, amount)  // amount = parseUsdc(human)
4) wait receipt
5) ChallengePool.deposit(challengeId)
6) verificar hash en Arbiscan

Frontend: parseUsdc / formatUsdc con 6 decimales fijos. Hooks: useChallengePool, useUsdcBalance.

5. Troubleshooting

Insufficient fundsFalta ETH gasFaucet Arb Sepolia
Wrong networkChain ≠ 421614switchChain
User rejectedCanceló MMReintentar
USDC raroDecimals ≠ 6Reimportar token
Deposit revertAllowance/estadoVer eventos / ABI

6. Checklist demo (2–3 min)

  • Problema / solución
  • Conectar wallet · Chain 421614
  • Mostrar ETH + USDC (6 dec)
  • Crear o abrir reto
  • Approve → Deposit
  • Hash en Arbiscan
  • Firebase índice (no custodia)

Arquitectura

Next.js → RainbowKit/wagmi/viem
        → Arbitrum Sepolia
        → USDC + ChallengePool (+ Treasury)
Firebase RTDB → users / challenges / activity
Worker Telegram → orquestación (sin firmar por el user)