Kusama - Decentralized nodes
🪓 Telegram канал UTSA 🪓 Telegram чат UTSA
- Network Chain ID: kusama
- Working directory:
.kusama
- RPC (archive): https://kusama-archive.rpc.utsa.tech
- Dashboard: https://polkadot.js.org/apps/?rpc=wss://kusama-archive.rpc.utsa.tech#/staking
Программа 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
- необходим собственный 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
. <(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/
- Переходим на сайт и выбираем Network - Staking - Accounts - Validator
- Выбираем аккаунты stash, сумму стейка и нажимаем next
- Далее вставляем наш ключ полученный с ноды валидатора, выбираем процент комиссионного вознаграждения и подписываем транзакцию
Перенос валидатора
- Запускаем ноду на новом сервере как обычно и полностью синхронизируемся
- После синхронизации на новом сервере запускаем команду и копируем новый ключ
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)
# обновляем image docker pull parity/polkadot # останавливаем ноду docker stop kusama_node # удаляем контейнер docker rm kusama_node
# запускаем стандартной командой
Snapshot
По умолчанию узел выполняет --sync full
синхронизацию, которая загружает и проверяет полную историю цепочки блоков
--sync fast
синхронизация - это еще один вариант, который работает путем загрузки истории заголовков блоков и проверки изменений в наборе полномочий, чтобы получить определенный (обычно самый последний) заголовок. После достижения желаемого заголовка и проверки состояния его можно загрузить и импортировать. Как только этот процесс будет завершен, узел может продолжить полную синхронизацию
В последнее время опция warp sync становится все более развитой и популярной. Если вы запустите узел с пустой базой данных и параметром --sync=warp
, узел сначала загрузит финальные доказательства, после чего он будет готов к проверке сети и в фоновом режиме загрузит оставшиеся блоки
В будущем это, вероятно, станет стандартом для синхронизации базы данных по умолчанию, и моментальные снимки могут устареть
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/ # запускаем как обычно
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/