Bootcamp Web3 gratuito sobre despliegue smart contracts con Catapulta, edición Foundry

Antes de empezar, únete al grupo de Telegram del Bootcamp para tener soporte y aprender sobre Web3 juntos en la comunidad de Catapulta y Super Pioneros.

Únete al Grupo Telegram

¿Qué aprenderás?

Este curso corto gratuito organizado por Catapulta y Super Pioneros (NWC10) va dirigido a programadores/as o/y personas inquietas que quieran una introducción práctica sobre desplegar smart contracts o contratos inteligentes en Solidity.

Cuenta de una introducción mínima sobre Web3, smart contracts y un único ejercicio práctico donde utilizaremos las últimas tecnologías como Solidity o Foundry y el objetivo final es ver que es posible desplegar smart contracts mediante plantillas sin tener un profundo conocimiento sobre blockchain.

Si YA eres programador Web3, ¡enhorabuena! puedes saltarte el 90% del curso y hacer click en el punto "9. Despliega smart contracts con Foundry y Catapulta" de la tabla de contenidos.

Al finalizar este primer curso gratuito, te enviaremos una acreditación/diploma en formato NFT, que certifica que sabes desplegar smart contracts en diferentes blockchains con Foundry.

El desarrollo y despliegue de smart contracts es uno de los trabajos más remunerados y buscados de manera global, con salarios entre $150.000 y +$200.000 para "seniors" con 3-4 años de experiencia, aunque tiene una barrera de entrada muy grande debido a su curva de aprendizaje y, siendo realistas, el mercado junior es igual de complicado que el resto del sector de programación.

La próxima generación de developers en Web3, según Midjourney.

¿Quiénes somos?

El autor de este curso gratuito es David Canillas Racero, malagueño, fundador detrás de Catapulta y especialista en programación full stack de smart contracts e integraciones Web3, con más de 6 años de experiencia desarrollando en Web3 startups desde 2018. Previamente a lanzar Catapulta, fui Senior Solidity Developer en Aave, el mayor protocolo DeFi con un TVL de $12 mil millones de dólares (+10% del mercado total Web3), donde tuvimos que crear las mejores prácticas de desarrollo para poder escalar y llevar a producción tanto Aave V2 como Aave V3.

¿Qué es Catapulta?

Catapulta es una plataforma de despliegue de smart contracts, que ayuda a empresas y a programadores/as a crear productos Web3 de una forma más sencilla, rápida y colaborativa en más de 20 blockchains diferentes, pero respectando el desarrollo nativo de smart contracts en Solidity y apoyándonos en herramientas open source como Foundry o Hardhat.

Catapulta busca ser el Vercel para Web3.

Proveemos la infraestructura necesaria a equipos de desarrollo para que sólo tengan que enfocarse en el código fuente detrás de la idea de negocio, y es gratuito de forma limitada en redes blockchains de prueba como Ethereum Sepolia, Polygon Amoy, o Avalanche Fuji.

Nuestra solución es 100% vendor free al ser compatible con herramientas y lenguajes open source, dejando que programadores pueden dejar de utilizar Catapulta sin necesidad de migrar su código o solución.

¿Qué NO aprenderás?

Lo que NO aprenderás, es el CÓMO desarrollar smart contracts de forma segura, ya que eso da para un bootcamp mas largo y complejo.

En si, el lenguaje principal de desarrollo de smart contracts Solidity es muy sencillo y fácil de aprender en su totalidad tras varias semanas, si ya sabes programar, pero debido a la naturaleza permissionless o pública de las blockchains hace que sea un entorno MUY HOSTIL para navegantes. Más de 4 MIL MILLONES de dólares han sido hackeados en smart contracts desde 2016.

Desarrollar y desplegar smart contracts es similar a cómo planificar y ejecutar el lanzamiento de una nave espacial de SpaceX que viajará a Marte. Cualquier mínimo fallo puede comprometer y poner en gran riesgo tu negocio, tu reputación o los activos que estén depositado en los smart contract que desarrolles.

Para calmar la tensión después de esta exagerada advertencia, los smart contracts que vais a desplegar en este bootcamp no tendrán ningun valor monetario y será como desplegar unidades de un videojuego medieval.

