Guides / Instructions how to run a node
August 30, 2022

Устанавливаем ноду HAQQ / Islamic Coin (Russian Edition)

Если вкратце, то HAQQ - это масштабируемый, высокопроизводительный блокчейн Proof-of-Stake, полностью совместимый и взаимодействующий с Ethereum. Основные тезисы которые я бы выдедил:

  • Islamic Coin (Исламская монета) стремится привлечь исламский финансовый сектор в криптовалюту, причем на 2020 год объем денежных средств там составлял 2.88 триллиона долларов, к 2024 году ожидается увеличение до 3.69 триллиона долларов;
  • Islamic Coin / HAQQ получил фетву (решение о том, что продукт соответствует Шариату), изданную ведущими мировыми экспертами в области Ислама. То есть 2 миллиарда мусульман официально могут использовать эту валюту, и она не противоречит религиозным принципам;
  • Масштабируемый и быстрый EVM (виртуальная машина Эфириума) совместимый блокчейн;
  • Есть возможность работать с экосистемой Cosmos;
  • Над проектом работают очень опытные финансисты, которые управляли миллиардными оборотами;
  • Блокчейн HAQQ уже привлек 200 миллионов долларов инвестиций в приватном seed раунде.

Подготовка

Нам нужен будет сервер Ubuntu 22.04 и следующие характеристики:

  • 4 Cores (modern CPU's)
  • 8GB RAM
  • 100GB_SSD of disk space
  • Постоянное подключение к Интернету (трафик будет не менее 10 Мбит/с во время тестовой сети) Хотя бы 100 Мбит/с должно быть у вас.

Лоукостерные серваки можно арендовать у сдедующих провайдеров по скидкам:

Как я устанавливал HAQQ ноду на сервер от DigitalOcean можно для наглядности зыркнуть на моём Youtube канале.

Раз уж вы решили установить ноду, настоятельно рекомендую подписаться на их официальные медиа:

Islamic Coin Discord

Islamic Coin Twitter

Islamic Coin Telegram

Установка и настройка ноды HAQQ

1. Обновляем пакеты:
sudo apt update && sudo apt upgrade -y
2. Устанавливаем дополнительные пакеты:
sudo apt install curl build-essential git wget jq make gcc tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev -y
3. Устанавливаем GO и проверяем версию:
ver="1.18.3" && \
cd $HOME && \
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
4. Скачиваем и устанавливаем бинарники с Github:
git clone https://github.com/haqq-network/haqq.git
cd haqq
make install
chmod +x /root/go/bin/haqqd && sudo mv /root/go/bin/haqqd /usr/local/bin/
cd $HOME
5. Задаем переменные, вместо user_name придумываем свое имя (латинскими буквами ребята!):
MONIKER="user_name" 
CHAIN="haqq_53211-1" 
WALLET_NAME="user_name"
6. Добавляем все в баш профиль:
echo 'export MONIKER='${MONIKER} >> $HOME/.bash_profile
echo 'export CHAIN='${CHAIN} >> $HOME/.bash_profile
echo 'export WALLET_NAME='${WALLET_NAME} >> $HOME/.bash_profile
source $HOME/.bash_profile
7. Инициализируем ноду:
haqqd init $MONIKER --chain-id $CHAIN
8. Прописываем имя сети в Config:
haqqd config chain-id $CHAIN
9. Скачиваем снепшот генезиса и проверяем его:
curl -OL https://storage.googleapis.com/haqq-testedge-snapshots/genesis.json
mv genesis.json $HOME/.haqqd/config/genesis.json
haqqd validate-genesis
10. Сбрасываем состояние валидатора:
haqqd tendermint unsafe-reset-all --home $HOME/.haqqd
11. Настраиваем синхронизацию:
curl -OL https://raw.githubusercontent.com/haqq-network/testnets/main/TestEdge/state_sync.sh
chmod +x state_sync.sh ./state_sync.sh
12. Настраиваем прунинг:
pruning="custom" && \
pruning_keep_recent="100" && \
pruning_keep_every="0" && \
pruning_interval="50" && \
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.haqqd/config/app.toml && \
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.haqqd/config/app.toml && \
sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.haqqd/config/app.toml && \
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.haqqd/config/app.toml
13. Выключаем индексер:
indexer="null" && \
sed -i -e "s/^indexer *=.*/indexer = \"$indexer\"/" $HOME/.haqqd/config/config.toml
14. Создаем сервис файл:
sudo tee /etc/systemd/system/haqqd.service > /dev/null <<EOF
[Unit]
Description=haqqd
After=network-online.target

[Service]
User=$USER
ExecStart=$(which haqqd) start
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF
15. Запускаем сервис.
sudo systemctl daemon-reload && \
sudo systemctl enable haqqd && \
sudo systemctl restart haqqd
16. Дабы ускорить процесс синхронизации, нужно прознести следующее заклинание:
sudo systemctl stop haqqd
haqqd tendermint unsafe-reset-all --home $HOME/.haqqd
SEEDS="[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656"
PEERS=""; \
sed -i.bak -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.haqqd/config/config.toml
wget -O $HOME/.haqqd/config/addrbook.json "https://raw.githubusercontent.com/StakeTake/guidecosmos/main/haqq/haqq_53211-1/addrbook.json"
SNAP_RPC="http://haqq.stake-take.com:36657"
LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 2000)); \
TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash)
echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH

sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"| ; \
s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\"\"|" $HOME/.haqqd/config/config.toml
sudo systemctl restart haqqd && journalctl -u haqqd -f -o cat
17. Всё, на этом этапе у нас пошли логи. Глядим что у нас с логами (устаём смотреть - клацаем CTR+C). Хотим ещё раз глятунь, призываем команду:
sudo journalctl -u haqqd -f -o cat
18. Далее смотрим на статус синхронизации. Нам нужно, чтобы catching_up показывало false. Придётся какое то время подождать пока нода все чехлы соберёт.
curl localhost:26657/status
19. Далее переходим к созданию нового кошеля или воссоздания имеющего при помощи мнемоника.
  • Создаём новый кошелёк:
haqqd keys add $WALLET_NAME
  • Восстанавливаем существующий:
haqqd keys add $WALLET_NAME --recover
20. Добавляем переменную с адресом кошелька:
WALLET_ADDRESS=$(haqqd keys show $WALLET_NAME -a)
21. Добавляем переменную в баш профиль:
echo 'export WALLET_ADDRESS='${WALLET_ADDRESS} >> $HOME/.bash_profile
source $HOME/.bash_profile

Далее нам нужно, чтоб нам отсыпали тестовые токены $ISLM. Для этого нам понадобится Chrome, MetaMask и профиль на Github.

Переходим на официальную просилку тестовых монет. Логинимся с помощью Github. Подключаем метамаск. Добовляем тестовую сеть и клеймим токены.

22. Возвращаемся в терминал. И проверяем баланс.
haqqd query bank balances $WALLET_ADDRESS
23. Монетки мы свои получили и теперь давайте уже перейдём к созданию валидатора. Показываю на примере 500 монет $ISLM.

1 ISLM = 1000000000000000000 aISLM (18 бубликов)

haqqd tx staking create-validator \
  --amount=500000000000000000000aISLM \
  --pubkey=$(haqqd tendermint show-validator) \
  --moniker=$MONIKER \
  --chain-id=haqq_53211-1 \
  --commission-rate="0.10" \
  --commission-max-rate="0.20" \
  --commission-max-change-rate="0.01" \
  --min-self-delegation="1000000" \
  --gas="auto" \
  --from=$WALLET_NAME \
  --node https://rpc.tm.testedge.haqq.network:443
24. Задаем переменную с адресом валидатора:
VALOPER=$(haqqd keys show $WALLET_ADDRESS --bech val -a)
25. Добавляем ее в баш профиль:
echo 'export VALOPER='${VALOPER} >> $HOME/.bash_profile
source $HOME/.bash_profile
26. Проверяем статуса валидатора:
haqqd query staking validator $VALOPER
27. Давайте делегирнём себе 10 токенов:
haqqd tx staking delegate $VALOPER 10000000000000000000aISLM --from $WALLET_NAME --chain-id haqq_53211-1
28. И для галочки заделегируем 10 монет другому валидатору. В знак признательности можете кинуть мне. В команде прописываю свой адресс
haqqd tx staking delegate haqqvaloper1c7ft8zfrk6h34vhtml0vh20au9g4zya05xd8m5 10000000000000000000aISLM --from $WALLET_NAME --chain-id haqq_53211-1

Вуаля, вы молодцы - справились.

Теперь после установки ноды можно отправить форму регистрации валидатора.

Где запалить наши транзакции в HAQQ?

Представляю вашему вниманию три эксплорера которые мне удалось найти

Полезные команды

Снести полностью ноду
sudo systemctl stop haqqd && \
sudo systemctl disable haqqd && \
rm /etc/systemd/system/haqqd.service && \
sudo systemctl daemon-reload && \
cd $HOME && \
rm -rf .haqqd && \
rm -rf haqq && \
rm -rf $(which haqqd)
Перезагрузить ноду
sudo systemctl daemon-reload && \
sudo systemctl enable haqqd && \
sudo systemctl restart haqqd && \
sudo journalctl -u haqqd -f -o cat
Снять награду
haqqd tx distribution withdraw-all-rewards --from $WALLET_NAME --fees=000aISLM --chain-id $CHAIN
Информация по валидатору
haqqd status 2>&1 | jq .ValidatorInfo
Информация по ноде
haqqd status 2>&1 | jq .NodeInfo
Как выйти из тюрьмы
haqqd tx slashing unjail \
  --broadcast-mode=block \
  --from=$WALLETNAME \
  --chain-id=$CHAIN_ID \
  --gas=auto 
  --fees 250aISLM

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