Un programa en la blockchain
Un smart contract es un programa almacenado en una blockchain que se ejecuta automáticamente cuando se cumplen condiciones predefinidas. El término fue acuñado por el informático Nick Szabo en 1994, pero el concepto solo se volvió práctico con el lanzamiento de Ethereum en 2015.
La analogía más sencilla es una máquina expendedora. Introduces dinero, presionas un botón y la máquina dispensa tu producto. No hay negociación, no hay intermediarios, no se necesita confianza. La máquina sigue su programación cada vez. Un smart contract funciona de la misma manera, excepto que se ejecuta en una blockchain donde miles de computadoras verifican que el código se ejecutó correctamente.
Lo que hace que esto sea poderoso es la combinación de automatización y confianza. Un smart contract no puede decidir cambiar sus reglas a mitad de una transacción. No puede favorecer a nadie. No puede ser sobornado. Se ejecuta exactamente como fue escrito, y el resultado se registra permanentemente en un libro contable público que cualquiera puede verificar.
Cómo funcionan los smart contracts
El ciclo de vida de un smart contract tiene varias etapas:
- Escritura. Un desarrollador escribe la lógica del contrato en un lenguaje de programación (comúnmente Solidity para Ethereum). El código define lo que hace el contrato: aceptar depósitos, ejecutar intercambios, emitir tokens, gestionar votaciones.
- Despliegue. El código compilado se envía a la blockchain en una transacción especial. Una vez desplegado, el contrato tiene su propia dirección —al igual que una wallet— y vive en la blockchain permanentemente.
- Interacción. Los usuarios y otros contratos envían transacciones a la dirección del contrato. Cada transacción activa una función en el código. Por ejemplo, llamar a la función "swap" en Uniswap envía tokens y recibe otros tokens a cambio.
- Ejecución. Los validadores de la red (o mineros, en cadenas Proof of Work) ejecutan el código del contrato. Miles de computadoras independientes ejecutan el mismo cálculo y verifican que todas obtengan el mismo resultado. Esto es lo que hace que la ejecución sea confiable: ninguna parte puede falsificar el resultado.
- Cambio de estado. El resultado de la ejecución se registra en la blockchain. Los saldos se actualizan, los tokens se mueven, los registros cambian. El nuevo estado es permanente y transparente.
Qué hacen los smart contracts en la práctica
Casi todo en cripto más allá de las simples transferencias de Bitcoin está impulsado por smart contracts. Aquí están las categorías principales:
Gestión de tokens
Cada token ERC-20 (USDC, UNI, LINK, AAVE) es un smart contract. El contrato rastrea el saldo de cada poseedor y procesa cada transferencia. Cuando "tienes" USDC, lo que realmente tienes es una entrada de saldo en el smart contract de USDC.
Trading descentralizado
Uniswap, Curve y otros DEX son smart contracts que mantienen pools de tokens y ejecutan intercambios utilizando fórmulas matemáticas. Sin libro de órdenes, sin motor de emparejamiento, sin operador de exchange: solo código.
Préstamos y créditos
Protocolos como Aave y Compound son smart contracts que aceptan depósitos, rastrean las tasas de interés algorítmicamente y gestionan la garantía. Las liquidaciones ocurren automáticamente cuando las posiciones pierden su colateralización.
Gobernanza
Los contratos de gobernanza de las DAO gestionan propuestas, votaciones y el gasto de la tesorería. Los poseedores de tokens votan on-chain y, si una propuesta es aprobada, el contrato puede ejecutar la acción aprobada sin ningún intermediario humano.
Staking
Los contratos de staking bloquean tokens y distribuyen recompensas. Los protocolos de liquid staking como Lido utilizan smart contracts para agrupar depósitos de usuarios, gestionar validadores y emitir tokens de liquid staking (stETH) a cambio.
Contratos inmutables vs. actualizables
Esta es una de las distinciones más importantes en la seguridad de los smart contracts, y merece una atención cuidadosa.
Los contratos inmutables no pueden cambiarse después del despliegue. El código es permanente. Ningún administrador, ningún equipo, ninguna votación de gobernanza puede modificarlo. Uniswap V2 y Liquity V1 son ejemplos: una vez desplegados, funcionan exactamente como fueron escritos hasta que la propia blockchain de Ethereum deje de funcionar. Esto proporciona la mayor garantía de confianza posible: puedes verificar el código hoy y saber que se comportará de la misma manera para siempre.
Los contratos actualizables utilizan un patrón de diseño llamado "proxy". Los usuarios interactúan con un contrato proxy que delega las llamadas a un contrato de implementación separado. Un administrador (generalmente una wallet multisig controlada por el equipo del protocolo) puede cambiar el contrato de implementación, cambiando efectivamente la lógica con la que interactúan los usuarios. Esto permite a los equipos corregir errores y añadir funciones, pero también significa que el administrador puede cambiar las reglas.
El compromiso es claro:
- Contratos inmutables: máxima confianza, pero los errores nunca se pueden corregir. Si hay una vulnerabilidad, la única opción es desplegar un nuevo contrato y pedir a los usuarios que migren.
- Contratos actualizables: flexibilidad para solucionar problemas, pero los usuarios deben confiar en que el administrador no realizará cambios maliciosos. Una clave de administrador comprometida significa un protocolo comprometido.
La mayoría de los principales protocolos DeFi utilizan alguna forma de actualizabilidad con salvaguardas: timelocks (los cambios entran en vigor después de un retraso, dando tiempo a los usuarios para salir), claves de administrador multisig (varias personas deben aprobar los cambios) y votaciones de gobernanza (los poseedores de tokens deciden sobre las actualizaciones). Pero ninguna de estas es infalible. Comprender el mecanismo de actualización de un protocolo es una parte fundamental de evaluar su riesgo.
Auditorías de smart contracts
Antes de desplegar un smart contract que contendrá un valor significativo, los equipos responsables contratan firmas de seguridad independientes para auditar el código. Una auditoría implica que investigadores de seguridad experimentados revisen el código línea por línea, prueben casos extremos e intenten encontrar vulnerabilidades antes que los atacantes.
Datos clave sobre las auditorías:
- Varias auditorías son mejores. Diferentes auditores detectan cosas diferentes. Un protocolo con tres auditorías de firmas reputadas es generalmente más seguro que uno con una sola auditoría.
- Las auditorías no son garantías. Una auditoría reduce el riesgo pero no lo elimina. Muchos protocolos hackeados habían sido auditados, a veces por varias firmas. Los auditores encuentran algunos errores, no todos.
- El alcance importa. Una auditoría de los contratos principales no cubre contratos periféricos, integraciones de oráculos o configuraciones de despliegue. Los ataques a menudo explotan las brechas entre los componentes auditados.
- Los cambios post-auditoría invalidan las auditorías. Si un equipo modifica el código después de una auditoría, la auditoría ya no se aplica al código modificado. Esta es una fuente común de vulnerabilidades.
Transparencia de código abierto
La mayoría de los smart contracts DeFi son de código abierto: el código se publica en exploradores de bloques como Etherscan, y cualquiera puede leerlo, verificarlo y analizarlo. Esta transparencia es una característica fundamental del ecosistema. No tienes que confiar en el marketing de un equipo; puedes leer su código.
En la práctica, la mayoría de los usuarios no pueden leer código Solidity, y eso está bien. Lo que importa es que los investigadores de seguridad, auditores, equipos competidores y la comunidad de desarrolladores en general puedan leerlo. Esto crea una capa de verificación colectiva de la que carecen los sistemas financieros centralizados. Cuando el código de un protocolo ha estado activo y es de código abierto durante años sin ser explotado, esa es una evidencia significativa (aunque no una prueba) de seguridad.
Riesgos de los smart contracts
Se han perdido miles de millones de dólares debido a vulnerabilidades en smart contracts. Los vectores de ataque más comunes incluyen:
- Reentrancy (Reentrada). El contrato de un atacante vuelve a llamar al contrato víctima antes de que se complete la primera ejecución, drenando fondos repetidamente. El hackeo de The DAO en 2016 ($60 millones) utilizó esta técnica. Las mejores prácticas modernas y los guardias de reentrada han hecho que esto sea menos común, pero todavía aparece.
- Manipulación de oráculos. Los smart contracts que dependen de fuentes de precios (oráculos) pueden ser explotados si un atacante manipula los datos de precios. Los ataques de préstamos flash (flash loans) a menudo funcionan distorsionando temporalmente los precios en un DEX que el contrato víctima utiliza como su oráculo.
- Errores de lógica. Errores de programación simples (matemáticas incorrectas, falta de controles de acceso, transiciones de estado defectuosas) que permiten a los atacantes extraer valor de formas que los desarrolladores no previeron.
- Compromiso de clave de administrador. Si se roba la clave privada que controla un contrato actualizable, el atacante puede actualizar el contrato para drenar todos los fondos. Es por esto que las claves de administrador deben estar protegidas por wallets multisig y timelocks.
- Ataques de actualización. Un equipo malicioso o comprometido impulsa una actualización de contrato que incluye una puerta trasera. Los timelocks ayudan al dar a los usuarios una ventana para retirar antes de que la actualización entre en vigor.
Para obtener consejos prácticos sobre cómo protegerte, consulta nuestra guía sobre cómo mantenerse seguro en cripto.
Hackeos importantes de smart contracts
| Incidente | Cantidad perdida | Causa |
|---|---|---|
| The DAO (2016) | $60 millones | Vulnerabilidad de reentrancy |
| Ronin Bridge (2022) | $625 millones | Compromiso de clave de validador |
| Wormhole (2022) | $325 millones | Error de verificación de firma |
| Euler Finance (2023) | $197 millones | Error de lógica en función de donación |
| Curve Finance (2023) | $73 millones | Error de compilador en lenguaje Vyper |
Lenguajes de programación de smart contracts
Diferentes blockchains utilizan diferentes lenguajes para el desarrollo de smart contracts:
- Solidity -- El lenguaje dominante, utilizado en Ethereum y todas las cadenas compatibles con EVM (Arbitrum, Optimism, Base, BNB Chain, Polygon, Avalanche). Sintaxis similar a JavaScript. Tiene la comunidad de desarrolladores más grande y las herramientas más maduras.
- Rust -- Utilizado en Solana (a través del framework Anchor). Un lenguaje de programación de sistemas conocido por su seguridad de memoria y rendimiento.
- Move -- Utilizado en Aptos y Sui. Diseñado específicamente para uso en blockchain con seguridad de recursos incorporada: los tokens no pueden duplicarse ni destruirse accidentalmente.
- Cairo -- Utilizado en StarkNet. Diseñado para escribir programas demostrables que pueden verificarse utilizando pruebas de conocimiento cero (zero-knowledge proofs).
- Vyper -- Una alternativa a Solidity en Ethereum, diseñada para ser más simple y auditable. Utilizada por Curve Finance y otros protocolos.
Los smart contracts y tu portafolio
Cada vez que depositas en un protocolo DeFi, intercambias tokens en un DEX o haces staking de tus activos, estás interactuando con smart contracts. Tus tokens están en manos de estos contratos, y tus rendimientos dependen de que funcionen correctamente. Esto hace que comprender el riesgo de los smart contracts sea una necesidad práctica, no solo un ejercicio académico.
CleanSky detecta tus posiciones en protocolos DeFi (cada uno de los cuales es un conjunto de smart contracts) y te muestra dónde está tu dinero, qué está haciendo y qué protocolos lo retienen. Combinado con una comprensión de cómo funciona DeFi y los fundamentos de la blockchain, esto te da la visibilidad necesaria para tomar decisiones informadas.
Mira qué smart contracts retienen tu dinero (y qué riesgos conllevan) en todas tus wallets.