Перейти к основному содержанию
Пользовательские RPC-методы находятся в пространстве имён tenderly_.
Эти методы работают на Node RPC; полный справочник JSON-RPC содержит все методы и сети. Два метода выполняют одну транзакцию против заданного блока без её отправки в сеть:
  • tenderly_simulateTransaction возвращает полное декодированное выполнение: логи, трассировку вызовов, изменения активов и изменения балансов.
  • tenderly_estimateGas выполняет транзакцию тем же образом, но возвращает только показатели газа. Используйте его, когда нужно точное значение газа без полного payload симуляции.

tenderly_simulateTransaction

Симулирует транзакцию так, как она выполнилась бы на заданном блоке. Параметры
  1. Transaction Transaction OBJECT
    • from (опционально) STRING: адрес в hex
    • to STRING: адрес в hex
    • gas (опционально) NUMBER
    • maxFeePerGas (опционально) NUMBER max fee: максимальная суммарная комиссия за газ, которую отправитель готов заплатить (включает сетевую / базовую комиссию и комиссию майнера / приоритетную), в wei
    • maxPriorityFeePerGas (опционально) NUMBER max priority fee: максимальная комиссия за газ, которую отправитель готов заплатить майнерам, в wei
    • gasPrice (опционально) NUMBER: цена газа, которую отправитель готов заплатить, в wei
    • value (опционально) NUMBER
    • data (опционально) STRING: байты в hex
    • accessList (опционально) ARRAY из записей access list OBJECT
      • address STRING адрес в hex
      • storageKeys ARRAY из STRING — представление 32-байтового ключа хранилища в hex
  2. Simulation Block Number (опционально) Номер блока, против которого должна быть симулирована транзакция. Одно из:
    • STRING номер блока
    • ENUM тег блока earliest|finalized|safe|latest|pending
  3. State Overrides (опционально) MAP: сопоставление учётной записи (адреса) со спецификацией переопределения
    • key STRING: учётная запись, к которой применяется переопределение
    • value OBJECT: спецификация переопределения
      • nonce (опционально) STRING: hex-переопределение 8-байтового nonce для учётной записи
      • code (опционально) STRING: данные переопределения кода для учётной записи
      • balance (опционально) STRING: hex-переопределение 32-байтового баланса для учётной записи в wei
      • stateDiff (опционально) MAP: сопоставление ключа хранилища со значением переопределения
        • key STRING: ключ хранилища
        • value STRING: переопределяемое значение для указанного ключа хранилища
  4. Block Overrides (опционально) OBJECT: набор полей заголовка блока для переопределения.
    • number (опционально) STRING: hex, переопределяет номер блока
    • difficulty (опционально) STRING: hex, переопределяет сложность блока
    • time (опционально) STRING: hex, переопределяет временную метку блока
    • gasLimit (опционально) STRING: hex, переопределяет лимит газа
    • coinbase (опционально) STRING: hex, переопределяет майнера блока
    • random (опционально) STRING: hex, переопределяет extra data блока, которое подаётся в опкод RANDOM
    • baseFee (опционально) STRING: hex, переопределяет базовую комиссию блока
