La publicación Creación de una aplicación blockchain con Plutus apareció primero en Coinpedia Fintech News

Introducción

La tecnología blockchain está contribuyendo a diversas industrias a través de sus soluciones descentralizadas y transparentes. Los avances en el ámbito del desarrollo han tenido un cambio transformador en los desarrolladores y las comunidades. Los beneficios de la tecnología blockchain se extienden más allá de la descentralización. Ahorra el tiempo que lleva la transacción y no necesita ninguna verificación de terceros, lo que reduce los riesgos de fraude y ciberataques. Como desarrollador, es valioso comprender cómo crear aplicaciones blockchain, especialmente cuando se utilizan herramientas poderosas como Plutus. Plutus es una plataforma de contratos inteligentes en la cadena de bloques Cardano. Ofrece un marco sólido para que los desarrolladores creen aplicaciones descentralizadas (DApps) seguras y eficientes.

¿Qué es Cardano?

Cardano es una plataforma blockchain lanzada por Charles Hoskinson (cofundador de Ethereum) en 2017. Cardano es una plataforma de tercera generación, a menudo considerada una alternativa a Ethereum, una plataforma de segunda generación. Utiliza un mecanismo de prueba de participación que es más eficiente que los tradicionales. Cardano tiene su propia criptomoneda ADA, llamada así por Ada Lovelace. Tiene dos capas separadas, una que maneja las transacciones y cuentas, mientras que la otra se usa para administrar los contratos inteligentes y la computación. Cardano tiene como objetivo crear una plataforma blockchain que sea más segura, escalable y adaptable que sus predecesoras y se esté utilizando en varias aplicaciones, incluida la gestión de la cadena de suministro, la verificación de identidad digital y los servicios financieros en los mercados emergentes.

Plutón

Plutus es un lenguaje de programación que se utiliza para escribir contratos inteligentes basados ​​en Cardano. Plutus se basa en Haskell, que es un lenguaje funcional. Como desarrollador, no es necesario que escribas el núcleo de Plutus, sino que todos los scripts se generarán mediante un complemento de compilación de Haskell. Plutus admite la verificación formal, que proporciona una forma de demostrar la corrección de un programa mediante matemáticas. Por lo tanto, mejora la seguridad y reduce la probabilidad de errores en el contrato inteligente.

Plutus está integrado de forma nativa en la cadena de bloques Cardano, lo que permite a los desarrolladores interactuar directamente con el libro de contabilidad y la infraestructura de Cardano. Esto le ayuda a crear e implementar los contratos inteligentes que interactúan directamente con el ecosistema Cardano. Plutus tiene herramientas que le ayudan a simular los contratos inteligentes sin el nodo Cardano completo y experimentar antes de implementarlo en la red principal. Plutus es ideal para desarrolladores que buscan crear aplicaciones descentralizadas confiables y de alto rendimiento.

Audiencia

Este artículo está dirigido a desarrolladores que son nuevos en el desarrollo de cadenas de bloques y tienen poco conocimiento de programación básica. Le guiaremos a través de los pasos esenciales para configurar su entorno, comprender los conceptos de la cadena de bloques y crear una aplicación de cadena de bloques simple con Plutus.

Configuración del entorno de desarrollo

Es fundamental contar con una configuración perfecta antes de iniciar el proceso de desarrollo. Por lo tanto, configurar un entorno compatible con Plutus es el punto de partida de este capítulo.

1. Instalación de Plutus

Descarga Plutus desde el repositorio oficial:

clon de git https://github.com/input-output-hk/plutus-apps.gitcd plutus-appsnix-shell

Verifique la instalación usando: plutus -v

2. Elección de un IDE

Al desarrollar aplicaciones con Plutus, es fundamental contar con el IDE adecuado. Plutus se basa en Haskell, por lo que se recomienda tener un IDE que lo admita. Dos opciones populares para el desarrollo de Plutus son Visual Studio Code (VS Code) y Plutus Playground. Aquí encontrará una guía ampliada sobre cómo configurar y usar estos IDE para el desarrollo de Plutus.

Visual Studio Code: VS Code es un editor de código muy flexible y versátil que admite casi todos los lenguajes y tiene extensiones muy útiles. Por lo tanto, es el editor favorito de los desarrolladores para trabajar. VSCode es de código abierto y proporciona una amplia gama de herramientas y funciones para completar el código.

