APTOS
April 5, 2022

APTOS AIT3

Условия получения наград за AIT3

  • Выполнить все необходимые задачи вовремя
  • Удовлетворение LIVENESS ноды, как определено метриками push-данных ≥ 95%
  • REWARDS PERFORMANCE ≥ 80% от максимума
  • Успешное участие во всех операциях governance, созданных Aptos

Каждый, кто соответствует этим критериям, получит 800 токенов Aptos. Кроме того, команда предложит две возможности получить дополнительные 200 токенов Aptos
UPD - пул наград обещали увеличить из-за увеличения времени тестирования




AIT3 Регистрация

Офф инструкция - https://aptos.dev/nodes/ait/ait-3/

Регистрация

Для регистрации в AIT3 необходимо выполнить следующие условия:

  1. Удостоверьтесь, что вы присоединилсь к серверу Aptos в дискорде
  2. Скачайте и установите кошелек Petra
  3. Создайте аккаунт (или авторизируйтесь) на сайте community site
  4. Следуйте шагам регистрации на AIT-3, заполняйте форму и установите ноду валидатора (переходите к установке), зарегестрируйте свою ноду (после установки)

Если установка на том же сервере, то сначала удаляем ноду

# Остановить ноду и удалить тома данных
cd ~/.aptos && docker-compose down -v
# удалить genesis.blob и waypoint.txt
rm ~/.aptos/genesis.blob
rm ~/.aptos/waypoint.txt
# можно удалить сразу все
cd && rm -rf ~/.aptos

# Чтобы полностью удалить Docker:
apt-get purge -y docker-engine docker docker.io docker-ce
apt-get autoremove -y --purge docker-engine docker docker.io docker-ce
rm /usr/local/bin/docker-compose

# приведенные выше команды не будут удалять изображения, контейнеры, тома или созданные пользователем файлы конфигурации на вашем хосте. Если вы хотите удалить все изображения, контейнеры и тома, выполните следующие команды:
# rm -rf /var/lib/docker /etc/docker
# rm /etc/apparmor.d/docker
# groupdel docker
# rm -rf /var/run/docker.sock

# при ошибке установки переконфигурируем dpkg
#sudo dpkg --configure -a

Новая установка

# обновляем репозитории
apt update && apt upgrade -y

# устанавливаем необходимые утилиты
apt install curl build-essential git wget jq make gcc tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev -y

Установка docker + docker-compose

