Althea
cyberomanov
Минимальные требования
2 CPU x 4 GB RAM x 40 GB HDD | min
4 CPU x 8 GB RAM x 60 GB HDD | max
Ubuntu 20.04
Арендуем сервер на любом удобном сервисе. Сохраняем IP и пароль от VPS.
Я покупаю здесь: vdsina.ru (быстро и дорого), ihor.ru (медленно и дёшево).
При регистрации по моей ссылке 10% скидка на стоимость всех услуг.
Открываем MobaXterm и создаём сессию. Гайд по MobaXterm.
Установка ноды
# создаём пользователя и логинимся в новую учётную запись $ sudo adduser althea $ usermod -aG sudo althea $ sudo su althea # обновляем 'базу данных' и скачиваем необходимые зависимости $ cd && sudo apt-get update $ sudo apt-get upgrade -y $ sudo apt install jq -y # создаём папку для ноды и скачиваем все необходимые файлы $ mkdir althea-bin && cd althea-bin $ wget https://github.com/althea-net/althea-chain/releases/download/v0.0.5/althea-0.0.4-16-g6812f87-linux-amd64 $ mv althea-0.0.4-16-g6812f87-linux-amd64 althea $ wget https://github.com/althea-net/althea-chain/releases/download/v0.0.5/client $ wget https://github.com/althea-net/althea-chain/releases/download/v0.0.5/orchestrator $ wget https://github.com/althea-net/althea-chain/releases/download/v0.0.5/register-delegate-keys $ wget https://github.com/althea-net/althea-chain/releases/download/v0.0.5/relayer $ chmod +x * $ sudo mv * /usr/bin/ # генерируем ключи, обязательно сохраняем мнемонику $ cd $ althea init mymoniker --chain-id althea-testnet1v5 $ althea keys add <NICKNAME>

# копируем файл генезиса $ wget https://github.com/althea-net/althea-chain/releases/download/v0.0.5/althea-testnet1-v5-genesis.json $ cp althea-testnet1-v5-genesis.json $HOME/.althea/config/genesis.json
Открываем файл конфига через nano или проводник:

Находим строку под номером 187, меняем значение в кавычках на следующее:
05ded2f258ab158c5526eb53aa14d122367115a7@testnet1.althea.net:26656

В этой же папке открываем файл app.toml, находим строку под номером 104, меняем значение на "true":

Сохраняем изменения и создаём сервис "althead":
$ sudo nano /etc/systemd/system/althead.service # вставляем следующий код в редактор 'nano' [Unit] Description=Althea After=network-online.target [Service] User=althea ExecStart=/usr/bin/althea start Restart=always RestartSec=3 LimitNOFILE=4096 [Install] WantedBy=multi-user.target # сохраняем файл 'Ctrl + S', закрываем редактор 'Ctrl + X'

# перезагружаем данные о сервисах, включаем сервис 'althead' $ sudo systemctl daemon-reload $ sudo systemctl enable althead $ sudo systemctl start althead # смотрим журнал сервиса $ sudo journalctl -u althead -f # закрываем логи сервиса сочетанием клавиш 'Ctrl + C'
Началась синхронизация:

Скачиваем ещё пару файлов для синхронизации с сетью Goerli:
# скачиваем ещё пару файлов для синхронизации с сетью 'goerli' $ wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.1-c2d2f4ed.tar.gz $ tar -xvf geth-linux-amd64-1.10.1-c2d2f4ed.tar.gz $ mv geth-linux-amd64-1.10.1-c2d2f4ed geth # создадим сервис для 'geth' $ sudo nano /etc/systemd/system/gethd.service # вставляем следующий код в редактор 'nano' [Unit] Description=Althea Geth After=network-online.target [Service] User=althea ExecStart=/home/althea/geth/geth --syncmode "light" --goerli --http --cache 128 Restart=always RestartSec=3 LimitNOFILE=4096 [Install] WantedBy=multi-user.target # сохраняем файл 'Ctrl + S', закрываем редактор 'Ctrl + X'

# перезагружаем данные о сервисах, включаем сервис 'geth' $ sudo systemctl daemon-reload $ sudo systemctl enable gethd $ sudo systemctl start gethd # журнал сервиса $ sudo journalctl -u gethd -f # закрываем логи сервиса сочетанием клавиш 'Ctrl + C'

Если за 10-15 минут нода не нашла ни одного пира, как у меня было в первый раз, я сделал следующее.
Открыл заново файл сервиса в редакторе, удалил параметр "--syncmode "light"", перезагрузил "daemon-reload", перезапустил сервис.
geth начал полную синхронизацию, через 5-10 минут после запуска полной синхронизации я опять остановил сервис, вернул параметр "--syncmode "light"" и заново перезапустил сервис.
После этой махинации у меня при лёгком моде началась синхронизация.
Скорее всего, оставив машину на час-два, она автоматически найдёт нужные пиры и успешно синхронизируется.
Валидатор
Выключаем лог сочетанием клавиш "Ctrl + C".
# получаем наш адрес для запроса тестовых токенов $ althea keys list