Los smart contracts, programados de forma segura y siguiendo buenos procesos de auditoria por terceros, pueden ser un cambio de paradigma en cómo intercambiamos valor entre personas y entre empresas. Más de $100 MIL MILLONES de activos están hoy distribuidos y asegurados en varios protocolos basados en smart contracts, de forma segura.

Introducción smart contracts, Web3 y casos de uso

¿Qué son los contratos inteligentes y quienes los utilizan?

Los smart contracts son programas de software que se alojan y se ejecutan en máquinas virtuales distribuidas. Su origen data en 2016 en una red blockchain llamada Ethereum, su máquina virtual distribuida la EVM y el lenguaje de programación Solidity, inventado por un grupo de hackers especializados en criptografía liderados por Vitalik Buterin y Gavin Wood.

Cabe decir que no todas las blockchains ejecutan smart contracts, y cada blockchain puede tener grandes diferencias sobre cómo programar smart contracts. Este bootcamp se enfoca en Solidity y en redes tipo EVM.

El 90% de los $100 mil millones de activos digitales están alojados en smart contracts en Solidity basados en redes de tipo EVM basadas en Ethereum, como Optimism, Polygon, Avalanche o Arbitrum, y hay más de 1000 redes de tipo EVM.

Ha costado muchos años, pero ya existen patrones de seguridad y mejores prácticas que permiten trabajar con smart contracts de forma segura y parte de ello es que todas las grandes empresas como Google, Visa, Blackrock, BBVA, Santander, NVIDIA, IBM, o Amazon utilizan Solidity.

¿Cómo funcionan y cuáles son sus propiedades?

Cada vez que se ejecuta un smart contract, se guarda el resultado en un almacenamiento global verificado por cientos de máquinas que certifican que la ejecución ha sido correcta, y esto es lo que da propiedades que antes no podíamos hacer con software tradicional:

  • Tenencia y custodia de activos digitales (dinero, acciones, skins de videojuegos, propiedades reales tokenizadas RWA...)
  • Transparencia
  • Trazabilidad
  • Interoperabilidad (poder comunicarse entre varios smart contracts o protocolos)
  • Ejecución atómica asegurada

No vamos a indagar a fondo sobre cómo desarrollar smart contracts, pero veamos el ejemplo de este smart contract, que simula una unidad llamada Champion en un supuesto videojuego.

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

contract Champion {
    uint256 internal constant _damage = 2;
    uint256 constant b = 8;

    function getAttackDamage() external pure returns (uint256) {
        return _damage;
    }

    function attack() external pure returns (string memory) {
        return "plof!";
    }
}

Veamos algo de la estructura de este smart contract:

/** Identificador de licencia del código fuente, en este caso MIT */
// SPDX-License-Identifier: MIT

/** El apartado "pragma" define el idioma usado y la versión del lenguaje que se espera ser compilado, siguiendo semver. */
pragma solidity ^0.8.0;

/** En esta parte se define si declaras un contrato, una interfaz o una librería, seguido del nombre. */
contract Champion {
    
    /** Al principio del smart contracts, se declaran variables globales junto con su tipo, que pueden tener diferente visibilidad: private, internal, public... */
    
    uint256 internal constant _damage = 2;
    uint256 public constant reach = 1;
    string public name;
    
    /** El constructor es una función especial que sólo se llama durante el despliegue del smart contract, e inicializa su estado inicial */
    
    constructor(string memory characterName) {
      name = characterName;
    }

    /** Tras las variables globales y el constructor , se declaran funciones, que pueden tener visibilidad: private, internal, public o external */
    function getAttackDamage() external pure returns (uint256) {
        return _damage;
    }
    
    /** Solidity es un lenguage tipado, en las funciones se definen el tipo de argumentos de entrada y qué retorna la función */
    function attack() external pure returns (string memory) {
        return "plof!";
    }
}

Para aprenderte a fondo sobre Solidity, sus unidades, variables goblales como block.timestamp o msg.sender, es muy recomendable leerse la documentación de Solidity oficial.

¿Qué es Web3? ¿Cuáles son sus casos de uso reales?

