Arquitectura Blockchain para QA
Blockchain es un libro mayor distribuido e inmutable. Los bugs son permanentes — una vez confirmada, una transacción no puede revertirse.
Componentes Centrales
- Nodos: Mantienen copias del blockchain y validan transacciones
- Mecanismo de Consenso: Proof of Work, Proof of Stake
- Contratos Inteligentes: Programas auto-ejecutables (Solidity para Ethereum)
- Wallets: Gestión de claves criptográficas y firma de transacciones
- dApps: Aplicaciones descentralizadas
Testing de Contratos Inteligentes
Vulnerabilidades Comunes
- Reentrancy: Llamadas externas antes de actualizar estado
- Overflow de enteros: Errores aritméticos en cálculos de tokens
- Control de acceso: Verificaciones de permisos faltantes
- Front-running: Reordenamiento de transacciones por mineros
- Flash loan attacks: Manipulación de mercados con préstamos instantáneos
Herramientas
- Hardhat/Foundry: Frameworks con testing integrado
- Slither: Análisis estático para Solidity
- Echidna: Fuzzing para contratos
Testing de Frontend dApp
- Conexión de wallet (MetaMask, WalletConnect)
- Firma de transacciones — verificar detalles mostrados
- Cambio de cadena entre redes
- Manejo de errores (gas insuficiente, rechazos)
- Actualización de UI tras confirmación de bloque
graph LR
A[Acción Usuario] --> B[Frontend dApp]
B --> C[Firma en Wallet]
C --> D[Red Blockchain]
D --> E[Ejecución Contrato]
E --> F[Cambio de Estado]
F --> G[Emisión de Evento]
G --> B
Testing Avanzado
Testnet vs. Mainnet
- Siempre testear en testnets primero
- Fork mainnet para testing realista
- Testear precisión de estimación de gas
Auditoría de Seguridad
- Verificación formal de lógica crítica
- Testing de invariantes
- Simulación de ataques económicos
- Testing de mecanismos de upgrade (proxy patterns)
Ejercicio Práctico
Diseña un plan de testing para un token ERC-20:
- Transferencia: Entre cuentas, verificar saldos, monto cero y máximo
- Aprobación: approve y transferFrom, verificar allowances
- Edge cases: Dirección cero, más que saldo, overflow
- Control de acceso: Solo autorizados pueden mint/burn
- Gas: Medir consumo para operaciones comunes
Guía de Solución
- Transferir 100 tokens: saldo A -100, B +100, supply sin cambio
- Transferir más que saldo: debe revertir
- Reentrancy: callback durante transferencia no debe permitir doble gasto
Tips Profesionales
- Testea en mainnet forkeada — testnets no replican interacciones reales
- Audita antes de desplegar — bugs permanentes
- Testea gas bajo congestión — transacciones pueden volverse prohibitivas
- Verifica detalles de transacción mostrados — phishing explota displays engañosos
- Testea múltiples wallets — flujos diferentes
Conclusiones Clave
- La inmutabilidad hace el testing pre-despliegue más crítico que en cualquier otro dominio
- Testing de seguridad es la prioridad máxima
- Testing de dApp debe cubrir wallet, ciclo de transacción y estado blockchain
- Optimización de gas previene fallos y costos excesivos