Subspace | Gemini | Incentivized Testnet
Реліз gemini-1b-2022-jun-18
Зміст
- Про проект
- Polkadot wallet
- Нода
1. Вимоги до сервера - Установка ноди (Спосіб 1)
1. Установка
2. Створення перемінних
3. Створення сервісних файлів
4. Телеметрия и TSSC
5. Корисні команди
6. Оновлення
7. Перенос і бекап
8. Видалення - Установка ноди через docker
1. Установка
2. Створення перемінних
3. Створення сервісних файлів
4. Оновлення
5. Корисні команди - Посилання автора
Про проект
Medium | GitHub | WebSite | Twitter | Discord | Telegram | Ru_Telegram
Subspace Network - мережа, що дозволяє розробникам дуже просто і швидко розгортати децентралізовані Web3-програми, які, у свою чергу, можуть автоматично масштабуватися за необхідності.
Повна інтеграція з Polkadot & Kusama, у найближчому майбутньому та з EVM.
Subspace працює на блокчейні першого рівня, створеного для вирішення таких фундаментальних проблем, як: екологія, централізація та відсутність масштабованості.
Ці проблеми дозволяє вирішити нову реалізацію proof-of-capacity (PoC). Знайомі нам аналоги на PoC: Chia, Spacemesh, Filecoin.
Subspace працює на основі консенсусу proof-of-archive-storage (PoAS) або "доказ зберігання архівної історії блокчейну".
Фермери сабспейса (не майнери, до речі) зберігають стільки унікальних сегментів історії блокчейну, скільки дозволяє їх дисковий простір. зберігають історію колективно, що дозволяє їм працювати як єдиний розподілений архівний вузол.
Фермеру не обов'язково утримувати 2 тонни ССД, щоб зберігати всю історію блокчейну. Фермер може зберігати лише сегменти.
Чим більше фермер виділяє пам'яті, то більший шанс він має бути обраним для створення блоку.
Тут працює цікавий механізм нагород: більше фермерів у мережі > дорожча транзакція > більший прибуток для фермера. Зумовлено це тим, що нова інформація має зберігатися на більшій кількості дисків.
Кожен може стати фермером та збирати блоки, надавши свій вільний дисковий простір. Але для того, щоб підписувати та завершувати їх, потрібно бути обраним виконавцем.
Інвестори: більше $37kk від Coinbase, IOSG, Republic, Crypto.com, Alameda, Pantera, Hypersphere, Bixin, Vendetta, NGC, Gate та інших.
Polkadot wallet
Тепер нам потрібний гаманець. Переходимо в дашборд Subspace Gemini 1 та копіюємо адресу нашого гаманця. На цю адресу ми будемо фармити TSSC токени, як доказ участі у тестеті.
Якщо з якихось причин у вас ще немає гаманця полькусами, потрібно завантажити polkadot.js розширення та згенерувати гаманець там.
Пропустити створення гаманця
Нода
Вимоги до сервера:
Вимоги: 4 CPU x 8 GB RAM x 200 GB SSD - Ubuntu 20.04.
Важлива зауваження: існує велика залежність між потужностями сервера і швидкістю синхронізації та фармом токенів.
На мінімалках не бачу сенсу запускати, імхо: ви просто відставатимете і дуже рідко підписуватимете блоки.
Чим більше пам'яті тим краще
Установка ноди (Спосіб 1)
# Оновлюємо пакети sudo apt-get update && sudo apt-get upgrade -y
# Качаємо необхідні залежності sudo apt-get install wget jq -y
# Качаємо потрібні файли однією командою mkdir $HOME/subspace >/dev/null 2>&1 && \ cd $HOME/subspace && \ VER=$(wget -qO- https://api.github.com/repos/subspace/subspace/releases | jq '.[] | select(.prerelease==false) | select(.draft==false) | .html_url' | grep -vE "runtime|chain-spec" | grep -Eo "gemini-[0-9]*[a-zA-Z]-[0-9]*-[a-zA-Z]*-[0-9]*" | head -n 1) && \ wget https://github.com/subspace/subspace/releases/download/${VER}/subspace-farmer-ubuntu-x86_64-${VER} -qO farmer; \ wget https://github.com/subspace/subspace/releases/download/${VER}/subspace-node-ubuntu-x86_64-${VER} -qO subspace; \ sudo chmod +x * && \ if [[ $(./farmer --version) == "" || $(./subspace --version) == "" ]]; then echo -e "\n\ndat sh*t is broken, ping @cyberomanov.\n\n" else sudo mv * /usr/local/bin/ && \ FARMER_V=$(echo $(farmer --version) | grep -ow '[0-9]*.[0-9]*.[0-9]*') && \ SUBSPACE_V=$(echo $(subspace --version) | grep -ow '[0-9]*.[0-9]*.[0-9]*') && \ echo -e "\n\nrelease >> ${VER}.\nfarmer >>> v${FARMER_V}.\nsubspace > v${SUBSPACE_V}.\n\n" fi && \ cd $HOME && \ rm -Rvf $HOME/subspace >/dev/null 2>&1
Створення перемінних
Перевіряємо перемінні однією командою
source $HOME/.bash_profile && \ echo -e "\nmoniker > ${NICKNAME}.\naddress > ${SUBSPACE_ADDRESS}.\n"
Якщо у виводі не відображаються адреса або монікер, необхідно змінити ці змінні. Якщо вивід адекватний – переходимо сюди.
Додаємо наш нікнейм, який буде надалі використовуватися як назва ноди, і адресу гаманця в систему, як змінні.
# наприклад, "export NICKNAME="aspirine07"" echo "export NICKNAME="nickname"" >> ~/.bash_profile
# например, "export SUBSPACE_ADDRESS="st6g9CwbHsEAYn35nfWda4r89MJd2y9QZqnEGWZcmh5fTPkSF"" echo "export SUBSPACE_ADDRESS="address"" >> ~/.bash_profile
# щоб перемінні завантажились, необхідно перезавантажити '.bash_profile' source ~/.bash_profile
Знову перевіряємо значення перемінних
echo -e "\nmoniker > ${NICKNAME}.\naddress > ${SUBSPACE_ADDRESS}.\n"
Створення сервісних файлів
# Фіксимо журнал sudo tee <<EOF >/dev/null /etc/systemd/journald.conf Storage=persistent EOF
# Перезавантажуємо журнал sudo systemctl restart systemd-journald
# Створюємо файл сервісу для запуску ноди sudo tee <<EOF >/dev/null /etc/systemd/system/subspaced.service [Unit] Description=Subspace Node After=network.target [Service] Type=simple User=$USER ExecStart=$(which subspace) \\ $(wget -qO- https://raw.githubusercontent.com/cyberomanov/subspace/main/reserved.txt) \\ --chain="gemini-1" \\ --execution="wasm" \\ --pruning=1024 \\ --keep-blocks=1024 \\ --validator \\ --reserved-only \\ --name="${NICKNAME}" Restart=on-failure RestartSec=10 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
# Запускаємо ноду sudo systemctl daemon-reload && \ sudo systemctl enable subspaced && \ sudo systemctl restart subspaced
# Перевіряємо логи sudo journalctl -u subspaced -f -o cat
# проверяємо статус синхронізації sudo journalctl -fu subspaced -o cat | grep -Eo "best: #[0-9]*"
Синхронізація може зупинятися на певних блоках і не йти далі, доки фармер не обробить попередні блоки.
Оскільки фармер ми ще не запускали, синхронізація може зупинитися на першому блоці – не панікуємо.
Створюємо тимчасову змінну з максимальним місцем, яке хочете надати фармеру.
Маючи диск розміром 400Gb, я б зробив так:
- 100Gb на ноду;
- 20Gb на систему;
- 280Gb на фармер.
SPACE="280G"
# створюємо файл сервісу для запуску фармера sudo tee <<EOF >/dev/null /etc/systemd/system/farmerd.service [Unit] Description=Subspace Farmer After=network.target [Service] Type=simple User=$USER ExecStart=$(which farmer) farm \\ --reward-address=${SUBSPACE_ADDRESS} \\ --plot-size=${SPACE} Restart=on-failure RestartSec=10 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
# Перезапускаємо сервіси sudo systemctl daemon-reload && \ sudo systemctl enable subspaced farmerd && \ sudo systemctl restart subspaced farmerd
# Перевіряємо логи sudo journalctl -u farmerd -f -o cat
Якщо у логах виникнуть помилки - перезапустіть сервіси повторно
# пезапуск фармера та ноди sudo systemctl restart farmerd subspaced
Телеметрия и TSSC
# Перевірити синхронізацію sudo journalctl -fu subspaced -o cat | grep "best"
Або переходимо в телеметрію.
Актуальну висоту можна переглянути в експлоуері
Після завершення синхронізації ноди фармер почне продукувати блоки і отримувати за це нагороду. Якщо баланс гаманця збільшується – все працює чудово.
sudo journalctl -u farmerd -o cat | grep "Successfully"
Якщо дана команда нічого не виводить - значить, жодного блоку вона ще не підписала, спробуйте через пару годин знову.
От і все. Фармимо TSSC та чекаємо закінчення інсентивайзу.
Корисні команди
# перезапуск фармера та ноди sudo systemctl restart farmerd subspaced
# зупинка фармера та ноди sudo systemctl stop farmerd subspaced
# перевіряємо логи фармера sudo journalctl -u farmerd -f -o cat
# перевіряємо логи ноди sudo journalctl -u subspaced -f -o cat
# Перевірити синхронізацію sudo journalctl -fu subspaced -o cat | grep "best"
Оновлення
# одна команда mkdir $HOME/subspace >/dev/null 2>&1 && \ cd $HOME/subspace && \ VER=$(wget -qO- https://api.github.com/repos/subspace/subspace/releases | jq '.[] | select(.prerelease==false) | select(.draft==false) | .html_url' | grep -vE "runtime|chain-spec" | grep -Eo "gemini-[0-9]*[a-zA-Z]-[0-9]*-[a-zA-Z]*-[0-9]*" | head -n 1) && \ wget https://github.com/subspace/subspace/releases/download/${VER}/subspace-farmer-ubuntu-x86_64-${VER} -qO farmer; \ wget https://github.com/subspace/subspace/releases/download/${VER}/subspace-node-ubuntu-x86_64-${VER} -qO subspace; \ sudo chmod +x * && \ if [[ $(./farmer --version) == "" || $(./subspace --version) == "" ]]; then echo -e "\n\ndat sh*t is broken, ping @cyberomanov.\n\n" else sudo mv * /usr/local/bin/ && \ FARMER_V=$(echo $(farmer --version) | grep -ow '[0-9]*.[0-9]*.[0-9]*') && \ SUBSPACE_V=$(echo $(subspace --version) | grep -ow '[0-9]*.[0-9]*.[0-9]*') && \ echo -e "\n\nrelease >> ${VER}.\nfarmer >>> v${FARMER_V}.\nsubspace > v${SUBSPACE_V}.\n\n" fi && \ cd $HOME && \ rm -Rvf $HOME/subspace >/dev/null 2>&1 && \ sudo systemctl daemon-reload && \ sudo systemctl restart subspaced farmerd
# перевіряємо висоту sudo journalctl -fu subspaced -o cat | grep -Eo "best: #[0-9]*"
# перевіряємо логи фармера sudo journalctl -fu farmerd -o cat
Перенос і бекап
В якості бекапу викачуємо файл по шляху, який виведе команда:
find / -iname secret_ed25519 | grep subspace
Також зберігаємо json та мнемоніку від гаманця, куди капають нагороди.
При переїзді ми встановлюємо ноду та фармер як завжди, але після першого запуску здійснюємо заміну secret_ed25519 файлу з нового сервера на старий. І перезапускаємо ноду із фармером.
Видалення
# зупиняємо та відключаємо сервіс однією командою sudo systemctl stop subspaced farmerd && \ sudo systemctl disable subspaced farmerd
# видаляємо файли rm -Rvf $HOME/.local/share/subspace* sudo rm -v /etc/systemd/system/subspaced.service \ /etc/systemd/system/farmerd.service && \ sudo systemctl daemon-reload
Установка ноди через docker
# Оновлюємо пакети sudo apt update && sudo apt upgrade -y
# Ставимо утиліти sudo apt install curl ncdu htop git wget -y
# Встановлюємо docker cd $HOME apt update && apt purge docker docker-engine docker.io containerd docker-compose -y rm /usr/bin/docker-compose /usr/local/bin/docker-compose curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh
curl -SL https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# Перевірка версії docker-compose docker-compose --version
Створення перемінних
# Створюємо перемінні NODENAME="Ім'я ноди" ADDRESS="Адреса гаманця починається на st" PLOT_SIZE="Виділена пам'ять під фармер"
# Перевіряємо кількість вільного місця df -h
Віднімаємо близько 80-100Gb та решто віддаємо під фармер
# Записуємо перемінні в баш echo "export NODENAME=$NODENAME" >> $HOME/.bash_profile echo "export ADDRESS=$ADDRESS" >> $HOME/.bash_profile echo "export PLOT_SIZE=$PLOT_SIZE" >> $HOME/.bash_profile source $HOME/.bash_profile
# Перевіряємо перемінні cat $HOME/.bash_profile
При виводі повинні відображатись ваші актуальні дані
Створення сервісних файлів
# Створюємо дерикторію mkdir $HOME/subspace && cd $HOME/subspace
# Створюємо docker-compose, повністю та без змін tee $HOME/subspace/docker-compose.yml > /dev/null <<EOF version: "3.7" services: node: # For running on Aarch64 add '-aarch64' after 'DATE' image: ghcr.io/subspace/node:gemini-1b-2022-jun-18 volumes: # Instead of specifying volume (which will store data in '/var/lib/docker'), you can # alternatively specify path to the directory where files will be stored, just make # sure everyone is allowed to write there - node-data:/var/subspace:rw # - /path/to/subspace-node:/var/subspace:rw ports: # If port 30333 is already occupied by another Substrate-based node, replace all # occurrences of '30333' in this file with another value - "0.0.0.0:30333:30333" restart: unless-stopped command: [ "--chain", "gemini-1", "--base-path", "/var/subspace", "--execution", "wasm", "--pruning", "1024", "--keep-blocks", "1024", "--port", "30333", "--rpc-cors", "all", "--rpc-methods", "safe", "--unsafe-ws-external", "--validator", # Replace 'INSERT_YOUR_ID' with your node ID (will be shown in telemetry) "--name", "$NODENAME" ] healthcheck: timeout: 5s # If node setup takes longer then expected, you want to increase 'interval' and 'retries' number. interval: 30s retries: 5 farmer: depends_on: node: condition: service_healthy # For running on Aarch64 add '-aarch64' after 'DATE' image: ghcr.io/subspace/farmer:gemini-1b-2022-jun-18 # Un-comment following 2 lines to unlock farmer's RPC # ports: # - "127.0.0.1:9955:9955" # Instead of specifying volume (which will store data in '/var/lib/docker'), you can # alternatively specify path to the directory where files will be stored, just make # sure everyone is allowed to write there volumes: - farmer-data:/var/subspace:rw # - /path/to/subspace-farmer:/var/subspace:rw restart: unless-stopped command: [ "--base-path", "/var/subspace", "farm", "--node-rpc-url", "ws://node:9944", "--ws-server-listen-addr", "0.0.0.0:9955", # Replace 'WALLET_ADDRESS' with your Polkadot.js wallet address "--reward-address", "$ADDRESS", # Replace 'PLOT_SIZE' with plot size in gigabytes or terabytes, for instance 100G or 2T (but leave at least 10G of disk space for node) "--plot-size", "$PLOT_SIZE" ] volumes: node-data: farmer-data: EOF
# Запускаємо docker cd $HOME/subspace && docker-compose up -d
# Перевіряємо логи cd $HOME/subspace && docker-compose logs --tail=100 -f
# Шукаємо зловлені блоки cd $HOME/subspace && docker-compose logs | grep "signed"
Оновлення
cd $HOME/subspace nano docker-compose.yml
Керуємо курсором за допомогою стрілок та змінюємо назву релізу на gemini-1b-2022-jun-18.
Після редагування тиснемо ctrl+o, enter, ctrl+x
tee $HOME/subspace/docker-compose.yml > /dev/null <<EOF version: "3.7" services: node: # For running on Aarch64 add '-aarch64' after 'DATE' image: ghcr.io/subspace/node:gemini-1b-2022-jun-18 volumes: # Instead of specifying volume (which will store data in '/var/lib/docker'), you can # alternatively specify path to the directory where files will be stored, just make # sure everyone is allowed to write there - node-data:/var/subspace:rw # - /path/to/subspace-node:/var/subspace:rw ports: # If port 30333 is already occupied by another Substrate-based node, replace all # occurrences of '30333' in this file with another value - "0.0.0.0:30333:30333" restart: unless-stopped command: [ "--chain", "gemini-1", "--base-path", "/var/subspace", "--execution", "wasm", "--pruning", "1024", "--keep-blocks", "1024", "--port", "30333", "--rpc-cors", "all", "--rpc-methods", "safe", "--unsafe-ws-external", "--validator", # Replace 'INSERT_YOUR_ID' with your node ID (will be shown in telemetry) "--name", "$NODENAME" ] healthcheck: timeout: 5s # If node setup takes longer then expected, you want to increase 'interval' and 'retries' number. interval: 30s retries: 5 farmer: depends_on: node: condition: service_healthy # For running on Aarch64 add '-aarch64' after 'DATE' image: ghcr.io/subspace/farmer:gemini-1b-2022-jun-18 # Un-comment following 2 lines to unlock farmer's RPC # ports: # - "127.0.0.1:9955:9955" # Instead of specifying volume (which will store data in '/var/lib/docker'), you can # alternatively specify path to the directory where files will be stored, just make # sure everyone is allowed to write there volumes: - farmer-data:/var/subspace:rw # - /path/to/subspace-farmer:/var/subspace:rw restart: unless-stopped command: [ "--base-path", "/var/subspace", "farm", "--node-rpc-url", "ws://node:9944", "--ws-server-listen-addr", "0.0.0.0:9955", # Replace 'WALLET_ADDRESS' with your Polkadot.js wallet address "--reward-address", "$ADDRESS", # Replace 'PLOT_SIZE' with plot size in gigabytes or terabytes, for instance 100G or 2T (but leave at least 10G of disk space for node) "--plot-size", "$PLOT_SIZE" ] volumes: node-data: farmer-data: EOF
# Запускаємо docker cd $HOME/subspace && docker-compose up -d
Корисні команди
# Перезапустити docker cd $HOME/subspace && docker-compose restart
# Зупинити docker cd $HOME/subspace && docker-compose down -v
# Видалити cd $HOME && rm -rf $HOME/subspace
# Запускаємо docker cd $HOME/subspace && docker-compose up -d
# Перевіряємо логи cd $HOME/subspace && docker-compose logs --tail=100 -f
# Шукаємо зловлені блоки cd $HOME/subspace && docker-compose logs | grep "signed"
Посилання
- Телеграм канал по нодам - https://t.me/cryptoportalua
- Чат для обговорення - https://t.me/cryptoportal_nodes_chat
- Оригінальна стаття спосіб 1 (рос) - https://cyberomanov.tech/subspace
- Чат автора @cyberomanov - https://t.me/subspace_cis
- Оригінальна стаття docker (рос) - https://teletype.in/@bitdealer91/Kb0VeNx3wNr
- Чат автора @bitdealer91 - https://t.me/russianbears1