Saltar al contenido principal

Contrato inteligente Hola Mundo para principiantes

Solidity
Hardhat
Alchemy
contratos inteligentes
despliegue
Principiante
elanh
31 de marzo de 2021
13 minutos de lectura

Si eres nuevo en el desarrollo de la cadena de bloques y no sabes por dónde empezar, o si simplemente quieres entender cómo desplegar e interactuar con contratos inteligentes, esta guía es para ti. Te guiaremos en la creación y el despliegue de un contrato inteligente simple en la red de prueba Sepolia utilizando una billetera virtual MetaMask (opens in a new tab), Solidity (opens in a new tab), Hardhat (opens in a new tab) y Alchemy (opens in a new tab) (no te preocupes si aún no entiendes qué significa todo esto, lo explicaremos).

En la parte 2 de este tutorial, veremos cómo podemos interactuar con nuestro contrato inteligente una vez que esté desplegado aquí, y en la parte 3 cubriremos cómo publicarlo en Etherscan.

Si tienes preguntas en cualquier momento, ¡no dudes en comunicarte en el Discord de Alchemy (opens in a new tab)!

Paso 1: Conectarse a la red Ethereum

Hay muchas formas de hacer solicitudes a la cadena de Ethereum. Para simplificar, usaremos una cuenta gratuita en Alchemy, una plataforma para desarrolladores de cadenas de bloques y API que nos permite comunicarnos con la cadena de Ethereum sin tener que ejecutar nuestros propios nodos. La plataforma también cuenta con herramientas de desarrollo para monitoreo y análisis que aprovecharemos en este tutorial para entender qué sucede internamente en el despliegue de nuestro contrato inteligente. Si aún no tienes una cuenta de Alchemy, puedes registrarte gratis aquí (opens in a new tab).

Paso 2: Crear tu aplicación (y clave API)

Una vez que hayas creado una cuenta de Alchemy, puedes generar una clave API creando una aplicación. Esto nos permitirá hacer solicitudes a la red de prueba Sepolia. Si no estás familiarizado con las redes de prueba (testnets), consulta esta página.

  1. Navega a la página "Create new app" (Crear nueva aplicación) en tu panel de Alchemy seleccionando "Select an app" (Seleccionar una aplicación) en la barra de navegación y haciendo clic en "Create new app"

Hello world create app

  1. Nombra tu aplicación "Hello World", ofrece una breve descripción y elige un caso de uso, por ejemplo, "Infra & Tooling". A continuación, busca "Ethereum" y selecciona la red.

create app view hello world

  1. Haz clic en "Next" (Siguiente) para continuar, luego en "Create app" (Crear aplicación) ¡y eso es todo! Tu aplicación debería aparecer en el menú desplegable de la barra de navegación, con una clave API disponible para copiar.

Paso 3: Crear una cuenta (dirección) de Ethereum

Necesitamos una cuenta de Ethereum para enviar y recibir transacciones. Para este tutorial, usaremos MetaMask, una billetera virtual en el navegador que se usa para administrar la dirección de tu cuenta de Ethereum. Más información sobre transacciones.

Puedes descargar MetaMask y crear una cuenta de Ethereum gratis aquí (opens in a new tab). Cuando estés creando una cuenta, o si ya tienes una, asegúrate de cambiar a la red de prueba "Sepolia" usando el menú desplegable de redes (para que no estemos lidiando con dinero real).

Si no ves a Sepolia en la lista, ve al menú, luego a Avanzado (Advanced) y desplázate hacia abajo para activar "Mostrar redes de prueba" (Show test networks). En el menú de selección de red, elige la pestaña "Personalizado" (Custom) para encontrar una lista de redes de prueba y selecciona "Sepolia".

metamask sepolia example

Paso 4: Añadir ether desde un faucet

Para desplegar nuestro contrato inteligente en la red de prueba, necesitaremos algo de Eth falso. Para obtener ETH de Sepolia, puedes ir a los detalles de la red Sepolia para ver una lista de varios faucets. Si uno no funciona, prueba con otro, ya que a veces pueden quedarse sin fondos. Puede tomar algo de tiempo recibir tu ETH falso debido al tráfico de la red. ¡Deberías ver ETH en tu cuenta de MetaMask poco después!

Paso 5: Comprobar tu saldo

Para verificar que nuestro saldo esté ahí, hagamos una solicitud eth_getBalance usando la herramienta composer de Alchemy (opens in a new tab). Esto devolverá la cantidad de ETH en nuestra billetera. Después de ingresar la dirección de tu cuenta de MetaMask y hacer clic en "Send Request" (Enviar solicitud), deberías ver una respuesta como esta:

{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }

NOTA: Este resultado está en Wei, no en ETH. Wei se utiliza como la denominación más pequeña de ether. La conversión de Wei a ETH es: 1 eth = 1018 Wei. Así que si convertimos 0x2B5E3AF16B1880000 a decimal obtenemos 5*10¹⁸, lo que equivale a 5 ETH.

¡Uf! Nuestro dinero falso está todo ahí .

Paso 6: Inicializar nuestro proyecto

Primero, necesitaremos crear una carpeta para nuestro proyecto. Navega a tu línea de comandos y escribe:

mkdir hello-world
cd hello-world

Ahora que estamos dentro de la carpeta de nuestro proyecto, usaremos npm init para inicializar el proyecto. Si aún no tienes npm instalado, sigue las instrucciones de instalación de Node.js (opens in a new tab) (necesitaremos Node.js y npm para este tutorial).

npm init

Realmente no importa cómo respondas a las preguntas de instalación, aquí te mostramos cómo lo hicimos nosotros como referencia:

¡Aprueba el package.json y estamos listos para continuar!

Paso 7: Descargar Hardhat (opens in a new tab)

Hardhat es un entorno de desarrollo para compilar, desplegar, probar y depurar tu software de Ethereum. Ayuda a los desarrolladores al construir contratos inteligentes y aplicaciones descentralizadas (dapps) localmente antes de desplegarlos en la cadena en vivo.

Dentro de nuestro proyecto hello-world, ejecuta:

npm install --save-dev hardhat

Consulta esta página para obtener más detalles sobre las instrucciones de instalación (opens in a new tab).

Paso 8: Crear un proyecto de Hardhat

Dentro de la carpeta de nuestro proyecto, ejecuta:

npx hardhat

Luego deberías ver un mensaje de bienvenida y la opción de seleccionar lo que quieres hacer. Selecciona "create an empty hardhat.config.js":

Esto generará un archivo hardhat.config.js para nosotros, que es donde especificaremos toda la configuración de nuestro proyecto (en el paso 13).

Paso 9: Añadir carpetas del proyecto

Para mantener nuestro proyecto organizado, crearemos dos carpetas nuevas. Navega al directorio raíz de tu proyecto en tu línea de comandos y escribe:

mkdir contracts
mkdir scripts
  • contracts/ es donde guardaremos el archivo de código de nuestro contrato inteligente hola mundo.
  • scripts/ es donde guardaremos los scripts para desplegar e interactuar con nuestro contrato.

Paso 10: Escribir nuestro contrato

Puede que te estés preguntando, ¿cuándo diablos vamos a escribir código? Bueno, aquí estamos, en el paso 10.

Abre el proyecto hello-world en tu editor favorito (a nosotros nos gusta VSCode (opens in a new tab)). Los contratos inteligentes se escriben en un lenguaje llamado Solidity, que es el que usaremos para escribir nuestro contrato inteligente HelloWorld.sol.‌

  1. Navega a la carpeta "contracts" y crea un nuevo archivo llamado HelloWorld.sol.
  2. A continuación, se muestra un contrato inteligente Hola Mundo de muestra de la Fundación Ethereum que usaremos para este tutorial. Copia y pega el siguiente contenido en tu archivo HelloWorld.sol, y asegúrate de leer los comentarios para entender qué hace este contrato:

Este es un contrato inteligente súper simple que almacena un mensaje al momento de su creación y puede actualizarse llamando a la función update.

Paso 11: Conectar MetaMask y Alchemy a tu proyecto

Hemos creado una billetera MetaMask, una cuenta de Alchemy y escrito nuestro contrato inteligente; ahora es el momento de conectar los tres.

Cada transacción enviada desde tu billetera virtual requiere una firma usando tu clave privada única. Para otorgarle este permiso a nuestro programa, podemos almacenar de forma segura nuestra clave privada (y la clave API de Alchemy) en un archivo de entorno.

Para obtener más información sobre el envío de transacciones, consulta este tutorial sobre cómo enviar transacciones usando Web3.

Primero, instala el paquete dotenv en el directorio de tu proyecto:

npm install dotenv --save

Luego, crea un archivo .env en el directorio raíz de nuestro proyecto y añade tu clave privada de MetaMask y la URL HTTP de la API de Alchemy.

get alchemy api key

Copiar la URL de la API de Alchemy

Tu .env debería verse así:

API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key"
PRIVATE_KEY = "your-metamask-private-key"

Para conectar realmente esto a nuestro código, haremos referencia a estas variables en nuestro archivo hardhat.config.js en el paso 13.

¡No hagas commit de .env! Asegúrate de nunca compartir ni exponer tu archivo .env con nadie, ya que al hacerlo estarías comprometiendo tus secretos. Si estás utilizando control de versiones, añade tu .env a un archivo gitignore.

Paso 12: Instalar Ethers.js

Ethers.js es una biblioteca que facilita la interacción y la realización de solicitudes a Ethereum al envolver los métodos estándar de JSON-RPC con métodos más fáciles de usar.

