Перейти к содержимому
Последнее обновление

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

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

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

  • Предварительная проверка — убедитесь, что транзакция выполнится успешно, прежде чем запрашивать подпись у пользователя.
  • Оценка комиссий — получите точные затраты на газ для сложных взаимодействий с контрактами.
  • Предпросмотр балансов — покажите пользователям, какие именно токены будут перемещены и в каком объёме.
  • Пакетная валидация — протестируйте несколько вызовов в одном блоке, чтобы выявить проблемы с порядком выполнения.

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

Отправьте один или несколько вызовов на POST /simulate/evm/{chain_gid}. Параметр chain_gid — это идентификатор CAIP-2, например eip155:1 (Ethereum) или eip155:137 (Polygon). Все поля каждого вызова — from, to, value и data — обязательны. Значения передаются в hex-кодировке.

curl -X POST "https://${VILNA_NAMESPACE}.vilna.app/simulate/evm/eip155:1" \
  -H "X-Api-Key: ${VILNA_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "block_state_calls": [
      {
        "calls": [
          {
            "from": "0x974caa59e49682cda0ad2bbe82983419a2ecc400",
            "to": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
            "value": "0x0",
            "data": "0xa9059cbb000000000000000000000000d0930a8fc56fd94038250bb93dbac0e13da4eb99000000000000000000000000000000000000000000000000000000003b9aca00"
          }
        ]
      }
    ]
  }'

Вы можете включить несколько вызовов в одну запись block_state_calls, чтобы симулировать их последовательно внутри одного блока. Это удобно для тестирования сценариев approve-then-transfer.

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

Ответ содержит массив items с одним объектом SimulatedTransaction на каждый входной вызов, а также объект references с метаданными токенов и блокчейнов.

Каждая симулированная транзакция включает:

ПолеОписание
is_successВыполнился ли вызов без revert.
eventsКанонические события (переводы, одобрения, комиссии), которые были бы эмитированы.
activityПрогнозируемые изменения балансов по адресам и активам с указанием направления (direction: in/out) и величины (delta).
errorПрисутствует только при ошибке. Содержит code, message и hex-кодированное поле data для декодирования revert.
chain_gidСеть, в которой была выполнена симуляция.
txidСинтетический хеш транзакции для корреляции.
block_numberВысота блока, использованная при симуляции.

Объект references сопоставляет GID активов с данными токенов (символ, количество десятичных знаков) и GID сетей с метаданными блокчейнов, позволяя получить человекочитаемые названия без дополнительных запросов к API.

Ограничения

  • Только EVM-сети. Non-EVM сети (Solana, Tron, Bitcoin) не поддерживаются.
  • Симуляция отражает состояние на текущем блоке. Фактический результат может отличаться, если состояние изменится между симуляцией и отправкой транзакции.
  • Требуется разрешение api:blockchain:read на вашем API-ключе.

Следующие шаги