eth_simulateV1 является стандартным методом мультиблочной симуляции из спецификации Ethereum execution APIs. Он симулирует последовательность блоков, каждый из которых содержит пакет вызовов, поверх базового блока, ничего не отправляя в сеть. Вызовы внутри блока выполняются последовательно и разделяют состояние, а каждый симулируемый блок строится поверх предыдущего.
Метод работает на Node RPC и Virtual Environments; полный справочник JSON-RPC содержит все методы и сети. Небольшой набор сетей его не поддерживает; см. раздел Доступность в сетях.
Используйте eth_simulateV1, когда нужна переносимая, соответствующая спецификации симуляция, возвращающая результаты в формате блоков. Для декодированных логов, трассировки вызовов, изменений активов и балансов используйте tenderly_simulateTransaction для одной транзакции или tenderly_simulateBundle для последовательности транзакций.
eth_simulateV1
Симулирует последовательность блоков поверх заданного базового блока. Каждый блок содержит пакет вызовов: вызов N видит изменения состояния вызова N-1, а каждый блок после первого строится на предыдущем.
Параметры
- Simulation payload
OBJECT- blockStateCalls
ARRAYиз Block state callOBJECT: последовательность блоков для симуляции, по порядку- blockOverrides (опционально)
OBJECT: набор полей заголовка для переопределения в этом блоке- number (опционально)
STRING: hex, переопределяет номер блока - difficulty (опционально)
STRING: hex, переопределяет сложность блока - time (опционально)
STRING: hex, переопределяет временную метку блока - gasLimit (опционально)
STRING: hex, переопределяет лимит газа - coinbase (опционально)
STRING: hex, переопределяет майнера блока - random (опционально)
STRING: hex, переопределяет значение, которое подаётся в опкод PREVRANDAO - baseFee (опционально)
STRING: hex, переопределяет базовую комиссию блока - excessBlobGas (опционально)
STRING: hex, переопределяет избыточный blob-газ - blobGasUsed (опционально)
STRING: hex, переопределяет использованный blob-газ
- number (опционально)
- stateOverrides (опционально)
MAP: сопоставление учётной записи (адреса) со спецификацией переопределения. Задавайте переопределения состояния на первой записи блока; см. Особенности реализации Tenderly- key
STRING: учётная запись, к которой применяется переопределение - value
OBJECT: спецификация переопределения- balance (опционально)
STRING: hex-кодированное переопределение баланса учётной записи в wei - nonce (опционально)
STRING: hex-кодированное переопределение nonce для учётной записи - code (опционально)
STRING: данные переопределения кода для учётной записи - stateDiff (опционально)
MAP: сопоставление ключа хранилища со значением переопределения- key
STRING: ключ хранилища - value
STRING: переопределяемое значение для указанного ключа хранилища
- key
- balance (опционально)
- key
- calls
ARRAYиз Transaction callOBJECT: выполняются по порядку; каждый вызов видит изменения состояния предшествующих ему вызовов- from (опционально)
STRING: адрес в hex; по умолчанию нулевой адрес - to (опционально)
STRING: адрес в hex - gas (опционально)
STRING: hex-кодированный лимит газа для вызова - gasPrice (опционально)
STRING: hex, цена газа, которую отправитель готов заплатить, в wei - maxFeePerGas (опционально)
STRING: hex, максимальная суммарная комиссия за газ, которую отправитель готов заплатить (включает сетевую / базовую комиссию и комиссию майнера / приоритетную), в wei - maxPriorityFeePerGas (опционально)
STRING: hex, максимальная комиссия за газ, которую отправитель готов заплатить майнерам, в wei - value (опционально)
STRING: hex-кодированное значение в wei; по умолчанию0x0 - input (опционально)
STRING: hex-кодированные данные вызова;dataпринимается как устаревший псевдоним, при одновременном указании приоритет имеетinput - nonce (опционально)
STRING: hex-кодированный nonce - type (опционально)
STRING: hex-кодированный тип транзакции - accessList (опционально)
ARRAYиз записей access listOBJECT- address
STRING: адрес в hex - storageKeys
ARRAYизSTRING: представление 32-байтовых hex-кодированных ключей хранилища
- address
- maxFeePerBlobGas (опционально)
STRING: hex, максимальная комиссия за blob-газ в wei - blobVersionedHashes (опционально)
ARRAYизSTRING: 32-байтовые hex-кодированные версионированные хеши blob - authorizationList (опционально)
ARRAY: кортежи авторизации EIP-7702
- from (опционально)
- blockOverrides (опционально)
- returnFullTransactions (опционально)
BOOLEAN: еслиtrue, блоки результата содержат полные объекты транзакций вместо хешей транзакций
- blockStateCalls
- Base block number (опционально) Блок, поверх которого выполняется симуляция. По умолчанию
latest. Одно из:STRINGномер блокаENUMтег блокаearliest|finalized|safe|latest|pending
- Request
- Shell
- JavaScript
- Response
example.json
ARRAY из Block result OBJECT, по одному на каждую запись blockStateCalls, по порядку. Каждый результат блока содержит стандартные поля заголовка блока, возвращаемые eth_getBlockByNumber (number, hash, parentHash, timestamp, gasLimit, gasUsed, baseFeePerGas, logsBloom, miner и так далее), а также:
- transactions
ARRAY: хеши транзакций симулированных вызовов или полные объекты транзакций, еслиreturnFullTransactionsравноtrue - calls
ARRAYиз Call resultOBJECT, по одному на вызов, по порядку:- returnData
STRING: hex-кодированные возвращаемые данные вызова - logs
ARRAYиз LogOBJECT: события, эмитированные вызовом (address,topics,data,blockNumber,transactionHash,transactionIndex,blockHash,logIndex,removed); пустой массив для откатившихся вызовов - gasUsed
STRING: hex-кодированное количество газа, потреблённого вызовом - status
STRING:0x1при успехе,0x0при неудаче - error
OBJECT: присутствует только при неудачном вызове- code
NUMBER: код ошибки - message
STRING: сообщение об ошибке, включая причину revert, когда она доступна
- code
- returnData
Особенности реализации Tenderly
Реализация Tenderly отличается от эталонной спецификации execution-apis следующим образом:validationне поддерживается. Установкаvalidation: trueвозвращает ошибкуvalidation flag is not supported. Симуляция всегда выполняется в невалидирующем режиме: требования к nonce, балансу и комиссиям не применяются к вызовам.traceTransfersне поддерживается. УстановкаtraceTransfers: trueвозвращает ошибкуtraceTransfers flag is not supported. Синтетические логи переводов ETH не создаются.- Переопределения
stateне поддерживаются. Полеstate(полная замена хранилища) в переопределении состояния возвращает ошибкуnot supported. ИспользуйтеstateDiffдля переопределения отдельных слотов хранилища. - Переопределения состояния применяются с первого блока. Задавайте
stateOverridesна первой записиblockStateCalls;stateOverridesна последующих записях не применяются. gasна уровне вызова ограничивается сверху. Значениеgasвыше лимита газа блока плюс 600 000 000 усекается до этого потолка, а не отклоняется.- Нет лимитов на количество блоков и вызовов. Максимальное количество записей
blockStateCallsи количество вызовов в одном блоке не ограничены. - Хеши транзакций синтетические. Хеши в блоках результата идентифицируют симулированные вызовы, но не являются хешами подписанных транзакций.
- Продвижение блоков. Каждый симулируемый блок после первого получает
number = предыдущий + 1иparentHash, связанный с предыдущим результатом, при этом базовая комиссия и лимит газа пересчитываются. Автоматически генерируемая временная метка берётся из системных часов ноды, поэтому задавайтеblockOverrides.timeявно, когда временные метки важны. Переопределённые номера блоков и временные метки применяются как есть; монотонность не проверяется. Если первая запись блока содержитblockOverridesбезnumber, номер блока по умолчанию равен номеру базового блока плюс 1.
Доступность в сетях
eth_simulateV1 доступен в сетях Node RPC и Virtual Environments, за исключением следующих сетей, где ноды базовой сети не поддерживают этот метод:
- ApeChain
- Avalanche C-Chain
- Avalanche C-Chain Fuji
- Blast
- Curtis
- Flare
- Immutable
- Immutable Testnet
- Lens
- Lens Testnet
- Metis Andromeda
- Metis Sepolia
- Monad
- Monad Testnet
- Moonbase Alpha
- Moonbeam
- Moonriver
- Scroll Mainnet
- Scroll Sepolia
- Sonic
- Sonic Testnet
- Stable
- Stable Testnet
- ZKsync
- ZKsync Sepolia