Pasos para configurar VSCode:

  • Descargue VSCode desde el sitio oficial (según la codificación de su sistema operativo)

  • Instalar el software

  • Plutus está construido sobre Haskell, por lo que necesita instalar la plataforma Haskell, que incluye el compilador Glasgow Haskell (GHC) y cabal (una herramienta de compilación para Haskell).

  • Descargar Haskell

  • Instalar las extensiones de Haskell en VS Code (Haskero, Haskell Syntax Higlighting, etc.)

  • Configurar las extensiones y configurar extensiones adicionales

  • ¡Como ya has instalado Plutus estás listo para empezar!

Plutus Playground: Plutus Playground es un editor web en línea especialmente diseñado para contratos inteligentes de Plutus. Por lo tanto, no necesita ninguna instalación y es perfecto para que los principiantes adquieran algo de confianza mientras codifican.

¡Puedes visitar el sitio web de Plutus Playground y comenzar!

Ambos entornos se pueden usar de manera efectiva para el desarrollo de Plutus, y es posible que descubra que combinarlos (usando VS Code para proyectos más grandes y Plutus Playground para pruebas y creación de prototipos rápidos) ofrece lo mejor de ambos mundos.

3. Instalación de las bibliotecas necesarias

Utilice cabal para instalar bibliotecas esenciales para el desarrollo de Plutus.

Comprender los conceptos de blockchain con Plutus

Blockchain es una base de datos distribuida y avanzada que almacena los registros de transacciones en forma de bloques. Cada uno de los bloques debe estar vinculado con los demás mediante principios criptográficos. Se utilizan mecanismos robustos para salvaguardar los bloques, por lo que no se puede alterar ningún registro de las monedas antes de tiempo y sin afectar a los bloques posteriores.

Blockchain tiene tres componentes básicos:

  • Bloques: Los bloques contienen información sobre las transacciones junto con metadatos. Todos los bloques están vinculados entre sí a través de hash que forma una cadena de bloques, de ahí la cadena de bloques.

  • Transacciones: Una transacción es una transferencia de datos de una entidad a otra dentro de la cadena de bloques. En Plutus, las transacciones se escriben en Haskell e implican UTXO (Unspent Transaction Outputs) de entrada y salida.

  • Cadenas: En Plutus, la cadena mantiene el orden de las transacciones y asegura que sean inmutables una vez confirmadas.

En el siguiente fragmento de código podemos ver la estructura del Bloque en Plutus:

Se menciona cada componente del bloque junto con su tipo de datos.

  • El índice es un número entero que indica la posición de un bloque.

  • La marca de tiempo es el momento en el que se creó el bloque.

  • Transacciones es la cadena o una lista de todas las transacciones incluidas en un bloque particular

  • El hash es un patrón único y la clave principal para identificar un bloque.

  • El hash anterior se refiere a la continuidad y es el hash del último bloque.

En este fragmento de código podemos ver la estructura de Transacciones en Plutus:

Descentralización, inmutabilidad y mecanismos de consenso:

La base de blockchain se basa en tres principios básicos: descentralización, inmutabilidad y mecanismo de consenso.

Descentralización: La descentralización es una propiedad por la cual ninguna entidad tiene control sobre la base de datos de la cadena de bloques, lo que hace que el fallo del sistema y la parcialidad sean casi imposibles. Cada dispositivo participante (nodo) mantiene una copia de la cadena de bloques, lo que garantiza la transparencia e inhibe el fallo o la manipulación centralizada.

Inmutabilidad: una vez que los datos se escriben en una cadena de bloques, no se pueden cambiar sin alterar todos los bloques posteriores. Esto se hace con la ayuda del hash criptográfico. Por lo tanto, todos los cambios realizados una vez no se pueden deshacer, lo que los hace inmutables.

Mecanismo de consenso: un conjunto de protocolos que rigen todas las necesidades de la cadena de bloques. Todos los nodos de la red deben ponerse de acuerdo sobre los métodos. Los mecanismos de consenso se utilizan para optimizar los nodos y garantizar que todos los nodos de la red estén en la misma sintonía.

Construyendo una cadena de bloques simple con Plutus