Пример
example.json
{
  "id": 0,
  "jsonrpc": "2.0",
  "method": "tenderly_simulateTransaction",
  "params": [
    {
      "from": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "data": "0xa9059cbb00000000000000000000000020a5814b73ef3537c6e099a0d45c798f4bd6e1d60000000000000000000000000000000000000000000000000000000000000001"
    },
    "0xF4D880"
  ]
}
Результат Результат симуляции OBJECT
  • status NUMBER: либо 1 (успех), либо 0 (провал)
  • gasUsed NUMBER: количество газа, использованного этой конкретной транзакцией
  • cumulativeGasUsed NUMBER: суммарное количество газа, использованное к моменту выполнения этой транзакции в блоке
  • blockNumber NUMBER: номер блока, в котором транзакция была симулирована
  • type NUMBER: тип транзакции, 0x00 для legacy-транзакций, 0x01 для типов с access list, 0x02 для динамических комиссий
  • logsBloom STRING: bloom-фильтр для лёгких клиентов, позволяющий быстро находить связанные логи
  • logs: массив эмитированных событий ARRAY из OBJECT
    • name STRING: имя события
    • anonymous BOOLEAN: указывает, является ли событие анонимным
    • inputs: массив декодированных аргументов лога ARRAY из декодированных логов OBJECT
      • name STRING: имя аргумента события
      • type STRING: тип аргумента события из системы типов Solidity
      • value (опционально) STRING строковое представление значения аргумента; интерпретируйте согласно полю type
    • raw OBJECT: сырые логи
      • address STRING адрес в hex: адрес контракта, эмитирующего лог
      • topics ARRAY из STRING 32-байтовых hex-значений
      • data STRING строка в hex, представляющая данные события
  • trace: Trace ARRAY из OBJECT
    • type STRING type: тип элемента трассировки — один из CALL| CALLCODE| STATICCALL| DELEGATECALL| CREATE| CREATE2| SELFDESTRUCT
    • from STRING: адрес в hex
    • to STRING: адрес в hex
    • gas STRING: hex-кодированное беззнаковое 64-байтовое целое, представляющее газ события
    • gasUsed STRING: hex-кодированное беззнаковое 64-байтовое целое, представляющее gasUsed события
    • value STRING: hex-кодированное беззнаковое 64-байтовое целое, представляющее value события в wei
    • error STRING: низкоуровневая ошибка виртуальной машины
    • errorReason STRING: извлечённая причина ошибки при revert
    • input STRING: hex-кодированная строка, представляющая сырые входные байты для точки трассировки
    • method STRING: вызванный метод контракта
    • decodedInput : декодированный вход вызванного метода — ARRAY из декодированных входных аргументов OBJECT
      • value STRING: строковое представление значения аргумента; интерпретируйте согласно полю type.
      • type STRING: тип Solidity этого аргумента
      • name STRING: имя этого аргумента
    • output STRING: сырой выход трассировки
    • decodedOutput : декодированный выход вызванного метода — ARRAY из декодированных выходных аргументов OBJECT
      • value STRING: строковое представление значения аргумента; интерпретируйте согласно полю type.
      • type STRING: тип Solidity этого аргумента
      • name STRING: имя этого аргумента
    • subtraces NUMBER: количество дочерних трассировок
    • traceAddress : позиция трассировки ARRAY из NUMBER
  • assetChanges ARRAY:
    • type STRING тип изменения актива, может быть transfer, mint, burn
    • from STRING: адрес отправителя (пусто для mint-переводов)
    • to STRING: адрес получателя (пусто для burn-переводов)
    • amount STRING: количество переведённого токена
    • rawAmount STRING: сырое количество перевода токена
    • dollarValueSTRING: долларовая стоимость переведённого токена
    • assetInfoOBJECT: информация об активе
      • standard STRING: поддерживаемые стандарты токенов: ERC20, ERC721, NativeCurrency
      • type STRING: тип токена: Native, Fungible, Non-Fungible
      • contractAddressSTRING : адрес контракта
      • symbol STRING: символ токена
      • name STRING: имя токена
      • logo STRING: URL иконки токена
      • decimals NUMBER: количество знаков после запятой у токена
      • dollarValueSTRING: долларовая стоимость одного токена
  • balanceChanges ARRAY: массив изменений баланса — суммарных изменений активов
    • address STRING адрес
    • dollarValue STRING: долларовая стоимость суммарных изменений активов
    • transfers ARRAY: массив индексов изменений активов

tenderly_estimateGas

Рассчитывает точную оценку газа для заданной транзакции, с опциональными переопределениями состояния и блока в стиле симуляции. Оценка основана на полностью выполненной транзакции, даже если указанный gas недостаточен, поэтому возвращаемое значение точное. В отличие от этого, eth_estimateGas может откатиться и дать заниженную оценку. Отличия от tenderly_simulateTransaction:
  • Оба метода выполняют транзакцию одинаково против заданного блока и оба принимают одинаковые переопределения состояния и блока.
  • tenderly_simulateTransaction возвращает полный декодированный результат выполнения: логи, трассировку вызовов, изменения активов и изменения балансов.
  • tenderly_estimateGas возвращает только два показателя газа: рекомендуемый лимит газа и фактически потреблённый газ. Используйте его, когда нужны только значения газа; используйте tenderly_simulateTransaction, когда нужно предварительно оценить эффекты транзакции.
Параметры
  1. Transaction Transaction OBJECT: тот же формат, что и в tenderly_simulateTransaction (from, to, gas, gasPrice, value, data, accessList)
  2. Simulation Block Number (опционально) Номер блока, против которого должна быть выполнена транзакция. Одно из:
    • STRING номер блока
    • ENUM тег блока earliest|finalized|safe|latest|pending
  3. State Overrides (опционально) MAP: сопоставление учётной записи (адреса) со спецификацией переопределения, тот же формат, что и в tenderly_simulateTransaction
  4. Block Overrides (опционально) OBJECT: набор полей заголовка блока для переопределения, тот же формат, что и в tenderly_simulateTransaction
Пример
example.json
{
  "id": 0,
  "jsonrpc": "2.0",
  "method": "tenderly_estimateGas",
  "params": [
    {
      "from": "0x8516feaea147ea0db64d1c5b97bb651ca5435155",
      "to": "0x6b175474e89094c44da98b954eedeac495271d0f",
      "data": "0xa9059cbb0000000000000000000000003fc3c4c84bdd2db5ab2cc62f93b2a9a347de25fb00000000000000000000000000000000000000000000001869c36187f3430000",
      "value": "0x0"
    },
    "21285787"
  ]
}
Результат Оценка газа OBJECT
  • gas STRING: hex-кодированный рекомендуемый лимит газа для установки в транзакции (включает запас над фактически потреблённым газом)
  • gasUsed STRING: hex-кодированное количество газа, фактически потреблённое выполненной транзакцией