Web3 es la siguiente evolución a Internet, apodado Web2. Hoy en dia en Internet puedes leer/ver posts de tus conocidos de su última quedada o escribir y subir fotos de cómo ha sido tu apasionante viaje a Bali.

También en Web2 puedes recibir y enviar dinero por Bizum, pero necesitas a un custodio (el banco) para que te custodie tu dinero y puedas hacer esas operaciones. No puedes construir tu propio banco digital con pocos recursos, ya que está totalmente monopolizado.

El significado detrás de Web3 es: read, write, own (leer, escribir, y poseer)

  • Los smart contracts permiten probar sin un tercero que una entidad tiene en propiedad un activo digital, ya sea dinero, acciones, arte digital, licencias de software, o skins de videojuegos.

  • Incluso activos reales como inmuebles pueden digitalizarse, mediante la tokenización de activos.

  • También permiten el intercambio de activos digitales de forma abierta, justa y auditable, y es una nueva forma de coordinación entre personas y empresas, basada en software. De aquí han salido nuevos sectores como DeFi, que permiten finanzas descentralizadas sin custodio.

  • Otro caso muy potente son las campañas de incentivos para atraer tráfico, liquidez o nuevos usuarios a productos digitales, ya sea campañas con NFTs, o "misiones" que dan recompensas por utilizar tus productos mediante gamificación.

Los smart contracts permiten crear nuevas formas de coordinación entre personas y cada dia se experimentan nuevas formas de crear productos o de intercambio de valor dentro de Web3.

Web3 cambia las reglas del juego, pero de esto no va el bootcamp. Podéis leer más en libros como: Read Write Own de Chris Dixon o The Infinite Machine de Camilia Russo.

Las criptomonedas frenan la adopción Web3 para programadores/as y empresas

Para desplegar contratos inteligentes, los desarrolladores usualmente necesitan gas en su cuenta en forma ETH o la criptomoneda nativa de la blockchain específica en la que desean desplegar.

Obtener gas o monedas nativas implica comprar criptomonedas en exchanges o casas de cambio como Coinbase, Bit2Me o otros on-ramps, lo cual es un obstáculo para algunas empresas que no quieren lidiar con la tenencia de criptomonedas debido a la volatilidad que añaden a los balances de la empresa y la carga contable que genera.

Existen algunas alternativas como EIP-4337 para pagar en tokens ERC20, pero la adopción de este EIP para herramientas de desarrollo es mínima ya que requiere cambios de código en sus scripts de despliegue y está más destinado a aplicaciones de consumo.

¿Y si los developers solo quieren desarrollar?

Tutorial de abstracción de gas desplegar contratos inteligentes Solidity con Catapulta

Prepara tu entorno de desarrollo Web3

Antes de nada, tienes que preparar tu máquina para poder programar y desplegar smart contracts. Esto puede ser algo tedioso para personas sin experiencia en programación, cualquier duda mandad Telegram en el grupo o Telegram directo a @kartojal.

Requisitos:

  1. Instala Docker Desktop
  2. Instala Visual Studio Code
  3. Instala extensión de Dev Containers, de Microsoft
  4. Haz click en el botón para abrir tu entorno de desarrollo Solidity con Foundry y Catapultaen Visual Studio Code

Abrir entorno Solidity

Si escribes catapulta --version dentro de la terminal del entorno y te responde con su version Version: 0.4.7 o mayor, ¡ya tienes listo tu entorno para desarrollar y desplegar smart contracts!

Catapulta.sh - Chain Ops CLI 🏹
Version: 0.4.7

Despliega smart contracts con Foundry y Catapulta

Dentro de poco descubrirás que desplegar un smart contract lleva menos tiempo que leer toda la introducción de este bootcamp.

Catapulta desarrolló una solución para ofrecer despliegues sin criptomonedas para desarrolladores/as y empresas que solo quieren enfocarse en el código fuente, sin depender de terceros, compatible con todos los scripts de despliegue y los desarrolladores pueden seguir usando la misma dirección de despliegue, ya sea un EOA, Ledger o una cuenta de Amazon KMS.

Ahora puedes desplegar contratos inteligentes con Euros, Dólares o stablecoins, y ser capaz de desplegar en más de +20 redes EVM sin preocuparte por el gas, nodos, o tener ETH o tokens nativos en tu billetera y en cada cadena.

