¿Qué es un "smart contract"?

El término “smart contract”, contrato inteligente en traducción literal, es uno de los caballos de batalla de los promotores de “blockchain”. Seguramente habrá oido que gracias a estos “contratos” se podrán representar acuerdos legales que nos permitan efectuar operaciones seguras, confiables, sin necesidad de intervención de terceros como abogados, y tal. En suma, la quinta esencia de los beneficios de “blockchain”.

Quisiera empezar por decirles que se olviden de esas dos palabras, es decir “smart” y “contract”. El término “smart contract” fue acuñado el año 1995 por Nick Szabo, señalado por algunos como el verdadero Satoshi Nakamoto y también autor de Bit gold, una propuesta previa de moneda digital. En el artículo “Smart contracts” publicado por la revista Extropy, Szabo describe su propuesta como:

New institutions, and new ways to formalize the relationships that make up these institutions, are now made possible by the digital revolution. I call these new contracts “smart”, because they are far more functional than their inanimate paper-based ancestors. No use of artificial intelligence is implied. A smart contract is a set of promises, specified in digital form, including protocols within which the parties perform on these promises.

Szabo menciona que llama a estos contratos “smart” (inteligentes) debido a que son mucho más funcionales que sus antecesores de papel. También dice que no implica el uso de inteligencia artificial. Define “smart contract” como un conjunto de promesas, que se especifican en forma digital, que incluye protocolos mediante los cuales los involucrados actúan sobre estas promesas.

Desde la aparición de Ethereum el año 2015 el término “smart contract” ha sido propulsado como la mayor innovación que le da valor a esta plataforma y, para el público en general, como la primera plataforma que permite este tipo de capacidades. Sin embargo, no es el caso.

Bitcoin Script

Bitcoin es la primera plataforma de moneda digital descentralizada, que vio la realidad el año 2009. Además de las características que se conocen y de las que he hablado previamente, Bitcoin es una propuesta que le da capacidades programáticas a su plataforma. Es decir, una moneda que se puede programar en su propia plataforma, sin necesidad de un sistema externo. Bitcoin Script, la facilidad de programación en esta plataforma, cumple con la definición de Szabo debido a que se pueden representar o especificar promesas entre partes involucradas con referencia a fondos involucrados.

Bitcoin Script es un lenguaje de programación similar a Forth, lenguaje que se utiliza por ejemplo en los gestores de arranque como OpenFirmware. Este tipo de lenguajes imperativos opera en base a una pila. Es decir, las instrucciones se almacenan en la pila y se van ejecutando de acuerdo a su posición en la misma. Intencionalmente por diseño no es Turing-completo, no tiene bucles.

Un programa en Bitcoin Script en esencia es un conjunto de instrucciones que se incluyen en una transacción y describen cómo el destinatario debe acceder a los fondos que se le han transferido para gastarlos. El lenguaje provee la flexibilidad necesaria para cambiar los parámetros de los requisitos necesarios para gastar los Bitcoins transferidos. Por ejemplo, requerir dos llaves privadas, o una combinación de llaves, o simplemente ninguna llave.

En resumen, en una transacción de Bitcoin se crea un programa que puede ser modificado a demanda para incorporar algunas reglas respecto a los fondos de la transacción en cuestión. Un ejemplo de programa un poco más complejo al de una transacción estándar sería este:

scriptPubKey: <tiempoExpiración> OP_CHECKLOCKTIMEVERIFY OP_DROP OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
scriptSig: <firma> <clavePública>

Aquí lo que se especifica es un tiempo durante el cual los fondos estarán bloqueados o congelados, y que solo podrán gastarse una vez pasado el mismo. Este caso se puede aplicar, por ejemplo, a operaciones de compra - venta, donde el comprador desea esperar a que haya recibido el producto para que el vendedor pueda gastar los fondos y el vendedor tenga la seguridad de que la transacción ha sido publicada en la red, por tanto se convierte en realidad.

Bitcoin Script implementa instrucciones a las que se conoce como Opcodes, las cuales incluyen operaciones aritméticas, de control de flujo, constantes, pila, lógica binaria, criptografía, etc. Es decir, un lenguaje bastante completo.

EVM

Posiblemente lo anterior le parezca algo nuevo y extremadamente esotérico, de frikis. No le culpo. La plataforma Ethereum implementa una máquina virtual denominada EVM (Ethereum Virtual Machine). Esta plataforma también basada en pila y que es Turing-completo, implementa una serie de instrucciones que se pueden definir como de bajo nivel. Sin embargo, se ha hecho popular rápidamente gracias a que se ha acompañado de lenguajes de alto nivel que siempre se compilan a código EVM, un análogo a programar en Scala para ejecutarlos en la JVM, y facilitan la creación de programas.

