Contratos Inteligentes

Este artículo es una versión traducida, editada y extendida por Software Guru del capítulo sobre Smart Contracts en el libro electrónico “Blockchain Handbook: A Beguinner’s Guide” de Shermin Voshmgir y Valentin Kalinov, compartido bajo Creative Commons [1].

Para poder aplicar el blockchain en escenarios más allá de las criptomonedas, es crucial que entendamos qué es un contrato inteligente (smart contract).

Un contrato inteligente consiste de código computacional ejecutado por una plataforma de blockchain que consiste de un conjunto de reglas que definen el acuerdo entre las distintas partes. Cuando dichas reglas o condiciones se cumplen, las acciones definidas en el acuerdo se ejecutan. En otras palabras, un contrato inteligente es un programa que se ejecuta en base a condiciones preestablecidas.

En realidad, el término “contrato inteligente” es un poco desafortunado, ya que:

  • No son inteligentes, simplemente ejecutan una transacción en base a condiciones predefinidas.

  • No deben ser confundidos con contratos legales, ya que no son aceptados para propósitos judiciales o de cumplimiento ante la ley. Probablemente conforme pase el tiempo veremos que los contratos inteligentes tengan validez legal, pero falta para llegar a ese momento.

El investigador Nick Szabo fue el primero en definir el concepto de los contratos inteligentes, a través de un artículo publicado en 1996 [2]. En el artículo se utiliza la analogía de una máquina expendedora (vending machine). Las reglas de la transacción están programadas en la máquina, el cliente selecciona un producto, inserta dinero, y la máquina funge como contrato inteligente, verificando que se insertó suficiente dinero y en caso de ser así entregando el producto deseado y regresando el dinero sobrante.

Los contratos inteligentes no son un concepto nuevo, es solo que el blockchain brinda una plataforma natural para implementarlos. El blockchain fue diseñado inicialmente para realizar transacciones monetarias peer to peer (P2P). Sin embargo, pronto mostró el potencial para ser utilizado para cualquier tipo de transacción en el internet. El proyecto Ethereum introdujo la idea de desacoplar la capa de contrato de la capa del blockchain, de manera que el libro contable es usado por  contratos inteligentes que disparan transacciones automáticamente cuando se cumplen ciertas condiciones predefinidas. Al desacoplar la capa de contrato de la capa del blockchain, se provee una plataforma más flexible que la del blockchain original para Bitcoin.

Programación y riesgos

Ya comentamos que un smart contract no es más que un agente que verifica que se cumplan ciertas condiciones y entonces hace que se ejecute cierto código. La pregunta que se harán los desarrolladores es: ¿y cómo se programa eso? La respuesta es que distintas plataformas de blockchain escogen utilizar distintos lenguajes de programación para sus contratos, de acuerdo a sus necesidades.

En el caso de Bitcoin las transacciones son definidas en un lenguaje llamado Script. Este es un lenguaje muy sencillo, orientado a pilas (stacks). Intencionalmente, Script es un lenguaje muy limitado (por ejemplo, no soporta ciclos) ya que la intención es soportar un tipo de transacciones muy particular y nada más.

Como ya comentamos, Ethereum está diseñado para ser más flexible y poder soportar contratos de todo tipo, no solo transacciones monetarias. Es por ello que en Ethereum los contratos se programan en Solidity, un lenguaje orientado a objetos cuya sintaxis toma elementos de C++, Python y Javascript [3].

Es importante notar que Solidity es un lenguaje turing completo, lo cual le da gran flexibilidad, pero al mismo tiempo involucra un riesgo importante ya que incrementa su vulnerabilidad a huecos de seguridad y errores de programación. De hecho, esto ya ha sucedido en Ethereum y a consecuencia se han perdido cientos de millones de dólares.

Conclusión

Los contratos inteligentes se pueden utilizar para cosas sencillas como enviar dinero de A a B, pero de la misma forma se pueden utilizar para registrar cualquier tipo de propiedad sobre algún activo virtual o físico. Adicionalmente se pueden utilizar para transacciones más complejas como coordinar a un grupo de personas interesadas en metas comunes.

Gracias a los contratos inteligentes podemos pensar en un mundo donde los contratos estén embebidos en código y almacenados de forma transparente. En dicho mundo, todos los acuerdos y accinones derivadas tendría un registro digital que se puede identificar, validar y compartir. De esta manera, las personas, organizaciones y máquinas podrían interactuar entre sí sin necesidad de intermediarios, con poca fricción y bajo costo.

Al igual que todo software, un contrato inteligente es vulnerable a errores de programación, con la particularidad de que dada la naturaleza de la plataforma, los errores pueden generar daños irrecuperables. Ante ello, es crucial que al programar contratos inteligentes sigamos las más estrictas prácticas de control de calidad, testing y verificación de seguridad de nuestro código.

Referencias

  1. S. Voshmgir, V. Kalinov. “Blockchain Handbook: A beguinner’s guide. BlockchainHub, 2017. http://swgu.ru/x7

  2. N. Szabo. Smart Contracts: Building Blocks for Digital Markets”. http://swgu.ru/x8

  3. https://solidity.readthedocs.io