Подключение к Aptos Incentivized Testnet
Published: 2022-09-11 23:20:21

Делайте это только в том случае, если вы получили подтверждение по электронной почте от команды Aptos о том, что вы соответствуете требованиям. У нод, не прошедших отбор, не будет достаточно токенов для участия в тестнете. В этом случае вы все равно можете запустить публичную полную ноду, если хотите.

## Инициализация стэйкинг - пула
В AIT3 у нас будет поддержка пользовательского интерфейса, позволяющая владельцу управлять стэйкинг пулом, подробности здесь. Если вы уже сделали это через пользовательский интерфейс, вы можете проигнорировать этот шаг и перейти к "Загрузка ноды валидатора".

В качестве альтернативы, вы также можете использовать CLI для инициализации стэйкинг-пула:

- Инициализируйте CLI с помощью приватного ключа вашего кошелька, который вы можете получить из Настройки -> Учетные данные

```
aptos init --profile ait3-owner \
  --rest-url https://ait3.aptosdev.com
```

- Инициализация стэйкинг-пула с помощью CLI

```
aptos stake initialize-stake-owner \
  --initial-stake-amount 100000000000000 \
  --operator-address <operator-address> \
  --voter-address <voter-address> \
  --profile ait3-owner
```

- Не забудьте перевести несколько coin на учетную запись оператора для оплаты газа, это можно сделать с помощью Petra, или CLI

```
aptos account create --account <operator-account> --profile ait3-owner
aptos account transfer \
--account <operator-account> \
--amount 5000 \
--profile ait3-owner
```
Загрузка ноды валидатора
Прежде чем присоединиться к тестовой сети, вам необходимо загружать вашу ноду с помощью genesis blob и waypoint, предоставленных командой Aptos Labs. Это переведет вашу ноду из тестового режима в режим prod.

**Использование исходного кода**

- Остановите вашу ноду и удалите каталог данных. Убедитесь, что вы удалили и файл secure-data.json, путь к которому определен [здесь](https://github.com/aptos-labs/aptos-core/blob/e358a61018bb056812b5c3dbd197b0311a071baf/docker/compose/aptos-node/validator.yaml#L13).
- Скачайте файл `genesis.blob` и `waypoint.txt`, опубликованные командой Aptos Labs.
- Обновите `account_address` в `validator-identity.yaml` на адрес кошелька владельца, больше ничего не меняйте, ключи оставьте как есть.
- Внесите последние изменения в ветку `testnet`. Это должен быть коммит `b2228f286b5fe7631dee62690ae5d1087017e20d`
- Закройте порт метрики `9101` и порт REST API `80` для вашего валидатора (вы можете оставить их открытыми для полной ноды).
- Перезапуск ноды

**Использование Docker**

- Остановите ноду и удалите тома данных, `docker compose down --volumes`. Убедитесь, что вы удалили и файл `secure-data.json`, путь к которому определен [здесь](https://github.com/aptos-labs/aptos-core/blob/e358a61018bb056812b5c3dbd197b0311a071baf/docker/compose/aptos-node/validator.yaml#L13).
- Скачайте файл `genesis.blob` и `waypoint.txt`, опубликованные командой Aptos Labs.
- Обновите `account_address` в `validator-identity.yaml` на адрес кошелька владельца.
- Обновите образ docker для использования тега `testnet_b2228f286b5fe7631dee62690ae5d1087017e20d`.
- Закройте порт метрики 9101 и порт REST API `80` для вашего валидатора (удалите его из файла docker compose), вы можете оставить его открытым для полной ноды.
- Перезапуск ноды: `docker compose up`

**Использование Terraform**

- Увеличьте число `era` (эпох) в конфигурации Terraform, это сотрет данные после применения.
- Обновите `chain_id` до 47.
- Обновите образ докера для использования тега `testnet_b2228f286b5fe7631dee62690ae5d1087017e20d`
- Закройте порт метрики и порт REST API для валидатора (вы можете оставить его открытым для полной ноды), добавьте значения helm в ваш файл `main.tf`, например:

```javascript  
module "aptos-node" {
    ...

    helm_values = {
        service = {
          validator = {
            enableRestApi = false
            enableMetricsPort = false
          }
        }
    }
}
```

- Применить Terraform: `terraform apply`
- Скачайте файл `genesis.blob` и `waypoint.txt`, опубликованные командой Aptos Labs.
- Обновите `account_address` в `validator-identity.yaml` на адрес кошелька владельца, больше ничего не меняйте, сохраните ключи как есть.
- Пересоздайте секреты, убедитесь, что имя секрета соответствует номеру вашей `era`, например, если у вас `era = 3`, вы должны заменить имя секрета на `${WORKSPACE}-aptos-node-0-genesis-e3`

```javascript
export WORKSPACE=<your workspace name>

kubectl create secret generic ${WORKSPACE}-aptos-node-0-genesis-e2 \
    --from-file=genesis.blob=genesis.blob \
    --from-file=waypoint.txt=waypoint.txt \
    --from-file=validator-identity.yaml=keys/validator-identity.yaml \
    --from-file=validator-full-node-identity.yaml=keys/validator-full-node-identity.yaml
```

## Присоединение к пулу валидаторов
На данном этапе вы уже использовали свою учетную запись владельца для инициализации стэйкинг-пула валидаторов и назначить оператора на свою учетную запись оператора. Далее необходимо настроить ноду валидатора, используя учетную запись оператора, и присоединиться к набору валидаторов.

1.Инициализация Aptos CLI

```
aptos init --profile ait3-operator \
--private-key <operator_account_private_key> \
--rest-url https://ait3.aptosdev.com \
--skip-faucet
```

> **ПОДСКАЗКА**
> `account_private_key` для оператора можно найти в файле `private-keys.yaml` в папке `~/$WORKSPACE/keys`.

2.Проверьте баланс учетной записи валидатора, убедитесь, что у вас есть coins для оплаты газа. (Если нет, переведите несколько coins на эту учетную запись с вашей учетной записи владельца).

Вы можете проверить в проводнике `https://explorer.devnet.aptos.dev/account/<account-address>?network=ait3` или использовать CLI

```
aptos account list --profile ait3-operator
```
Это покажет вам баланс coin на учетной записи валидатора. Вы должны увидеть что-то вроде:

```javascript
"coin": {
    "value": "5000"
  }
```
3.Обновление сетевых адресов валидаторов в сети

```javascript
aptos node update-validator-network-addresses  \
  --pool-address <owner-address> \
  --operator-config-file ~/$WORKSPACE/$USERNAME/operator.yaml \
  --profile ait3-operator
```
4.Обновление ключа консенсуса валидатора в сети

```javascript
aptos node update-consensus-key  \
  --pool-address <owner-address> \
  --operator-config-file ~/$WORKSPACE/$USERNAME/operator.yaml \
  --profile ait3-operator
```
5.Присоединитесь к набору валидаторов

```
aptos node join-validator-set \
  --pool-address <owner-address> \
  --profile ait3-operator \
  --max-gas 10000 
```

> **МАКСИМАЛЬНЫЙ ГАЗ**
> Вы можете изменить указанное выше значение `max-gas`. Убедитесь, что вы отправили своему оператору достаточно токенов, чтобы оплатить стоимость газа.

`ValidatorSet` будет обновляться при каждой смене эпохи, то есть раз в 2 часа. Вы увидите, что ваша нода присоединяется к набору валидаторов только в следующую эпоху. Валидатор и нода начнут синхронизироваться, как только ваш валидатор будет включен в набор валидаторов.

6.Проверьте набор валидаторов

```javascript
aptos node show-validator-set --profile ait3-operator | jq -r '.Result.pending_active' | grep <account_address>
```
Вы увидите вашу ноду валидатора в списке "pending_active". Когда произойдет следующее изменение эпохи, нода будет перемещена в список "active_validators". Это произойдет в течение одного часа после завершения предыдущего шага. В течение этого времени вы можете увидеть ошибки типа "No connected AptosNet peers", что является нормальным.

```javascript
aptos node show-validator-set --profile ait3-operator | jq -r '.Result.active_validators' | grep <account_address>
```

## Проверка подключения нод

> **ОПРЕДЕЛЕНИЕ ЖИЗНЕСПОСОБНОСТИ НОДЫ**
> Подробности определения жизнеспособности ноды смотрите [здесь](https://dev.to/egormajj/kritierii-zhizniesposobnosti-nody-jn9).
После того как ваша валидаторная нода присоединилась к набору валидаторов, вы можете проверить правильность, выполнив следующие шаги:

1.Убедитесь, что ваша нода подключается к другим пирам в сети testnet. **Замените `127.0.0.1` на IP/DNS вашего валидатора, если он развернут в облаке.**

```javascript
curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_connections{.*\"Validator\".*}"
```
Команда выведет количество входящих и исходящих соединений вашей ноды валидатора. Например:

```javascript
aptos_connections{direction="inbound",network_id="Validator",peer_id="f326fd30",role_type="validator"} 5
aptos_connections{direction="outbound",network_id="Validator",peer_id="f326fd30",role_type="validator"} 2
```
Если одна из метрик больше нуля, то ваша нода подключена хотя бы к одному из аналогов в тестовой сети.

2.Вы также можете проверить, подключена ли ваша нода к ноде AptosLabs, замените <Aptos Peer ID> на peer ID, которым поделилась команда Aptos.

```javascript
curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_network_peer_connected{.*remote_peer_id=\"<Aptos Peer ID>\".*}"
```
3.Проверьте, синхронизируется ли состояние вашей ноды

```javascript
curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_state_sync_version"
```
Вы должны ожидать, что версия "committed" будет постоянно увеличиваться.

4.Как только состояние вашей ноды синхронизируется с последней версией, вы также можете проверить, продвигается ли консенсус, и ваша нода предлагает

```javascript
curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_consensus_current_round"

curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_consensus_proposals_count"
```
Следует ожидать, что это число будет постоянно расти.

5.Наконец, самый простой способ проверить, правильно ли функционирует ваша нода, - это проверить, получает ли она вознаграждение за стэйкинг. Вы можете проверить это в проводнике, `https://explorer.devnet.aptos.dev/account/<owner-account-address>?network=ait3`

```javascript
0x1::stake::StakePool

"active": {
  "value": "100009129447462"
}
```
Вы должны ожидать, что активное значение для вашего StakePool будет постоянно увеличиваться. Оно обновляется в каждую эпоху, поэтому будет обновляться каждые два часа.

## Выход из набора валидаторов
Нода может в любой момент выйти из набора валидаторов, или это произойдет автоматически, когда на учетной записи валидатора не будет достаточного количества стэйкинга. Чтобы покинуть набор валидаторов, вы можете выполнить следующие действия:

1.Выход из набора валидаторов (вступит в силу в следующую эпоху)

```javascript
aptos node leave-validator-set --profile ait3-operator --pool-address <owner-address>
```