POLKADOT
April 27, 2023

Kusama - 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. Перейдите на https://polkadot.polkassembly.io/, чтобы завершить проверку вашего дескриптора Matrix
40,000,000,000 Plancks = 0.04 KSM
  • необходим собственный BOND токенов для kusama 150 KSM и 7500 DOT для polkadot
  • валидатор может взимать комиссию до 5% на Polkadot и до 15% на Kusama
  • назначение вознаграждений валидатора должно быть установлено как «staked» (увеличивать свой собственный стейк). В качестве альтернативы валидатор может установить параметр получения вознаграждений как «stash», если у него есть собственная ставка в размере 11500 DOT или 250 KSM
  • ноды должны подключаться к публичной телеметрии https://telemetry.polkadot.io/ и w3f телеметрии https://telemetry.w3f.community/
  • никакие данные не должны быть скрыты от телеметрии. В частности ноды должны обмениваться как минимум следующей информацией: (ЦП, ОЗУ, количество ядер и является ли машина виртуальной)
  • сервера должны соответствовать минимальным требованиям к оборудованию, описанным здесь
  • каждая нода должна работать на отдельном сервере. Могут быть исключения, но они не рекомендуются и должны быть обоснованны
  • валидаторы никогда не должны быть 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/.kusama

# даем нужные права
chown -R $(id -u):$(id -g) $HOME/.kusama

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

Версии polkadot/kusama - 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 имя ноды
--no-beefy используем вместе с --sync warp
--sync warp ускоренная синхронизация крайних блоков с последующей фоновой догрузкой базы данных
            Скорость начальной загрузки крайних блоков благодаря --sync=warp обычно занимает от 5 до 30 минут
            Pruning выполняется для блоков, полученных после завершения полной синхронизации
            Из-за этого действие ключей --state-pruning и --blocks-pruningначинают работать только после полной синхронизации
--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
--ws-max-connections <COUNT> максимальное количество подключений для RPC. По умолчанию 100
--rpc-methods <Safe> для предоставления безопасного подмножество методов RPC. По умолчанию auto
--rpc-cors <all> для разрешения доступа к серверу RPC отовсюду. По умолчанию localhost

#PRUNING
--state-pruning 128 сохранение "состояний" блоков, по умолчанию 256
                    Для архивного узла используйте --state-pruning archive
                    Этот режим указывает, когда состояние блока (т. е. хранилище) должно быть удалено из базы данных. Этот параметр можно задать только при первом создании базы данных. Каждый последующий запуск будет загружать режим сокращения из базы данных и приведет к ошибке, если сохраненный режим не соответствует этому значению CLI.
--blocks-pruning 128 обрезка сохраненных "состояний", по умолчанию archive-canonical
                    Для архивного узла используйте --blocks-pruning archive
                    archive-canonical указывает хранить только финализированные блоки
                    Позволяет сократить место либо при синхронизации с первого блока, либо после загрузки всех блоков с warp
                    

ВАЖНО - ⚠️ BEEFY включен на Westend и Kusama ⚠️
https://github.com/paritytech/polkadot/pull/7661

BEEFY это консенсусный протокол, который поможет с подключением к ethereum или kusama <> polkadot bridging. В настоящее время BEEFY включен по умолчанию и конфликтует с sync warp при включенном флаге --validator

Валидаторам, использующим sync warp для Kusama и Westend необходимо отключить BEEFY добавив флаг --no-beefy или убрать флаг --sync=warp

# запускаем docker предварительно прописав имя валидатора <moniker>
docker run -dit \
--name kusama_node \
--restart always \
--network host \
-v $HOME/.kusama:/data -u $(id -u ${USER}):$(id -g ${USER}) \
parity/polkadot:v1.9.0 --base-path /data --chain kusama \
--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/0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe

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

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

# ниже команда с нестандартным портом 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/.kusama/chains/ksmcc3/keystore/
  1. Переходим на сайт и выбираем Network - Staking - Accounts - Validator
  2. Выбираем аккаунты stash, сумму стейка и нажимаем next
  3. Далее вставляем наш ключ полученный с ноды валидатора, выбираем процент комиссионного вознаграждения и подписываем транзакцию

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

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

Updating (Manually)

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

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

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

Snapshot

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

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

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

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

every 24 hours | pruned | RocksDB

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

docker stop kusama_node
docker rm kusama_node

# удаляем базу данных
rm -r /root/.kusama/chains/ksmcc3/db/

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

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

every 7 days | archive | RocksDB

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

docker stop kusama_node
docker rm kusama_node

# удаляем базу данных
rm -r /root/.kusama/chains/ksmcc3/db/

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

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

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

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

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

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

docker stop kusama_node
docker rm kusama_node

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