Nick Szabo concibió originalmente los smart contracts en los años 90. Por entonces, definió los smart contracts como herramientas que formalizan y protegen redes de ordenadores mediante la combinación de protocolos e interfaces de usuario. Szabo discutió el uso potencial de smart contracts en varios campos que involucran acuerdos contractuales -como es el caso de los sistemas de crédito, procesamiento de pagos y gestión de los derechos de contenidos.
En el ámbito de las criptomonedas, podemos definir los smart contracts como aplicaciones o programas que se ejecutan en una blockchain. Normalmente, actúan como acuerdos digitales que son obligados a cumplir por una serie específica de reglas. Dichas reglas son predefinidas por un código informático, que será replicado y ejecutado por toda la red de nodos.
En esencia, los smart contracts de las blockchains permiten la creación de protocolos “trustless” (esto es, aquellos que no requieren confiar en terceros). Esto significa que dos partes pueden alcanzar compromisos vía blockchain, sin necesidad de conocerse o confiar la una en la otra. Ambas tendrán la garantía de que si las condiciones no se cumplen, el contrato no se ejecutará. Aparte de eso, el empleo de smart contracts permite prescindir de intermediarios, reduciendo de una forma significativa los costes operativos.
A pesar de que el protocolo Bitcoin ha soportado smart contracts durante muchos años, se hicieron populares gracias al creador y cofundador de Ethereum, Vitalik Buterin. Cabe mencionar, sin embargo, que cada blockchain puede presentar un método de implementación de los smart contracts diferente.
Este artículo se centrará en los smart contracts que se ejecutan en la Ethereum Virtual Machine (EVM), componente esencial de la blockchain de Ethereum.
¿Cómo funcionan?
De forma resumida, un smart contract funciona como un programa determinístico: el mismo ejecuta una tarea particular cuando ciertas condiciones se cumplen, si es que se cumplen. De esta forma, los sistemas smart contract a menudo siguen sentencias condicionales del tipo “if… then…”. Pero a pesar de la terminología popular, los smart contracts ni son contratos legales, ni son inteligentes. Simplemente son pedazos de código ejecutados en un sistema distribuido (blockchain).
En la red Ethereum, los smart contracts son los responsables de ejecutar y administrar las operaciones de la blockchain que se producen cuando los usuarios (direcciones) interactúan entre sí. Cualquier dirección que no sea un smart contract se denomina “Externally Owned Account” o “EOA” (cuenta externamente controlada). Esto significa que, mientras los smart contracts son controlados por código informático, las EOAs son controladas por usuarios.
Básicamente, los smart contracts de Ethereum están compuestos por un código de contrato y dos claves públicas. La primera clave pública es aquella proporcionada por el creador del contrato. La otra clave representa al contrato en sí mismo, lo que significa que actúa como identificador digital único de cada smart contract.
El despliegue de cualquier smart contract se realiza mediante una transacción en la blockchain, y sólo podrá ser activado cuando sea llamado por una EOA (o por otros smart contracts). Sin embargo, el activador inicial será siempre una EOA (usuario).
Características clave
Los smart contracts de Ethereum a menudo presentan las siguientes características:
Distribuidos. Los smart contracts son replicados y distribuidos por todos los nodos de la red Ethereum. Esta es una de las principales diferencias respecto a otras soluciones basadas en servidores centralizados.
Determinísticos. Los smart contracts solamente realizan las acciones para las que fueron diseñados, siempre y cuando las condiciones se cumplan. Además, el resultado será siempre el mismo, sin importar quién sea el que los ejecute.
Autónomos. Los smart contracts pueden automatizar todo tipo de tareas, funcionando como programas autoejecutables. En la mayoría de casos, sin embargo, si un smart contract no es activado, permanecerá “latente” y no ejecutará ninguna acción.
Inmutables. Los smart contracts no pueden ser modificados una vez desplegados. Solamente pueden ser eliminados, si una función particular ha sido previamente implementada. Por lo tanto, podríamos afirmar que los smart contracts pueden proporcionar código a prueba de manipulaciones (tamper-proof code).
Customizables. Antes de ser desplegados, los smart contracts pueden ser codificados de muchas maneras distintas. Así que, pueden ser empleados para crear múltiples tipos de aplicaciones descentralizadas (Dapps). Está característica está directamente vinculada al hecho de que Ethereum sea una blockchain Turing completa.
Trustless. Dos o más partes pueden interactuar vía smart contracts sin conocerse o confiar la una en la otra. Además, la tecnología blockchain garantiza que los datos son precisos.
Transparentes. Dado que los smart contracts están basados en una blockchain pública, su código fuente no sólo es inmutable sino también visible para todo el mundo.
¿Puedo modificar o eliminar un smart contract?
Es imposible agregar nuevas funciones a un contrato inteligente de Ethereum después de la implementación. Sin embargo, si su creador incluye una función llamada SELFDESTRUCT en el código, puede “eliminar” el contrato inteligente en el futuro, y reemplazarlo por uno nuevo. Sin embargo, por el contrario, si la función no está incluida en el código de antemano, no podrán eliminarla.
En particular, los llamados contratos inteligentes actualizables permiten a los desarrolladores tener más flexibilidad sobre la inmutabilidad de los contratos. Hay muchas formas de crear contratos inteligentes actualizables, con diversos grados de complejidad.
Tomando un ejemplo simplificado, imaginemos que un contrato inteligente se divide en múltiples contratos más pequeños. Algunos de ellos están diseñados para ser inmutables, mientras que otros tienen habilitada la función ‘Delete’. Esto significa que parte del código (contratos inteligentes) se puede eliminar y reemplazar, mientras que otras funcionalidades permanecen intactas.
Ventajas y casos de uso
Como código programable, los contratos inteligentes son altamente personalizables y pueden diseñarse de muchas maneras diferentes, ofreciendo muchos tipos de servicios y soluciones.
Como programas descentralizados y autoejecutables, los contratos inteligentes pueden proporcionar una mayor transparencia y menores costos operativos. Dependiendo de la implementación, también pueden aumentar la eficiencia y reducir los gastos burocráticos.
Los contratos inteligentes son particularmente útiles en situaciones que implican la transferencia o intercambio de fondos entre dos o más partes.
En otras palabras, los contratos inteligentes pueden diseñarse para una amplia variedad de casos de uso. Algunos ejemplos incluyen la creación de activos tokenizados, sistemas de votación, billeteras criptográficas, exchanges descentralizados, juegos y aplicaciones móviles. También se pueden implementar junto con otras soluciones de blockchain que abordan los campos de la salud, la caridad, la cadena de suministro, la gobernanza y las finanzas descentralizadas (DeFi).
ERC-20
Los tokens emitidos en la blockchain Ethereum siguen un estándar conocido como ERC-20. El estándar describe las funciones principales de todos los tokens basados en Ethereum. Como tal, estos activos digitales a menudo se denominan tokens ERC-20, y representan una gran parte de las criptomonedas existentes.
Muchas empresas y startups de blockchain implementaron contratos inteligentes para emitir sus tokens digitales en la red Ethereum. Después de la emisión, la mayoría de estas compañías distribuyeron sus tokens ERC-20 a través de eventos de Oferta de Moneda Inicial (ICO). En la mayoría de los casos, el uso de contratos inteligentes permitió el intercambio de fondos y la distribución de tokens, de una manera confiable y eficiente.
Limitaciones
Los contratos inteligentes están hechos de código de computadora escrito por humanos. Esto conlleva numerosos riesgos ya que el código está sujeto a vulnerabilidades y errores. Idealmente, deberían ser escritos y desplegados por programadores experimentados, especialmente cuando se trata de información confidencial o grandes cantidades de dinero.
Aparte de eso, algunos argumentan que los sistemas centralizados pueden proporcionar la mayoría de las soluciones y funcionalidades que ofrecen los contratos inteligentes. La principal diferencia es que los contratos inteligentes se ejecutan en una red P2P distribuida, en lugar de un servidor centralizado. Y debido a que se basan en un sistema blockchain, tienden a ser inmutables o muy difíciles de cambiar.
Ser inmutable puede ser excelente en algunas situaciones, pero muy malo en otras. Por ejemplo, cuando una organización autónoma descentralizada (DAO) llamada “The DAO” fue hackeada en 2016, millones de ether (ETH) fueron robados debido a fallas en el código del contrato inteligente.
Como el contrato inteligente era inmutable, los desarrolladores no pudieron arreglar el código. Esto eventualmente condujo a un hard fork, dando a luz a una segunda cadena de Ethereum. En pocas palabras, una cadena “revirtió” el hack y devolvió los fondos a los propietarios legítimos (esto es parte de la actual blockchain de Ethereum). La otra cadena decidió no interferir con el hack, afirmando que las cosas que suceden en una blockchain nunca deberían cambiarse (esta cadena ahora se llama Ethereum Classic).
Es importante tener en cuenta que el problema no provino de la blockchain de Ethereum. En cambio, fue causado por una implementación defectuosa del contrato inteligente.
Otra limitación de los contratos inteligentes está relacionada con su incierto estatus legal. No solo porque está en una zona gris en la mayoría de los países, sino también porque los contratos inteligentes no se ajustan al marco legal actual.
Por ejemplo, muchos contratos requieren que ambas partes estén debidamente identificadas y tengan más de 18 años. El seudónimo que proporciona la tecnología blockchain, combinado con la falta de intermediarios, puede amenazar esos requisitos. Si bien existen soluciones potenciales para esto, la exigibilidad legal de los contratos inteligentes es un verdadero desafío, especialmente cuando se trata de redes distribuidas sin fronteras.
Criticismo
Algunos entusiastas de blockchain ven los contratos inteligentes como una solución que pronto reemplazará y automatizará una gran parte de nuestros sistemas comerciales y burocráticos. Si bien esta es una realidad posible, probablemente esté lejos de convertirse en la norma.
Los contratos inteligentes son ciertamente una pieza de tecnología interesante. Pero, ser distribuido, determinista, transparente y algo inmutable puede hacerlos menos atractivos en algunas situaciones.
Esencialmente, la crítica se basa en el hecho de que los contratos inteligentes no son una solución adecuada para muchos problemas del mundo real. De hecho, algunas organizaciones están mejor usando alternativas convencionales basadas en servidor.
En comparación con los contratos inteligentes, los servidores centralizados son más fáciles y baratos de mantener, y tienden a presentar una mayor eficiencia en términos de velocidad y comunicación entre redes (interoperabilidad).
En conclusión
No hay duda de que los contratos inteligentes causaron un gran impacto en el mundo de las criptomonedas, y ciertamente revolucionaron el espacio blockchain. Si bien los usuarios finales pueden no interactuar directamente con los contratos inteligentes, es probable que estos impulsen una amplia gama de aplicaciones en el futuro, que van desde servicios financieros hasta la gestión de una cadena de suministro.
Los contratos inteligentes y blockchain juntos, tienen el potencial de interrumpir casi todas las áreas de nuestra sociedad. Pero solo el tiempo dirá si estas tecnologías innovadoras lograrán superar las muchas barreras para la adopción a gran escala.