
Aprenda a integrar um botão 'Connect Wallet' com MetaMask no Next.js. Este tutorial aborda configuração, uso do MetaMask SDK e criação de UI com ShadcnUI para ...

No web3, uma carteira (wallet) é um aplicativo digital que permite aos usuários interagir com redes blockchain. As carteiras funcionam como uma ponte entre os usuários e o mundo descentralizado do blockchain. Ao contrário dos aplicativos web tradicionais, que utilizam combinações de e-mail e senha ou serviços OAuth para autenticação, os apps web3 autenticam os usuários com base na propriedade de uma carteira e suas chaves privadas associadas. O botão "Connect Wallet" inicia esse processo de autenticação.
Neste tutorial, vamos implementar um botão "Connect Wallet" em um app Next.js que inicia o processo de autenticação com a carteira MetaMask.
Familiaridade com Next.js e React.
Node.js e npm/yarn instalados.
Extensão MetaMask instalada no seu navegador.
Embora esses sejam alguns pré-requisitos para este tutorial, a melhor forma de aprender é começando e aprendendo ao longo do caminho.
Para configurar um projeto Next.js, você precisa ter o Node.js instalado na sua máquina. Com o Node.js instalado, você pode criar um novo aplicativo Next.js abrindo o terminal e executando o seguinte comando:
npx create-next-app@latestVeremos os seguintes prompts:
Esse comando cria uma nova pasta com o nome de projeto especificado, configura a estrutura inicial do Next.js e instala todas as dependências necessárias. Navegue até a sua pasta.
cd next-metamask-templatee execute o seguinte comando npm run dev. Esse comando inicia o aplicativo Next.js em modo de desenvolvimento, e você pode visualizar sua aplicação acessando http://localhost:3000 no seu navegador.
Vamos adicionar uma biblioteca de componentes ao nosso app. Vamos instalar o ShadcnUI.
npx shadcn-ui@latest initVeremos os seguintes prompts para configurar o components.json:
Da biblioteca de componentes ShadcnUI, utilizaremos dois componentes neste tutorial: Button e Popover.
Também utilizaremos o @metamask/sdk-react. Você pode saber mais sobre ele na documentação do MetaMask.
Vamos instalar o SDK:
npm i @metamask/sdk-reactVamos criar um novo componente chamado NavBar.tsx e adicionar o botão "Connect Wallet" e o SDK. Inicialmente, nosso componente deve ter a seguinte aparência:
Veja o que fizemos aqui:
1. Hook useSDK: Inicialmente, nosso foco está no hook useSDK, que permite acessar as funcionalidades do MetaMask SDK. Esse hook fornece um objeto SDK para interagir com o MetaMask, um booleano connected para verificar se a carteira está conectada, um booleano connecting para checar o status da conexão e um account para acessar o endereço da conta do usuário.
2. Funções connect e disconnect: A configuração inclui duas funções principais: connect e disconnect. A função connect é uma operação assíncrona que tenta estabelecer uma conexão com a carteira MetaMask usando o SDK. Após uma conexão bem-sucedida, ela atualiza os valores de connected e account do hook useSDK. A função disconnect, por sua vez, é usada para desconectar a carteira invocando sdk.terminate().
3. Elementos de UI: Nossa implementação incorpora dois elementos de UI — um botão e um popover. A renderização do componente muda com base no status da conexão. Quando conectado, exibe um componente Popover mostrando o endereço da conta formatado e uma opção para desconectar. Se não estiver conectado, exibe um botão "Connect Wallet", que fica desabilitado durante uma tentativa de conexão em andamento.
Agora vamos adicionar o código para a NavBar:
Veja o que fizemos aqui:
Variável host: Essa variável determina o endereço do host da janela atual para uso nas opções do SDK. Inclui uma verificação condicional para confirmar se está sendo executada em um ambiente de navegador.
Opções do SDK: São as opções de configuração para o MetaMask SDK, definindo preferências de logging e verificações de instalação, além de incluir metadados sobre o dapp.
Componente NavBar: A NavBar apresenta um link para a página inicial e incorpora o componente ConnectWalletButton. Para fornecer o contexto necessário do MetaMask SDK, ela envolve o ConnectWalletButton com o componente MetaMaskProvider, importado de @metamask/sdk-react.
Ícone de carteira: Para obter o ícone da carteira, utilizamos o SVGR, uma ferramenta que converte imagens SVG em componentes React.
Para evitar que o endereço completo da carteira ocupe muito espaço na NavBar, faremos ajustes no arquivo utils.ts dentro da pasta lib. Isso garante que o endereço seja exibido em um formato mais conciso.
Adicione as seguintes linhas:
As funções acima — formatBalance, formatChainAsNum e formatAddress — foram criadas para serem importadas e utilizadas em todo o dApp, garantindo a formatação e exibição consistente dos dados do blockchain para os usuários.
No componente NavBar, vamos importá-las assim:
import { formatAddress } from "../lib/utils";E as utilizamos aqui no botão:
Agora, tudo que resta é importar o NavBar.tsx no nosso componente layout.tsx.
Se executarmos nosso servidor de desenvolvimento, veremos as alterações que fizemos no nosso app.
O MetaMask SDK é realmente conveniente e uma virada de jogo quando se trata de construir DApps. Ele permite que os usuários se conectem facilmente à extensão do navegador MetaMask e ao MetaMask Mobile.
Esta foi uma introdução a como começar com o MetaMask SDK, mas podemos fazer muito mais com ele e utilizá-lo também em aplicações fullstack. Você pode encontrar o código deste projeto neste repositório aqui.
Também recomendo conferir os seguintes recursos:
Documentação do MetaMask: https://docs.metamask.io/wallet/how-to/connect/set-up-sdk/javascript/react/
EventSea: Um Dapp fullstack de eventos que também utiliza o MetaMask SDK: https://github.com/Consensys/eventsea
Bons projetos. 🚀
Traduzido por IA. Pode conter erros. Por favor, verifique sempre as informações.