Перейти к основному содержанию
В этом руководстве показано, как интегрировать функцию «предпросмотр транзакции» в пример Rabby Wallet с помощью Tenderly Simulation API. Предпросмотр транзакции позволяет пользователям кошельков симулировать выполнение транзакции и увидеть точные результаты, не отправляя транзакции в сеть. Так пользователи могут лучше понять финансовые последствия своих транзакций и отправлять их с уверенностью. Кроме того, вы помогаете защитить средства пользователей, устранять ненужные расходы на газ и улучшать общий пользовательский опыт и безопасность вашего продукта. Вот репозиторий GitHub этого примера с открытым исходным кодом:

Интеграция Tenderly Transaction Simulations в Rabby Wallet

Демо предпросмотра транзакции Tenderly Rabby
Это руководство предназначено исключительно для иллюстративных целей — оно показывает, как интегрировать предпросмотр транзакции в Rabby Wallet. Оно не предназначено и не рекомендуется для любого другого использования.

Обзор проекта

В этом руководстве вы узнаете, как интегрировать Tenderly Simulation API в расширение Chrome для Rabby Wallet. Сначала вы узнаете, как взаимодействовать с API и реализовать логику симуляции транзакций. Затем вы сгруппируете данные симуляции и выведете их пользователю. Таким образом, вы улучшите пользовательский опыт в этом примере Rabby Wallet, добавив новую функциональность.

Предварительные требования

Для этого руководства вам понадобятся: Начнём сборку! 👷‍♂️

Шаг 1. Клонируйте проект Rabby Wallet

Сначала форкните или клонируйте официальный репозиторий Rabby Wallet на GitHub. Для этого выполните:
example
Далее перейдите в корень проекта и установите зависимости с помощью пакетного менеджера Yarn:
example
Затем используйте следующую команду, чтобы запустить репозиторий локально:
example
Будет сгенерирована папка dist. Вы можете использовать её для загрузки расширения Chrome. Перейдите на chrome://extensions и включите Developer mode. Затем нажмите кнопку «Load unpacked», перейдите в директорию Rabby и выберите папку dist. Распакованное расширение появится на экране, и вы можете начать использовать Rabby Wallet. Теперь вы можете импортировать существующий кошелёк или создать новый.
Прежде чем начать, обязательно отключите продакшн-версию расширения Rabby Wallet для Chrome, если оно установлено.Пожалуйста, следуйте официальным рекомендациям от команды Rabby на случай, если возникнут проблемы с подключением.
Enabled unpacked version of the Rabby Wallet
Disabled production version of the Rabby Wallet

Шаг 2. Сгенерируйте токен доступа Tenderly

Чтобы использовать Tenderly Simulation API, вам нужно сгенерировать токен доступа. Выполните следующие шаги:
  1. Создайте бесплатную учётную запись Tenderly или войдите в существующую.
  2. Перейдите на страницу Authorization и нажмите кнопку Generate Access Token.
  3. Секрет токена отображается только один раз. Обязательно скопируйте и сохраните его в безопасном месте, так как позже его нельзя будет восстановить.
Если вам нужна помощь с процессом аутентификации API, следуйте руководству ниже:

Как сгенерировать токены доступа API

Шаг 3. Соберите логику симуляции

Далее мы рассмотрим следующие шаги:
  • Настройте безопасное хранилище для учётных данных Tenderly.
  • Создайте необходимый код для подключения к Tenderly Simulation API.
  • Используйте как приватные, так и публичные эндпоинты для взаимодействия с API.
  • Составьте правильный payload для этих эндпоинтов.

Работа с учётными данными Tenderly

Сначала вам нужно получить учётные данные Tenderly. Создайте файл /_raw/tenderly.json и обновите учётные данные Tenderly:
example.json
Чтобы получить доступ к учётным данным Tenderly в вашем проекте, обновите build/webpack.common.config.js следующим образом:
example.js
Вы можете найти реализацию здесь.

Реализация логики симуляции транзакций

Далее создайте файл src/ui/utils/tenderly.ts и реализуйте логику с помощью Tenderly Simulation API. Получите полный исходный код здесь.
example.tsx
Здесь мы использовали два эндпоинта. Первый эндпоинт позволяет симулировать транзакцию с различными параметрами в любой из 104 сетей, поддерживаемых Tenderly. Перейдите к нашему справочнику Simulation API, чтобы увидеть все обязательные и необязательные поля для этого эндпоинта.
example
Второй эндпоинт позволяет сделать симулированную транзакцию публично доступной. Так вы можете поделиться ей с членами вашей команды или коллегами для дополнительных инсайтов или быстрого решения проблем.
example
Последний шаг — вызвать функцию simulateTransaction внутри компонента SignTx.tx, поместив её внутри функции explainTx, которая вызывается перед подписанием транзакции. Подробности кода см. по этой ссылке.

