Перейти к основному содержанию
Симуляционные пакеты (Simulation Bundles) позволяют вам симулировать несколько транзакций последовательно. Например, чтобы установить определённые условия перед симуляцией нужной транзакции, вам сначала нужно выполнить несколько других транзакций. Как Simulation API, так и Simulation RPC поддерживают пакетные симуляции. Эндпоинты получают массив транзакций, которые симулируются одна за другой в пределах одного блока.

Пакетные симуляции через RPC

Node RPC позволяет читать данные из блокчейна и отправлять транзакции. Но вы также можете симулировать пакетные транзакции в Node через один RPC URL. Симуляции через RPC доступны только в поддерживаемых сетях. Если ваша сеть не поддерживается в Node, вместо этого запускайте пакетные симуляции через Simulation API. Получите RPC URL из Dashboard. Перейдите в Node > Copy HTTPS URL нужной вам сети.
example
https://mainnet.gateway.tenderly.co/$TENDERLY_NODE_ACCESS_KEY
Чтобы симулировать пакетные транзакции через RPC, вызовите метод tenderly_simulateBundle. Этот пользовательский метод позволяет симулировать несколько транзакций, передавая их в виде массива. См. справочник RPC.
Транзакции симулируются одна за другой в одном блоке.
Пример
example
curl https://mainnet.gateway.tenderly.co/$TENDERLY_NODE_ACCESS_KEY \
  -X POST \
  -H "Content-Type: application/json" \
  -d \
  '{
    "id": 0,
    "jsonrpc": "2.0",
    "method": "tenderly_simulateBundle",
    "params": [
      [
        {
          "from": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
          "to": "0x6b175474e89094c44da98b954eedeac495271d0f",
          "data": "0x40c10f19000000000000000000000000e58b9ee93700a616b50509c8292977fa7a0f8ce10000000000000000000000000000000000000000000000001bc16d674ec80000"
        },
        {
          "from": "0xe58b9ee93700a616b50509c8292977fa7a0f8ce1",
          "to": "0x6b175474e89094c44da98b954eedeac495271d0f",
          "gas": "0x7a1200",
          "data": "0x095ea7b3000000000000000000000000f7ddedc66b1d482e5c38e4730b3357d32411e5dd0000000000000000000000000000000000000000000000000de0b6b3a7640000"
        },
        {
          "from": "0xf7ddedc66b1d482e5c38e4730b3357d32411e5dd",
          "to": "0x6b175474e89094c44da98b954eedeac495271d0f",
          "gas": "0x7a1200",
          "data": "0x23b872dd000000000000000000000000e58b9ee93700a616b50509c8292977fa7a0f8ce1000000000000000000000000bd8daa414fda8a8a129f7035e7496759c5af8570000000000000000000000000000000000000000000000000006a94d74f430000"
        }
      ],
      "latest",
      {
        "0x6b175474e89094c44da98b954eedeac495271d0f": {
          "stateDiff": {
            "0xedd7d04419e9c48ceb6055956cbb4e2091ae310313a4d1fa7cbcfe7561616e03": "0x0000000000000000000000000000000000000000000000000000000000000001"
          }
        }
      }
    ]
  }'

Пакетные симуляции через API

Используйте эндпоинт API simulate-bundle, чтобы симулировать несколько последовательных транзакций одновременно. См. справочник API.
example
https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/simulate-bundle
Результат симуляции показывает генерируемые события и изменения состояния, которые может вызвать транзакция, если вы отправите её в блокчейн. В случае сбоя транзакции произойдёт ранний возврат со всеми симуляциями до точки сбоя. Пример
curl --request POST \
  --url https://api.tenderly.co/api/v1/account/me/project/project/simulate-bundle \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header "X-Access-Key: $TENDERLY_ACCESS_KEY" \
  --data '{
  "simulations": [
    {
      "network_id": "1",
      "save": true,
      "save_if_fails": true,
      "simulation_type": "full",
      "from": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
      "to": "0x6b175474e89094c44da98b954eedeac495271d0f",
      "input": "0x40c10f19000000000000000000000000e58b9ee93700a616b50509c8292977fa7a0f8ce10000000000000000000000000000000000000000000000001bc16d674ec80000",
      "state_objects": {
        "0x6b175474e89094c44da98b954eedeac495271d0f": {
          "storage": {
            "0xedd7d04419e9c48ceb6055956cbb4e2091ae310313a4d1fa7cbcfe7561616e03": "0x0000000000000000000000000000000000000000000000000000000000000001"
          }
        }
      }
    },
    {
      "network_id": "1",
      "save": true,
      "save_if_fails": true,
      "simulation_type": "full",
      "from": "0xe58b9ee93700a616b50509c8292977fa7a0f8ce1",
      "to": "0x6b175474e89094c44da98b954eedeac495271d0f",
      "input": "0x095ea7b3000000000000000000000000f7ddedc66b1d482e5c38e4730b3357d32411e5dd0000000000000000000000000000000000000000000000000de0b6b3a7640000"
    },
    {
      "network_id": "1",
      "save": true,
      "save_if_fails": true,
      "simulation_type": "full",
      "from": "0xf7ddedc66b1d482e5c38e4730b3357d32411e5dd",
      "to": "0x6b175474e89094c44da98b954eedeac495271d0f",
      "input": "0x23b872dd000000000000000000000000e58b9ee93700a616b50509c8292977fa7a0f8ce1000000000000000000000000bd8daa414fda8a8a129f7035e7496759c5af8570000000000000000000000000000000000000000000000000006a94d74f430000"
    }
  ]
}'

Изучите сценарии использования

Что дальше

Одиночные симуляции

Симуляция через SDK