Перейти к основному содержанию
В этом руководстве вы узнаете, как ориентироваться в файлах и структуре проекта Web3 Action, сгенерированного через Tenderly CLI. Узнайте, как использовать Tenderly CLI.

Обзор проекта и структура файлов корневого каталога

При запуске команды tenderly actions init Tenderly CLI создаст каталог actions root вместе с необходимыми файлами. По умолчанию каталог actions root называется actions. Однако вы можете указать другое имя во время инициализации. После инициализации имя корневого каталога всё ещё можно скорректировать, изменив имя папки и поле sources в файле tenderly.yaml. Пример структуры проекта Web3 Actions на TypeScript:
example
src
|--- actions 			# actions root directory, can be renamed
|--- |--- example.ts
|--- |--- package.json
|--- |--- tsconfig.json
|--- |--- node_modules
|         |--- @tenderly/actions
|         |--- typescript
|--- tenderly.yaml
|--- tenderly-schema.json
Каталог actions root содержит npm-проект для ваших Web3 Actions. Все соответствующие файлы, включая package.json, node_modules, исходные файлы и другие зависимости, библиотеки и ресурсы, содержатся в этой папке. Файлы по умолчанию:
  • actions/example.ts: по умолчанию этот файл содержит все Web3 Actions.
  • tenderly.yaml: это файл конфигурации, задающий настройки для всех Web3 Actions в проекте
  • tenderly-schema.json: автоматически сгенерированная JSON Schema, обеспечивающая валидацию в IDE и автодополнение для tenderly.yaml, не редактируйте tenderly-schema.json вручную
Размер сжатого каталога actions root, включая node_modules, должен быть менее 40 МБ. Убедитесь, что вы не превышаете этот лимит при установке дополнительных пакетов.

Структура файла tenderly.yaml

Файл tenderly.yaml содержит конфигурации и настройки для проекта Tenderly и всех Web3 Actions. Для целей этого руководства завершённый пример файла tenderly.yaml выглядит так:
example.yaml
$schema: ./tenderly-schema.json
account_id: 'tenderly-username'
project_slug: 'our-cool-project'
actions:
  our-org/our-cool-project:
    runtime: v2
    sources: actions
    specs:
      bestActionEver:
        description: Does the best thing ever
        function: very/organized/file:bestActionEver
        trigger:
          type: block
          block:
            network:
              - 3
            blocks: 10
Поле $schema автоматически добавляется командой tenderly actions init и указывает на сгенерированный файл tenderly-schema.json. IDE, поддерживающие JSON Schema (VS Code, JetBrains), используют его для предоставления автодополнения и inline-валидации при редактировании tenderly.yaml. Файл схемы также перегенерируется при каждом запуске tenderly actions init. Добавьте tenderly-schema.json в .gitignore, если вы предпочитаете не коммитить его.
Теперь давайте разберём, что делает каждый раздел этого файла и как его настроить. Для более лёгкого понимания представьте, что tenderly.yaml содержит два основных раздела:
  • Общая конфигурация: раздел, содержащий имя аккаунта и проекта, с которыми связан Web3 Action.
  • Конфигурация Web3 Actions: раздел, содержащий конфигурации самого Web3 Action, по сути информирующий Tenderly о том, когда его нужно запускать.

Общая конфигурация

Раздел общей конфигурации включает следующие пары ключ-значение:
example.yaml
account_id: 'johnDoe'
project_slug: 'our-cool-project'
  • account_id: ваше имя пользователя
  • project_slug: slug проекта, связанного с Web3 Action (опционально, можно оставить пустым)
Ознакомьтесь с этим руководством, чтобы узнать, как найти имя организации, имя пользователя и slug проекта.

Конфигурация Web3 Actions

