May 26, 2022

Гайд: установка ноды Subspace

Коротко о проекте и почему мы рвемся его ставить

Если очень коротко, Subspace - это проект-сеть, предоставляющая возможность разворачивать Web3 приложения без каких либо трудностей, дополнительно дает им возможность автоматически масштабироваться.

Представитель концепции PoC(см. ниже, будет более подробная инфа), который полностью интегрирован с Polkadot & Kusama, и в ближайшем будущем с EVM.

Subspace разделил консенсус(executor) и вычисления(farmer, не одно и то же, что "майнер"). Одни собирают транзакции и отправляют на проверку другим, что является довольно интересным, новым решением в данном направлении, решает часть проблем, которые не удается охватить аналоговым технологиям.

Подводя итоги: на данный момент имеется тестнет(пока только фармеры), в скором времени планирует перетекать в инсентивайз(ориентировочно во 2/4, добавятся экзекуторы), приятные инвесторы(более $37млн), интересная перспективная технология, почему бы, собственно говоря, и не поучаствовать?

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

Соцсети проекта:

Medium | GitHub | WebSite | Twitter | Discord | Telegram

Установка

Выбор сервера

Минимальные характеристики(VPS/VDS/DS):

1 CPU, 1 GB RAM, 60 GB SSD, Ubuntu 20.04

Рекомендуемые характеристики(VPS/VDS/DS):

2 CPU, 2 GB RAM, 60 GB SSD, Ubuntu 20.04

Рекомендации по серверам:

Contabo Cloud VPS-S (4.99€/месяц + установка)

Contabo Cloud VPS-M (8.99€/месяц + установка, дороже, но есть вариант туда что-то подселить в будущем)

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

Подключение к серверу:

Для того, чтобы подключиться к серверу на Windows потребуется программа PuTTY или MobaXterm(на ваше усмотрение, что удобно - тем и пользуемся)

Инструкция для PuTTY:

  • В "Host Name" вводим IP вашего сервера и нажимаем "Open";
  • В открывшимся окне прописываем команду: root;
  • Жмем "Enter" и вставляем пароль от сервера, затем "Enter".

На MacOS просто запускаем программу Terminal

  • Заходим на сервер командой: ssh root@IP_ADDRESS, IP_ADDRESS меняем на IP сервера;
  • Дальше вводим "yes", жмем "Enter" и вставляем пароль от сервера (введенный пароль будет скрыт иконкой с ключом). Жмем "Enter".

Создаем кошель:

Переходим в эксплорер и добавляем аккаунт:

Надежно сохраняем мнемонику:(отметил фиолетовым)

Вводим свои данные, также сохраняем, жмем "Следующий", "Сохранить":

Обновление:

Останавливаем ноду и фармер

sudo systemctl stop farmerd subspaced

Чистим данные старой сети

