
Узнайте, как интегрировать кнопку «Connect Wallet» с MetaMask в Next.js. Этот туториал охватывает настройку, использование MetaMask SDK и создание UI с ShadcnUI для ...

В web3 термин «кошелёк» обозначает цифровое приложение, позволяющее пользователям взаимодействовать с блокчейн-сетями. Кошельки служат мостом между пользователями и децентрализованным миром блокчейна. В отличие от традиционных веб-приложений, использующих комбинации email и пароля или OAuth-сервисы для аутентификации, web3-приложения аутентифицируют пользователей на основе владения кошельком и связанными с ним приватными ключами. Кнопка «Connect Wallet» инициирует этот процесс аутентификации.
В этом руководстве мы реализуем кнопку «Connect Wallet» в приложении Next.js, которая запускает процесс аутентификации с кошельком MetaMask.
Знакомство с Next.js и React.
Установленные Node.js и npm/yarn.
Расширение MetaMask, установленное в вашем браузере.
Это лишь базовые требования для данного руководства — лучший способ научиться — начать и осваивать всё по ходу.
Для настройки проекта Next.js необходимо установить Node.js на вашем компьютере. После установки Node.js вы можете создать новое приложение Next.js, открыв терминал и выполнив следующую команду:
npx create-next-app@latestМы увидим следующие запросы:
Эта команда создаёт новую папку с указанным именем проекта, настраивает начальную структуру Next.js и устанавливает все необходимые зависимости. Перейдите в вашу папку.
cd next-metamask-templateи выполните команду npm run dev — она запускает приложение Next.js в режиме разработки, и вы можете просмотреть своё приложение, перейдя по адресу http://localhost:3000 в браузере.
Мы добавим в наше приложение библиотеку компонентов. Давайте установим ShadcnUI.
npx shadcn-ui@latest initМы увидим следующие запросы для настройки components.json:
Из библиотеки компонентов ShadcnUI мы будем использовать два компонента: Button и Popover.
Также мы будем использовать @metamask/sdk-react — подробнее об этом можно прочитать в документации MetaMask.
Установим SDK:
npm i @metamask/sdk-reactМы создадим новый компонент NavBar.tsx и добавим кнопку «Connect Wallet» и SDK. Изначально наш компонент должен выглядеть следующим образом:
Разберём, что мы сделали:
1. Хук useSDK: В первую очередь мы сосредоточимся на хуке useSDK, который открывает доступ к функциям MetaMask SDK. Этот хук предоставляет объект SDK для взаимодействия с MetaMask, булево значение connected для проверки подключения кошелька, булево значение connecting для отслеживания статуса подключения и account для доступа к адресу аккаунта пользователя.
2. Функции подключения и отключения: Реализация включает две ключевые функции: connect и disconnect. Функция connect — это асинхронная операция, которая пытается установить соединение с кошельком MetaMask через SDK. При успешном подключении она обновляет значения connected и account из хука useSDK. Функция disconnect, в свою очередь, используется для отключения кошелька путём вызова sdk.terminate().
3. Элементы UI: В нашей реализации используются два элемента UI — кнопка и popover. Отображение компонента меняется в зависимости от статуса подключения. При активном подключении отображается компонент Popover с отформатированным адресом аккаунта и опцией отключения. Если подключение отсутствует — показывается кнопка «Connect Wallet», которая блокируется во время выполняющейся попытки подключения.
Теперь добавим код для NavBar:
Разберём, что мы сделали:
Переменная host: Эта переменная определяет адрес хоста текущего окна для использования в параметрах SDK. Она включает условную проверку для определения того, выполняется ли код в браузерной среде.
Параметры SDK: Это параметры конфигурации для MetaMask SDK, задающие настройки логирования и проверки установки, а также включающие метаданные о dapp.
Компонент NavBar: NavBar содержит ссылку на главную страницу и включает компонент ConnectWalletButton. Для предоставления необходимого контекста из MetaMask SDK он оборачивает ConnectWalletButton в компонент MetaMaskProvider, импортированный из @metamask/sdk-react.
Иконка кошелька: для получения иконки кошелька мы использовали SVGR — инструмент, преобразующий SVG-изображения в React-компоненты.
Чтобы полный адрес кошелька не занимал слишком много места в NavBar, внесём изменения в файл utils.ts в папке lib. Это обеспечит отображение адреса в более компактном формате.
Добавьте следующие строки:
Перечисленные функции — formatBalance, formatChainAsNum и formatAddress — предназначены для импорта и использования во всём dApp с целью единообразного форматирования и отображения данных блокчейна пользователям.
В компоненте NavBar мы импортируем их следующим образом:
import { formatAddress } from "../lib/utils";И используем здесь на кнопке:
Теперь остаётся только импортировать NavBar.tsx в наш компонент layout.tsx.
Если мы запустим сервер разработки, то увидим внесённые изменения в нашем приложении.
MetaMask SDK — действительно удобный инструмент, меняющий подход к разработке DApp. Он позволяет пользователям легко подключаться к браузерному расширению MetaMask и MetaMask Mobile.
Это было введение в работу с MetaMask SDK, однако его возможности этим не ограничиваются — SDK можно использовать и в fullstack-приложениях. Код этого проекта можно найти в репозитории здесь.
Также рекомендую ознакомиться со следующими ресурсами:
Документация MetaMask: https://docs.metamask.io/wallet/how-to/connect/set-up-sdk/javascript/react/
EventSea — fullstack dApp для мероприятий, также использующий MetaMask SDK: https://github.com/Consensys/eventsea
Удачной разработки. 🚀
Переведено ИИ. Может содержать ошибки. Пожалуйста, всегда проверяйте информацию.