Переходим в дискорд канал команды и запрашиваем токены:

Проверяем баланс через эксплорер: testnet.althea.aneka.io (не обновился до версии 1.5) или gravity.paullovette.com:

Также необходимо дождаться конца синхронизации.
Открываем эксплорер, включаем логи сервиса "althead" и сравниваем высоту:



# можно проверить статус синхронизации командой $ althea status 2>&1 | jq .SyncInfo | jq .catching_up # пока результат 'true', вы всё ещё на стадии синхронизации # если результат 'false', пора создавать валидатора # синхронизация может занять до 2-ух суток


# баланс можно проверить командой в консоли # но только после полной синхронизации $ althea query bank balances <COSMOS_ADDRESS>

# ждём синхронизацию, ждём токены # после чего выполняем команду создания валидатора # если выполнить её раньше, ничего не выйдет # меняем <NICKNAME> на собственные значения $ althea tx staking create-validator \ --amount=100000000ualtg \ --pubkey=$(althea tendermint show-validator) \ --moniker="<NICKNAME>" \ --chain-id=althea-testnet1v5 \ --commission-rate="0.10" \ --commission-max-rate="0.20" \ --commission-max-change-rate="0.01" \ --min-self-delegation="1" \ --gas="auto" \ --gas-adjustment=1.5 \ --gas-prices="0.025ualtg" \ --from=<NICKNAME>

Чтобы удостовериться, что вы теперь валидатор:
$ althea query staking validator $(althea keys show <NICKNAME> --bech val --address)

Отлично, теперь вы проходите валидацию в блокчейне Althea. Но в качестве валидатора вам также необходимо запустить компоненты Gravity Bridge, иначе вы будете удалены из списка валидаторов примерно через 16 часов и попадёте в тюрьму.
Gravity Brigde
# данная команда создаст ещё один аккаунт для делегации # сохраняем весь вывод в блокнот, не потеряйте мнемоническую фразу $ RUST_LOG=INFO register-delegate-keys --validator-phrase="<MNEMONIC>" --cosmos-rpc="http://localhost:1317" --fees=footoken

# отправляем в делегацию тестовые монеты # не забываем указать имя валидатора и # только что сгенерированный cosmos-адрес $ althea tx bank send <NICKNAME> <DELEGATE_COSMOS_ADDRESS> 50000000footoken --chain-id=althea-testnet1v5

В предыдущем шаге мы сгенерировали 2 адреса для делегации: ETH и Cosmos.
Теперь идём на этот кран (или этот) и запрашиваем на ETH-адрес тестовый Goerli Ethereum.


Orchestrator
И последний пункт настройки валидатора. Создаём ещё один сервис:
$ sudo nano /etc/systemd/system/orchestratord.service
# вставляем следующий код в редактор 'nano'
# попутно заменяя необходимые переменные
# космическую мнемонику и приватный эфировский ключ берём
# из пункта, где создавали адреса для делегации
[Unit]
Description=Althea Orchestrator
After=network-online.target
[Service]
User=althea
ExecStart=orchestrator \
--cosmos-phrase="<DELEGATE_COSMOS_MNEMONIC>" \
--ethereum-key="<DELEGATE_ETH_PRIVATE_KEY>" \
--cosmos-legacy-rpc="http://localhost:1317" \
--cosmos-grpc="http://localhost:9090" \
--ethereum-rpc="http://localhost:8545" \
--fees=footoken \
--contract-address="0xB48095a68501bC157654d338ce86fdaEF4071B24"
Restart=always
RestartSec=3
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target
# сохраняем файл 'Ctrl + S', закрываем редактор 'Ctrl + X'


# перезагружаем данные о сервисах, включаем сервис 'orchestratord' $ sudo systemctl daemon-reload $ sudo systemctl enable orchestratord $ sudo systemctl start orchestratord $ sudo systemctl restart althead $ sudo systemctl restart gethd $ sudo systemctl restart orchestratord # журнал сервиса $ sudo journalctl -u orchestratord -f
Сначала вы можете увидеть большое количество ошибок, но через пару десятков минут вывод должен прекратиться:

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


