DEV Community

Cover image for Truffle: "Hola Mundo!" en un Blockchain de Prueba
Ahmed Castro
Ahmed Castro

Posted on • Updated on

Truffle: "Hola Mundo!" en un Blockchain de Prueba

Truffle es una herramienta que nos ayuda a compilar y deployar smart contracts en el blockchain. En este blog escribiremos un "Hola mundo!" en Solidity para introducirnos al desarrollo de aplicaciones decentralizadas.

Antes de iniciar asegurate de instalar node (te recomiendo que lo instales via nvm) y creamos nuestra carpeta de proyecto e instalamos las dependencias.

mkdir MyTruffleProject
cd MyTruffleProject
npm install --save-dev truffle ganache-cli @truffle/hdwallet-provider
Enter fullscreen mode Exit fullscreen mode

1. Compilar un contrato

Primero inicializamos Truffle.

npx truffle init
Enter fullscreen mode Exit fullscreen mode

Ahora podemos escribir nuestro contrato en la carpeta contracts/

contracts/MyContract.sol

// SPDX-License-Identifier: MIT

pragma solidity 0.8.4;

contract MyContract {
    string public hello;

    constructor()
    {
        hello = "Hola mundo!";
    }

    function setHello(string memory _hello) public {
        hello = _hello;
    }
}
Enter fullscreen mode Exit fullscreen mode

Antes de compilar, necesitamos indicarle a Truffle que vamos a usar la versión 0.8.4 de solidity.

truffle-config.js

[...]
  // Configure your compilers
  compilers: {
    solc: {
       version: "0.8.4",    // <- Coloca aquí la versión de Solidity
      // docker: true,        
      // settings: {          
      //  optimizer: {
      //    enabled: false,
      //    runs: 200
      //  },
      //  evmVersion: "byzantium"
      // }
    }
  },
[...]
Enter fullscreen mode Exit fullscreen mode

Ahora podemos compilar nuestro contrato.

npx truffle compile
Enter fullscreen mode Exit fullscreen mode

2. Deploy local

Truffle nos pide que creemos un archivo de migración para poder deployar nuestro smart contract. Estos archivos tienen que seguir la numeración 1_*.js, 2_*.js, 3_*.js etc... El primero ya está creado así que creamos el segundo.

migrations/2_my_deploy.js

const MyContract = artifacts.require("MyContract");

module.exports = async function (deployer) {
  await deployer.deploy(MyContract);
};
Enter fullscreen mode Exit fullscreen mode

Abrimos una nueva terminal en la misma carpeta y levantamos un servidor de Ganache, nuestro blockchain de prueba local.

npx ganache-cli --deterministic
Enter fullscreen mode Exit fullscreen mode

Para comunicarnos con Ganache debemos descomentar la sección development dentro de networks.

[...]
  networks: {
     development: {
      host: "127.0.0.1",     // Localhost (default: none)
      port: 8545,            // Standard Ethereum port (default: none)
      network_id: "*",       // Any network (default: none)
     },
[...]
Enter fullscreen mode Exit fullscreen mode

Ahora sí podemos deployar nuestro contrato en el blockchain local de Ganache.

npx truffle migrate --network development
Enter fullscreen mode Exit fullscreen mode

Interactuamos con el contracto mediante la consola de Truffle.

npx truffle console --network development
Enter fullscreen mode Exit fullscreen mode

Una vez dentro de la consola de truffle podemos leer variables y ejecutar funciones.

my_contract = await MyContract.deployed()
await my_contract.hello()
await my_contract.setHello("Probando...")
await my_contract.hello()
Enter fullscreen mode Exit fullscreen mode

3. Deploy en un testnet

Asegúrate de tener lo siguiente:

  1. Una wallet instalada, mi recomendación es metamask
  2. Fondos de Kovan testnet que puedes conseguir gratis en el faucet
  3. Una llave para Kovan en Infura

En nuestro archivo de configuración de Truffle agregamos la opción kovan dentro de networks como se indica a continuación. Recuerda inicializar la variable infuraApiKey con tu Project Id de infura.

truffle-config.js

const HDWalletProvider = require('@truffle/hdwallet-provider');
const infuraKey = "a3e70735b4.....";

const fs = require('fs');
const mnemonic = fs.readFileSync(".secret").toString().trim();

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*",
    },
    kovan: {
      provider: function () {
        return new HDWalletProvider(mnemonic, "wss://kovan.infura.io/ws/v3/" + infuraKey);
      },
      network_id: 42,
      gas: 4000000
    }
  },
  mocha: {
  },
  compilers: {
    solc: {
      version: "0.8.4",
    }
  },
  db: {
    enabled: false
  }
};
Enter fullscreen mode Exit fullscreen mode

⚠️⚠️⚠️ Ahora copia tu mnemonic o seed pharase desde Metamask (Settings > Security & Privacy > Reveal Seed Phrase). Pero ten mucho cuidado y nunca mostrar esto a nadie porque esta es la llave privada de tus fondos.⚠️⚠️⚠️

Alt Text

⚠️⚠️⚠️Copia tu seed pharase en un archivo vacío y llámalo .secret. Y agregalo a tu .gitignore. ¡No olvides agregarlo a tu .gitignore! También agrega la llave de Infura que puedes conseguir gratis creando un proyecto desde tu sitio web. Asegurate que la llave sea para Kovan.⚠️⚠️⚠️

De nuevo, recuerda agregar este archivo a tu .gitignore.

.gitignore

.secret
Enter fullscreen mode Exit fullscreen mode

Ahora deployamos en Kovan e ingresamos en la consola, muy similar a como lo hicimos antes.

npx truffle migrate --network kovan
Enter fullscreen mode Exit fullscreen mode
npx truffle console --network kovan
Enter fullscreen mode Exit fullscreen mode

Podemos interactuar con el contrato de la misma manera que lo hicimos anteriormente.

my_contract = await MyContract.deployed()
await my_contract.hello()
await my_contract.setHello("Probando...")
await my_contract.hello()
Enter fullscreen mode Exit fullscreen mode

El siguiente paso será conectar esto con un frontend web pero será en otro post para no seguir alargando.

Gracias por ver este tutorial!

Sígueme en dev.to y en Youtube para todo lo relacionado al desarrollo en Blockchain en Español.

Discussion (0)