# автоматическая установка docker + docker-compose
. <(wget -qO- https://raw.githubusercontent.com/letsnode/Utils/main/installers/docker.sh)

# проверить версию
docker --version
docker-compose --version
# ручная установка docker https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-ru
apt update
apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
apt update
apt-cache policy docker-ce
sudo apt install docker-ce
systemctl status docker

# проверить версию
docker --version
# ручная установка docker-compose https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04-ru
# проверяем версию https://github.com/docker/compose/releases и подставляем в команду установки
curl -L "https://github.com/docker/compose/releases/download/v2.10.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

# проверить версию
docker-compose --version

Устанавливаем rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# в процесе прожмите "y" и нажмите на "1"
source "$HOME/.cargo/env"
# проверить версию
rustc --version

Устанавливаем ноду через cargo

cargo install --git https://github.com/aptos-labs/aptos-core.git aptos --branch testnet

Добавляем переменные

WORKSPACE=.aptos
USERNAME=lesnik_utsa
IP=$(wget -qO- eth0.me)

echo 'export WORKSPACE='$WORKSPACE >> $HOME/.bash_profile && \
echo 'export USERNAME='$USERNAME >> $HOME/.bash_profile && \
echo 'export IP='$IP >> $HOME/.bash_profile && \
echo "WORKSPACE: $WORKSPACE" && echo "USERNAME: $USERNAME" && echo "IP: $IP"

# подгрузить переменные
#. $HOME/.bash_profile

Создаем каталог и переходим в него

mkdir ~/$WORKSPACE 
cd ~/$WORKSPACE

Скачиваем необходимые *.yaml

wget https://raw.githubusercontent.com/aptos-labs/aptos-core/main/docker/compose/aptos-node/docker-compose.yaml
wget https://raw.githubusercontent.com/aptos-labs/aptos-core/main/docker/compose/aptos-node/validator.yaml

Генерируем ключи

aptos genesis generate-keys --output-dir ~/$WORKSPACE/keys

Устанавливаем конфигурации для валидатора

aptos genesis set-validator-configuration \
--local-repository-dir ~/$WORKSPACE \
--username $USERNAME \
--owner-public-identity-file ~/$WORKSPACE/keys/public-keys.yaml \
--validator-host $IP:6180 \
--full-node-host $IP:6182 \
--stake-amount 100000000000000

Генерируем конфиг запуска

aptos genesis generate-layout-template --output-file ~/$WORKSPACE/layout.yaml

⠀Меняем несколько переменных в конфиге

nano /root/$WORKSPACE/layout.yaml
root_key: "D04470F43AB6AEAA4EB616B72128881EEF77346F2075FFE68E14BA7DEBD8095E" 
users: ["YOUR_NAME"] 
chain_id: 43

Скачиваем framework необходимый для запуска

wget https://github.com/aptos-labs/aptos-core/releases/download/aptos-framework-v0.3.0/framework.mrb -P ~/$WORKSPACE

Генерируем genesis.blob и waypoint.txt

aptos genesis generate-genesis --local-repository-dir ~/$WORKSPACE --output-dir ~/$WORKSPACE

ВАЖНО! Сделайте бекап созданных ключей (keys) и папку с названием вашего валидатора (YOUR_NAME).

Запускаем ноду

cd ~/$WORKSPACE && docker-compose up -d

Проверяем логи

cd ~/$WORKSPACE && docker-compose logs -f --tail 100
# рестарт ноды
cd ~/$WORKSPACE && docker-compose restart
# остановить ноду
cd ~/$WORKSPACE && docker-compose stop

Запросить метрики

curl 127.0.0.1:9101/metrics 2> /dev/null | grep aptos_state_sync_version

Данные для заполнения формы можно посмотреть выполнив команды:

cat ~/$WORKSPACE/$USERNAME/operator.yaml

Удаление

cd ~/$WORKSPACE && docker-compose down && cd && rm -rf ~/$WORKSPACE

Нода использует порты: TCP port: 80, 6180, 6181, 6182, 9101


ОБНОВЛЕНИЕ AIT3

Инициализируем стейкинг пул (офф инструкция)

  • В самом начале обновляем кошелек Petra на версию 0.1.8
  • Для начала проверяем, что получили монеты на кошелек, который создавали в Petra (это будет кошелек владельца Owner). После этого создаем второй кошелек и называем его Voter. Далее нам предлагают почитать информацию о стейкинге
  • После того как кошельки созданы переходим на сайт Aptos Governance, где подключаем свой кошелек Owner и заполняем следующие данные:

Staking Amount: 100000000000000 (1 миллион монет Aptos с 8 десятичными знаками)
Operator Address: Адрес Вашей учетной записи на ноде - operator_account_address из файла "operator.yaml", расположенного в папке ~/$WORKSPACE/$USERNAME. В моем случае это /root/.aptos/lesnik_utsa/operator.yaml
Voter Address: Адрес кошелька Voter

После заполнения нажимаем SUBMIT

Затем с Owner кошелька, используя Petra wallet, переведите по 5000 (именно 5000, без 8 нулей) монет на Operator Address и Voter Address. И оператор, и избиратель будут использовать эти средства для оплаты платы за газ во время проверки и голосования. Не обращаем внимание на надпись "account not found, will be created" ("учетная запись не найдена, будет создана" - это просто предупреждение)

Присоединяемся к AIT3 (офф инструкция)

Останавливаем ноду с очисткой данных

cd /root/.aptos
docker compose down --volumes
#Убедитесь, что вы также удалили файл secure-data.json в path: /opt/aptos/data/secure-data.json

Скачиваем genesis.blob

wget -O $HOME/.aptos/genesis.blob "https://github.com/aptos-labs/aptos-ait3/raw/main/genesis.blob"

# Проверим генезис
sha256sum ~/.aptos/genesis.blob
# 307f6846179c257badc4e50fbf1d7d4d332b82046e6ff297bff087c5a8efe68f

Скачиваем waypoint.txt

wget -O $HOME/.aptos/waypoint.txt "https://raw.githubusercontent.com/aptos-labs/aptos-ait3/main/waypoint.txt"

# Проверим 
cat ~/.aptos/waypoint.txt
# 0:96d6b0c072ae759ee3d071d1b41a87b3bc983eb852a805e7054482235eace373

Обновляем account_address в validator-identity.yaml на адрес Owner

# nano /root/.aptos/keys/validator-identity.yaml
account_address: 0x815790639a8e36f49c7fa24...

Меняем тег образа в docker-compose.yaml

# nano /root/.aptos/docker-compose.yaml
image: "aptoslabs/validator:testnet_18b8c628ea9424fe3cb03e2f65172ecef7ca678c"

Нода использует порты: TCP port: 80, 6180, 6181, 6182, 9101

Необходимо закрыть порт metrics на 9101 и порт REST API 80 для вашего валидатора

# nano /root/.aptos/docker-compose.yaml
    ports:
      - "6180:6180"
      - "6181:6181"
      - "127.0.0.1:80:8080"
      - "127.0.0.1:9101:9101"
    expose:
      - 6180
      - 6181

Запускаем ноду

docker compose up -d

ПРИСОЕДИНЕНИЕ К НАБОРУ ВАЛИДАТОРОВ

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

Инициализируем ноду. <account_private_key> берем из файла private-keys.yaml

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

Проверим есть ли баланс на кошельке

aptos account list --profile ait3-operator | grep value

Обновляем сетевые адреса валидатора в сети

aptos node update-validator-network-addresses \
 --pool-address <owner-address> \
 --operator-config-file ~/$WORKSPACE/$USERNAME/operator.yaml \
 --profile ait3-operator

ВАЖНО: Если после команды выше появляется ошибка, то обновляем CLI до версии 0.3.2 и повторяем команду выше

# обновить CLI
cargo install --git https://github.com/aptos-labs/aptos-core.git aptos --branch testnet
# проверить версию
aptos --version
# aptos 0.3.2

Обновляем согласованный ключ валидатора в сети

aptos node update-consensus-key \
 --pool-address <owner-address> \
 --operator-config-file ~/$WORKSPACE/$USERNAME/operator.yaml \
 --profile ait3-operator

Присоединяемся к валидаторскому сету

Набор валидаторов будет обновляться при каждом изменении эпохи, то есть раз в 2 часа. Вы увидите, что ваш узел присоединяется к набору валидаторов только в следующую эпоху. Как Validator, так и fullnode начнут синхронизацию, как только ваш валидатор будет включен в набор валидаторов

UPD - добавьте к кошельку ноды еще 20000 + монет

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

Проверить сет ожидающих валидаторов в pending_active

aptos node show-validator-set --profile ait3-operator | jq -r '.Result.pending_active' | grep <owner-address>

Проверить сет валидаторов в active

aptos node show-validator-set --profile ait3-operator | jq -r '.Result.active_validators' | grep <owner-address>

После того, как валидатор появится в активном сете, то пойдет синхронизация и мы можем проверить состояние

# проверяем входящие и исходящие подключения
curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_connections{.*\"Validator\".*}"

# проверяем высоту сети
curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_state_sync_version{.*\"synced\"}" | awk '{print $2}'
curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_state_sync_version"

# проверяем пиры. Должно быть больше 0
curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_connections{direction=\"outbound\""

# проверяем соединение с нодой Aptos
curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_network_peer_connected{.*remote_peer_id=\"f326fd30\".*}"

# после синхронизации проверяем достигается ли консенсус. Число должно будет увеличиваться
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"

# проверяем статистику валидатора по каждой эпохе
curl -s https://aptos-analytics-data-it3.s3.us-west-2.amazonaws.com/validator_epoch_history.json|jq '.[]|select(.validator_addr == "<OWNER_ADR>>")'

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

0x1::stake::StakePool

"active": {
  "value": "100009129447462"
}

Полезные команды

# посмотреть логи
docker logs -f --tail 100 aptos-validator-1

# рестарт ноды
cd ~/.aptos && docker-compose restart

# остановить ноду
cd ~/.aptos && docker-compose stop

Проверить сколько занимает база данных

du -h /var/lib/docker/volumes/aptos-validator/

Удаление ноды

# Остановить ноду и удалить тома данных
cd $HOME/.aptos
docker-compose down -v

# удалить genesis.blob и waypoint.txt
rm genesis.blob
rm waypoint.txt

# также можем удалить .aptos
cd $HOME
rm -rf .aptos

# проверяем образы
docker system df -v
# удаляем старые образы aptos
docker image rm <id>

Изменить учетную запись Voter (также можно через UI)

aptos stake set-delegated-voter \
--voter-address <new-voter-address> \
--profile ait3-owner

Добавить профиль ait3-voter

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

Проголосовать за предложение

aptos governance vote \
--proposal-id <proposal id> \
--pool-address <owner address> \
--profile ait3-voter \
--yes

Посмотреть статистику валидатора сквозь эпохи

 curl -s https://aptos-analytics-data-it3.s3.us-west-2.amazonaws.com/validator_epoch_history.json|jq '.[]|select(.validator_addr == "<OWNER_ADDRESS_HERE>")'

Посмотреть статистику валидатора сквозь эпохи в табличном виде

curl -s https://aptos-analytics-data-it3.s3.us-west-2.amazonaws.com/validator_epoch_history.json|jq -r -C '["EPOCH","FAILED","SUCCESS"], ["-----","------","--------"], (.[]|select(.validator_addr == "<OWNER_ADDRESS_HERE>")|[.epoch, .failed_proposal_count, .successful_proposal_count])|@tsv'

ОПЦИОНАЛЬНО

ОБНОВЛЕНИЯ

# заменить в файле docker-compose.yaml
# nano /root/.aptos/docker-compose.yaml
image: "aptoslabs/validator:testnet_18b8c628ea9424fe3cb03e2f65172ecef7ca678c"

# перезагрузить
docker-compose down && docker-compose up -d

# проверить версию
docker ps

ОПЦИОНАЛЬНО - ИЗМЕНИТЬ РАЗМЕР ЗАНИМАЕМОГО МЕСТА ЛОГ ФАЙЛА

# проверить занимаемое место
du -h /var/lib/docker/volumes/aptos-validator/
# для ограничения размера лога, в docker-compose.yaml прописать
# nano /root/.aptos/docker-compose.yaml
    logging:
      options:
        max-file: "3"
        max-size: "100m"
# перезагрузить
docker compose down && docker compose up -d

ОПЦИОНАЛЬНО - НАСТРОЙКА КОНФИГУРАЦИИ ТАЙМАУТА КОНСЕНСУСА (после настройки уменьшилась PARTICIPATION)

# открываем validator.yaml
nano /root/.aptos/validator.yaml
# для изменения таймаута, в validator.yaml прописать
  round_initial_timeout_ms: 2000

# перезагрузить
docker compose down && docker compose up -d

ОПЦИОНАЛЬНО - старт со снепшота

state_sync:
  state_sync_driver:
    bootstrapping_mode: DownloadLatestAccountStates # Tells state sync to skip all historic transactions
  data_streaming_service:
    max_concurrent_requests: 3 # Enables data pre-fetching so syncing isn't super slow
    

ОПЦИОНАЛЬНО - настраиваем concurrency_level, что позволяет оптимизировать работу при высокой нагрузке на сеть

Можно настроить и для fullnode - для этого отредактировать fullnode.yaml

# открываем validator.yaml
nano /root/.aptos/validator.yaml
# настраиваем concurrency_level: 8
concurrency_level: 8

# перезагружаем
docker-compose down && docker-compose up -d

Вывод средств с валидатора и правильное закрытие

Офф доки здесь

cd $HOME/.aptos
# оставьте набор валидаторов (вступит в силу в следующую эпоху)
# при ошибке "API error: Unknown error transaction execution failed: Out of gas" добавляем --max-gas 20000
aptos node leave-validator-set --profile ait3-operator --pool-address <owner-address> --max-gas 20000
# Проверить active сет валидаторов (owner адрес должен пропасть из этого списка)
aptos node show-validator-set --profile ait3-operator | jq -r '.Result.active_validators' | grep <owner-address>

После можно удалить ноду

# Остановить ноду и удалить тома данных
cd $HOME/.aptos
docker-compose down -v

# удалить genesis.blob и waypoint.txt
rm genesis.blob
rm waypoint.txt

# также можем удалить .aptos
cd $HOME
rm -rf .aptos

В зависимости от того, хотите ли вы повторно использовать свой идентификатор узла, вы можете сохранить или удалить созданные ключи (keys) и папку с названием вашего валидатора (YOUR_NAME).