> ## 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.

# Структура проекта

> Узнайте о структуре проекта Web3 Action, генерируемого через CLI, и разберитесь с общей структурой файла конфигурации tenderly.yaml.

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

Узнайте, [как использовать Tenderly CLI](https://github.com/Tenderly/tenderly-cli).

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

При запуске команды `tenderly actions init` Tenderly CLI создаст каталог *actions root* вместе с необходимыми файлами. По умолчанию каталог *actions root* называется *actions*.

Однако вы можете указать другое имя во время инициализации. После инициализации имя корневого каталога всё ещё можно скорректировать, изменив имя папки и поле `sources` в файле `tenderly.yaml`.

**Пример** структуры проекта Web3 Actions на TypeScript:

```bash title="example" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
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` вручную

<Warning>
  Размер сжатого каталога actions root, включая `node_modules`, должен быть менее 40 МБ. Убедитесь,
  что вы не превышаете этот лимит при установке дополнительных пакетов.
</Warning>

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

Файл `tenderly.yaml` содержит конфигурации и настройки для проекта Tenderly и всех Web3 Actions.

Для целей этого руководства завершённый пример файла `tenderly.yaml` выглядит так:

```yaml title="example.yaml" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
$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
```

<Note>
  Поле `$schema` автоматически добавляется командой `tenderly actions init` и указывает на сгенерированный
  файл `tenderly-schema.json`. IDE, поддерживающие JSON Schema (VS Code, JetBrains), используют его для предоставления
  автодополнения и inline-валидации при редактировании `tenderly.yaml`. Файл схемы также
  перегенерируется при каждом запуске `tenderly actions init`. Добавьте `tenderly-schema.json` в
  `.gitignore`, если вы предпочитаете не коммитить его.
</Note>

Теперь давайте разберём, что делает каждый раздел этого файла и как его настроить.

Для более лёгкого понимания представьте, что `tenderly.yaml` содержит два основных раздела:

* **Общая конфигурация**: раздел, содержащий имя аккаунта и проекта, с которыми связан Web3 Action.
* **Конфигурация Web3 Actions**: раздел, содержащий конфигурации самого Web3 Action, по сути информирующий Tenderly о том, когда его нужно запускать.

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

Раздел общей конфигурации включает следующие пары ключ-значение:

```yaml title="example.yaml" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
account_id: 'johnDoe'
project_slug: 'our-cool-project'
```

* `account_id`: ваше имя пользователя
* `project_slug`: slug проекта, связанного с Web3 Action (опционально, можно оставить пустым)

Ознакомьтесь с этим руководством, чтобы узнать, как [найти имя организации, имя пользователя и slug проекта](/platform/account/projects/slug).

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

Объект `actions` — это место, где вы начинаете определять свои Web3 Actions, включая настройки проекта, такие как runtime, расположение исходников и объявление самого Web3 Action.

```yaml title="example.yaml" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
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 проекта](/platform/account/projects/slug).

<Note>
  Можно использовать один и тот же проект Web3 Actions для нескольких проектов, к которым у вас есть доступ в
  Tenderly Dashboard.
</Note>

### Настройка 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`.

```bash title="example" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
src
|-- web3-actions 			# actions root directory, can be renamed
|   |--- example.ts
|   |--- package.json
|   |--- tsconfig.json
|   |--- node_modules
|   	 |--- @tenderly
|        |--- /typescript
|-- tenderly.yaml
```

<Note>
  Если вы изменяете значение `sources`, каталог должен существовать по указанному пути, относительно
  *actions root*, и должен содержать ваши исходные файлы с функциями Web3 Action.
</Note>

### Определение настроек 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.

```yaml title="example.yaml" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
specs:
  bestActionEver:
    description: Does the best thing ever!
```

Далее необходимо указать ключ `function` для связи с функцией action, которую вы хотите запускать. Исходный код Web3 Actions может быть разбит на несколько файлов или вложен в пользовательскую структуру каталогов. Файл `tenderly.yaml` позволяет удобно ссылаться на них.

Например, функция `bestActionEver`, расположенная в `actions/very/organized/file.ts`, будет упоминаться в yaml так:

```yaml title="example.yaml" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
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](/monitoring/web3-actions/references/functions-events-triggers).

При определении **триггера** для Web3 Action первое, что нужно указать — это его тип. В примере ниже мы определяем тип триггера *block*. Это означает, что Web3 Action `bestActionEver` будет запускаться каждые 10 заминированных блоков в Rinkeby.

```yaml title="example.yaml" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
bestActionEver:
  description: Does the best thing ever
  function: very/organized/file:bestActionEver
  trigger:
    type: block
    block:
      network:
        - 3
      blocks: 10
```
