March 7, 2023

 OJO network node (ojo-devnet)

Discord | Twitter | Github | Explorer

Мінімальні рекомендовані апаратні вимоги для запуску валідатора:

  • 4 ядра ЦП
  • 8 ГБ оперативної пам'яті
  • 200 ГБ SSD
  • Ubuntu 20.04

Нода

# підготовка сервера
sudo apt update && sudo apt upgrade -y
sudo apt install curl build-essential git wget jq make gcc tmux chrony -y
# ставимо Go (однією командою)
ver="1.20.1" 
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
# задаємо перемінні

#придумуємо назву ноди та міняємо замість <your_moniker>
OJO_MONIKER=<your_node_name>
# зберігаємо перемінні в bash
echo 'export OJO_MONIKER='$OJO_MONIKER >> $HOME/.bash_profile
echo "export OJO_CHAIN_ID=ojo-devnet" >> $HOME/.bash_profile
echo "export OJO_PORT=17" >> $HOME/.bash_profile
source $HOME/.bash_profile
# качаємо бінарні файли
cd $HOME 
wget https://github.com/ojo-network/ojo/releases/download/v0.1.2/ojod-v0.1.2-linux-amd64.tar.gz 
tar -xvzf ojod-v0.1.2-linux-amd64.tar.gz 
sudo chmod +x ojod && sudo mv ./ojod /usr/local/bin/ojod 
sudo rm -rf ojod_linux_amd64.tar.gz

ojod version
# version: v0.1.2
# ініціалізовуємо ноду
ojod init $OJO_MONIKER --chain-id $OJO_CHAIN_ID
# качаємо генезис
curl -s https://rpc.devnet-n0.ojo-devnet.node.ojo.network/genesis | jq -r .result.genesis > $HOME/.ojo/config/genesis.json

Налаштовуємо порти

# config.toml
sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:${OJO_PORT}658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:${OJO_PORT}657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:${OJO_PORT}061\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:${OJO_PORT}656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":${OJO_PORT}660\"%" $HOME/.ojo/config/config.toml

# app.toml
sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:${OJO_PORT}90\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:${OJO_PORT}91\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1${OJO_PORT}7\"%" $HOME/.ojo/config/app.toml

# client.toml
sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:${OJO_PORT}657\"%" $HOME/.ojo/config/client.toml

external_address=$(wget -qO- eth0.me) 
sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:${OJO_PORT}656\"/" $HOME/.ojo/config/config.toml

Налаштовуємо конфіг

ojod config chain-id $OJO_CHAIN_ID
ojod config keyring-backend test

# налаштовуємо мінімальну ціну за газ, додаємо сіди/піриsed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.025uojo\"/;" ~/.ojo/config/app.toml
sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.025uojo\"/;" ~/.ojo/config/app.toml
SEEDS=""
PEERS="affee2f485ca15c68c302ad98e8de41fcd0e71ba@162.19.238.49:26656,0465032114df76df206c9983968f2d229b3a50d6@88.198.32.17:39656,f474a520009496972515f843cdb835fc7d663779@65.109.23.114:21656,97ff540b57b89dd0b6737eddb92977523dd5a7b3@195.3.221.58:12656,9dc1f555bd37d6840237f32a2cd4d79ba1c80cb5@65.108.227.112:31656,8671c2dbbfd918374292e2c760704414d853f5b7@35.215.121.109:26656,a23cc4cbb09108bc9af380083108262454539aeb@35.215.116.65:26656,d33d825c394e622776d519c4add5186f85548664@178.128.84.49:50656,5af3d50dcc231884f3d3da3e3caecb0deef1dc5b@142.132.134.112:25356,fb10560d2e3aea7948a375dc87140c156a07acc4@195.201.83.242:17656"
sed -i.bak -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.ojo/config/config.toml
# Налаштовуємо прунінг
pruning="custom" 
pruning_keep_recent="100" 
pruning_keep_every="0" 
pruning_interval="10" 
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
State Sync
STATE_SYNC_RPC="http://207.180.243.64:36657"

