Podemos definir, muy resumidamente, que una blockchain es una cadena digital de bloques enlazados unos a otros que contienen transacciones entre cuentas como si de un libro de registro se tratara. Cuando dos personas llegan a un acuerdo suelen dejar reflejado el acuerdo y las condiciones en algún tipo de soporte comúnmente conocido como “contrato”. El contrato define los términos del acuerdo en cuanto a qué afecta a cada una de las partes y bajo qué condiciones se completará el acuerdo. La realización de ese acuerdo es lo que llamaremos “transacción”.
Como ya dije, la blockchain está formada por bloques que contienen transacciones y esas transacciones contienen la ejecución de “acuerdos” o “contratos”.
Los Smart Contract, o Contratos Inteligentes, son programas informáticos que se almacenan en los nodos de la blockchain y que servirán para llevar a cabo esos acuerdos entre partes; entre las cuentas.
Los contratos vistos por los usuarios
Desde el punto de vista de un usuario, un contrato puede estar diseñado para realizar una o varias acciones siguiendo el paradigma de “si ocurre esto… haz esto…”. Para ello, el contrato necesita recibir cierta información de entrada y cuál será la acción o acciones a realizar.
Sería ideal si los contratos contaran con algún tipo de trigger, o disparador, que lanzara la acción por sí sola cuando se cumplieran ciertas condiciones, pero esto es algo que aún está en estudio y desarrollo. Por ahora son las aplicaciones particulares quienes deben llevar el control de las condiciones o, simplemente, esperar a ser llamados.
Imaginemos el caso de un contrato entre los miembros de un grupo musical. Cada vez que alguien compra uno de sus temas y paga con criptomoneda en la cuenta asociada al contrato de ventas sería ideal que el contrato repartiera los dividendos entre los miembros de la banda según estuviera estipulado en las condiciones del contrato y sin mediación alguna de otras partes. Esto es lo que realmente daría seguridad y fiabilidad a las blockchains y a sus contratos. Por desgracia aún es necesaria la intervención de una parte para que la acción del contrato se ejecute. Por ejemplo, un programa que llamara a la acción de reparto de beneficios una vez cada 7 días o una vez al mes. No es mala solución, pero implica la necesidad de confiar en el tercer actor.
Los contratos vistos por los desarrolladores
En WAX los contratos y sus acciones se definen dentro de una clase que hereda directamente de la clase eosio::contract.
El contrato contiene, normalmente, las acciones, los permisos, los datos que necesita para realizarse, que pueden ser persistentes o no, y los “dispachers” que se encargarán de registrar las acciones para que puedan ser llamadas.
Cuando registramos un contrato en la blockchain, este queda asociado a la cuenta con la que ha sido registrado y sus elementos públicos pueden ser vistos y utilizados desde algunos exploradores de la blockchain.
Este es el aspecto que muestra el listado de “acciones” del contrato de Simple Assets para la gestión de sus tokens FT, NFT y NTT.
A lo largo de esta serie de publicaciones estaremos analizando muchas de estas acciones y veremos cómo podemos implementarlas dentro del código de nuestros programas. En el momento de preparar estos tutoriales han aparecido los nuevos NFT de la mano de Atomic Assets, por lo que trataré de incluir también su contrato en los próximos tutoriales.
Marcos DK
Programador y creador de contenidos digitales. Profesor de informática desde 1994 y desarrollador del videojuego sobre blockchain “Rada Quest TCG”