Preguntas de Entrevista: Blockchain
Esta lección recopila las preguntas técnicas más frecuentes en entrevistas para roles de Blockchain Developer, Smart Contract Engineer y Web3 Developer. Cada respuesta incluye la profundidad que los entrevistadores esperan.
Fundamentos de Blockchain
¿Qué es una blockchain y en qué se diferencia de una base de datos tradicional?
Una blockchain es un registro distribuido, inmutable y descentralizado donde los datos se almacenan en bloques enlazados criptográficamente. A diferencia de una base de datos centralizada: no tiene un administrador único, los datos no se pueden modificar retroactivamente, cualquier nodo puede verificar la integridad, y el consenso se logra mediante algoritmos como PoW o PoS, no por confianza en una autoridad.
Explica cómo funciona el hashing y su rol en blockchain.
Las funciones hash (SHA-256 en Bitcoin, Keccak-256 en Ethereum) toman inputs de cualquier tamaño y producen outputs de tamaño fijo. Son deterministas, unidireccionales y resistentes a colisiones. En blockchain se usan para: enlazar bloques (cada bloque contiene el hash del anterior), construir árboles Merkle (verificación eficiente de transacciones), generar direcciones (hash de clave pública) y proof of work (encontrar un hash menor al target).
¿Cuál es la diferencia entre Proof of Work y Proof of Stake?
PoW requiere que los mineros resuelvan puzzles computacionales (encontrar un nonce cuyo hash sea menor al target), consumiendo energía como prueba de trabajo honesto. PoS reemplaza la energía por capital: los validadores bloquean tokens como garantía, y son seleccionados para proponer bloques proporcionalmente a su stake. PoS consume 99.95% menos energía, pero introduce riesgos como "nothing at stake" (mitigado con slashing).
Ethereum y EVM
¿Qué es la EVM y por qué es importante?
La Ethereum Virtual Machine es una máquina de stack de 256 bits, determinista, aislada y gas-metered. Es el entorno de ejecución de todos los smart contracts en Ethereum y redes compatibles (Polygon, BSC, Avalanche). Su importancia reside en que garantiza que todos los nodos ejecuten el mismo código y obtengan el mismo resultado, y su diseño gas-metered previene loops infinitos y spam.
¿Cuál es la diferencia entre una EOA y un Contract Account?
Una EOA (Externally Owned Account) se controla con clave privada, puede iniciar transacciones, no tiene código y su costo de creación es cero. Un Contract Account contiene código inmutable, no puede iniciar transacciones (solo responder), tiene state storage persistente, y su creación consume gas. Las EOA interactúan con Contract Accounts enviando transacciones que ejecutan funciones del contrato.
Explica el gas en Ethereum. ¿Qué es EIP-1559?
El gas es la unidad que mide el costo computacional de operaciones en la EVM. Cada opcode tiene un costo fijo (ADD=3, SSTORE=20000, etc.). EIP-1559 introdujo un modelo de fees con base fee (ajustado automáticamente por el protocolo y quemado) + priority fee (tip al validador). Esto hace los fees más predecibles y reduce la oferta de ETH mediante el mecanismo de quema.
Solidity
¿Cuál es la diferencia entre storage, memory y calldata?
storage es persistente en la blockchain (como un disco duro del contrato), es caro de leer y escribir. memory es temporal, existe solo durante la ejecución de una función, y es más barata. calldata es especial: es de solo lectura, contiene los datos de input de funciones external, y es la opción más barata porque los datos no se copian.
¿Qué es el patrón Checks-Effects-Interactions y por qué es importante?
CEI ordena el código de una función en tres pasos: primero Checks (validar condiciones con require), luego Effects (actualizar el estado del contrato), y por último Interactions (llamar a contratos externos). Este orden previene ataques de reentrancy porque el estado ya está actualizado antes de que un contrato externo pueda re-entrar. El DAO hack de $60M fue posible porque la interacción ocurría antes del efecto.
¿Cuál es la diferencia entre require, revert y assert?
require se usa para validar inputs y condiciones previas; si falla, revierte y devuelve el gas no usado. revert es equivalente a require pero permite custom errors más eficientes en gas. assert verifica invariantes que nunca deberían fallar; históricamente consumía todo el gas (ahora también devuelve el sobrante desde Solidity 0.8). En la práctica: require para inputs del usuario, revert con custom errors para eficiencia, y assert para bugs internos.
Explica la diferencia entre public, external, internal y private.
public: accesible desde dentro, fuera y contratos heredados. Genera un getter automático para variables de estado. external: solo accesible desde fuera del contrato (más eficiente en gas para funciones que reciben arrays grandes porque usa calldata). internal: accesible desde el contrato y herederos, no desde fuera. private: solo accesible desde el contrato donde se define, no herederos. Nota: "private" en Solidity no significa secreto; todo en la blockchain es público.
¿Cómo funcionan los eventos y para qué se usan?
Los eventos escriben datos en los logs de la transacción (no en storage), lo que es significativamente más barato. Se emiten con emit y los parámetros indexed permiten filtrar eficientemente. Las DApps los escuchan con contract.on("EventName", callback). Se usan para: notificar al frontend de cambios, crear historial auditable de acciones, y permitir indexación off-chain (The Graph).
Tokens y Estándares
Explica el flujo approve + transferFrom de ERC-20.
El flujo permite a contratos terceros mover tokens del usuario. Primero, el usuario llama approve(spender, amount) autorizando al spender. Luego, el spender (típicamente un contrato DeFi) llama transferFrom(owner, recipient, amount) para mover los tokens. Es necesario porque un contrato no puede ejecutar funciones en nombre del usuario directamente; necesita autorización previa.
¿Qué diferencias hay entre ERC-20, ERC-721 y ERC-1155?
ERC-20 define tokens fungibles (cada token es idéntico e intercambiable, como USDT). ERC-721 define tokens no fungibles (cada token tiene un tokenId único, como un NFT de arte). ERC-1155 es un multi-token standard que combina fungibles y no fungibles en un solo contrato, más eficiente para gaming (monedas + items únicos). ERC-1155 también permite batch transfers, reduciendo gas.
Seguridad
¿Qué es un ataque de reentrancy y cómo se previene?
Ocurre cuando un contrato externo re-entra a una función antes de que ésta actualice su estado. Ejemplo clásico: un contrato envía ETH al atacante, cuyo receive() llama de vuelta a la función de retiro antes de que el balance se actualice. Prevención: 1) Patrón CEI (actualizar estado antes de interactuar), 2) Mutex/ReentrancyGuard (variable locked que previene re-entrada), 3) Usar transfer() que limita a 2300 gas (insuficiente para re-entrar, aunque no es la mejor práctica por compatibilidad con EIP-2929).
¿Qué es un flash loan attack? ¿Los flash loans son inherentemente malos?
Los flash loans permiten tomar préstamos sin colateral dentro de una sola transacción. No son inherentemente malos; el ataque ocurre cuando se usan para manipular precios de oráculos o explotar lógica vulnerable en otros contratos. Por ejemplo: pedir prestados millones, mover el precio en un DEX, explotar un contrato que usa ese precio, devolver el préstamo. Mitigación: usar oráculos resistentes (TWAP, Chainlink), no depender de balances de pool como precio.
DeFi
¿Cómo funciona un AMM (Automated Market Maker)?
Un AMM reemplaza el order book con pools de liquidez y una fórmula matemática. Uniswap usa x * y = k donde x e y son las cantidades de dos tokens en el pool. Cuando alguien compra token A, deposita token B, cambiando las proporciones del pool y por tanto el precio. Los Liquidity Providers depositan tokens en el pool y ganan fees de cada swap. El riesgo principal es impermanent loss cuando el precio diverge significativamente.
¿Qué es impermanent loss?
Impermanent loss es la pérdida que sufre un LP comparado con simplemente holdear los tokens. Si el precio relativo de los tokens en el pool cambia, el AMM rebalancea automáticamente (vendiendo el que sube, comprando el que baja). Si el precio diverge 2x, el IL es ~5.7%. Es "impermanente" porque desaparece si el precio vuelve al original. Los fees del pool deben superar el IL para que ser LP sea rentable.
Web3 y DApps
¿Cuál es la diferencia entre un Provider y un Signer en Ethers.js?
Un Provider es una conexión de solo lectura a la blockchain: puede consultar balances, bloques, transacciones y llamar funciones view/pure. Un Signer extiende al Provider con capacidad de firma: puede enviar transacciones y modificar el estado de la blockchain. En una DApp, el Provider viene de Alchemy/Infura para lectura, y el Signer viene de MetaMask para que el usuario firme transacciones.
¿Cómo harías un contrato upgradeable?
Usando el patrón Proxy: un contrato Proxy (que almacena el estado) delega las llamadas a un contrato de Implementación (que contiene la lógica) usando delegatecall. Para "actualizar", se despliega una nueva Implementación y se actualiza la referencia en el Proxy. Patrones populares: Transparent Proxy (distinción entre admin y usuarios), UUPS (upgrade logic en la implementación). OpenZeppelin Upgrades simplifica todo el proceso. Cuidado: la implementación V2 debe respetar el storage layout de V1.
Preguntas de Diseño
Diseña un sistema de votación en blockchain
Componentes: contrato de Governance con proposals, un token ERC-20 para voting power, timelock para ejecución. El flujo: crear proposal → periodo de votación → quorum check → timelock → ejecución. Consideraciones: snapshot del balance para evitar transferencias durante la votación, delegación de votos, protección contra flash loan governance attacks, y transparencia total del proceso on-chain.
¿Cómo escalarías una DApp con alto tráfico?
Usar Layer 2 (Optimism, Arbitrum) para transacciones frecuentes con menor costo. Implementar The Graph para indexación off-chain de eventos. Usar Multicall para batch de lecturas. Cachear datos que no cambian frecuentemente. WebSocket providers para eventos en tiempo real. Considerar soluciones híbridas donde solo los datos críticos van on-chain y el resto se mantiene off-chain con pruebas criptográficas.
Resumen
Las entrevistas de blockchain evalúan fundamentos (hash, consenso, criptografía), Solidity (storage, visibilidad, patrones), seguridad (reentrancy, CEI, auditoría), tokens (ERC-20/721/1155), DeFi (AMM, lending, flash loans), y arquitectura (proxies, escalabilidad, diseño de sistemas). La clave es demostrar comprensión profunda de las tradeoffs y las implicaciones de seguridad.