El bloque es la unidad primitiva de cualquier cadena de bloques. En este fragmento de código, hemos definido un tipo de datos de bloque junto con sus componentes.

Además, después de haber definido la clase de bloque, debemos garantizar la integridad de la cadena de bloques, donde cada bloque debe tener un hash único. Por lo tanto, con la función de cálculo de hash, utilizamos SHA256, el popular método de hash para lo mismo en Plutus.

Una vez que completes la definición de un bloque, sigue adelante e inicializa tu cadena de bloques con la ayuda de un bloque génesis, que es el primer bloque de cualquier cadena de bloques. ¡Guau! Acabas de crear una cadena de bloques, pero eso no es todo, necesitas agregar nuevos bloques y recuperar también el último bloque.

¡Continúe y consulte el código a continuación en caso de que necesite ayuda!

Implementando mecanismos de consenso en Plutus

Cardano utiliza el mecanismo PoS, aunque primero adoptó la Prueba de Trabajo. Plutus está diseñado para ser compatible con el protocolo PoS Ouroboros de Cardano, ofreciendo escalabilidad, eficiencia energética y seguridad para aplicaciones descentralizadas (DApps).

A continuación se muestra una descripción general de los algoritmos de consenso que pueden funcionar con Plutus

  • Ouroboros: Ouroboros es un mecanismo de prueba de participación con el que Plutus es altamente compatible y que depende de la participación de ADA que los validadores estén dispuestos a asumir para validar un nuevo bloque. Los contratos de Plutus interactúan sin problemas con el protocolo Ouroboros, lo que garantiza que la ejecución de los contratos inteligentes siga siendo segura y energéticamente eficiente.

  • Prueba de trabajo: PoW es el mecanismo más antiguo y se utilizó ampliamente en todas las criptomonedas más antiguas. Todavía se puede implementar en papel en el caso de Plutus. Esto sería más útil al pensar en escenarios aislados como propósitos educativos y experimentales.

  • Prueba de trabajo delegada y tolerancia a fallas bizantinas: estos mecanismos no son particularmente compatibles con Cardano, pero aún pueden implementarse teóricamente en Plutus.

En esta sección, exploraremos cómo se puede utilizar la prueba de trabajo en Plutus.

En la prueba de trabajo, los mineros deben competir en el tiempo para resolver un rompecabezas criptográfico y convertirse en validadores de la nueva moneda. En este código, la función de prueba de trabajo busca un nonce que, cuando se combina con el hash del bloque anterior, produce un hash con una cierta cantidad de ceros a la izquierda. Esta es una implementación básica de PoW, donde el nivel de dificultad determina qué tan difícil es encontrar un nonce válido.

Una vez que complete la implementación de la Prueba de Trabajo, deberá actualizar la cadena de bloques para validar la prueba que se extrajo.

Aquí está el fragmento de código de ejemplo:

Esta función garantiza que un nuevo bloque solo se agregue a la blockchain si su prueba es válida, manteniendo la integridad de la cadena.

Creación de una API de blockchain sencilla con Plutus

En este capítulo, aprenderá a crear una API simple para interactuar con una aplicación de cadena de bloques creada con Plutus. Esta API le permitirá agregar bloques y ver la cadena de bloques a través de solicitudes HTTP.

Pasos para crear una API:

  • Configurar el entorno para la API: Instalar Haskel (que ya está hecho), luego instalar Servant usando Cabal

  • Descargue todas las bibliotecas necesarias:

    • Servidor: Para crear la API

    • Aeson para codificar y decodificar el JSON: cabal install aeson plutus-core

    • Plutus para integrar todo el código y la lógica

Para comenzar a crear la API, primero debemos agregar un nuevo bloque y retirar el estado actual de la cadena de bloques. Ambos pasos se han realizado en los capítulos anteriores.

Ahora puedes continuar y definir los puntos finales:

