Logo

dev-resources.site

for different kinds of informations.

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

Published at
6/5/2021
Categories
blockchain
ethereum
solidity
truffle
Author
turupawn
Author
8 person written this
turupawn
open
HardHat: "Hola Mundo!" en un Blockchain de Prueba

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.

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

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

mkdir MyHardhatProject
cd MyHardhatProject
npm install --save-dev hardhat
Enter fullscreen mode Exit fullscreen mode

1. Compilar un contrato

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

npx hardhat
Enter fullscreen mode Exit fullscreen mode

Ahora podemos borrar el contrato que viene por defecto Greeter.sol y escribimos nuestro nuevo 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 HardHat que vamos a usar la versión 0.8.4 de solidity.

hardhat.config.js

[...]
module.exports = {
  solidity: "0.8.4",
};
[...]
Enter fullscreen mode Exit fullscreen mode

Ahora podemos compilar nuestro contrato.

npx hardhat compile
Enter fullscreen mode Exit fullscreen mode

2. Deploy local

Levantamos un servidor de blockchain de prueba local.

npx hardhat node
Enter fullscreen mode Exit fullscreen mode

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

scripts/sample_script.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);
  });

Enter fullscreen mode Exit fullscreen mode

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

npx hardhat run --network localhost scripts/sample-script.js
Enter fullscreen mode Exit fullscreen mode

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

npx hardhat console --network localhost
Enter fullscreen mode Exit fullscreen mode

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.

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()
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 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

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}
    }
  },
};
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. Agregalo a tu .gitignore. ¡No olvides agregarlo a tu .gitignore!⚠️⚠️⚠️

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. Esto mostrará el address de tu contrato. Cópialo porque lo usaremos más adelante.

npx hardhat run --network kovan scripts/sample-script.js
Enter fullscreen mode Exit fullscreen mode
npx hardhat console --network kovan
Enter fullscreen mode Exit fullscreen mode

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.

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()
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.

truffle Article's
30 articles in total
Favicon
Hardhat vs Truffle: Which One Is the Best for Developing Ethereum dApps?
Favicon
Help Me With Ubuntu Terminal...
Favicon
How to write, test and deploy Ethereum smart contracts using Truffle
Favicon
Create & deploy an ERC-20 token in 15 minutes (Truffle, OpenZeppelin, Goerli)
Favicon
How to Run Ganache in a Browser
Favicon
121 ethereum truffle : Writing automated smart contract tests
Favicon
11Z ethereum truffle : Deploying and interacting with smart contracts
Favicon
11X ethereum truffle : Developing smart contracts
Favicon
how to use web3.js instead of Ethers in react Dapp and connect to hardhat node
Favicon
Truffle React box using functional Components
Favicon
Build a simple dApp using truffle, ganache, Ethers.js and React(1)
Favicon
How To Mint an NFT on Polygon
Favicon
Hardhat vs Truffle: Which one is better for writing Smart Contracts?
Favicon
Interactuar con contratos en Ethereum
Favicon
Tutorial: Play with Truffle & Ganache
Favicon
has no network configuration for its current network id (5777).
Favicon
Roadmap to become a Blockchain developer
Favicon
How to Fork Ethereum and Replay Historical Transactions with Ganache 7 Archive Support
Favicon
Deploy your smart contracts on any Ethereum network
Favicon
TruffleでGoerliネットワークにコントラクトをデプロイする
Favicon
A Guide to Building, Testing, and Deploying your First DApp with Truffle, Ethers.js, Ganache, and React.
Favicon
Introduciendo Web3 con Angular usando Truffle Box — Aplicaciones Descentralizadas al alcance de todos
Favicon
HardHat: "Hola Mundo!" en un Blockchain de Prueba
Favicon
Using React with Truffle
Favicon
Interacting with Truffle
Favicon
Introducing Truffle
Favicon
How to configure Truffle to connect to RSK
Favicon
Avoiding Call Revert Exception Error when accessing Truffle Ganache via Ethers in Node
Favicon
Short, sharp Solidity: pure vs view vs call
Favicon
Decomposing a BigNumber in Truffle Console

Featured ones: