https://dashboard.tenderly.co/simulator/new?draftId=<id>
Поделиться draft-ссылкой из dashboard
- Соберите симуляцию в Simulator: выберите сеть, добавьте один или несколько вызовов, задайте переопределения, примените правки исходного кода.
- Нажмите Share draft в заголовке страницы. Draft сохраняется, а ссылка копируется в буфер обмена.

Кнопка Share draft в заголовке Simulator сохраняет текущую настройку и копирует ссылку, которая её открывает.
Что происходит при открытии draft-ссылки
Dashboard выполняет один запрос за draft, и дальше в зависимости от ответа:- Участник проекта, в котором создан draft. Dashboard перенаправляет в Simulator этого проекта с предзаполненной формой, без дополнительных запросов.
- Общий draft (создан через API с
shared: true). Сначала открывается диалог Select Project; draft открывается в проекте, который выберет получатель. - Недействительный id, истёкший draft или нет доступа. Все три случая дают одинаковый ответ, чтобы id draft’ов нельзя было перебирать. Получатель видит сообщение “This draft link is invalid, has expired, or you don’t have access to it.” и попадает на главную страницу dashboard.
- Пользователь не авторизован. Получатель сначала входит в систему, затем сценарий продолжается с той же ссылкой.
- В Simulator есть несохранённые правки. Открытие draft заменяет текущую форму, поэтому dashboard запрашивает подтверждение перед тем, как отбросить правки.

Общий draft не привязан к проекту, поэтому получатель выбирает, где его открыть.
Частичное восстановление
Каждый вызов в draft восстанавливается независимо, поэтому один проблемный вызов не отклоняет весь draft. Закрываемый баннер перечисляет, что не удалось восстановить, по каждому вызову:
Отсутствие баннера означает, что всё восстановлено. Некорректная полезная нагрузка или сеть, не включённая в проекте, отклоняют draft целиком: получатель видит ошибку и пустую форму.

Баннер восстановления называет вызовы, требующие внимания после открытия draft.
Создание draft-ссылки из CI или инструментов
Создайте draft через drafts API, затем подставьте возвращённый id в ссылку. Запросы аутентифицируются access key; вызывающий должен быть участником проекта из URL.POST https://api.tenderly.co/api/v2/account/{account}/project/{project}/simulation-drafts (API reference)
Ответ:
{ "resource_id": "<uuid>" }.
Чтение draft по id
GET https://api.tenderly.co/api/v2/account/{account}/project/{project}/simulation-drafts/{id} (API reference)
Проект в URL: собственный проект вызывающего (любой проект, который он может просматривать). Доступ определяется видимостью draft:
- Draft, ограниченный проектом, возвращает
{ "payload": {…}, "account_id": "…", "project_id": "…" }, если вызывающий может просматривать исходный проект draft. - Общий draft возвращает
{ "payload": {…} }без сведений об источнике. - Всё остальное (неизвестный id, истёкший draft, нет доступа к исходному проекту) возвращает
404со"slug": "resource_not_found".
GET draft по id из скопированной ссылки. Ответ содержит полезную нагрузку, которую принимает dashboard, включая формы stateOverrides, customSource и fundAddress.
Полезная нагрузка draft
Поля row
Обязательно только полеcontractAddress. Опускайте всё, что вам не нужно. Пропущенные поля сохраняют значения формы по умолчанию, а неизвестные лишние поля игнорируются.
Контракт и функция
Параметры транзакции
Выбор блока
О том, как выбор блока и индекс транзакции работают в UI, см. Параметры симуляции.
Параметры L2
Эти поля применимы только к сетям OP-stack и Boba.Переопределения
Пополнение адресов и изменённый исходный код
Валидация и ошибки
Создание draft:
Открытие draft на уровне полезной нагрузки работает по принципу “всё или ничего”: неверный
v, отсутствие элементов в rows, нестроковый contractAddress или любое поле row неверного типа отклоняют весь draft с сообщением “This draft link is invalid or corrupted”. Проблемы отдельных вызовов, зависящие от живых данных (загрузка контракта, сопоставление функции, компиляция исходного кода, слот токена), деградируют по отдельности, как описано в разделе Частичное восстановление.
Ограничения
- Полезная нагрузка ограничена 256 КБ на draft; лимит обеспечивает API.
- Draft’ы автоматически истекают. Истёкший draft возвращает
404из API и сообщение “invalid, has expired, or you don’t have access” в dashboard. - Для открытия draft-ссылки требуется аккаунт Tenderly. Общие draft’ы (
shared: true) доступны любому авторизованному пользователю; draft’ы, ограниченные проектом, только участникам исходного проекта. - ABI контракта загружается при открытии ссылки. Если его не удалось получить (неверифицированный контракт), вызовы в decoded-режиме открываются с заполненным адресом, но без выбранной функции. Raw-режим от этого не зависит.
Устаревшие ссылки ?draft=
До появления серверных draft’ов dashboard кодировал одиночный вызов прямо в URL:
https://dashboard.tenderly.co/<org>/<project>/simulator/new?draft=<value>
<value>: полезная нагрузка версии 1 ({ "v": 1, "network": {…}, "row": {…} }, один row вместо rows) в виде UTF-8 JSON, затем base64url (+ в -, / в _, заполнение = удалено). Существующие ссылки продолжают открываться. Объект row принимает поля row, описанные выше, кроме fundAddress, customSource и contractSourceEdited, а весь URL должен оставаться короче примерно 2000 символов. Dashboard больше не создаёт этот формат; для новых интеграций используйте drafts API.
О полях формы, которые заполняет draft, см. Параметры симуляции. Чтобы сохранить изменённое состояние как постоянное окружение, а не одноразовую симуляцию, используйте Virtual Environments.