ARCHIVE
May 20, 2022

Sei Network - atlantic-2

Web Discord Github

Sei Network - блокчейн 1 уровня со встроенной книгой заказов, надежностью, безопасностью и высокой пропускной способностью. Все как у всех)

Проект на ранней стадии, но сразу выкатили информацию о тестнете https://3pgv.notion.site/Sei-Network-Incentivized-Testnet-Seinami-1f3de71c76c24d4f862af936f0a5fe04

  • Тестовая сеть стартует 11 июля
  • На тестовую сеть выделено 1 процент саплая
  • Нужно будет пройти KYC
  1. Заполняем первую форму для всех https://forms.gle/CzBeqENRZrrXXG4x7
  2. Подаем Gentx и заполняем вторую форму для валидаторов https://docs.google.com/forms/d/10PD9PeJVraVSruLM4mHIHJBrbBQ7v0pQU9GEHIfWYgo/
  3. Форма для заданий https://docs.google.com/forms/d/1qxpIL-ATe1HMX87w1P7BjMqpjXExlKyo1_btEJi00JM/

Testnet details

НОВАЯ подача GENTX - 1 группа остается в старой сети

  1. Проверяем в какой Вы группе здесь
  2. 2-3 группы переходят в atlantic-sub-1 и подают GENTX по данной инструкции
  3. 4-5 группы переходят в atlantic-sub-2 и подают GENTX по данной инструкции

Подача Gentx для 2-3 группы

Если на сервере ранее стояла нода, то удаляем ее. Если идет новая установка, то сначала обновляем репозитории, устанавливаем GO и продолжаем с установки бинарных файлов

sudo systemctl stop seid && \
sudo systemctl disable seid && \
rm /etc/systemd/system/seid.service && \
sudo systemctl daemon-reload && \
cd $HOME && \
rm -rf .sei .sei-chain sei-chain && \
rm -rf $(which seid)

Устанавливаем бинарники

cd $HOME
git clone https://github.com/sei-protocol/sei-chain && cd sei-chain
git checkout master && git pull
git checkout 1.1.2beta-internal
make install

seid version --long | head
# version 1.1.2beta-internal
# commit: 23fb21f32de20869a6b1d50291ef6bbf2b2e7a0c

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

seid init <name_node> --chain-id atlantic-sub-1

# редактируем config.toml
seid config chain-id atlantic-sub-1

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

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

Добавляем учетную запись в свой локальный файл genesis с заданной суммой и ключом, которые вы только что создали

seid add-genesis-account <name_wallet> 10000000usei

Создаем Gentx (предварительно меняем под себя к примеру в блокноте)

seid gentx <name_wallet> 10000000usei \
--chain-id atlantic-sub-1 \
--commission-rate=0.05 \
--commission-max-rate=0.2 \
--commission-max-change-rate=0.05 \
--pubkey $(seid tendermint show-validator) \
--moniker <"name_moniker">

Просмотреть Gentx

cat ~/.sei/config/gentx/gentx-*

Делаем форк репозитория, добавляем туда наш Gentx и создаем PR

*Не забываем сохранить priv_validator_key

UPD Если Вас не добавили в генезис, то заполняем данную форму

Далее подготавливаемся к запуску SUB-1

Скачиваем Genesis

wget -O $HOME/.sei/config/genesis.json "https://raw.githubusercontent.com/sei-protocol/testnet/main/atlantic-subchains/atlantic-sub-1/genesis.json"

# Проверим генезис
sha256sum ~/.sei/config/genesis.json
# b04350f2cc2db7ee1bd6a8a125167ce0a49c528aca78fe95085cdd2413dac863

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

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

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

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

# добавляем seeds/bpeers/peers в config.toml
external_address=$(wget -qO- eth0.me)
sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:26656\"/" $HOME/.sei/config/config.toml

peers="[email protected]:46656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:2665,[email protected]:26656"
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.sei/config/config.toml

