Universidad Nacional de Luján
Departamento de Ciencias Básicas
Seminario de Integración Profesional 2026 Dr. David Petrocelli
📑 Índice del documento

Blockchain · Tarea de clase 4 — Entregable final del módulo

Plazo: antes del cierre del SIP 2026 (la fecha exacta del TP final la define el cronograma del seminario).

Pre-requisito: las clases 1, 2, 3 y 4 completas. Tienen el stack: PaymentGateway + ERC-20 propio + ERC-721 Set Bonus + frontend en Vercel.


Qué hay que entregar

1. Repo en GitHub

Estructura mínima:

.
├── contracts/        # los 4 contratos
│   ├── PaymentGateway.sol
│   ├── ProjectToken.sol      # tu ERC-20 ($VBK / $DPF / $RNW / $IDEA)
│   ├── SetBonusNFT.sol       # ERC-721 con piezas + rareza
│   └── TierRegistry.sol      # SBT con tier del usuario
├── frontend/         # Next.js + wagmi conectado al stack
├── test/             # tests Foundry
│   ├── PaymentGateway.t.sol
│   ├── SetBonusNFT.t.sol
│   └── …
├── SECURITY.md       # output de Slither + findings aceptados
└── README.md         # addresses en testnet, pasos para correr

Requisitos de los tests:

2. Demo en vivo (5 min en clase)

Tienen que mostrar:

3. Defensa (5 min)


Cómo probar que está bien

Checklist de aceptación — usenlo como checklist antes de subir el TP:

Contratos

Slither

Deploy

Frontend

Tokenomics + gamification

Defensa


Criterios de evaluación (alineados con el SIP)

Criterio Peso
Contratos compilan + pasan tests 25%
Tokenomics coherente con el proyecto + documentada 20%
Frontend conecta y ejecuta el flow completo 20%
Slither limpio + SECURITY.md honesto 15%
Set Bonus funcional + visualizable 10%
Demo + defensa 10%

Si algo falla

Síntoma Probable causa Fix
slither: command not found No está en PATH pip install --user slither-analyzer y agregar ~/.local/bin al PATH
slither falla con “Source not found” Foundry layout no detectado slither . --foundry-out-directory out o slither src/
solc not installed for 0.8.24 Versión no instalada solc-select install 0.8.24 && solc-select use 0.8.24
_safeMint revierte en fuzz tests Foundry envía a addresses que no implementan onERC721Received Usar _mint (sin “safe”) o filtrar to con vm.assume(to.code.length == 0)
nonReentrant revierte llamadas válidas Estás llamando dos funciones nonReentrant en la misma tx Mover lógica interna a función private (sin guard)
El Set Bonus siempre da el mismo slot entropy no incluye block.prevrandao o nonce Agregar block.prevrandao y un nonce que se incremente
Slither marca unchecked-transfer en USDT USDT real no devuelve bool Usar SafeERC20.safeTransferFrom (OpenZeppelin)
forge create en Polygon Amoy revierte Faucet de Amoy escaso Probar https://faucet.polygon.technology o pedir en el foro del campus
Frontend no muestra la pieza NFT El RPC no devolvió tokenURI aún (cache) Esperar 30 s, o invalidar query con queryClient.invalidateQueries
Dividendos claim() devuelve 0 El distribute fue antes de tu compra Es correcto — el accPerShare solo cuenta hacia adelante. Ese es el patrón.

Lo demás, foro del campus.


Volver