Desplegar en Celo con Truffle
Cómo desplegar un contrato inteligente en Celo testnet, mainnet o una red local usando Truffle.
Introducción a Truffle
Truffle es un entorno de desarrollo de clase mundial, framework de pruebas y pipeline de activos para blockchains usando la máquina virtual Ethereum (EVM). Al crear un proyecto Truffle y editar algunos ajustes de configuración puedes implementar fácilmente tu proyecto en Celo.
Para obtener más información sobre las características disponibles para ti como desarrollador de contratos inteligentes con Truffle, visita la documentación de Truffle.
Prerequisitos
Para desplegar en Celo usando Truffle, debes tener Celo configurado en tu entorno local. Si prefieres desplegar sin un entorno local, puedes desplegar usando Remix o Replit.
Si eres nuevo en Truffle, completa las instrucciones de instalación de Truffle de Celo y completa su Tutorial de inicio rápido para familiarizarte con esta herramienta.
Configuración de proyecto
Configura la carpeta de proyecto
Abre la ventana de tu terminal, crea un directorio de proyecto y navega en ese directorio.
mkdir myDapp && cd myDap
Install hdwallet-provider
Desde el directorio raíz del proyecto Truffle, instala truffle/hdwallet-provider. Esto te permite firmar transacciones para direcciones derivadas de un mnemónico. Utilizarás esto para conectarte a Celo en tu archivo de configuración Truffle.
npm install @truffle/hdwallet-provider --save
Inicializa Truffle
Al inicializar Truffle se crea el template para tu proyecto.
truffle init
Abrir proyecto
Abre tu proyecto en Visual Studio code o tu IDE preferido.
code .
Puedes lanzar VS Code desde la línea de comandos instalándolo en tu ruta de shell.
Escribir código del proyecto
Crear un nuevo contrato inteligente
Crea un archivo llamado HelloCelo.sol en el directorio contrats y rellenalo con el código de Solidity a continuación.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;
contract HelloWorld {
string public greet = "Hello Celo!";
}
Si quieres obtener más información sobre Solidity (el lenguaje para desarrollar contratos inteligentes) puedes ver los documentos de Solidity y Solidity a través de ejemplos.
Migrations File
Crea un archivo llamado 2_deploy_contracts.js en la carpeta ./migrations/ y rellena con el siguiente código.
var HelloCelo = artifacts.require("HelloCelo");
module.exports = function (deployer) {
deployer.deploy(HelloCelo);
};
Si creaste un contrato inteligente diferente, actualiza el nombre de la variable, el requisito del archivo y el despliegue para que coincida con tu nuevo contrato.
Mnemónico .env
Si aún no tienes un mnemónico o no está seguro de cómo crear uno, consulta Configurar una billetera de desarrollo para más detalles. Cuando estés listo, crea un archivo .env en tu directorio raíz y rellenalo con tu mnemónico de la billetera de desarrollo (ejemplo a continuación).
MNEMONIC="turtle cash neutral drift brisk young swallow raw payment drill mail wear penalty vibrant entire adjust near chapter mistake size angry planet slam demand"
Este mnemonic es utilizado por HDWalletProvider en el archivo truffle.config para verificar los fondos de suministro de la cuenta durante el despliegue del contrato. (Ver líneas 21 & 69.)
Crear archivo .gitignore
Es importante ocultar tus mnemónicos y otros archivos importantes mientras se desarrollan aplicaciones de Celo. Al usar Git o GitHub, puede rellenar un archivo .gitignore con el siguiente código para asegurarse de que no publiques estos archivos accidentalmente.
Crea un archivo .gitignore en tu directorio raíz y rellénalo con el siguiente código.
# dependencias
/node_modules
# usuarios Mac
.DS_Store
# archivos ocultos
.env
Mira ignorando archivos para más información.
Configurar ajustes de despliegue
El archivo truffle.config.js contiene por defecto conexiones necesarias para desplegar en las redes Ethereum, importa HDWalletProvidery conecta al mnemónico en tu archivo .env. Para desplegar a una red de Celo, necesitas actualizar este archivo de configuración para apuntar hacia las diferentes redes de Celo y añadir algunos detalles específicos a las mejores prácticas de Celo.
Puedes ver un repositorio de ejemplo aquí.
Actualizar el archivo truffle-config.js
Abre truffle-config.js en un editor de texto y reemplaza su contenido con este código de configuración de Celo. Este código es similar a la configuración de Truffle con algunas actualizaciones de configuración necesarias para desplegar en una red de Celo.
Conectarse a una Red de Desarrollo
Usando Celo Ganache CLI creas cuentas de prueba en el localhost en el puerto 7545. La configuración de red privada se conecta a tu localhost en este puerto y te da acceso a tus cuentas en ganache-cli.
local: {
host: "127.0.0.1",
port: 7545,
network_id: "*"
}
Si eliges configurar una cadena de desarrollo local, tu blockchain también será alojada en una red privada en localhost. Esta misma configuración se puede utilizar para conectarse a la cadena de desarrollo local.
Conectarse a Testnet usando Forno
Usar Forno te permite conectarte al blockchain de prueba de Celo sin ejecutar un nodo local. La configuración de testnet utiliza Forno para conectarse al Celo Testnet (Alfajores) usando HDWalletProvider y el mnemónico almacenado en tu archivo .env.
testnet: {
provider: function() {
return new HDWalletProvider(process.env.MNEMONIC, "https://alfajores-forno.celo-testnet.org")
},
network_id: 44787,
gas: 20000000
}
Conectar a Mainnet usando Forno
Usar Forno te permite conectarte al blockchain principal de Celo sin ejecutar un nodo local. La configuración de mainnet utiliza Forno para conectarse al Celo Mainnet usando HDWalletProvider y el mnemónico almacenado en tu archivo .env.
mainnet: {
provider: function() {
return new HDWalletProvider(process.env.MNEMONIC, "https://forno.celo.org")
},
network_id: 42220,
gas: 4000000
}
Forno es un servicio de nodo alojado en cLabs para interactuar con la red de Celo. Este te permite conectarte al blockchain Celo sin tener que ejecutar tu propio nodo.
Desplegar contrato inteligente
Compilar y migrar
Compilar contrato
Compila el código de Solidity en bytecode de Ethereum antes de desplegar el contrato. El siguiente comando truffle compilará cualquier contrato nuevo o actualizado (.sol) encontrado en ./contracts.
truffle compile
Obtén más información sobre la compilación de contratos con Truffle aquí.
Migrar contrato
Las migraciones son archivos JavaScript que te ayudan a implementar contratos en la red Ethereum. Para ejecutar tus migraciones, ejecuta lo siguiente:
truffle migrate
Obtén más información sobre la migración de contratos con Truffle aquí.
Desplegar contrato
Despliega a la red de Celo seleccionada ejecutando uno de los siguientes comandos.
truffle deploy --network alfajores
truffle deploy --network celo
truffle deploy --network local
Desplegar con --reset
Utiliza la bandera ---reset para redesplegar contratos con una nueva dirección de contrato si no has realizado ningún cambio de código.
truffle deploy --network NETWORK --reset
truffle migrate --network NETWORK --reset
Guardar las direcciones de los contratos para referencias futuras. Si los pierdes, procede al explorador de bloques para revisar las transacciones de tu cartera para la creación de contratos y su respuesta. Truffle guarda información de despliegue como hash de transacciones y direcciones del contrato, en archivos JSON en ./build/contracts/
.
Ver despliegue del contrato
Copia tu dirección de contrato desde la terminal y ve al explorador de bloques para buscar tu contrato desplegado. Cambia entre redes para encontrar tu contrato usando el menú desplegable de la barra de búsqueda.
Ver contrato desplegado
Ve a BlockScout y selecciona la red de tu contrato desplegado.
- Pega tu dirección de contrato desde la ventana de terminal y búscalo en BlockExplorer.
Obtén más información sobre cómo explorar la red de Celo y los detalles del contrato inteligente en BlockScout aquí.