Объект actions — это место, где вы начинаете определять свои Web3 Actions, включая настройки проекта, такие как runtime, расположение исходников и объявление самого Web3 Action.
example.yaml
account_id: 'johnDoe'
project_slug: ''
actions:
  my-username/my-cool-project: # in case it's an individual project
    # our-cool-org/our-cool-project:   # in case it's an org-level project
    runtime: v2
    sources: actions
    specs: ...

Указание проекта

Начните с указания составного ключа, уникально идентифицирующего проект в Tenderly.
  • username/project-slug: имя пользователя и slug проекта для проектов, принадлежащих индивидуальным разработчикам
  • org-name/project-slug: имя организации и slug проекта, если ваш проект принадлежит организации
Ознакомьтесь с этим руководством, чтобы узнать, как найти имя организации, имя пользователя и slug проекта.
Можно использовать один и тот же проект Web3 Actions для нескольких проектов, к которым у вас есть доступ в Tenderly Dashboard.

Настройка runtime

Далее необходимо указать версию runtime и каталог, содержащий код вашего Web3 Action. Эти данные используются Tenderly CLI для упаковки и развёртывания вашего кода в runtime Web3 Actions на инфраструктуре Tenderly. Следующие настройки обязательны:
  • runtime: версия runtime. В настоящее время мы поддерживаем v2, что соответствует Node 20.
  • sources: расположение исходных файлов Web3 Action. Значение должно быть путём к каталогу actions root относительно папки, содержащей файл tenderly.yaml. Оно должно совпадать с путём, указанным при выполнении команды init.
Пример: для показанной ниже структуры папок правильным значением sources будет web3-actions.
example
src
|-- web3-actions 			# actions root directory, can be renamed
|   |--- example.ts
|   |--- package.json
|   |--- tsconfig.json
|   |--- node_modules
|   	 |--- @tenderly
|        |--- /typescript
|-- tenderly.yaml
Если вы изменяете значение sources, каталог должен существовать по указанному пути, относительно actions root, и должен содержать ваши исходные файлы с функциями Web3 Action.

Определение настроек Web3 Actions

Отдельные Web3 Actions объявляются в объекте specs. Вы можете объявлять несколько Web3 Actions в одном файле tenderly.yaml. Каждый Web3 Action должен начинаться с ключа, представляющего имя action (bestActionEver). Имя action должно быть уникальным на уровне проекта и начинаться с буквы, за которой следуют буквы, цифры, дефисы или подчёркивания (шаблон: ^[a-zA-Z][a-zA-Z0-9_-]*$). Этот ключ определяет, как развёрнутый Web3 Action будет назван и представлен в Tenderly Dashboard. Ключ description также должен присутствовать. Описание обычно представляет собой одно-два предложения, описывающих, что делает Web3 Action.
example.yaml
specs:
  bestActionEver:
    description: Does the best thing ever!
Далее необходимо указать ключ function для связи с функцией action, которую вы хотите запускать. Исходный код Web3 Actions может быть разбит на несколько файлов или вложен в пользовательскую структуру каталогов. Файл tenderly.yaml позволяет удобно ссылаться на них. Например, функция bestActionEver, расположенная в actions/very/organized/file.ts, будет упоминаться в yaml так:
example.yaml
our-org/our-cool-project:
  runtime: v2
  sources: actions
  specs:
    bestActionEver:
      description: Does the best thing ever
      function: very/organized/file:bestActionEver
      trigger: ...
Следующий шаг — выбор и определение триггера для Web3 Action. Триггер — это событие, которое Tenderly отслеживает и выполняет Web3 Action при выполнении критерия. Для подробного справочника по триггерам изучите доступные типы триггеров Web3 Action. При определении триггера для Web3 Action первое, что нужно указать — это его тип. В примере ниже мы определяем тип триггера block. Это означает, что Web3 Action bestActionEver будет запускаться каждые 10 заминированных блоков в Rinkeby.
example.yaml
bestActionEver:
  description: Does the best thing ever
  function: very/organized/file:bestActionEver
  trigger:
    type: block
    block:
      network:
        - 3
      blocks: 10