Puntos clave
- Un smart contract hace cumplir movimientos de activos on-chain, nada más. No puede obligar a nada en el mundo físico.
- El código es la ley en sentido literal: un error se ejecuta fielmente, y la inmutabilidad implica que puede ser permanente.
- La mayoría de las pérdidas se deben a errores de diseño y de control de acceso, o a datos externos defectuosos, no a una criptografía rota.
- La actualizabilidad resuelve el problema de los errores reintroduciendo una parte de confianza, lo que es una disyuntiva y no una solución.
La expresión «smart contract», o contrato inteligente, carga con mucho significado que no se ha ganado. Sugiere algo jurídico, algo inteligente, algo que vela por un acuerdo. Lo que en realidad se despliega es un programa almacenado en una blockchain que se ejecuta cuando se lo invoca y mueve activos conforme a su propio código. Entender la distancia entre el nombre y el mecanismo explica la mayor parte del riesgo.
Qué se despliega en realidad
Un smart contract es código y datos almacenados que residen en una dirección de una cadena. Cualquiera puede enviarle una transacción que llame a una de sus funciones. Cada nodo ejecuta el mismo código sobre el mismo estado y llega al mismo resultado, y eso es lo que hace que el desenlace sea verificable en lugar de confiado.
La ejecución cuesta una comisión, por lo general proporcional al trabajo computacional realizado. Esa comisión no es un detalle contable: limita cuán compleja puede ser en la práctica la lógica on-chain y empuja a los desarrolladores hacia contratos mínimos, con todo lo posible resuelto fuera de la cadena. También significa que un contrato puede fallar sencillamente porque se quedó sin presupuesto a mitad de la ejecución.
De ahí se derivan dos propiedades. La ejecución es determinista, de modo que las mismas entradas dan siempre las mismas salidas. Y en la mayoría de las cadenas el código desplegado es inmutable, de modo que lo que se despliega es lo que se ejecutará para siempre.
Qué hace cumplir realmente un smart contract
Dentro de su propia cadena, la capacidad de imposición de un contrato es muy fuerte. Puede custodiar activos y liberarlos solo cuando se cumplen las condiciones establecidas. Puede imponer un orden, de modo que el paso dos no pueda ocurrir antes del paso uno. Puede imponer reglas aritméticas, como límites de suministro o calendarios de emisión. Puede imponer control de acceso, restringiendo funciones a determinadas direcciones. Y puede hacer todo esto sin un operador que pueda cambiar de opinión.
Es una capacidad real. Un depósito en garantía que ningún intermediario puede saquear, un suministro de tokens que nadie puede inflar en silencio y la creación de mercado automatizada que funciona sin libro de órdenes son logros genuinos del modelo. El valor procede de eliminar la discrecionalidad, no de añadir inteligencia.
Qué no puede hacer
Un contrato no tiene sentidos. No puede ver llegar una entrega, ni un envío pasar la aduana, ni la prestación de un servicio. Solo conoce lo que está escrito en el estado de su cadena. Cualquier interacción con el mundo físico exige que alguien dé fe de ella, y en ese momento se está confiando en quien atestigua.
Un contrato tampoco tiene alcance. No puede embargar bienes, retener salarios ni obligar a nadie a comportarse de determinada manera. Si un acuerdo necesita ejecutarse contra una persona y no contra un fondo de activos on-chain, el código no lo proporciona. En la práctica, esto significa que los smart contracts funcionan bien cuando todo el objeto del acuerdo ya está on-chain, y funcionan mal cuanto más se aleja uno de esa situación.
Un contrato tampoco puede ejercer criterio. No puede reconocer que una contraparte actuó de mala fe dentro de la letra de los términos, ni que las circunstancias cambiaron de un modo que nadie previó. Los contratos humanos se sostienen sobre la interpretación. El código no tiene ninguna.
Dónde se concentra realmente el riesgo
La criptografía subyacente rara vez es el problema. Los fallos se agrupan en unos pocos lugares reconocibles.
Lógica que hace lo que dice, no lo que se pretendía
El caso clásico es una función a la que se puede volver a entrar antes de que termine de actualizar su propia contabilidad, lo que permite a quien la invoca retirar fondos repetidamente contra un saldo que aún no se ha reducido. El código se ejecutó correctamente. El diseño era erróneo. La inmutabilidad convierte entonces el error en permanente, salvo que se haya incorporado una vía de rescate.
Control de acceso
Muchos incidentes se reducen a una función privilegiada que no estaba debidamente restringida, o a una clave administrativa más poderosa o menos protegida de lo que los usuarios suponían. Un contrato puede ser impecable en su lógica central mientras una dirección de propietario conserva discretamente la capacidad de vaciarlo.
Entradas defectuosas
Los contratos que hacen referencia a precios, tasas o resultados dependen de oráculos. Cuando un precio se lee de una fuente que puede manipularse a bajo costo, un atacante puede distorsionar la entrada y dejar que el contrato haga el daño en su nombre. El contrato se comporta correctamente en todo momento.
Composición
Los protocolos se construyen unos sobre otros, y un contrato que es seguro por sí solo puede no serlo cuando otro contrato puede invocarlo en una secuencia inesperada dentro de una sola transacción. El comportamiento emergente entre componentes sólidos de forma independiente es una de las clases de riesgo más difíciles de razonar.
La inmutabilidad como propiedad de doble filo
La inmutabilidad es la razón por la que se puede confiar en un smart contract sin confiar en su autor. También es la razón por la que un error puede resultar imposible de corregir. Los equipos responden con patrones actualizables, timelocks que retrasan los cambios para que los usuarios puedan salir, y control multifirma de las claves administrativas. Cada mitigación es una reintroducción parcial de la confianza, elegida de forma deliberada.
No hay ninguna configuración que elimine la disyuntiva. Plenamente inmutable significa plenamente comprometido con lo que se desplegó. Actualizable significa que alguien puede cambiar las reglas. La postura honesta consiste en saber qué modelo usa un protocolo determinado, quién tiene las claves y qué demora existe antes de que los cambios surtan efecto.
Dónde esto toca la minería y el consenso
Los contratos se ejecutan dentro de bloques, lo que significa que sus garantías son solo tan fuertes como las garantías de liquidación de la cadena subyacente. En una cadena donde las reorganizaciones son baratas, una transacción que parecía definitiva puede deshacerse, y con ella se va cualquier estado del contrato que dependiera de ella. La seguridad de la cadena, ya provenga del Proof of Work (prueba de trabajo) acumulado o del stake comprometido, forma parte por tanto del modelo de seguridad de un contrato y no es un tema aparte. La relación se expone con más detalle en nuestra cobertura de tecnología blockchain.
Una forma práctica de evaluar uno
Antes de interactuar con un contrato, unas pocas preguntas hacen casi todo el trabajo. ¿Está el código fuente verificado y es legible, o solo hay un binario compilado? ¿Es actualizable y, en tal caso, quién puede actualizarlo y con qué rapidez? ¿De qué datos externos depende y de dónde proceden esos datos? ¿Ha sido revisado, en qué versión, y se atendieron los hallazgos? ¿Cuánto valor ha custodiado y durante cuánto tiempo?
Nada de eso garantiza la seguridad. Lo que hace es pasar de confiar en una descripción a evaluar un mecanismo, que es lo máximo que honestamente está disponible. Para la terminología relacionada, consulte el glosario, y para saber cómo abordamos este material en general, consulte nuestra metodología. Nada de lo aquí expuesto constituye asesoramiento financiero.
Preguntas frecuentes
¿Son los smart contracts contratos jurídicamente vinculantes?
Por lo general no en el sentido que sugiere el nombre. Un contrato jurídico es un acuerdo entre partes que un tribunal puede interpretar, y los tribunales atienden habitualmente a la intención, la equidad y el contexto. Un smart contract es un programa que mueve activos cuando se cumplen las condiciones escritas en su código, sin interpretación y sin apelación. Ambos pueden coexistir, y algunos acuerdos combinan deliberadamente un contrato escrito con una ejecución on-chain. Pero llamar contrato al código no le confiere por sí mismo fuerza jurídica, y tomar la etiqueta como una garantía legal es un malentendido común y costoso.
¿Por qué no se puede simplemente parchear un smart contract con errores?
En la mayoría de las cadenas, el código de un contrato ya desplegado no se puede modificar. Es algo deliberado: la garantía de que las reglas no cambiarán bajo los pies del usuario es una parte importante de su valor. Los equipos lo sortean con patrones de proxy, en los que un pequeño contrato permanente reenvía las llamadas a una implementación reemplazable. Eso restituye la capacidad de corregir errores, pero también significa que quien controle la clave de actualización puede cambiar las reglas. Se ha cambiado el riesgo de un error imposible de corregir por el riesgo de un administrador de confianza. Ninguna de las dos opciones es gratuita, y los usuarios deberían saber cuál están aceptando.
¿Qué es un oráculo y por qué importa tanto?
Un oráculo es cualquier mecanismo que lleva información externa a la cadena, como un precio, el resultado de un partido o la confirmación de una entrega. Los contratos no pueden ver fuera de su propia cadena, de modo que todo lo que haga referencia al mundo real depende de un oráculo. Eso convierte al oráculo en un supuesto de confianza que soporta carga. Si informa un valor erróneo o manipulado, el contrato actuará en consecuencia de forma correcta e irreversible. Una parte significativa de las pérdidas en las finanzas descentralizadas ha involucrado precios de entrada manipulados o procedentes de fuentes de poca profundidad, y no fallos en la propia lógica del contrato.
¿Significa una auditoría que un contrato es seguro?
Significa que revisores cualificados buscaron problemas dentro de un alcance y un tiempo definidos y comunicaron lo que encontraron. Vale la pena tenerla, pero no es una garantía. Las auditorías pueden pasar por alto problemas, el alcance puede excluir precisamente el componente que después falla, y los contratos suelen cambiar tras la revisión. Los fallos económicos y de teoría de juegos, en los que cada función se comporta tal como está escrita pero los incentivos se combinan mal, son especialmente difíciles de detectar. Conviene leer el informe y no el sello: qué se revisó, en qué commit, qué se encontró y si los hallazgos se corrigieron realmente.
Exploring blockchain, crypto, and DeFi innovation. Ex-fintech analyst turned journalist, spotlighting real-world use cases of blockchain. Writer at Cryptocurrency Miners.