Los lenguajes de alto nivel, como Solidity, implementación influenciada por C++, Python y Javascript, han hecho de Ethereum el paraíso de los “smart contracts”. Se trata de programas con un espectro amplio de posibilidades de implementación debido a que la EVM actúa, en efecto, como una máquina virtual ofreciendo un espacio de datos, memoria y procesamiento específico para cada uno de estos, además de la propia interacción con la plataforma.

Un ejemplo de programa básico en Ethereum es el que sigue:

pragma solidity ^0.4.0;

contract AlmacenamientoSimple {
    uint dato;

    function set(uint x) public {
        dato = x;
    }

    function get() public constant returns (uint) {
        return dato;
    }
}

En este programa se implementa una variable de almacenamiento de tipo entero y dos funciones: set para modificarlo, y get para obtener el dato registrado. Como debe intuir, efectivamente, se pueden implementar estructuras de datos y funciones más complejas, incluyendo interacción entre programas. Tenga en cuenta que, como en cualquier plataforma, los programas estarán restringidos a las características y limitaciones de la misma.

Reflexione ahora respecto al término inicial y entenderá el porqué le pedi que se olvide de esas dos palabras. Piense en adelante en programas y programación.

Programas frente a la realidad

Hace no mucho escuche a alguien afirmar en una charla que la “blockchain” podía almacenar todo, incluso vídeos. También algunas personas han comprado la visión de que, dado la inteligencia natural de estas plataformas, podrán efectuar operaciones como la transferencia de fondos al momento de darse una situación de compra-venta, digamos el registro del título de propiedad en la dependencia oficial. No es tampoco inusual la idea de gestión de identidad y datos personales.

Lo que debe tener en claro en este momento es que los “smart contracts” son en si hojas en blanco sobre las que hay que escribir código. Este código lo debe plasmar una persona que sepa como traducir las reglas que se desea a este lenguaje, y lo puede hacer bien o mal, como en cualquier entorno informático. No se trata simplemente de un recurso tecnológico al que le dictas algunas reglas y que estas se cumplen de acuerdo a lo que ocurre en la realidad de manera automática. Tampoco significa que estos programas tengan capacidades de entender e interpretar la realidad, todo lo contrario. Como cualquier algoritmo, estos reciben, procesan y retornan datos. Esos datos tienen que ser proporcionados por alguien o algo. Sin eso no existe ninguna conexión con la realidad, y por tanto ninguna utilidad concreta.

Propuestas como que el registro de la cadena de valor o suministro nos permitirán saber si efectivamente esa botella de vino contiene sulfatos, o si esa bolsa de café ha sido cosechada usando labor infantil son de por sí bastante tiradas de los pelos debido a que, como en todo avance tecnológico, se trata simplemente de una herramienta, no de una solución total, absoluta. A este nivel, estas plataformas no significan el reemplazo del conocimiento profesional o de los actores en una industria determinada. Cualquier persona con dos dedos de frente no se atrevería a almacenar vídeos en una tabla de base de datos. Afirmar que sea el caso en “blockchain” dice mucho del desconocimiento de estas plataformas, en particular de sus características, capacidades y limitaciones técnicas.

Estas plataformas y programas son muy ineficientes para:

  • Efectuar operaciones en base a eventos externos de la realidad: Por sus características de consenso y descentralización. Existen los “oracles” que son programas en los que se confía que alguien ingresará el dato auténtico, el cual se utiliza para las decisiones programadas.
  • Intercambio de información con alto nivel de interacciones por segundo: Todas las acciones se efectúan como transacciones, las transacciones son registradas y procesadas en bloques. El procesamiento de un bloque se da desde aproximadamente cada 10 minutos en Bitcoin, a 15 segundos en Ethereum. Lo que resulta en 4 transacciones por segundo en Bitcoin y 20 en Ethereum. Bastante distantes de 200 por segundo en PayPal y cerca de 2000 por segundo en la red de VISA.
  • Almacenar información: El espacio es costoso y limitado. El costo tiene que ver con el costo por transacción. En Ethereum conocido como gas, tiene relación directa con el uso de recursos (almacenamiento y procesamiento) lo cual resulta oneroso para muchos casos de uso.

¿Nos quieres demostrar lo contrario? Comparte tus ideas.

2 Me gusta

El buen Jimmy ha escrito un nuevo artículo donde desmenuza el tema con gran calidad y enfoque técnico, como ya es costumbre. Lectura recomendable como complemento a esta.