> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

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

> Симулируйте транзакцию в Virtual Environment, чтобы заранее увидеть её результат, использование газа, изменения состояния и эмитируемые события до отправки.

Симуляции транзакций поддерживаются в Virtual Environments. Вы можете симулировать транзакции из UI Dashboard или программно через RPC.

<CardGroup cols={2}>
  <Card title="Simulator UI" href="/simulator-ui/overview" />

  <Card title="Simulation RPC" href="/node-rpc/rpc-reference?network=ethereum-mainnet&method=tenderly_simulateTransaction" />

  <Card title="Bundle Simulation RPC" href="/node-rpc/rpc-reference?network=ethereum-mainnet&method=tenderly_simulateBundle" />

  <Card title="Simulation API в Virtual Environments" href="/api-reference" />
</CardGroup>

## Симуляция из Dashboard

Чтобы симулировать транзакцию из Dashboard, перейдите в **Virtual Environments** и нажмите **Simulate** в левом меню. Симулированные транзакции видны только в панели Virtual Environment и не будут отображаться в [Public Explorer](/virtual-environments/explorer#public-explorer).
Симулятор можно использовать следующими способами:

* Отладка ошибок смарт-контрактов с помощью **Edit Source** для проверки вашего исправления.
* Вызов контрактов, чтобы получить представление о состояниях без сохранения транзакций в сети.
* Настройка нужных состояний контрактов с помощью **State Overrides** для оценки исполнения в условиях, которых нет и не должно быть в сети.
* Построение proof-of-concept транзакций для валидации тестовых сценариев.

## Симуляция через RPC

Транзакции в Virtual Environments также можно симулировать с помощью RPC-методов [`tenderly_simulate`](/node-rpc/rpc-reference?network=ethereum-mainnet\&method=tenderly_simulateTransaction) и [`tenderly_simulateBundle`](/node-rpc/rpc-reference?network=ethereum-mainnet\&method=tenderly_simulateBundle).

<Note>
  Мы рекомендуем интегрировать Simulation RPC, но можно использовать и [Simulation REST API](/api-reference).
</Note>

Пример кода ниже запускает симуляцию, которая использует переопределения состояния для минта DAI.

* Адрес отправителя: `0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2`.
* Адрес контракта DAI: `0x6b175474e89094c44da98b954eedeac495271d0f`
* Аргументы переопределения состояния: `DAI(0x6b175474e89094c44da98b954eedeac495271d0f).wards[0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2] = 1`

Изучите это руководство, чтобы узнать больше о [симуляции с переопределениями состояния](/simulations/state-overrides).

```bash showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
# simulate DAI minting by 0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2
# 0xf1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1 gets the minted DAI
# Simulated on the latest block

VIRTUAL_TESTNET_RPC=RPC_LINK_HERE

curl $VIRTUAL_TESTNET_RPC \
-X POST \
-H "Content-Type: application/json" \
-d \
'{
  "id":0,
  "jsonrpc":"2.0",
  "method":"tenderly_simulateTransaction",
  "params":[
    {
      "from":"0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
      "to":"0x6b175474e89094c44da98b954eedeac495271d0f",
      "gas":"0x7a1200",
      "data":"0x40c10f19000000000000000000000000f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f10000000000000000000000000000000000000000000000001bc16d674ec80000"
    },
    "latest",
    {
      "0x6b175474e89094c44da98b954eedeac495271d0f":{
        "stateDiff":{
          "0xedd7d04419e9c48ceb6055956cbb4e2091ae310313a4d1fa7cbcfe7561616e03":"0x0000000000000000000000000000000000000000000000000000000000000001"
        },
        "balance": "0xFFFFFF"
      }
    }
  ]
}'
```

## Симуляция транзакций через клиентские библиотеки

Для симуляции транзакций через Ethers и Viem см. следующий пример:

<Card title="Симуляция с Viem" href="" />
