Plutus: configuración inicial del ambiente de desarrollo

Falcon Stakepool
6 min readJan 17, 2022

Ya son varias las personas que nos han consultado por documentación en español sobre Plutus. La realidad es que, al ser un lenguaje de programación tan nuevo y al encontrarse aún en una etapa experimental, no existen tantas fuentes que podamos consultar como sí las hay para otros lenguajes.

Por este motivo, les traemos una guía paso a paso en español, para que puedan configurar su ambiente , comenzar a desarrollar en Plutus hoy mismo y saber exactamente a dónde dirigirse en caso de que tengan dudas.

Empecemos…

Para realizar la configuración inicial de nuestro ambiente de desarrollo, utilizaremos el repositorio oficial de Plutus. Además, haremos uso del código que se encuentra en el Plutus Pioneer Program, a modo de ejemplo inicial.

Para estructurar esta guía, abordaremos cada uno de los siguientes aspectos de forma particular, dando algunos consejos en cada caso, en base a nuestra experiencia personal:

Sistema Operativo

El sistema operativo recomendado para poder correr Plutus es Ubuntu 20.04.

En caso de que no quieras instalarlo directamente en tu computadora, ya sea como sistema operativo por defecto (muy recomendado si tu intención es adentrarte en el mundo del desarrollo Blockchain) o en una partición del disco, lo que puedes hacer es correrlo desde un VPS (Virtual Private Server). Algunas de las opciones más conocidas son Amazon Web Services, Vultr y Digital Ocean.

Otra opción también bastante utilizada es ejecutarlo desde una Virtual Machine como VirtualBox, por ejemplo.

Para los que poseen Windows, existe la posibilidad de ejecutar Linux utilizando el Windows Subsystem for Linux.

Requerimientos Mínimos

Para poder desarrollar en Plutus necesitamos:

  • Al menos 30GB de espacio en disco.
  • 16GB de RAM (para estar tranquilos). Se puede ejecutar con 8GB aunque realmente no es lo recomendado. En ese caso debemos agregar una memoria Swap de al menos 4GB. Básicamente, cuanta más memoria RAM podamos tener, mejor.

Dependencias

Lo primero que debemos hacer una vez que tengamos Ubuntu listo, es instalar todas las depedencias que necesitamos para poder correr Plutus. Esto lo haremos ejecutando los siguientes comandos desde una Terminal:

sudo apt update -ysudo apt upgrade -ysudo apt install build-essential curl libffi-dev libffi7 libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 -y

Lo siguiente que debemos hacer es instalar Cabal y GHC. Cabal es un sistema que nos ayuda a construir y empaquetar librerías y programas Haskell mientras que GHC es el compilador que necesitamos para este lenguaje de programación funcional.

Para instalarlos debemos ejecutar lo siguiente:

curl — proto ‘=https’ — tlsv1.2 -sSf https://get-ghcup.haskell.org | sh

Nota: cuando se nos consulte si queremos instalar el Haskell Language Server (HLS) debemos decir que NO. Lo mismo debemos decir cuando se nos consulte por Stack. En cambio, cuando se nos pregunte si queremos agregar la variable PATH requerida al “.bashrc”, debemos responder (A) Append — agregar al final del archivo.

Una vez finalizada la instalación, debemos verificar que estamos utilizando las versiones correctas de ambos softwares. Utilizaremos Cabal 3.4.1.0 y GHC 8.10.7.

Para eso:

ghcup install cabal 3.4.1.0
ghcup install ghc 8.10.7
ghcup set cabal 3.4.1.0
ghcup set ghc 8.10.7

Finalmente, ejecutamos:

cabal --version
ghc --version

En caso de que las versiones no sean las correctas, va a ser necesario que reinicies tu Terminal.

Nix

Nix es un administrador de paquetes que nos sirve, entre otras cosas, para asegurarnos de que dos personas que compilan los mismos paquetes obtienen exactamente el mismo resultado, independientemente del ambiente de desarrollo que posea cada uno.

Otro beneficio que obtenemos de Nix es el almacenamiento en caché binario. Como veremos más adelante, esto nos da la opción de obtener paquetes precompilados desde otras ubicaciones, siempre y cuando confiemos en la entidad que los genera. En nuestro caso, utilizaremos los suministrados por IOHK.

Para instalar Nix de la manera recomendada, ejecutaremos lo siguiente desde una Terminal. Es importante que nuestro usuario tenga privilegiossudo:

