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

> Начните создавать Web3 Actions с помощью Tenderly CLI шаг за шагом.

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

### Предварительные требования

У вас должны быть установлены и правильно настроены npm и Tenderly CLI на локальной машине. Инструкции по установке см. в [Шпаргалке по CLI Web3 Actions](/monitoring/web3-actions/references/cli-cheatsheet).

### Инициализация проекта Web3 Actions

Перейдите в папку в вашей системе, где вы хотите разместить код Web3 Action, и выполните следующую команду, чтобы инициализировать новый проект Web3 Actions:

```bash title="example" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
tenderly actions init
```

По умолчанию проект будет настроен на использование TypeScript. Если вы предпочитаете обычный JavaScript, добавьте флаг языка и укажите javascript:

```bash title="example" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
tenderly actions init --language javascript
```

Когда будет предложено, выберите существующий проект Tenderly из вашего аккаунта или создайте новый.

<Frame caption="Создание нового проекта Tenderly">
  <img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Screenshot_2022-08-04_at_10.50.42%20(1).png?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=5191970c6b2a63a0ee869429dbeaf725" alt="Creating a new Tenderly project" width="434" height="65" data-path="images/Screenshot_2022-08-04_at_10.50.42 (1).png" />
</Frame>

Далее введите имя корневого каталога, где будет храниться ваш код. Если вы хотите оставить по умолчанию actions, нажмите Enter или введите пользовательское имя каталога.

<Frame caption="Добавление имени каталога">
  <img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Screenshot_2022-08-04_at_10.51.55.png?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=bec5b2d4ea93181226d4bd4fb4b4a86a" alt="Adding a directory name" width="553" height="55" data-path="images/Screenshot_2022-08-04_at_10.51.55.png" />
</Frame>

Структура папок вашего проекта должна выглядеть так:

```bash title="example" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
/actions
|--- example.ts
|--- package.json
|--- package-lock.json
|--- tsconfig.json
|--- /node_modules
      |--- @tenderly
      |--- /typescript
tenderly.yaml
```

### Сборка и развёртывание Web3 Action

Вот шаги, которые нам нужно предпринять для сборки и развёртывания Web3 Action:

* Создать функцию action
* Настроить блочный триггер для запуска функции
* Развернуть код в Tenderly с помощью CLI

#### Создание функции action

Скопируйте следующий код в файл **example.ts**:

```tsx title="example.tsx" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}

export const blockHelloWorldFn: ActionFn = async (context: Context, event: Event) => {
  let blockEvent = event as BlockEvent;
  console.log('Block number is: ', blockEvent.blockNumber);
};
```

Это определяет и экспортирует функцию action. На следующем шаге мы настроим её так, чтобы она запускалась после каждых 10 заминированных блоков.

**Примечания:**

Обратите внимание, что функция асинхронна и принимает два аргумента: объект `Context` и объект `Event`.

* Объект `Context` обеспечивает доступ к Storage и Secrets. Подробнее об этом можно прочитать здесь.
* Аргумент `event` — объект, содержащий информацию о внешнем (on-chain) событии, вызвавшем action. Поскольку мы хотим запускать этот action по блочному событию, аргумент `event` будет иметь тип `BlockEvent`. Объект `BlockEvent` содержит информацию о заминированном блоке, такую как номер блока, хеш блока и временная метка блока.

#### Настройка триггера в **tenderly.yaml** для нового action

**Шаг 1**: замените содержимое файла `tenderly.yaml` на следующее:

```yaml title="example.yaml" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
account_id: ''
project_slug: ''
actions:
  username/project-slug:
    runtime: v1
    sources: actions
    specs:
      block-number-printer:
        description: Example Web3 Action that logs block number once it is mined.
        function: example:blockHelloWorldFn
        trigger:
          type: block
          block:
            network:
              - 1
            blocks: 10
```

**Шаг 2**: замените `username` и `project-slug` на ваше имя пользователя и slug вашего проекта.

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

**Примечания:**

Файл **tenderly.yaml** содержит спецификации триггеров для каждого action в проекте и связывает триггер с функцией action. Здесь мы создаём action под именем `block-number-printer`.

* Свойство `function` ссылается на функцию `blockHelloWorldFn` из файла **example.ts**.
* Этот action будет срабатывать на каждом 10-м заминированном блоке в сети 1, согласно свойству `trigger`.

Подробнее об [Внешних событиях и типах триггеров](/monitoring/web3-actions/references/functions-events-triggers#external-events-and-trigger-types).

#### Сборка и развёртывание actions

Вернитесь в терминал и выполните следующую команду, чтобы развернуть все определённые вами Web3 Actions. После успешного развёртывания actions появятся в UI Tenderly.

```bash title="example" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
tenderly actions deploy
```

<Note>
  **Обновление Web3 Actions без простоя**\ Чтобы **обновить** Web3 Action, просто отредактируйте исходный код
  и/или **tenderly.yaml** и выполните `tenderly actions deploy.`
</Note>

### Перед тем как продолжить

Помните:

* Команду `deploy` нужно запускать из папки, содержащей файл **tenderly.yaml**.
* Если вы инициализируете actions для нескольких проектов Tenderly в одном и том же каталоге, при запуске `deploy` вас попросят выбрать проект. Будут развёрнуты только actions, принадлежащие выбранному проекту.
* Все actions, принадлежащие одному проекту, развёртываются одновременно.
* Любой файл, на который ссылается ваш JavaScript/TypeScript, должен находиться в *actions root*. Не ссылайтесь на файлы вне этой папки.

### Ресурсы

* Подробнее о [функциях, событиях и триггерах Web3 Actions](/monitoring/web3-actions/references/functions-events-triggers).
* Подробнее о [Context, Storage и Secrets](/monitoring/web3-actions/references/context).
* Подробнее о [структуре проекта и конфигурации **tenderly.yaml**](/monitoring/web3-actions/references/project-structure).
