¿Qué es un contrato inteligente?
Un contrato inteligente es un programa almacenado en una blockchain que hace cumplir un acuerdo sin intermediarios. La imagen clásica es la de una máquina expendedora: introduces monedas, eliges un producto y la máquina te lo entrega. Nadie detrás de un mostrador decide si te corresponde el tentempié, las reglas están incorporadas en la máquina y funcionan igual para todo el mundo.
Piensa en un comprador y un vendedor que no se conocen. Sin un contrato, o bien se confían o bien pagan a un agente de depósito en garantía. Con un contrato, el pago permanece en un script que solo lo libera cuando se registra la condición acordada. Si alguna de las partes puede cancelar, si se cobra una comisión y quién puede cambiar los términos queda fijado por las reglas del script, y no por la decisión de alguien en el medio.
Un contrato solo ve lo que hay dentro de la transacción que lo invoca y lo que ya está en la cadena. Los hechos del mundo exterior, como el resultado de una carrera o un tipo de cambio, deben incorporarse a la cadena mediante un servicio llamado oráculo, y el contrato solo puede ser tan fiable como esa fuente de datos.
¿Cómo ejecuta Cardano los contratos inteligentes?
En Cardano un contrato es un validador: un script que una transacción debe satisfacer. La mayoría de los validadores se adjuntan a fondos del libro mayor, y un script también puede autorizar la acuñación, el retiro de recompensas, los certificados y los votos de gobernanza. De ahí se desprenden tres cosas.
El script custodia los fondos
Cuando alguien envía ada o tokens a un contrato, los fondos quedan en una salida, un trozo de valor en el libro mayor bloqueado por el script en lugar de por una clave. La salida puede llevar un dato, el datum, que registra el estado del acuerdo, por ejemplo quién debe qué. Para gastar esa salida, una transacción presenta un argumento, el redeemer, y el script comprueba si la transacción está permitida.
La transacción se construye antes de ejecutarse
Tu cartera o la aplicación construye primero la transacción completa, con todas sus entradas, salidas y los datos que necesita el script, y puede evaluar el script antes de pedirte la firma. La red después realiza la misma comprobación sobre las mismas entradas y obtiene el mismo resultado. La transacción puede rechazarse igualmente si una de sus entradas se gastó mientras tanto, y en ese caso no ocurre nada.
El coste se conoce antes de firmar
La ejecución de un script se paga con un presupuesto de memoria y pasos de procesamiento cuyo precio fijan los parámetros del protocolo, así que la comisión queda determinada al construir la transacción y no se descubre después. Si aun así un script falla on-chain, algo poco frecuente gracias a evaluarlo antes de firmar, un colateral cubre el trabajo de la red. Su mínimo es un porcentaje de la comisión fijado por un parámetro del protocolo, actualmente una vez y media la comisión, y las carteras que conectan con DApps reservan algo de ada para ello.
La mecánica completa, desde los slots hasta el libro mayor, está en la página cómo funciona Cardano.
¿Qué lenguajes usan los desarrolladores?
Los contratos se escriben en un lenguaje de alto nivel y se compilan a Plutus Core, el lenguaje reducido que ejecuta el nodo de Cardano. Plinth, antes llamado Plutus Tx, está integrado en Haskell, fue el primero y lo siguen usando los equipos que quieren todo el poder de su sistema de tipos. Aiken es un lenguaje más reciente creado solo para Cardano, con una sintaxis más sencilla y el conjunto de herramientas que la mayoría de los proyectos nuevos ya eligen. Plutarch, una biblioteca de Haskell que se mantiene cerca del código compilado, es la opción cuando lo que más importa es el coste de ejecución. Todos producen el mismo tipo de script on-chain.
No todo necesita un contrato completo. Los scripts nativos resuelven casos habituales como las carteras con multifirma y los bloqueos temporales sin una sola línea de Plutus, y los tokens nativos también pueden acuñarse bajo un script de ese tipo.
¿Qué es una DApp?
Una aplicación descentralizada, o DApp, es un sitio web o una aplicación cuyas acciones importantes se ejecutan mediante contratos inteligentes en lugar de la base de datos de una empresa. Un exchange descentralizado, por ejemplo, es una interfaz que construye las transacciones de intercambio por ti, junto con los scripts on-chain que custodian la liquidez y hacen cumplir los precios.
Usas una DApp con tu propia cartera. Al conectarla, la aplicación ve tus direcciones y tu saldo y te pide firmar transacciones. Nunca custodia tus claves y no puede mover fondos sin una firma que das en tu cartera. Esa conexión sigue un estándar, CIP-30, y por eso una misma cartera funciona con muchas aplicaciones.
¿Cómo uso una DApp de forma segura?
Lee lo que estás a punto de firmar. La mayoría de las carteras de Cardano muestran las salidas de una transacción, es decir, dónde acabarán el ada y los tokens, de modo que un intercambio que de repente envía todo tu saldo a una dirección desconocida queda visible antes de confirmar. Tu firma se compromete con esa transacción exacta, así que revisa las entradas, las salidas y los avisos que muestre tu cartera. En Cardano no hay aprobaciones de tokens abiertas: una DApp solo puede gastar lo que gasta la transacción que firmas, y no hay nada que revocar después. Lo que envías a un contrato permanece bajo las reglas de ese contrato hasta que las reglas liberen los fondos.
Más allá de eso, se aplican las reglas de siempre. Accede a la aplicación mediante un marcador o el enlace de sus canales oficiales, no mediante un anuncio de búsqueda ni un mensaje. Prefiere aplicaciones cuyos contratos hayan sido auditados y cuyo código sea público. Prueba primero con una cantidad pequeña. Y trata cualquier petición de introducir tu frase de recuperación como un ataque, ninguna DApp la necesita.
¿Qué funciona hoy con contratos inteligentes en Cardano?
El intercambio, los préstamos, los stablecoins, los mercados y los videojuegos funcionan con contratos, y los proyectos de identidad también los utilizan. Estos son algunos ejemplos del catálogo de aplicaciones, ordenados por actividad on-chain cuando ese dato está disponible.
Los stablecoins y las DeFi tienen sus propias páginas, y el catálogo lista más de cien aplicaciones de todas las categorías.
Explora todas las aplicaciones¿Cómo construyo uno?
El portal para desarrolladores te lleva desde una primera transacción hasta un contrato desplegado, con tutoriales de Aiken y Plutus, las redes de prueba donde probar cosas de forma segura y las herramientas que usa la mayoría de los equipos. Un contrato llega a la cadena como parte de una transacción, ya sea adjuntado a la transacción que lo usa o publicado una vez en una salida a la que luego se refieren las transacciones posteriores. No existe un registro global de contratos.
FAQ
Resuelven el mismo problema, pero funcionan de otra manera. En Ethereum un contrato es una cuenta con su propio estado que se ejecuta cuando se la invoca. En Cardano un contrato es un validador que aprueba o rechaza una transacción, normalmente una que gasta las salidas que el script custodia. El modelo de Cardano te indica el resultado del script y el coste antes de firmar, aunque la transacción puede rechazarse igualmente si una entrada que necesitaba se gastó antes. El precio de este enfoque es diseñar sobre salidas en lugar de sobre estado compartido.
No. Un script solo puede controlar los fondos que se le enviaron en una transacción que alguien firmó, y solo puede gastarlos en transacciones que cumplan sus reglas. Los fondos de tu cartera solo se mueven con tu firma.
La aplicación o la cartera normalmente evalúa el script antes de que firmes, así que rara vez se envía una transacción que va a fallar. Si aun así se envía y su script falla on-chain, el colateral que tu cartera reservó cubre el trabajo de la red, y el resto de la transacción no se ejecuta.
No. Cardano no tiene sistema de allowances. Tu firma se compromete con la transacción exacta que firmas y nada más, así que revisa las entradas, las salidas y los avisos que muestre tu cartera. Una DApp no podrá gastar nada más de tu cartera después.
Un script se identifica por el hash de su código, así que el código en sí no puede cambiar. Los proyectos actualizan desplegando una versión nueva y moviendo los fondos conforme a las reglas que permite el script antiguo, a veces bajo el control de un token de gobernanza o de una clave de multifirma. Comprueba cómo gestiona un proyecto las actualizaciones antes de confiarle cantidades importantes.
Aiken es la vía más rápida para la mayoría de los desarrolladores, con una sintaxis familiar y buenas herramientas. Plinth, antes Plutus Tx, es la elección si ya conoces Haskell, y Plutarch si quieres un control fino sobre el coste de ejecución. Todos compilan al mismo lenguaje on-chain.