Añadir Web3 a tu sitio tradicional con Web3Modal
En un mundo donde la descentralización y las aplicaciones blockchain ganan terreno, dotar a tu sitio web tradicional de características Web3 no es ya solo una moda, sino una necesidad para destacar. Web3Modal se presenta como una solución versátil y sencilla para integrar múltiples wallets y proveedores de Web3 con un mínimo de esfuerzo.
1. ¿Por qué llevar Web3 a tu sitio tradicional
- Mayor engagement: Los usuarios pueden interactuar directamente con dApps sin necesidad de cambiar de plataforma.
- Monetización avanzada: Implementación de pagos en criptomonedas, NFT y tokens de utilidad.
- Innovación competitiva: Posicionarte como pionero en tu nicho, aprovechando la explosión de DeFi y NFTs.
- Simplificación del desarrollo: Evita construir de cero la lógica de conexión con wallets.
2. Introducción a Web3Modal
Web3Modal es una librería de JavaScript open source que proporciona una interfaz única para conectar tu frontend con diversos proveedores de wallets: MetaMask, WalletConnect, Coinbase Wallet, etc. Está diseñada para ser agnóstica al framework, funcionando en React, Vue o vanilla JS.
Visita la página oficial de Web3Modal en GitHub para más detalles: github.com/Web3Modal/web3modal
3. Arquitectura de Web3Modal
Web3Modal funciona en tres capas:
- Proveedores de conexión: Broker que facilita la conexión con MetaMask, WalletConnect, etc.
- Conector de wallets: SDKs específicos de cada proveedor (ej. @walletconnect/web3-provider).
- Capa de aplicación: Tu código JavaScript que gestiona lógica de negocio y UI.
4. Paso a paso: Integración con Web3Modal
4.1 Instalación de dependencias
npm install web3modal ethers @walletconnect/web3-provider
4.2 Configuración básica
Crea un archivo web3Config.js con la inicialización de Web3Modal:
import Web3Modal from web3modal
import WalletConnectProvider from @walletconnect/web3-provider
import { ethers } from ethers
const providerOptions = {
walletconnect: {
package: WalletConnectProvider,
options: {
infuraId: TU_INFURA_ID
}
}
}
export const web3Modal = new Web3Modal({
cacheProvider: true,
providerOptions
})
export let provider
export let signer
export async function connectWallet() {
const instance = await web3Modal.connect()
provider = new ethers.providers.Web3Provider(instance)
signer = provider.getSigner()
return { provider, signer }
}
4.3 Integración en tu frontend
En tu script principal, importa y utiliza la función connectWallet:
import { connectWallet } from ./web3Config
const connectBtn = document.getElementById(connectBtn)
const statusText = document.getElementById(status)
connectBtn.addEventListener(click, async () =gt {
try {
const { signer } = await connectWallet()
const address = await signer.getAddress()
statusText.textContent = Conectado: address
} catch (error) {
console.error(error)
statusText.textContent = Error al conectar
}
})
5. Personalización del modal
Puedes adaptar el aspecto y comportamiento del modal con opciones avanzadas:
- theme: light o dark.
- cacheProvider: conservar la wallet seleccionada.
- disableInjectedProvider: ocultar MetaMask si lo deseas.
new Web3Modal({
theme: dark,
cacheProvider: true,
disableInjectedProvider: false,
providerOptions
})
6. Gestión de redes y eventos
Para manejar cambios de red o cuenta, suscríbete a los eventos del proveedor:
provider.provider.on(accountsChanged, (accounts) =gt {
console.log(Nueva cuenta:, accounts[0])
})
provider.provider.on(chainChanged, (chainId) =gt {
console.log(Cadena cambiada:, parseInt(chainId, 16))
})
7. Tabla comparativa de proveedores
| Proveedor | Pros | Contras |
|---|---|---|
| MetaMask | Amplio uso, inyección automática | Solo en navegadores compatibles |
| WalletConnect | Móvil y desktop, QR code | Requiere servidor intermediario |
| Coinbase Wallet | Fácil para usuarios de Coinbase | Menor difusión que MetaMask |
8. Ejemplo completo de flujo
- El usuario hace clic en “Conectar Wallet”.
- Se despliega Web3Modal con opciones de wallet.
- Elige MetaMask o escanea un QR de WalletConnect.
- La dApp recibe provider y signer de ethers.js.
- Interactúa con contratos inteligentes, firma transacciones y obtiene respuestas.
9. Buenas prácticas y seguridad
- Validación de datos: Nunca confíes en los datos que provienen directamente del usuario o de la wallet.
- Listas de permisos: Solicita solo los scopes que necesitas (evita
si es posible). - Manejo de errores: Atiende fallos de conexión o de firma y ofrece feedback claro.
- Actualizaciones: Mantén Web3Modal y los proveedores al día para evitar vulnerabilidades.
10. Rendimiento y optimización
Para no impactar tu sitio tradicional:
- Carga diferida: Importa Web3Modal solo cuando el usuario abra el modal (
import()dinámico). - Minificación y tree-shaking: Usa herramientas como Webpack o Vite.
- CacheProvider: Mejora la experiencia recordando la wallet conectada.
11. Futuro y tendencias
Web3Modal está evolucionando constantemente:
- Soporte para Social Logins (Google, Facebook).
- Integración con Wallet SDKs nativos de Apple y Android.
- Mejoras en UX/UI inspiradas en plataformas como Dribbble.
12. Recursos relevantes
- Web3Modal en GitHub
- Documentación oficial de Ethers.js
- Sitio oficial de WalletConnect
- Metamask – Extensión de navegador
Conclusión
Incorporar Web3Modal a tu sitio tradicional no solo te abre las puertas al universo blockchain, sino que te permite ofrecer una experiencia de usuario fluida y segura en la interacción con dApps. Con unos pocos pasos, comandos y líneas de configuración, tu web podrá soportar múltiples wallets, redes y casos de uso DeFi o NFT. Sigue las prácticas de seguridad, mantén tus dependencias actualizadas y personaliza el modal para reflejar la identidad de tu marca.
El futuro de la web es descentralizado. Con Web3Modal, tú decides cómo y cuándo dar el salto.
Deja una respuesta