Шаг 4. Отображение предпросмотра симулированной транзакции

Чтобы помочь пользователям понять, что произойдёт при отправке транзакций, вы можете отображать в UI данные симуляции в понятном виде. Например, когда пользователи кошелька симулируют транзакции, вы можете отображать, какие активы были переданы. В примере с Rabby Wallet мы создали три простых для понимания раздела:
  1. Tenderly Simulation Summary: думайте об этом как о табеле успеваемости транзакции. Он предоставляет базовую информацию о вашей транзакции с прямой ссылкой на подробный обзор симуляции в Tenderly Dashboard.
  2. Assets In & Assets Out: получите чёткий список всех активов (либо ERC20, либо NFT-токенов), с которыми ваш кошелёк собирается взаимодействовать.
  3. Tokens Transferred: просмотрите каждый перевод токена, происходящий в транзакции. Для дополнительной ясности сгруппируйте все переводы по адресу и выделите переводы нативной монеты.
Transaction preview for ERC20 token swap on Uniswap
Transaction preview for NFT token purchase on Joepegs

Tenderly Simulation Summary

Сначала создадим раздел Tenderly Simulation Summary. Здесь мы показываем статус симуляции, сеть, в которой выполнена транзакция, и значение газа. Чтобы построить этот раздел, вам нужно взаимодействовать с ответом Tenderly Simulation API. Начните с создания файла TenderlySimulationSummary.tsx. Вы можете найти полную реализацию кода ниже или в репозитории GitHub здесь.
example.tsx
Обратите внимание, как мы сгенерировали ссылки, ведущие пользователей в Tenderly Dashboard. Первая ссылка предназначена для аутентифицированных пользователей, а вторая — расшариваемая ссылка на симуляцию транзакции:
example.tsx
Чтобы получить данные из симулированной транзакции, обратитесь к справочнику Tenderly Simulation API:

Tenderly Simulation API

Assets In & Assets Out

Второй раздел даёт представление об управлении и мониторинге потока активов в примере Rabby Wallet. Он показывает как входящие, так и исходящие активы, чтобы вы могли лучше видеть активность кошелька. Чтобы этого добиться, начните с создания файла TenderlyWalletChanges.tsx:
example.tsx
Здесь мы отфильтровали массив изменений активов и создали два списка:
  1. Активы, поступающие в кошелёк
  2. Активы, уходящие из кошелька
Затем мы использовали вспомогательные функции для предпросмотра и форматирования данных. Однако вы также можете создать свой собственный UI-макет для отображения важной информации об активах. Узнайте больше об изменениях активов при симуляции здесь:

Изменения активов и балансов

Tokens Transferred

Раздел Token Transfers — более сложный компонент. Этот файл в первую очередь управляет макетом, поэтому сначала обсудим логику сортировки. Вы можете найти реализацию этого раздела здесь. Начните с создания файла TenderlyAssetChanges.tsx. Он содержит логику для представления двух вкладок: Tokens Transferred и Native Coins Transferred. Для этого вам нужно добавить логику сортировки, переключения между вкладками и группировки данных по адресу.
Tokens Transferred UI
Сначала сгруппируем данные и создадим два массива: переданные токены и переданные нативные монеты:
example.tsx
Далее напишем логику для обработки типов сортировки двумя способами: в хронологическом порядке и по адресу. Здесь нам нужно два компонента: ChronologicalContent.tsx и PerAddressContent.tsx. Реализацию можно найти в репозитории GitHub:

Группировка и предпросмотр всех компонентов

Наконец, соберём все компоненты вместе. Для этого вам нужно создать файл TenderlySimulationResult.tsx. Также вам нужно использовать хук useWallet(), предоставленный командой Rabby, для взаимодействия с подключённым адресом кошелька. Вот обзор кода:
example.tsx

Что дальше?

Поздравляем! Вы добавили функцию предпросмотра транзакции в пример Rabby Wallet с помощью Tenderly Simulation API. 🎉 Чтобы углубиться в логику, ознакомьтесь с полным исходным кодом на GitHub. Кроме того, вы можете инициировать симуляции транзакций Tenderly тремя разными способами в зависимости от требований вашего проекта. Чтобы узнать о других способах интеграции симуляций транзакций в ваш кошелёк или dapp, ознакомьтесь со следующими ресурсами:

Simulation API

Симуляция транзакций

Simulation RPC