Desarrollo de Aplicaciones Descentralizadas en Web3
Clase 11 de 28 • Ethereum Developer Program 1ª Edición
Al construir una app se suele contar con un conjunto de servicios y herramientas que se usan para hacer el trabajo y lograr que la app funcione, a este conjunto se le conoce como stack. 🧱
Para la mayoría de las aplicaciones tradicionales -o lo que podemos llamar web2- los componentes necesarios son:
- API (REST or GraphQL)
- Capa de autenticación
- Base de datos
- Client-side (frontend) frameworks y librerías
- Almacenamiento de archivos
En web3, en cambio, las cosas no son iguales, dado que representa un paradigma totalmente distinto y el ecosistema aún está en una fase inicial y en constante evolución.
¿Qué es web3?
Primero tratemos de entender qué rayos es web3. En internet puedes encontrar muchas definiciones, cada una desde una perspectiva distinta, pero enfocado a desarrollo se puede entender que…
“Web3 es el conjunto de protocolos que hacen posible construir aplicaciones totalmente descentralizadas”.
Las aplicaciones descentralizadas tienen características propias, como por ejemplo:
- Infraestructura distribuida, confiable y robusta.
- Propiedad de los datos, contenido y plataformas.
- Pagos digitales nativos.
- Identidad auto-soberana.
- Backend abierto, público y reutilizable.
Este nuevo tipo de apps da origen a un paradigma de desarrollo distinto, con el cual se pueden crear mejores soluciones que pueden llegar a reemplazar las aplicaciones actuales. ¿Ahora todo será web3? 🤔 . No realmente; web3 y las aplicaciones descentralizadas es muy útil en determinados casos de uso, pero no en todos, así que depende de lo que estés construyendo.
Bien, ya sabes qué es web3. Es momento de conocer ese conjunto de herramientas que te ayudan a desarrollar. El web3 stack se puede dividir en las siguientes categorías.
- Blockchain
- Ambientes de desarrollo para blockchain
- Almacenamiento de archivos
- API (indexing y querying)
- Identidad
- Client-side (frontend) frameworks y librerías
- Oráculos
Veamos a detalle cada uno de ellos. 🧐
Blockchain
Existe un gran número de blockchains en las cuales puedes construir. No hay una que sea la mejor, sino que cada una tiene sus propias características y ecosistema. En el estado actual del ecosistema, el mejor lugar para iniciar puede ser aprendiendo de Solidity, Ethereum y la Ethereum Virtual Machine (EVM).
Solidity te permite comenzar a desarrollar no solo para Ethereum, sino también para soluciones de capa 2 o sidechains como Polygon y Optimism, además de otras blockchains compatibles con la EVM como Avalanche, Celo, entre otras.
Otra opción con gran popularidad es Rust. Este lenguaje es utilizado en blockchains como Solana, NEAR y Polkadot.
Pero como se mencionó anteriormente, existen muchas blockchains que tienen una buena comunidad, tecnología y utilidad. Algunos ejemplos son:
- Ethereum - blockchain capa 1
- ZKSync, Starknet, Hermez - Ethereum ZK rollups
- Arbitrum y Optimism - Ethereum optimistic rollups
- Polygon - Ethereum sidechain
- Solana - blockchain capa 1
- NEAR - blockchain capa 1
- Cosmos
- Polkadot
- Aurora - blockchain compatible con EVM
- Fantom - blockchain compatible con EVM
- Avalanche - blockchain compatible con EVM
- Celo - blockchain compatible con EVM
- Tezos - blockchain capa 1
Una vez has decidido que blockchain usar necesitarás un endpoint RPC para poder recibir y transmitir información hacia la blockchain. Las formas en que puedes lograr esto son:
- Accediendo a un endpoint público en la red.
- Corriendo tu propio nodo.
- Usando un proveedor
- Usando un proveedor descentralizado
Las primeras 2 opciones no son muy usadas. Los endpoints públicos no suelen ser estables y pueden representar un punto de ruptura para tu app. Correr un nodo propio requiere la utilización de un equipo dedicado a esta tarea y su mantenimiento no suele ser labor sencilla.
La opción más empleada es utilizar un servicio que funcione como proveedor. Entre las opciones más comunes podemos encontrar:
Y otra opción menos empleada, pero también válida, es usar un proveedor descentralizado.
Ambientes de desarrollo para blockchain
Para el ecosistema de Ethereum y la EVM existen diversos ambientes de desarrollo que puedes utilizar.
- Hardhat: una de las herramientas con mayor popularidad y adopción en los tiempos recientes debido a su fácil uso. Tiene como base JavaScript.
- Truffle: otra opción basada en JavaScript y también favorita de algunos desarrolladores debido a que tiene más tiempo en funcionamiento y ha demostrado funcionar bastante bien.
- Foundry: una opción más reciente, escrita en Rust, y que promete ser una gran herramienta.
- Brownie: ambiente de desarrollo basado en Python.
Por otro lado, si te interesa el ecosistema de Solana, una buena opción de ambiente de desarrollo es Anchor. Anchor ofrece las herramientas necesarias para construir, desplegar y hacer testing de tus programas que escribas para Solana.
Almacenamiento de archivos
Al desarrollar en web3 necesitas un lugar para almacenar imágenes, videos y demás archivos que use tu app. Y en este momento es posible que pienses, “¿no se supone que los datos se guardan en blockchain?” 🤔 , pues no, al menos no todo. Almacenar archivos grandes on-chain puede ser costoso y no suele ser la mejor opción.
En cambio, existen protocolos que nos permiten hacer este almacenamiento de datos.
- IPFS: protocolo P2P con gran popularidad en el ecosistema y buena documentación.
- Arweave: útil para almacenar datos de forma permanente.
- Filecoin: protocolo de almacenamiento descentralizada, puede utilizarse a través de servicios como web3.storage
- Skynet:
Otros protocolos de datos off-chain (o fuera de la cadena -blockchain-)
Otras opciones que te permiten almacenar datos de forma off-chain son:
Estas opciones aún no están completamente establecidas y enfrentan retos como brindar datos en tiempo real, la resolución de conflictos, documentación y mejorar la experiencia de desarrollo. Pero son plataformas que podrían tomar mayor relevancia a futuro.
API (indexing y querying)
La forma en que una aplicación interactúa con blockchain es muy diferente a como lo haría con una base de datos tradicional. La mayoría de las blockchains están optimizadas para operaciones de escritura, pero leer su información, en cambio, es un poco complicado.
En una aplicación tradicional cuentas con una base de datos con información indexada y organizada de manera eficiente para poder ordenar, filtrar, hacer búsquedas y otros tipos de consultas.
En web3 no puedes hacer esto directamente desde la blockchain, pero sí desde un protocolo especifico para esto: The Graph. Este protocolo te permite indexar y hacer consultas, además de construir APIs, llamadas subgraphs, a partir de los datos de blockchain para facilitar su consumo.
Identidad
En las aplicaciones de web2 la autenticación casi siempre se basa en la información personal del usuario. Esta información generalmente se recopila a través de un formulario o un proveedor de OAuth que le pide al usuario que la entregue a cambio de acceder a la aplicación.
En web3, el paradigma es totalmente distinto, la identidad se define en relación con el concepto de wallets o billeteras. Para un usuario de cripto su billetera es una llave -criptográfica- que le da acceso a blockchain.
Como desarrollador debes aprender cómo interactuar con la billetera del usuario, así como solicitar acceso para firmar transacciones hacia blockchain.
Para aplicaciones web y si el usuario tiene instalada la extensión de navegador de alguna billetera puedes encontrar el elemento dentro del contexto del navegador como window.ethereum
o window.solana
dependiendo de la blockchain.
Una de las principales herramientas para interactuar con las billeteras es WalletConnect.
Ethereum Name Service es otro sistema de gestión de identidad popular. Para interactuar con él puedes usar la librería ens.js
Solana’s Wallet Adapter en el caso de que estés en el ecosistema de Solana.
Client-side (frontend) frameworks y librerías
Para la creación de un frontend la mayoría de los frameworks y/o librerías de JavaScript son compatibles con las herramientas de desarrollo blockchain. Aún así gran parte de los proyectos están desarrollados con React.
Entre las librerías más usadas para interactuar con Ethereum se encuentran web3.js y ethers.js.
En Solana puedes usar Solana-Web3.js o Anchor. Anchor es el que ha tenido más adopción recientemente.
Oráculos
Los oráculos permiten a los desarrolladores acceder para leer datos del mundo real y sistemas externos desde un contrato inteligente.
Por ejemplo, la mayoría de las aplicaciones financieras requieren conocimiento de datos y eventos del mundo real que ocurren fuera de la cadena, por lo que los oráculos son especialmente importantes en DeFi.
Chainlink permite el acceso a datos del mundo real y computación fuera de la cadena mientras mantiene las garantías de seguridad y confiabilidad inherentes a la tecnología blockchain.
Flux es otro oráculo que proporciona contratos inteligentes con acceso a fuentes de datos económicamente seguras.
💡 Para mayor referencia, visita el texto original de Nader Dabit: Defining the web3 stack