
Aprende a integrar un botón 'Connect Wallet' con MetaMask en Next.js. Este tutorial cubre la configuración, el uso del SDK de MetaMask y la creación de UI con ShadcnUI para ...

En web3, una wallet (billetera) es una aplicación digital que permite a los usuarios interactuar con redes blockchain. Las wallets actúan como puente entre los usuarios y el mundo descentralizado de la blockchain. A diferencia de las aplicaciones web tradicionales que utilizan combinaciones de correo electrónico y contraseña o servicios OAuth para la autenticación, las aplicaciones web3 autentican a los usuarios basándose en la titularidad de una wallet y sus claves privadas asociadas. El botón "Connect Wallet" inicia este proceso de autenticación.
En este tutorial, implementaremos un botón "Connect Wallet" en una aplicación Next.js que inicia el proceso de autenticación con la wallet de MetaMask.
Familiaridad con Next.js y React.
Node.js y npm/yarn instalados.
Extensión de MetaMask instalada en tu navegador.
Aunque estos son algunos requisitos previos para este tutorial, la mejor manera de aprender es comenzar y aprender en el camino.
Para configurar un proyecto Next.js, necesitas tener Node.js instalado en tu máquina. Una vez instalado Node.js, puedes crear una nueva aplicación Next.js abriendo tu terminal y ejecutando el siguiente comando:
npx create-next-app@latestVeremos los siguientes mensajes:
Este comando crea una nueva carpeta con el nombre de proyecto especificado, configura la estructura inicial de Next.js e instala todas las dependencias necesarias. Navega hasta tu carpeta.
cd next-metamask-templatey ejecuta el siguiente comando npm run dev. Este comando inicia la aplicación Next.js en modo de desarrollo y puedes ver tu aplicación accediendo a http://localhost:3000 en tu navegador web.
Añadiremos una biblioteca de componentes a nuestra aplicación. Procedamos a instalar ShadcnUI.
npx shadcn-ui@latest initVeremos los siguientes mensajes para configurar components.json:
De la biblioteca de componentes de ShadcnUI, utilizaremos dos componentes para este tutorial: Button y Popover.
También utilizaremos @metamask/sdk-react. Puedes obtener más información en la documentación de MetaMask.
Instalemos el SDK:
npm i @metamask/sdk-reactCrearemos un nuevo componente llamado NavBar.tsx y añadiremos el botón "Connect Wallet" y el SDK. Nuestro componente debería verse así en un principio:
Veamos qué hicimos aquí:
1. Hook useSDK: Inicialmente, nos centramos en el hook useSDK, que permite acceder a las funcionalidades del SDK de MetaMask. Este hook proporciona un objeto SDK para interactuar con MetaMask, un booleano connected para verificar si la wallet está conectada, un booleano connecting para comprobar el estado de la conexión y un account para acceder a la dirección de la cuenta del usuario.
2. Funciones de conexión y desconexión: La configuración incluye dos funciones clave: connect y disconnect. La función connect es una operación asíncrona que intenta establecer una conexión con la wallet de MetaMask mediante el SDK. Tras una conexión exitosa, actualiza los valores de connected y account del hook useSDK. La función disconnect, por su parte, se utiliza para desconectar la wallet invocando sdk.terminate().
3. Elementos de la interfaz: Nuestra implementación incorpora dos elementos de interfaz: un botón y un popover. El renderizado del componente cambia según el estado de la conexión. Cuando está conectado, muestra un componente Popover con la dirección de cuenta formateada y una opción para desconectarse. Si no está conectado, muestra un botón "Connect Wallet" que se deshabilita durante un intento de conexión en curso.
Ahora añadamos el código para el NavBar:
Veamos qué hicimos aquí:
Variable host: Esta variable determina la dirección del host de la ventana actual para su uso en las opciones del SDK. Incluye una verificación condicional para comprobar si se está ejecutando en un entorno de navegador.
Opciones del SDK: Son las opciones de configuración del SDK de MetaMask, que establecen preferencias para el registro y las comprobaciones de instalación, e incluyen metadatos sobre la dapp.
Componente NavBar: El NavBar incluye un enlace a la página de inicio e incorpora el componente ConnectWalletButton. Para proporcionar el contexto necesario del SDK de MetaMask, envuelve el ConnectWalletButton con el componente MetaMaskProvider, que se importa desde @metamask/sdk-react.
Ícono de wallet: Para obtener el ícono de la wallet, utilizamos SVGR, una herramienta que convierte imágenes SVG en componentes de React.
Para evitar que la dirección completa de la wallet ocupe demasiado espacio en el NavBar, realizaremos ajustes en el archivo utils.ts dentro de la carpeta lib. Esto garantiza que la dirección se muestre en un formato más conciso.
Añade las siguientes líneas:
Las funciones anteriores — formatBalance, formatChainAsNum y formatAddress — están diseñadas para ser importadas y utilizadas en toda una dApp con el fin de formatear y mostrar datos de blockchain a los usuarios de manera consistente.
En el componente NavBar lo importaremos así:
import { formatAddress } from "../lib/utils";Y lo utilizamos aquí en el botón:
Ahora solo queda importar NavBar.tsx en nuestro componente layout.tsx.
Si ejecutamos nuestro servidor de desarrollo, veremos los cambios que hemos realizado en nuestra aplicación.
El SDK de MetaMask es verdaderamente conveniente y un cambio de paradigma a la hora de construir DApps. Permite a los usuarios conectarse fácilmente a la extensión de navegador de MetaMask y a MetaMask Mobile.
Esta fue una introducción a cómo comenzar con el SDK de MetaMask, pero podemos hacer mucho más con él y también utilizarlo en aplicaciones fullstack. Puedes encontrar el código de este proyecto en este repositorio aquí.
También recomiendo consultar los siguientes recursos:
Documentación de MetaMask: https://docs.metamask.io/wallet/how-to/connect/set-up-sdk/javascript/react/
EventSea: Una DApp fullstack de eventos que también utiliza el SDK de MetaMask: https://github.com/Consensys/eventsea
¡Feliz construcción! 🚀
Traducido por IA. Puede contener errores. Por favor, verifique siempre la información.