En redes de prueba o testnets, puedes desplegar totalmente gratis. ¡Adios Faucets!

Catapulta soporta scripts de Foundry

Foundry es una herramienta open source muy robusta y apreciada por la comunidad tanto desarrolladores como auditores de Solidity, debido a su runtime EVM en Rust es extremadamente rápido, que permite desarrollar, probar, depurar y desplegar contratos inteligentes utilizando únicamente Solidity.

Catapulta soporta scripts de Solidity en Foundry, una forma de orquestar despliegues de Solidity usando el mismo lenguaje, junto con trucos como vm.startBroadcast() y vm.envUint("PRIVATE_KEY").

Despliega contratos inteligentes sin gas con scripts de Foundry y Catapulta CLI

Para este tutorial, desplegaremos una serie de contratos inteligentes, utilizando el repositorio de Catapulta Foundry template como referencia para desplegar contratos inteligentes en la red EVM de Sepolia, una testnet de Ethereum.

Foundry te permite desplegar contratos inteligentes con Scripts de Solidity, vamos a revisar los detalles del archivo script/Deploy.s.sol:

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

import {Script} from "forge-std/Script.sol";
import {BatteringRam} from "../src/BatteringRam.sol";
import {Catapult} from "../src/Catapult.sol";
import {Trebuchet} from "../src/Trebuchet.sol";

contract DeploySiege is Script {
    function run() public {
        uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");

        vm.startBroadcast(deployerPrivateKey);

        new BatteringRam(50);
        new Catapult(100);
        new Trebuchet(200);

        vm.stopBroadcast();
    }
}

Vemos que el script cargará una PRIVATE_KEY desde la variable de entorno y transmitirá con vm.startBroadcast los siguientes despliegues: contratos inteligentes BatteringRam, Catapult y Trebuchet.

Como nota, BatteringRam es un factory que realiza despliegues anidados de contratos Champion dentro del constructor.

Vamos a desplegar este Script de despliegue en Solidity con la siguiente guía paso a paso:

  1. Instala las dependencias y bibliotecas de forge.
forge install
  1. Genera una nueva billetera vacía. Con el comando catapulta wallet generamos una nueva clave privada, que se almacenará en tu archivo .env
catapulta wallet

Esta billetera es de prueba, no lo uses en producción ni envies criptomonedas a ella. NUNCA COMPARTAS TU CLAVE PRIVADA, NI TU FICHERO .ENV.

# Output:
# Dirección de Wallet: 0x6B193d5604e09f1737E33cFc4B06fb3f2C7fC3CE
# Clave privada añadida a tu archivo .env.

  1. Haz click en este enlace para abrir tus proyectos en Catapulta, sigue la configuración rápida para crear un proyecto y generar una CATAPULTA_API_KEY gratuita que debe ser almacenada en tu archivo .env.

  1. Una vez añadida tu CATAPULTA_API_KEY=... en el archivo .env, despliega con Catapulta CLI a la red Sepolia, red de pruebas de Ethereum, usando el flag --sponsor para un despliegue sin gas.
catapulta script script/Deploy.s.sol --network sepolia --sponsor
# Output:
Catapulta.sh 🏏 Despliegue de script Forge (0.4.1)
================================================
Nombre del proyecto: Despliegues Fantasma
URL del proyecto: https://catapulta.sh/project/6106272a59b37a3a4a7afb55
UUID del Despliegue: 592a91ad-57c8-42c6-b371-2af0e170f31a

📀 Construyendo artefactos...

🗜  Comprimiendo artefactos...

📤 Subiendo artefactos a la base de datos de Catapulta...

✅ Artefactos subidos exitosamente.

📡 Transmitiendo despliegues a Catapulta Gateway RPC:

📜 Ejecutando script de Foundry: forge script scripts/DeployBasic.sol  --rpc-url "https://catapulta.sh/api/run/add/chain/11125111/5922a91ad2-57228242c6-b37e-2af0e170f31a/gNd4vq8ApnRWhxwPJiMS" --broadcast --chain-id 11155111

[...]

==========================

EJECUCIÓN ONCHAIN COMPLETA Y EXITOSA.

Total Pagado: 0.000852774003979612 ETH (284258 gas * avg 3.000000014 gwei)

✅ Despliegue transmitido exitosamente

- Solicitud de verificación en Etherscan enviada. Revisa el tablero para hacer un seguimiento de las verificaciones. Si los contratos no se verifican en 10 minutos, contacta al soporte en Discord.

💾 Artefactos almacenados en:
- https://users-artifacts.s3.eu-west-1.amazonaws.com/51195a911d-57c8-42c6-b37e-2af0e170f31a-deployment-artifacts/artifacts.zip

📸 Revisa tu informe de despliegue en:
 - https://catapulta.sh/project/6416272a5119b37a3a4a7afbd5/op/595f91ad-57c8-4112c6-b37e-2af0e170f31a

¡Listo! Tu despliegue ha sido transmitido, sin tener gas inicialmente o ir a un faucet. Haz clic en la URL del Informe de Despliegue para ver todos tus contratos inteligentes desplegados en el dashboard de Catapulta.

Como parte final del ejercicio, prueba a desplegar en otras dos cadenas: Polygon Amoy amoy y Avalanche Fuji fuji, con el mismo comando anterior pero intercambiando --network sepolia con los anteriores nombres de redes:

# Desplegar en Polygon Amoy
catapulta script script/Deploy.s.sol --network amoy --sponsor

# Desplegar en Avalanche Fuji
catapulta script script/Deploy.s.sol --network fuji --sponsor

¡He desplegado los smart contracts! ¿Qué es el reporte que genera Catapulta al desplegar?

Cada vez que despliegas cualquier set de smart contracts, Catapulta te genera un "dashboard" o reporte de forma automatica, para que nunca pierdas tus antiguos despliegues y siempre tengas acceso a todos tus smart contracts. En el paquete Pro, puedes invitar miembros de tu equipo a tu proyecto y de esa manera estar todos al dia de qué smart contracts ha desplegado el equipo.

El reporte contiene información fundamental como:

  • Red o blockchain del despliegue
  • Costes asociados al despliegue
  • Tabla de smart contracts
    • Direcciones de cada contrato
    • Enlaces directos a cada explorador de bloques
    • Deployer address
    • ABI
    • TX de despliegue
  • Tabla de transacciones
    • Tx Hash (id de transaccion)
    • Enlaces directos a cada explorador de bloques
    • Desglose de costes por Tx
    • Fecha

En el futuro, aparecerán estadísticas de uso de tus smart contracts, como número de cuentas, total dinero custodiado (TVL), numero de interacciones, etc.

Comparte tus despliegues con el resto de la comunidad

Por defecto, los dashboards que se generan en cada despliegue son privados, puedes convertirlo en público para enviarlo a tus posibles clientes, usuarios o ponerlo en la documentación de tu producto Web3.

En el reporte generado de forma automatica tras desplegar, haz click en "Publish report" y en "Make public".

En unos instantes te aparecerá el enlace público de tu reporte, haz click en Copiar para poder compartirlo y enviarlo en el grupo del bootcamp.

Obtén tu certificado en forma NFT

Para obtener tu certificación, envía 3 despliegues públicos por mensaje privado a @kartojal en Telegram, junto con tu dirección de tu billetera, y tras verificar en el explorador de bloques te enviaré una acreditación en formato NFT que probará que has realizado el primer bootcamp de Catapulta.

Conclusión

Catapulta te permite desplegar y verificar contratos inteligentes usando Foundry en más de +20 redes sin configurar, sin gas, sin claves de block explorers, y genera automáticamente informes de despliegue para tu equipo, ahorrando muchísimo tiempo y resultando en una mejor experiencia de desarrollo Web3.

Regístrate en Catapulta hoy de forma gratuita y disfruta de una mejor experiencia de desarrollo en Web3 con Solidity, con despliegues sin criptomonedas ni configuración, verificaciones automáticas en exploradores de bloques e informes de despliegue que puedes compartir con tu equipo, clientes o usuarios.

¡Me encantaría ver qué construyes con Catapulta!

Autor: David Canillas Racero