NEXALO Docs
Arquitectura, Contratos y Seguridad del Protocolo
BNB Smart Chain · Solidity 0.8.20 · Auditoría Completa
1. Arquitectura del Sistema
NEXALO es un ecosistema de 8 contratos inteligentes interconectados desplegados en BNB Smart Chain (BSC). Todos los contratos están compilados con Solidity 0.8.20 usando la opción via-ir y el optimizador a 200 runs.
┌─────────────────────────────────────────────────┐
│ NexumManager │
│ (Core — VRFConsumerBaseV2) │
│ ┌─────────┬──────────┬──────────┬────────────┐ │
│ │ Products│ Rounds │ VRF │ Settlement │ │
│ │ (6) │ (state) │ (rand) │ (auto) │ │
│ └────┬────┴────┬─────┴────┬────┴─────┬──────┘ │
└───────┼─────────┼──────────┼──────────┼──────────┘
│ │ │ │
┌────▼───┐ ┌──▼─────┐ ┌─▼──────┐ ┌─▼──────────┐
│NXLToken│ │Referral│ │Treasury│ │Ambassador │
│(ERC20) │ │Network │ │ BTC │ │ Registry │
└────────┘ └────────┘ └────────┘ └────────────┘
│ │
┌────▼───┐ ┌───▼────┐
│Staking │ │Buyback │
│(WBTC) │ │Contract│
└────────┘ └────────┘
Cada contrato tiene una responsabilidad única (Single Responsibility Principle) y se comunica con los demás a través de interfaces definidas. El NexumManager es el hub central que orquesta la lógica de lotería, distribución de fondos y settlement.
2. Contratos Inteligentes
Todos los contratos heredan de OpenZeppelin v5 y siguen las mejores prácticas de seguridad:
| Contrato | Herencia | Función |
|---|---|---|
| NXLToken | ERC20, Ownable2Step | Token deflacionario con rewards pool |
| NexumManager | VRFConsumerBaseV2, Ownable2Step, ReentrancyGuard | Core de lotería, 6 productos, settlement |
| ReferralNetwork | Ownable2Step, ReentrancyGuard | Referidos multinivel (3 niveles) |
| TreasuryBTC | Ownable2Step, ReentrancyGuard | Tesorería DAO en WBTC |
| AmbassadorRegistry | Ownable2Step, ReentrancyGuard | Registro y pago de embajadores |
| BuybackContract | Ownable2Step, ReentrancyGuard | Recompra automática de NXL |
| NexaloStaking | Ownable2Step, ReentrancyGuard | Staking NXL con rewards WBTC |
| DonationVault | Ownable2Step | Vault de donaciones e impacto social |
3. NXLToken — Token Deflacionario
NXLToken es un ERC-20 con supply fijo de 100,000,000 NXL y mecanismos de vesting integrados.
Distribución Inicial
Funciones Clave
// Solo NexumManager puede distribuir rewards
function distributeReward(address to, uint256 amount) external onlyNexumManager
// setNexumManager solo se puede llamar UNA vez
function setNexumManager(address _mgr) external onlyOwner
// Vesting lineal con cliff
function claimFounderVesting() external // Solo founder, lineal 2 años
function claimPartnerVesting() external // Solo partner, lineal 1 año
// Checkpoints para snapshot de balances (votación/DAO futuro)
function _afterTokenTransfer() // actualiza checkpoints automáticamentePropiedades Formalmente Verificadas (Halmos)
4. NexumManager — Core de Lotería
El contrato más complejo del ecosistema. Gestiona 6 productos de lotería con rondas independientes, cada uno con su propio pool de premios y configuración de tickets.
Productos (Nexums)
| ID | Nombre | Precio | Tickets | Jackpot | NXL/ticket |
|---|---|---|---|---|---|
| 0 | ⚡ FLASH | $1 | 1,000 | $500 | 0.10 |
| 1 | 🎯 ORIGINAL | $1 | 10,000 | $5,000 | 0.25 |
| 2 | 💎 PREMIUM | $20 | 1,000 | $10,000 | 0.50 |
| 3 | 🚀 ELITE | $10 | 10,000 | $50,000 | 0.55 |
| 4 | 👑 VIP | $200 | 1,000 | $100,000 | 0.85 |
| 5 | 🌟 BLACKBLOK | $200 | 10,000 | $1,000,000 | 1.00 |
Ciclo de Vida de una Ronda
1. OPEN → Usuarios compran tickets (buyTickets)
2. FUNDED → Liquidez completa, se solicita VRF
3. VRF_SENT → Esperando número aleatorio de Chainlink
4. SETTLING → Distribuyendo premios (settlement en chunks)
5. SETTLED → Ronda cerrada, nueva ronda abre automáticamente
// Función principal de compra
function buyTickets(
uint256 productId, // 0-5
uint256[] ticketNums, // números elegidos
address referrer // address(0) si sin referido
) external nonReentrant5. Sistema de Distribución Automática
Cuando una ronda se completa, el 100% de los fondos se distribuye automáticamente según reglas fijas e inmutables:
La distribución es atómica — ocurre en la misma transacción que el settlement. No hay intermediarios, delays, ni custodia manual de fondos.
6. Chainlink VRF — Aleatoriedad Verificable
NEXALO utiliza Chainlink VRF v2 para generar números aleatorios criptográficamente verificables. Esto garantiza que nadie — ni el equipo, ni los mineros, ni Chainlink — puede predecir o manipular el resultado.
// Solicitud VRF (automática cuando ronda completa)
function requestRandomWords() internal {
VRFCoordinatorV2Interface(vrfCoordinator)
.requestRandomWords(
keyHash, // BSC VRF key
subscriptionId, // Chainlink subscription
3, // confirmaciones
500000, // gas limit callback
1 // 1 palabra aleatoria
);
}
// Callback de Chainlink (solo el Coordinator puede llamar)
function fulfillRandomWords(
uint256 requestId,
uint256[] memory randomWords
) internal override {
// Selección de ganador: randomWord % totalTickets
// Settlement automático
}El timeout VRF protege contra fallos del oráculo: si Chainlink no responde en el tiempo configurado, el owner puede re-solicitar o manejar la ronda. Tras finalizeAutonomy(), esta protección opera sin intervención.
7. Sistema de Referidos (ReferralNetwork)
Sistema de referidos de 3 niveles con protecciones anti-gaming:
Protecciones integradas: anti-ciclos (A→B→C→A no permitido), un solo referrer por usuario, validación de zero address, y pagos automáticos en USDT en el mismo bloque de la compra.
8. Tesorería Bitcoin (TreasuryBTC)
El 10% de cada ticket alimenta un fondo DAO que acumula USDT para convertir en WBTC. Los holders de NXL pueden redimir sus tokens por WBTC proporcionalmente durante ventanas de redención anuales.
// Estrategias DeFi integradas
interface IYieldStrategy {
function deposit(uint256 amount) external;
function withdraw(uint256 amount) external;
function totalDeposited() view returns (uint256);
function harvest() external returns (uint256);
}
// Implementaciones:
// - AaveStrategy: Lending en Aave v3
// - VenusStrategy: Lending en Venus Protocol9. NexaloStaking
Los usuarios pueden hacer stake de NXL y recibir rendimientos en WBTC provenientes de la tesorería. El contrato usa ReentrancyGuard y Ownable2Step para máxima seguridad.
10. Seguridad y Auditoría
El protocolo ha pasado por un pipeline de seguridad exhaustivo con 6 herramientas profesionales:
| Herramienta | Tipo | Resultado | Ejecuciones |
|---|---|---|---|
| Slither | Análisis Estático | 0 exploitables | 201 checks |
| Hardhat | Unit Tests | 88/88 pass | 88 |
| Foundry | Fuzz Testing | 19/19 × 1,000 iter | 19,000 |
| Echidna | Property Fuzzing | 5/5 holding | 100,201 |
| Mythril | Symbolic Execution | 7/7 contracts, 0 issues | 7 |
| Halmos | Formal Verification | 4/4 proven ∀ inputs | ∞ |
11. Medidas de Seguridad Implementadas
12. Guía de Integración
Para interactuar con el protocolo desde tu dApp o script:
Instalar dependencias
npm install ethers@6 wagmi viem @reown/appkitComprar tickets
import { parseUnits } from 'viem';
// 1. Approve USDT para NexumManager
await usdtContract.write.approve([
NEXUM_MANAGER_ADDRESS,
parseUnits('10', 18) // 10 USDT
]);
// 2. Comprar tickets
await nexumManager.write.buyTickets([
0, // productId: FLASH
[42, 100, 777], // ticket numbers
referrerAddress // o address(0) si no hay referido
]);Consultar estado de ronda
// Obtener información de ronda actual
const round = await nexumManager.read.getCurrentRound([productId]);
// Returns: { roundId, ticketsSold, totalFunded, status, winner, ... }
// Verificar si un ticket ganó
const isWinner = await nexumManager.read.isWinner([
productId, roundId, ticketNumber
]);Claim de premios
// El ganador reclama su premio
await nexumManager.write.claimPrize([productId, roundId]);
// Verificar balance de premios pendientes
const pending = await nexumManager.read.getPendingPrize([
userAddress, productId, roundId
]);