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

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

PEERS=239caa37cb0f131b01be8151631b649dc700cd97@95.217.200.36:46656,13b4b70206dc95be5e3ec3c511c0441c4354fc96@91.148.132.72:26656,2691bb6b296b951400d871c8d0bd94a3a1cdbd52@65.109.93.152:33656,c37e444f67af17545393ad16930cd68dc7e3fd08@95.216.7.169:61156,fbeb2b37fe139399d7513219e25afd9eb8f81f4f@65.21.170.3:38656,2cd65afacab69b6ebfa4f9a8435f5f7df5fbb735@135.181.160.61:32656,3d11a6c7a5d4b3c5752be0c252c557ed4acc2c30@167.235.57.142:36656,2c40b0aedc41b7c1b20c7c243dd5edd698428c41@138.201.85.176:26696,408ee86160af26ee7204d220498e80638f7874f4@161.97.109.47:38656,9edc978fd53c8718ef0cafe62ed8ae23b4603102@136.243.103.32:36656,ffe2d5ecb614762d5a1723f5f8b00d3feb6eb091@5.9.13.234:26686,5af3d50dcc231884f3d3da3e3caecb0deef1dc5b@142.132.134.112:25356,06f673591d9302c2beab5130b77bbb0a6a69364d@116.202.227.117:50656,cbe534c7d012e9eb4e71a5573aee8acc1adf4bc6@65.108.41.172:28056,9bcec17faba1b8f6583d37103f20bd9b968ac857@38.146.3.230:21656,1145755896d6a3e9df2f130cc2cbd223cdb206f0@209.145.53.163:29656,a23cc4cbb09108bc9af380083108262454539aeb@35.215.116.65:26656,8671c2dbbfd918374292e2c760704414d853f5b7@35.215.121.109:26656,b0968b57bcb5e527230ef3cfa3f65d5f1e4647dd@35.212.224.95:26656,62fa77951a7c8f323c0499fff716cd86932d8996@65.108.199.36:24214,d5519e378247dfb61dfe90652d1fe3e2b3005a5b@65.109.68.190:50656,b6b4a4c720c4b4a191f0c5583cc298b545c330df@65.109.28.219:21656,e54b02d103f1fcf5189a86abe542670979d2029d@65.109.85.170:58656,3aeec94e9567c66ad6bb76b496aff6d55fd53d32@65.109.171.22:26656,9dc1f555bd37d6840237f32a2cd4d79ba1c80cb5@65.108.227.112:31656,7416a65de3cc548a537dbb8bdf93dbd83fe401d2@78.107.234.44:26656,0465032114df76df206c9983968f2d229b3a50d6@88.198.32.17:39656,d5b2ae8815b09a30ab253957f7eca052dde3101d@65.108.9.164:24656,97ff540b57b89dd0b6737eddb92977523dd5a7b3@195.3.221.58:12656,124439d1c16b1ee7ca1a39961f02fadf8539cb81@38.102.85.10:26656,2155de2f62e75c9a5b0c013c756420dd23f59914@142.132.209.236:21656,a5c51dc585213f5ad1e4f6e46a1eca544d71b8ae@65.108.235.209:20656,f4538b599f92e695b26409c0bd7da7e3b32eec4d@95.216.114.212:30656,ac5089a8789736e2bc3eee0bf79ca04e22202bef@162.55.80.116:29656,4e309b79b9147a0243f6e0cbc824f86e10bd09de@65.109.234.254:50656,c0ee71c74858b339787320596b805ed631c48ebb@213.133.100.172:27433,4b54b62848bc09a68fc2cacb354fc6fcd10c8472@49.12.123.97:56656,7ee8ece35c778418302ac085817d835b67043871@116.203.245.212:26656,affee2f485ca15c68c302ad98e8de41fcd0e71ba@162.19.238.49:26656,dc19e5d986ea79e70180cfbee7789de9cd79e14e@95.217.57.232:56656,fb10560d2e3aea7948a375dc87140c156a07acc4@195.201.83.242:17656,d33d825c394e622776d519c4add5186f85548664@178.128.84.49:50656,8a8b9a8a58c922a7693715100710697ec69b1478@65.109.92.235:11086,c43c0b1197f60cde53cb94b18d05a8d64d71a72a@162.55.245.219:50656,f6d6e625759814e157457a5889961e02dba26ba6@65.109.92.240:37096,ade4d8bc8cbe014af6ebdf3cb7b1e9ad36f412c0@176.9.82.221:21656,9aa8a73ea9364aa3cf7806d4dd25b6aed88d8152@190.2.136.144: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]. Пишем только по делу.