# увеличиваем количество входящих и исходящих пиров для подключения, за исключением постоянных пиров в config.toml
sed -i 's/max_num_inbound_peers =.*/max_num_inbound_peers = 100/g' $HOME/.sei/config/config.toml
sed -i 's/max_num_outbound_peers =.*/max_num_outbound_peers = 100/g' $HOME/.sei/config/config.toml
# ВАЖНО  дополнительная настройка от команды
wget -qO optimize-configs.sh https://raw.githubusercontent.com/sei-protocol/testnet/main/sei-testnet-2/optimize-configs.sh
sudo chmod +x optimize-configs.sh && ./optimize-configs.sh
sudo systemctl restart seid && sudo journalctl -u seid -f -o cat

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

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

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

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

# client.toml
sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:36657\"%" $HOME/.sei/config/client.toml

external_address=$(wget -qO- eth0.me)
sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:36656\"/" $HOME/.sei/config/config.toml

Подробнее о смене портов здесь

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

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

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

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

Обновления

# проверяем статус prevotes/precommits
FOLDER=.sei

# узнать порт 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 '.round_state.height_vote_set[0].prevotes_bit_array'

UPD 🕊 на 2.0.46beta

Высота обновления: 7895974

cd $HOME/sei-chain
git pull
git checkout 2.0.46beta
make build
$HOME/sei-chain/build/seid version --long | grep -e version -e commit
# 2.0.46beta
# commit: 78520b7438ceb8e9d1a1565a12f70c3bdb76b4bf

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop seid
mv $HOME/sei-chain/build/seid $(which seid)
seid version --long | grep -e version -e commit
# 

systemctl restart seid && journalctl -u seid -f -o cat

UPD 🕊 на 2.0.47beta

Высота обновления: 8593807

cd $HOME/sei-chain
git pull
git checkout 2.0.47beta
make clean
make build
$HOME/sei-chain/build/seid version --long | grep -e version -e commit
# 2.0.47beta
# commit: b3f7928d359e0f81f19cd6b1a45a655db7ee98b8

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop seid
mv $HOME/sei-chain/build/seid $(which seid)
seid version --long | grep -e version -e commit
# 

systemctl restart seid && journalctl -u seid -f -o cat

UPD 🕊 на 2.0.48beta (Высота обновления: 9466485)

cd $HOME/sei-chain
git pull
git checkout 2.0.48beta
make clean
make build
$HOME/sei-chain/build/seid version --long | grep -e version -e commit
# 2.0.48beta
# commit: d6a3e606c7d3159e489d3499989f571cceca5fb6

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop seid
mv $HOME/sei-chain/build/seid $(which seid)
seid version --long | grep -e version -e commit
# 

systemctl restart seid && journalctl -u seid -f -o cat

UPD 🕊 на 3.0.0 (Высота обновления: 10582557)

cd $HOME/sei-chain
git pull
git checkout 3.0.0
make clean
make build
$HOME/sei-chain/build/seid version --long | grep -e version -e commit
# 3.0.0
# commit: e805cf327d5efacd5bc8764bb1877eba20cd27d8

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop seid
mv $HOME/sei-chain/build/seid $(which seid)
seid version --long | grep -e version -e commit
# 

systemctl restart seid && journalctl -u seid -f -o cat

UPD 🕊 на 3.0.1 (Высота обновления: 1135000)

cd $HOME/sei-chain
git pull
git checkout 3.0.1
make clean
make build
$HOME/sei-chain/build/seid version --long | grep -e version -e commit
# 3.0.1
# commit: 81b8af7980df722a63a910cc35ff96e60a94cbfe

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop seid
mv $HOME/sei-chain/build/seid $(which seid)
seid version --long | grep -e version -e commit
# 

systemctl restart seid && journalctl -u seid -f -o cat

UPD 🕊 на 3.0.2 (Высота обновления: 1135000)

cd $HOME/sei-chain
git pull
git checkout 3.0.2
make clean
make build
$HOME/sei-chain/build/seid version --long | grep -e version -e commit
# 3.0.2
# commit: 3f5dbafe91bdbd5f60a392ab44051298464d86a2

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop seid
mv $HOME/sei-chain/build/seid $(which seid)
seid version --long | grep -e version -e commit
# 

