ETH Kipu
  • Ethereum Developer Pack
  • Módulo 1
    • Intro a Smart Contracts
      • Fundamentos de Blockchain
        • Antecedentes
        • Bitcoin
        • Qué es Blockchain
        • Conceptos Clave en Blockchain
        • Cómo funciona la Blockchain
        • Tipos de Blockchain
        • Modelos de Consenso
      • El nuevo Internet
        • Web 3
        • Elementos Fundamentales
        • Impacto de Ethereum en Diversos Sectores
      • Wallets
        • Componentes de una wallet
        • Tipos de Wallet
        • Códigos mnemónicos
      • Ethereum 101
        • Smart Contracts
        • Cuentas
          • Tipos de cuentas
          • Contenido de cuentas
        • Transacciones
          • Componentes
          • Ciclo de vida
        • Gas
        • Solidity
        • EVM
          • La máquina de estados
          • Opcodes
          • Cómo funciona la EVM
          • Clientes de ejecución
          • DApps
      • Blockchain Explorer
        • Funciones de un blockchain explorer
        • Beneficios de utilizar un blockchain explorer
      • Remix
        • Características de Remix
        • Workspaces o espacios de trabajo
        • Cargar y compilar un contrato
        • Desplegar en la máquina virtual de Remix (Remix VM)
        • Interactuando con funciones
        • Desplegar en una red pública
      • Crea tu primer Smart Contract
  • Módulo 2
    • Fundamentos de Solidity
      • Hello World
      • Tipos de Datos
      • Funciones
      • Variables
        • Ejercicio 1
      • Operadores
        • Ejercicio 2
      • Constructor
        • Ejercicio 3
      • Convenciones de nomenclatura
      • Tipos de almacenamiento para variables
      • Estructuras de Control
        • Ejercicio 4
      • Modificadores
      • Eventos
        • Ejercicio 5
      • Tipos de Referencia
        • Arrays
          • Ejercicio 6
        • Mappings
          • Ejercicio 7
        • Structs
          • Ejercicio 8
      • Address Payable
      • Cómo reciben Ether los contratos y funciones
      • Transferencias de Ether
      • Conceptos Avanzados
        • Codificación ABI
        • Hashing
        • This
        • Herencia
        • Abstract
        • Interface
        • Llamadas entre contratos
        • EVM
        • ABI
        • Bytecode
        • Opcodes
  • Módulo 3
    • Estándares, Librerías y Patrones
      • Buenas Prácticas de Diseño
      • Patrones de Diseño
      • EIP y ERC
      • ERC-20
      • ERC-721
      • Open Zeppelin
      • Crea un Token ERC-20
      • Almacenamiento Descentralizado: IPFS
      • Crea un Token ERC-721
      • DeFi
  • Módulo 4
    • Toolkit para desarrollo en Ethereum
      • Requisitos para el módulo 4
        • Terminal
        • Git y Github
        • Node.js y npm
        • Visual Studio Code para Solidity
      • Toolkit
        • JSON-RPC
        • Ethers.js
          • Ejercicio
        • Hardhat
          • Despliegue de un contrato en Hardhat
          • Despliegue de un contrato en una red pública
        • Scaffold-ETH
          • Características
          • Cómo instalar Scaffold-ETH
  • Módulo 5
    • Seguridad, Pruebas y Auditoría
      • Pruebas
        • Importancia de realizar pruebas
        • Métodos para probar contratos inteligentes
          • Pruebas automatizadas
          • Pruebas manuales
        • Conceptos importantes en testing
        • Herramientas para testing
        • Testing con Hardhat
        • Recursos adicionales
      • Seguridad
        • Una mentalidad distinta de diseño
        • Principales vulnerabilidades en smart contracts
          • Reentrancy attack (ataque de reentrada)
          • Replay attack (ataque de repetición)
          • Price Oracle Manipulation (Manipulación de Oráculos de Precios)
          • Missing Access Control (Pérdida de Control de Acceso)
          • Reward Manipulation (Manipulación de Recompensas)
          • Failure to Initialize (Falla al Inicializar)
          • Front-running
          • Invariant Breaks (Ruptura de invariantes)
          • Mishandling of ETH (Mal manejo de ETH)
          • Denial of Service (DoS - Denegación de Servicio)
          • Integer overflow and underflow (desbordamiento y subdesbordamiento de enteros)
          • Phishing y Typosquatting
        • Recursos adicionales
      • Auditoría de smart contracts
        • Proceso de Auditoría
        • Herramientas
        • Cómo prepararse para una auditoría
        • El test Rekt
        • Retos
        • Recursos adicionales
  • Contribuye
    • Kipu Explorer
Powered by GitBook
On this page

Was this helpful?

  1. Módulo 4
  2. Toolkit para desarrollo en Ethereum
  3. Toolkit
  4. Hardhat

Despliegue de un contrato en Hardhat

PreviousHardhatNextDespliegue de un contrato en una red pública

Last updated 8 months ago

Was this helpful?

Despliegue de un smart contract en Hardhat

1. Instalación

Primero, asegúrate de tener Node.js y npm instalados. Luego, crea un nuevo proyecto y añade Hardhat:

mkdir my-hardhat-project
cd my-hardhat-project
npm init -y
npm install --save-dev hardhat

2. Crear un Proyecto de Hardhat

Inicializa un nuevo proyecto de Hardhat:

npx hardhat init

Sigue las instrucciones para crear un archivo hardhat.config.js vacío.

Esto te dejará con solo el fichero hardhat.config.js en tu repositorio.

3. Tareas y plugins

Hardhat funciona ejecutando tareas (tasks) y llamando a plugins.

Las tareas disponibles las puedes ver ejecutando

npx hardhat

Como ejemplos de tareas tenemos: compilar, ejecutar scripts, habilitar un servidor JSON-RPC, habilitar la consola, verificar un contrato en Etherscan, etc.

Por otro lado, se utilizan plugins creados por Hardhat o terceros que contienen diferentes herramientas útiles para las diferentes etapas del desarrollo. Un plugin esencial es

  • Usar ethers.js para interactuar con contratos.

  • Hacer pruebas con Mocha y Chai.

  • Desplegar contratos con Hardhat Ignition.

  • Interactuar con la red de prueba local de Hardhat.

  • Obtener métricas de gas utilizado.

  • Medir tu cobertura de pruebas.

Para instalarlo ejecuta la siguiente instrucción en la raíz del directorio de tu proyecto:

npm install --save-dev @nomicfoundation/hardhat-toolbox

también debes añadir la siguiente línea al inicio de tu fichero hardhat.config.js

require("@nomicfoundation/hardhat-toolbox");

4. Escribir un Contrato Inteligente

Crea un directorio llamado contracts/ y dentro de él un archivo Greeter.sol con el siguiente código:

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "hardhat/console.sol";

contract Greeter {
  string greeting;

  constructor(string memory _greeting) {
    console.log("Deploying a Greeter with greeting:", _greeting);
    greeting = _greeting;
  }

  function greet() public view returns (string memory) {
    return greeting;
  }

  function setGreeting(string memory _greeting) public {
    console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);
    greeting = _greeting;
  }
}

5. Compilar contratos

Para compilar tus contratos, ejecuta:

npx hardhat compile

En nuestro ejemplo, la ejecución de esta tarea nos creará un directorio denominado artifacts. El ABI de Greeter.solestá ubicado en .artifacts/contracts/Greeter.sol/ y se llama Greeter.json .

6. Activar una blockchain local

Al igual que Remix, Hardhat habilita una blockchain local. En esta red tendrás disponible 20 cuentas (addresses con sus claves privadas) con 10000 ETH de prueba cada una.

Para habilitar la blockchain local ejecuta desde el directorio raíz de tu repositorio:

npx hardhat node

Ten en cuenta que las claves addresses y sus claves privadas son públicas, dado que todos los usuarios de Hardhat las tienen a su disposición. Si utilizas esas addresses en mainnet o en alguna red pública perderás todo lo que tienes en ellas. Sólo debes usar estas addresses en el entorno de pruebas de Hardhat.

7. Desplegar un contrato en la red local

En la raíz principal de tu repositorio crea un directorio ignition y dentro de él otro llamado modules . Luego dentro de ignition/modules crea el script de despliegue Greeter.js con el siguiente contenido:

const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules");

const GreeterModule = buildModule("GreeterModule", (m) => {
  const greet = m.contract("Greeter", ["Hola"]);

  return { greet };
});

module.exports = GreeterModule;

Este código hace lo siguiente:

Llama a la función buildModule que requiere un ID de módulo y una función callback. Nuestro módulo se llamará "GreeterModule" .

La función callback es donde ocurre la definición del módulo. El parámetro m que se pasa al callback es una instancia de un ModuleBuilder , que es un objeto con métodos para definir y configurar las instancias de contratos.

Cuando llamamos a los métodos del ModuleBuilder se crea un objeto Future , que representa el resultado de la ejecución de un paso que Hardhat Ignition requiere para desplegar una instancia del contrato o interactuar con una existente.

Esto no ejecuta nada contra la red, solo se representa internamente. Luego de que se crea el Future, queda registrado dentro del módulo y el método lo devuelve.

En este módulo, se crean un objeto Future llamando al método contract que instruye a Hardhat Ignition que despliegue una instancia del contrato Greeter especificando "Hola"como el único parámetro del constructor.

Finalmente, se devuelve el objeto Future representando la instancia del contrato Greeter para hacerlo accesible a otros módulos y para realizar pruebas.

Para desplegar el smart contract en la red local ejecuta la siguiente instrucción en una nueva sesión del terminal.

npx hardhat ignition deploy ./ignition/modules/Greeter.js

Si todo funciona correctamente, obtendrás la dirección del contrato desplegado en la red local, en un mensaje como el siguiente:

Deployed Addresses

GreeterModule#Greeter - 0x5FbDB2315678afecb367f032d93F642f64180aa3

que contiene prácticamente todo lo que se necesita para desarrollar:

@nomicfoundation/hardhat-toolbox