# Руководство для операторов

В этом руководстве описаны шаги, необходимые для настройки и регистрации ноды для DODOchain MACH AVS (тестнет/мейннет).

### Минимальные системные требования&#x20;

* 4 ПРОЦЕССОРА
* 16 ГБ памяти
* 50 ГБ SSD
* Ubuntu 22.04 LTS
* [Docker](https://docs.docker.com/engine/install/) v24 и выше
* EigenLayer CLI

### Минимальные требования для стейкинга

💡 Для удобства подключения операторов мы установим минимальное значение стейка на уровне 0.

### Поддерживаемая стратегия токенов&#x20;

Эфир Beacon Chain и все LST, поддерживаемые EigenLayer, поддерживаются нашей AVS.

## Настройка оператора&#x20;

#### Генерация ключей и пополнение кошелька

1. Следуйте [руководству EigenLayer](https://docs.eigenlayer.xyz/eigenlayer/operator-guides/operator-installation#installation-1) и установите EigenLayer CLI
2. Сгенерируйте пары ключей ECDSA и BLS с помощью следующей команды

```
eigenlayer operator keys create --key-type ecdsa [keyname]
eigenlayer operator keys create --key-type bls [keyname]
```

#### 💡 Пожалуйста, убедитесь, что вы сохранили резервные копии своих приватных ключей в безопасном месте. По умолчанию зашифрованные ключи будут храниться в \~/.eigenlayer/operator\_keys/

1. Внесите не менее 0,3 ETH на сгенерированный ECDSA-адрес. Он потребуется для регистрации ноды на последующих этапах.
2. Пожалуйста, отправьте ECDSA-адрес через форму заинтересованности MACH AVS <https://forms.gle/3A6xNWwRf9ip9CnN9>.

#### Зарегистрируйтесь в EigenLayer в качестве оператора&#x20;

#### 💡 Вы можете пропустить следующие шаги, если вы уже являетесь зарегистрированным оператором в тестнете и мейннете EigenLayer.

#### Вам нужно будет сделать это один раз для тестнета и один раз для мейннета.

1. Создайте конфигурационные файлы, необходимые для регистрации оператора, с помощью следующих команд. Следуйте пошаговым инструкциям. После завершения будут созданы файлы `operator.yaml` и `metadata.json`.

```
eigenlayer operator config create
```

2. Отредактируйте файл `metadata.json` и заполните данные о своем операторе.

<pre><code><strong>{
</strong>  "название": "пример оператора",
  "вебсайт": "&#x3C;https://example.com/>",
  "описание": "пример описания",
  "логотип": "&#x3C;https://example.com/logo.png>",
  "twitter": "&#x3C;https://twitter.com/example>"
}
</code></pre>

3. Загрузите файл `metadata.json` на публичный URL. Затем обновите файл `operator.yaml`, указав в нем URL (`metadata_url`). Если вам нужен хостинг для размещения метаданных, вы можете загрузить [gist](https://gist.github.com/) метаданных и получить `raw` URL.
4. Если вы впервые регистрируете этот оператор, выполните следующую команду для регистрации и обновления оператора

```
eigenlayer operator register operator.yaml
```

После успешной регистрации вы должны увидеть&#x20;

`✅ Operator is registered successfully to EigenLayer`

Если в будущем вам понадобится отредактировать метаданные, просто обновите файл metadata.json и выполните следующую команду

```
eigenlayer operator update operator.yaml
```

5. После того, как ваш оператор будет зарегистрирован, он будет отражен на [странице оператора EigenLayer](https://holesky.eigenlayer.xyz/operator).

Тестнет: <https://holesky.eigenlayer.xyz/operator>

Мейннет: <https://app.eigenlayer.xyz/operator>

<figure><img src="https://3717563343-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1soFQfuVBq5slIkoQQDX%2Fuploads%2FHBGV4Q9JVcz7L55E55Zw%2Fimage.png?alt=media&#x26;token=d2c0e251-fb46-4747-a24b-e0c1029ddf75" alt=""><figcaption></figcaption></figure>

Вы также можете проверить статус регистрации оператора с помощью следующей команды.

```
eigenlayer operator status operator.yaml
```

## Присоединение к MACH AVS&#x20;

💡 **Учебные ролики** DODOchain Mach AVS первоначально будут запущены в режиме разрешительного списка операторов. Заинтересованные операторы могут зарегистрировать свой интерес с помощью этой формы:&#x20;

<https://forms.gle/LmPABTNQcwJhw4UB7>.

### Настройка Mach AVS&#x20;

**Клонирование репозитория Mach AVS**&#x20;

Выполните следующую команду для [клонирования репозитория оператора MACH AVS](https://github.com/alt-research/mach-avs-operator-setup) и изменить каталог на DODOchain MACH AVS mainnet config.

{% hint style="info" %}
Первоначально DODOchain MACH mainnet AVS будет обслуживать тестовую сеть DODOchain. Как только DODOchain перейдет в mainnet, DODOchain MACH mainnet AVS переключится на DODOchain mainnet.
{% endhint %}

```
git clone https://github.com/alt-research/mach-avs-operator-setup.git
cd mach-avs-operator-setup/ethereum/mach-avs/dodochain-testnet
```

### Подключение и отключение от MACH AVS&#x20;

Для подключения и отключения скопируйте следующие env

```
cp .env.opt-example .env.opt
```

Обновите разделы `TODO` в `.env.opt`

```
###############################################################################
####### TODO: Операторы, пожалуйста, обновите следующие значения для вашей ноды ##############
###############################################################################
# TODO: Установите url метаданных для оператора
METADATA_URI=https://path/to/metadata.json

# TODO: Операторы должны обновить это значение в соответствии с их собственными путями
USER_HOME=${HOME}
EIGENLAYER_HOME=${USER_HOME}/.eigenlayer

# TODO: Операторы должны обновить это для своих собственных ключей
NODE_ECDSA_KEY_FILE_HOST=${EIGENLAYER_HOME}/operator_keys/opr.ecdsa.key.json
NODE_BLS_KEY_FILE_HOST=${EIGENLAYER_HOME}/operator_keys/opr.bls.key.json

# TODO: Операторам необходимо добавить пароль для расшифровки вышеуказанных ключей.
# Если ваш пароль содержит пробел, / или $, пожалуйста, используйте одинарную кавычку, чтобы 
# инкапсулировать ваш пароль, например, 'mypassword /$'
OPERATOR_BLS_KEY_PASSWORD=
OPERATOR_ECDSA_KEY_PASSWORD=
```

**Чтобы подключиться**

💡 Перед тем как подключиться к MACH AVS, убедитесь, что

1. У вас есть необходимая инфраструктура (например, облачный хостинг) для поддержания работоспособности оператора. Операторы AVS, не справляющиеся со своими обязанностями, могут быть исключены из MACH AVS.
2. Вы уже были внесены в вайтлист операторов MACH AVS.

```
./run.sh opt-in 
```

**Если вы больше не хотите запускать AVS, вы можете отказаться от участия, запустив**

```
./run.sh opt-out 
```

💡 Обновление EigenLayer AVS и страницы оператора может занять несколько минут. Это автоматический процесс.

#### Запуск MACH AVS

**Создайте файл среды**

```
cp .env.example .env
```

#### Настройка оператора MACH AVS&#x20;

Обновите секции `TODO` в файле `.env`

**💡 Путь по умолчанию, где хранятся сгенерированные ключи \~/.eigenlayer/operator\_keys/**

```
###############################################################################
####### TODO: Операторы, пожалуйста, обновите следующие значения для вашей ноды ##############
###############################################################################
# TODO: Операторы должны обновить эти значения для своих путей
USER_HOME=${HOME}
EIGENLAYER_HOME=${USER_HOME}/.eigenlayer

# TODO: Операторам необходимо установить адрес ecdsa.
# который можно получить из `eigenlayer operator keys list`, адрес находится в `Key Type: ECDSA`
OPERATOR_ECDSA_ADDRESS=

# TODO: Операторы должны обновить этот адрес до своих собственных ключей
NODE_BLS_KEY_FILE_HOST=${EIGENLAYER_HOME}/operator_keys/opr.bls.key.json

# TODO: Операторам необходимо добавить пароль для расшифровки вышеуказанных ключей
# Если ваш пароль содержит пробел, / или $, пожалуйста, используйте одинарную кавычку, чтобы 
# инкапсулировать ваш пароль, например, 'mypassword /$'
OPERATOR_BLS_KEY_PASSWORD=
```

#### Настройка конечной точки роллапа

Мы предварительно настроили `mach-config.toml` с RPC, размещенным на AltLayer. В качестве альтернативы вы можете обратиться к членам команды AltLayer в рабочей группе Slack за инструкциями по размещению собственной RPC-ноды.

**Если вы столкнулись с ограничениями скорости на публичных конечных точках, мы рекомендуем вам использовать управляемые службы RPC, такие как** [**Infura**](https://www.notion.so/897c331db50947f480b9e45c22f410e5?pvs=21)**,** [**Alchemy**](https://www.alchemy.com/)**, или** [**QuickNode**](https://www.quicknode.com/)**.**

Если вы хотите обновить L1 или Rollup RPC,

1. Перейдите в `/chain-config/mach-config.toml`
2. Найдите `fetcher` и `l1-fetcher`. Найдите переменную `url` и `l1_url`. Замените значение на свою конечную точку.

### Запуск MACH AVS

Чтобы запустить MACH AVS, выполните docker compose.

```
docker compose pull --policy always
docker compose pull
docker compose up -d
```

Чтобы снести контейнер

```
docker compose down
```

Если вы хотите включить мониторинг, выполните следующие действия

```
docker compose --profile monitoring up
```

Если вы хотите остановить мониторинг:

```
docker compose --profile monitoring down
```

При использовании профиля `monitoring` вы можете добавить `grafana` для мониторинга сервиса, порт по умолчанию `1300`, доступ осуществляется через `localhost:13000`.

### Схема Helm

Чтобы запустить MACH AVS в кластере Kubernetes, вы можете использовать образец схемы Helm, доступный в репозитории MACH AVS Operator Setup. Вы можете найти эту схему по следующей ссылке: [MACH Operator Helm Chart](https://github.com/alt-research/mach-avs-operator-setup/tree/master/helm-charts/mach-operator).

### Столкнулись с проблемами?

Пожалуйста, свяжитесь с нами через Slack.

### Часто задаваемые вопросы

1. **Как узнать, запущен ли мой оператор?**

Для начала проверьте, запущен ли ваш докер-контейнер оператора, выполнив команду `docker compose ps`.

```
docker compose ps    
NAME                         IMAGE                                          COMMAND                  SERVICE                  CREATED          STATUS          PORTS
mach-avs-operator-node       public.ecr.aws/altlayer/mach-operator:latest   "operator"               mach-operator-node       33 seconds ago   Up 32 seconds   0.0.0.0:9092->9092/tcp, :::9092->9092/tcp
mach-avs-operator-verifier   public.ecr.aws/altlayer/mach:latest            "/usr/local/bin/op-m…"   mach-operator-verifier   33 seconds ago   Up 32 seconds   0.0.0.0:9094->9094/tcp, :::9094->9094/tcp, 9715/tcp
mach-avs-reverse-proxy-1     nginx:latest                                   "/docker-entrypoint.…"   reverse-proxy            33 seconds ago   Up 32 seconds   80/tcp, 0.0.0.0:9091->9091/tcp, :::9091->9091/tcp
```

Далее вы можете проверить логи, чтобы узнать, были ли запущены сервисы или нет

```
2024-04-01T17:04:29.613Z        INFO    logging/zap_logger.go:49        Start operator  {"address": "0xAD6B95793DD4D2b8e184FB4666D1cfb14871A035"}
2024-04-01T17:04:29.956Z        INFO    logging/zap_logger.go:69        Starting operator.
2024-04-01T17:04:29.956Z        INFO    logging/zap_logger.go:69        Starting node api server at address 0.0.0.0:9091
2024-04-01T17:04:29.956Z        INFO    logging/zap_logger.go:69        Starting metrics server at port 0.0.0.0:9092
2024-04-01T17:04:29.956Z        INFO    logging/zap_logger.go:49        start rpc server for got alert
2024-04-01T17:04:29.957Z        INFO    logging/zap_logger.go:49        node api server running {"addr": "0.0.0.0:9091"}
```

Наконец, чтобы определить, валидирует ли ваша AVS целевой роллап, можно просмотреть логи верификационного контейнера на предмет активности валидации блоков.

```
docker logs <name of container> 
```

```

[2024-04-01T17:06:28Z INFO  actor::scheduler] Validate block #166853(0x7ddde84c28da088639bb699a8982e206ca4aea4031fe37b2aa9c69fd23bac940) passed
[2024-04-01T17:06:32Z INFO  actor::block-fetcher] Finalized block #166666(0x747828ae5886e1c254462ab586a32ac2fd69f93c06af8b339819160997de3879)
[2024-04-01T17:06:32Z INFO  actor::block-fetcher] Latest block #166853(0x7ddde84c28da088639bb699a8982e206ca4aea4031fe37b2aa9c69fd23bac940)
[2024-04-01T17:06:36Z INFO  actor::block-fetcher] Finalized block #166666(0x747828ae5886e1c254462ab586a32ac2fd69f93c06af8b339819160997de3879)
[2024-04-01T17:06:37Z INFO  actor::block-fetcher] Latest block #166854(0x6f3029b754134107c4e341e1d37a4be99709b1781ba281a7d8483b5dc63b1dbb)
[2024-04-01T17:06:37Z INFO  actor::scheduler] Pre validate block #166854(0x6f3029b754134107c4e341e1d37a4be99709b1781ba281a7d8483b5dc63b1dbb) passed
[2024-04-01T17:06:37Z INFO  actor::scheduler] There are 1 block validation tasks waiting for result
[2024-04-01T17:06:37Z INFO  actor::scheduler] Validate block #166854(0x6f3029b754134107c4e341e1d37a4be99709b1781ba281a7d8483b5dc63b1dbb) passed
[2024-04-01T17:06:41Z INFO  actor::block-fetcher] Finalized block #166666(0x747828ae5886e1c254462ab586a32ac2fd69f93c06af8b339819160997de3879)
[2024-04-01T17:06:41Z INFO  actor::block-fetcher] Latest block #166854(0x6f3029b754134107c4e341e1d37a4be99709b1781ba281a7d8483b5dc63b1dbb)
[2024-04-01T17:06:46Z INFO  actor::block-fetcher] Finalized block #166666(0x747828ae5886e1c254462ab586a32ac2fd69f93c06af8b339819160997de3879)
[2024-04-01T17:06:46Z INFO  actor::block-fetcher] Latest block #166855(0x07fbc09cf59e93b965c471153d4fabbff38ed0f72a7a2da43a141861b500fea1)
[2024-04-01T17:06:46Z INFO  actor::scheduler] Pre validate block #166855(0x07fbc09cf59e93b965c471153d4fabbff38ed0f72a7a2da43a141861b500fea1) passed
[2024-04-01T17:06:46Z INFO  actor::scheduler] There are 1 block validation tasks waiting for result
[2024-04-01T17:06:46Z INFO  actor::scheduler] Validate block #166855(0x07fbc09cf59e93b965c471153d4fabbff38ed0f72a7a2da43a141861b500fea1) passed
```

2. **Кто управляет агрегатором и выполняет агрегацию подписей BLS?**

AltLayer предоставит агрегатор, к которому ваш MACH AVS сможет подключиться и отправить подписи для агрегации. Конечная точка агрегатора предварительно настроена в конфигурационном файле.

3. **Как узнать, что при регистрации я не удовлетворяю требованиям минимального стейкинга?**&#x20;

Выполнение будет отменено:

`execution reverted: StakeRegistry.registerOperator: Operator does not meet minimum stake`

```
2024-04-02T19:05:40.535Z	INFO	logging/zap_logger.go:49	registering operator with the AVS's registry coordinator	{"avs-service-manager": "0xAE9a4497dee2540DaF489BeddB0706128a99ec63", "operator": "0x44220295991E4Fe4f3A4C5FE04E96B1b19960766", "quorumNumbers": "AA=="}
2024-04-02T19:05:42.162Z	ERROR	logging/zap_logger.go:57	Unable to register operator with avs registry coordinator	{"error": "execution reverted: StakeRegistry.registerOperator: Operator does not meet minimum stake requirement for quorum"}
github.com/Layr-Labs/eigensdk-go/logging.(*ZapLogger).Error
```

4. **Будут ли вознаграждения в токенах?**

Вознаграждения в мейннете MACH AVS будут в будущем. Более подробная информация будет объявлена позже.

5. **Я не могу зарегистрироваться и сталкиваюсь с проблемой**&#x20;

**`Unable to register operator with avs registry coordinator`**

Пожалуйста, проверьте, достаточно ли средств на вашем ECDSA-адресе. Мы рекомендуем хранить не менее 0,3 ETH, чтобы обеспечить достаточное количество газа для регистрации, подключения и отключения оператора AVS.