Testing Gravity
Сейчас мы поиграемся с переводами между сетями: Ethereum и Cosmos.
Ниже приведены 3 адреса с тестовыми монетами:
0xD7600ae27C99988A6CD360234062b540F88ECA43 - Bitcoin MAX (MAX) 0x7580bFE88Dd3d07947908FAE12d95872a260F2D8 - 2 Ethereum (E2H) 0xD50c0953a99325d01cca655E57070F1be4983b6b - Byecoin (BYE)
Следующая команда запрашивает с указанного ERC20-адреса тестовые монеты в сеть Cosmos, #ETH-TO-COSMOS:
Обратите внимание, что параметр "ethereum-key" заполнен, его не трогаем.
$ RUST_LOG=info client eth-to-cosmos \
--ethereum-key="0xb1bab011e03a9862664706fc3bbaa1b16651528e5f0e7fbfcbfdd8be302a13e7" \
--ethereum-rpc="http://localhost:8545" \
--contract-address="0xB48095a68501bC157654d338ce86fdaEF4071B24" \
--erc20-address="<ЛЮБОЙ_ИЗ_ТРЁХ_АДРЕСОВ>" \
--amount=1 \
--cosmos-destination="<DELEGATE_COSMOS_ADDRESS>"

На скриншоте я отправил транзакцию с запросом на первый эфир-адрес, давайте проверим баланс кошелька, на который я запросил монеты:
$ althea query bank balances <DELEGATE_COSMOS_ADDRESS>

Круто, теперь у меня на балансе появились какие-то "peggy".
Также можно отследить транзакцию в эксплорере:

Произведём обратную операцию, #COSMOS-TO-ETH:
$ RUST_LOG=info client cosmos-to-eth \
--cosmos-phrase="<DELEDATE_COSMOS_MNEMONIC>" \
--cosmos-legacy-rpc="http://localhost:1317" \
--cosmos-grpc="http://localhost:9090" \
--cosmos-denom="peggy0xD7600ae27C99988A6CD360234062b540F88ECA43" \
--amount=.5 \
--eth-destination="<DELEGATE_ETH_ADDRESS>"

На моём скриншоте вышла ошибка: означает, что синхронизация ноды чуть-чуть отстала. Пару секунд можно подождать и попробовать отправить транзакцию заново.
Со второго раза у меня получилось:

Транзакцию можно отследить в эксплорере:

How to unjail?
Чтобы выйти из тюрьмы:

$ althea tx slashing unjail --from <NICKNAME> --chain-id=althea-testnet1v5

Также добавим пару монет в стейк:
$ althea keys show <NICKNAME> --bech val

Вставляем свой адрес и никнейм:
$ althea tx staking delegate <ADDRESS> 9900000ualtg --from <NICKNAME> --chain-id althea-testnet1v5 --fees 50ualtg --broadcast-mode block

Проверяем статус валидатора:
$ althea query staking validator $(althea keys show <NICKNAME> --bech val --address)

Обновление сети (в случае выхода v1.6+)
# создаём временную папку $ mkdir -p althea-bin $ cd althea-bin # скачиваем необходимые файлы $ wget https://github.com/althea-net/althea-chain/releases/download/v0.0.5/althea-0.0.4-16-g6812f87-linux-amd64 $ mv althea-0.0.4-16-g6812f87-linux-amd64 althea $ wget https://github.com/althea-net/althea-chain/releases/download/v0.0.5/client $ wget https://github.com/althea-net/althea-chain/releases/download/v0.0.5/orchestrator $ wget https://github.com/althea-net/althea-chain/releases/download/v0.0.5/register-delegate-keys $ wget https://github.com/althea-net/althea-chain/releases/download/v0.0.5/relayer $ chmod +x * $ sudo mv * /usr/bin/ # скачиваем файл генезиса $ wget https://github.com/althea-net/althea-chain/releases/download/v0.0.5/althea-testnet1-v5-genesis.json $ cp althea-testnet1-v5-genesis.json $HOME/.althea/config/genesis.json # перезапускаем ноду $ althea unsafe-reset-all $ sudo systemctl stop althead $ althea start # ждём такой вывод, останавливаем 'Ctrl + C'

$ sudo systemctl restart althead $ sudo journalctl -u althead -f # ждём такой вывод, останавливаем 'Ctrl + C'

$ sudo systemctl restart gethd $ sudo systemctl restart orchestratord
Скорее всего вы попали в тюрьму, пока обновлялись. Это можно проверить командой:
$ althea query staking validator $(althea keys show <NICKNAME> --bech val --address)

В таком случае, необходимо выполнить команды из пункта "How to unjail".
Вывод
Тестнет интересный. Вряд ли гем, но ради опыта можно и поставить.
По наградам пусто. Администрация отмалчивается, но постоянно на связи и поможет в любом техническом вопросе.
Сам я смог поставить только со второго раза, потому что столкнулся с проблемой, которую даже вместе с админом не сумели решить.
Вторая нода - с полного нуля поставилась без проблем.
Возможно, и у вас выскочит какая-либо неприятная штука - милости прошу в дискорд канал команды. В беде вас не оставят.
Благодарности
мамичу за то, что родила такого гения.
Ссылки
Красивые оригинальные гайды.
Телеграм-канал @how_to_node, где я выкладываю свои гайды.
Телеграм-канал @crypto_watermelon, где мой товарищ выкладывает посты об интересных крипто-проектах и ивентах.