Guides
May 8, 2023

Сascadia


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

# обновляем репозитории
apt update && apt upgrade -y

# устанавливаем необходимые утилиты
apt install curl iptables build-essential git wget jq make gcc nano tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev -y


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

ver="1.20.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/cascadiafoundation/cascadia && cd cascadia
git checkout v0.1.1
make install

cascadiad version --long
# v0.1.1
# commit: 5f5bb104a13407a7312b9c5b780cbfd16d4bd6ef

Инициализируем ноду, чтобы создать необходимые файлы конфигурации

cascadiad init name_moniker --chain-id cascadia_6102-1

Скачиваем Genesis

wget -O $HOME/.cascadiad/config/genesis.json "https://anode.team/Cascadia/test/genesis.json"

# Проверим генезис
sha256sum ~/.cascadiad/config/genesis.json
# 74ea3c84182028300d0c101c5cf017a055782c595ed91e4be3638380f0169582

Проверяем, что состояние валидатора на начальном этапе

cd && cat .cascadiad/data/priv_validator_state.json
{
  "height": "0",
  "round": 0,
  "step": 0
}

# если нет, то выполняем команду
cascadiad tendermint unsafe-reset-all --home $HOME/.cascadiad

Скачиваем Addr book

wget -O $HOME/.cascadiad/config/addrbook.json "https://anode.team/Cascadia/test/addrbook.json"


Настраиваем конфигурацию ноды

# правим конфиг, благодаря чему мы можем больше не использовать флаг chain-id для каждой команды CLI в client.toml
cascadiad config chain-id cascadia_6102-1

# при необходимости настраиваем keyring-backend в client.toml 
cascadiad config keyring-backend os

# настраиваем минимальную цену за газ в app.toml
sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.025aCC\"/;" ~/.cascadiad/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/.cascadiad/config/config.toml

peers=""
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.cascadiad/config/config.toml

#bpeers=""
#sed -i.bak -e "s/^bootstrap-peers *=.*/bootstrap-peers = \"$bpeers\"/" $HOME/.cascadiad/config/config.toml

seeds=""
sed -i.bak -e "s/^seeds =.*/seeds = \"$seeds\"/" $HOME/.cascadiad/config/config.toml

# при необходимости увеличиваем количество входящих и исходящих пиров для подключения, за исключением постоянных пиров в config.toml
# может помочь при падении ноды, но увеличивает нагрузку
sed -i 's/max_num_inbound_peers =.*/max_num_inbound_peers = 50/g' $HOME/.cascadiad/config/config.toml
sed -i 's/max_num_outbound_peers =.*/max_num_outbound_peers = 25/g' $HOME/.cascadiad/config/config.toml

# настраиваем фильтрацию "плохих" peers
sed -i -e "s/^filter_peers *=.*/filter_peers = \"true\"/" $HOME/.cascadiad/config/config.toml

# отключаем JSON RPC Configuration в app.toml
nano /root/.cascadiad/config/app.toml
# enable = false

(ОПЦИОНАЛЬНО) Настраиваем прунинг одной командой вapp.toml

pruning="custom"
pruning_keep_recent="1000"
pruning_interval="10"
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.cascadiad/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.cascadiad/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.cascadiad/config/app.toml

(ОПЦИОНАЛЬНО) Выкл индексацию вconfig.toml

indexer="null"
sed -i -e "s/^indexer *=.*/indexer = \"$indexer\"/" $HOME/.cascadiad/config/config.toml

(ОПЦИОНАЛЬНО) Вкл/выкл снэпшоты вapp.toml

# По умолчанию снэпшоты выключены "snapshot-interval=0"
snapshot_interval=1000
sed -i.bak -e "s/^snapshot-interval *=.*/snapshot-interval = \"$snapshot_interval\"/" ~/.cascadiad/config/app.toml

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

tee /etc/systemd/system/cascadiad.service > /dev/null <<EOF
[Unit]
Description=cascadiad
After=network-online.target

[Service]
User=$USER
ExecStart=$(which cascadiad) start
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable cascadiad
systemctl restart cascadiad && journalctl -u cascadiad -f -o cat

Создаем или восстанавливаем кошелек и сохраняем вывод

# создать кошелек
cascadiad keys add <name_wallet> --keyring-backend os

# восстановить кошелек (после команды вставить seed)
cascadiad keys add <name_wallet> --recover --keyring-backend os

Создаем валидатора

cascadiad tx staking create-validator \
--chain-id cascadia_6102-1 \
--commission-rate 0.05 \
--commission-max-rate 0.2 \
--commission-max-change-rate 0.1 \
--min-self-delegation "1000000" \
--amount 1000000000000000000aCC \
--pubkey $(cascadiad tendermint show-validator) \
--moniker "<name_moniker>" \
--from <name_wallet> \
--gas auto \
--gas-adjustment=1.2 \
--gas-prices=7aCC 

08.05.2023 Update to v0.1.2

sudo systemctl stop cascadiad
rm -rf cascadia
git clone https://github.com/cascadiafoundation/cascadia
cd $HOME/cascadia || return
git checkout v0.1.2
make install
sudo systemctl restart cascadiad && journalctl -fu cascadiad -o cat