systemctl restart seid && journalctl -u seid -f -o cat

UPD 🕊 на 3.0.3 (Высота обновления: 19667746)

cd $HOME/sei-chain
git pull
git checkout 3.0.3
make clean
make build
$HOME/sei-chain/build/seid version --long | grep -e version -e commit
# 3.0.3
# commit: 8d7de6c1cb2f62e54b23af89bfd85163f77b7c62

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop seid
mv $HOME/sei-chain/build/seid $(which seid)
seid version --long | grep -e version -e commit
# 

systemctl restart seid && journalctl -u seid -f -o cat

UPD 🕊 на 3.0.4 (Высота обновления: 16226291)

cd $HOME
rm -rf sei-chain
git clone https://github.com/sei-protocol/sei-chain && cd sei-chain
git checkout 3.0.4
make build
$HOME/sei-chain/build/seid version --long | grep -e version -e commit
# 3.0.4
# commit: dba16898f6db5a3289de3de9b05f044d7e0ae72d

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop seid
mv $HOME/sei-chain/build/seid $(which seid)
seid version --long | grep -e version -e commit
# 

systemctl restart seid && journalctl -u seid -f -o cat

UPD 🕊 на 3.0.6 (Высота обновления: 21255000)

cd $HOME
rm -rf sei-chain
git clone https://github.com/sei-protocol/sei-chain && cd sei-chain
git checkout 3.0.6
make build
$HOME/sei-chain/build/seid version --long | grep -e version -e commit
# 3.0.6
# commit: cb5277c87599a6ff768b887cec9889b40d128e46

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop seid
mv $HOME/sei-chain/build/seid $(which seid)
seid version --long | grep -e version -e commit
# 

systemctl restart seid && journalctl -u seid -f -o cat

UPD 🕊 на 3.0.7 (Высота обновления: 25613021)

cd $HOME
rm -rf sei-chain
git clone https://github.com/sei-protocol/sei-chain && cd sei-chain
git checkout 3.0.7
make build
$HOME/sei-chain/build/seid version --long | grep -e version -e commit
# 3.0.7
# commit: 384b94e8fa373c75da39d58e62824f2ef644bb4c

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop seid
mv $HOME/sei-chain/build/seid $(which seid)
seid version --long | grep -e version -e commit
# 

systemctl restart seid && journalctl -u seid -f -o cat

UPD 🕊 на 3.0.8 (Высота обновления: 26852946)

cd $HOME
rm -rf sei-chain
git clone https://github.com/sei-protocol/sei-chain && cd sei-chain
git checkout 3.0.8
make build
$HOME/sei-chain/build/seid version --long | grep -e version -e commit
# 3.0.8
# commit: 605ce0378a0429f04032f095e64ddca014a7128b

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop seid
mv $HOME/sei-chain/build/seid $(which seid)
seid version --long | grep -e version -e commit
# 

systemctl restart seid && journalctl -u seid -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
# Disk Test
nvme smart-log /dev/nvme0
nvme smart-log /dev/nvme1

Проверяем работу интернета

curl -sL yabs.sh | bash -s — -fg

Устанавливаем 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

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

ВАЖНО — в командах ниже все, что в <> меняем на свое значение и убираем сами <>

Важно: для правильной работы валидатора и не попадания в jail необходимо одновременно запускать как самого валидатора, так и price-feeder

Устанавливаем бинарники

git clone https://github.com/sei-protocol/sei-chain && cd sei-chain
git checkout 3.0.8
make install

seid version --long | head
# 3.0.8
# commit: 605ce0378a0429f04032f095e64ddca014a7128b

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

seid init UTSA_guide --chain-id atlantic-2

Скачиваем Genesis

wget -O $HOME/.sei/config/genesis.json "https://raw.githubusercontent.com/sei-protocol/testnet/main/atlantic-2/genesis.json"

# Проверим генезис
sha256sum ~/.sei/config/genesis.json
# 3c135db9177a428893353d7889149ca2ed9c075d6846be07af60354022b81318

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

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

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

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

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