{-# LANGUAGE DataKinds #-}{-# LANGUAGE TypeOperators #-} module BlockchainAPI whereimport Servantimport Control.Monad.IO.Class (liftIO)— Define el tipo de bloque (consulta el Capítulo 3) data Block = Block  { index        :: Int  , timestamp    :: String  , dataField    :: String  , previousHash :: String  , hash         :: String  } deriving (Show, Eq)— Blockchain es simplemente una lista de bloques type Blockchain = [Block]— Define el tipo de API type BlockchainAPI =  “addBlock” :> ReqBody ‘[JSON] Block :> Post ‘[JSON] Blockchain:<|> “chain” :> Get ‘[JSON] Blockchain— Marcador de posición para la cadena de bloques, comenzando inicialmente solo con el bloque génesisgenesisBlock = Block 0 “2024-09-12 00:00:00” “Genesis Block” “0” “some_hash”initialBlockchain:: BlockchaininitialBlockchain = [genesisBlock]–– Controladores para los puntos finales de la APIaddBlockHandler :: Blockchain -> Block -> Handler BlockchainaddBlockHandler blockchain newBlock = dolet newBlockchain = blockchain ++ [newBlock]    liftIO $ putStrLn “¡Bloque añadido!”     return newBlockchain— Controlador para recuperar la cadenaviewChainHandler :: Blockchain -> Handler BlockchainviewChainHandler blockchain = return blockchain–Punto de entrada principal para ejecutar la APIapp :: Applicationapp = serve (Proxy :: Proxy BlockchainAPI) (blockchainServer initialBlockchain)

Explicación del código anterior:

  • El bloque se define de manera similar a los capítulos anteriores.

  • La biblioteca Servant se utiliza para definir la estructura de la API. Hay dos métodos para definir los puntos finales de la API, GET y POST, es decir, recuperar y agregar la cadena de bloques respectivamente.

  • También hemos definido controladores (addBlockHandler) para manejar los nuevos bloques que se están agregando y viewChainHandler para ver el otro bloque.

  • Al final, hay una función principal que es el corazón del código, une todo y ejecuta el servidor API.

Después de la definición de la API, tienes dos métodos para agregar los puntos finales y recuperar la información del punto final de Blockchain.

¡Genial! Has implementado esta subsección con éxito y ahora puedes ejecutar la API con Cabal y estás listo para continuar con la siguiente parte.

Ejecución y prueba de la aplicación

Después de crear la API de blockchain, es hora de probarla. Usaremos Postman o curl para interactuar con la API y verificar que funcione correctamente.

Pasos para ejecutar y probar la aplicación:

  • Compila el programa y ejecútalo: cabal build cabal run

  • Iniciar el servidor: La API debe estar disponible en http://localhost:8080

  • Probar y agregar los puntos finales del bloque

{  “índice”: 1,  “marca de tiempo”: “2024-09-12 12:30:00”,  “campo de datos”: “Este es mi nuevo bloque”,  “Hash anterior”: “algún_hash”,  “hash”: “nuevo_hash_de_bloque”}

Ver la cadena de bloques

rizo http://localhost:8080/chain

Si sigue estos pasos, ahora tendrá una aplicación de cadena de bloques simple ejecutándose con una API creada con Plutus. La API permite que las aplicaciones o los usuarios externos interactúen con su cadena de bloques agregando nuevos bloques y viendo el estado actual de la cadena de bloques.

Ejemplo en vivo de creación de una aplicación blockchain con Plutus

El fragmento de código anterior es una ejecución paso a paso de:

  • Paso 1: Cree el tipo de datos Bloque con los atributos necesarios utilizando la sintaxis Plutus.

  • Paso 2: Implementar el método calculate_hash.

  • Paso 3: Definir el tipo de datos de Blockchain e inicializarlo con un bloque de génesis.

  • Paso 4: Implementar métodos para agregar nuevos bloques y recuperar el último bloque usando Plutus.

  • Paso 5: Agregue la funcionalidad de Prueba de trabajo al tipo de datos de Bloque y actualice el tipo de datos de Blockchain.

  • Paso 6: Configure el entorno API para manejar solicitudes mediante Plutus.

  • Paso 7: Pruebe la aplicación extrayendo un nuevo bloque y verificando la cadena de bloques utilizando Postman o Curl

¡Felicitaciones! Has llegado al final del módulo y has aprendido todos los conceptos básicos de Plutus.

A medida que te adentras en el desarrollo de cadenas de bloques con Plutus, no solo estás escribiendo código, sino que estás creando la columna vertebral de sistemas descentralizados que podrían redefinir las industrias. ¡Sigue aprendiendo y disfruta de la codificación!

Consulte también: Cómo diseñar, desarrollar e implementar su propia criptomoneda: una guía paso a paso