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

Симулируйте EVM-транзакции на основе текущего состояния сети без их отправки. API выполняет вызовы в изолированной среде и возвращает прогнозируемые изменения балансов, события транзакций, оценку газа и ошибки отката выполнения (`revert`) - чтобы вы могли проверить транзакцию ещё до того, как пользователь её подпишет.

Изолированное выполнение
Ничего не попадает в сеть
Канонические события на выходе
Только EVM-сети

## Когда использовать симуляцию 

Предварительная проверка

Проверьте ошибки выполнения перед запросом подписи у пользователя.

Оценка комиссий

Оцените затраты на газ для сложных взаимодействий с контрактами.

Предпросмотр балансов

Покажите пользователям прогноз перемещения токенов и их количества.

Пакетная валидация

Протестируйте несколько вызовов в одном блоке, чтобы выявить проблемы с порядком выполнения.

## Отправка запроса на симуляцию 

Отправьте один или несколько вызовов на [POST /evm/simulations - симуляция вызовов EVM](/ru/apis/platform/api/simulate/simulate-evm), указав сеть в теле запроса. Параметр `chain_gid` - это идентификатор CAIP-2, например `eip155:1` (Ethereum) или `eip155:56` (BNB Smart Chain). В каждом вызове обязательны `from` и `to`; `value` и `data` необязательны (по умолчанию `0` и `0x`). Адреса и `data` передаются в hex; `value` указывается в wei - десятичным числом или `0x` hex-строкой. `block_state_calls` вмещает до 256 записей, а `calls` внутри каждой записи - до 100.

По умолчанию симуляция подставляет недостающие параметры допустимыми значениями и не проверяет баланс отправителя. Укажите `validation: true`, чтобы проверять баланс отправителя, порядковые номера транзакций отправителя (`nonce`) и согласованность комиссии так же, как при реальной отправке - это помогает обнаружить такие ошибки до отправки.

Совет
Передавайте реальный адрес `from` пользователя. При `validation: true` симуляция читает текущий баланс и nonce блокчейн-аккаунта отправителя для проверки состояния, используемого в предпросмотре.

Включите несколько вызовов в одну запись `block_state_calls`, чтобы симулировать их последовательно внутри одного блока - удобно для проверки сценариев «разрешение на расходование (`approve`), затем перевод» ещё до подписи любого из вызовов.

## Структура ответа 

Ответ содержит массив `items` с одной симулированной транзакцией на каждый входной вызов, а также объект `references` с метаданными токенов и блокчейнов. Проверьте каждый результат перед запросом подписи.

Проверьте `details.is_success` для каждого вызова. При `false` изучите `error.code`, `error.message` и hex-данные `error.data`; `details` остаётся заполненным и при revert. Успешный HTTP-ответ сам по себе не означает успешное выполнение всех вызовов.

Для предпросмотра балансов используйте `activity`: направление `in`/`out` и знаковый `delta` описывают изменение по адресу и активу. Для токенового перевода `entry_kind` равен `token_transfer`. События в `details.events` описывают переводы, разрешения и взаимодействия в порядке `event_index`. Комиссия `details.fee` выражена в нативном активе сети, а `details.gas_used` показывает расход газа.

Используйте `references` для символов и числа десятичных знаков. `base` сохраняет точную сумму; `formatted` используйте, когда оно доступно. Синтетический `txid` нужен для сопоставления результатов, а не для поиска реальной транзакции. `created_at` - время симуляции; `details.block` описывает гипотетическую позицию блока.

## Ограничения 

Прежде чем полагаться на симуляцию
Симуляция отражает состояние на **текущем блоке**. Реальный результат может отличаться, если балансы, разрешения или состояние контракта изменятся между предпросмотром и отправкой. Только EVM-сети - Solana, Tron и Bitcoin не поддерживаются. Из симуляции ничего не сохраняется, а позиция блока в ответе придумана для запроса.

Требуемое право
Этому эндпоинту нужно разрешение `api:simulate:call` на вашем API-ключе. Управляйте правами в личном кабинете.