# настраиваем минимальную цену за газ в app.toml
sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.1usei\"/;" ~/.sei/config/app.toml

# добавляем seeds/bpeers/peers в config.toml
external_address=$(wget -qO- eth0.me)
sed -i -e "s/^external-address *=.*/external-address = \"$external_address:26656\"/" $HOME/.sei/config/config.toml

peers="[email protected]:26656"
sed -i.bak -e "s/^persistent-peers *=.*/persistent-peers = \"$peers\"/" $HOME/.sei/config/config.toml

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

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

# увеличиваем количество входящих и исходящих пиров для подключения, за исключением постоянных пиров в config.toml
sed -i 's/max_num_inbound_peers =.*/max_num_inbound_peers = 50/g' $HOME/.sei/config/config.toml
sed -i 's/max_num_outbound_peers =.*/max_num_outbound_peers = 30/g' $HOME/.sei/config/config.toml
# меняем mode на validator
sed -i -e "s/^mode *=.*/mode = \"validator\"/" $HOME/.sei/config/config.toml
# обновляем unsafe-commit-timeout-override
sed -i.bak -e "s|unsafe-commit-timeout-override =.*|unsafe-commit-timeout-override = \"200ms\"|" $HOME/.sei/config/config.toml

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

Для тех, кто делал db.sync

For the disk fill out issue, after some investigation, what we find out is that the db-sync does copied over some garbage data which could impact compaction and pruning, but this is due to the nature of file sync instead of state sync. There's no easy way to avoid that, but we do find out a way to mitigate the issue. Here's our recommendation to tackle the disk filling up issue with db-sync:

1. Use aggressive pruning, set keep-recent=2, keep-every=0, pruning-interval=2,

2. Turn on async compaction, in app.toml set compaction-interval = 60

This will not make the node have the same pruning efficiency as state sync, but it will reduce the disk increase speed by at least 50% to 75%
pruning="custom"
pruning_keep_recent="100"
pruning_interval="10"
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.sei/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.sei/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.sei/config/app.toml

Также можно самостоятельно настроить параметр min-retain-blocks: Это значение относится к обрезке блоков Tendermint. Оно отличается от настроек обычного Pruning. Если min-retain-blocks=0, то ничего не удаляется.

min-retain-blocks определяет минимальное смещение высоты блока от текущего фиксируемого блока, так что все блоки, превышающие это смещение, удаляются из Tendermint

min-retain-blocks=1

inter-block-cache = false

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

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

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

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

# client.toml
sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:36657\"%" $HOME/.sei/config/client.toml

external_address=$(wget -qO- eth0.me)
sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:36656\"/" $HOME/.sei/config/config.toml

Подробнее о смене портов здесь

(ОПЦИОНАЛЬНО) State Sync

Здесь контакты wasm автоматически загружаются со statesync. Ближе к концу синхронизации

systemctl stop seid

cp $HOME/.sei/data/priv_validator_state.json $HOME/.sei/priv_validator_state.json.backup
rm -rf $HOME/.sei/data
rm -rf $HOME/.sei/wasm
mkdir $HOME/.sei/data/
mv $HOME/.sei/priv_validator_state.json.backup $HOME/.sei/data/priv_validator_state.json
bpeers=$(curl -sS https://raw.githubusercontent.com/AlexToTheMoon/AM-Solutions/main/files/atlantic-2-bpeers.txt)
sed -i -e "s|^bootstrap-peers *=.*|bootstrap-peers = \"$bpeers\"|" $HOME/.sei/config/config.toml
sed -i.bak -e "s|^persistent-peers *=.*|persistent-peers \
 =  \"[email protected]:26656\"|" ~/.sei/config/config.toml
SNAP_RPC="https://rpc.atlantic-2.seinetwork.io:443"; \
LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 40000)); \
TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .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\"|" $HOME/.sei/config/config.toml; \
sed -i.bak -e "s|^use-p2p *=.*|use-p2p = true|" $HOME/.sei/config/config.toml/.sei/config/config.toml
systemctl restart seid && journalctl -u seid -f -o cat

SNAPSHOTS:

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

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

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

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

