Установка ноды Ojo (ojo-devnet)
- Описание проекта
- Автоматическая установка (скрипт)
- Ручная установка ноды
- Установка PF (Price Feeder)
- Работа с кошельком
- Работа с валидатором
- Удаление ноды
- Полезные команды
Описание проекта
Ojo - это децентрализованная сеть оракулов, ориентированная на безопасность и созданная для поддержки экосистемы Cosmos. Ojo будет получать ценовые данные из разнообразного каталога источников в сети и вне сети и использовать передовые механизмы безопасности, чтобы гарантировать целостность предоставляемых данных.
OJO построен с использованием распределенного набора валидаторов для сбора и агрегирования точных ценовых данных в режиме реального времени. Ценовой оракул OJO поддерживает любые и все активы IBC, обновляя цены на собственной скорости в экосистеме Cosmos.
OJO использует криптографические доказательства и схему фиксации-разоблачения вне сети для создания наиболее надежных данных на сети. OJO начинает с того, что является самым высокопроизводительным ценовым оракулом, но его применение выходит за рамки ценовых данных и включает кросс-чейн доказательства, обновления проверки статуса и многое другое.
Текущая стадия - невознаграждаемый тестнет (вознаграждаемая стадия перед майнетом)
Минимальные требования к серверу:
Explorer сети: https://ojo.explorers.guru
Сайт: 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
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), затем они должны исчезнуть.
Работа с кошельком
Если вы создаете / восстанавливаете кошелек вручную, то для начала создадим переменную (имя кошелька) и запишем ее в 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