farmer wipe && rm -Rvf /root/.local/share/subspace-node/chains/*

Дальше просто проходим установку

Установка:

sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install wget -y

Скачиваем исполняемые файлы

mkdir $HOME/subspace; \
cd $HOME/subspace && \
VER=$(wget -qO- https://api.github.com/repos/subspace/subspace/releases/latest | jq -r ".tag_name") && \
wget https://github.com/subspace/subspace/releases/download/${VER}/subspace-farmer-ubuntu-x86_64-${VER} -O farmer && \
wget https://github.com/subspace/subspace/releases/download/${VER}/subspace-node-ubuntu-x86_64-${VER} -O subspace && \
sudo chmod +x * && \
sudo mv * /usr/local/bin/ && \
cd $HOME && \
rm -Rvf $HOME/subspace

Проверяем версию:

echo -e "\n$(farmer --version)\n$(subspace --version)\n"

Должно отображать на выводе:

Сохраняем ваш кошель:

Для начала проверяем значения

source $HOME/.bash_profile && \echo -e "\nmoniker > ${NICKNAME}.\naddress > ${SUBSPACE_ADDRESS}.\n"

если значений нет, создаем:

echo "export NICKNAME="имя_кошеля"" >> ~/.bash_profile
echo "export SUBSPACE_ADDRESS="сам_кошель"" >> ~/.bash_profile
source ~/.bash_profile

обновляем журнал

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) \\
--chain="gemini-1" \\
--execution="wasm" \\
--pruning=1024 \\
--keep-blocks=1024 \\
--validator \\
--reserved-nodes="/dns/bootstrap-0.gemini-1b.subspace.network/tcp/30333/p2p/12D3KooWF9CgB8bDvWCvzPPZrWG3awjhS7gPFu7MzNPkF9F9xWwc" \\
--reserved-nodes="/dns/bootstrap-1.gemini-1b.subspace.network/tcp/30333/p2p/12D3KooWLrpSArNaZ3Hvs4mABwYGDY1Rf2bqiNTqUzLm7koxedQQ" \\
--reserved-nodes="/dns/bootstrap-10.gemini-1b.subspace.network/tcp/30333/p2p/12D3KooWNGf1qr5411JwPHgwqftjEL6RgFRUEFnsJpTMx6zKEdWn" \\
--reserved-nodes="/dns/bootstrap-11.gemini-1b.subspace.network/tcp/30333/p2p/12D3KooWM7Qe4rVfzUAMucb5GTs3m4ts5ZrFg83LZnLhRCjmYEJK" \\
--reserved-nodes="/dns/bootstrap-2.gemini-1b.subspace.network/tcp/30333/p2p/12D3KooWNN5uuzPtDNtWoLU28ZDCQP7HTdRjyWbNYo5EA6fZDAMD" \\
--reserved-nodes="/dns/bootstrap-3.gemini-1b.subspace.network/tcp/30333/p2p/12D3KooWM47uyGtvbUFt5tmWdFezNQjwbYZmWE19RpWhXgRzuEqh" \\
--reserved-nodes="/dns/bootstrap-4.gemini-1b.subspace.network/tcp/30333/p2p/12D3KooWNMEKxFZm9mbwPXfQ3LQaUgin9JckCq7TJdLS2UnH6E7z" \\
--reserved-nodes="/dns/bootstrap-5.gemini-1b.subspace.network/tcp/30333/p2p/12D3KooWFfEtDmpb8BWKXoEAgxkKAMfxU2yGDq8nK87MqnHvXsok" \\
--reserved-nodes="/dns/bootstrap-6.gemini-1b.subspace.network/tcp/30333/p2p/12D3KooWHSeob6t43ukWAGnkTcQEoRaFSUWphGDCKF1uefG2UGDh" \\
--reserved-nodes="/dns/bootstrap-7.gemini-1b.subspace.network/tcp/30333/p2p/12D3KooWKwrGSmaGJBD29agJGC3MWiA7NZt34Vd98f6VYgRbV8hH" \\
--reserved-nodes="/dns/bootstrap-8.gemini-1b.subspace.network/tcp/30333/p2p/12D3KooWCXFrzVGtAzrTUc4y7jyyvhCcNTAcm18Zj7UN46whZ5Bm" \\
--reserved-nodes="/dns/bootstrap-9.gemini-1b.subspace.network/tcp/30333/p2p/12D3KooWNGxWQ4sajzW1akPRZxjYM5TszRtsCnEiLhpsGrsHrFC6" \\
--reserved-nodes="/ip4/142.132.131.158/tcp/30333/p2p/12D3KooWEUbb4VxpwHxkRCTB2RG59whnHeYs4631iwefYzQZSA58" \\
--reserved-nodes="/ip4/161.97.86.119/tcp/30333/p2p/12D3KooWKn317boS3z5eKu9tL5koyuBRzTZXU1cvULmAFu8qAJSB" \\
--reserved-nodes="/ip4/164.92.167.41/tcp/30333/p2p/12D3KooWFRWdKxmkGCfLCM29Kwpjws18Wy66piC1Rup4ZfmFrki6" \\
--reserved-nodes="/ip4/173.249.28.128/tcp/30333/p2p/12D3KooWSG7ZKU1prLsR2XYqJetYKMBq132hxEu3PwA3LR9FP3CK" \\
--reserved-nodes="/ip4/176.122.88.128/tcp/30335/p2p/12D3KooWEWmUX8futkbi8YodaRGFuuuxyngmKWDPazVob4JwT1TE" \\
--reserved-nodes="/ip4/185.241.52.110/tcp/30333/p2p/12D3KooWFxZn3t7pPTZzcF6HTPMgbfAwDwG3af64T82rWrgVsMKr" \\
--reserved-nodes="/ip4/185.252.232.79/tcp/30333/p2p/12D3KooWG2qiXqpt9mB6MBYuwxcwU8E9tJugoJ79BU9MeMujTzCo" \\
--reserved-nodes="/ip4/194.146.12.210/tcp/30333/p2p/12D3KooWNY2HDY3VgbFTUtuxtqBLVwfPzQoqMrKETxQsJPxCybwN" \\
--reserved-nodes="/ip4/194.163.172.244/tcp/30333/p2p/12D3KooWEjTgq1QEt2mS9p3ztNxcp2KC3NijCk6B31jS7CdKvDwr" \\
--reserved-nodes="/ip4/195.3.220.211/tcp/30333/p2p/12D3KooWDHWjr3cKhQMAHuZ5twfj6wehdwMrr9WnwifXx7Ay5BeR" \\
--reserved-nodes="/ip4/38.242.202.59/tcp/30333/p2p/12D3KooWC9Ec6xNJ8oNZ87XgKyN9HWq3GUTmA5EKLdJjviAEksom" \\
--reserved-nodes="/ip4/38.242.209.251/tcp/30333/p2p/12D3KooW9x1S2B8w88jn6gAbNt3f4UmXdf59qxT3tGtLN5BKWGNh" \\
--reserved-nodes="/ip4/38.242.224.226/tcp/30333/p2p/12D3KooWMJw8iXs7jFYC3YLTJnwZfVhhy36F6V2889zFDebfKnfR" \\
--reserved-nodes="/ip4/45.144.67.67/tcp/30333/p2p/12D3KooWPQpjxmANthC2xYd4mEAh4evCpMw8dSLBwZEy65pw12jf" \\
--reserved-nodes="/ip4/46.101.140.85/tcp/30333/p2p/12D3KooWNGxWQ4sajzW1akPRZxjYM5TszRtsCnEiLhpsGrsHrFC6" \\
--reserved-nodes="/ip4/5.182.227.103/tcp/30333/p2p/12D3KooWEcMQudRP1U5eCqACqGLeEJmpqfGPau3LY4cRJytBqRLe" \\
--reserved-nodes="/ip4/62.171.134.63/tcp/30333/p2p/12D3KooWPy4Dz9i19Cyrpu9jhtRMEWwtYDi1XFmpXJpN3iqXugKC" \\
--reserved-nodes="/ip4/62.171.138.196/tcp/30333/p2p/12D3KooWHtrAtkEjW6f4vRhyVQbU4dZo5ryfQoiNCf84ZkFYWqXZ" \\
--reserved-nodes="/ip4/65.108.130.178/tcp/30333/p2p/12D3KooWLUH8FqxJti1rFAmrFo9HHZQhhygg8qHx2bSJurk7NhQQ" \\
--reserved-nodes="/ip4/65.108.227.146/tcp/30333/ws/p2p/12D3KooWN5uEJ3awLVKkDdcF6RHvxLXVjYMzdFYDYECpt3aoGq49" \\
--reserved-nodes="/ip4/65.108.246.217/tcp/30333/p2p/12D3KooWMEbLfvRYdJnfVqcpNn5VyEUyQeiG5R6cp8qsvspAtxsP" \\
--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

Сами логи не очень здоровые по причине нестабильности сети, периодически коннект будет рваться, чинят.

Ниже указываем временную переменную для выделения места под фермер, указываем минимум 10Гб, я укажу 100

SPACE="100G"
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 farmerd && \ sudo systemctl restart farmerd

Проверяем логи фармера:

sudo journalctl -u subspaced -f -o cat

Телеметрия:

sudo journalctl -fu subspaced -o cat | grep "best"

Дополнительные команды:

Перезапустить ноду:

sudo systemctl restart subspaced

Перезапустить фермер:

sudo systemctl restart subspaced-farmer

Удалить ноду:

sudo systemctl stop subspaced subspaced-farmer
sudo systemctl disable subspaced subspaced-farmer
rm -rf ~/.local/share/subspace*
rm -rf /etc/systemd/system/subspaced*
rm -rf /usr/local/bin/subspace*

Обновление

Останавливаем ноду

sudo systemctl stop farmerd subspaced

Чистим данные

farmer wipe && \
subspace purge-chain --chain gemini-1 -y > /dev/null 2>&1 && \
subspace purge-chain --chain testnet -y > /dev/null 2>&1
ВЫВОД ПОСЛЕ КОМАНД

повторяем установку

Бэкап

При переносе ноды, выкачиваем файл, по адресу, который выдает команда

find / -iname secret_ed25519 | grep subspace
по дефолту он следующий: /root/.local/share/subspace-node/chains/subspace_test/network/secret_ed25519

После установки ноды, замените соответствующий новосозданный файл на тот, что скачали перед удалением, перезапустите ноду и фармер.

Инфа

Спонсоры

Из крупных интересных инвесторов могу отметить Pantera Capital - большое портфолио, вы можете знать такие проекты с их участием как: 1inch, 0x, FTX, Coinbase(показательно, т.к. когда-то Pantera вложились в coinbase, а теперь они вместе инвестируют в сабспейс, иронично), Brave, Near. С coinbase и crypto.com большинство и так знакомы, а так, впринципе, желающих приложить часть финансовых усилий в проект набралось масса:

Концепция

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

Изначально, стоит разъяснить то, что Subspace является представителем Proof of Capacity(PoC). Что же это такое?

Proof of Capacity(PoC) - это модель блокчейна, которая основана на интенсивном хранении данных, потому что жесткие диски распространены гораздо шире, чем машины для майнинга ASIC. Фермерство менее энергоэффективно, чем майнинг, но его безопасность очень похожа на PoW.

При модели PoW огромные майнинг-фермы, объединенные в несколько майнинг-пулов, являются, по большей части, правителями сети. Также, сжигая чрезмерное количество электроэнергии, делают этот вариант экологически не устойчивым.

Proof of Stake имеет некоторые улучшения по сравнению с PoW. Это не то чтобы слишком энергоемко, но все же есть проблема с уровнем децентрализации в большинстве блокчейнов PoS: если одна монета означает один голос, то киты, владеющие огромным количеством монет, имеют слишком большую власть.

PoC пытается решить эти проблемы по-своему, используя аппаратные диски для формирования консенсуса. Фермеры сначала создают и хранят доказуемо уникальные реплики истории блокчейна, прежде чем реагировать на случайные и публично проверяемые проверки хранилища, которые позволяют им производить новые блоки. Вычисления основаны на том, что фермеры выделяют все доступное дисковое пространство для консенсуса, выполняя как можно меньше избыточных вычислений. Хранение истории блокчейна просто стимулирует фермеров создавать самую длинную цепочку.

Для разъяснения основы концепции Subspace и их мотивов, стоит изначально разобраться с таким явлением в крипте как "дилемма фермера". Если вкратце и без лишних слов: каждый узел(нода) должен делать выбор между сохранением истории и состояния блокчейна или максимальным объемом пространства, которое он выделяет для достижения консенсуса. В отличие от сетей PoW и PoS, существуют сильные финансовые стимулы для того, чтобы не запускать полную ноду, а это означает, что сети PoC на самом деле более склонны к централизации.

В Subspace есть две основные роли, которые разделяют консенсус и вычисления, что является ключевым отличием от других моделей консенсуса - фермеры и экзекуторы(исполнители):

Фермеры - хранят уникальные реплики истории блокчейна вместе, каждый фермер хранит столько реплик, сколько позволяет его дисковое пространство. В других блокчейнах Proof of Capacity фермеры хранят случайно сгенерированные данные или данные, созданные пользователями вне сети.

Исполнители - в отличие от фермеров, их основная цель — поддерживать состояние блокчейна и вычислять переходы между состояниями.

Из вайтпепера Subspace - «Это разделение задач значительно снижает объем памяти и вычислительных ресурсов, необходимых для работы фермера, даже в модели выполнения в стиле Ethereum, обеспечивая высокий уровень участия в консенсусе обычных пользователей с обычным оборудованием».

Сохранение консенсуса и вычисления разделены в Subspace, поэтому фермерам не нужно поддерживать состояние блокчейна, если они сосредоточены на упорядочении транзакций в блоках. При таком подходе "дилемма фермера" решается элегантным способом, поддерживая достойный уровень децентрализации.

Подводя итоги: исходя из всего вышеуказанного, Subspace является бесплатным, честным и экологичным по своей природе представителем PoC сети, без какой-либо централизации. Предлагая недорогое и масштабируемое пространство для децентрализованных приложений, Subspace дает пользователям возможность легко вставлять данные непосредственно в транзакции, что очень важно при построении Web3.