Если после старта нода долго не может подцепиться к пирам, то ищем новые пиры или просим addrbook.json в дискорд

# стопаем ноду, удаляем адресную книгу и сбрасываем данные
systemctl stop seid
rm $HOME/.sei/config/addrbook.json
# если нужные каталоги не удаляются, то добавляем флаг --home /root/.sei
seid tendermint unsafe-reset-all --home $HOME/.sei

# перезагружаем ноду
systemctl restart seid && journalctl -u seid -f -o cat

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

# создать кошелек
seid keys add <name_wallet>

# восстановить кошелек (после команды вставить seed)
seid keys add <name_wallet> --algo sr25519 --recover

Не забываем сохранить seed !!!

Получаем тестовые монетки (ввести свой кошелек)

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

seid tx staking create-validator \
--chain-id atlantic-2 \
--commission-rate 0.05 \
--commission-max-rate 0.2 \
--commission-max-change-rate 0.1 \
--min-self-delegation 1 \
--amount 1000000usei \
--pubkey $(seid tendermint show-validator) \
--moniker "<name_moniker>" \
--from <name_wallet> \
--fees 100000usei

Не забываем сохранить priv_validator_key.json !!!

Подробнее о создании/редактировании валидатора можно почитать здесь

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

Для добавления лого в mintscan:

  • форк https://github.com/cosmostation/cosmostation_token_resource
  • в папке Moniker находим название проекта
  • через add file/upload file добавляем свою аватарку. название файла обязательно должно быть валопер.png . и только png
  • PR

Информация

# проверить блоки
seid status 2>&1 | jq ."SyncInfo"."latest_block_height"

# проверить логи
sudo journalctl -u seid -f -o cat

# проверить статус
curl localhost:26657/status

# проверить баланс
seid q bank balances <address>

# проверить валидатора
seid query staking validator <valoper_address>
seid query staking validators --limit 1000000 -o json | jq '.validators[] | select(.description.moniker=="<name_moniker>")' | jq

# проверка информации по TX_HASH
seid query tx <TX_HASH>

# параметры сети
seid q staking params
seid q slashing params
seid q upgrade plan

# проверить сколько блоков пропущено валидатором и с какого блока актив
seid q slashing signing-info $(seid tendermint show-validator)

# узнать транзакцию создания валидатора (заменить свой valoper_address)
seid query txs --events='create_validator.validator=<your_valoper_address>' -o=json | jq .txs[0].txhash -r

Транзакции

# собрать комиссионные + реварды
seid tx distribution withdraw-rewards <valoper_address> --from <name_wallet> --fees 100000usei --commission -y

# заделегировать себе в стейк еще (так отправляется 1 монетa)
seid tx staking delegate <valoper_address> 1000000usei --from <name_wallet> --fees 100000usei -y

# ределегирование на другого валидатора
seid tx staking redelegate <src-validator-addr> <dst-validator-addr> 1000000usei --from <name_wallet> --fees 100000usei -y

# unbond 
seid tx staking unbond <addr_valoper> 1000000usei --from <name_wallet> --fees 100000usei -y

# отправить монеты на другой адрес
seid tx bank send <name_wallet> <address> 1000000usei --fees 100000usei -y

# выбраться из тюрьмы
seid tx slashing unjail --from <name_wallet> --fees 100000usei -y

Работа с кошельками

# вывести список кошельков
seid keys list

# показать ключ аккаунта
seid keys show <name_wallet> --bech acc

# показать ключ валидатора
seid keys show <name_wallet> --bech val

# показать ключ консенсуса
seid keys show <name_wallet> --bech cons

# запрос учетной записи
seid q auth account $(quicksilverd keys show <name_wallet> -a) -o text

# удалить кошелек
seid keys delete <name_wallet>

Удалить ноду

systemctl stop seid && \
systemctl disable seid && \
rm /etc/systemd/system/seid.service && \
systemctl daemon-reload && \
cd $HOME && \
rm -rf .sei sei-chain && \
rm -rf $(which seid)

ГОВЕРНАНС

# список proposals
seid q gov proposals

