1️⃣ Ноды
March 7, 2023

Установка ноды Ojo (ojo-devnet)

  1. Описание проекта
  2. Автоматическая установка (скрипт)
  3. Ручная установка ноды
  4. Установка PF (Price Feeder)
  5. Работа с кошельком
  6. Работа с валидатором
  7. Удаление ноды
  8. Полезные команды

Описание проекта

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

OJO построен с использованием распределенного набора валидаторов для сбора и агрегирования точных ценовых данных в режиме реального времени. Ценовой оракул OJO поддерживает любые и все активы IBC, обновляя цены на собственной скорости в экосистеме Cosmos.

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


Текущая стадия - невознаграждаемый тестнет (вознаграждаемая стадия перед майнетом)

Минимальные требования к серверу:

CPU - 4 ядра;

RAM - 16 Gb;

SSD - 200 Gb;

Ubuntu 20.04.

Explorer сети: https://ojo.explorers.guru

Деном: uojo

Сайт: https://ojo.network

Дискорд: https://discord.gg/8NX6qtZ5kE

Документация: https://docs.ojo.network

Автоматическая установка

Подключаемся к серверу через Putty или MobaXterm, после чего приступаем к установке.

В установочный файл встроен снапшот (поэтому рекомендуется установку запускать через screen)

Запускаем автоматический скрипт для установки:

wget -q -O ojo.sh https://nodes.wenmoney.io/ojo.sh && chmod +x ojo.sh && ./ojo.sh

Во время установки нода запросит ввести имя для вашей ноды. Также добавлена возможность задать кастомные порты (если устанавливаете ноду на сервер где уже работает любая Cosmos-нода).

Также мы сделали шпаргалку с командами по работе с нодами в сети Cosmos, пригодится каждому - https://teletype.in/@wen_money/cheat-sheet-cosmos-nodes

Ручная установка ноды

Каждая строка - отдельная команда (если не указано иначе). Ручная установка предусматривает использование стандартных портов для Cosmos-ноды, если хотите кастомизированные порты, то используйте автоматический скрипт для установки.

В первую очередь обновляем репозиторий и устанавливаем необходимые пакеты:

sudo apt update && sudo apt upgrade -y
sudo apt install build-essential pkg-config libssl-dev git jq wget make gcc nano htop net-tools screen lz4 -y < "/dev/null"

Если сервер "чистый", то устанавливаем Go (1.19.1):

wget -q -O go_install.sh https://nodes.wenmoney.io/go_install.sh && chmod +x go_install.sh && ./go_install.sh

Вводим имя своей ноды и устанавливаем CHAIN_ID:

read -p "Введите имя ноды: " OJO_NODENAME
echo 'export OJO_NODENAME='\"${OJO_NODENAME}\" >> $HOME/.bash_profile
echo "export OJO_CHAIN_ID=ojo-devnet" >> $HOME/.bash_profile
source $HOME/.bash_profile

Далее компилируем ноду из исходников:

cd $HOME
git clone https://github.com/ojo-network/ojo ojo && cd ojo
git checkout v0.1.2
make install
ojod version

Инициализируем и настраиваем ноду:

ojod init $OJO_NODENAME --chain-id $OJO_CHAIN_ID && sleep 2
source $HOME/.bash_profile

wget -O genesis.json https://snapshots.polkachu.com/testnet-genesis/ojo/genesis.json --inet4-only
mv genesis.json ~/.ojo/config

sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.0025uojo\"/;" ~/.ojo/config/app.toml
sed -i 's/max_num_inbound_peers =.*/max_num_inbound_peers = 50/g' $HOME/.ojo/config/config.toml
sed -i 's/max_num_outbound_peers =.*/max_num_outbound_peers = 50/g' $HOME/.ojo/config/config.toml
sed -i -e "s/^filter_peers *=.*/filter_peers = \"true\"/" $HOME/.ojo/config/config.toml

indexer="null"
sed -i -e "s/^indexer *=.*/indexer = \"$indexer\"/" $HOME/.ojo/config/config.toml

pruning="custom"
pruning_keep_recent="1000"
pruning_keep_every="0"
pruning_interval="50"

sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.ojo/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.ojo/config/app.toml
sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.ojo/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.ojo/config/app.toml

sed -i 's/seeds = ""/seeds = "ade4d8bc8cbe014af6ebdf3cb7b1e9ad36f412c0@testnet-seeds.polkachu.com:21656"/' ~/.ojo/config/config.toml

Добавляем пиры для подключения к сети:

[email protected]:46656,[email protected]:26656,[email protected]:33656,[email protected]:61156,[email protected]:38656,[email protected]:32656,[email protected]:36656,[email protected]:26696,[email protected]:38656,[email protected]:36656,[email protected]:26686,[email protected]:25356,[email protected]:50656,[email protected]:28056,[email protected]:21656,[email protected]:29656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:24214,[email protected]:50656,[email protected]:21656,[email protected]:58656,[email protected]:26656,[email protected]:31656,[email protected]:26656,[email protected]:39656,[email protected]:24656,[email protected]:12656,[email protected]:26656,[email protected]:21656,[email protected]:20656,[email protected]:30656,[email protected]:29656,[email protected]:50656,[email protected]:27433,[email protected]:56656,[email protected]:26656,[email protected]:26656,[email protected]:56656,[email protected]:17656,[email protected]:50656,[email protected]:11086,[email protected]:50656,[email protected]:37096,[email protected]:21656,[email protected]:11556
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.ojo/config/config.toml

Создаем сервисный файл:

echo "
[Unit]
Description=Ojo Node
After=network-online.target
[Service]
User=$USER
Type=simple
ExecStart=$(which ojod) start
Restart=on-failure
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target" > $HOME/ojod.service  

И переносим его к службам:

sudo mv $HOME/ojod.service /etc/systemd/system

Устанавливаем снапшот для быстрой синхронизации:

curl -o - -L https://snapshots.polkachu.com/testnet-snapshots/ojo/ojo_301747.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.ojo

Запускаем ноду:

sudo systemctl daemon-reload
sudo systemctl enable ojod
sudo systemctl restart ojod

Чекаем логи что все завелось и работает как надо:

journalctl -u ojod -f -o cat

Установка PF (Price Feeder)

Чтобы присоединиться к тестнету необходимо помимо самой ноды поднять оракул или так называемый Price Feeder (ставится поверх самой ноды). Его отсутствие приведет к тому, что валидатор окажется в тюрьме!

Чтобы запустить pricefeeder, валидатор должен быть в актив-сете. В противном случае price feeder не будет голосовать.

В данном гайде я использую оракул на тот же кошелек и valoper что и основной валидатор. Директория будет называться по-умолчанию price-feeder.

Создадим переменную с домашней директорией для удобства и запомним ее:

OJO_HOME="$HOME/.ojo"
echo "export OJO_HOME=${OJO_HOME}" >> $HOME/.bash_profile
source $HOME/.bash_profile

Скачаем и скомпилируем PF:

cd $HOME
git clone https://github.com/ojo-network/price-feeder
cd price-feeder
git checkout v0.1.1
make install

Зададим необходимо для работы PF переменные и сохраним их:

OJO_KEYRING="os"
OJO_KEYRING_PASSWORD="YOUR_KEYRING_PASSWORD"
OJO_RPC_PORT=26657
OJO_GRPC_PORT=9090
echo "
export OJO_KEYRING=${OJO_KEYRING}
export OJO_KEYRING_PASSWORD=${OJO_KEYRING_PASSWORD}
export OJO_RPC_PORT=${OJO_RPC_PORT}
export OJO_GRPC_PORT=${OJO_GRPC_PORT}
" >> $HOME/.bash_profile
source $HOME/.bash_profile

Значением YOUR_KEYRING_PASSWORD может выступить паролем от вашего кошелька, OJO_RPC_PORT и OJO_GRPC_PORT в случае кастомизации можете посмотреть в своем .bash_profile (оставьте по-умолчанию если не кастомизировали порты).

Скачиваем конфиг-файл для PF и настраиваем его:

mkdir -p $HOME/price-feeder-config
wget -O $HOME/price-feeder-config/price-feeder.toml "https://raw.githubusercontent.com/ojo-network/price-feeder/main/price-feeder.example.toml"

sed -i '/^dir *=.*/a pass = ""' $HOME/price-feeder-config/price-feeder.toml

sed -i "s/^address *=.*/address = \"$OJO_ADDRESS\"/;\
s/^chain_id *=.*/chain_id = \"$OJO_CHAIN_ID\"/;\
s/^validator *=.*/validator = \"$OJO_VALOPER\"/;\
s/^backend *=.*/backend = \"$OJO_KEYRING\"/;\
s|^dir *=.*|dir = \"$OJO_HOME\"|;\
s|^pass *=.*|pass = \"$OJO_KEYRING_PASSWORD\"|;\
s|^grpc_endpoint *=.*|grpc_endpoint = \"localhost:${OJO_GRPC_PORT}\"|;\
s|^tmrpc_endpoint *=.*|tmrpc_endpoint = \"http://localhost:${OJO_RPC_PORT}\"|;" $HOME/price-feeder-config/price-feeder.toml

