Nibiru: Installation Guide
Nibiru — это независимый PoS блокчейн, который объединяет торговлю деривативами с кредитным плечом, спотовую торговлю, стейкинг и предоставление облигационной ликвидности в единый пользовательский интерфейс, позволяющий пользователям более 40 блокчейнов торговать с кредитным плечом, используя набор компонуемых децентрализованных приложений.
Гайд актуален для версии 0.19.2 (chain_ID: nibiru-itn-1)
Тестнет эксплорер - http://explorer.nodera.org/nibiru/staking
Website
Discord
Оглавление
- Подготовка сервера
- Установка ноды
- Snapshot
- Создание кошелька и валидатора
- Обновление
- Задания: стадия 1
- Задания: стадия 2
- Удаление ноды
- Полезные команды
Подготовка сервера
На данном этапе устанавливаю на сервере 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
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 баллов.
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 баллов.
Важно!! Для работы оракула Ваш валидатор должен находится в активном сете
Скачиваем и устанавливаем бинарные файлы
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 баллов.
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)
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
Отправляем, созданные в предыдущем задании, токены на другой кошелек
Создаем переменные, вставив свои значения 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
При успешном выполнении всех заданий, в эксплорере вы увидите все свои транзакции: 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 - текстовое описание валидатора