POLKADOT
May 4, 2023

Polkadot  - Decentralized nodes

🪓 Telegram канал UTSA 🪓 Telegram чат UTSA

TELEMETRY | VERSION-DOCKER | WALLET

Details

Программа 1KV завершает свою работу и вместо нее стартует программа Decentralized Nodes (DN). В настоящее время действующие участники 1KV могут подать заявки до 31 октября. Программой будут номинированы около 75 валидаторов Polkadot и около 180 валидаторов Kusama сроком на 4 месяца. Эти цифры могут измениться в будущем из-за изменений в тайниках W3F или из-за изменения условий стейкинга

Требования

  • ознакомиться с общими требованиями Terms and Conditions и критериями Rules
  • необходимо пройти KYC или KYB. Важно - проверьте санкционные списки в требованиях. Россия и некоторые другие страны запрещены
  • ранним участникам 1KV будет предоставляться преимущество в выборах в первую когорту
  • запустить ноду и настроить валидатора
  • заполнить форму очень внимательно. Email в форме должен совпадать с тем, на который пройден KYC
  • необходимо идентифицировать основной кошелек, который будет stash. Как минимум должны быть указаны Email и Matrix handle. Cвяжитесь с [email protected], чтобы завершить проверку вашего дескриптора Matrix
40,000,000,000 Plancks = 0.04 KSM
  • необходим собственный BOND токенов для kusama 150 KSM и 7500 DOT для polkadot
  • валидатор может взимать комиссию до 5% на Polkadot и до 15% на Kusama
  • назначение вознаграждений валидатора должно быть установлено как «staked» (увеличивать свой собственный стейк)
  • ноды должны подключаться к публичной телеметрии https://telemetry.polkadot.io/
  • никакие данные не должны быть скрыты от телеметрии. В частности ноды должны обмениваться как минимум следующей информацией: (ЦП, ОЗУ, количество ядер и является ли машина виртуальной)
  • сервера должны соответствовать минимальным требованиям к оборудованию, описанным здесь
  • каждая нода должна работать на отдельном сервере. Могут быть исключения, но они не рекомендуются и должны быть обоснованны
  • валидаторы никогда не должны быть slashed. Единственное исключение - если slashed произошло из-за ошибки клиента или общей сетевой проблемы
  • ноды должны быть обновлены до последней версии клиента в течение 24 часов после ее выпуска
  • валидаторы должны выплачивать вознаграждения за стейкинг не позднее, чем в течение 24 часов после окончания эры
  • нельзя использовать Hetzner и Contabo
  • валидаторы должны быть доступны для звонка (на английском языке) по запросу, во время которого им могут задавать вопросы или просить предоставить доказательства их операций
  • если участник решает покинуть программу, он должен уведомить об этом Web3 Foundation по электронной почте [email protected] как минимум за неделю до отключения нод

Используемые порты

# для первой ноды
--port 30333
--rpc-port 9933
--prometheus-port 9615 #Prometeus

В данном гайде используется база данных RocksDB , которая является опцией по умолчанию

В будущем рекомендуется переключиться на более быстрый и эффективный вариант ParityDB. Обратите внимание, что ParityDB все еще является экспериментальным и его не следует использовать в рабочей среде. Если вы хотите протестировать ParityDB, вы можете добавить флаг --database paritydb

Переключение между серверными базами данных потребует повторной синхронизации

Подготовка сервера

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

# устанавливаем необходимые утилиты
apt install curl iptables build-essential git wget jq make gcc nano tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev -y
# проверяем работу жестких дисков
curl -sL yabs.sh | bash -s — -ig
# Disk Test
echo ; nvme smart-log /dev/nvme1 | grep -e Temperature -e Warning -e available -e percentage -e Critical ; echo ; nvme smart-log /dev/nvme1 | grep -e Temperature -e Warning -e available -e percentage -e Critical ; echo
# Check disk info
inxi -D
inxi -Dxx

# проверяем работу интернета
curl -sL yabs.sh | bash -s — -fg
# диагностика сети (трассировка)
apt install mtr -y
mtr 65.108.101.50
mtr 217.13.223.167

# проверить потребление трафика в реальном времени
apt-get install nethogs -y
nethogs

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

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/installers/docker.sh)

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

ВАЖНО — в командах ниже все, что в <> меняем на свое значение и убираем сами <>

# создаем каталог
mkdir -p $HOME/.polkadot

# даем нужные права текущему пользователю
chown -R $(id -u):$(id -g) $HOME/.polkadot

# открываем использумые порты
ufw allow 30333

Версии polkadot - https://hub.docker.com/r/parity/polkadot/tags

Имейте в виду, что при запуске polkadot в docker процесс по умолчанию прослушивает только localhost. Если вы хотите подключиться к службам вашего узла (rpc, websockets и prometheus), то вам необходимо убедиться, что вы запускаете свою ноду используя --rpc-external --ws-external и --prometheus-external
-d запуск контейнера docker в фоновом режиме
-it покажет процессы внутри контейнера 
-v смонтирует том и сохранит все данные цепочки в заданной папке
--name имя ноды
--sync warp ускоренная синхронизация крайних блоков с последующей фоновой догрузкой базы данных
--prometheus-external для подключения к prometheus
--base-path пользовательская папка для домашней страницы polkadot
--database <rocksdb> использование базы данных paritydb или rocksdb. По умолчанию rocksdb
--out-peers <COUNT> для выбора количество исходящих соединений. По умолчанию 8
--in-peers <COUNT> для выбора количество входящих соединений. По умолчанию 32

#PORTS
--port <PORT> для выбора порта P2P
--prometheus-port <PORT> для выбора порта prometheus
--rpc-port <PORT> для выбора порта RPC