Hardhat hace que sea súper fácil integrar complementos (plugins) (opens in a new tab) para herramientas adicionales y funcionalidad extendida. Aprovecharemos el complemento de Ethers (opens in a new tab) para el despliegue de contratos (Ethers.js (opens in a new tab) tiene algunos métodos de despliegue de contratos muy limpios).

En el directorio de tu proyecto, escribe:

npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"

También requeriremos ethers en nuestro hardhat.config.js en el siguiente paso.

Paso 13: Actualizar hardhat.config.js

Hemos añadido varias dependencias y complementos hasta ahora; ahora necesitamos actualizar hardhat.config.js para que nuestro proyecto esté al tanto de todos ellos.

Actualiza tu hardhat.config.js para que se vea así:

Paso 14: Compilar nuestro contrato

Para asegurarnos de que todo funciona hasta ahora, compilemos nuestro contrato. La tarea compile es una de las tareas integradas de Hardhat.

Desde la línea de comandos, ejecuta:

npx hardhat compile

Es posible que recibas una advertencia sobre SPDX license identifier not provided in source file, pero no hay de qué preocuparse; ¡con suerte, todo lo demás se ve bien! Si no es así, siempre puedes enviar un mensaje en el Discord de Alchemy (opens in a new tab).

Paso 15: Escribir nuestro script de despliegue

Ahora que nuestro contrato está escrito y nuestro archivo de configuración está listo, es hora de escribir nuestro script de despliegue de contrato.

Navega a la carpeta scripts/ y crea un nuevo archivo llamado deploy.js, añadiendo el siguiente contenido:

Hardhat hace un trabajo increíble al explicar qué hace cada una de estas líneas de código en su tutorial de Contratos (opens in a new tab); hemos adoptado sus explicaciones aquí.

const HelloWorld = await ethers.getContractFactory("HelloWorld");

Un ContractFactory en Ethers.js es una abstracción que se utiliza para desplegar nuevos contratos inteligentes, por lo que HelloWorld aquí es una fábrica para instancias de nuestro contrato hola mundo. Al usar el complemento hardhat-ethers, las instancias de ContractFactory y Contract están conectadas al primer firmante de forma predeterminada.

const hello_world = await HelloWorld.deploy();

Llamar a deploy() en un ContractFactory iniciará el despliegue y devolverá una Promise que se resuelve en un Contract. Este es el objeto que tiene un método para cada una de las funciones de nuestro contrato inteligente.

Paso 16: Desplegar nuestro contrato

¡Finalmente estamos listos para desplegar nuestro contrato inteligente! Navega a la línea de comandos y ejecuta:

npx hardhat run scripts/deploy.js --network sepolia

Luego deberías ver algo como:

Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570

Si vamos al Etherscan de Sepolia (opens in a new tab) y buscamos la dirección de nuestro contrato, deberíamos poder ver que se ha desplegado con éxito. La transacción se verá algo así:

etherscan contract

La dirección From debería coincidir con la dirección de tu cuenta de MetaMask y la dirección de destino (To) dirá "Contract Creation" (Creación de contrato), pero si hacemos clic en la transacción, veremos la dirección de nuestro contrato en el campo To:

etherscan transaction

¡Felicidades! Acabas de desplegar un contrato inteligente en la cadena de Ethereum 🎉

Para entender qué sucede internamente, naveguemos a la pestaña Explorer (Explorador) en nuestro panel de Alchemy (opens in a new tab). Si tienes varias aplicaciones de Alchemy, asegúrate de filtrar por aplicación y seleccionar "Hello World". hello world explorer

Aquí verás un puñado de llamadas JSON-RPC que Hardhat/Ethers hizo internamente por nosotros cuando llamamos a la función .deploy(). Dos importantes a destacar aquí son eth_sendRawTransaction (opens in a new tab), que es la solicitud para escribir realmente nuestro contrato en la cadena Sepolia, y eth_getTransactionByHash (opens in a new tab), que es una solicitud para leer información sobre nuestra transacción dado el hash (un patrón típico al enviar transacciones). Para obtener más información sobre el envío de transacciones, consulta este tutorial sobre cómo enviar transacciones usando Web3.

Eso es todo por la parte 1 de este tutorial; en la parte 2, realmente interactuaremos con nuestro contrato inteligente actualizando nuestro mensaje inicial, y en la parte 3 publicaremos nuestro contrato inteligente en Etherscan para que todos sepan cómo interactuar con él.

¿Quieres aprender más sobre Alchemy? Visita nuestro sitio web (opens in a new tab). ¿No quieres perderte ninguna actualización? ¡Suscríbete a nuestro boletín aquí (opens in a new tab)! Asegúrate también de unirte a nuestro Discord (opens in a new tab)..