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

tenderly_simulateBundle

Симулирует бандл транзакций так, как он выполнился бы на заданном блоке, и возвращает результаты для каждой транзакции. Параметры
  1. Transactions Transactions ARRAY: список транзакций в бандле
    • 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_simulateBundle",
  "params": [
  [
{
  "from": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
  "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
  "data": "0x095ea7b300000000000000000000000020a5814b73ef3537c6e099a0d45c798f4bd6e1d60000000000000000000000000000000000000000000000000000000000000001"
},
{
  "from": "0x20a5814b73ef3537c6e099a0d45c798f4bd6e1d6",
  "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
  "data": "0x23b872dd000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa9604500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
}
  ],
  "0xF4D880"
  ]
}
Результат Результаты симуляций ARRAY: список результатов симуляций в бандле
  • 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_estimateGasBundle

Рассчитывает точные оценки газа для заданного списка транзакций, с опциональными переопределениями состояния и блока в стиле симуляции. Как и tenderly_estimateGas, каждая оценка основана на полностью выполненной транзакции, поэтому возвращаемые значения точны там, где eth_estimateGas мог бы откатиться и дать заниженную оценку. Транзакции выполняются по порядку, каждая на состоянии, оставленном предыдущей. Отличия от tenderly_simulateBundle:
  • Оба метода выполняют бандл одинаково против заданного блока и оба принимают одинаковые переопределения состояния и блока.
  • tenderly_simulateBundle возвращает полный декодированный результат выполнения каждой транзакции: логи, трассировку вызовов, изменения активов и изменения балансов.
  • tenderly_estimateGasBundle возвращает только два показателя газа для каждой транзакции: рекомендуемый лимит газа и фактически потреблённый газ. Используйте его, когда нужны только значения газа; используйте tenderly_simulateBundle, когда нужно предварительно оценить эффекты бандла.
Параметры
  1. Transactions Transactions ARRAY: список транзакций в бандле, тот же формат, что и в tenderly_simulateBundle
  2. Simulation Block Number (опционально) Номер блока, против которого должен быть выполнен бандл. Одно из:
    • STRING номер блока
    • ENUM тег блока earliest|finalized|safe|latest|pending
  3. State Overrides (опционально) MAP: сопоставление учётной записи (адреса) со спецификацией переопределения, тот же формат, что и в tenderly_simulateBundle
  4. Block Overrides (опционально) OBJECT: набор полей заголовка блока для переопределения, тот же формат, что и в tenderly_simulateBundle
Пример
example.json
{
  "id": 0,
  "jsonrpc": "2.0",
  "method": "tenderly_estimateGasBundle",
  "params": [
    [
      {
        "from": "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0",
        "to": "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84",
        "data": "0x095ea7b30000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab410000000000000000000000000000000000000000000000000c1291a92f17a100"
      },
      {
        "from": "0x9008D19f58AAbD9eD0D60971565AA8510560ab41",
        "to": "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84",
        "data": "0x23b872dd0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca00000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab410000000000000000000000000000000000000000000000000c1291a92f17a100"
      },
      {
        "from": "0x9008D19f58AAbD9eD0D60971565AA8510560ab41",
        "to": "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84",
        "data": "0x095ea7b30000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca00000000000000000000000000000000000000000000000000c1291a92f17a100"
      },
      {
        "from": "0x9008D19f58AAbD9eD0D60971565AA8510560ab41",
        "to": "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0",
        "data": "0xea598cb00000000000000000000000000000000000000000000000000c1291a92f17a100"
      }
    ],
    "latest"
  ]
}
Результат Оценки газа ARRAY: список оценок газа, по одной на каждую транзакцию в бандле
  • gas STRING: hex-кодированный рекомендуемый лимит газа для установки в транзакции (включает запас над фактически потреблённым газом)
  • gasUsed STRING: hex-кодированное количество газа, фактически потреблённое выполненной транзакцией