Este tutorial está diseñado para guiar a quienes desean aprender más acerca de Ethereum. Es ideal para un nivel medio.
Ethereum es la blockchain líder para contratos inteligentes y aplicaciones descentralizadas (dApps), siendo la base del ecosistema Web3, DeFi y NFTs. Esta guía de nivel intermedio profundiza en la comprensión de la Ethereum Virtual Machine (EVM), el mecanismo de Gas y las transacciones, los diferentes tipos de cuentas y el consenso Proof-of-Stake. Explora la escritura de contratos inteligentes en Solidity (sintaxis básica, funciones, eventos), el proceso de compilación y despliegue (usando herramientas como Hardhat o Foundry), la interacción programática con contratos desde código (lectura, escritura, manejo de transacciones), y los estándares de tokens ERC (ERC-20, ERC-721, ERC-1155). También introduce las soluciones de escalado de Capa 2 y el uso de exploradores de bloques. Permite a los desarrolladores empezar a construir y desplegar su propia lógica en la blockchain y crear aplicaciones que interactúan con el estado descentralizado.
Un contrato inteligente básico en Solidity que almacena y recupera un valor numérico.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract SimpleStorage {
uint256 public storedData; // Variable de estado
function set(uint256 newValue) public {
storedData = newValue;
}
function get() public view returns (uint256) {
return storedData;
}
}
Resultado:
Contrato compilado con éxito. Bytecode y ABI generados.
Familiarizarse con estos comandos es esencial para interactuar eficientemente con Ethereum:
npx hardhat
npx hardhat node
npx hardhat compile
npx hardhat run scripts/deploy.js --network localhost
npx hardhat run scripts/deploy.js --network goerli
npx hardhat test
// En scripts/interact.js
const { ethers } = require("hardhat");
async function main() {
const contractAddress = "0x..."; // Dirección del contrato desplegado
const SimpleStorage = await ethers.getContractFactory("SimpleStorage");
const contract = SimpleStorage.attach(contractAddress); // Conectar a contrato existente
console.log("Valor actual:", (await contract.get()).toString());
const tx = await contract.set(42);
await tx.wait(); // Esperar confirmación
console.log("Nuevo valor:", (await contract.get()).toString());
}
main();
Ir a https://etherscan.io/, pegar el hash de la transacción en la barra de búsqueda.
En Etherscan, busca la dirección del contrato y ve a la pestaña 'Contract' -> 'Code'.
Buscar 'Goerli Faucet' o 'Sepolia Faucet' en Google y seguir las instrucciones del sitio.
Comprender estos conceptos fundamentales te ayudará a dominar Ethereum de forma más organizada y eficiente:
Ethereum Virtual Machine (EVM):
El entorno de ejecución de los contratos inteligentes en Ethereum. Es una máquina de estado basada en pila que procesa el bytecode de los contratos. Cada nodo de Ethereum ejecuta la EVM para verificar y ejecutar transacciones de contratos, garantizando que todos los nodos lleguen al mismo estado.
Gas y Tarifas de Transacción:
El mecanismo para medir el esfuerzo computacional de las operaciones en la EVM y compensar a los validadores. Cada instrucción o almacenamiento en la blockchain consume unidades de gas. El costo total de una transacción es (Gas Usado) * (Precio del Gas). Entender cómo las tarifas de gas fluctúan con la demanda y cómo optimizar el uso de gas en los contratos.
Tipos de Cuentas (EOA vs Cuentas de Contrato):
Ethereum tiene dos tipos de cuentas: Externally Owned Accounts (EOAs), controladas por una clave privada (ej: tu billetera MetaMask), que pueden iniciar transacciones. Y Cuentas de Contrato, controladas por el código de un contrato inteligente desplegado, que solo pueden ejecutar código cuando reciben una transacción (iniciada por una EOA o por otro contrato).
Mecanismo de Consenso (Proof-of-Stake - PoS):
El algoritmo por el cual los nodos de Ethereum acuerdan el estado de la blockchain y validan nuevos bloques. Después de 'The Merge', Ethereum usa Proof-of-Stake, donde los 'validadores' son seleccionados para proponer y votar sobre nuevos bloques basándose en la cantidad de ETH que han 'staked' (bloqueado) como garantía.
Ciclo de Vida de una Transacción:
Los pasos que sigue una transacción desde su creación hasta su inclusión en la blockchain: creación (con destinatario, valor, data de la llamada a contrato, gas limit, gas price, nonce), firma (con la clave privada del emisor), difusión a los nodos, espera en el pool de transacciones pendientes, selección por un validador, inclusión en un bloque, y confirmación (una vez que el bloque alcanza suficiente finalidad).
Desarrollo de Contratos Inteligentes con Solidity:
Aprender a escribir lógica descentralizada utilizando Solidity, el lenguaje de programación orientado a objetos más popular para Ethereum. Sintaxis, tipos de datos (uint, address, bool, string, arrays, mappings), funciones (con modificadores de visibilidad `public`, `private`, `internal`, `external`), variables de estado, constructores, eventos, modificadores, `require`/`assert`/`revert` para manejo de errores.
Estándares de Tokens ERC (ERC-20, ERC-721, ERC-1155):
Interfaces estandarizadas para diferentes tipos de tokens en Ethereum y redes EVM. ERC-20 define tokens fungibles (ej: DAI, UNI). ERC-721 define tokens no fungibles (NFTs, ej: CryptoKitties). ERC-1155 es un estándar multi-token que puede manejar tanto tokens fungibles como no fungibles en el mismo contrato. Implementar estos estándares en tus contratos o interactuar con contratos que los siguen es fundamental en Web3.
Entornos de Desarrollo Local (Hardhat, Foundry):
Herramientas modernas (reemplazando a menudo a Truffle) que simplifican enormemente el desarrollo de contratos. Proporcionan redes Ethereum locales para pruebas instantáneas, compilación automatizada, frameworks de testing (en JS/TS con Hardhat, en Solidity con Foundry), scripts de despliegue y bibliotecas para interactuar con contratos.
Despliegue de Contratos:
El acto de enviar el bytecode compilado de un contrato a la blockchain a través de una transacción especial. Una vez desplegado, el contrato vive en una dirección única y puede ser interactuado por cualquiera. El despliegue cuesta gas.
Interacción Programática con Contratos:
Cómo llamar a las funciones y leer datos de los contratos desplegados desde código externo (frontend de dApps o backend). Utilizar librerías Web3 (ethers.js, web3.js) con la ABI y la dirección del contrato para construir llamadas (lectura) o transacciones (escritura).
Soluciones de Escalado de Capa 2 (L2s):
Tecnologías que abordan los problemas de escalabilidad de la Capa 1 (Mainnet) ejecutando transacciones fuera de la cadena principal. Los Rollups (Optimistic Rollups y ZK Rollups) son los principales tipos: procesan muchas transacciones 'off-chain' y publican un resumen o prueba a la cadena principal para verificar su validez. Desplegar y usar L2s ofrece transacciones más rápidas y baratas.
Exploradores de Bloques (Etherscan, etc.):
Sitios web (ej: Etherscan para Ethereum Mainnet, PolygonScan para Polygon) que actúan como motores de búsqueda para la blockchain. Permiten buscar transacciones por hash, direcciones, bloques, ver el código fuente verificado de los contratos, y entender el estado de la red. Son herramientas esenciales para depurar y verificar.
Algunos ejemplos de aplicaciones prácticas donde se utiliza Ethereum:
Desarrollar, compilar y probar lógica de negocio descentralizada con contratos inteligentes en Solidity:
Escribir código que implementa reglas de negocio (ej: sistema de votación, juego simple, lógica de un protocolo DeFi) en contratos inteligentes, utilizando entornos de desarrollo local para pruebas exhaustivas antes de desplegar.
Desplegar contratos inteligentes a redes de prueba (testnets) o Mainnet:
Publicar el bytecode compilado de tus contratos en una blockchain real (testnet para pruebas gratuitas, Mainnet para producción) utilizando scripts de despliegue y herramientas como Hardhat o Foundry.
Construir la lógica de backend o frontend para interactuar con contratos inteligentes existentes o propios:
Crear código que utiliza librerías Web3 (ethers.js, web3.js) para leer datos (ej: consultar el balance de un token, obtener información de un NFT) y enviar transacciones (ej: transferir ETH/tokens, llamar a una función de contrato que modifica el estado).
Implementar la funcionalidad de emisión, transferencia y gestión de tokens ERC-20, ERC-721 o ERC-1155:
Desarrollar contratos que siguen estos estándares para crear tu propia criptomoneda, colección de NFTs o tokens para juegos, y construir interfaces para interactuar con ellos.
Entender y optimizar el uso de Gas en contratos y transacciones para reducir costos:
Analizar cuánto gas consumen las diferentes operaciones en tus contratos, reestructurar el código para usar menos gas y estimar tarifas de gas precisas para los usuarios de tu dApp.
Interactuar y desplegar aplicaciones en soluciones de escalado de Capa 2 (L2s):
Adaptar tu entorno de desarrollo y código para trabajar con redes L2 como Polygon, Arbitrum u Optimism, aprovechando sus transacciones más rápidas y económicas para ciertos tipos de aplicaciones.
Analizar y depurar transacciones o contratos en la blockchain utilizando exploradores de bloques:
Utilizar Etherscan (o el explorador de la red L2) para investigar por qué una transacción falló, verificar si un contrato se desplegó correctamente, auditar la actividad de una dirección o inspeccionar el estado de un contrato desplegado.
Contribuir al ecosistema Ethereum desarrollando herramientas o participando en el desarrollo del protocolo (nivel más avanzado):
Involucrarse en el desarrollo de herramientas para desarrolladores, contribuir al código base de clientes Ethereum o investigar temas avanzados del protocolo (requiere un nivel mucho más allá del intermedio).
Aquí tienes algunas recomendaciones para facilitar tus inicios en Ethereum:
Domina un Entorno de Desarrollo Local (Hardhat o Foundry):
No intentes aprender Solidity y desplegar directamente en testnets. Utiliza un entorno como Hardhat o Foundry. Su red local te permite iterar y probar contratos rápidamente sin costo de gas. Aprende a compilar, desplegar, testear y depurar localmente.
Entiende el Concepto de Gas Profundamente:
El gas es fundamental en Ethereum. Aprende qué operación consume gas, por qué el precio fluctúa y cómo tu código Solidity puede ser más (o menos) eficiente en el uso de gas. Esto impacta directamente en los costos para los usuarios.
Practica Escribir Código Solidity y Testearlo:
La mejor manera de aprender Solidity es escribiendo contratos (¡empieza con cosas simples!) y, crucialmente, escribiendo tests (en JS/TS o Solidity) para verificar su comportamiento. Un buen test suite te da confianza en tu código antes de desplegarlo.
Usa Testnets para Desplegar y Probar en un Entorno Público:
Antes de desplegar en Mainnet, despliega tus contratos a testnets como Sepolia o Goerli. Obtén ETH de prueba de un faucet. Esto te permite probar la interacción del contrato con billeteras reales (MetaMask), probar la integración con dApps y ver el proceso de despliegue en un entorno público, pero sin riesgo financiero.
Aprende a Interactuar con Contratos desde Tu Código (ethers.js/web3.js):
Si vas a construir la parte que interactúa con la blockchain (frontend o backend), necesitas saber usar una librería Web3. Aprende a conectarte a la red, obtener un firmante (signer), inicializar instancias de tus contratos desplegados (usando ABI y dirección), y llamar a sus funciones (lectura/escritura).
Utiliza un Explorador de Bloques (Etherscan) Constantemente:
Acostúmbrate a usar Etherscan (o el explorador de la red que uses) para verificar el estado de tus transacciones, ver cuánto gas usaron, confirmar despliegues, y ver el código fuente verificado de tus contratos o de otros. Es una herramienta esencial de depuración.
Familiarízate con los Estándares de Tokens ERC (ERC-20, ERC-721):
Si trabajas con tokens, entender los métodos y eventos estándar te permitirá interactuar con casi todos los tokens existentes y saber cómo diseñar los tuyos si es necesario. Puedes encontrar implementaciones de ejemplo en librerías como OpenZeppelin.
Sé Consciente de la Seguridad de Contratos Inteligentes:
Los contratos desplegados son inmutables. Un bug puede ser costoso (en gas o en fondos bloqueados). Empieza con lógica simple. Considera que los contratos que manejan valor deben ser revisados por pares y, si es crítico, auditados profesionalmente.
Protege Tus Claves Privadas (Especialmente las de Cuentas de Despliegue):
Nunca expongas tus claves privadas. Al desplegar contratos o interactuar desde un backend, usa variables de entorno o gestores de secretos para manejar las claves privadas de las cuentas que envían transacciones.
Entiende a Alto Nivel Qué Problemas Resuelven las Soluciones de Capa 2:
Las L2s (Rollups) son la principal estrategia para escalar Ethereum. Comprende que ofrecen transacciones más rápidas y baratas que Mainnet para ciertas aplicaciones. Si tu aplicación necesita alto rendimiento o bajo costo, investiga cómo desplegar en L2s.
Si te interesa Ethereum, también podrías explorar estas herramientas:
Amplía tus conocimientos con estos enlaces y materiales: