Guides
December 11, 2022

Nibiru: Installation Guide

Nibiru — это независимый PoS блокчейн, который объединяет торговлю деривативами с кредитным плечом, спотовую торговлю, стейкинг и предоставление облигационной ликвидности в единый пользовательский интерфейс, позволяющий пользователям более 40 блокчейнов торговать с кредитным плечом, используя набор компонуемых децентрализованных приложений.

Гайд актуален для версии 0.19.2 (chain_ID: nibiru-itn-1)

Тестнет эксплорер - http://explorer.nodera.org/nibiru/staking

DYOR:

Website
Discord
Twitter

Оглавление


Подготовка сервера

Оглавление

На данном этапе устанавливаю на сервере Hetzner - CPX31: 4 CPU, 8 GB RAM, 160 GB SSD

Обновляем пакеты

sudo apt update && sudo apt upgrade -y

Устанавливаем инструменты разработчика и необходимые пакеты

sudo apt install curl build-essential pkg-config libssl-dev git wget jq make gcc tmux chrony -y

Устанавливаем GO

wget https://go.dev/dl/go1.19.5.linux-amd64.tar.gz; \
rm -rv /usr/local/go; \
tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz && \
rm -v go1.19.5.linux-amd64.tar.gz && \
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> ~/.bash_profile && \
source ~/.bash_profile && \
go version

Установка ноды

Оглавление

Клонируем репозиторий проекта с нодой, переходим в папку с проектом и собираем бинарные файлы

cd $HOME 
git clone https://github.com/NibiruChain/nibiru.git
cd nibiru
git checkout v0.19.2
make install

Проверяем версию

nibid version
#v0.19.2

Создаем переменные

MONIKER_NIBIRU=вводим свое имя
CHAIN_ID_NIBIRU=nibiru-itn-1
PORT_NIBIRU=36

Сохраняем переменные, перезагружаем .bash_profile и проверяем значения переменных

echo "export MONIKER_NIBIRU="${MONIKER_NIBIRU}"" >> $HOME/.bash_profile
echo "export CHAIN_ID_NIBIRU="${CHAIN_ID_NIBIRU}"" >> $HOME/.bash_profile
echo "export PORT_NIBIRU="${PORT_NIBIRU}"" >> $HOME/.bash_profile
source $HOME/.bash_profile

echo -e "\nmoniker_NIBIRU > ${MONIKER_NIBIRU}.\n"
echo -e "\nchain_id_NIBIRU > ${CHAIN_ID_NIBIRU}.\n"
echo -e "\nport_NIBIRU > ${PORT_NIBIRU}.\n"

Настраиваем конфиг

nibid config chain-id $CHAIN_ID_NIBIRU
nibid config keyring-backend test
nibid config node tcp://localhost:${PORT_NIBIRU}657
sed -i -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.025unibi\"/" $HOME/.nibid/config/app.toml

Инициализируем ноду

nibid init $MONIKER_NIBIRU --chain-id $CHAIN_ID_NIBIRU

Загружаем генезис файл и адресбук

curl -Ls https://snapshots.kjnodes.com/nibiru-testnet/genesis.json > $HOME/.nibid/config/genesis.json
curl -Ls https://snapshots.kjnodes.com/nibiru-testnet/addrbook.json > $HOME/.nibid/config/addrbook.json

Добавляем сиды и пиры

sed -i -e "s|^seeds *=.*|seeds = \"3f472746f46493309650e5a033076689996c8881@nibiru-testnet.rpc.kjnodes.com:39659\"|" $HOME/.nibid/config/config.toml

Изменяем порты для возможности дальнейшего подселения других нод проектов экосистемы Космос на один сервер

sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:${PORT_NIBIRU}658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:${PORT_NIBIRU}657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:${PORT_NIBIRU}060\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:${PORT_NIBIRU}656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":${PORT_NIBIRU}660\"%" $HOME/.nibid/config/config.toml
sed -i.bak -e "s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:${PORT_NIBIRU}317\"%; s%^address = \":8080\"%address = \":${PORT_NIBIRU}080\"%; s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:${PORT_NIBIRU}090\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:${PORT_NIBIRU}091\"%" $HOME/.nibid/config/app.toml

Настраиваем прунинг

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

Сбрасываем данные

nibid tendermint unsafe-reset-all --home $HOME/.nibid

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

printf "[Unit]
Description=Nibiru Service
After=network.target

[Service]
Type=simple
User=$USER
ExecStart=$(which nibid) start --home $HOME/.nibid
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target" > /etc/systemd/system/nibid.service

Запускаем сервис и проверяем логи

sudo systemctl daemon-reload && \
sudo systemctl enable nibid && \
sudo systemctl restart nibid && \
sudo journalctl -u nibid -f -o cat

Ждем окончания синхронизации, проверить синхронизации можно командой

nibid status 2>&1 | jq .SyncInfo

Если вывод показывает false, синхронизация завершена.


Snapshot

Оглавление

Для ускорения синхронизации, можно использовать снэпшот от kjnodes

sudo systemctl stop nibid
cp $HOME/.nibid/data/priv_validator_state.json $HOME/.nibid/priv_validator_state.json.backup
rm -rf $HOME/.nibid/data

curl -L https://snapshots.kjnodes.com/nibiru-testnet/snapshot_latest.tar.lz4 | tar -Ilz4 -xf - -C $HOME/.nibid
mv $HOME/.nibid/priv_validator_state.json.backup $HOME/.nibid/data/priv_validator_state.jso

sudo systemctl restart nibid && \
sudo journalctl -u nibid -f -o catn

Создание кошелька и валидатора

Оглавление

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

nibid keys add $MONIKER_NIBIRU

Сохраняем мнемоник фразу в надежном месте!

Если вы участвовали в предыдущих тестнетах, восстанавливаем кошелек командой и вводим мнемоник фразу

nibid keys add $MONIKER_NIBIRU --recover

Создаем переменную с адресом кошелька и валидатора

WALLET_NIBIRU=$(nibid keys show $MONIKER_NIBIRU -a)
VALOPER_NIBIRU=$(nibid keys show $MONIKER_NIBIRU --bech val -a)

echo "export WALLET_NIBIRU="${WALLET_NIBIRU}"" >> $HOME/.bash_profile
echo "export VALOPER_NIBIRU="${VALOPER_NIBIRU}"" >> $HOME/.bash_profile
source $HOME/.bash_profile
echo -e "\nwallet_NIBIRU > ${WALLET_NIBIRU}.\n"
echo -e "\nvaloper_NIBIRU > ${VALOPER_NIBIRU}.\n"

Запрашиваем токены командой

FAUCET="https://faucet.testnet-2.nibiru.fi/" 
curl -X POST -d '{"address": "'"$WALLET_NIBIRU"'", "coins": ["10000000unibi","100000000000unusd"]}' $FAUCET

Проверяем свой баланс

nibid q bank balances $WALLET_NIBIRU

После завершения синхронизации и пополнении кошелька, создаем валидатора

nibid tx staking create-validator \
--amount 9000000unibi \
--from $WALLET_NIBIRU \
--commission-max-change-rate "0.01" \
--commission-max-rate "0.2" \
--commission-rate "0.07" \
--min-self-delegation "1" \
--pubkey  $(nibid tendermint show-validator) \
--moniker $MONIKER_NIBIRU \
--chain-id $CHAIN_ID_NIBIRU \
--min-self-delegation "1000000" \
--identity="" \
--details="" \
--website="" \
--fees=5000unibi \
-y

Проверяем своего валидатора в эксплорере - http://explorer.nodera.org/nibiru/staking

Мониторинг можно настроить с использованием Panic! бота по гайду - https://nodera.org/panic_bot


Обновление

Оглавление

Удаляем ноду и устанавливаем с нуля


Задания: стадия 1

Оглавление

Задания для делегаторов

Выполнение заданий из данного блока принесет 100 баллов.

  • Застейкать 1 NIBI в любого валидатора
nibid tx staking delegate <адрес_валидатора> 1000000unibi --chain-id $CHAIN_ID_NIBIRU--from $MONIKER_NIBIRU --fees 10000unibi --gas=300000 -y 
  • Собрать награды с делегаторов
nibid tx distribution withdraw-all-rewards --chain-id $CHAIN_ID_NIBIRU --from $MONIKER_NIBIRU --fees 10000unibi --gas=300000 -y
  • Ределегировать токены с одного валидатора на другого
nibid tx staking redelegate <адрес_валидатора_с_делегацией> <адрес_нового_валидатора> 1000000unibi --from=$MONIKER_NIBIRU --chain-id $CHAIN_ID_NIBIRU --fees=10000unibi --gas=300000 -y
  • Застейкать в оракул

В эксплорере выбираем валидатора с припиской "Oracle" в моникере и копируем его адрес валидатора в формате nibivaloper1....

nibid tx staking delegate <адрес_валидатора_с_оракулом> 1000000unibi --chain-id $CHAIN_ID_NIBIRU--from $MONIKER_NIBIRU --fees 10000unibi --gas=300000 -y 
  • Вывести токены из стейка
nibid tx staking unbond <адрес_валидатора_с_оракулом> 1000000unibi --chain-id $CHAIN_ID_NIBIRU--from $MONIKER_NIBIRU --fees 10000unibi --gas=300000 -y 

Задания для валидаторов

Выполнение заданий из данного блока принесет +125 баллов.

  • Создать валидатора

Инструкцию по созданию валидатора см. в разделе Создание кошелька и валидатора. Валидатор не обязательно должен быть в активе.

  • Не попасть в тюрьму

Ваш валидатор должен работать стабильно на протяжении всего тестнета


Задания для оракулов

Выполнение заданий из данного блока принесет +200 баллов.

  • Проголосовать в не менее 10000 VotePeriods
  • Использовать все пары в VotePeriods

Важно!! Для работы оракула Ваш валидатор должен находится в активном сете

Скачиваем и устанавливаем бинарные файлы

curl -s https://get.nibiru.fi/pricefeeder! | bash

Создаем второй кошелек для оракула

nibid keys add feeder_nibiru

Создаем переменные

export FEEDER_NIBIRU=$(nibid keys show feeder_nibiru -a)
export GRPC_NIBIRU="localhost:${PORT_NIBIRU}090"
export WS_NIBIRU="ws://localhost:${PORT_NIBIRU}657/websocket"
export SYMBOLS_NIBIRU='{ "bitfinex": { "ubtc:uusd": "tBTCUSD", "ueth:uusd": "tETHUSD", "uusdt:uusd": "tUSTUSD" }, "binance": { "ubtc:uusd": "BTCUSD", "ueth:uusd": "ETHUSD", "uusdt:uusd": "USDTUSD", "uusdc:uusd": "USDCUSD", "uatom:uusd": "ATOMUSD", "ubnb:uusd": "BNBUSD", "uavax:uusd": "AVAXUSD", "usol:uusd": "SOLUSD", "uada:uusd": "ADAUSD", "ubtc:unusd": "BTCUSD", "ueth:unusd": "ETHUSD", "uusdt:unusd": "USDTUSD", "uusdc:unusd": "USDCUSD", "uatom:unusd": "ATOMUSD", "ubnb:unusd": "BNBUSD", "uavax:unusd": "AVAXUSD", "usol:unusd": "SOLUSD", "uada:unusd": "ADAUSD" } }'
export FEEDER_MNEMONIC_NIBIRU="мнемоник фраза второго кошелька"

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

printf "[Unit]
Description=Nibiru feeder
Requires=network-online.target
After=network-online.target

[Service]
Type=exec
User=$USER
Group=<your group>
ExecStart=/usr/local/bin/pricefeeder
Restart=on-failure
ExecReload=/bin/kill -HUP $MAINPID
KillSignal=SIGTERM
PermissionsStartOnly=true
LimitNOFILE=65535
Environment=CHAIN_ID='$CHAIN_ID_NIBIRU'
Environment=GRPC_ENDPOINT='$GRPC_NIBIRU'
Environment=WEBSOCKET_ENDPOINT='$WS_NIBIRU'
Environment=EXCHANGE_SYMBOLS_MAP='$SYMBOLS_NIBIRU'
Environment=FEEDER_MNEMONIC='$FEEDER_MNEMONIC_NIBIRU'
Environment=VALIDATOR_ADDRESS='$VALOPER_NIBIRU'

[Install]
WantedBy=multi-user.target" > /etc/systemd/system/nibirufeeder.service

Запускаем оракул и проверяем логи

sudo systemctl daemon-reload && \
sudo systemctl enable nibirufeeder && \
sudo systemctl restart nibirufeeder && \
sudo journalctl -u nibirufeeder -f -o cat

Пополняем кошелек оракула токенами

nibid tx bank send $MONIKER_NIBIRU $FEEDER_NIBIRU 100000000unibi --chain-id $CHAIN_ID_NIBIRU--from $MONIKER_NIBIRU --fees 10000unibi --gas=300000 -y 

Привязываем кошелек оракула

nibid tx oracle set-feeder $FEEDER_NIBIRU --from $MONIKER_NIBIRU --fees 10000unibi --gas=300000 -y

Проверяем транзакции в эксплорере

Проверяем количество VotePeriods

nibid q txs --events='message.sender=<адрес_кошелька_оракула>&message.action=/nibiru.oracle.v1beta1.MsgAggregateExchangeRateVote' --node="http://rpc.nibiru.ppnv.space:27657" -oj|jq -r '.total_count'

Задания для комьюнити

Выполнение заданий из данного блока принесет +127 баллов.

  • Выполнить все задания в Gleam

Задания: стадия 2

Оглавление


Голосования

Выполнение заданий из данного блока принесет +300 баллов.

  • Проголосовать хотя бы за 1 пропозал от команды
  • Проголосовать за 4 и более пропозалов от команды
nibid tx gov vote <номер_пропозала> yes --chain-id $CHAIN_ID_NIBIRU--from $MONIKER_NIBIRU --fees 10000unibi --gas=300000 -y 

Активные пропозалы можно посмотреть по ссылке.

Номера пропозалов от команды публикуются в ветке Nibiru в нашем дискорде.


Смарт-контракт

Выполнение заданий из данного блока принесет +300 баллов.

  • Развернуть смарт-контракт

Скачиваем wasm и загружаем его в сеть

mkdir -p $HOME/wasm && cd $HOME/wasm 
wget https://github.com/NibiruChain/cw-nibiru/raw/main/artifacts-cw-plus/cw20_base.was
nibid tx wasm store $HOME/wasm/cw20_base.wasm --from wallet --gas 8000000 --fees 200000unibi

Нажимаем y и копируем хэш транзакции (txhash)

Узнаем code_id

nibid q tx <хэш_транзакции> | grep raw_log

Сохраняем значения txhash и code_id

  • Создать смарт-контракт

Создаем переменные, вставив свои значения name, symbol, address и minter

INIT_NIBIRU_CONTRACT='{"name":"<ваш_моникер>","symbol":"<символ_токена (не более 4 знаков)>","decimals":6,"initial_balances":[{"address":"<ваш_адрес>","amount":"7000000"}],"mint":{"minter":"<ваш_адрес>"},"marketing":{}}'

Отправляем транзакцию, вставив свое значение code_id, сохраненное в первом задании

nibid tx wasm instantiate <ваш_code_id> $INIT_NIBIRU_CONTRACT --label "cw20_base" --no-admin --from wallet --gas 8000000 --fees 200000unibi -y

Сохраняем значения contract_address и txhash

  • Успешно транслировать ExecuteContract транзакцию

Отправляем, созданные в предыдущем задании, токены на другой кошелек

Создаем переменные, вставив свои значения contract_address и address

CONTRACT_ADDRESS=<ваш_адрес_контракта>
BALANCE='{"balance": {"address": "ваш_адрес_кошелька"}}'
nibid query wasm contract-state smart $CONTRACT_ADDRESS "$BALANCE" --output json
# {"data":{"balance":"7000000"}}

Отправляем токены на другой кошелек. Можно использовать кошелек оракула, либо создать новый. В команде вставляем адрес второго кошелька в параметр recipient

TRANSFER='{"transfer":{"recipient":"<адрес_второго_кошелька>","amount":"1000000"}}'
nibid tx wasm execute $CONTRACT_ADDRESS $TRANSFER --from $MONIKER_NIBIRU --gas 8000000 --fees 200000unibi -y

Сохраняем значения txhash

При успешном выполнении всех заданий, в эксплорере вы увидите все свои транзакции: 4 голосования, разворачивание и создание смарт-контракта и трансляция ExecuteContract транзакции


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

Оглавление

Перед удалением ноды убедитесь, что сохранены файлы из каталога /root/.nibid/config

Для удаления ноды используйте следующие команды

sudo systemctl stop nibid
sudo systemctl disable nibid
sudo rm -rf $HOME/.nibid 
sudo rm -rf $HOME/nibiru
sudo rm -rf /etc/systemd/system/nibid.service
sudo rm -rf /usr/local/bin/nibid
sudo systemctl daemon-reload

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

Оглавление

Рестарт ноды

sudo systemctl restart nibid

Проверка логов

sudo journalctl -u nibid -f -o cat

Узнать адрес валидатора

nibid keys show $MONIKER_NIBIRU --bech val -a

Внести изменения в валидатора

nibid tx staking edit-validator --identity="" --details="" --website="" \
--from $WALLET_NIBIRU --chain-id $CHAIN_ID_NIBIRU -y
#identity - PGP ключ c keybase.io (устанавливает аватар валидатора)
#details - текстовое описание валидатора

Nodera

Telegram | Discord | Twitter