Skip to main content
Tenderly поддерживает симуляции одиночных транзакций через RPC и API. По умолчанию симуляции выполняются на актуальном состоянии выбранной сети. Simulation API также позволяет закрепить исторический блок и позицию внутри него (см. Номер блока и индекс транзакции). Dapp’ы и кошельки могут использовать одиночные симуляции, чтобы дать пользователям возможность выполнить сухой прогон транзакций перед тем, как рисковать реальными активами. Это даёт им предпросмотр выполнения транзакции вместе с подробными изменениями балансов и активов. Предпросмотр транзакций может помочь пользователям укрепить доверие к dapp’ам, одобрять только успешные транзакции и предотвращать дорогостоящие сбои.

Симуляция через RPC

Node RPC позволяет читать данные из блокчейна и отправлять транзакции. Но вы также можете симулировать транзакции в Node. Преимущество симуляции через RPC заключается в том, что вы можете выполнять все эти операции через один RPC URL.
Симуляции через RPC или API доступны только в поддерживаемых сетях. Ознакомьтесь со списком поддерживаемых сетей.
Получите RPC URL и ключ доступа из Dashboard. Перейдите в Node > Copy HTTPS URL нужной вам сети.
example
Чтобы симулировать одиночную транзакцию через RPC, вызовите метод tenderly_simulateTransaction. См. справочник RPC. Пример
request

Симуляция через API

Используйте эндпоинт simulate API, чтобы симулировать одну транзакцию с разными параметрами.
Для использования симуляций в виртуальных окружениях мы рекомендуем Simulate RPC и Bundle Simulate RPC. Иначе можно использовать Simulation API виртуальных окружений.
URL должен содержать ваш account slug и project slug. Следуйте этому краткому руководству, чтобы найти slug’и.
Simulation API endpoint on public network
Simulation API endpoint on a Virtual Environment
Вам также необходимо получить токен доступа API, который отправляется в заголовках. Узнайте, как сгенерировать ключ доступа API здесь.

Тело запроса

Отправьте POST-запрос на эндпоинт API. Полные сведения о теле запроса см. в Справочнике API. Симулируемое тело запроса похоже на JSON-RPC вызов eth_call. Следующие поля обязательны:
  • network_id (string): ID сети, в которой вы хотите запустить симуляцию.
  • to (string): адрес получателя транзакции.
  • from (string): адрес, инициирующий транзакцию.
  • input (string): закодированные данные вызова метода контракта.
  • gas (number): количество газа, предоставленного для симуляции.
Вы можете указать любой адрес отправителя в поле from. Поскольку Tenderly симулирует неподписанные транзакции, вам не нужно владеть приватным ключом аккаунта, чтобы симулировать транзакции от имени конкретного отправителя.
Вы также можете указать simulation_type, который может принимать значения full, quick или ABI. Это поле необязательно, поскольку по умолчанию установлено full. Узнайте больше о режимах симуляции.

Номер блока и индекс транзакции

block_number и transaction_index определяют состояние, на котором выполняется транзакция. Оба поля необязательны и принимают целые числа. Правила валидации:
  • block_number является целым числом. Теги блока, такие как "latest" или "pending", отклоняются с ошибкой 400 Bad request input parameters.
  • transaction_index требует явного block_number. Если блок не указан, ненулевой индекс отклоняется с ошибкой 400 Transaction index is not allowed when block number is pending.
  • Индекс больше числа транзакций в блоке завершается ошибкой transaction index too high: invalid transaction simulation. Индекс не ограничивается автоматически, и ключевого слова для конца блока не существует.
Чтобы симулировать на состоянии после самого последнего блока, сначала прочитайте блок и передайте число его транзакций как индекс:
состояние после последнего блока
Те же поля использует элемент управления Tx Index в Simulator UI: At start of block соответствует индексу 0, At tx выбранному индексу, а At end of block числу транзакций блока. При выполнении запросов к API добавьте заголовок X-Access-Key, значение которого — токен доступа. Пример Обязательно храните ключ доступа безопасно в файле .env.
request.ts

Изучите сценарии использования

Что дальше

Пакетные симуляции

Симуляция через SDK