Dora Factory
🪓 Telegram канал UTSA 🪓 Telegram чат UTSA
- Network Chain ID:
vota-ash
- Denom stake:
peaka
- Binary:
dorad
- Working directory:
.dora
- RPC: https://m-dora.rpc.utsa.tech/
- API: https://m-dora.api.utsa.tech/
- Explorer: 1 2
- Docs: https://docs.dorafactory.org/docs/
# проверяем статус prevotes/precommits FOLDER=.dora # узнать порт RPC echo -e "\033[0;32m$(grep -A 3 "\[rpc\]" ~/$FOLDER/config/config.toml | egrep -o ":[0-9]+")\033[0m" PORT=<ввести свой порт> # Проверка prevotes/precommits. Пригодится при обновах curl -s localhost:$PORT/consensus_state | jq '.result.round_state.height_vote_set[0].prevotes_bit_array' && \ curl -s localhost:$PORT/consensus_state | jq '.result.round_state.height_vote_set[0].precommits_bit_array'
UPD 🕊 0.4.1 (Высота обновления: 6308000)
cd rm -rf doravota git clone https://github.com/DoraFactory/doravota && cd doravota git checkout 0.4.1 make build $HOME/doravota/build/dorad version --long # version: 0.4.1 # commit: "" # ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!! systemctl stop dorad mv $HOME/doravota/build/dorad $(which dorad) dorad version --long | grep -e version -e commit # systemctl restart dorad && journalctl -u dorad -f -o cat
Подготовка сервера
# обновляем репозитории apt update && sudo apt upgrade -y # устанавливаем необходимые утилиты apt install curl build-essential git wget jq make gcc tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev -y # проверяем работу жестких дисков curl -sL yabs.sh | bash -s — -ig # проверяем работу интернета curl -sL yabs.sh | bash -s — -fg
File2Ban - подробнее здесь
# устанавливаем и копируем конфиг, который будет иметь больший приоритет apt install fail2ban -y && \ cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && \ nano /etc/fail2ban/jail.local # раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 <ip> systemctl restart fail2ban # проверяем status systemctl status fail2ban # проверяем, какие jails активны (по умолчанию только sshd) fail2ban-client status # проверяем статистику по sshd fail2ban-client status sshd # смотрим логи tail /var/log/fail2ban.log # останавливаем работу и удаляем с автозагрузки #systemctl stop fail2ban && systemctl disable fail2ban
Устанавливаем Go ОДНОЙ КОМАНДОЙ
ver="1.21.3" && \ 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
Новая установка ноды
ВАЖНО — в командах ниже все, что в <> меняем на свое значение и убираем сами <>
git clone https://github.com/DoraFactory/doravota && cd doravota git checkout 0.4.1 make install dorad version --long | grep -e version -e commit -e build # version: 0.4.1 # commit:
Инициализируем ноду, чтобы создать необходимые файлы конфигурации
dorad init UTSA_guide --chain-id vota-ash
wget -O $HOME/.dora/config/genesis.json "https://raw.githubusercontent.com/DoraFactory/doravota/main/config/mainnet/genesis.json" # Проверим генезис sha256sum ~/.dora/config/genesis.json # bb1f3841ad636a8dc5320ca39266adc00f27c312d0e73eb35f8a4384306bcbd6
Проверяем, что состояние валидатора на начальном этапе
cd && cat .dora/data/priv_validator_state.json { "height": "0", "round": 0, "step": 0 } # если нет, то выполняем команду dorad unsafe-reset-all --home $HOME/.dora
wget -O $HOME/.dora/config/addrbook.json "https://share.utsa.tech/dora/addrbook.json"
Настраиваем конфигурацию ноды
# правим конфиг, благодаря чему мы можем больше не использовать флаг chain-id для каждой команды CLI в client.toml dorad config chain-id vota-ash # при необходимости настраиваем keyring-backend в client.toml dorad config keyring-backend os # настраиваем минимальную цену за газ в app.toml sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"100000000000peaka\"/;" ~/.dora/config/app.toml # добавляем seeds/bpeers/peers в config.toml external_address=$(wget -qO- eth0.me) sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:26656\"/" $HOME/.dora/config/config.toml peers="[email protected]:26656,[email protected]:26656,[email protected]:26656" sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.dora/config/config.toml seeds="" sed -i.bak -e "s/^seeds =.*/seeds = \"$seeds\"/" $HOME/.dora/config/config.toml # увеличиваем количество входящих и исходящих пиров для подключения, за исключением постоянных пиров в config.toml sed -i 's/max_num_inbound_peers =.*/max_num_inbound_peers = 40/g' $HOME/.dora/config/config.toml sed -i 's/max_num_outbound_peers =.*/max_num_outbound_peers = 10/g' $HOME/.dora/config/config.toml # настраиваем фильтрацию "плохих" peers sed -i -e "s/^filter_peers *=.*/filter_peers = \"true\"/" $HOME/.dora/config/config.toml
(ОПЦИОНАЛЬНО) Настраиваем прунинг одной командой вapp.toml
pruning="custom" pruning_keep_recent="1000" pruning_interval="10" sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.dora/config/app.toml sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.dora/config/app.toml sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.dora/config/app.toml
(ОПЦИОНАЛЬНО) Выкл индексацию вconfig.toml
indexer="null" sed -i -e "s/^indexer *=.*/indexer = \"$indexer\"/" $HOME/.dora/config/config.toml
(ОПЦИОНАЛЬНО) Вкл/выкл снэпшоты вapp.toml
# По умолчанию снэпшоты выключены "snapshot-interval=0" snapshot_interval=1000 sed -i.bak -e "s/^snapshot-interval *=.*/snapshot-interval = \"$snapshot_interval\"/" ~/.dora/config/app.toml
(ОПЦИОНАЛЬНО) Смена портов #для 2 ноды
# config.toml sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:36658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:36657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6061\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:36656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":36660\"%" $HOME/.dora/config/config.toml # app.toml sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9190\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9191\"%" $HOME/.dora/config/app.toml # client.toml sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:36657\"%" $HOME/.dora/config/client.toml external_address=$(wget -qO- eth0.me) sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:36656\"/" $HOME/.dora/config/config.toml
Подробнее о смене портов здесь
# при необходимости скачиваем wasm curl -L https://share.utsa.tech/dora/wasm-dora.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.dora --strip-components 2
# добавляем пир peers="[email protected]:60556" sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.dora/config/config.toml
#SNAP_RPC=https://vota-rpc.dorafactory.org:443 SNAP_RPC=https://m-dora.rpc.utsa.tech/:443 LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \ BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)); \ TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash) echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \ s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; \ s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \ s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"| ; \ s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\"\"|" $HOME/.dora/config/config.toml
tee /etc/systemd/system/dorad.service > /dev/null <<EOF [Unit] Description=dorad After=network-online.target [Service] User=$USER ExecStart=$(which dorad) start Restart=on-failure RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
systemctl daemon-reload systemctl enable dorad systemctl restart dorad && journalctl -u dorad -f -o cat
Если после старта нода долго не может подцепиться к пирам, то ищем новые пиры или просим addrbook.json в дискорд
# стопаем ноду и сбрасываем данные systemctl stop dorad dorad unsafe-reset-all --home $HOME/.dora --keep-addr-book # перезагружаем ноду systemctl restart dorad && journalctl -u dorad -f -o cat
Создаем или восстанавливаем кошелек и сохраняем вывод
# создать кошелек dorad keys add <name_wallet> --keyring-backend os # восстановить кошелек (после команды вставить seed) dorad keys add <name_wallet> --recover --keyring-backend os # подключить кошелек ledger dorad keys add <name_wallet> --ledger
dorad tx staking create-validator \ --chain-id vota-ash \ --commission-rate 0.05 \ --commission-max-rate 0.2 \ --commission-max-change-rate 0.1 \ --min-self-delegation "1000000" \ --amount 1000000000000000000peaka \ --pubkey $(dorad tendermint show-validator) \ --moniker "<name_moniker>" \ --from <name_wallet> \ --fees 20000000000000000peaka
Не забываем сохранить priv_validator_key.json !!!
Подробнее о создании/редактировании валидатора можно почитать здесь
Полезные команды
Dora Vota (vota-ash) - сеть с нулевой инфляцией. Поэтому, в отличие от большинства других PoS-сетей, валидаторы сети vota-ash будут получать только комиссию за передачу данных в качестве собственного вознаграждения. На ранней стадии развития сети плата за передачу данных будет низкой, поэтому фонд Dora Factory собирается субсидировать валидаторов, зарегистрированных в нашей программе делегирования, дополнительными вознаграждениями DORA
Фонд Dora Factory каждый месяц покупает токены DORA на открытых рынках за фиксированную сумму в долларах США. Затем токены DORA будут сжигаться в сети Ethereum и повторно перечеканяться в сети vota-ash, а затем распределяться по адресам валидаторов через смарт-контракт вознаграждения в сети vota-ash
Награды Dora Vota Validator распределяются посредством отдельного смарт-контракта. Каждое распространение создает независимую последовательность вознаграждений, устанавливаемую администратором, с льготным периодом, установленным при создании. Только после истечения льготного периода соответствующая последовательность вознаграждений станет активной, что позволит требовать вознаграждения за последовательность
По умолчанию в Dora Vota Validator Reward в качестве получателя вознаграждения указывается адрес владельца валидатора. При получении вознаграждения валидаторы должны выполнить команду получения через учетную запись владельца
Новая последовательность вознаграждений может быть создана только после того, как предыдущая последовательность вознаграждений стала активной
Для начала укажите адрес контракта о вознаграждении (TESTNET)
export CONTRACT_ADDR=dora1xt4ahzz2x8hpkc0tk6ekte9x6crw4w6u0r67cyt3kz9syh24pd7suku5hd
В тестовой сети время ожидания установлено на 12 часов, что означает, что вновь созданные последовательности вознаграждений должны ждать 12 часов, прежде чем их можно будет запросить. Причина установки времени ожидания состоит в том, чтобы дать команде Дора достаточно времени для подтверждения правильности распределения. Кроме того, обратите внимание, что время ожидания в основной сети может быть изменено
# Запросить адреса белого списка для определенной последовательности dorad query wasm contract-state smart \ $CONTRACT_ADDR \ '{ "get_sequenece_addrs": { "reward_sequenece_index": "1" } }' --node https://vota-testnet-rpc.dorafactory.org:443 # Запросить ожидаемые награды для определенного адреса dorad query wasm contract-state smart \ $CONTRACT_ADDR \ '{ "claims": { "address": "dora1jusy530rj4l5kpdcch0ylkn3hau7xxras68fuy", "reward_sequenece_list": null } }' --node https://vota-testnet-rpc.dorafactory.org:443 # Claim all rewards dorad tx wasm execute \ $CONTRACT_ADDR \ '{ "claim": { "reward_sequenece_list": null } }' \ --from lesnik_utsa_wallet --fees 20000000000000000peaka --chain-id "vota-testnet" --node https://vota-testnet-rpc.dorafactory.org:443 -y # Получите награды за указанные последовательности dorad tx wasm execute \ $CONTRACT_ADDR \ '{ "claim": { "reward_sequenece_list": ["1", "4"] } }' \ --from lesnik_utsa_wallet --fees 20000000000000000peaka --chain-id "vota-testnet" --node https://vota-testnet-rpc.dorafactory.org:443 -y # Время ожидания запроса для определенной последовательности dorad query wasm contract-state smart \ $CONTRACT_ADDR \ '{ "get_sequenece_time": { "reward_sequenece_index": "1" } }' --node https://vota-testnet-rpc.dorafactory.org:443 # Запросить информацию о раздаче для определенной последовательности dorad query wasm contract-state smart \ $CONTRACT_ADDR \ '{ "get_reward_sequenece": { "reward_sequenece_index": "2" } }' --node https://vota-testnet-rpc.dorafactory.org:443 # Запросить последний идентификатор последовательности dorad query wasm contract-state smart \ $CONTRACT_ADDR \ '{ "get_latest_sequenece_id": { } }' --node https://vota-testnet-rpc.dorafactory.org:443 # Конфигурация контракта запроса dorad query wasm contract-state smart \ $CONTRACT_ADDR \ '{ "get_config": {} }' --node https://vota-testnet-rpc.dorafactory.org:443 # Запрос контракта администратора dorad query wasm contract-state smart \ $CONTRACT_ADDR \ '{ "admin": {} }' --node https://vota-rpc.dorafactory.org:443 # Запрос контракта оператора dorad query wasm contract-state smart \ $CONTRACT_ADDR \ '{ "operator": {} }' --node https://vota-rpc.dorafactory.org:443 # Запрос баланса контракта dorad query wasm contract-state smart \ $CONTRACT_ADDR \ '{ "get_total": {} }' --node https://vota-testnet-rpc.dorafactory.org:443
# проверить блоки dorad status 2>&1 | jq ."SyncInfo"."latest_block_height" # проверить логи sudo journalctl -u dorad -f -o cat # проверить статус curl localhost:26657/status # проверить баланс dorad q bank balances <address> # проверить pubkey валидатора dorad tendermint show-validator # проверить валидатора dorad query staking validator <valoper_address> dorad query staking validators --limit 1000000 -o json | jq '.validators[] | select(.description.moniker=="<name_moniker>")' | jq # проверка информации по TX_HASH dorad query tx <TX_HASH> # параметры сети dorad q staking params dorad q slashing params # проверить сколько блоков пропущено валидатором и с какого блока актив dorad q slashing signing-info $(dorad tendermint show-validator) # проверить slashing dorad q slashing signing-info $(dorad tendermint show-validator) # узнать транзакцию создания валидатора (заменить свой valoper_address) dorad query txs --events='create_validator.validator=<your_valoper_address>' -o=json | jq .txs[0].txhash -r # просмотр активного сета dorad q staking validators -o json --limit=1000 \ | jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' \ | jq -r '.tokens + " - " + .description.moniker' \ | sort -gr | nl # просмотр неактивного сета dorad q staking validators -o json --limit=1000 \ | jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' \ | jq -r '.tokens + " - " + .description.moniker' \ | sort -gr | nl
# заделегировать себе в стейк еще (так отправляется 1 монетa) dorad tx staking delegate <valoper_address> 1000000peaka --from <name_wallet> --fees 20000000000000000peaka -y # ределегирование на другого валидатора dorad tx staking redelegate <src-validator-addr> <dst-validator-addr> 1000000peaka --from <name_wallet> --fees 20000000000000000peaka -y # unbond dorad tx staking unbond <addr_valoper> 1000000peaka --from <name_wallet> --fees 20000000000000000peaka -y # отправить монеты на другой адрес dorad tx bank send <name_wallet> <address> 1000000peaka --fees 20000000000000000peaka -y # выбраться из тюрьмы dorad tx slashing unjail --from <name_wallet> --fees 20000000000000000peaka -y
# вывести список кошельков dorad keys list # показать ключ аккаунта dorad keys show <name_wallet> --bech acc # показать ключ валидатора dorad keys show <name_wallet> --bech val # показать ключ консенсуса dorad keys show <name_wallet> --bech cons # запрос учетной записи dorad q auth account $(dorad keys show <name_wallet> -a) -o text # удалить кошелек dorad keys delete <name_wallet>
systemctl stop dorad && \ systemctl disable dorad && \ rm /etc/systemd/system/dorad.service && \ systemctl daemon-reload && \ cd $HOME && \ rm -rf .dora doravota && \ rm -rf $(which dorad)
# список proposals dorad q gov proposals # посмотреть результат голосования dorad q gov proposals --voter <ADDRESS> # проголосовать за предложение dorad tx gov vote 1 yes --from <name_wallet> --fees 20000000000000000peaka # внести депозит в предложение dorad tx gov deposit 1 1000000peaka --from <name_wallet> --fees 20000000000000000peaka # создать предложение dorad tx gov submit-proposal --title="Randomly reward" --description="Reward 10 testnet participants who completed more than 3 tasks" --type="Text" --deposit="11000000grain" --from=<name_wallet> --fees 500peaka
FOLDER=.dora # узнать свой peer PORTR=$(grep -A 3 "\[p2p\]" ~/$FOLDER/config/config.toml | egrep -o ":[0-9]+") && \ echo $(dorad tendermint show-node-id)@$(wget -qO- eth0.me)$PORTR # узнать порт RPC echo -e "\033[0;32m$(grep -A 3 "\[rpc\]" ~/$FOLDER/config/config.toml | egrep -o ":[0-9]+")\033[0m" # проверка количества пиров PORT= curl -s http://localhost:$PORT/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr | split(":")[2])"' | wc -l # cписок моникеров подключенных пиров curl -s http://localhost:$PORT/net_info | jq '.result.peers[].node_info.moniker' # Проверка prevotes/precommits. Пригодится при обновах curl -s localhost:$PORT/consensus_state | jq '.result.round_state.height_vote_set[0].prevotes_bit_array' && \ curl -s localhost:$PORT/consensus_state | jq '.result.round_state.height_vote_set[0].precommits_bit_array' # check prevote of your validator curl -s localhost:$PORT/consensus_state -s | grep $(curl -s localhost:26657/status | jq -r .result.validator_info.address[:12])