# посмотреть результат голосования
seid q gov proposals --voter <ADDRESS>

# проголосовать за предложение 
seid tx gov vote 1 yes --from <name_wallet> --fees 100000usei

# внести депозит в предложение
seid tx gov deposit 1 1000000usei --from <name_wallet> --fees 100000usei

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

seid q staking validators -o json --limit=1000 \
| jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nl

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

seid q staking validators -o json --limit=1000 \
| jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nl

Peers

# проверка количества пиров
curl -s http://localhost:26657/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr | split(":")[2])"' | wc -l

# cписок моникеров подключенных пиров
curl -s http://localhost:26657/net_info | jq '.result.peers[].node_info.moniker'

Проверка vote power онлайн. Пригодится при обновах

curl -s localhost:26657/consensus_state | jq '.result.round_state.height_vote_set[0].prevotes_bit_array'

Поиск всех исходящих транзакций по адресу

seid q txs --events transfer.sender=<ADDRESS> 2>&1 | jq | grep txhash

Поиск всех входящих транзакций по адресу

seid q txs --events transfer.recipient=<ADDRESS> 2>&1 | jq | grep txhash

Получение ID@IP:PORT - cohod исправить на нужное

echo "$(seid tendermint show-node-id)@$(curl ifconfig.me):26656"

Настройка Price Feeder (✔️Oracle)

Docs - https://github.com/sei-protocol/sei-chain/blob/master/oracle/price-feeder/README.md

Опции:

  • используется отдельный кошелек (не кошелек валидатора)
  • keyring-backend ставим os
  • отдельный кошелек привязывается к валидатору и в сервисный файл добавляется Environment="PRICE_FEEDER_PASS={KEYRING_PASSWORD}"
  • на отдельном кошельке должны быть монетки для комиссий
  • валидатор должен находиться в активном сете

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

cd $HOME/sei-chain
make install-price-feeder
#Installed at &HOME/go/bin/price-feeder

price-feeder version
#version: ""
#commit: ""
#sdk: v0.45.4
#go: go1.20.3 linux/amd64

Работа с кошельками

# создаем отдельный кошелек
seid keys add SEI_FEEDER_ADDR --algo sr25519 --keyring-backend os
# пополняем его баланс
seid tx bank send <name_wallet> <SEI_FEEDER_ADDR> 1000000usei --fees 100000usei -y
# проверяем баланс
seid q bank balances <address>
# делегируем полномочия нашему созданному кошельку
seid tx oracle set-feeder <SEI_FEEDER_ADDR> --from <name_wallet> --fees 100000usei -y

Копируем дефолтный конфиг

cp $HOME/sei-chain/oracle/price-feeder/config.example.toml $HOME/.sei/price-feeder-config.toml

Добавляем в конфиг pass

sed -i '/^dir *=.*/a pass = ""' $HOME/.sei/price-feeder-config.toml

Вводим переменные

PASS=<your_password>
SEI_FEEDER_ADDR=<sei1jkg...>
SEI_VALOPER=<seivaloper13y7...>
SEI_CHAIN=<atlantic-2>

Настраиваем price-feeder.toml (при необходимости меняем порты RPC и gRPC)

sed -i "s/^address *=.*/address= \"$SEI_FEEDER_ADDR\"/;\
s/^chain_id *=.*/chain_id= \"$SEI_CHAIN\"/;\
s/^validator *=.*/validator = \"$SEI_VALOPER\"/;\
s/^backend *=.*/backend = \"os\"/;\
s|^dir *=.*|dir = \"$HOME/.sei\"|;\
s|^pass *=.*|pass = \"$PASS\"|;\
s|^grpc_endpoint *=.*|grpc_endpoint = \"localhost:9090\"|;\
s|^tmrpc_endpoint *=.*|tmrpc_endpoint = \"http://localhost:26657\"|;" $HOME/.sei/price-feeder-config.toml

В итоге наш конфиг должен выглядеть примерно так:

gas_adjustment = 1.5
gas_prices = "0.00125usei"
enable_server = true
enable_voter = true