LATEST_HEIGHT=$(curl -s $STATE_SYNC_RPC/block | jq -r .result.block.header.height)
SYNC_BLOCK_HEIGHT=$(($LATEST_HEIGHT - 2000))
SYNC_BLOCK_HASH=$(curl -s "$STATE_SYNC_RPC/block?height=$SYNC_BLOCK_HEIGHT" | jq -r .result.block_id.hash)

sed -i \
  -e "s|^enable *=.*|enable = true|" \
  -e "s|^rpc_servers *=.*|rpc_servers = \"$STATE_SYNC_RPC,$STATE_SYNC_RPC\"|" \
  -e "s|^trust_height *=.*|trust_height = $SYNC_BLOCK_HEIGHT|" \
  -e "s|^trust_hash *=.*|trust_hash = \"$SYNC_BLOCK_HASH\"|" \
  -e "s|^persistent_peers *=.*|persistent_peers = \"$STATE_SYNC_PEER\"|" \
  $HOME/.ojo/config/config.toml
# cтворюємо сервісний файл (Одна команда)
sudo tee /etc/systemd/system/ojod.service > /dev/null <<EOF 
[Unit] 
Description=ojo 
After=network-online.target 

[Service] 
User=$USER 
ExecStart=/usr/local/bin/ojod start 
Restart=on-failure RestartSec=3 
LimitNOFILE=65535 

[Install] 
WantedBy=multi-user.target 

EOF
# запускаємо ноду
sudo systemctl daemon-reload 
sudo systemctl enable ojod 
sudo systemctl restart ojod && sudo journalctl -u ojod -f -o cat
# подивитись логи
sudo journalctl -u ojod -f -o cat

# Вихід з логів через ctrl+c

Addrbook

wget -O $HOME/.ojo/config/addrbook.json "https://raw.githubusercontent.com/EnterStake/cosmosguides/main/Ojo/addrbook.json"

sudo systemctl restart ojod && sudo journalctl -u ojod -f
# перевірити статус синхронізації
ojod status 2>&1 | jq "{catching_up: .SyncInfo.catching_up}"

# "catching_up": false - означає що нода синхронізувалась (чекаємо false)
# створюємо/відновлюємо гаманець
ojod keys add wallet
ojod keys add wallet --recover
# зберігаємо адресу 
# Замініть <your_address> на адресу вашого гаманця
OJO_ADDRESS=<your_address>
echo "export OJO_ADDRESS=$OJO_ADDRESS" >> $HOME/.bash_profile
source $HOME/.bash_profile
# перевіряємо баланс
ojod q bank balances $OJO_ADDRESS

Валідатор

ojod tx staking create-validator \
  --amount 10000000uojo  \
  --from wallet
  --commission-max-change-rate "0.01" \
  --commission-max-rate "0.2" \
  --commission-rate "0.05" \
  --min-self-delegation "1" \
  --pubkey  $(ojod tendermint show-validator) \
  --moniker <назва ноди> \
  --identity=<identity> \
  --website="Посилання на свій сат чи сторінку в інтернеті" \
  --details="Кілька слів про себе" \
  --chain-id $OJO_CHAIN_ID \
  --fees=5500uojo \
  --gas=auto -y
# записуємо valoper_address в bash 
# Замінюємо <your_valoper_address> на адресу валідатора, починається на nibivaloper...
OJO_VALOPER=<your_valoper_address> 
echo "export OJO_VALOPER=$OJO_VALOPER" >> $HOME/.bash_profile 
source $HOME/.bash_profile
Зберігаємо priv_validator_key.json що знаходиться за адресою /root/.ojo/config/
# заделегувати у свого валідатора (1nibi = 1000000unibi) 
ojod tx staking delegate $OJO_VALOPER 1000000uojo --from wallet --chain-id ojo-devnet --gas-prices 0.1uojo --gas-adjustment 1.5 --gas auto -y