Создаем сервисный файл для PF:

echo "
[Unit]
Description=Ojo PF
After=network-online.target
[Service]
User=$USER
Environment="PRICE_FEEDER_PASS=${OJO_KEYRING_PASSWORD}"
Type=simple
ExecStart=$(which price-feeder) $HOME/price-feeder-config/price-feeder.toml --log-level debug
Restart=on-failure
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target" > $HOME/price-feeder.service

И переносим его к службам:

sudo mv $HOME/price-feeder.service /etc/systemd/system

Запускаем и смотрим логи:

sudo systemctl daemon-reload
sudo systemctl enable price-feeder
sudo systemctl start price-feeder && journalctl -u price-feeder -f -o cat

В течение 3-5 минут в логах будут ошибки (ERR), затем они должны исчезнуть.

Пример рабочего лога PF:

Работа с кошельком

Если вы создаете / восстанавливаете кошелек вручную, то для начала создадим переменную (имя кошелька) и запишем ее в bash_profile для удобства:

source .bash_profile
wallet="wallet"
echo "export OJO_WALLET=$wallet" >> $HOME/.bash_profile

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

source .bash_profile
ojod keys add $OJO_WALLET --keyring-backend os

Не забываем сохранить мнемонику кошелька!

Получаем адрес кошелька и VALOPER и запишем их в bash_profile для удобства:

OJO_ADDRESS=$(ojod keys show $OJO_WALLET -a --keyring-backend os)
OJO_VALOPER=$(ojod keys show $OJO_WALLET --bech val -a --keyring-backend os)
echo 'export OJO_ADDRESS='${OJO_ADDRESS} >> $HOME/.bash_profile
echo 'export OJO_VALOPER='${OJO_VALOPER} >> $HOME/.bash_profile
source $HOME/.bash_profile

Проверяем баланс кошелька:

ojod query bank balances $OJO_ADDRESS

Баланс кошелька отобразится только в том случае, когда нода полностью синхронизируется с сетью!

Для получения тестовых токенов переходите в дискорд получаете роль в канале #pick-a-role и затем просите токены в #general чате.

Работа с валидатором

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

Создаем валидатора:

ojod tx staking create-validator \
--amount=1000000uojo \
--pubkey=$(ojod tendermint show-validator) \
--moniker $OJO_NODENAME \
--chain-id $OJO_CHAIN_ID \
--commission-rate=0.1 \
--commission-max-rate=0.2 \
--commission-max-change-rate=0.05 \
--min-self-delegation=1 \
--node https://ojo-testnet-rpc.polkachu.com:443  \
--from=$OJO_WALLET

После чего идем в эксплоер и по txhash проверяем транзакцию на предмет успешного создания валидатора (если Success, то валидатор корректно создан).

Делегировать токены в своего валидатора (в примере делегируется 1 токен):

ojod tx staking delegate $OJO_VALOPER 1000000uojo --from $OJO_WALLET --chain-id $OJO_CHAIN_ID --node https://ojo-testnet-rpc.polkachu.com:443 -y

После чего идем в эксплоер и по txhash проверяем транзакцию на предмет успешного делегирования (если Success, то делегирование прошло успешно).

Также мы сделали шпаргалку с командами по работе с нодами в сети Cosmos, пригодится каждому - https://teletype.in/@wen_money/cheat-sheet-cosmos-nodes

Удаление ноды

Для удаления ноды выполните команду (это одна команда, или просто запустите установщик, там есть команда на удаление ноды) :

systemctl disable ojod && \
rm /etc/systemd/system/ojod.service && \
systemctl daemon-reload && \
cd $HOME && \
rm -rf .ojo ojo && \
rm -rf $(which ojod)

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

Список полезных команд, пригодится каждому.

Проверить последний синхронизированный блок:

ojod status 2>&1 | jq ."SyncInfo"."latest_block_height"

Проверить логи:

sudo journalctl -u ojod -f -o cat

Проголосовать за предложение (говернанс) c ID=1:

ojod tx gov vote 1 yes --from $OJO_WALLET --keyring-backend os --chain-id $OJO_CHAIN_ID --node https://ojo-testnet-rpc.polkachu.com:443 -y

Не забывайте ставить свои 👍


Есть вопросы или не работает нода после установки? Задавайте их в нашем телеграмм-канале Wen Money:[NODES]. Пишем только по делу.