[server]
listen_addr = "0.0.0.0:7171"
read_timeout = "20s"
verbose_cors = true
write_timeout = "20s"

[[deviation_thresholds]]
base = "ETH"
threshold = "2"

[[currency_pairs]]
base = "ETH"
chain_denom = "ueth"
providers = [
  "huobi",
  "crypto",
  "coinbase",
  "kraken",
  "okx"
]
quote = "USDT"

[[deviation_thresholds]]
base = "BTC"
threshold = "2"

[[currency_pairs]]
base = "BTC"
chain_denom = "ubtc"
providers = [
  "huobi",
  "kraken",
  "crypto",
  "coinbase",
  "okx",
]
quote = "USDT"

[[deviation_thresholds]]
base = "SOL"
threshold = "2"

[[currency_pairs]]
base = "SOL"
chain_denom = "usei"
providers = [
  "huobi",
  "kraken",
  "coinbase",
]
quote = "USDT"

[[deviation_thresholds]]
base = "ATOM"
threshold = "2"

[[currency_pairs]]
base = "ATOM"
chain_denom = "uatom"
providers = [
  "huobi",
  "kraken",
  "coinbase",
]
quote = "USDT"

[[deviation_thresholds]]
base = "OSMO"
threshold = "2"

[[currency_pairs]]
base = "OSMO"
chain_denom = "uosmo"
providers = [
  "huobi",
  "okx",
  "gate",
]
quote = "USDT"

[[deviation_thresholds]]
base = "DAI"
threshold = "2"

[[currency_pairs]]
base = "DAI"
chain_denom = "factory/sei1jdppe6fnj2q7hjsepty5crxtrryzhuqsjrj95y/uust2"
providers = [
  "kraken",
  "crypto",
  "okx",
]
quote = "USDT"

[[deviation_thresholds]]
base = "USDT"
threshold = "2"

[[currency_pairs]]
base = "USDT"
chain_denom = "uusdt"
providers = [
  "kraken",
  "crypto",
  "coinbase",
]
quote = "USD"

[account]
address= "sei1pew773t0y6ge7fkd8m3wltef6rysvswpyv4y5a"
chain_id= "atlantic-2"
validator = "seivaloper166nhgu27n49kwndp30qfd4e7vlw2h2nqh80uz2"
prefix = "sei"

[keyring]
backend = "os"
dir = "/root/.sei"
pass = "you_password"

[rpc]
grpc_endpoint = "localhost:9090"
rpc_timeout = "100ms"
tmrpc_endpoint = "http://localhost:26657"

[telemetry]
enable_hostname = true
enable_hostname_label = true
enable_service_label = true
enabled = true
global_labels = [["chain_id", "sei-chain"]]
service_name = "price-feeder"
prometheus_retention = 60

[[provider_endpoints]]
name = "binance"
rest = "https://api1.binance.com"
websocket = "stream.binance.com:9443"

# [[healthchecks]]
# url = "https://hc-ping.com/HEALTHCHECK-UUID"
# timeout = "5s"

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

tee /etc/systemd/system/price-feeder.service > /dev/null <<EOF
[Unit]
Description=Sei_atlantic-2_price-feeder
After=network.target
[Service]
User=$USER
Type=simple
Environment="PRICE_FEEDER_PASS=$PASS"
ExecStart=$HOME/go/bin/price-feeder $HOME/.sei/price-feeder-config.toml
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable price-feeder
systemctl restart price-feeder && journalctl -u price-feeder -f -o cat

Также можно проверить транзакции через explorer

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

# Запрос учетной записи feeder
seid q oracle feeder <seivaloper166n...>

# проверить параметры Oracle
seid q oracle params

# проверить miss_count
curl -s https://api-3.sei.nodes.guru/sei-protocol/sei-chain/oracle/validators/<seivaloper166n...>/vote_penalty_counter

Удалить

systemctl stop price-feeder && \
systemctl disable price-feeder && \
rm /etc/systemd/system/price-feeder.service && \
systemctl daemon-reload && \
cd $HOME/.sei/ && \
rm price-feeder-config.toml