HardHat: "Hola Mundo!" en un Blockchain de Prueba
Tags: blockchain, ethereum, solidity, truffle
Published: 2021-06-05 18:13:54

---
title: HardHat: "Hola Mundo!" en un Blockchain de Prueba
published: true
description: 
tags: #blockchain, #ethereum, #solidity, #truffle
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u5tnfdilsuo6hjlp7ga2.png
---

Truffle es una herramienta nueva 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.

{% youtube uaRsemvYkfo %}

Antes de iniciar asegurate de instalar node (te recomiendo que lo instales [via nvm](https://heynode.com/tutorial/install-nodejs-locally-nvm)) y creamos nuestra carpeta de proyecto e instalamos las dependencias.

Antes de iniciar creamos nuestra carpeta de proyecto e instalamos las dependencias.

```bash
mkdir MyHardhatProject
cd MyHardhatProject
npm install --save-dev hardhat
```

## 1. Compilar un contrato

Primero inicializamos HardHat. Usamos este comando y apretamos enter un par de veces para mantener los valores predeterminados.

```bash
npx hardhat
```

Ahora podemos borrar el contrato que viene por defecto `Greeter.sol` y escribimos nuestro nuevo en la carpeta `contracts/`.

`contracts/MyContract.sol`
```solidity
// 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;
    }
}
```

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

`hardhat.config.js`
```js
[...]
module.exports = {
  solidity: "0.8.4",
};
[...]
```

Ahora podemos compilar nuestro contrato.

```bash
npx hardhat compile
```

## 2. Deploy local

Levantamos un servidor de blockchain de prueba local.

```bash
npx hardhat node
```

Modificamos el script de deploy de ejemplo para ajustarlo a nuestro contrato.

`scripts/sample_script.js`

```js
const hre = require("hardhat");

async function main() {
  const MyContract = await hre.ethers.getContractFactory("MyContract");
  const my_contract = await MyContract.deploy("Hello, Hardhat!");

  await my_contract.deployed();

  console.log("MyContract deployed to:", my_contract.address);
}
main()
  .then(() => process.exit(0))
  .catch(error => {
    console.error(error);
    process.exit(1);
  });

```

Ahora sí podemos _deployar_ nuestro contrato en el blockchain local de HardHat.

```bash
npx hardhat run --network localhost scripts/sample-script.js
```

Interactuamos con el contracto mediante la consola de HardHat. Que imprimirá el _address_ del contrato.

```bash
npx hardhat console --network localhost
```

Una vez dentro de la consola de HardHat podemos leer variables y ejecutar funciones. Asegurate de colocar el address de tu contrato que se mostró cuando hiciste deploy.

```bash
const MyContract = await ethers.getContractFactory("MyContract")
const my_contract = await MyContract.attach("0x5FbDB2315678afecb367f032d93F642f64180aa3")
await my_contract.hello()
await my_contract.setHello("Probando...")
await my_contract.hello()
```

## 3. Deploy en un testnet

Asegúrate de tener lo siguiente:

1. Una wallet instalada, mi recomendación es [metamask](https://metamask.io/)
2. Fondos de Kovan testnet que puedes conseguir gratis en el [faucet](https://faucet.kovan.network/)
3. Una llave para Kovan en [Infura](https://infura.io/)

En nuestro archivo de configuración de HardHat agregamos la opción `kovan` dentro de `networks` como se indica a continuación. Asegurate de pegar tu infura Project ID en la variable `infuraKey`.

`hardhat.config.js`
```js
require("@nomiclabs/hardhat-waffle");

task("accounts", "Prints the list of accounts", async () => {
  const accounts = await ethers.getSigners();

  for (const account of accounts) {
    console.log(account.address);
  }
});

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

module.exports = {
  solidity: "0.8.4",
  networks: {
    kovan: {
      url: `https://kovan.infura.io/v3/${infuraKey}`,
      accounts: {mnemonic: mnemonic}
    }
  },
};
```

⚠️⚠️⚠️ 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ttky8gtjso0ivi1tgmt.png)

⚠️⚠️⚠️Copia tu `seed pharase` en un archivo vacío y llámalo `.secret`. Agregalo a tu `.gitignore`. ¡No olvides agregarlo a tu .gitignore!⚠️⚠️⚠️

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

`.gitignore`

```
.secret
```

Ahora _deployamos_ en Kovan e ingresamos en la consola, muy similar a como lo hicimos antes. Esto mostrará el _address_ de tu contrato. Cópialo porque lo usaremos más adelante.

```bash
npx hardhat run --network kovan scripts/sample-script.js
```

```bash
npx hardhat console --network kovan
```

Podemos interactuar con el contrato de la misma manera que lo hicimos anteriormente. Asegurate de agregar el _address_ de tu contrato cuando ejecutes la funcion `attach`.

```bash
const MyContract = await ethers.getContractFactory("MyContract")
const my_contract = await MyContract.attach("0x5FbDB2315678....")
await my_contract.hello()
await my_contract.setHello("Probando...")
await my_contract.hello()
```

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](https://www.youtube.com/channel/UCNRB4tgwp09z4391JRjEsRA) para todo lo relacionado al desarrollo en Blockchain en Español.