sh <(curl -L https://nixos.org/nix/install) --daemon

Al finalizar la instalación, debemos ejecutar lo siguiente:

. ~/.nix-profile/etc/profile.d/nix.sh

Luego, debemos editar el archivo /etc/nix/nix.confpara incluir la caché binaria de IOHK:

sudo nano /etc/nix/nix.conf

Si no posees este archivo, entonces genera el siguiente a través del comando:

nano ~/.config/nix/nix.conf

Luego, agrega las siguientes dos líneas al final del archivo:

substituters        = https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/
trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=

Al finalizar todos estos pasos, recomendamos reiniciar la Terminal para asegurarnos de que todos los cambios hayan sido tomados por Nix.

Build de Plutus

Para comenzar el build de Plutus, lo que debemos hacer es clonar el repositorio de Github de IOHK:

git clone https://github.com/input-output-hk/plutus-apps.git

Además, aprovecharemos y clonaremos el del Plutus Pioneer Program. Lo utilizaremos como ejemplo de código inicial más adelante:

git clone https://github.com/input-output-hk/plutus-pioneer-program

Ingresamos al repositorio de Plutus:

cd plutus-apps

Nos posicionamos en la última versión del código:

git checkout 41149926c108c71831cfe8d244c83b0ee4bf5c8a

Desde ahí, ejecutamos el comando:

nix-shell

El proceso completo llevará unos cuantos minutos (de 25 a 45, dependiendo de los recursos disponibles en tu sistema).

Nota: detenerlo por completo en caso de que veamos que comenzamos a compilar el GHC. Esto quiere decir que nuestro Nix no está tomando correctamente la caché binaria de IOHK.

Si esto ocurre, debemos:

  1. Reiniciar nuestro sistema por completo. Y volver a intentar el nix-shell para ver si ahora la caché está correctamente actualizada.
  2. Verificar nuevamente el archivo nix.conf , asegurándose de que incluye éstas dos líneas al final del mismo:
substituters        = https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/
trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=

Cabal para Desarrolladores

Una vez que hayamos logrado ejecutar el nix-shell , nos dirigiremos al código del Plutus Pioneer Program (week01):

cd ..
cd plutus-pioneer-program/code/week01

Y desde ahí ejecutaremos:

cabal update
cabal build
cabal repl

Ahora ya tienes compilado el código del contrato EnglishAuction.hs en tu Terminal. De esta manera, puedes utilizar un editor de texto como Visual Studio Code (con su extensión para Haskell) para programar tus contratos en Plutus y compilarlos directamente desde la Terminal.

Plutus Playground

Una muy buena forma de probar tus contratos y ver cómo interactúan con la Blockchain es a través del Plutus Playground. Esta herramienta nos permite compilar código Plutus de forma más amigable e incluso “simular” la ejecución de nuestros contratos (con sus correspondientes transacciones asociadas).

Podemos compilar y ejecutar localmente el Plutus Playground ingresando al repositorio de Plutus y ejecutando nix-shell:

cd plutus-apps
nix-shell

Luego, ingresaremos a la carpeta de Plutus Playground:

cd plutus-playground-client

Y ejecutaremos el Server de la siguiente manera:

plutus-playground-server

Como siguiente paso, abriremos otra Terminal y ejecutaremos otro nix-shell desde la misma:

cd plutus-apps
nix-shell

Nos dirigiremos nuevamente a la carpeta de Plutus Playground:

cd plutus-playground-client

Y esta vez, en lugar de ejecutar el Server, ejecutaremos el Client a través del comando:

npm run start

Ahora, la instancia local de nuestro Plutus Playground será accesible desde:

https://localhost:8009

Ahora, lo único que debes hacer es reemplazar el código que viene por defecto en el Playground por el código que se encuentra dentro del archivo plutus-pioneer-program/code/week01/src/Week01/EnglishAuction.hs.

Asegúrate de eliminar las siguientes líneas, de lo contrario no funcionará la compilación:

module Week01.EnglishAuction
( Auction (..)
, StartParams (..), BidParams (..), CloseParams (..)
, AuctionSchema
, start, bid, close
, endpoints
, schemas
, ensureKnownCurrencies
, printJson
, printSchemas
, registeredKnownCurrencies
, stage
) where

Luego, debes hacer click en el botón “Compile” y tendrás tu primer contrato compilado dentro de tu instancia local del Plutus Playground.

Documentación

Para acceder a la documentación de Plutus debemos lanzar nix-shell :

cd plutus-apps
nix-shell

Y ejecutar el comando:

build-and-serve-docs

Ahora podremos acceder a la documentación básica de Plutus a través de:

http://0.0.0.0:8002/

Y quedará disponible, también, la documentación específica de todas las librerías públicas de Plutus desde:

http://0.0.0.0:8002/haddock/

Canales de Soporte

El mejor lugar para evacuar dudas técnicas sobre Plutus es Stack Exchange. La única contra de esta herramienta es que se encuentra en inglés, por ser un repositorio global. Además, aún se encuentra en su versión Beta, con lo cual, seremos nosotros los encargados de nutrirlo día a día con preguntas y, por qué no, ¡respuestas también!

Por otro lado, podés unirte al Discord de ALDEA y consultar directamente en el canal llamado 🚀haskell-plutus. Allí somos varios los SPOs y desarrolladores de la comunidad que podemos ayudarte a despejar tus inquietudes.

--

--

Falcon Stakepool

Falcon Stakepool promueve e impulsa la tecnología Blockchain y el uso de Smart Contracts en América Latina.