Cómo funcionan los Smart Contracts en Stellar
¿Sabías que Stellar se puede utilizar para construir Smart Contracts o contratos inteligentes sofisticados?
Pues bien, ponte cómodo porque en el siguiente artículo te enseñaré sobre qué son los contratos inteligentes, las bondades y restricciones que presentan en Stellar, así como las diferentes implementaciones y casos de uso.
Para iniciar recordemos que Stellar es un plataforma que desde el 2014 conecta bancos, sistemas de pago y personas. A su vez, se integra para mover dinero de manera rápida, confiable y sin costo. Las transacciones de esta plataforma pueden realizarse en menos de cinco segundos y sin apoyo de terceros.
¿Qué son los Smart Contracts?
Partamos desde lo más simple: Un contrato es un acuerdo entre dos o más partes que contiene un entorno donde se define lo que se puede hacer, cómo se puede hacer y qué puede pasar si algo no se cumple.
Ahora bien, un smart contract es un tipo especial de instrucciones que es almacenado en blockchain y tiene la capacidad de ejecutar acciones de acuerdo a una serie de parámetros que previamente han sido programados. Estos contractos contienen códigos informáticos escritos en diferentes lenguajes de programación.
¿Y qué quiere decir esto? Que los contratos inteligentes son capaces de ejecutarse y hacerse cumplir por si mismos, sin necesidad de intermediarios y mediadores. Los términos del contrato son puras sentencias y comandos en el código que lo forma.
Pero, ¿de dónde sale este termino y a quién se le atribuye? La primera vez que se conoce sobre este termino fue a través de Nick Szabo, jurista y criptógrafo pionero en blockchain, que lanzó en 1995 un documento en el que hacia mención públicamente sobre los contratos inteligentes. Dos años después, en 1997, desarrolló un documento más detallado sobre este tema.
En este documento, los contratos inteligentes los explicó así:
La idea básica de los contratos inteligentes, es que muchos tipos de cláusulas contractuales (tales como gravámenes, fianzas, delimitación de derechos de propiedad, etc.) puedan ser incorporadas en el hardware y software con el que tratamos. De tal manera que el incumplimiento de contrato resulte costoso (si se desea, a veces prohibitivo) para el infractor. Nick Szabo, Smart Contracts: Building Blocks for Digital Markets.
En la actualidad conocemos a Nick Szabo como uno de los primeros cypherpunks que han existido en la historia del Blockchain.
Smart Contracts en Stellar
En Stellar, los contratos inteligentes se explican cómo Stellar Smart Contracts o SSC, y estos se expresan como composiciones de transacciones que están conectadas y son ejecutadas usando varias restricciones.
Algunas de las restricciones que se consideran en los SSC son:
- Multisignature o firma múltiple: que es un tipo específico de firmas digitales que hace posible que dos o más usuarios firmen documentos como un grupo. Esto produce una firma múltiple mediante la combinación de varias firmas únicas y estas son necesarias para autorizar una determinada operación.
- Batching: Este concepto hace referencia a incluir múltiples operaciones en una sola transacción. En este caso, una vez que una transacción haya sido enviada a la red, es muy importante resaltar que si una operación falla, todas las operaciones de esta transacción fallarán.
- Secuencia: Para esta restricción debemos preguntarnos: ¿En qué orden se debe procesar una serie de transacciones? ¿Cuáles son las limitaciones y dependencias? Esto quiere decir que dentro del contrato se debe utilizar una serie de números que garanticen en qué casos y bajo qué términos se podrá realizar con éxito una transacción en la red de Stellar.
- Time Bounds o límites de tiempo: Son limitaciones en el período de tiempo durante el cual una transacción es válida. El uso de estos límites permite que los períodos de tiempo se representen en un SSC.
Nota: La red de Stellar ha creado esta serie de restricciones con el fin de proteger y asegurar que todo contrato inteligente que se realice no sea vulnerado o modificado. Estas restricciones hacen que los casos de uso sean más fáciles de resolver.
Caso de uso utilizando Time Lock & Recovery
Ahora bien, para entender un poco más las serie de restricciones que implementa Stellar en sus SSC, expondremos un caso de uso que utilice un fideicomiso (o escrow) con firma múltiple (o multisignature) utilizando las propiedades de Time lock y Recovery.
Muy bien, imagina que Paulina quiere venderle 50 tokens a Antonio. Sin embargo, Paulina no confía mucho en Antonio y cree que él venderá los tokens muy pronto, por lo que ella le propone que la única condición que tiene para venderlos es que Antonio no revenda los tokens en un periodo menor a un año.
Él se enoja y le pregunta a Paulina:
- Oye, ¿Y cómo sabré que después de un año aún tendré los tokens? ¿Yo también cómo puedo confiar en ti?
Sin embargo, y pese al enojo de Antonio, él tiene un problema y es que es muy olvidadizo, por lo que existe la posibilidad de que al cabo de un año él no recuerde reclamar sus tokens al final del período de espera. Es por ello que a Paulina también le gustaría construir un mecanismo de recuperación en caso tal que Antonio olvide reclamar los tokens, ella puede recuperarlos.
Ahora bien, la pregunta es. ¿Cómo crearíamos estas restricciones de Paulina en nuestro Smart Contract?
Implementación
Como primero, para ejecutar el contrato de Time Lock (con bloqueo de tiempo) entre las dos partes requeriremos de tres cuentas:
- Cuenta de origen (Paulina): Es la que estará iniciando y finalizando el acuerdo de custodia.
- Cuenta de destino (Antonio): La que eventualmente obtendrá el control de los fondos (tokens) en custodia.
- Cuenta de custodia o depósito: Que es el Smart Contract creado por el origen (en este caso Paulina) y retiene los fondos en custodia durante el periodo de bloqueo.
Ahora, hay que definir en el Smart Contract sentencias que establezcan entre las partes dos periodos de tiempo. Estos deben ser:
- Time Lock: Establece el tiempo en el que ninguna de las partes podrá transferir o utilizar los fondos.
- Recovery: El tiempo en el que el origen podrá recuperar los tokens en custodia una vez haya transcurrido el periodo de bloqueo.
Ahora bien, para crear un contrato con Time Lock y Recovery se utilizan cinco transacciones. Estas son:
- Transacción 1: Se crea y configura el smart contract con las sentencias propias del fideicomiso (escrow).
- Transacción 2: Se agrega la cuenta del segundo firmante, a quien en teoría se le pretende depositar los tokens (se habilita el Multi-sig)
- Se establece un periodo de bloqueo en el que la cuenta destino no podrá retirar los fondos antes del tiempo establecido.
3. Transacción 3: Una vez finaliza el periodo de bloqueo, esta transacción solo podrá ser enviada durante el periodo de recuperación por la cuenta destino para reclamar los tokens.
4. Transacción 4: En caso de que la cuenta destino jamás retiré los tokens por medio de la transacción 3, la cuenta origen podrá ejecutar esta transacción para recuperar los fondos al finalizar el periodo de recuperación.
- La transacción 3 y la transacción 4 se crean y firman antes de que se depositen los fondos al smart contract.
5. Transacción 5: Es la transacción que fondea la cantidad apropiada de fondos en el smart contract. Debe enviarse una vez que la T3 y la T4 hayan sido firmadas y acordadas por la cuenta de destino y origen.
Una vez hayamos realizado cada uno de estos pasos, habremos creado nuestro smart contract utilizando una cuenta de fideicomiso que es firmada por dos partes y que habrá sido realizada utilizando Time lock y Recovery.
Acuerdos previos del SSC
Antes de diseñar cualquier Smart Contract, ya sea en Stellar o cualquier otra red, las partes deben reunirse y describir claramente el propósito del contrato, la cooperación entre las partes y los resultados deseados. En este esquema, se deben acordar condiciones claras.
¡Mega importante!
Recuerda que los contratos inteligentes se crean usando código. El código puede contener errores o puede no funcionar según lo planeamos, por ello debemos asegurarnos y analizar todos los posibles casos que se puedan presentar para poder obtener las condiciones y resultados esperados.
¿Quieres aprender a hacer Smart Contracts en Stellar?
¡No te preocupes!, en la continuación de este artículo aprenderás el paso a paso del ejemplo que vimos y sí, será con código.
Recuerda que en el canal de YouTube de Blockdemy, estaremos subiendo, cada semana y de manera más práctica, la explicación de este artículo y de otros en los que enseñaremos las bondades y beneficios de Stellar.