Перейти к основному содержанию
Tenderly поддерживает симуляции одиночных транзакций через RPC и API. Симуляции выполняются на актуальном состоянии выбранной сети. Dapp’ы и кошельки могут использовать одиночные симуляции, чтобы дать пользователям возможность выполнить сухой прогон транзакций перед тем, как рисковать реальными активами. Это даёт им предпросмотр выполнения транзакции вместе с подробными изменениями балансов и активов. Предпросмотр транзакций может помочь пользователям укрепить доверие к dapp’ам, одобрять только успешные транзакции и предотвращать дорогостоящие сбои.

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

Node RPC позволяет читать данные из блокчейна и отправлять транзакции. Но вы также можете симулировать транзакции в Node. Преимущество симуляции через RPC заключается в том, что вы можете выполнять все эти операции через один RPC URL.
Симуляции через RPC или API доступны только в поддерживаемых сетях. Ознакомьтесь со списком поддерживаемых сетей.
Получите RPC URL и ключ доступа из Dashboard. Перейдите в Node > Copy HTTPS URL нужной вам сети.
example
https://mainnet.gateway.tenderly.co/$TENDERLY_NODE_ACCESS_KEY
Чтобы симулировать одиночную транзакцию через RPC, вызовите метод tenderly_simulateTransaction. См. справочник RPC. Пример
request
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_simulateTransaction",
    "params": [
      {
        "from": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
        "to": "0x6b175474e89094c44da98b954eedeac495271d0f",
        "gas": "0x7a1200",
        "value": "0x0",
        "data": "0x095ea7b3000000000000000000000000f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1000000000000000000000000000000000000000000000000000000000000012b"
      },
      "0xfc497b"
    ]
  }'

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

Используйте эндпоинт simulate API, чтобы симулировать одну транзакцию с разными параметрами.
Для использования симуляций в виртуальных окружениях мы рекомендуем Simulate RPC и Bundle Simulate RPC. Иначе можно использовать Simulation API виртуальных окружений.
URL должен содержать ваш account slug и project slug. Следуйте этому краткому руководству, чтобы найти slug’и.
Simulation API endpoint on public network
https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/simulate
Simulation API endpoint on a Virtual Environment
https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/vnets/{vnetId}/transactions/simulate
Вам также необходимо получить токен доступа API, который отправляется в заголовках. Узнайте, как сгенерировать ключ доступа API здесь.

Тело запроса

Отправьте POST-запрос на эндпоинт API. Полные сведения о теле запроса см. в Справочнике API. Симулируемое тело запроса похоже на JSON-RPC вызов eth_call. Следующие поля обязательны:
  • network_id (string): ID сети, в которой вы хотите запустить симуляцию.
  • block_number (number): «latest» или номер блока для симуляции.
  • to (string): адрес получателя транзакции.
  • from (string): адрес, инициирующий транзакцию.
  • input (string): закодированные данные вызова метода контракта.
  • gas (number): количество газа, предоставленного для симуляции.
Вы можете указать любой адрес отправителя в поле from. Поскольку Tenderly симулирует неподписанные транзакции, вам не нужно владеть приватным ключом аккаунта, чтобы симулировать транзакции от имени конкретного отправителя.
Вы также можете указать simulation_type, который может принимать значения full, quick или ABI. Это поле необязательно, поскольку по умолчанию установлено full. Узнайте больше о режимах симуляции. При выполнении запросов к API добавьте заголовок X-Access-Key, значение которого — токен доступа. Пример Обязательно храните ключ доступа безопасно в файле .env.
request.ts

dotenv.config();

const simulateTransaction = async () => {
  const { TENDERLY_ACCOUNT_SLUG, TENDERLY_PROJECT_SLUG, TENDERLY_ACCESS_KEY } = process.env;

  const simulation = await axios.post(
    `https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/simulate`,
    {
      network_id: '1',
      block_number: 16533883,
      from: '0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2',
      to: '0x6b175474e89094c44da98b954eedeac495271d0f',
      gas: 8000000,
      gas_price: 0,
      value: 0,
      input: '0x095ea7b3000000000000000000000000f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1000000000000000000000000000000000000000000000000000000000000012b',
      simulation_type: 'quick',
    },
    {
      headers: {
        'X-Access-Key': TENDERLY_ACCESS_KEY as string,
      },
    },
  );

  console.log(simulation.data);
};

simulateTransaction();

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

Что дальше

Пакетные симуляции

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