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:

  1. Transferencia: Entre cuentas, verificar saldos, monto cero y máximo
  2. Aprobación: approve y transferFrom, verificar allowances
  3. Edge cases: Dirección cero, más que saldo, overflow
  4. Control de acceso: Solo autorizados pueden mint/burn
  5. 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

  1. Testea en mainnet forkeada — testnets no replican interacciones reales
  2. Audita antes de desplegar — bugs permanentes
  3. Testea gas bajo congestión — transacciones pueden volverse prohibitivas
  4. Verifica detalles de transacción mostrados — phishing explota displays engañosos
  5. Testea múltiples wallets — flujos diferentes

Conclusiones Clave

  1. La inmutabilidad hace el testing pre-despliegue más crítico que en cualquier otro dominio
  2. Testing de seguridad es la prioridad máxima
  3. Testing de dApp debe cubrir wallet, ciclo de transacción y estado blockchain
  4. Optimización de gas previene fallos y costos excesivos