Simulation RPC совместим с Mainnet, Boba и Polygon, а другие сети будут
интегрированы постепенно.\ Simulation API совместим со всеми сетями, поддерживаемыми
Tenderly.
Преимущества интеграции Simulation API
Интегрируя Simulation API/Simulation RPC, вы можете:- Делать сухой прогон транзакций пользователей перед тем, как они подпишут и отправят их в сеть.
- Обеспечивать лучшую видимость потенциальных откатов и избегать потерь на комиссиях за газ.
- Обеспечивать лучшую видимость результатов успешных приложений, включая перемещения активов и изменения состояния, релевантные для пользователя.
- Выстраивать логику вокруг результатов симуляции, чтобы показывать пользователям, приносят ли их транзакции оптимальную ценность, и предлагать улучшения.
- Если вы создаёте приложение, похожее на кошелёк, вы можете показывать, как транзакция перемещает токены ERC-20, и позволять пользователям видеть движение своих средств.
- Если вы создаёте DeFi-продукт, вы можете использовать события для анализа того, соответствует ли транзакция оптимальным условиям, установленным пользователем в UI.
- Если вы готовите предложение по управлению, состоящее из нескольких транзакций, вы можете сделать симуляционный пакет, чтобы увидеть, как предложение применяется.
- Вы даже можете объединить транзакции предложения с несколькими тестовыми транзакциями, чтобы убедиться, что ваше предложение выполняется как задумано, и выявить возможные слепые зоны.
Пример: добавление симуляций в UI Uniswap
В этом примере мы покажем, как интегрировать Simulation RPC в UI Uniswap и отобразить точные переходы токенов вдоль пути обмена. Так мы дадим пользователю более высокую видимость эффектов транзакции и позволим ему принять обоснованное решение о том, продолжать ли выполнение.Требования к компоненту Simulation
Вот требования к компоненту симуляции:
- Компонент должен отображать количество токенов у пользователя до и после подписания и отправки транзакции.
- Симуляция должна выполняться каждый раз при изменении данных сделки, поэтому ему нужно получать параметры
tradeиallowedSlippage. - Компонент должен отслеживать:
- Текущие балансы (до свопа).
- Событие
Swap, которое мы будем использовать для расчёта новых балансов. - Массив событий
Transfer, которые мы будем использовать для расчёта новых балансов.
Рендер Simulation внутри ConfirmSwapModal
Лучшее место, чтобы проинформировать пользователя о результатах транзакции — ConfirmSwapModal, непосредственно перед тем, как он сможет подписать и отправить транзакцию.
Код сокращён для краткости:
example
Реализация компонента Simulation
Логика компонента лежит в функции simulate:
- Она запускается при изменении аргументов
tradeилиprovider, поэтому обновляется и ресимулирует всякий раз, когда своп потенциально меняется. - Она вызывает
setOldBalances, которая получает балансы токенов ERC-20 In и Out и сохраняет их в переменной состоянияoldBalances. - Она вызывает
simulateRPC, которая выполняет вызов Simulation RPC кtenderly_simulateTranscationи затем:- Она разбирает декодированные логи, чтобы найти события
Transfer, и сохраняет их в переменной состоянияtransfersкомпонента. - Она разбирает декодированные логи, чтобы найти событие
Swap, и сохраняет его в переменной состоянияswapкомпонента.
- Она разбирает декодированные логи, чтобы найти события
SimulationDetails, который является чисто функциональным. Он вычисляет старые и новые состояния и рендерит данные на основе trade, swap, transfers и oldBalances.
example.tsx