Initia - мануал, нода для самых маленьких
Автор (можно обращаться за помощью)
Канал
Держать ноду: 2 месяца
Суммарные затраты: от 90$ до 190$
Перспектива на насыпку: отличная
Это был мой первый опыт деплоя ноды/валидатора. Процесс занял не менее 6 часов и заставил дважды пережить смерть своего эго в попытках разобраться, как заставить всё работать. Теперь я готов помочь сэкономить время и нервы остальным, написав свой мануал для таких же первенцев, как я.
1. Но сперва разберемся, зачем нам это.
Проект собрал $7.5млн. от топовых фондов (ничего нового), но что интереснее - в них засажены Binance, при том их сумма инвеста не разглашается.
Initia - платформа, призванная упростить и обезопасить разработку блокчейна путем создания сети взаимосвязанных блокчейнов второго уровня (L2). Initia позиционирует себя как сеть 1-го уровня (L1), специально созданная для поддержки модульных "сворачиваний", т.е. rollups. Раунд финансирования и партнерские отношения с лидерами криптосферы свидетельствуют о том, что их "инновационный" (надеемся) подход к L2-роллапам набирает обороты. По мере развития технологии, Initia может сыграть важную роль в формировании будущего масштабируемых и безопасных блокчейн-приложений - продолжение пути к массадопшну. Справка:
"Блокчейны можно разделить на L1 и L2 в зависимости от их вычислительных возможностей. Блокчейны L1, такие как Bitcoin и Ethereum, обрабатывают транзакции непосредственно в своей основной сети. Однако такой подход может привести к проблемам масштабируемости, поскольку сеть становится перегруженной.
Сети L2 решают эту проблему, обрабатывая транзакции вне основного блокчейна и периодически сортируя их для отправки в сеть L1 для окончательного расчета. Это освобождает место в сети L1, позволяя проводить транзакции быстрее и дешевле"
- Упрощенная разработка: модульная конструкция Initia упрощает процесс разработки L2, делая создание пользовательских блокчейн-приложений проще и быстрее.
- Улучшенная масштабируемость: упрощая роллапы L2, Initia обеспечивает более быстрые и дешевые транзакции в блокчейне.
- Повышенная безопасность: Initia наследует преимущества безопасности базовой сети L1, позволяя разработчикам реализовывать дополнительные функции безопасности в своих L2-роллапах.
Если кратко - билдеры для билдеров, такое всегда выглядит интересно.
Сейчас началась первая фаза тестнета из восьми, так что времени заработать на реварды полно. Какие именно будут награды до конца неизвестно, поговаривают о "местах в генезисе", т.е. видимо вайтлист на валидирование (деплой ноды) в будущем мейннете, однако кажется очевидной насыпка токенов $INIT в будущем. Так же есть новая гугл-форма для валидаторов.
Учитывая вышеперечисленные факты, вопрос "зачем в этом участвовать?" выглядит риторическим.
2. Мануал
Сразу по делу.
Арендуем сервер
Рекомендуемые требования к железу:
- Memory: 16 GB RAM
- CPU: 4 cores
- Disk: 1 TB SSD
- Bandwidth: 1 Gbps
- Linux amd64 arm64 (Ubuntu LTS release)
Со всем считаемся, кроме диска. 400-700гб должно хватить с головой.
Брал сервер на aeza.net. Адекватный ценовой диапазон, моментальная оплата в крипте, отличные мощности и самое важное - стабильная работа.
Покупаем сервер PARs-4. На гео в всё равно, берите любой европейский город. Если закончится память, то можно расширить до 720гб с доплатой 40$/мес.
Подключаемся к серверу используя любой SSH-клиент (гайд), я советую Termius. РЕМАРКА! В процессе деплоя можете так же сверять свои действия с официальным (пусть и не самым понятным) мануалом.
Большую часть команд втупую копируем, места где надо внести свои правки будут обозначены. Сперва ознакомьтесь со всеми шагами, а потом приступайте, что бы не накосячить (хотя я косячил и ничего страшного не произошло, просто сервак переустановил с нодой, но это лишний гемор)
1. Устанавливаем необходимые компоненты:
sudo apt update && \ sudo apt install curl git jq build-essential gcc unzip wget lz4 -y
cd $HOME && \ ver="1.22.0" && \ wget "https://golang.org/dl/go$ver.linux-amd64.tar.gz" && \ sudo rm -rf /usr/local/go && \ sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz" && \ rm "go$ver.linux-amd64.tar.gz" && \ echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile && \ source $HOME/.bash_profile && \ go version
git clone https://github.com/initia-labs/initia.git cd initia git checkout v0.2.15 make install initiad version
# Customize if you need echo 'export MONIKER="My_Node"' >> ~/.bash_profile echo 'export CHAIN_ID="initiation-1"' >> ~/.bash_profile echo 'export WALLET_NAME="wallet"' >> ~/.bash_profile echo 'export RPC_PORT="26657"' >> ~/.bash_profile source $HOME/.bash_profile
Важно! В строке export echo 'export MONIKER="My_Node"' >> ~/.bash_profile указываем любое название своего валидатора, дефолтным не оставляем.
Пример: echo 'export MONIKER="flowerly"' >> ~/.bash_profile (в моем случае). Так будет правильно+удобно.
cd $HOME initiad init $MONIKER --chain-id $CHAIN_ID initiad config set client chain-id $CHAIN_ID initiad config set client node tcp://localhost:$RPC_PORT initiad config set client keyring-backend os # You can set it to "test" so you will not be asked for a password
wget https://initia.s3.ap-southeast-1.amazonaws.com/initiation-1/genesis.json -O $HOME/.initia/config/genesis.json
7. Важный пункт - подключаемся к нужным пирам+сидам.
Нестабильные пиры, которые дают в ориг. мануале, стали одной из причин, почему я так долго трахался с нодой. Вводим эту команду и по идее всё будет пучком:
PEERS="a96694150ccd37f224059b3307dfcf6c38859c9c@65.21.109.183:26656,5c5441d80d686129b9c3fe62830ee5fc732bdce4@138.201.196.246:26656,8c63f08b951f7680a443caa1144b720d2a666261@65.108.232.174:17956,878a184ea897412f9823e3190b8ef1c81e263508@65.108.60.2:26656,37a683597dc1807c57550b5f10e8238bc5c81994@195.201.58.101:26656,22d15dd14042fe37356d5c21ada139d753c770db@65.109.49.248:26656,b3202f401aee2ad59afae9d4f671647005538059@168.119.235.140:17956,769b90d0c4c4cedb5d0b8d6a3627a5792b4c8519@5.78.98.32:17956,4e33a90e043ce7c80f0ccff86bffa0c921b9a1e7@116.202.243.98:26656,29835dc71444e9a728cb25a12febe67e255dce56@65.108.229.141:26756,e1bc2c4ef45100e12fe49d5999f7b21ff32c64c4@95.217.132.163:26656,d76820c0890379eb75e3c27ea881167f97f3ca70@95.216.43.37:26656" && \
SEEDS="2eaa272622d1ba6796100ab39f58c75d458b9dbc@34.142.181.82:26656,c28827cb96c14c905b127b92065a3fb4cd77d7f6@testnet-seeds.whispernode.com:25756" && \
sed -i \
-e "s/^seeds *=.*/seeds = \"$SEEDS\"/" \
-e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" \
"$HOME/.initia/config/config.toml"8. Команда позволяющая экономить гигабайты диска:
sed -i \
-e "s/^pruning *=.*/pruning = \"custom\"/" \
-e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" \
-e "s/^pruning-interval *=.*/pruning-interval = \"10\"/" \
"$HOME/.initia/config/app.toml"sed -i -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.15uinit,0.01uusdc\"/" $HOME/.initia/config/app.toml
10. Отключаем индексацию транзакций для ускорения работы ноды:
sed -i "s/^indexer *=.*/indexer = \"null\"/" $HOME/.initia/config/config.toml
11. Создаем файлик сервиса ноды:
sudo tee /etc/systemd/system/initiad.service > /dev/null <<EOF [Unit] Description=Initia Node After=network.target [Service] User=$USER Type=simple ExecStart=$(which initiad) start --home $HOME/.initia Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
12. Проверяем версию ноды, должна быть 0.2.15:
initiad version
Если версия 0.2.14, пишем (поочередно, 1 строка=1 команда):
sudo systemctl stop initiad cd $HOME/initia git fetch --all git checkout v0.2.15 make install
13. Важный процесс - синхронизировать ноду. Ускорить этот процесс поможет снэпшот, скачиваем так (это одна команда как и большинство команд выше, копируем всё и вставляем всё за один раз):
initiad tendermint unsafe-reset-all --home $HOME/.initia--keep-addr-book
if curl -s --head curl https://krews.xyz/snapshots/initia/latest.tar.lz4 | head -n 1 | grep "200" > /dev/null; then
curl https://krews.xyz/snapshots/initia/latest.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.initia
else
echo snapshot not found
fi14. Делаем кошелек для валидатора (ничего не меняем, не забудьте сохранить сидку и сразу импортировать ее в кошелек)
initiad keys add $WALLET_NAME
15. Запрашиваем токены на кошелек. Идём сюда, вставляем адрес только что сгенерированного кошелька через терминал, получаем на него токены.
16. Самое вкусное и важное - создаем валидатора.
initiad tx mstaking create-validator \ --amount 1000000uinit \ --pubkey $(initiad tendermint show-validator) \ --moniker=$MONIKER \ --identity "" \ --details "Initia to the moon!" \ --website "YOUR_WEBSITE_URL" \ --chain-id initiation-1 \ --commission-rate 0.05 \ --commission-max-rate 0.20 \ --commission-max-change-rate 0.05 \ --from=$WALLET_NAME \ --gas-adjustment 1.4 \ --gas auto \ --gas-prices 0.15uinit \ --node https://initia-testnet-rpc.kzvn.xyz \ -y
Важно: мой валидатор/нода не работала, когда я оставлял identity="" не заполненым. Что туда нужно вставить? Скачиваем это, заполняем профиль и получаем Public Key. Вставляем его в скобки, пример: --identity "21B797FC1B9F0254" \
Строку --website можно оставлять незаполненной/вставить ссылку на свой твиттер.
После создания валидатора идём сюда, вводим имя нашего валидатора, т.е. тот самый MONIKER. Если мы появились в списке - порядок, идём дальше.
sudo systemctl daemon-reload && \ sudo systemctl enable initiad && \ sudo systemctl restart initiad && \ sudo journalctl -u initiad -f -o cat
Первые несколько минут могут лететь ошибки - это нормально, нода подбирает доступные для работы пиры. Если всё сделали правильно, то в терминале будут лететь похожие логи:
Проверить, сколько блоков осталось пройти, что бы достичь синхронизации (т.е. успевать за всеми новыми блоками без отставаний):
local_height=$(initiad status | jq -r .sync_info.latest_block_height); network_height=$(curl -s https://rpc-initia-testnet.trusted-point.com/status | jq -r .result.sync_info.latest_block_height); blocks_left=$((network_height - local_height)); echo "Your node height: $local_height"; echo "Network height: $network_height"; echo "Blocks left: $blocks_left"
Как только вы достигните последнего текущего блока, ваша нода будет синхронизирована. Это не особо важно ибо разработчики говорят, что влиять на награды будет именно up-time, т.е. время которое наша нода активно работала.
sudo journalctl -u initiad -f -o cat
Что бы спрятать логи, в терминале нажмите Ctrl+C
sudo systemctl restart initiad && sudo journalctl -u initiad -f -o cat
Если по какой то причине этот мануал не помог вам достичь успеха, то это не беда.
Во-первых - в дискорде проекта есть раздел #validators, где 24/7 все друг другу помогают с любым тех. вопросом.
Во-вторых - можете попробовать этот вариант с автоматической установкой от парня с их дискорда, не знаю рабочий ли способ, но скорее всего да.
Накатить эту ноду сможет реально каждый, по мере необходимости сами изучите те или иные дополнительные аспекты этого вопроса а так же набор прочих команд, с которыми будет неплохо ознакомиться для общего понимания.