#RPC
--rpc-external для открытия всех интерфейсов RPC
--unsafe-rpc-external аналогично --rpc-external. По умолчанию нода не запуститься при попытке одновременно открыть RPC и запустить валидатора. Флаг --unsafe-rpc-external позволяет игнорировать эту меру безопасности. 
--rpc-methods <safe> для предоставления безопасного подмножество методов RPC. По умолчанию auto
--ws-max-connections <100> максимальное количество подключений для RPC. По умолчанию 100
--rpc-cors <all> для разрешения доступа к серверу RPC отовсюду. По умолчанию localhost и https://polkadot.js.org

#PRUNING
--state-pruning 128 сохранение "состояний" блоков, по умолчанию 256
                    Для архивного узла используйте --state-pruning archive
                    Этот режим указывает, когда состояние блока (т. е. хранилище) должно быть удалено из базы данных. Этот параметр можно задать только при первом создании базы данных. Каждый последующий запуск будет загружать режим сокращения из базы данных и приведет к ошибке, если сохраненный режим не соответствует этому значению CLI.
--blocks-pruning 128 обрезка сохраненных "состояний", по умолчанию archive-canonical
                    Для архивного узла используйте --blocks-pruning archive
                    archive-canonical указывает хранить только финализированные блоки
 
# запускаем docker предварительно прописав имя валидатора <moniker>
docker run -dit \
--name polkadot_node \
--restart always \
--network host \
-v $HOME/.polkadot:/data -u $(id -u ${USER}):$(id -g ${USER}) \
parity/polkadot:latest --base-path /data \
--validator --name "<moniker>" \
--public-addr /ip4/$(wget -qO- eth0.me)/tcp/30333 \
--port 30333 --rpc-port 9933 --prometheus-port 9615 \
--telemetry-url 'wss://telemetry.polkadot.io/submit/ 1' \
--telemetry-url 'wss://telemetry-backend.w3f.community/submit 1'
Теперь нода должны появиться в телеметрии - https://telemetry.w3f.community/#list/0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3

Настройка валидатора

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

curl -H "Content-Type: application/json" -d '{"id":1, "jsonrpc":"2.0", "method": "author_rotateKeys", "params":[]}' http://localhost:9933
Если получили подобный результат, то все замечательно {"jsonrpc":"2.0","result":"0xa0very0long0hex0string","id":1} - копируем ключ (выделено жирным) он нам понадобится в ближайшее время
# проверяем создались ли ключи
ls -a $HOME/.polkadot/chains/polkadot/keystore/

  1. Переходим на сайт и выбираем Network - Staking - Accounts - Validator
  2. Выбираем аккаунты stash и controller, сумму стейка и нажимаем next
  3. Далее вставляем наш ключ полученный с ноды валидатора, выбираем процент комиссионного вознаграждения и подписываем транзакцию

Перенос валидатора

  • Запускаем ноду на новом сервере как обычно и полностью синхронизируемся
  • После синхронизации на новом сервере запускаем команду и копируем новый ключ
curl -H "Content-Type: application/json" -d '{"id":1, "jsonrpc":"2.0", "method": "author_rotateKeys", "params":[]}' http://localhost:9933
  • Переходим в Network - Accounts - Change session keys и меняем наш ключ. Подписываем транзакцию
  • Ждем окончания эпохи
  • После окончания эпохи останавливаем старую ноду

Updating (Manually)

Версии polkadot - https://hub.docker.com/r/parity/polkadot/tags

# обновляем image
docker pull parity/polkadot:latest

# останавливаем ноду
docker stop polkadot_node

# удаляем контейнер
docker rm polkadot_node
# запускаем стандартной командой

Snapshot

По умолчанию узел выполняет --sync full синхронизацию, которая загружает и проверяет полную историю цепочки блоков

--sync fast синхронизация - это еще один вариант, который работает путем загрузки истории заголовков блоков и проверки изменений в наборе полномочий, чтобы получить определенный (обычно самый последний) заголовок. После достижения желаемого заголовка и проверки состояния его можно загрузить и импортировать. Как только этот процесс будет завершен, узел может продолжить полную синхронизацию

В последнее время опция warp sync становится все более развитой и популярной. Если вы запустите узел с пустой базой данных и параметром --sync=warp, узел сначала загрузит финальные доказательства, после чего он будет готов к проверке сети и в фоновом режиме загрузит оставшиеся блоки

В будущем это, вероятно, станет стандартом для синхронизации базы данных по умолчанию, и моментальные снимки могут устареть

every 24 hours | pruned | RocksDB

🌐 https://share106-3.utsa.tech/polkadot/

docker stop polkadot_node
docker rm polkadot_node

# удаляем базу данных
rm -r $HOME/.polkadot/chains/polkadot/db/

# скачиваем
curl -o - -L https://share106-3.utsa.tech/polkadot/polkadot_pruned.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.polkadot/chains/polkadot/

# запускаем как обычно

every 7 days | archive | RocksDB

🌐 https://share106-7.utsa.tech/polkadot/

docker stop polkadot_node
docker rm polkadot_node

# удаляем базу данных
rm -r $HOME/.polkadot/chains/polkadot/db/

# скачиваем
curl -o - -L https://share106-7.utsa.tech/polkadot/polkadot_archive.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.polkadot/chains/polkadot/

# запускаем как обычно

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

# посмотреть логи
docker logs polkadot_node -fn 100

# перезагрузить ноду
docker restart polkadot_node

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

docker stop polkadot_node
docker rm polkadot_node

cd $HOME
rm -rf .polkadot/
Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq