<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>lesnik13utsa</title><generator>teletype.in</generator><description><![CDATA[lesnik13utsa]]></description><image><url>https://img2.teletype.in/files/d7/b0/d7b01982-37f6-4b34-ba00-7ccefee2c062.jpeg</url><title>lesnik13utsa</title><link>https://teletype.in/@lesnik13utsa</link></image><link>https://teletype.in/@lesnik13utsa?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/lesnik13utsa?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/lesnik13utsa?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Fri, 17 Apr 2026 00:12:04 GMT</pubDate><lastBuildDate>Fri, 17 Apr 2026 00:12:04 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@lesnik13utsa/N1yIMX2HtYy</guid><link>https://teletype.in/@lesnik13utsa/N1yIMX2HtYy?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa</link><comments>https://teletype.in/@lesnik13utsa/N1yIMX2HtYy?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa#comments</comments><dc:creator>lesnik13utsa</dc:creator><title>La Tanda Chain</title><pubDate>Wed, 25 Mar 2026 11:59:53 GMT</pubDate><description><![CDATA[<img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png"></img>UTSA validator]]></description><content:encoded><![CDATA[
  <figure id="S1KG" class="m_original">
    <img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png" width="820" />
  </figure>
  <p id="head" data-align="center">🪓 <a href="https://t.me/utsa_channel" target="_blank">Telegram канал UTSA</a> 🪓 <a href="https://t.me/utsa_chat" target="_blank">Telegram чат UTSA</a></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="D2wo" data-align="center"><strong><a href="https://n8n.latanda.online/chain/" target="_blank">Web</a> <a href="https://discord.gg/Ve9M2ZSYC2" target="_blank">Discord</a> <a href="https://github.com/INDIGOAZUL?tab=repositories" target="_blank">Github</a></strong></p>
  </section>
  <p id="sHgA"><u><strong>Testnet details</strong></u></p>
  <ul id="2h1F">
    <li id="ED8t">Network Chain ID: <code>latanda-testnet-1</code></li>
    <li id="8tyv">Denom stake: <code>ultd</code></li>
    <li id="SZWc">Binary: <code>latandad</code></li>
    <li id="OnH1">Working directory: <code>.latanda</code></li>
    <li id="AdcU">RPC: <a href="https://t-latanda.rpc.utsa.tech/" target="_blank">https://t-latanda.rpc.utsa.tech/</a></li>
    <li id="LaYP">API: <a href="https://t-latanda.api.utsa.tech/" target="_blank">https://t-latanda.api.utsa.tech/</a></li>
    <li id="pEU9">Explorer: <a href="https://exp.utsa.tech/latanda/staking" target="_blank">https://exp.utsa.tech/latanda/staking</a></li>
    <li id="W5Z0">Explorer: <a href="https://latanda.online/chain/#explorador" target="_blank">https://latanda.online/chain/#explorador</a></li>
    <li id="ZvSO">Docs: <a href="https://n8n.latanda.online/chain/#recursos" target="_blank">https://n8n.latanda.online/chain/#recursos</a></li>
    <li id="Erhj">Faucet: просить токены в дискорде</li>
  </ul>
  <hr />
  <p id="4x6c">La Tanda - это блокчейн-проект, который переносит классическую модель “сберегательных кругов” (tanda/ROSCA) в цифровой формат: участники объединяются в группы и по очереди получают общий пул средств. Идея сама по себе рабочая и используется во многих странах, однако роль блокчейна и токена в этой модели мне не до конца очевидна</p>
  <p id="43do">Тестовая сеть только запустилась и судя по дорожной карте валидаторы будут добавляться частями - <a href="https://n8n.latanda.online/chain/#roadmap" target="_blank">https://n8n.latanda.online/chain/#roadmap</a>  </p>
  <p id="T2gv">Заходить в валидаторы имеет смысл только без лишних ожиданий и затрат</p>
  <hr />
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre data-lang="bash" id="d9Ov"># проверяем статус prevotes/precommits
FOLDER=.latanda

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

PORT=&lt;ввести свой порт&gt;

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;</pre>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="CJUj"><strong>UPD 🕊 v (Высота обновления: )</strong></p>
    <pre data-lang="bash" id="gctM">cd $HOME/latanda-build
wget -q https://latanda.online/chain/latanda-chain-source.tar.gz
tar -xzf latanda-chain-source.tar.gz

go mod tidy
go build -o latandad ./cmd/latandad

$HOME/latanda-build/bin/latandad version --long | grep -e version -e commit
# version: 
# commit: 

# # ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop latandad
mv latandad $(which latandad)
latandad version --long | grep -e version -e commit
#

systemctl restart latandad &amp;&amp; journalctl -u latandad -f -o cat</pre>
  </section>
  <p id="gctM"></p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="6FkE">Подготовка сервера</h2>
  </section>
  <pre data-lang="bash" id="n0vj"># обновляем репозитории
apt update &amp;&amp; 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</pre>
  <p id="M4EP"><strong>File2Ban</strong> - подробнее <a href="https://www.linuxshop.ru/articles/a26710798-nastroyka_fail2ban" target="_blank">здесь</a></p>
  <pre data-lang="bash" id="TWGp"># устанавливаем и копируем конфиг, который будет иметь больший приоритет
apt install fail2ban -y &amp;&amp; \
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local &amp;&amp; \
nano /etc/fail2ban/jail.local
# раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 &lt;ip&gt;
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 &amp;&amp; systemctl disable fail2ban</pre>
  <p id="eKUj"><strong>Устанавливаем Go</strong></p>
  <pre data-lang="bash" id="K30V">ver=&quot;1.21.13&quot; &amp;&amp; \
wget &quot;https://golang.org/dl/go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
sudo rm -rf /usr/local/go &amp;&amp; \
sudo tar -C /usr/local -xzf &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
rm &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
echo &quot;export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin&quot; &gt;&gt; $HOME/.bash_profile &amp;&amp; \
source $HOME/.bash_profile &amp;&amp; \
go version</pre>
  <p id="j3bM"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1b58">Новая установка ноды</h2>
  </section>
  <section>
    <p id="z8pZ"><u><em><strong>ВАЖНО </strong>— в командах ниже все, что в <strong>&lt;&gt;</strong> меняем на свое значение и убираем сами<strong> &lt;&gt;</strong></em></u></p>
  </section>
  <p id="sjXD"><strong>Устанавливаем бинарники</strong></p>
  <pre data-lang="bash" id="9sYS">mkdir -p $HOME/latanda-build &amp;&amp; cd $HOME/latanda-build

wget -q https://latanda.online/chain/latanda-chain-source.tar.gz
tar -xzf latanda-chain-source.tar.gz

go mod tidy
go build -o latandad ./cmd/latandad

mv latandad $HOME/go/bin/

latandad version --long | grep -e version -e commit
# version: &quot;&quot;
# commit: &quot;&quot; </pre>
  <p id="vp48"><strong>Инициализируем ноду, чтобы создать необходимые файлы конфигурации</strong></p>
  <pre data-lang="bash" id="1EGv">latandad init UTSA_guide --chain-id latanda-testnet-1 --default-denom ultd</pre>
  <p id="Qrh4"><strong>Скачиваем Genesis</strong></p>
  <pre data-lang="bash" id="rQ2e">wget -O $HOME/.latanda/config/genesis.json &quot;https://latanda.online/chain/genesis.json&quot;

# Проверим генезис
sha256sum ~/.latanda/config/genesis.json
# 98fc9871d6a3b7b12b3f7fcaa1ca3303ffcfad0f209d61355975a15069ac3907</pre>
  <p id="4cmW"><strong>Скачиваем Addr book</strong></p>
  <pre data-lang="bash" id="IucL">wget -O $HOME/.latanda/config/addrbook.json &quot;https://share101.utsa.tech/latanda/addrbook.json&quot;</pre>
  <p id="WQhY"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="kBZ8">Настраиваем конфигурацию ноды</h2>
  </section>
  <pre data-lang="bash" id="rXOk"># правим конфиг, благодаря чему мы можем больше не использовать флаг chain-id для каждой команды CLI в client.toml
sed -i.bak -e &quot;s/^chain-id *=.*/chain-id = \&quot;latanda-testnet-1\&quot;/;&quot; ~/.latanda/config/client.toml
sed -i.bak -e &quot;s/^keyring-backend *=.*/keyring-backend = \&quot;os\&quot;/;&quot; ~/.latanda/config/client.toml

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

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

peers=&quot;483a8110c3cd93c8dd3801d935151e98656f5b67@168.231.67.201:26656&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.latanda/config/config.toml
seeds=&quot;&quot;
sed -i.bak -e &quot;s/^seeds =.*/seeds = \&quot;$seeds\&quot;/&quot; $HOME/.latanda/config/config.toml

# настраиваем фильтрацию &quot;плохих&quot; peers
sed -i -e &quot;s/^filter_peers *=.*/filter_peers = \&quot;true\&quot;/&quot; $HOME/.latanda/config/config.toml</pre>
  <p id="QI2Z"><strong>(ОПЦИОНАЛЬНО) Настраиваем прунинг в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="Aprq">pruning=&quot;custom&quot;
pruning_keep_recent=&quot;1000&quot;
pruning_interval=&quot;10&quot;
sed -i -e &quot;s/^pruning *=.*/pruning = \&quot;$pruning\&quot;/&quot; $HOME/.latanda/config/app.toml
sed -i -e &quot;s/^pruning-keep-recent *=.*/pruning-keep-recent = \&quot;$pruning_keep_recent\&quot;/&quot; $HOME/.latanda/config/app.toml
sed -i -e &quot;s/^pruning-interval *=.*/pruning-interval = \&quot;$pruning_interval\&quot;/&quot; $HOME/.latanda/config/app.toml</pre>
  <p id="dGeO"><strong>(ОПЦИОНАЛЬНО) Выкл индексацию в<code>config.toml</code></strong></p>
  <pre data-lang="bash" id="07j7">indexer=&quot;null&quot;
sed -i -e &quot;s/^indexer *=.*/indexer = \&quot;$indexer\&quot;/&quot; $HOME/.latanda/config/config.toml</pre>
  <p id="UDzq"><strong>(ОПЦИОНАЛЬНО) Вкл/выкл снэпшоты в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="Hutq">snapshot_interval=1000
sed -i.bak -e &quot;s/^snapshot-interval *=.*/snapshot-interval = \&quot;$snapshot_interval\&quot;/&quot; ~/.latanda/config/app.toml</pre>
  <p id="Hu7v"></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="5cMj">State sync</h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre data-lang="bash" id="ffLz"># add peer
peers=&quot;d6217d85d3747ebbfbf75898bd4407da567f5291@65.108.206.118:60556&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.latanda/config/config.toml</pre>
    <pre data-lang="bash" id="HU7h">SNAP_RPC=https://t-latanda.rpc.utsa.tech:443

LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 100)); \
TRUST_HASH=$(curl -s &quot;$SNAP_RPC/block?height=$BLOCK_HEIGHT&quot; | jq -r .result.block_id.hash)

echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH

sed -i.bak -E &quot;s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\&quot;$SNAP_RPC,$SNAP_RPC\&quot;| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\&quot;$TRUST_HASH\&quot;| ; \
s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\&quot;\&quot;|&quot; $HOME/.latanda/config/config.toml</pre>
    <pre data-lang="bash" id="OF8l">systemctl restart latandad &amp;&amp; journalctl -u latandad -f -o cat</pre>
  </section>
  <p id="fuhu"></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="N1Bw"><strong><s>Snapshots</s></strong></h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="yPUl" data-align="center"><s>time: <strong>every 24 hours</strong> <strong>| </strong>indexer:<strong> kv | </strong>pruning:<strong> 100/10</strong></s></p>
    <p id="SP72" data-align="center"><s>🌐</s></p>
    <pre data-lang="bash" id="o0h8">cd $HOME
systemctl stop latandad

cp $HOME/.latanda/data/priv_validator_state.json $HOME/.latanda/priv_validator_state.json.backup

# удаляем старую базу данных
rm -rf $HOME/.latanda/data/{application.db,evidence.db,snapshots,tx_index.db,blockstore.db,state.db,cs.wal}

# скачиваем snapshot
curl -o - -L https://server-4.net/testnet/latanda/latanda_2026-03-20_11888537_snap.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.latanda/

mv $HOME/.latanda/priv_validator_state.json.backup $HOME/.latanda/data/priv_validator_state.json

systemctl restart latandad &amp;&amp; journalctl -u latandad -f -o cat</pre>
  </section>
  <p id="AwrS"><strong>Создаем сервисный файл</strong></p>
  <pre data-lang="bash" id="I8Os">tee /etc/systemd/system/latandad.service &gt; /dev/null &lt;&lt;EOF
[Unit]
Description=latandad
After=network-online.target
Wants=network-online.target

[Service]
User=$USER
ExecStart=$(which latandad) start --home $HOME/.latanda
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF</pre>
  <pre data-lang="bash" id="P7os">systemctl daemon-reload
systemctl enable latandad
systemctl restart latandad &amp;&amp; journalctl -u latandad -f -o cat</pre>
  <p id="P3nc"><strong>Создаем или восстанавливаем кошелек и сохраняем вывод</strong></p>
  <pre data-lang="bash" id="xgZg"># создать кошелек
latandad keys add &lt;name_wallet&gt; --keyring-backend os

# восстановить кошелек (после команды вставить seed)
latandad keys add &lt;name_wallet&gt; --recover --keyring-backend os</pre>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="YLko"><strong>Не забываем сохранить seed !!!</strong></p>
  </section>
  <p id="rltT"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="sBaD"><strong>Создаем валидатора</strong></h2>
  </section>
  <p id="asq2">1. Получаем свой pubkey</p>
  <pre data-lang="bash" id="nd0a">latandad comet show-validator</pre>
  <p id="ywEz">2. Создаем validator.json</p>
  <pre data-lang="bash" id="jo3m">nano $HOME/.latanda/validator.json</pre>
  <p id="qdbf">3. Вставляем наш конфиг</p>
  <pre data-lang="bash" id="JFIW">{
    &quot;pubkey&quot;: {&quot;@type&quot;:&quot;/cosmos.crypto.ed25519.PubKey&quot;,&quot;key&quot;:&quot;c+EuycPpudgiyVl6guYODKveo=&quot;},
    &quot;amount&quot;: &quot;1100000000000000000ultd&quot;,
    &quot;moniker&quot;: &quot;yourmoniker&quot;,
    &quot;identity&quot;: &quot;optional identity signature (ex. UPort or Keybase)&quot;,
    &quot;website&quot;: &quot;validator&#x27;s (optional) website&quot;,
    &quot;security&quot;: &quot;validator&#x27;s (optional) security contact email&quot;,
    &quot;details&quot;: &quot;validator&#x27;s (optional) details&quot;,
    &quot;commission-rate&quot;: &quot;0.1&quot;,
    &quot;commission-max-rate&quot;: &quot;0.2&quot;,
    &quot;commission-max-change-rate&quot;: &quot;0.01&quot;,
    &quot;min-self-delegation&quot;: &quot;1&quot;
}</pre>
  <p id="KCoo">4. Отправляем транзакцию</p>
  <pre data-lang="bash" id="x15y">latandad tx staking create-validator $HOME/.latanda/validator.json \
    --from=&lt;name_wallet&gt; \
    --chain-id=latanda-testnet-1 \
    --fees 5000ultd -y</pre>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="kj2D"><strong>Не забываем сохранить priv_validator_key.json !!!</strong></p>
    <p id="VBzA">Подробнее о создании/редактировании валидатора можно почитать <a href="/@lesnik13utsa/RPLJpWXIoDQ">здесь</a></p>
  </section>
  <p id="3Ilq"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1eUH">Полезные команды</h2>
  </section>
  <p id="Fuvu"><strong>Информация</strong></p>
  <pre data-lang="bash" id="Vgbg"># проверить логи
sudo journalctl -u latandad -f -o cat
# проверить статус
curl localhost:$PORT/status | jq
# проверить баланс
latandad q bank balances &lt;address&gt;
# проверить pubkey валидатора
latandad tendermint show-validator
# проверить валидатора
latandad query staking validator &lt;valoper_address&gt;
latandad query staking validators --limit 1000000 -o json | jq &#x27;.validators[] | select(.description.moniker==&quot;&lt;name_moniker&gt;&quot;)&#x27; | jq
# проверка информации по TX_HASH
latandad query tx &lt;TX_HASH&gt;
# параметры сети
latandad q staking params
latandad q slashing params
# проверить сколько блоков пропущено валидатором и с какого блока актив
latandad q slashing signing-info $(latandad tendermint show-validator)
# проверить slashing
latandad q slashing signing-info $(latandad tendermint show-validator)
# узнать транзакцию создания валидатора (заменить свой valoper_address)
latandad query txs --events=&#x27;create_validator.validator=&lt;your_valoper_address&gt;&#x27; -o=json | jq .txs[0].txhash -r
# просмотр активного сета
latandad query staking validators -o json \
| jq -r &#x27;.validators[] 
 | select(.status==&quot;BOND_STATUS_BONDED&quot;) 
 | &quot;\(.tokens) \(.operator_address) \(.description.moniker)&quot;&#x27; \
| sort -gr | nl
# просмотр неактивного сета
latandad query staking validators -o json \
| jq -r &#x27;.validators[] 
  | select(.status!=&quot;BOND_STATUS_BONDED&quot;) 
  | &quot;\(.tokens) \(.operator_address) \(.description.moniker) \(.status)&quot;&#x27; \
| sort -gr | nl</pre>
  <p id="nXYz"><strong>Транзакции</strong></p>
  <pre data-lang="bash" id="DwKX"># собрать комиссионные + реварды
latandad tx distribution withdraw-rewards &lt;valoper_address&gt; --from &lt;name_wallet&gt; --fees 328408000000000ultd --gas auto --gas-adjustment 1.5 --commission -y

# заделегировать себе в стейк еще (так отправляется 1 монетa)
latandad tx staking delegate &lt;valoper_address&gt; 1000000ultd --from &lt;name_wallet&gt; --fees 328408000000000ultd --gas auto --gas-adjustment 1.5 -y

# ределегирование на другого валидатора
latandad tx staking redelegate &lt;src-validator-addr&gt; &lt;dst-validator-addr&gt; 1000000ultd --from &lt;name_wallet&gt; --fees 328408000000000ultd --gas auto --gas-adjustment 1.5 -y

# unbond 
latandad tx staking unbond &lt;addr_valoper&gt; 1000000ultd --from &lt;name_wallet&gt; --fees 328408000000000ultd --gas auto --gas-adjustment 1.5 -y

# отправить монеты на другой адрес
latandad tx bank send &lt;name_wallet&gt; &lt;address&gt; 1000000ultd --fees 328408000000000ultd --gas auto --gas-adjustment 1.5 -y

# выбраться из тюрьмы
latandad tx slashing unjail --from &lt;name_wallet&gt; --fees 328408000000000ultd --gas auto --gas-adjustment 1.5 -y</pre>
  <p id="zl2g"><strong>Работа с кошельками</strong></p>
  <pre data-lang="bash" id="gSNW"># вывести список кошельков
latandad keys list

# показать ключ аккаунта
latandad keys show &lt;name_wallet&gt; --bech acc

# показать ключ валидатора
latandad keys show &lt;name_wallet&gt; --bech val

# показать ключ консенсуса
latandad keys show &lt;name_wallet&gt; --bech cons

# запрос учетной записи
latandad q auth account $(latandad keys show &lt;name_wallet&gt; -a) -o text

# удалить кошелек
latandad keys delete &lt;name_wallet&gt;</pre>
  <p id="Qfld"><strong>Удалить ноду</strong></p>
  <pre data-lang="bash" id="Ojqs">systemctl stop latandad &amp;&amp; \
systemctl disable latandad &amp;&amp; \
rm /etc/systemd/system/latandad.service &amp;&amp; \
systemctl daemon-reload &amp;&amp; \
cd $HOME &amp;&amp; \
rm -rf .latanda latanda-build &amp;&amp; \
rm -rf $(which latandad)</pre>
  <p id="fYh0"><strong>ГОВЕРНАНС</strong></p>
  <pre data-lang="bash" id="8njc"># список proposals
latandad q gov proposals

# посмотреть результат голосования
latandad q gov proposals --voter &lt;ADDRESS&gt;

# проголосовать за предложение 
latandad tx gov vote 1 yes --from &lt;name_wallet&gt; --fees 328408000000000ultd --gas auto --gas-adjustment 1.5

# внести депозит в предложение
latandad tx gov deposit 1 1000000ultd --from &lt;name_wallet&gt; --fees 328408000000000ultd --gas auto --gas-adjustment 1.5

# создать предложение
latandad tx gov submit-proposal --title=&quot;Randomly reward&quot; --description=&quot;Reward 10 testnet participants who completed more than 3 tasks&quot; --type=&quot;Text&quot; --deposit=&quot;11000000ultd&quot; --from=&lt;name_wallet&gt; --fees 328408000000000ultd --gas auto --gas-adjustment 1.5</pre>
  <p id="chat-messages-932182862663389245"><strong>Peers and RPC</strong></p>
  <pre data-lang="bash" id="zfCY">FOLDER=.latanda

# узнать свой peer
PORTR=$(grep -A 3 &quot;\[p2p\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;) &amp;&amp; \
echo $(latandad tendermint show-node-id)@$(wget -qO- eth0.me)$PORTR

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

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

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

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;

# 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])</pre>
  <figure id="cY95" class="m_original">
    <img src="https://img3.teletype.in/files/e9/28/e92895ca-f71d-497c-9fd2-2e7eeedd5303.png" width="278" />
    <figcaption><strong>Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq</strong></figcaption>
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lesnik13utsa/HYJHkYMK-K4</guid><link>https://teletype.in/@lesnik13utsa/HYJHkYMK-K4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa</link><comments>https://teletype.in/@lesnik13utsa/HYJHkYMK-K4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa#comments</comments><dc:creator>lesnik13utsa</dc:creator><title>Lumen</title><pubDate>Sun, 04 Jan 2026 09:15:19 GMT</pubDate><category>MAINNET</category><description><![CDATA[<img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png"></img>🪓 Telegram канал UTSA 🪓 Telegram чат UTSA]]></description><content:encoded><![CDATA[
  <figure id="S1KG" class="m_original">
    <img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png" width="820" />
  </figure>
  <p id="head" data-align="center">🪓 <a href="https://t.me/utsa_channel" target="_blank">Telegram канал UTSA</a> 🪓 <a href="https://t.me/utsa_chat" target="_blank">Telegram чат UTSA</a></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="D2wo" data-align="center"><strong>Web <a href="https://discord.gg/DwK6V9shKc" target="_blank">Discord</a> <a href="https://github.com/network-lumen/validator-kit/tree/master" target="_blank">Github</a></strong></p>
  </section>
  <p id="sHgA"><u><strong>Testnet details</strong></u></p>
  <ul id="2h1F">
    <li id="ED8t">Network Chain ID: <code>lumen</code></li>
    <li id="8tyv">Denom stake: <code>ulmn</code></li>
    <li id="SZWc">Binary: <code>lumend</code></li>
    <li id="OnH1">Working directory: <code>.lumen</code></li>
    <li id="AdcU">RPC: <a href="https://m-lumen.rpc.utsa.tech/" target="_blank">https://m-lumen.rpc.utsa.tech/</a></li>
    <li id="LaYP">API: <a href="https://m-lumen.api.utsa.tech/" target="_blank">https://m-lumen.api.utsa.tech/</a></li>
    <li id="W5Z0">Explorer: <a href="https://exp.utsa.tech/lumen/staking" target="_blank">https://exp.utsa.tech/lumen/staking</a></li>
    <li id="ZvSO">Docs: <a href="https://github.com/network-lumen/validator-kit/tree/master" target="_blank">https://github.com/network-lumen/validator-kit/tree/master</a></li>
  </ul>
  <p id="17y2">Lumen - это децентрализованный интернет-стек, объединяющий браузер, шлюзы и блокчейн. Нативный браузер для экосистемы Lumen обеспечивает прямой доступ к состоянию блокчейна, контенту IPFS и сетевым шлюзам без централизованных серверов или доверенных посредников</p>
  <p id="AAG7"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="6FkE">Подготовка сервера</h2>
  </section>
  <pre data-lang="bash" id="Ld2e"># обновляем репозитории
apt update &amp;&amp; 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</pre>
  <p id="M4EP"><strong>File2Ban</strong> - подробнее <a href="https://www.linuxshop.ru/articles/a26710798-nastroyka_fail2ban" target="_blank">здесь</a></p>
  <pre data-lang="bash" id="Zpig"># устанавливаем и копируем конфиг, который будет иметь больший приоритет
apt install fail2ban -y &amp;&amp; \
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local &amp;&amp; \
nano /etc/fail2ban/jail.local
# раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 &lt;ip&gt;
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 &amp;&amp; systemctl disable fail2ban</pre>
  <p id="eKUj"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1b58">Новая установка ноды</h2>
  </section>
  <section>
    <p id="z8pZ"><u><em><strong>ВАЖНО </strong>— в командах ниже все, что в <strong>&lt;&gt;</strong> меняем на свое значение и убираем сами<strong> &lt;&gt;</strong></em></u></p>
  </section>
  <p id="sjXD"><strong>Перед установкой ноды ознакомьтесь с рекомендациями для валидатора. Необходимо настроить валидатора совместно с sentry нодами для безопасности -  <a href="https://github.com/network-lumen/validator-kit/blob/master/ops/validator_specs.md" target="_blank">https://github.com/network-lumen/validator-kit/blob/master/ops/validator_specs.md</a></strong></p>
  <p id="uIPV">Команда частями добавляет валидаторов в активный сет. Для того, чтобы заявить о себе настройте ноду валидатора, которая будет работать через sentry и расскажите о себе в дискорде на канале Introduction. Также команда рекомендует использовать сервера не в Европе и Индонезии для увеличения децентрализации и шансов попадания в активный сет. Подробнее о планах развития валидаторов здесь - <a href="https://github.com/network-lumen/validator-kit/blob/master/ops/stake_bootstrap.md" target="_blank">https://github.com/network-lumen/validator-kit/blob/master/ops/stake_bootstrap.md</a></p>
  <p id="8hy3">Команда проекта создала множество удобных скриптов для настройки как валидатора, так и sentry и RPC узлов</p>
  <p id="qCnR"><strong>Для быстрой установки воспользуйтесь скриптом</strong></p>
  <pre data-lang="bash" id="9xn7">git clone https://github.com/network-lumen/validator-kit.git
cd validator-kit

./join.sh &lt;moniker&gt;

$HOME/validator-kit/bin/lumend version
# v1.3.0

cp $HOME//validator-kit/bin/lumend /usr/local/bin/lumend
lumend version
# v1.3.0

journalctl -u lumend -f -o cat</pre>
  <p id="vp48">На данном этапе на сервере будет запущена full node и Вы можете оставить все как есть или внести необходимые Вам изменения через файлы конфигов</p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="6x9e"><strong>Для установки актуального бинарного файла необходимо сделать следующее</strong></p>
    <pre id="NScm" data-lang="bash">systemctl stop lumend

sudo sed -i &#x27;s|^ExecStart=/root/validator-kit/bin/lumend start --home /root/.lumen \\|ExecStart=/usr/local/bin/lumend start --home /root/.lumen \\|&#x27; /etc/systemd/system/lumend.service
systemctl daemon-reload

SEEDS=&quot;0a4bbe418246ca2b9d1dec063ea1cb8898c01763@77.42.72.251:26656,1a5cbd9d580f502f5af5ecc5762553da7a7c6584@65.21.253.43:26656,825673007163d80295eefc5c00ff54aee7b33a67@seed.blocksync.me:34656&quot;

sed -i \
  -e &quot;s/^seeds *=.*/seeds = \&quot;$SEEDS\&quot;/&quot; \
  -e &quot;s/^pex *=.*/pex = true/&quot; \
  /root/.lumen/config/config.toml</pre>
    <pre id="NScm" data-lang="bash">cd /root/validator-kit
curl -L https://github.com/network-lumen/blockchain/releases/download/v1.6.0/linux-amd64-v1.6.0 -o lumend

chmod +x lumend
/root/validator-kit/lumend version --long
# version: v1.6.0
# commit: 99786e1

mv /root/validator-kit/lumend /usr/local/bin/lumend
systemctl restart lumend &amp;&amp; journalctl -u lumend -f -o cat</pre>
  </section>
  <p id="58GT"></p>
  <p id="w41O">Если нода не может поймать пиры, то обновите адресную книгу</p>
  <pre id="wx4p" data-lang="bash">wget -O $HOME/.lumen/config/addrbook.json &quot;https://share.utsa.tech/lumen/addrbook.json&quot;</pre>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Yczk">Рекомендации для validator, sentrys <a href="https://github.com/network-lumen/validator-kit/blob/master/ops/validator_specs.md" target="_blank">https://github.com/network-lumen/validator-kit/blob/master/ops/validator_specs.md</a></p>
    <hr />
    <p id="dxxv">Обращаю Ваше внимание на то, что есть тонкие настройки sentry и validator. Вы можете воспользоваться готовым скриптом от команды на гитхабе или самостоятельно изменить настройки брандмауэра и конфигурационных файлов</p>
    <p id="oyLI">При ручном изменении конфигураций необходимо как минимум:</p>
    <p id="SnHy">Изменить настройки для validator</p>
    <pre id="U7m2" data-lang="bash">!!! CONFIG TOML
seeds = &quot;&quot;
pex = false
persistent_peers = &quot;&lt;PEER_SENTRY1,PEER_SENTRY2&gt;&quot;
private_peer_ids = &quot;&lt;ID_SENTRY1,ID_SENTRY2&gt;&quot;
unconditional_peer_ids = &quot;&lt;ID_SENTRY1,ID_SENTRY2&gt;&quot;</pre>
    <p id="SXLN">Изменить настройки для sentrys</p>
    <pre id="gaVJ" data-lang="bash">!!! CONFIG TOML
pex = true
persistent_peers = &quot;&lt;PEER_VALIDATOR&gt;&quot;</pre>
    <p id="gaVJ">Настроить Ваши брандмауэры для ограниченной связи sentry и validator</p>
    <p id="VVPd">После того как Вы выполните все настройки и запустите ноды проверьте сколько peers имеется у Ваших нод. Для validator значение должно быть равно количеству Ваших sentrys</p>
    <pre id="AcFo" data-lang="bash"># проверка количества пиров
PORT=
curl -s http://localhost:$PORT/net_info | jq -r &#x27;.result.peers[] | &quot;\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr | split(&quot;:&quot;)[2])&quot;&#x27; | wc -l

# cписок моникеров подключенных пиров
curl -s http://localhost:$PORT/net_info | jq &#x27;.result.peers[].node_info.moniker&#x27;</pre>
  </section>
  <p id="uTjh"></p>
  <p id="KoQx">Также Вы можете воспользоваться snapshot или state-sync. Пожалуйста, воспользуйтесь скриптами на гитхабе или командами ниже</p>
  <p id="nPwK"></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="5cMj">State sync</h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre data-lang="bash" id="LXiP"># add peer
peers=&quot;546d284c7b7f7a717b06d17002f28ee746ded36f@144.76.29.90:26656&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.lumen/config/config.toml</pre>
    <pre data-lang="bash" id="zh3X">SNAP_RPC=https://m-lumen.rpc.utsa.tech:443

LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 100)); \
TRUST_HASH=$(curl -s &quot;$SNAP_RPC/block?height=$BLOCK_HEIGHT&quot; | jq -r .result.block_id.hash)

echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH

sed -i.bak -E &quot;s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\&quot;$SNAP_RPC,$SNAP_RPC\&quot;| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\&quot;$TRUST_HASH\&quot;| ; \
s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\&quot;\&quot;|&quot; $HOME/.lumen/config/config.toml</pre>
    <pre data-lang="bash" id="O7KW">systemctl restart lumend &amp;&amp; journalctl -u lumend -f -o cat</pre>
  </section>
  <p id="pjza"></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="N1Bw"><strong>Snapshot</strong></h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="yPUl" data-align="center">time: <strong>every __ hours</strong> <strong>| </strong>indexer:<strong> kv | </strong>pruning:<strong> 1000/100</strong></p>
    <p id="SP72" data-align="center">🌐 <a href="https://file.blocksync.me/lumen/" target="_blank">https://file.blocksync.me/lumen/</a></p>
    <pre data-lang="bash" id="v6Yl">cd $HOME
systemctl stop lumend

cp $HOME/.lumen/data/priv_validator_state.json $HOME/.lumen/priv_validator_state.json.backup

# удаляем старую базу данных
rm -rf $HOME/.lumen/data/{application.db,evidence.db,snapshots,tx_index.db,blockstore.db,state.db}

# скачиваем snapshot от blocksync
#curl -o - -L https://file.blocksync.me/lumen/snapshot_20260103.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.lumen/
curl -o - -L https://data.winsnip.xyz/list/mainnet/lumen/snapshot/lumen_snapshot-latest.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.lumen/

mv $HOME/.lumen/priv_validator_state.json.backup $HOME/.lumen/data/priv_validator_state.json

systemctl restart lumend &amp;&amp; journalctl -u lumend -f -o cat</pre>
  </section>
  <p id="AwrS"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="sBaD"><strong>Создаем валидатора</strong></h2>
  </section>
  <p id="uNd8"><strong>Создаем или восстанавливаем кошелек и сохраняем вывод</strong></p>
  <pre data-lang="bash" id="ztnj"># создать кошелек
lumend keys add validator --home ~/.lumen --keyring-backend test

# восстановить кошелек (после команды вставить seed)
lumend keys add validator --home ~/.lumen --recover --keyring-backend test</pre>
  <p id="ztnj">Для создания валидатора Вам необходимо будет воспользоваться скриптом ниже. Данный скрипт сделает следующее:</p>
  <ul id="hDdt">
    <li id="nRYk">проверит, что ключ PQC validator-pqc существует (и сгенерирует его при необходимости);</li>
    <li id="GOm2">свяжет учетную запись PQC в блокчейне, использует существующий открытый ключ консенсуса из <code>lumend tendermint show-validator;</code></li>
    <li id="WSM9">отправит транзакцию стейкинга <code>create-validator</code> с минимальным самоделегированием;</li>
    <li id="2k0T">при необходимости создаст структурированную резервную копию в <code>~/.lumen/validator-node.bak</code></li>
  </ul>
  <pre id="ztnj" data-lang="bash">cd
HOME_DIR=~/.lumen FROM=validator \
  ops/scripts/blockchain/become_validator.sh --moniker &quot;&lt;public-validator-name&gt;&quot;</pre>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="bgLL"><strong>Валидаторы ДОЛЖНЫ создавать резервные копии ОБОИХ криптографических ключей:</strong></p>
    <ul id="spEX">
      <li id="qrF2">✅ <strong>ключ ed25519</strong> (классический ключ Cosmos)</li>
      <li id="lY9P">✅ <strong>ключ PQC (Dilithium)</strong></li>
    </ul>
    <p id="jBxb">👉 <strong>Если Вы потеряете ОДИН из них, вы ЛИШИТЕСЬ ДОСТУПА К СВОИМ СРЕДСТВАМ!!!<br />Подробнее о ключах здесь - <a href="https://github.com/network-lumen/validator-kit/blob/master/learn/validator-key-hardening.md" target="_blank">https://github.com/network-lumen/validator-kit/blob/master/learn/validator-key-hardening.md</a></strong></p>
  </section>
  <p id="82Zp"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1eUH">Полезные команды</h2>
  </section>
  <p id="vgre"><strong>Информация</strong></p>
  <pre data-lang="bash" id="KCOZ"># проверить логи
journalctl -u lumend -f -o cat
# проверить статус
curl localhost:$PORT/status | jq
# проверить баланс
lumend q bank balances &lt;address&gt;
# проверить pubkey валидатора
lumend tendermint show-validator
# проверить валидатора
lumend query staking validator &lt;valoper_address&gt;
lumend query staking validators --limit 1000000 -o json | jq &#x27;.validators[] | select(.description.moniker==&quot;&lt;name_moniker&gt;&quot;)&#x27; | jq
# проверка информации по TX_HASH
lumend query tx &lt;TX_HASH&gt;
# параметры сети
lumend q staking params
lumend q slashing params
# проверить сколько блоков пропущено валидатором и с какого блока актив
lumend q slashing signing-info $(lumend tendermint show-validator)
# проверить slashing
lumend q slashing signing-info $(lumend tendermint show-validator)
# узнать транзакцию создания валидатора (заменить свой valoper_address)
lumend query txs --events=&#x27;create_validator.validator=&lt;your_valoper_address&gt;&#x27; -o=json | jq .txs[0].txhash -r</pre>
  <p id="nXYz"><strong>Транзакции</strong></p>
  <pre data-lang="bash" id="SQXf"># создать валидатора
HOME_DIR=/root/.lumen FROM=validator \
  ops/scripts/blockchain/become_validator.sh --moniker &quot;UTSA&quot;

# докинуть стейк
HOME_DIR=/root/.lumen FROM=validator \
  ops/scripts/blockchain/stake_tokens.sh --amount 1000000ulmn


# собрать награды
ADDR=$(lumend keys show validator -a --home /root/.lumen --keyring-backend test)

lumend tx distribution withdraw-rewards &lt;lmnvaloperXXX&gt; \
  --chain-id lumen \
  --from validator \
  --commission \
  --fees 0ulmn \
  --keyring-backend test \
  --pqc-enable \
  --pqc-from &quot;$ADDR&quot; \
  --pqc-key &quot;validator-pqc&quot; \
  --node tcp://127.0.0.1:26657

# отправить монеты
TO=&quot;&lt;lmn1addr&gt;&quot;
AMOUNT=&quot;1200000ulmn&quot;
ADDR=$(lumend keys show validator -a --home /root/.lumen --keyring-backend test)

lumend tx bank send &quot;$ADDR&quot; &quot;$TO&quot; &quot;$AMOUNT&quot; \
  --chain-id lumen \
  --from validator \
  --fees 0ulmn \
  --keyring-backend test \
  --pqc-enable \
  --pqc-from &quot;$ADDR&quot; \
  --pqc-key &quot;validator-pqc&quot; \
  --node tcp://127.0.0.1:26657 \
  -y</pre>
  <p id="zl2g"><strong>Работа с кошельками</strong></p>
  <pre data-lang="bash" id="xTjh"># вывести список кошельков
lumend keys list --keyring-backend test

# показать ключ аккаунта
lumend keys show validator --bech acc --keyring-backend test

# показать ключ валидатора
lumend keys show validator --bech val --keyring-backend test

# показать ключ консенсуса
lumend keys show validator --bech cons --keyring-backend test

# удалить кошелек
lumend keys delete validator</pre>
  <p id="Qfld"><strong>Удалить ноду</strong></p>
  <pre data-lang="bash" id="24aT">systemctl stop lumend &amp;&amp; \
systemctl disable lumend &amp;&amp; \
rm /etc/systemd/system/lumend.service &amp;&amp; \
systemctl daemon-reload &amp;&amp; \
cd $HOME &amp;&amp; \
rm -rf .lumen validator-kit &amp;&amp; \
rm -rf $(which lumend)</pre>
  <p id="fYh0"><strong>ГОВЕРНАНС</strong></p>
  <pre data-lang="bash" id="fRx5"># список proposals
lumend q gov proposals

# посмотреть результат голосования
lumend q gov proposals --voter &lt;ADDRESS&gt;

# проголосовать за предложение 
HOME=/root/.lumen
KEYRING=test
FROM=validator
PROP_ID=8

ADDR=$(lumend keys show $FROM -a --home $HOME --keyring-backend $KEYRING)

lumend tx gov vote $PROP_ID yes \
  --chain-id lumen \
  --from $FROM \
  --keyring-backend $KEYRING \
  --fees 0ulmn \
  --gas auto \
  --gas-adjustment 1.5 \
  --node tcp://127.0.0.1:26657 \
  --pqc-enable \
  --pqc-from &quot;$ADDR&quot; \
  --pqc-key &quot;validator-pqc&quot; \
  -y</pre>
  <p id="chat-messages-932182862663389245"><strong>Peers and RPC</strong></p>
  <pre data-lang="bash" id="CFLR">FOLDER=.lumen

# узнать свой peer
PORTR=$(grep -A 3 &quot;\[p2p\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;) &amp;&amp; \
echo $(lumend tendermint show-node-id)@$(wget -qO- eth0.me)$PORTR

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

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

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

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;

# 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])</pre>
  <figure id="cY95" class="m_original">
    <img src="https://img3.teletype.in/files/e9/28/e92895ca-f71d-497c-9fd2-2e7eeedd5303.png" width="278" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lesnik13utsa/MWGQZbjRa2b</guid><link>https://teletype.in/@lesnik13utsa/MWGQZbjRa2b?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa</link><comments>https://teletype.in/@lesnik13utsa/MWGQZbjRa2b?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa#comments</comments><dc:creator>lesnik13utsa</dc:creator><title>Canton Network</title><pubDate>Sat, 04 Oct 2025 09:01:57 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/dd/5b/dd5b5933-699f-4cfb-a540-6dfb896266dd.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/f0/1f/f01fd6c9-0980-4052-a054-5d5a0ca4e92d.png"></img>Canton Network]]></description><content:encoded><![CDATA[
  <figure id="5fmi" class="m_custom">
    <img src="https://img4.teletype.in/files/f0/1f/f01fd6c9-0980-4052-a054-5d5a0ca4e92d.png" width="1065" />
  </figure>
  <p id="vdYt" data-align="center">🪓 <a href="https://t.me/utsa_channel" target="_blank">Telegram канал UTSA</a> 🪓 <a href="https://t.me/utsa_chat" target="_blank">Telegram чат UTSA</a></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="6ser" data-align="center"><strong><a href="https://www.canton.network/" target="_blank">Web</a> <a href="https://twitter.com/CantonNetwork" target="_blank">Twitter</a> <a href="https://canton.thetie.io/" target="_blank">Dashboard</a></strong></p>
  </section>
  <p id="DF8U"><u><strong>Details</strong></u></p>
  <ul id="2h1F">
    <li id="ED8t">Networks: <code>devnet; mainnet</code></li>
    <li id="ZxOs">Working directory: <code>.canton</code></li>
    <li id="1UaE">Explorer: <a href="https://lighthouse.devnet.cantonloop.com/" target="_blank">https://lighthouse.devnet.cantonloop.com/</a></li>
    <li id="q4pT">Интерфейс WALLET: <a href="http://wallet.localhost/" target="_blank">http://wallet.localhost/</a></li>
    <li id="qtMN">Интерфейс CNS: <a href="http://ans.localhost/" target="_blank">http://ans.localhost/</a></li>
    <li id="MpzD">Docs: <a href="https://sync.global/docs/" target="_blank">https://sync.global/docs/</a></li>
    <li id="eK50">WhitePaper: <a href="https://www.canton.network/whitepaper" target="_blank">https://www.canton.network/whitepaper</a></li>
  </ul>
  <p id="xbFy"></p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="i2L0"><strong>Canton Network</strong></h2>
  </section>
  <p id="0EDn"><strong>Canton Network</strong> — это первая в мире блокчейн-сеть с поддержкой конфиденциальности и полной межоперабельностью, ориентированная на <strong>реальные, регулируемые активы</strong></p>
  <p id="8EDt">Её цель - создать безопасную инфраструктуру, где финансовые организации могут взаимодействовать напрямую, не теряя контроля над данными и соблюдая требования регуляторов</p>
  <p id="iuuk">В основе экосистемы лежит <strong>Global Synchronizer</strong> - децентрализованный сервис, который обеспечивает синхронизацию и связь между независимыми блокчейнами внутри Canton Network. Он использует <strong>BFT-консенсус</strong> и управляется открытым сообществом независимых организаций, называемых <strong>Super Validators</strong>. Эти участники отвечают за надёжность, безопасность и порядок транзакций в сети</p>
  <hr />
  <p id="k7xW">🧩 <strong>Валидаторы: основа работы сети</strong></p>
  <p id="m70p">Помимо супер-валидаторов, важнейшую роль играют <strong>простые валидаторы</strong> — именно им и посвящён этот гайд</p>
  <p id="7Adi"><strong>Validators</strong> - это участники, которые работают внутри Canton Network, проверяя транзакции, ведя учёт активности и обеспечивая связь между пользователями и приложениями</p>
  <p id="navY">Каждый валидатор хранит только те данные, которые ему необходимы, и взаимодействует с другими узлами через синхронизаторы, что делает сеть масштабируемой и безопасной</p>
  <p id="XQSV">Основные задачи валидатора:</p>
  <ul id="X5xf">
    <li id="9OQK">Проверять транзакции и подтверждать их корректность;</li>
    <li id="JQNJ">Записывать активность и обеспечивать целостность данных;</li>
    <li id="gD5q">Поддерживать стабильное соединение между пользователями и приложениями;</li>
    <li id="EgpK">Участвовать в обновлениях и миграциях сети</li>
  </ul>
  <p id="9jGD">Активность и стабильность узла напрямую влияют на <strong>вознаграждение валидатора</strong>. Сеть поощряет тех, кто работает надёжно и постоянно обрабатывает трафик - через механизм <strong>minting rewards</strong> и <strong>liveness incentives</strong></p>
  <hr />
  <p id="v3Su">💰 <strong>Canton Coin и стимулы сети</strong></p>
  <p id="n1Eo">Нативный токен <strong>Canton Coin</strong> используется для стимулирования участников сети. Он обеспечивает баланс между использованием и эмиссией - токены сжигаются при оплате комиссий и создаются вновь как вознаграждение активным валидаторам</p>
  <p id="ZQRn">Таким образом, чем активнее используется сеть, тем устойчивее становится экономика Canton Network.</p>
  <hr />
  <p id="q52r">⚡ <strong>Сеть Canton создаёт фундамент для децентрализованной, но регулируемой финансовой инфраструктуры нового поколения</strong></p>
  <p id="UABR">Здесь роль валидаторов особенно значима - именно они обеспечивают надёжность и живучесть экосистемы, формируя её устойчивость и доверие</p>
  <hr />
  <p id="aJJy">💰 <strong>Инвестиции</strong></p>
  <p id="SWIn">Проект уже получил <strong>косвенные инвестиции около $400 млн</strong> от топовых (Tier 1) фондов - <a href="https://crypto-fundraising.info/projects/canton-network/" target="_blank">источник</a></p>
  <hr />
  <p id="xNoE"><strong>⚠️ Важно</strong></p>
  <p id="ciw2">Данный гайд описывает <strong>общие условия и принципы установки ноды Canton Network</strong></p>
  <ul id="MxqA">
    <li id="fhmL">Перед запуском <strong>обязательно ознакомьтесь с официальной документацией</strong> от команды проекта, только она содержит актуальные технические требования и инструкции по настройке</li>
    <li id="vybE">Настоятельно рекомендуется <strong>обеспечить безопасность своего кошелька и приватных ключей</strong>, особенно при запуске через docker-compose, так как развертывание по умолчанию крайне небезопасно -<a href="https://docs.dev.sync.global/validator_operator/validator_compose.html#compose-validator-auth" target="_blank">https://docs.dev.sync.global/validator_operator/validator_compose.html#compose-validator-auth</a></li>
    <li id="QVPk"><strong>Обязательно делайте резервные копии базы данных</strong> - <a href="https://docs.dev.sync.global/validator_operator/validator_backups.html#backup-of-node-identities" target="_blank">https://docs.dev.sync.global/validator_operator/validator_backups.html#backup-of-node-identities</a></li>
  </ul>
  <p id="0dTZ"></p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="2e4N">Подача заявки на валидатора</h2>
  </section>
  <p id="RYUq">Воспользуйтесь формой ниже, если Вы хотите настроить свою собственную ноду  в качестве оператора, заявка будет отправлена в Комитет по токеномике для рассмотрения. Процесс занимает примерно 2 недели</p>
  <p id="jdqP">🔗 <a href="https://sync.global/validator-request/" target="_blank">https://sync.global/validator-request/</a></p>
  <p id="WV72">Для подачи заявки нельзя использовать бесплатную почту - воспользуйтесь собственной почтой на собственном домене</p>
  <p id="hrx4">Более подробно с процессом развертывания валидатора Вы можете ознакомиться в данной статье - <a href="https://docs.dev.sync.global/validator_operator/validator_onboarding.html" target="_blank">https://docs.dev.sync.global/validator_operator/validator_onboarding.html</a></p>
  <p id="Xxi0"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="6FkE">Подготовка сервера</h2>
  </section>
  <pre data-lang="bash" id="AZIc"># обновляем репозитории
apt update &amp;&amp; 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</pre>
  <p id="M4EP"><strong>File2Ban</strong> - подробнее <a href="https://putty.org.ru/articles/fail2ban-ssh.html" target="_blank">здесь</a> и <a href="https://www.linuxshop.ru/articles/a26710798-nastroyka_fail2ban" target="_blank">здесь</a></p>
  <pre data-lang="bash" id="BwPC"># устанавливаем и копируем конфиг, который будет иметь больший приоритет
apt install fail2ban -y &amp;&amp; \
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local &amp;&amp; \
nano /etc/fail2ban/jail.local
# раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 &lt;ip&gt;
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 &amp;&amp; systemctl disable fail2ban</pre>
  <p id="E2u0"><strong>Устанавливаем docker + docker-compose</strong></p>
  <pre data-lang="bash" id="Xe1p"># https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-ru
apt update &amp;&amp; \
apt install apt-transport-https ca-certificates curl software-properties-common -y &amp;&amp; \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - &amp;&amp; \
add-apt-repository &quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable&quot; &amp;&amp; \
apt update &amp;&amp; \
apt-cache policy docker-ce &amp;&amp; \
sudo apt install docker-ce -y &amp;&amp; \
docker --version</pre>
  <pre data-lang="bash" id="mDSs"># ручная установка docker-compose https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04-ru
# проверяем версию https://github.com/docker/compose/releases и подставляем в команду установки
curl -L &quot;https://github.com/docker/compose/releases/download/v2.10.1/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose

# проверить версию
docker-compose --version</pre>
  <p id="EUKz"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1b58">Новая установка ноды</h2>
  </section>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="ImyQ"><strong>Важно:</strong> развертывание по умолчанию через docker-compose крайне небезопасно, поэтому позаботьтесь о том, чтобы только Вы могли заходить на свой кошелек <a href="http://wallet.localhost/" target="_blank">http://wallet.localhost/</a></p>
    <p id="bNMG">В случае если Вы оставите порты открытыми, то любой сможет зайти на Ваш кошелек зная Ваш IP адрес. Пожалуйста создаете токен <strong>auth</strong> или закройте порты в docker!!!</p>
  </section>
  <p id="sjXD"><strong>Создаем необходимые каталоги. Для каждой новой версии мы будем использовать новый каталог</strong></p>
  <pre data-lang="bash" id="RzVi">mkdir -p ~/.canton
mkdir -p ~/.canton/0.4.19
cd ~/.canton/0.4.19</pre>
  <p id="Y8zz"><strong>Скачиваем архив с docker-compose</strong></p>
  <pre data-lang="bash" id="vBX8">wget https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.4.19/0.4.19_splice-node.tar.gz
tar xzvf 0.4.19_splice-node.tar.gz
cd ~/.canton/0.4.19/splice-node/docker-compose/validator</pre>
  <p id="dIgE"><strong>Явно указываем версию для правильной сборки</strong></p>
  <pre id="ESzT" data-lang="bash">export IMAGE_TAG=0.4.19</pre>
  <p id="k0lB">Для запуска ноды нам необходимо получить токен доступа. Для Devnet мы можем получить его самостоятельно, для Testnet и Mainnet нам необходимо получить его у спонсора</p>
  <p id="jHJa"><strong>Получаем токен для DEVNET (действует 1 час)</strong><br /># при первом включении используем его - при дальнейших запусках удаляем токен и оставляем <code>-o &quot;&quot;</code></p>
  <pre id="qC1C" data-lang="bash">curl -X POST https://sv.sv-1.dev.global.canton.network.sync.global/api/sv/v0/devnet/onboard/validator/prepare</pre>
  <p id="FR9F"><strong>Запускаем ноду</strong></p>
  <pre id="zmhm">./start.sh -s &quot;&lt;SPONSOR_SV_URL&gt;&quot; -o &quot;&lt;ONBOARDING_SECRET&gt;&quot; -p &quot;&lt;party_hint&gt;&quot; -m &quot;&lt;MIGRATION_ID&gt;&quot; -w</pre>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="mqSD">Где:</p>
    <ul id="3lNf">
      <li id="mMSC">&lt;SPONSOR_SV_URL&gt; = <a href="https://sv.sv-1.dev.global.canton.network.sync.global" target="_blank">https://sv.sv-1.dev.global.canton.network.sync.global</a></li>
      <li id="RS0W">&lt;ONBOARDING_SECRET&gt; = Ваш токен для Devnet</li>
      <li id="EhX1">&lt;party_hint&gt;= Ваше название валидатора (пример: Val-validator-1)</li>
      <li id="huwo">&lt;MIGRATION_ID&gt;=0 для Devnet (смотрим здесь - <a href="https://sync.global/sv-network/" target="_blank">https://sync.global/sv-network/</a>)</li>
    </ul>
  </section>
  <p id="bVHt"><strong>После успешного запуска Вы можете проверить логи</strong></p>
  <pre id="hApt" data-lang="bash">cd /root/.canton/0.4.19/splice-node/docker-compose/validator
docker compose logs -f validator</pre>
  <figure id="fn0B" class="m_custom">
    <img src="https://img4.teletype.in/files/f1/d0/f1d0706d-010e-46d4-aba4-5e36ab48b203.png" width="965" />
  </figure>
  <p id="NAGB">Обратите внимание, что валидатор можно остановить с помощью команды <code>./stop.sh</code> и перезапустить с помощью той же команды <code>start.sh</code>, как указано выше. При последующих вызовах токен можно не указывать и оставить поле пустым, но флаг <code>-o</code> по-прежнему обязателен, поэтому необходимо указать аргумент <code>-o &quot;&quot;</code></p>
  <p id="8U3w"></p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1eUH">Полезные команды</h2>
  </section>
  <p id="Fuvu"><strong>Посмотреть логи</strong></p>
  <pre data-lang="bash" id="KP5m">cd ~/.canton/0.4.19/splice-node/docker-compose/validator
docker compose logs -f validator</pre>
  <p id="Qfld"><strong>Остановить ноду</strong></p>
  <pre data-lang="bash" id="1oae">cd ~/.canton/0.4.19/splice-node/docker-compose/validator
./stop.sh</pre>
  <p id="NaAg"><strong>Запустить ноду повторно</strong></p>
  <pre id="pKyr" data-lang="bash">cd ~/.canton/0.4.19/splice-node/docker-compose/validator
./start.sh -s &quot;https://sv.sv-1.dev.global.canton.network.sync.global&quot; -o &quot;&quot; -p &quot;</pre>
  <p id="2HAs"><strong>Проверить приняли ли IP супервалидаторы для Devnet</strong></p>
  <pre id="rptk" data-lang="bash">(set -o pipefail
CURL=&#x27;curl -fsS -m 5 --connect-timeout 5&#x27;
for url in $($CURL https://scan.sv-1.dev.global.canton.network.sync.global/api/scan/v0/scans | jq -r &#x27;.scans[].scans[].publicUrl&#x27;); do
  echo -n &quot;$url: &quot;
  $CURL &quot;$url&quot;/api/scan/version | jq -r &#x27;.version&#x27;
done)</pre>
  <p id="pakl"><strong>Проверить приняли ли IP супервалидаторы для Mainnet</strong></p>
  <pre id="3MwN" data-lang="bash">(set -o pipefail
CURL=&#x27;curl -fsS -m 5 --connect-timeout 5&#x27;
for url in $($CURL https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/scans | jq -r &#x27;.scans[].scans[].publicUrl&#x27;); do
  echo -n &quot;$url: &quot;
  $CURL &quot;$url&quot;/api/scan/version | jq -r &#x27;.version&#x27;
done)</pre>
  <p id="K1f2"><strong>Пример обновления. Перед обновлением обязательно делайте резервные копии</strong></p>
  <pre id="1oae" data-lang="bash"># останавливаем ноду
cd ~/.canton/0.4.18/splice-node/docker-compose/validator
./stop.sh

# создаем отдельный каталог
mkdir -p ~/.canton/0.4.19
cd ~/.canton/0.4.19

# скачиваем архив
wget https://github.com/digital-asset/decentralized-canton-sync/releases/download/v0.4.19/0.4.19_splice-node.tar.gz
tar xzvf 0.4.19_splice-node.tar.gz
cd ~/.canton/0.4.19/splice-node/docker-compose/validator

#экпортируем версию!!!
export IMAGE_TAG=0.4.19

# запускаем - -o &quot;&quot; оставляем пустыми (без токена), так как он вводится только 1 раз
# ./start.sh -s &quot;&lt;SPONSOR_SV_URL&gt;&quot; -o &quot;&lt;ONBOARDING_SECRET&gt;&quot; -p &quot;&lt;party_hint&gt;&quot; -m &quot;&lt;MIGRATION_ID&gt;&quot; -w

# посмотреть логи
cd ~/.canton/0.4.19/splice-node/docker-compose/validator
docker compose logs -f validator</pre>
  <figure id="MBuk" class="m_original" data-caption-align="center">
    <img src="https://img3.teletype.in/files/e9/28/e92895ca-f71d-497c-9fd2-2e7eeedd5303.png" width="278" />
    <figcaption><strong>Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq</strong></figcaption>
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lesnik13utsa/r9Z_bQwRqdd</guid><link>https://teletype.in/@lesnik13utsa/r9Z_bQwRqdd?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa</link><comments>https://teletype.in/@lesnik13utsa/r9Z_bQwRqdd?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa#comments</comments><dc:creator>lesnik13utsa</dc:creator><title>XRPL EVM (testnet)</title><pubDate>Sat, 01 Mar 2025 17:44:12 GMT</pubDate><category>COSMOS</category><description><![CDATA[<img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png"></img>UTSA]]></description><content:encoded><![CDATA[
  <figure id="S1KG" class="m_original">
    <img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png" width="820" />
  </figure>
  <p id="head" data-align="center">🪓 <a href="https://t.me/utsa_channel" target="_blank">Telegram канал UTSA</a> 🪓 <a href="https://t.me/utsa_chat" target="_blank">Telegram чат UTSA</a></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="D2wo" data-align="center"><strong>Web <a href="https://discord.gg/S26j3f5aqb" target="_blank">Discord</a> <a href="https://github.com/xrplevm/node" target="_blank">Github</a></strong></p>
  </section>
  <p id="sHgA"><u><strong>Testnet details</strong></u></p>
  <ul id="2h1F">
    <li id="ED8t">Network Chain ID: <code>xrplevm_1449000-1</code></li>
    <li id="8tyv">Denom stake: <code>axrp</code></li>
    <li id="SZWc">Binary: <code>exrpd</code></li>
    <li id="OnH1">Working directory: <code>.exrpd</code></li>
    <li id="AdcU">RPC: <a href="https://t-xrpl.rpc.utsa.tech/" target="_blank">https://t-xrpl.rpc.utsa.tech/</a></li>
    <li id="LaYP">API: <a href="https://t-xrpl.api.utsa.tech/" target="_blank">https://t-xrpl.api.utsa.tech/</a></li>
    <li id="Z8rq">gRPC: <code>t-xrpl.grpc.utsa.tech:433</code></li>
    <li id="NAC1">EVM RPC: <code>t-xrpl.evm.utsa.tech</code></li>
    <li id="am20">EVM WSS: <code>wss://t-xrpl.wss.utsa.tech:443</code></li>
    <li id="W5Z0">Explorer: <a href="https://exp.utsa.tech/xrpl-testnet/staking" target="_blank">https://exp.utsa.tech/xrpl-testnet/staking</a></li>
    <li id="jHeg">Explorer: <a href="https://governance.xrplevm.org/xrplevm" target="_blank">https://governance.xrplevm.org/xrplevm</a></li>
    <li id="ZvSO">Docs: <a href="https://docs.xrplevm.org/pages/operators/getting-started/installing-the-node" target="_blank">https://docs.xrplevm.org/pages/operators/getting-started/installing-the-node</a></li>
  </ul>
  <p id="motH"></p>
  <hr />
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre data-lang="bash" id="K9xb"># проверяем статус prevotes/precommits
FOLDER=.exrpd

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

PORT=&lt;ввести свой порт&gt;

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;</pre>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="CJUj"><strong>UPD 🕊 v8.0.0 (Высота обновления: 1485600)</strong></p>
    <pre data-lang="bash" id="HMSi">cd $HOME/xrpl
git pull
git checkout v8.0.0
make build
$HOME/xrpl/bin/exrpd version --long | grep -e version -e commit
# version: v8.0.0
# commit: 8d92d087b9a1014de748b8887868e0e90b97b56f

# # ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop exrpd
mv $HOME/xrpl/bin/exrpd $(which exrpd)
exrpd version --long | grep -e version -e commit
#

systemctl restart exrpd &amp;&amp; journalctl -u exrpd -f -o cat</pre>
  </section>
  <p id="PFZP"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="6FkE">Подготовка сервера</h2>
  </section>
  <pre data-lang="bash" id="bYXJ"># обновляем репозитории
apt update &amp;&amp; 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</pre>
  <p id="M4EP"><strong>File2Ban</strong> - подробнее <a href="https://www.linuxshop.ru/articles/a26710798-nastroyka_fail2ban" target="_blank">здесь</a></p>
  <pre data-lang="bash" id="Ffrt"># устанавливаем и копируем конфиг, который будет иметь больший приоритет
apt install fail2ban -y &amp;&amp; \
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local &amp;&amp; \
nano /etc/fail2ban/jail.local
# раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 &lt;ip&gt;
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 &amp;&amp; systemctl disable fail2ban</pre>
  <p id="eKUj"><strong>Устанавливаем Go</strong></p>
  <pre data-lang="bash" id="ac95">ver=&quot;1.21.13&quot; &amp;&amp; \
wget &quot;https://golang.org/dl/go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
sudo rm -rf /usr/local/go &amp;&amp; \
sudo tar -C /usr/local -xzf &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
rm &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
echo &quot;export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin&quot; &gt;&gt; $HOME/.bash_profile &amp;&amp; \
source $HOME/.bash_profile &amp;&amp; \
go version</pre>
  <p id="xUzv"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1b58">Новая установка ноды</h2>
  </section>
  <section>
    <p id="z8pZ"><u><em><strong>ВАЖНО </strong>— в командах ниже все, что в <strong>&lt;&gt;</strong> меняем на свое значение и убираем сами<strong> &lt;&gt;</strong></em></u></p>
  </section>
  <p id="sjXD"><strong>Устанавливаем бинарники</strong></p>
  <pre data-lang="bash" id="4J9d">git clone https://github.com/xrplevm/node xrpl &amp;&amp; cd xrpl
git checkout v8.0.0
make install

exrpd version --long | grep -e version -e commit
# version: v8.0.0
# commit: 8d92d087b9a1014de748b8887868e0e90b97b56f</pre>
  <p id="vp48"><strong>Инициализируем ноду, чтобы создать необходимые файлы конфигурации</strong></p>
  <pre data-lang="bash" id="Miqc">exrpd init UTSA_guide --chain-id xrplevm_1449000-1</pre>
  <p id="Qrh4"><strong>Скачиваем Genesis</strong></p>
  <pre data-lang="bash" id="x5XQ">wget -O $HOME/.exrpd/config/genesis.json &quot;https://raw.githubusercontent.com/xrplevm/networks/refs/heads/main/testnet/genesis.json&quot;

# Проверим генезис
sha256sum ~/.exrpd/config/genesis.json
# 3431b691e99742921d9b092ae7796a791f4a3df0fd532fd3e876245a05e15ea9</pre>
  <p id="4cmW"><strong>Скачиваем Addr book</strong></p>
  <pre data-lang="bash" id="N1Hb">wget -O $HOME/.exrpd/config/addrbook.json &quot;https://share102.utsa.tech/xrpl/addrbook.json&quot;</pre>
  <p id="LpCO"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="kBZ8">Настраиваем конфигурацию ноды</h2>
  </section>
  <pre data-lang="bash" id="9Fj8"># правим конфиг, благодаря чему мы можем больше не использовать флаг chain-id для каждой команды CLI в client.toml
sed -i.bak -e &quot;s/^chain-id *=.*/chain-id = \&quot;xrplevm_1449000-1\&quot;/;&quot; ~/.exrpd/config/client.toml
sed -i.bak -e &quot;s/^keyring-backend *=.*/keyring-backend = \&quot;os\&quot;/;&quot; ~/.exrpd/config/client.toml

# настраиваем минимальную цену за газ в app.toml
sed -i.bak -e &quot;s/^minimum-gas-prices *=.*/minimum-gas-prices = \&quot;0.0025axrp\&quot;/;&quot; ~/.exrpd/config/app.toml

# добавляем seeds/bpeers/peers в config.toml
external_address=$(wget -qO- eth0.me)
sed -i.bak -e &quot;s/^external_address *=.*/external_address = \&quot;$external_address:26656\&quot;/&quot; $HOME/.exrpd/config/config.toml

peers=&quot;&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.exrpd/config/config.toml
seeds=&quot;&quot;
sed -i.bak -e &quot;s/^seeds =.*/seeds = \&quot;$seeds\&quot;/&quot; $HOME/.exrpd/config/config.toml
PEERS=&#x60;curl -sL https://raw.githubusercontent.com/xrplevm/networks/main/testnet/peers.txt | sort -R | head -n 10 | awk &#x27;{print $1}&#x27; | paste -s -d, -&#x60;
sed -i.bak -e &quot;s/^seeds *=.*/seeds = \&quot;$PEERS\&quot;/&quot; ~/.exrpd/config/config.toml

# настраиваем фильтрацию &quot;плохих&quot; peers
sed -i -e &quot;s/^filter_peers *=.*/filter_peers = \&quot;true\&quot;/&quot; $HOME/.exrpd/config/config.toml</pre>
  <p id="QI2Z"><strong>(ОПЦИОНАЛЬНО) Настраиваем прунинг в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="ATId">pruning=&quot;custom&quot;
pruning_keep_recent=&quot;1000&quot;
pruning_interval=&quot;100&quot;
sed -i -e &quot;s/^pruning *=.*/pruning = \&quot;$pruning\&quot;/&quot; $HOME/.exrpd/config/app.toml
sed -i -e &quot;s/^pruning-keep-recent *=.*/pruning-keep-recent = \&quot;$pruning_keep_recent\&quot;/&quot; $HOME/.exrpd/config/app.toml
sed -i -e &quot;s/^pruning-interval *=.*/pruning-interval = \&quot;$pruning_interval\&quot;/&quot; $HOME/.exrpd/config/app.toml</pre>
  <p id="dGeO"><strong>(ОПЦИОНАЛЬНО) Выкл индексацию в<code>config.toml</code></strong></p>
  <pre data-lang="bash" id="tlXv">indexer=&quot;null&quot;
sed -i -e &quot;s/^indexer *=.*/indexer = \&quot;$indexer\&quot;/&quot; $HOME/.exrpd/config/config.toml</pre>
  <p id="UDzq"><strong>(ОПЦИОНАЛЬНО) Вкл/выкл снэпшоты в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="kxKy">snapshot_interval=1000
sed -i.bak -e &quot;s/^snapshot-interval *=.*/snapshot-interval = \&quot;$snapshot_interval\&quot;/&quot; ~/.exrpd/config/app.toml</pre>
  <p id="igmo"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="5cMj">State sync</h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre data-lang="bash" id="PZt7"># add peer
peers=&quot;4a132daa35f22194e332cea80f5e25e7b28f2786@5.9.87.231:26656&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.exrpd/config/config.toml</pre>
    <pre data-lang="bash" id="6SCM">SNAP_RPC=https://t-xrpl.rpc.utsa.tech:443

LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 100)); \
TRUST_HASH=$(curl -s &quot;$SNAP_RPC/block?height=$BLOCK_HEIGHT&quot; | jq -r .result.block_id.hash)

echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH

sed -i.bak -E &quot;s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\&quot;$SNAP_RPC,$SNAP_RPC\&quot;| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\&quot;$TRUST_HASH\&quot;| ; \
s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\&quot;\&quot;|&quot; $HOME/.exrpd/config/config.toml</pre>
    <pre data-lang="bash" id="pwPu">systemctl restart exrpd &amp;&amp; journalctl -u exrpd -f -o cat</pre>
  </section>
  <p id="W54Q"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="N1Bw"><strong>Snapshots</strong></h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="yPUl" data-align="center">time: <strong>every 24 hours</strong> <strong>| </strong>indexer:<strong> kv | </strong>pruning:<strong> 1000/100</strong></p>
    <p id="SP72" data-align="center">🌐 <a href="https://share102.utsa.tech/xrpl/" target="_blank"><strong>https://share102.utsa.tech/xrpl/</strong></a></p>
    <pre data-lang="bash" id="vhcG">cd $HOME
systemctl stop exrpd

cp $HOME/.exrpd/data/priv_validator_state.json $HOME/.exrpd/priv_validator_state.json.backup

# удаляем старую базу данных
rm -rf $HOME/.exrpd/data/{application.db,evidence.db,snapshots,tx_index.db,blockstore.db,state.db,cs.wal}

# скачиваем snapshot
curl -o - -L https://share102.utsa.tech/xrpl/xrpl.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.exrpd/

mv $HOME/.exrpd/priv_validator_state.json.backup $HOME/.exrpd/data/priv_validator_state.json

systemctl restart exrpd &amp;&amp; journalctl -u exrpd -f -o cat</pre>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="7iPW" data-align="center">time: <strong>every 48 hours</strong> <strong>| </strong>indexer:<strong> kv | </strong>pruning:<strong> archive</strong></p>
    <p id="KsGC" data-align="center">🌐 <a href="https://share.utsa.tech/xrpl/" target="_blank"><strong>https://share.utsa.tech/xrpl/</strong></a></p>
    <pre data-lang="bash" id="TtfZ">cd $HOME
systemctl stop exrpd

cp $HOME/.exrpd/data/priv_validator_state.json $HOME/.exrpd/priv_validator_state.json.backup

# удаляем старую базу данных
rm -rf $HOME/.exrpd/data/{application.db,evidence.db,snapshots,tx_index.db,blockstore.db,state.db,cs.wal}

# скачиваем snapshot
curl -o - -L https://share.utsa.tech/xrpl/xrpl-archive.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.exrpd/

mv $HOME/.exrpd/priv_validator_state.json.backup $HOME/.exrpd/data/priv_validator_state.json

systemctl restart exrpd &amp;&amp; journalctl -u exrpd -f -o cat</pre>
  </section>
  <p id="AwrS"><strong>Создаем сервисный файл</strong></p>
  <pre data-lang="bash" id="G8NT">tee /etc/systemd/system/exrpd.service &gt; /dev/null &lt;&lt;EOF
[Unit]
Description=exrpd
After=network-online.target

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

[Install]
WantedBy=multi-user.target
EOF</pre>
  <pre data-lang="bash" id="geOC">systemctl daemon-reload
systemctl enable exrpd
systemctl restart exrpd &amp;&amp; journalctl -u exrpd -f -o cat</pre>
  <p id="P3nc"><strong>Создаем или восстанавливаем кошелек и сохраняем вывод</strong></p>
  <pre data-lang="bash" id="BX4P"># создать кошелек
exrpd keys add &lt;name_wallet&gt; --key-type eth_secp256k1 --keyring-backend os

# восстановить кошелек (после команды вставить seed)
exrpd keys add &lt;name_wallet&gt; --key-type eth_secp256k1 --recover --keyring-backend os</pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="YLko"><strong>Не забываем сохранить seed !!!</strong></p>
  </section>
  <p id="0wHL"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="sBaD"><strong>Создаем валидатора</strong></h2>
  </section>
  <p id="JZb3">XRPL EVM работает используя консенсус Proof of Authority. Чтобы начать подписывать новые блоки и участвовать в сетевом консенсусе, текущие валидаторы должны принять Вашу ноду в качестве нового доверенного валидатора. Этот демократический процесс требует одобрения большинства текущих валидаторов.</p>
  <p id="koyN">Чтобы начать процесс необходимо присоединится к discord и выбрать роль валидатора на канале <code>#roles</code>. После этого Вам нужно будет представиться на канале <code>#become-a-validator</code></p>
  <p id="KHVc">При заполнении анкеты нужно будет указать данные, которые идентифицируют вашего валидатора</p>
  <ul id="lhAL">
    <li id="AVuW"><strong>Moniker</strong></li>
    <li id="5jzN"><strong>Validator operator address</strong></li>
  </ul>
  <pre id="2tWV">exrpd keys show wallet --bech val</pre>
  <ul id="hA9z">
    <li id="VbjT"><strong>Public key</strong></li>
  </ul>
  <pre id="vx1u">exrpd tendermint show-validator</pre>
  <p id="1T8t"></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="kj2D"><strong>Не забываем сохранить priv_validator_key.json !!!</strong></p>
    <p id="VBzA">Подробнее о создании/редактировании валидатора можно почитать <a href="/@lesnik13utsa/RPLJpWXIoDQ">здесь</a></p>
  </section>
  <p id="4K8P"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1eUH">Полезные команды</h2>
  </section>
  <p id="Fuvu"><strong>Информация</strong></p>
  <pre data-lang="bash" id="h8Db"># проверить логи
sudo journalctl -u exrpd -f -o cat
# проверить статус
curl localhost:$PORT/status | jq
# проверить баланс
exrpd q bank balances &lt;address&gt;
# проверить pubkey валидатора
exrpd tendermint show-validator
# проверить валидатора
exrpd query staking validator &lt;valoper_address&gt;
exrpd query staking validators --limit 1000000 -o json | jq &#x27;.validators[] | select(.description.moniker==&quot;&lt;name_moniker&gt;&quot;)&#x27; | jq
# проверка информации по TX_HASH
exrpd query tx &lt;TX_HASH&gt;
# параметры сети
exrpd q staking params
exrpd q slashing params
# проверить сколько блоков пропущено валидатором и с какого блока актив
exrpd q slashing signing-info $(exrpd tendermint show-validator)
# проверить slashing
exrpd q slashing signing-info $(exrpd tendermint show-validator)
# узнать транзакцию создания валидатора (заменить свой valoper_address)
exrpd query txs --events=&#x27;create_validator.validator=&lt;your_valoper_address&gt;&#x27; -o=json | jq .txs[0].txhash -r
# просмотр активного сета
exrpd q staking validators -o json --limit=1000 \
| jq &#x27;.validators[] | select(.status==&quot;BOND_STATUS_BONDED&quot;)&#x27; \
| jq -r &#x27;.tokens + &quot; - &quot; + .description.moniker&#x27; \
| sort -gr | nl
# просмотр неактивного сета
exrpd q staking validators -o json --limit=1000 \
| jq &#x27;.validators[] | select(.status==&quot;BOND_STATUS_UNBONDED&quot;)&#x27; \
| jq -r &#x27;.tokens + &quot; - &quot; + .description.moniker&#x27; \
| sort -gr | nl</pre>
  <p id="nXYz"><strong>Транзакции</strong></p>
  <pre data-lang="bash" id="G2eQ"># собрать комиссионные + реварды
exrpd tx distribution withdraw-rewards &lt;valoper_address&gt; --from &lt;name_wallet&gt; --fees 500axrp --commission -y

# заделегировать себе в стейк еще (так отправляется 1 монетa)
exrpd tx staking delegate &lt;valoper_address&gt; 1000000axrp --from &lt;name_wallet&gt; --fees 500axrp -y

# ределегирование на другого валидатора
exrpd tx staking redelegate &lt;src-validator-addr&gt; &lt;dst-validator-addr&gt; 1000000axrp --from &lt;name_wallet&gt; --fees 500axrp -y

# unbond 
exrpd tx staking unbond &lt;addr_valoper&gt; 1000000axrp --from &lt;name_wallet&gt; --fees 500axrp -y

# отправить монеты на другой адрес
exrpd tx bank send &lt;name_wallet&gt; &lt;address&gt; 1000000axrp --fees 500axrp -y

# выбраться из тюрьмы
exrpd tx slashing unjail --from &lt;name_wallet&gt; --fees 500axrp -y</pre>
  <p id="zl2g"><strong>Работа с кошельками</strong></p>
  <pre data-lang="bash" id="khv2"># вывести список кошельков
exrpd keys list

# показать ключ аккаунта
exrpd keys show &lt;name_wallet&gt; --bech acc

# показать ключ валидатора
exrpd keys show &lt;name_wallet&gt; --bech val

# показать ключ консенсуса
exrpd keys show &lt;name_wallet&gt; --bech cons

# запрос учетной записи
exrpd q auth account $(exrpd keys show &lt;name_wallet&gt; -a) -o text

# удалить кошелек
exrpd keys delete &lt;name_wallet&gt;</pre>
  <p id="Qfld"><strong>Удалить ноду</strong></p>
  <pre data-lang="bash" id="cAKM">systemctl stop exrpd &amp;&amp; \
systemctl disable exrpd &amp;&amp; \
rm /etc/systemd/system/exrpd.service &amp;&amp; \
systemctl daemon-reload &amp;&amp; \
cd $HOME &amp;&amp; \
rm -rf .exrpd xrpl &amp;&amp; \
rm -rf $(which exrpd)</pre>
  <p id="fYh0"><strong>ГОВЕРНАНС</strong></p>
  <pre data-lang="bash" id="PYFQ"># список proposals
exrpd q gov proposals

# посмотреть результат голосования
exrpd q gov proposals --voter &lt;ADDRESS&gt;

# проголосовать за предложение 
exrpd tx gov vote 1 yes --from &lt;name_wallet&gt; --fees 500axrp

# внести депозит в предложение
exrpd tx gov deposit 1 1000000axrp --from &lt;name_wallet&gt; --fees 500axrp

# создать предложение
exrpd tx gov submit-proposal --title=&quot;Randomly reward&quot; --description=&quot;Reward 10 testnet participants who completed more than 3 tasks&quot; --type=&quot;Text&quot; --deposit=&quot;11000000axrp&quot; --from=&lt;name_wallet&gt; --fees 500axrp</pre>
  <p id="chat-messages-932182862663389245"><strong>Peers and RPC</strong></p>
  <pre data-lang="bash" id="CMyV">FOLDER=.exrpd

# узнать свой peer
PORTR=$(grep -A 3 &quot;\[p2p\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;) &amp;&amp; \
echo $(exrpd tendermint show-node-id)@$(wget -qO- eth0.me)$PORTR

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

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

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

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;

# 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])</pre>
  <figure id="cY95" class="m_original" data-caption-align="center">
    <img src="https://img3.teletype.in/files/e9/28/e92895ca-f71d-497c-9fd2-2e7eeedd5303.png" width="278" />
    <figcaption><strong>Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq</strong></figcaption>
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lesnik13utsa/7ibJohZtyhY</guid><link>https://teletype.in/@lesnik13utsa/7ibJohZtyhY?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa</link><comments>https://teletype.in/@lesnik13utsa/7ibJohZtyhY?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa#comments</comments><dc:creator>lesnik13utsa</dc:creator><title>Tellor</title><pubDate>Sun, 16 Feb 2025 12:21:56 GMT</pubDate><category>COSMOS</category><description><![CDATA[<img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png"></img>UTSA validator]]></description><content:encoded><![CDATA[
  <figure id="8Pqm" class="m_original">
    <img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png" width="820" />
  </figure>
  <p id="head" data-align="center">🪓 <a href="https://t.me/utsa_channel" target="_blank">Telegram канал UTSA</a> 🪓 <a href="https://t.me/utsa_chat" target="_blank">Telegram чат UTSA</a></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="D2wo" data-align="center"><strong><a href="https://tellor.io/" target="_blank">Web</a> <a href="https://discord.gg/tellor" target="_blank">Discord</a> <a href="https://github.com/tellor-io/layer" target="_blank">Github</a></strong></p>
  </section>
  <p id="sHgA"><u><strong>Testnet details</strong></u></p>
  <ul id="2h1F">
    <li id="ED8t">Network Chain ID: layertest-4</li>
    <li id="8tyv">Denom stake: <code>loya</code></li>
    <li id="SZWc">Binary: <code>layerd</code></li>
    <li id="OnH1">Working directory: <code>.layer</code></li>
    <li id="AdcU">RPC: <a href="https://t-tellor.rpc.utsa.tech/" target="_blank">https://t-tellor.rpc.utsa.tech/</a></li>
    <li id="CQAm">API: <a href="https://t-tellor.api.utsa.tech/" target="_blank">https://t-tellor.api.utsa.tech/</a></li>
    <li id="NJ2g">Explorer: <a href="https://exp.utsa.tech/tellor-test/staking" target="_blank">https://exp.utsa.tech/tellor-test/staking</a></li>
  </ul>
  <hr />
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre data-lang="bash" id="UK5r"># проверяем статус prevotes/precommits
FOLDER=.layer

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

PORT=&lt;ввести свой порт&gt;

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;</pre>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="CJUj"><strong>UPD 🕊 v4.0.1 (Высота обновления: 452800)</strong></p>
    <pre data-lang="bash" id="1lCH">cd
rm -r $HOME/layer
git clone https://github.com/tellor-io/layer &amp;&amp; cd layer

wget https://github.com/tellor-io/layer/releases/download/4.0.1/layer_Linux_x86_64.tar.gz
tar -xvzf layer_Linux_x86_64.tar.gz
$HOME/layer/layerd version --long | grep -e version -e commit
# version: 4.0.1
# commit: 9e25c0ae96970d960c49ede51d008e6eecdd5bd3

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!

mv $HOME/layer/layerd $(which layerd)
layerd version --long | grep -e version -e commit
# 
systemctl restart layerd &amp;&amp; journalctl -u layerd -f -o cat</pre>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="CJUj"><strong><s>UPD 🕊 v4.0.2 (Высота обновления: )</s></strong></p>
    <pre data-lang="bash" id="76bw">cd
rm -r $HOME/layer
git clone https://github.com/tellor-io/layer &amp;&amp; cd layer

wget https://github.com/tellor-io/layer/releases/download/v4.0.2/layer_Linux_x86_64.tar.gz
tar -xvzf layer_Linux_x86_64.tar.gz
$HOME/layer/layerd version --long | grep -e version -e commit
# version: 4.0.2
# commit: a145758262e7ca5fe568897f3c1bc04bf75a2039

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!

mv $HOME/layer/layerd $(which layerd)
layerd version --long | grep -e version -e commit
# 
systemctl restart layerd &amp;&amp; journalctl -u layerd -f -o cat</pre>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Hbm6"><strong>UPD 🕊 v4.0.3 (Высота обновления: 2154000)</strong></p>
    <pre data-lang="bash" id="3Xoj">cd
rm -r $HOME/layer
git clone https://github.com/tellor-io/layer &amp;&amp; cd layer

wget https://github.com/tellor-io/layer/releases/download/v4.0.3/layer_Linux_x86_64.tar.gz
tar -xvzf layer_Linux_x86_64.tar.gz
$HOME/layer/layerd version --long | grep -e version -e commit
# version: 4.0.3
# commit: 683b709191e1342b8722f62b0f9bb897b525a92f

# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!

mv $HOME/layer/layerd $(which layerd)
layerd version --long | grep -e version -e commit
# 
systemctl restart layerd &amp;&amp; journalctl -u layerd -f -o cat</pre>
  </section>
  <p id="oQEo"></p>
  <p id="HcnD"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="6FkE">Подготовка сервера</h2>
  </section>
  <pre data-lang="bash" id="SdUl"># обновляем репозитории
apt update &amp;&amp; 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</pre>
  <p id="M4EP"><strong>File2Ban</strong> - подробнее <a href="https://www.linuxshop.ru/articles/a26710798-nastroyka_fail2ban" target="_blank">здесь</a></p>
  <pre data-lang="bash" id="Xiui"># устанавливаем и копируем конфиг, который будет иметь больший приоритет
apt install fail2ban -y &amp;&amp; \
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local &amp;&amp; \
nano /etc/fail2ban/jail.local
# раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 &lt;ip&gt;
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 &amp;&amp; systemctl disable fail2ban</pre>
  <p id="eKUj"><strong>Устанавливаем Go</strong></p>
  <pre data-lang="bash" id="HdXH">ver=&quot;1.21.13&quot; &amp;&amp; \
wget &quot;https://golang.org/dl/go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
sudo rm -rf /usr/local/go &amp;&amp; \
sudo tar -C /usr/local -xzf &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
rm &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
echo &quot;export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin&quot; &gt;&gt; $HOME/.bash_profile &amp;&amp; \
source $HOME/.bash_profile &amp;&amp; \
go version</pre>
  <p id="RD7Y"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1b58">Новая установка ноды</h2>
  </section>
  <section>
    <p id="z8pZ"><u><em><strong>ВАЖНО </strong>— в командах ниже все, что в <strong>&lt;&gt;</strong> меняем на свое значение и убираем сами<strong> &lt;&gt;</strong></em></u></p>
  </section>
  <p id="sjXD"><strong>Устанавливаем бинарники</strong></p>
  <pre data-lang="bash" id="HckD">git clone https://github.com/tellor-io/layer &amp;&amp; cd layer
#git checkout v4.0.0
#make install

cd $HOME/layer
wget https://github.com/tellor-io/layer/releases/download/v4.0.3/layer_Linux_x86_64.tar.gz
tar -xvzf layer_Linux_x86_64.tar.gz
mv $HOME/layer/layerd $(which layerd)

layerd version --long | grep -e version -e commit
# version: 4.0.3
# commit: 683b709191e1342b8722f62b0f9bb897b525a92f
</pre>
  <p id="vp48"><strong>Инициализируем ноду, чтобы создать необходимые файлы конфигурации</strong></p>
  <pre data-lang="bash" id="WLgm">layerd init UTSA_guide --chain-id layertest-4</pre>
  <p id="Qrh4"><strong>Скачиваем Genesis</strong></p>
  <pre data-lang="bash" id="yiRs">curl https://node-palmito.tellorlayer.com/rpc/genesis | jq &#x27;.result.genesis&#x27; &gt; ~/.layer/config/genesis.json
#wget -O $HOME/.layer/config/genesis.json &quot;https://tellor.test.rpc.nodeshub.online/genesis&quot;

# Проверим генезис
sha256sum ~/.layer/config/genesis.json
# b65ea5530e3ab666005b67103245b0f07603660c67656b7a6a057ada10212885</pre>
  <p id="4cmW"><strong>Скачиваем Addrbook</strong></p>
  <pre data-lang="bash" id="TszX">wget -O $HOME/.layer/config/addrbook.json &quot;https://share102.utsa.tech/tellor/addrbook.json&quot;</pre>
  <p id="xMXz"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="kBZ8">Настраиваем конфигурацию ноды</h2>
  </section>
  <pre data-lang="bash" id="pYkf"># правим конфиг, благодаря чему мы можем больше не использовать флаг chain-id для каждой команды CLI в client.toml
sed -i.bak -e &quot;s/^chain-id *=.*/chain-id = \&quot;layertest-4\&quot;/;&quot; ~/.layer/config/client.toml
sed -i.bak -e &quot;s/^keyring-backend *=.*/keyring-backend = \&quot;test\&quot;/;&quot; ~/.layer/config/client.toml

# настраиваем минимальную цену за газ в app.toml
sed -i.bak -e &quot;s/^minimum-gas-prices *=.*/minimum-gas-prices = \&quot;0.000025loya\&quot;/;&quot; ~/.layer/config/app.toml

# добавляем seeds/bpeers/peers в config.toml
external_address=$(wget -qO- eth0.me)
sed -i.bak -e &quot;s/^external_address *=.*/external_address = \&quot;$external_address:26656\&quot;/&quot; $HOME/.layer/config/config.toml

peers=&quot;c7b175a5bafb35176cdcba3027e764a0dbd0811c@34.219.95.82:26656,05105e8bb28e8c5ace1cecacefb8d4efb0338ec6@18.218.114.74:26656,705f6154c6c6aeb0ba36c8b53639a5daa1b186f6@3.80.39.230:26656,1f6522a346209ee99ecb4d3e897d9d97633ae146@3.101.138.30:26656,3822fa2eb0052b36360a7a6e285c18cc92e26215@175.41.188.192:26656&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.layer/config/config.toml
seeds=&quot;&quot;
sed -i.bak -e &quot;s/^seeds =.*/seeds = \&quot;$seeds\&quot;/&quot; $HOME/.layer/config/config.toml</pre>
  <pre id="OyOo">sed -i &#x27;s/timeout_commit = &quot;5s&quot;/timeout_commit = &quot;1s&quot;/&#x27; ~/.layer/config/config.toml</pre>
  <p id="MF9b"></p>
  <p id="RkYw"><strong>(ОПЦИОНАЛЬНО) Настраиваем прунинг в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="4BGp">pruning=&quot;custom&quot;
pruning_keep_recent=&quot;1000&quot;
pruning_interval=&quot;10&quot;
sed -i -e &quot;s/^pruning *=.*/pruning = \&quot;$pruning\&quot;/&quot; $HOME/.layer/config/app.toml
sed -i -e &quot;s/^pruning-keep-recent *=.*/pruning-keep-recent = \&quot;$pruning_keep_recent\&quot;/&quot; $HOME/.layer/config/app.toml
sed -i -e &quot;s/^pruning-interval *=.*/pruning-interval = \&quot;$pruning_interval\&quot;/&quot; $HOME/.layer/config/app.toml</pre>
  <p id="dGeO"><strong>(ОПЦИОНАЛЬНО) Выкл индексацию в<code>config.toml</code></strong></p>
  <pre data-lang="bash" id="5d32">#indexer=&quot;null&quot;
#sed -i -e &quot;s/^indexer *=.*/indexer = \&quot;$indexer\&quot;/&quot; $HOME/.layer/config/config.toml</pre>
  <p id="UDzq"><strong>(ОПЦИОНАЛЬНО) Вкл/выкл снэпшоты в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="qCon">snapshot_interval=1000
sed -i.bak -e &quot;s/^snapshot-interval *=.*/snapshot-interval = \&quot;$snapshot_interval\&quot;/&quot; ~/.layer/config/app.toml</pre>
  <p id="Ynzo"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="5cMj">State sync</h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre data-lang="bash" id="MNny">systemctl stop layerd
rm -rf /root/.layer/data/{tx_index.db,state.db,snapshots,evidence.db,blockstore.db,application.db}</pre>
    <pre id="MNny" data-lang="bash"># add peer
peers=&quot;18a60772ed3b2e06a780f5701a5fe17d95955566@5.9.87.231:56656&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.layer/config/config.toml</pre>
    <pre data-lang="bash" id="noST">SNAP_RPC=https://t-tellor.rpc.utsa.tech:443

LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 100)); \
TRUST_HASH=$(curl -s &quot;$SNAP_RPC/block?height=$BLOCK_HEIGHT&quot; | jq -r .result.block_id.hash)

echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH

sed -i.bak -E &quot;s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\&quot;$SNAP_RPC,$SNAP_RPC\&quot;| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\&quot;$TRUST_HASH\&quot;| ; \
s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\&quot;\&quot;|&quot; $HOME/.layer/config/config.toml</pre>
    <pre data-lang="bash" id="kIeI">systemctl restart layerd &amp;&amp; journalctl -u layerd -f -o cat</pre>
  </section>
  <p id="1eVQ"></p>
  <p id="4KFf"><strong>Создаем или восстанавливаем кошелек и сохраняем вывод</strong></p>
  <pre data-lang="bash" id="AQnx"># создать кошелек
layerd keys add &lt;name_wallet&gt; --keyring-backend test

# восстановить кошелек (после команды вставить seed)
layerd keys add &lt;name_wallet&gt; --recover --keyring-backend test

# подключить кошелек ledger
layerd keys add &lt;name_wallet&gt; --ledger </pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="OvP9"><strong>Не забываем сохранить seed !!!</strong></p>
  </section>
  <p id="DBin"></p>
  <p id="fTsT"><strong>Создаем сервисный файл</strong></p>
  <p id="vepI">Замените <strong>&lt;name_wallet&gt;</strong> на название своего кошелька</p>
  <pre data-lang="bash" id="lBEs">tee /etc/systemd/system/layerd.service &gt; /dev/null &lt;&lt;EOF
[Unit]
Description=layerd
After=network-online.target

[Service]
User=$USER
ExecStart=$(which layerd) start --home /root/.layer --key-name &lt;name_wallet&gt; --keyring-backend test
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF</pre>
  <pre data-lang="bash" id="0WbF">systemctl daemon-reload
systemctl enable layerd
systemctl restart layerd &amp;&amp; journalctl -u layerd -f -o cat</pre>
  <p id="T9FX"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="sBaD"><strong>Создаем валидатора</strong></h2>
  </section>
  <p id="0ztD">Сначала нужно получить монеты в дискорде используя кошелек EVM, после используя мост <a href="https://bridge.tellor.io/" target="_blank">https://bridge.tellor.io/</a> обменять монеты. Обмен будет происходить 12 часов</p>
  <p id="tKiy"></p>
  <p id="asq2">1. Получаем свой pubkey</p>
  <pre data-lang="bash" id="0UyM">layerd comet show-validator
# {&quot;@type&quot;:&quot;/cosmos.crypto.ed25519.PubKey&quot;,&quot;key&quot;:&quot;ZXONS7NNjLWH4HePBOoHKDAYeLXQO5iUwpCRQSi1poI=&quot;}</pre>
  <p id="ywEz">2. Создаем validator.json</p>
  <pre data-lang="bash" id="RwD8">nano $HOME/.layer/validator.json</pre>
  <p id="qdbf">3. Вставляем наш конфиг</p>
  <pre data-lang="bash" id="GqFm">{
    &quot;pubkey&quot;: {&quot;@type&quot;:&quot;/cosmos.crypto.ed25519.PubKey&quot;,&quot;key&quot;:&quot;c+EuycPpudgiyVl6guYG9oyPSImHHJz1z0Pg4ODKveo=&quot;},
    &quot;amount&quot;: &quot;69666420loya&quot;,
    &quot;moniker&quot;: &quot;yourmoniker&quot;,
    &quot;identity&quot;: &quot;optional identity signature (ex. UPort or Keybase)&quot;,
    &quot;website&quot;: &quot;validator&#x27;s (optional) website&quot;,
    &quot;security&quot;: &quot;validator&#x27;s (optional) security contact email&quot;,
    &quot;details&quot;: &quot;validator&#x27;s (optional) details&quot;,
    &quot;commission-rate&quot;: &quot;0.1&quot;,
    &quot;commission-max-rate&quot;: &quot;0.2&quot;,
    &quot;commission-max-change-rate&quot;: &quot;0.01&quot;,
    &quot;min-self-delegation&quot;: &quot;1&quot;
}</pre>
  <p id="KCoo">4. Отправляем транзакцию</p>
  <pre data-lang="bash" id="pyLH">layerd tx staking create-validator $HOME/.layer/validator.json \
    --from=&lt;key-name&gt; \
    --chain-id=layertest-4 \
    --fees=5loya</pre>
  <p id="M9sA"></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="kj2D"><strong>Не забываем сохранить priv_validator_key.json !!!</strong></p>
    <p id="VBzA">Подробнее о создании/редактировании валидатора можно почитать <a href="/@lesnik13utsa/RPLJpWXIoDQ">здесь</a></p>
  </section>
  <p id="7hXY"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="Dhg3">Запуск Data Reporter</h2>
  </section>
  <p id="aw7Z"><em><strong>Предполагается, что у Вас уже работает нода и валидатор</strong></em></p>
  <p id="04DU"><strong>1. Выполняем команду create-reporter</strong></p>
  <ul id="Pvww">
    <li id="8uJH"><code>commision-rate</code> 0.25 означает, что Вы будете получать 25% вознаграждений от selectors</li>
    <li id="v7by"><code>min-tokens-required</code> предотвращает спам, требуя, чтобы у selectors было не менее 1 монеты в их кошельке</li>
  </ul>
  <pre id="Yu88" data-lang="bash"># layerd tx reporter create-reporter 0.25 1000000 REPORTER_MONIKER --from YOUR_ACCOUNT_NAME --chain-id layertest-4 --fees 10loya --yes
layerd tx reporter create-reporter 0.25 1000000 UTSA_guide--from &lt;name_wallet&gt; --chain-id layertest-4 --fees 5loya --yes</pre>
  <p id="z0Pc"><strong>2. Проверьте, успешно ли был создан ваш репортер. Если Вы видите свой адрес в списке, значит, ваш репортер был успешно создан</strong></p>
  <pre id="Lng5" data-lang="bash">layerd query reporter reporters | grep &lt;tellor1k8v5l...&gt;</pre>
  <p id="ohPx"><strong>3.  В сервисном файле измените строку запуска и добавьте Environments. Замените на свои значения все, что находится в &lt;&gt;</strong></p>
  <pre id="bR2N" data-lang="bash">nano /etc/systemd/system/layerd.service</pre>
  <pre id="u3Rz" data-lang="bash">[Unit]
Description=layerd
After=network-online.target

[Service]
User=root
ExecStart=/root/go/bin/layerd start --api.enable --api.swagger --price-daemon-enabled=true --panic-on-daemon-failure-enabled=false --home /root/.layer --key-name &lt;name_wallet&gt; --keyring-backend test
Restart=on-failure
RestartSec=3
LimitNOFILE=65535
Environment=&quot;WITHDRAW_FREQUENCY=21600&quot;
Environment=&quot;REPORTERS_VALIDATOR_ADDRESS=&lt;tellorvaloper1k8v...&gt;&quot;
Environment=&quot;ETH_RPC_URL=&lt;wss://a.good.sepolia.rpc.url&gt;&quot;
Environment=&quot;TOKEN_BRIDGE_CONTRACT=0x5acb5977f35b1A91C4fE0F4386eB669E046776F2&quot;

[Install]
WantedBy=multi-user.target</pre>
  <pre id="hawF" data-lang="bash">systemctl daemon-reload
systemctl restart layerd &amp;&amp; journalctl -u layerd -f -o cat</pre>
  <p id="Vcev"><strong>4. Проверьте успешные транзакции оракла</strong></p>
  <pre id="1LKd" data-lang="bash">layerd query oracle get-reportsby-reporter &lt;tellor1k8v5l...&gt;</pre>
  <p id="atCp"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1eUH">Полезные команды</h2>
  </section>
  <p id="Fuvu"><strong>Информация</strong></p>
  <pre data-lang="bash" id="bf0v"># проверить логи
sudo journalctl -u layerd -f -o cat
# проверить статус
curl localhost:$PORT/status | jq
# проверить баланс
layerd q bank balances &lt;address&gt;
# проверить pubkey валидатора
layerd tendermint show-validator
# проверить валидатора
layerd query staking validator &lt;valoper_address&gt;
layerd query staking validators --limit 1000000 -o json | jq &#x27;.validators[] | select(.description.moniker==&quot;&lt;name_moniker&gt;&quot;)&#x27; | jq
# проверка информации по TX_HASH
layerd query tx &lt;TX_HASH&gt;
# параметры сети
layerd q staking params
layerd q slashing params
# проверить сколько блоков пропущено валидатором и с какого блока актив
layerd q slashing signing-info $(layerd tendermint show-validator)
# проверить slashing
layerd q slashing signing-info $(layerd tendermint show-validator)
# узнать транзакцию создания валидатора (заменить свой valoper_address)
layerd query txs --events=&#x27;create_validator.validator=&lt;your_valoper_address&gt;&#x27; -o=json | jq .txs[0].txhash -r
# просмотр активного сета
layerd q staking validators -o json --limit=1000 \
| jq &#x27;.validators[] | select(.status==&quot;BOND_STATUS_BONDED&quot;)&#x27; \
| jq -r &#x27;.tokens + &quot; - &quot; + .description.moniker&#x27; \
| sort -gr | nl
# просмотр неактивного сета
layerd q staking validators -o json --limit=1000 \
| jq &#x27;.validators[] | select(.status==&quot;BOND_STATUS_UNBONDED&quot;)&#x27; \
| jq -r &#x27;.tokens + &quot; - &quot; + .description.moniker&#x27; \
| sort -gr | nl</pre>
  <p id="nXYz"><strong>Транзакции</strong></p>
  <pre data-lang="bash" id="v7Of"># собрать комиссионные + реварды
layerd tx distribution withdraw-rewards &lt;valoper_address&gt; --from &lt;name_wallet&gt; --fees=5loya --commission -y

# заделегировать себе в стейк еще (так отправляется 1 монетa)
layerd tx staking delegate &lt;valoper_address&gt; 1000000loya --from &lt;name_wallet&gt; --fees=5loya -y

# ределегирование на другого валидатора
layerd tx staking redelegate &lt;src-validator-addr&gt; &lt;dst-validator-addr&gt; 1000000loya --from &lt;name_wallet&gt; --fees=5loya -y

# unbond 
layerd tx staking unbond &lt;addr_valoper&gt; 1000000loya --from &lt;name_wallet&gt; --fees=5loya -y

# отправить монеты на другой адрес
layerd tx bank send &lt;name_wallet&gt; &lt;address&gt; 1000000loya --fees=5loya -y

# выбраться из тюрьмы
layerd tx slashing unjail --from &lt;name_wallet&gt; --fees=5loya -y</pre>
  <p id="zl2g"><strong>Работа с кошельками</strong></p>
  <pre data-lang="bash" id="00pR"># вывести список кошельков
layerd keys list

# показать ключ аккаунта
layerd keys show &lt;name_wallet&gt; --bech acc

# показать ключ валидатора
layerd keys show &lt;name_wallet&gt; --bech val

# показать ключ консенсуса
layerd keys show &lt;name_wallet&gt; --bech cons

# показать все поддерживаемые адреса
layerd debug addr &lt;wallet_addr&gt;

# показать приватный ключ
layerd keys export &lt;name_wallet&gt; --unarmored-hex --unsafe
layerd keys unsafe-export-eth-key &lt;name_wallet&gt;

# запрос учетной записи
layerd q auth account $(layerd keys show &lt;name_wallet&gt; -a) -o text

# удалить кошелек
layerd keys delete &lt;name_wallet&gt;</pre>
  <p id="Qfld"><strong>Удалить ноду</strong></p>
  <pre data-lang="bash" id="yXeN">systemctl stop layerd &amp;&amp; \
systemctl disable layerd &amp;&amp; \
rm /etc/systemd/system/layerd.service &amp;&amp; \
systemctl daemon-reload &amp;&amp; \
cd $HOME &amp;&amp; \
rm -rf .layer layer &amp;&amp; \
rm -rf $(which layerd)</pre>
  <p id="fYh0"><strong>ГОВЕРНАНС</strong></p>
  <pre data-lang="bash" id="6tWD"># список proposals
layerd q gov proposals

# посмотреть результат голосования
layerd q gov proposals --voter &lt;ADDRESS&gt;

# проголосовать за предложение 
layerd tx gov vote 1 yes --from &lt;name_wallet&gt; --fees=5loya

# внести депозит в предложение
layerd tx gov deposit 1 1000000loya --from &lt;name_wallet&gt; --fees=5loya

# создать предложение
layerd tx gov submit-proposal --title=&quot;Randomly reward&quot; --description=&quot;Reward 10 testnet participants who completed more than 3 tasks&quot; --type=&quot;Text&quot; --deposit=&quot;11000000loya&quot; --from=&lt;name_wallet&gt; --fees=5loya</pre>
  <p id="chat-messages-932182862663389245"><strong>Peers and RPC</strong></p>
  <pre data-lang="bash" id="6KNv">FOLDER=.layer

# узнать свой peer
PORTR=$(grep -A 3 &quot;\[p2p\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;) &amp;&amp; \
echo $(layerd tendermint show-node-id)@$(wget -qO- eth0.me)$PORTR

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

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

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

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;

# 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])</pre>
  <figure id="eUNe" class="m_original" data-caption-align="center">
    <img src="https://img3.teletype.in/files/e9/28/e92895ca-f71d-497c-9fd2-2e7eeedd5303.png" width="278" />
    <figcaption><strong>Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq</strong></figcaption>
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lesnik13utsa/qlThL06IAmG</guid><link>https://teletype.in/@lesnik13utsa/qlThL06IAmG?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa</link><comments>https://teletype.in/@lesnik13utsa/qlThL06IAmG?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa#comments</comments><dc:creator>lesnik13utsa</dc:creator><title>UOMI</title><pubDate>Wed, 29 Jan 2025 13:03:36 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/46/cc/46cccb0a-6db4-4788-81c9-b898cce38ac2.png"></media:content><category>GPU</category><description><![CDATA[<img src="https://img1.teletype.in/files/0d/86/0d866268-f0e5-40fe-af00-54df3abe2bf5.png"></img>UOMI]]></description><content:encoded><![CDATA[
  <figure id="9R50" class="m_custom">
    <img src="https://img1.teletype.in/files/0d/86/0d866268-f0e5-40fe-af00-54df3abe2bf5.png" width="1091" />
  </figure>
  <p id="KboJ" data-align="center">🪓 <a href="https://t.me/utsa_channel" target="_blank">Telegram канал UTSA</a> 🪓 <a href="https://t.me/utsa_chat" target="_blank">Telegram чат UTSA</a></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="l8Xa" data-align="center"><strong><a href="https://uomi.ai/" target="_blank">Web</a> <a href="https://discord.gg/HF2RJyw7yj" target="_blank">Discord</a> <a href="https://docs.uomi.ai/build/run-a-node/become-a-validator/spin-up-a-validator" target="_blank">Docs</a> <a href="https://subexp.uomi.ai/#/explorer" target="_blank">Staking</a> <a href="https://github.com/Uomi-network/uomi-node" target="_blank">Github</a> <a href="https://telemetry.polkadot.io/#/0x936d2e75a0cdca17eb9d05480579e2aa3e27793e89380b6aa2281548f823d6b0" target="_blank">Telemetry</a> <a href="https://explorer.uomi.ai/" target="_blank">Explorer-EVM</a></strong></p>
  </section>
  <p id="MWkx"><strong>UOMI</strong> - это блокчейн-платформа, разработанная для экосистем Polkadot и Ethereum, поддерживающая смарт-контракты Wasm и EVM. Окунитесь в новую эру децентрализованных экономических агентов, управляемых искусственным интеллектом</p>
  <p id="xa7b">В данном руководстве будет описан процесс запуска валидатора</p>
  <p id="gLPY"></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="v1Cy">✅<strong>Тестовая сеть UOMI Finney Incentivized Testnet запущена </strong></p>
    <p id="FFM4">50 000 000 токенов $UOMI выделены для вознаграждения операторов нод, начиная с этой тестовой сети!</p>
    <p id="TEWs">Валидаторы являются ядром экосистемы UOMI, обеспечивая производство блоков, вычисления ИИ и кросс-чейн взаимодействие. Запуская ноду валидатора Вы активно вносите вклад в рост сети, а токены $UOMI являются поощрениями за Ваше участие</p>
    <p id="RQ2V">Выберите тип узла, который подходит для Вашей настройки:</p>
    <ul id="qzjR">
      <li id="icwg">Ноды RPC: light, full или archive, оптимизированные для доступа к данным и взаимодействия <strong>(данные виды нод под вопросом на счет наград)</strong></li>
      <li id="52D9">Ноды валидатора: требуют 48 ГБ оперативной памяти графического процессора и настройку full ноды для проверки транзакций и защиты сети</li>
    </ul>
  </section>
  <hr />
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="6mBj"><strong>ВАЖНО:</strong></p>
    <ul id="vol1">
      <li id="r1jO"><strong>для валидатора нужен сервер с видеокартой (картами), которая имеет 48 GB видеопамяти!!!</strong></li>
      <li id="xdfI"><strong>данный гайд подходит для ubuntu 24.04</strong></li>
    </ul>
  </section>
  <p id="8ls0"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="6FkE">Подготовка сервера</h2>
  </section>
  <pre data-lang="bash" id="C5Pc"># обновляем репозитории
apt update &amp;&amp; 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 libclang-dev -y</pre>
  <p id="o4jj"></p>
  <p id="qNaM"><strong>Драйвера на видеокарту</strong></p>
  <section>
    <pre data-lang="bash" id="QXiX">sudo apt-get install linux-headers-$(uname -r)

distribution=$(. /etc/os-release;echo $ID$VERSION_ID | sed -e &#x27;s/\.//g&#x27;)

wget https://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64/cuda-keyring_1.1-1_all.deb

sudo dpkg -i cuda-keyring_1.1-1_all.deb

sudo apt-get update

sudo apt-get -y install cuda-drivers

---

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  &amp;&amp; curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed &#x27;s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g&#x27; | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sed -i -e &#x27;/experimental/ s/^#//g&#x27; /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update

sudo apt-get install -y nvidia-container-toolkit

---

sudo nvidia-ctk runtime configure --runtime=docker

sudo systemctl restart docker

nvidia-smi
#nvcc --version</pre>
  </section>
  <figure id="PYVH" class="m_original">
    <img src="https://img3.teletype.in/files/e6/ac/e6ace539-c37e-412c-8ed5-43a62f7f5501.png" width="925" />
  </figure>
  <p id="AQN5"><strong>Используемые порты</strong></p>
  <pre data-lang="bash" id="WsiD">AI работает на порту 8888

# валидатор
ufw allow 30333 comment p2p
ufw allow 9944 comment rpc
ufw allow 9615 comment prometheus</pre>
  <p id="C3Y1"><strong>Устанавливаем python 3.10</strong></p>
  <pre id="8HhW" data-lang="bash">apt install software-properties-common -y
add-apt-repository ppa:deadsnakes/ppa
# нажимаем ентер
apt install python3.10

python3.10 --version
#</pre>
  <p id="7EIj"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="HPE8">Установка AI</h2>
  </section>
  <p id="q7rE"><strong>Клонируем репозиторий для AI</strong></p>
  <pre id="vHwX" data-lang="bash">git clone https://github.com/Uomi-network/uomi-node-ai</pre>
  <p id="qvlb"><strong>Устанавливаем миниконду</strong></p>
  <pre id="tILN" data-lang="bash">mkdir -p /root/miniconda3/
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /root/miniconda3/miniconda.sh
chmod +x /root/miniconda3/miniconda.sh
bash /root/miniconda3/miniconda.sh -b -u -p /root/miniconda3</pre>
  <pre id="CUjT" data-lang="bash">tmux new-session -s miniconda3</pre>
  <pre id="qqzE" data-lang="bash"># Чтобы инициализировать Miniconda, запускаем сценарий активации
source /root/miniconda3/etc/profile.d/conda.sh

# создать новую среду conda
conda create -n uomi-ai python=3.10 -y

# активируем
conda activate uomi-ai</pre>
  <p id="PcRu"><strong>Устанавливаем необходимое ПО</strong></p>
  <pre id="qslc" data-lang="bash">conda install pytorch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 pytorch-cuda=12.1 -c pytorch -c nvidia
conda install -c nvidia/label/cuda-12.1.0 cuda-nvcc=12.1 cuda-toolkit=12.1
conda install numpy=1.24
pip install flask
pip install psutil
pip install websocket-client requests
pip install transformers
pip install &#x27;accelerate&gt;=0.26.0&#x27;
pip install autoawq
pip install &#x27;triton==3.2.0&#x27;
pip install diffusers</pre>
  <p id="fBKX"></p>
  <p id="LLOe"><strong>Создаем сервисный файл</strong></p>
  <pre id="Vd6q" data-lang="bash">nano /etc/systemd/system/uomi-ai.service</pre>
  <pre id="PJ9w" data-lang="bash">[Unit]
Description=UOMI AI API Server
After=network.target
​
[Service]
User=root
WorkingDirectory=/root/uomi-node-ai
ExecStart=/bin/bash -c &quot;source /root/miniconda3/etc/profile.d/conda.sh &amp;&amp; conda activate uomi-ai &amp;&amp; python3 uomi-ai.py&quot;
Restart=always
RestartSec=10
TimeoutSec=30
StartLimitIntervalSec=500
StartLimitBurst=5
​
[Install]
WantedBy=multi-user.target</pre>
  <pre id="FBD6" data-lang="bash">systemctl daemon-reload
systemctl enable uomi-ai.service
systemctl restart uomi-ai.service &amp;&amp; journalctl -u uomi-ai.service -f</pre>
  <p id="X23Y"></p>
  <hr />
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="xxZW">Настраиваем ноду валидатора</h2>
  </section>
  <p id="uHND"><strong>Создаем каталог для базы данных валидатора</strong></p>
  <pre id="Aqhg" data-lang="bash">mkdir -p $HOME/uomi</pre>
  <p id="3LlI"><strong>Скачиваем genesis</strong></p>
  <pre data-lang="bash" id="LVXt">wget -O /usr/local/bin/genesis.json &quot;https://github.com/Uomi-network/uomi-node/releases/download/v0.3.0/genesis.json&quot;
chmod +x /usr/local/bin/genesis.json
sha256sum /usr/local/bin/genesis.json
#af55c2c53693a174fc4198bb2e97e1f7aadeabca419040fb75b2d332c1ce6dc3</pre>
  <p id="13Bm"><strong>Скачиваем бинарный файл</strong></p>
  <pre id="GoPv" data-lang="bash">wget -O /usr/local/bin/uomi &quot;https://github.com/Uomi-network/uomi-node/releases/download/v0.3.6/uomi_ubuntu_24_v0.3.6&quot;
chmod +x /usr/local/bin/uomi
uomi --version
#uomi uomi 0.3.6-d4be41f647b</pre>
  <p id="8tM0"><strong>Создаем кошелек и сохраняем вывод</strong></p>
  <pre id="D55b" data-lang="bash">uomi key generate --scheme Sr25519</pre>
  <pre id="0bQV" data-lang="bash"># пример вывода
#Secret phrase:     tackle rebuild neither turn degree real capital armed giraffe novel resist human
#Network ID:        substrate
#Secret seed:       0x5c9499827e606bcf284e8a650a96ce13ebf0484bd64a280507ff96d99da6e174
#Public key (hex):  0x14ceec080a6aa464b4235dd951a85669d25e4fa659578f01a7a7dc5c95454931
#Account ID:        0x14ceec080a6aa464b4235dd951a85669d25e4fa659578f01a7a7dc5c95454931
#Public key (SS58): 5CXzHQ3DmYKemRAyY6NPyKsDWiChbeeKtxW3q5RWpmdUQvdR
#SS58 Address:      5CXzHQ3DmYKemRAyY6NPyKsDWiChbeeKtxW3q5RWpmdUQvdR</pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="LX0U">Обязательно сохраните вывод кошелька. Данные нам понадобятся позже</p>
  </section>
  <p id="1Uhe"><strong>Генерируем ключ Ed25519 для GRANDPA, используя свою сид фразу полученную выше</strong></p>
  <pre id="r3Qi" data-lang="bash">uomi key inspect --scheme Ed25519 &quot;&lt;YOU_SEED&gt;&quot;</pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="DlLh">Обязательно сохраните вывод после данной команды. Данные нам понадобятся позже</p>
  </section>
  <p id="NQfF"><strong>Создаем сервисный файл</strong></p>
  <pre id="mTUJ" data-lang="bash">nano /etc/systemd/system/uomi.service</pre>
  <pre id="dPLW" data-lang="bash">[Unit]
Description=Uomi Node
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
User=root
Group=root
Restart=always
RestartSec=10
LimitNOFILE=65535
ExecStart=/usr/local/bin/uomi \
    --validator \
    --name &quot;&lt;MONIKER&gt;&quot; \
    --chain &quot;/usr/local/bin/genesis.json&quot; \
    --base-path &quot;/root/uomi&quot; \
    --state-pruning 1000 \
    --blocks-pruning 1000 \
    --enable-evm-rpc \
    --rpc-cors all \
    --prometheus-external \
    --telemetry-url &quot;wss://telemetry.polkadot.io/submit/ 0&quot;

# Hardening
ProtectSystem=strict
PrivateTmp=true
PrivateDevices=true
NoNewPrivileges=true
ReadWritePaths=/root/uomi

[Install]
WantedBy=multi-user.target</pre>
  <pre id="NMQz" data-lang="bash">systemctl daemon-reload
systemctl enable uomi.service
systemctl restart uomi.service &amp;&amp; journalctl -u uomi.service -f</pre>
  <hr />
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="RC5t"><strong>ВАЖНО</strong> - если нода не может подцепиться к пирам, то пиры в сервисный файл или в GENESIS<br />Пиры берем здесь - <a href="https://app.uomi.ai/peers" target="_blank">https://app.uomi.ai/peers</a></p>
    <pre id="40b4" data-lang="bash"># для сервисного файла
--reserved-nodes &quot;/ip4/5.9.87.231/tcp/30333/p2p/12D3KooWCAChuDHHpNER855r6NpAGDeLrSZ4U3sP6FocSWWJZDf5&quot;</pre>
    <p id="7JN1">Второй вариант добавить пиры в genesis</p>
    <pre id="Sxzu" data-lang="bash"># для genesis
nano /usr/local/bin/genesis.json</pre>
    <figure id="0K5f" class="m_original">
      <img src="https://img2.teletype.in/files/94/6c/946c072c-2b76-41c4-9be1-18fc904caf06.png" width="1575" />
    </figure>
  </section>
  <p id="N3IX"><strong>Добавление ключей ШАГ 1</strong></p>
  <p id="ta6S">Как только Ваша нода будет запущена, вставьте свои ключи</p>
  <p id="jAtH">ВНИМАНИЕ - замените <strong>SECRET_PHRASE</strong> и <strong>PUBLIC KEY (hex)</strong> Вашими данными, полученными с помощью первой команды &quot;<strong>key generate --scheme Sr25519</strong>&quot; </p>
  <pre id="6EQl" data-lang="bash">for key_type in babe imon uomi ipfs; do
    curl -H &quot;Content-Type: application/json&quot; \
        -d &#x27;{&quot;id&quot;:1, &quot;jsonrpc&quot;:&quot;2.0&quot;, &quot;method&quot;:&quot;author_insertKey&quot;, &quot;params&quot;:[&quot;&#x27;$key_type&#x27;&quot;, &quot;SECRET_PHRASE&quot;, &quot;PUBLIC_KEY&quot;]}&#x27; \
        http://localhost:9944
done</pre>
  <p id="dg50"><strong>Добавление ключей ШАГ 2</strong></p>
  <p id="MoMp">ВНИМАНИЕ - замените <strong>SECRET_PHRASE</strong> и <strong>PUBLIC KEY (hex)</strong> Вашими данными, полученными с помощью второй команды &quot;<strong>key inspect --scheme Ed25519</strong>&quot; </p>
  <pre id="Iami" data-lang="bash">curl -H &quot;Content-Type: application/json&quot; \
    -d &#x27;{&quot;id&quot;:1, &quot;jsonrpc&quot;:&quot;2.0&quot;, &quot;method&quot;:&quot;author_insertKey&quot;, &quot;params&quot;:[&quot;gran&quot;, &quot;SECRET_PHRASE&quot;, &quot;PUBLIC_KEY&quot;]}&#x27; \
    http://localhost:9944</pre>
  <p id="F4VB"><strong>Наконец после того как нода будет полностью синхронизирована выполните следующую команду для создания сеансовых ключей при создании валидатора в polkadot js на сайте <a href="https://subexp.uomi.ai/#/staking/actions" target="_blank">https://subexp.uomi.ai/#/staking/actions</a><br />Необходимо выбрать раздел validator - кошелек - комиссию и вставить полученный ключ</strong></p>
  <pre id="Ahog" data-lang="bash">curl -H &quot;Content-Type: application/json&quot; -d &#x27;{&quot;id&quot;:1, &quot;jsonrpc&quot;:&quot;2.0&quot;, &quot;method&quot;: &quot;author_rotateKeys&quot;, &quot;params&quot;:[]}&#x27; http://localhost:9944</pre>
  <p id="u9uX"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="SkX9">Snapshot</h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="4Jcn" data-align="center">every 48 hours<strong> | </strong>pruning: 1000</p>
    <p id="mU8g" data-align="center">🌐 <a href="https://share.utsa.tech/uomi/" target="_blank"><strong>https://share.utsa.tech/uomi/</strong></a></p>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre data-lang="bash" id="sSY0"># останавливаем ноду
systemctl stop uomi

# удаляем базу данных. При необходимости измените путь на свой
rm -r $HOME/uomi/chains/uomi/db/

# скачиваем snapshot. При необходимости измените путь на свой
curl -o - -L https://share.utsa.tech/uomi/uomi_testnet.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/uomi/chains/uomi/

# перезагружаем ноду
systemctl restart uomi &amp;&amp; journalctl -u uomi -f -o cat</pre>
  </section>
  <p id="HDUm"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="M2q1">Полезные команды</h2>
  </section>
  <pre data-lang="bash" id="ha5u"># проверить логи
journalctl -u uomi.service -f
journalctl -u uomi-ai.service -f
</pre>
  <p id="ArwN"><strong>Удалить ноду</strong></p>
  <pre id="XsVG" data-lang="bash"># delete AI
systemctl stop uomi-ai
systemctl disable uomi-ai
rm /etc/systemd/system/uomi-ai.service

systemctl daemon-reload
cd
rm -r uomi-node-ai

# delete node
systemctl stop uomi
systemctl disable uomi
rm /etc/systemd/system/uomi.service

systemctl daemon-reload
cd
rm -r uomi</pre>
  <p id="TRZA"></p>
  <pre id="B7Yg" data-lang="bash"># Проверка конечной точки RPC
curl -H &quot;Content-Type: application/json&quot; \
    -d &#x27;{&quot;id&quot;:1, &quot;jsonrpc&quot;:&quot;2.0&quot;, &quot;method&quot;: &quot;system_health&quot;, &quot;params&quot;:[]}&#x27; \
    http://localhost:9944</pre>
  <pre id="tNJ8" data-lang="bash"># узнать свой peer
curl -H &quot;Content-Type: application/json&quot; -d &#x27;{&quot;id&quot;:1, &quot;jsonrpc&quot;:&quot;2.0&quot;, &quot;method&quot;: &quot;system_localPeerId&quot;}&#x27; http://localhost:9944
#{&quot;jsonrpc&quot;:&quot;2.0&quot;,&quot;result&quot;:&quot;12D3KooWBTu7oEJzsyxEtuc1ktnuisyntF8sjFB6Q61yxEtuc1k&quot;,&quot;id&quot;:1}

# подставляем свои данные
ip4/&lt;YOUR_IP&gt;/tcp/30333/p2p/&lt;RESULT_OF_CURL&gt;
#/ip4/213.12.15.9/tcp/30333/p2p/12D3KooWBTu7oEJzsyxEtuc1ktnuisyntF8sjFB6Q61yxEtuc1k</pre>
  <figure id="YlFI" class="m_original" data-caption-align="center">
    <img src="https://img3.teletype.in/files/e9/28/e92895ca-f71d-497c-9fd2-2e7eeedd5303.png" width="278" />
    <figcaption><strong>Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq</strong></figcaption>
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lesnik13utsa/yhwoF4hhHxP</guid><link>https://teletype.in/@lesnik13utsa/yhwoF4hhHxP?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa</link><comments>https://teletype.in/@lesnik13utsa/yhwoF4hhHxP?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa#comments</comments><dc:creator>lesnik13utsa</dc:creator><title>Atomone</title><pubDate>Mon, 13 Jan 2025 15:47:50 GMT</pubDate><category>MAINNET</category><description><![CDATA[<img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png"></img>UTSA]]></description><content:encoded><![CDATA[
  <figure id="I1Jz" class="m_original">
    <img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png" width="820" />
  </figure>
  <p id="head" data-align="center">🪓 <a href="https://t.me/utsa_channel" target="_blank">Telegram канал UTSA</a> 🪓 <a href="https://t.me/utsa_chat" target="_blank">Telegram чат UTSA</a></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="D2wo" data-align="center"><strong>Web <a href="https://discord.gg/fPxZwk3GS4" target="_blank">Discord</a> <a href="https://github.com/atomone-hub" target="_blank">Github</a></strong></p>
  </section>
  <p id="sHgA"><u><strong>Testnet details</strong></u></p>
  <ul id="2h1F">
    <li id="ED8t">Network Chain ID: <code>atomone-1</code></li>
    <li id="8tyv">Denom stake: <code>uatone</code></li>
    <li id="SZWc">Binary: atomoned</li>
    <li id="OnH1">Working directory: <code>.atomone</code></li>
    <li id="AdcU">RPC: <a href="https://m-atomone.rpc.utsa.tech/" target="_blank">https://m-atomone.rpc.utsa.tech/</a></li>
    <li id="LaYP">API: <a href="https://m-atomone.api.utsa.tech/" target="_blank">https://m-atomone.api.utsa.tech/</a></li>
    <li id="jHeg">Explorer: <a href="https://exp.utsa.tech/atomone/staking" target="_blank">https://exp.utsa.tech/atomone/staking</a></li>
  </ul>
  <p id="motH"><strong>AtomOne</strong> - это форк Gaia, который дополняет более широкую экосистему Cosmos альтернативным хабом, ориентированным на безопасность. AtomOne подтверждает основополагающее видение Cosmos Hub как минимального хаба IBC/ICS, защищенного токеном стейкинга, нацеленным на две трети стейкинга. Участники AtomOne поддерживают изначальные ценности Cosmos Hub - безопасность, устойчивость, децентрализацию и соглашаются, что минимализм хаба, закрепленный письменной конституцией, — единственный способ обеспечить финансовую безопасность и масштабирование для миллиардов людей</p>
  <p id="bitcoins-liquidity"></p>
  <hr />
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre data-lang="bash" id="UiYx"># проверяем статус prevotes/precommits
FOLDER=.atomone

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

PORT=&lt;ввести свой порт&gt;

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;</pre>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="CJUj"><strong><s>UPD 🕊 v1.1.2 (Высота обновления: )</s></strong></p>
    <pre data-lang="bash" id="NavW">cd $HOME/atomone
git pull
git checkout v1.1.2
make build
$HOME/atomone/build/atomoned version --long | grep -e version -e commit
# version: v1.1.2
# commit: b07127b42c91c8709a8b7335ae8a1176e0fd1ece

# # ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop atomoned
mv $HOME/atomone/build/atomoned $(which atomoned)
atomoned version --long | grep -e version -e commit
#

systemctl restart atomoned &amp;&amp; journalctl -u atomoned -f -o cat</pre>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="CJUj"><strong><s>UPD 🕊 v2.1.0 (Высота обновления: 3318000)</s></strong></p>
    <pre data-lang="bash" id="56Xk">cd $HOME/atomone
git pull
git checkout v2.1.0
make build
$HOME/atomone/build/atomoned version --long | grep -e version -e commit
# version: v2.1.0
# commit: c29e6ecf39ce733fe14e7d703aa28e5aeef5e8f0

# # ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
systemctl stop atomoned
mv $HOME/atomone/build/atomoned $(which atomoned)
atomoned version --long | grep -e version -e commit
#

systemctl restart atomoned &amp;&amp; journalctl -u atomoned -f -o cat</pre>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="1yyb"><strong>UPD 🕊 v3.3.0 (Высота обновления: 5902000)</strong></p>
    <pre data-lang="bash" id="69t1">cd $HOME/atomone
git pull
git checkout v3.3.0
make build
$HOME/atomone/build/atomoned version --long | grep -e version -e commit
# version: v3.3.0
# commit: 4631da0210859bfa0da25e3fbcc8fa33f0c6ffdc

# AFTER THE NETWORK IS STOPPED ON THE REQUIRED BLOCK!!!
systemctl stop atomoned
mv $HOME/atomone/build/atomoned $(which atomoned)
atomoned version --long | grep -e version -e commit
#

systemctl restart atomoned &amp;&amp; journalctl -u atomoned -f -o cat</pre>
  </section>
  <p id="vyaU"></p>
  <p id="b72l"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="6FkE">Подготовка сервера</h2>
  </section>
  <pre data-lang="bash" id="Sctg"># обновляем репозитории
apt update &amp;&amp; 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</pre>
  <p id="M4EP"><strong>File2Ban</strong> - подробнее <a href="https://www.linuxshop.ru/articles/a26710798-nastroyka_fail2ban" target="_blank">здесь</a></p>
  <pre data-lang="bash" id="bmb2"># устанавливаем и копируем конфиг, который будет иметь больший приоритет
apt install fail2ban -y &amp;&amp; \
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local &amp;&amp; \
nano /etc/fail2ban/jail.local
# раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 &lt;ip&gt;
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 &amp;&amp; systemctl disable fail2ban</pre>
  <p id="eKUj"><strong>Устанавливаем Go</strong></p>
  <pre data-lang="bash" id="tOgD">ver=&quot;1.21.13&quot; &amp;&amp; \
wget &quot;https://golang.org/dl/go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
sudo rm -rf /usr/local/go &amp;&amp; \
sudo tar -C /usr/local -xzf &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
rm &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
echo &quot;export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin&quot; &gt;&gt; $HOME/.bash_profile &amp;&amp; \
source $HOME/.bash_profile &amp;&amp; \
go version</pre>
  <p id="Xwgl"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1b58">Новая установка ноды</h2>
  </section>
  <section>
    <p id="z8pZ"><u><em><strong>ВАЖНО </strong>— в командах ниже все, что в <strong>&lt;&gt;</strong> меняем на свое значение и убираем сами<strong> &lt;&gt;</strong></em></u></p>
  </section>
  <p id="sjXD"><strong>Устанавливаем бинарники</strong></p>
  <pre data-lang="bash" id="fj2z">git clone https://github.com/atomone-hub/atomone &amp;&amp; cd atomone
git checkout v3.3.0
make install

atomoned version --long | grep -e version -e commit
# version: v3.3.0
# commit: 4631da0210859bfa0da25e3fbcc8fa33f0c6ffdc</pre>
  <p id="vp48"><strong>Инициализируем ноду, чтобы создать необходимые файлы конфигурации</strong></p>
  <pre data-lang="bash" id="shGi">atomoned init UTSA_guide --chain-id atomone-1</pre>
  <p id="Qrh4"><strong>Скачиваем Genesis</strong></p>
  <pre data-lang="bash" id="5Yaa">wget -O $HOME/.atomone/config/genesis.json &quot;https://share.utsa.tech/atomone/genesis.json&quot;

# Проверим генезис
sha256sum ~/.atomone/config/genesis.json
# 8ea3f710675dc472beee4e26a76f466f5648b33af5942ae8d6d2f3b5a6d961a6</pre>
  <p id="4cmW"><strong>Скачиваем Addr book</strong></p>
  <pre data-lang="bash" id="Bfwr">wget -O $HOME/.atomone/config/addrbook.json &quot;https://share.utsa.tech/atomone/addrbook.json&quot;</pre>
  <p id="iL4t"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="kBZ8">Настраиваем конфигурацию ноды</h2>
  </section>
  <pre data-lang="bash" id="fqxF"># правим конфиг, благодаря чему мы можем больше не использовать флаг chain-id для каждой команды CLI в client.toml
atomoned config chain-id atomone-1

# настраиваем минимальную цену за газ в app.toml
#minimum-gas-prices = &quot;0.01uatone,0.09uphoton&quot;

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

peers=&quot;&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.atomone/config/config.toml
seeds=&quot;&quot;
sed -i.bak -e &quot;s/^seeds =.*/seeds = \&quot;$seeds\&quot;/&quot; $HOME/.atomone/config/config.toml

# настраиваем фильтрацию &quot;плохих&quot; peers
sed -i -e &quot;s/^filter_peers *=.*/filter_peers = \&quot;true\&quot;/&quot; $HOME/.atomone/config/config.toml</pre>
  <p id="QI2Z"></p>
  <p id="O78h"><strong>(ОПЦИОНАЛЬНО) Настраиваем прунинг в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="14yu">pruning=&quot;custom&quot;
pruning_keep_recent=&quot;1000&quot;
pruning_interval=&quot;100&quot;
sed -i -e &quot;s/^pruning *=.*/pruning = \&quot;$pruning\&quot;/&quot; $HOME/.atomone/config/app.toml
sed -i -e &quot;s/^pruning-keep-recent *=.*/pruning-keep-recent = \&quot;$pruning_keep_recent\&quot;/&quot; $HOME/.atomone/config/app.toml
sed -i -e &quot;s/^pruning-interval *=.*/pruning-interval = \&quot;$pruning_interval\&quot;/&quot; $HOME/.atomone/config/app.toml</pre>
  <p id="dGeO"><strong>(ОПЦИОНАЛЬНО) Выкл индексацию в<code>config.toml</code></strong></p>
  <pre data-lang="bash" id="55Au">indexer=&quot;null&quot;
sed -i -e &quot;s/^indexer *=.*/indexer = \&quot;$indexer\&quot;/&quot; $HOME/.atomone/config/config.toml</pre>
  <p id="UDzq"><strong>(ОПЦИОНАЛЬНО) Вкл/выкл снэпшоты в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="JzPe">snapshot_interval=1000
sed -i.bak -e &quot;s/^snapshot-interval *=.*/snapshot-interval = \&quot;$snapshot_interval\&quot;/&quot; ~/.atomone/config/app.toml</pre>
  <p id="bdFP"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="5cMj">State sync</h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre data-lang="bash" id="CipN"># add peer
peers=&quot;7e804bdafb01244cbe82c96e768d88238603e1da@144.76.29.90:61156&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.atomone/config/config.toml</pre>
    <pre data-lang="bash" id="fARJ">SNAP_RPC=https://m-atomone.rpc.utsa.tech:443

LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 100)); \
TRUST_HASH=$(curl -s &quot;$SNAP_RPC/block?height=$BLOCK_HEIGHT&quot; | jq -r .result.block_id.hash)

echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH

sed -i.bak -E &quot;s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\&quot;$SNAP_RPC,$SNAP_RPC\&quot;| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\&quot;$TRUST_HASH\&quot;| ; \
s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\&quot;\&quot;|&quot; $HOME/.atomone/config/config.toml</pre>
    <pre data-lang="bash" id="suj0">systemctl restart atomoned &amp;&amp; journalctl -u atomoned -f -o cat</pre>
  </section>
  <p id="4qU1"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="N1Bw"><strong>Snapshot</strong></h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="yPUl" data-align="center">time: <strong>every 24 hours</strong> <strong>| </strong>indexer:<strong> kv | </strong>pruning:<strong> 1000/100</strong></p>
    <p id="SP72" data-align="center">🌐 <a href="https://share.utsa.tech/atomone/" target="_blank"><strong>https://share.utsa.tech/atomone/</strong></a></p>
    <pre data-lang="bash" id="booK">cd $HOME
systemctl stop atomoned

cp $HOME/.atomone/data/priv_validator_state.json $HOME/.atomone/priv_validator_state.json.backup

# удаляем старую базу данных
rm -rf $HOME/.atomone/data/{application.db,evidence.db,snapshots,tx_index.db,blockstore.db,state.db,cs.wal}

# скачиваем snapshot
curl -o - -L https://share.utsa.tech/atomone/atomone.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.atomone/

mv $HOME/.atomone/priv_validator_state.json.backup $HOME/.atomone/data/priv_validator_state.json

systemctl restart atomoned &amp;&amp; journalctl -u atomoned -f -o cat</pre>
  </section>
  <p id="76hd"><strong>Создаем сервисный файл</strong></p>
  <pre data-lang="bash" id="N5A7">tee /etc/systemd/system/atomoned.service &gt; /dev/null &lt;&lt;EOF
[Unit]
Description=atomoned
After=network-online.target

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

[Install]
WantedBy=multi-user.target
EOF</pre>
  <pre data-lang="bash" id="FwON">systemctl daemon-reload
systemctl enable atomoned
systemctl restart atomoned &amp;&amp; journalctl -u atomoned -f -o cat</pre>
  <p id="P3nc"><strong>Создаем или восстанавливаем кошелек и сохраняем вывод</strong></p>
  <pre data-lang="bash" id="Okji"># создать кошелек
atomoned keys add &lt;name_wallet&gt; --keyring-backend os

# восстановить кошелек (после команды вставить seed)
atomoned keys add &lt;name_wallet&gt; --recover --keyring-backend os

# подключить кошелек ledger
atomoned keys add &lt;name_wallet&gt; --ledger </pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="YLko"><strong>Не забываем сохранить seed !!!</strong></p>
  </section>
  <p id="lNw0"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="sBaD"><strong>Создаем валидатора</strong></h2>
  </section>
  <pre id="0ztD" data-lang="bash">atomoned tx staking create-validator \
--chain-id atomone-1 \
--commission-rate 0.1 \
--commission-max-rate 0.256 \
--commission-max-change-rate 0.1 \
--min-self-delegation &quot;1&quot; \
--amount=1000000uatone \
--pubkey $(atomoned tendermint show-validator) \
--moniker &quot;&lt;moniker&gt;&quot; \
--details=&quot;&quot; \
--security-contact=&quot;&quot; \
--website=&quot;&quot; \
--identity=&quot;&quot; \
--from &lt;wallet&gt; \
--fees 50000uphoton</pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="kj2D"><strong>Не забываем сохранить priv_validator_key.json !!!</strong></p>
    <p id="VBzA">Подробнее о создании/редактировании валидатора можно почитать <a href="/@lesnik13utsa/RPLJpWXIoDQ">здесь</a></p>
  </section>
  <p id="crTl"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1eUH">Полезные команды</h2>
  </section>
  <p id="Fuvu"><strong>Информация</strong></p>
  <pre data-lang="bash" id="uOsZ"># проверить логи
sudo journalctl -u atomoned -f -o cat
# проверить статус
curl localhost:$PORT/status | jq
# проверить баланс
atomoned q bank balances &lt;address&gt;
# проверить pubkey валидатора
atomoned tendermint show-validator
# проверить валидатора
atomoned query staking validator &lt;valoper_address&gt;
atomoned query staking validators --limit 1000000 -o json | jq &#x27;.validators[] | select(.description.moniker==&quot;&lt;name_moniker&gt;&quot;)&#x27; | jq
# проверка информации по TX_HASH
atomoned query tx &lt;TX_HASH&gt;
# параметры сети
atomoned q staking params
atomoned q slashing params
# проверить сколько блоков пропущено валидатором и с какого блока актив
atomoned q slashing signing-info $(atomoned tendermint show-validator)
# проверить slashing
atomoned q slashing signing-info $(atomoned tendermint show-validator)
# узнать транзакцию создания валидатора (заменить свой valoper_address)
atomoned query txs --events=&#x27;create_validator.validator=&lt;your_valoper_address&gt;&#x27; -o=json | jq .txs[0].txhash -r
# просмотр активного сета
atomoned q staking validators -o json --limit=1000 \
| jq &#x27;.validators[] | select(.status==&quot;BOND_STATUS_BONDED&quot;)&#x27; \
| jq -r &#x27;.tokens + &quot; - &quot; + .description.moniker&#x27; \
| sort -gr | nl
# просмотр неактивного сета
atomoned q staking validators -o json --limit=1000 \
| jq &#x27;.validators[] | select(.status==&quot;BOND_STATUS_UNBONDED&quot;)&#x27; \
| jq -r &#x27;.tokens + &quot; - &quot; + .description.moniker&#x27; \
| sort -gr | nl</pre>
  <p id="nXYz"><strong>Транзакции</strong></p>
  <pre data-lang="bash" id="r27G"># собрать комиссионные + реварды
atomoned tx distribution withdraw-rewards &lt;valoper_address&gt; --from &lt;name_wallet&gt; --fees 50000uphoton --commission -y

# заделегировать себе в стейк еще (так отправляется 1 монетa)
atomoned tx staking delegate &lt;valoper_address&gt; 1000000uatone --from &lt;name_wallet&gt; --fees 50000uphoton -y

# ределегирование на другого валидатора
atomoned tx staking redelegate &lt;src-validator-addr&gt; &lt;dst-validator-addr&gt; 1000000uatone --from &lt;name_wallet&gt; --fees 50000uphoton -y

# unbond 
atomoned tx staking unbond &lt;addr_valoper&gt; 1000000uatone --from &lt;name_wallet&gt; --fees 50000uphoton -y

# отправить монеты на другой адрес
atomoned tx bank send &lt;name_wallet&gt; &lt;address&gt; 1000000uatone --fees 50000uphoton -y

# выбраться из тюрьмы
atomoned tx slashing unjail --from &lt;name_wallet&gt; --fees 50000uphoton -y</pre>
  <p id="zl2g"><strong>Работа с кошельками</strong></p>
  <pre data-lang="bash" id="wwkO"># вывести список кошельков
atomoned keys list

# показать ключ аккаунта
atomoned keys show &lt;name_wallet&gt; --bech acc

# показать ключ валидатора
atomoned keys show &lt;name_wallet&gt; --bech val

# показать ключ консенсуса
atomoned keys show &lt;name_wallet&gt; --bech cons

# запрос учетной записи
atomoned q auth account $(atomoned keys show &lt;name_wallet&gt; -a) -o text

# удалить кошелек
atomoned keys delete &lt;name_wallet&gt;</pre>
  <p id="Qfld"><strong>Удалить ноду</strong></p>
  <pre data-lang="bash" id="EI3J">systemctl stop atomoned &amp;&amp; \
systemctl disable atomoned &amp;&amp; \
rm /etc/systemd/system/atomoned.service &amp;&amp; \
systemctl daemon-reload &amp;&amp; \
cd $HOME &amp;&amp; \
rm -rf .atomone atomone &amp;&amp; \
rm -rf $(which atomoned)</pre>
  <p id="fYh0"><strong>ГОВЕРНАНС</strong></p>
  <pre data-lang="bash" id="SX5l"># список proposals
atomoned q gov proposals

# посмотреть результат голосования
atomoned q gov proposals --voter &lt;ADDRESS&gt;

# проголосовать за предложение 
atomoned tx gov vote 1 yes --from &lt;name_wallet&gt; --fees 50000uphoton

# внести депозит в предложение
atomoned tx gov deposit 1 1000000uatone --from &lt;name_wallet&gt; --fees 50000uphoton

# создать предложение
atomoned tx gov submit-proposal --title=&quot;Randomly reward&quot; --description=&quot;Reward 10 testnet participants who completed more than 3 tasks&quot; --type=&quot;Text&quot; --deposit=&quot;11000000uatone&quot; --from=&lt;name_wallet&gt; --fees 50000uphoton</pre>
  <p id="chat-messages-932182862663389245"><strong>Peers and RPC</strong></p>
  <pre data-lang="bash" id="ARsF">FOLDER=.atomone

# узнать свой peer
PORTR=$(grep -A 3 &quot;\[p2p\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;) &amp;&amp; \
echo $(atomoned tendermint show-node-id)@$(wget -qO- eth0.me)$PORTR

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

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

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

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;

# 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])</pre>
  <figure id="a5BW" class="m_original" data-caption-align="center">
    <img src="https://img3.teletype.in/files/e9/28/e92895ca-f71d-497c-9fd2-2e7eeedd5303.png" width="278" />
    <figcaption><strong>Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq</strong></figcaption>
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lesnik13utsa/Vj7SznlmE6n</guid><link>https://teletype.in/@lesnik13utsa/Vj7SznlmE6n?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa</link><comments>https://teletype.in/@lesnik13utsa/Vj7SznlmE6n?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa#comments</comments><dc:creator>lesnik13utsa</dc:creator><title>Native - мигрируют на sui</title><pubDate>Fri, 10 Jan 2025 21:16:31 GMT</pubDate><category>ARCHIVE</category><description><![CDATA[<img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png"></img>🪓 Telegram канал UTSA 🪓 Telegram чат UTSA]]></description><content:encoded><![CDATA[
  <figure id="RLQC" class="m_original">
    <img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png" width="820" />
  </figure>
  <p id="head" data-align="center">🪓 <a href="https://t.me/utsa_channel" target="_blank">Telegram канал UTSA</a> 🪓 <a href="https://t.me/utsa_chat" target="_blank">Telegram чат UTSA</a></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="D2wo" data-align="center"><strong><a href="https://www.gonative.cc/" target="_blank">Web</a> <a href="https://discord.gg/ZAkES4s5DH" target="_blank">Discord</a> <a href="https://github.com/gonative-cc/gonative/releases" target="_blank">Github</a></strong></p>
  </section>
  <p id="sHgA"><u><strong>Testnet details</strong></u></p>
  <ul id="2h1F">
    <li id="ED8t">Network Chain ID: <code>native-t1</code></li>
    <li id="8tyv">Denom stake: <code>untiv</code></li>
    <li id="SZWc">Binary: <code>gonatived</code></li>
    <li id="OnH1">Working directory: <code>.gonative</code></li>
    <li id="AdcU">RPC: <a href="https://t-native.rpc.utsa.tech/" target="_blank">https://t-native.rpc.utsa.tech/</a></li>
    <li id="LaYP">API: <a href="https://t-native.api.utsa.tech/" target="_blank">https://t-native.api.utsa.tech/</a></li>
    <li id="jHeg">Explorer: <a href="https://testnet.native.explorers.guru/" target="_blank">https://testnet.native.explorers.guru/</a></li>
    <li id="motH">Docs: <a href="https://github.com/gonative-cc/network-docs/blob/master/validator.md" target="_blank">https://github.com/gonative-cc/network-docs/blob/master/validator.md</a></li>
  </ul>
  <p id="O9Cb"></p>
  <p id="bitcoins-liquidity">Native трансформирует роль Bitcoin в DeFi, внедряя программируемость, совместимость и доступность</p>
  <ul id="yAIu">
    <li id="thlP">Native, Avail и Nuffle объединяют усилия, чтобы привести BLISS в действие - <a href="https://www.binance.com/en/square/post/14680468817418" target="_blank">https://www.binance.com/en/square/post/14680468817418</a></li>
    <li id="MyxG">Roadmap: 2025 - <a href="https://x.com/nativenetwork/status/1877357364820517202?s=46" target="_blank">https://x.com/nativenetwork/status/1877357364820517202?s=46</a></li>
  </ul>
  <p id="zkFD"><strong>В настоящее время запущен testnet 1 с заполненными лимитами валидаторов</strong></p>
  <p id="QcxT">Если Вы заинтересованы принять участие в testnet 2, то создайте тикеты в дискорде</p>
  <hr />
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre data-lang="bash" id="JQpv"># проверяем статус prevotes/precommits
FOLDER=.gonative

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

PORT=&lt;ввести свой порт&gt;

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;</pre>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="CJUj"><strong>UPD 🕊 (Высота обновления: )</strong></p>
    <pre data-lang="bash" id="lXND">cd $HOME/
# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!</pre>
  </section>
  <p id="OoM1"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="6FkE">Подготовка сервера</h2>
  </section>
  <pre data-lang="bash" id="4yo5"># обновляем репозитории
apt update &amp;&amp; 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</pre>
  <p id="M4EP"><strong>File2Ban</strong> - подробнее <a href="https://www.linuxshop.ru/articles/a26710798-nastroyka_fail2ban" target="_blank">здесь</a></p>
  <pre data-lang="bash" id="pgl9"># устанавливаем и копируем конфиг, который будет иметь больший приоритет
apt install fail2ban -y &amp;&amp; \
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local &amp;&amp; \
nano /etc/fail2ban/jail.local
# раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 &lt;ip&gt;
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 &amp;&amp; systemctl disable fail2ban</pre>
  <p id="eKUj"><strong>Устанавливаем Go</strong></p>
  <pre data-lang="bash" id="5Nm6">ver=&quot;1.23.3&quot; &amp;&amp; \
wget &quot;https://golang.org/dl/go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
sudo rm -rf /usr/local/go &amp;&amp; \
sudo tar -C /usr/local -xzf &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
rm &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
echo &quot;export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin&quot; &gt;&gt; $HOME/.bash_profile &amp;&amp; \
source $HOME/.bash_profile &amp;&amp; \
go version</pre>
  <p id="ZGlw"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1b58">Новая установка ноды</h2>
  </section>
  <section>
    <p id="z8pZ"><u><em><strong>ВАЖНО </strong>— в командах ниже все, что в <strong>&lt;&gt;</strong> меняем на свое значение и убираем сами<strong> &lt;&gt;</strong></em></u></p>
  </section>
  <p id="sjXD"><strong>Устанавливаем бинарники</strong></p>
  <pre data-lang="bash" id="58hz">git clone https://github.com/gonative-cc/gonative &amp;&amp; cd gonative
git checkout v0.1.1
make build
mv $HOME/gonative/out/gonative $HOME/go/bin/gonatived

gonatived version --long | grep -e version -e commit
# version: 0.1.1
# commit: 5bcbb57e4e4689cf515e1c9e6326ae9078f3bdfa
# comet_server_version: v1.0.0-beta.1
# cosmos_sdk_version: v0.52.0-rc.1.0.20250106202622-c6327ea6e403
# runtime_version: v2.0.0-20241219154748-69025c556666
# stf_version: v1.0.0-beta.1</pre>
  <p id="vp48"><strong>Инициализируем ноду, чтобы создать необходимые файлы конфигурации</strong></p>
  <pre data-lang="bash" id="8MFS">gonatived init UTSA_guide --chain-id native-t1</pre>
  <p id="Qrh4"><strong>Скачиваем Genesis</strong></p>
  <pre data-lang="bash" id="Le9H">#wget -O $HOME/.gonative/config/genesis.json &quot;https://share102.utsa.tech/native/genesis.json&quot;
wget https://github.com/gonative-cc/network-docs/raw/refs/heads/master/genesis/genesis-testnet-1.json.gz
gzip -d genesis-testnet-1.json.gz
mv genesis-testnet-1.json  $HOME/.gonative/config/genesis.json

# Проверим генезис
sha256sum ~/.gonative/config/genesis.json
# 6c7c7ee70b89850dfe9b9c64b24debe67e36ddf5457c8555d4b979146b99e1b0</pre>
  <p id="4cmW"><strong>Скачиваем Addr book</strong></p>
  <pre data-lang="bash" id="q0B6">wget -O $HOME/.gonative/config/addrbook.json &quot;https://share102.utsa.tech/native/addrbook.json&quot;</pre>
  <p id="rrUd"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="kBZ8">Настраиваем конфигурацию ноды</h2>
  </section>
  <pre data-lang="bash" id="dL5f"># правим конфиг, благодаря чему мы можем больше не использовать флаг chain-id для каждой команды CLI в client.toml
gonatived config set client chain-id native-t1

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

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

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

peers=&quot;2e2f0def6453e67a5d5872da7f73002caf55a010@195.3.221.110:52656,612e6279e528c3fadfe0bb9916fd5532bc9be2cd@164.132.247.253:56406,f2e45e48f55f649dee0e8dc4adfa445308ae8018@167.235.247.51:26656,a7577f50cdefd9a7a5e4a673278d9004df9b4bb4@103.219.169.97:56406,236946946eacbf6ab8a6f15c99dac1c80db6f8a5@65.108.203.61:52656,13b49060d7ae1375a04a8eaec8602920f47b5a55@37.142.120.99:27656,48bd9b42755de1a3039089c4cb66b9dd01561001@57.129.53.32:40656,0c2926cdac1e31e39ea137ec3438be6485fd58d7@116.202.85.179:10007,b80d0042f7096759ae6aada870b52edf0dcd74af@65.109.58.158:26056,f0e48f295e0d7c7d03943c82ac01bfc54969320b@78.46.185.199:26656,8eb8024d28b070d21844a90c7c2d34ef4b731365@193.34.213.77:15007,b5f52d67223c875947161ea9b3a95dbec30041cb@116.202.42.156:32107,5be5b41a6aef28a7779002f2af0989c7a7da5cfe@165.154.245.110:26656,b07e0482f43a2add3531e9aa7946609386b2e7e7@65.109.113.219:30656,6edabc54e76245af9f8f739303c788bfb23bd09a@95.216.12.106:24096,ade4d8bc8cbe014af6ebdf3cb7b1e9ad36f412c0@176.9.82.221:30656,d0e0d80be68cec942ad46b36419f0ba76d35d134@94.130.138.41:26444,be5b6092815df2e0b2c190b3deef8831159bb9a2@64.225.109.119:26656,49784fe6a1b812fd45f4ac7e5cf953c2a3630cef@136.243.17.170:38656,40cbf43553e7ee3507814e3110a749a7e638aa83@194.163.169.182:24656,1e9a3f3615ec98ea66c41b7e37a724889067bc05@193.24.209.155:12056,7567880ef17ce8488c55c3256c76809b37659cce@161.35.157.54:26656,d856c6c6f195b791c54c18407a8ad4391bd30b99@142.132.156.99:24096,2dacf537748388df80a927f6af6c4b976b7274cb@148.251.44.42:26656,2c1e6b6b54daa7646339fa9abede159519ca7cae@37.252.186.248:26656,fbc51b668eb84ae14d430a3db11a5d90fc30f318@65.108.13.154:52656,48d0fdcc642690ede0ad774f3ba4dce6e549b4db@142.132.215.124:26656,24d51644ea1a6b91bf745f6767a9079d4b35e3d2@37.27.202.188:26656&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.gonative/config/config.toml
seeds=&quot;ade4d8bc8cbe014af6ebdf3cb7b1e9ad36f412c0@testnet-seeds.polkachu.com:30656&quot;
sed -i.bak -e &quot;s/^seeds =.*/seeds = \&quot;$seeds\&quot;/&quot; $HOME/.gonative/config/config.toml
</pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="y087"><strong>Рекомендуемый бэкенд баз данных</strong></p>
    <pre id="vcgh" data-lang="bash">sed -i -e &quot;s/^app-db-backend *=.*/app-db-backend = \&quot;goleveldb\&quot;/;&quot; $HOME/.gonative/config/app.toml
sed -i -e &quot;s/^db_backend *=.*/db_backend = \&quot;pebbledb\&quot;/&quot; $HOME/.gonative/config/config.toml</pre>
    <pre id="9UVd"># app.toml / base configuration options
app-db-backend = &quot;goleveldb&quot;

# config.toml / base configuration options
db_backend = &quot;pebbledb&quot;</pre>
  </section>
  <p id="CQ2e"></p>
  <p id="QI2Z"><strong>(ОПЦИОНАЛЬНО) Настраиваем прунинг в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="Hdwl">pruning=&quot;nothing&quot;
pruning_keep_recent=&quot;0&quot;
pruning_interval=&quot;0&quot;
sed -i -e &quot;s/^pruning *=.*/pruning = \&quot;$pruning\&quot;/&quot; $HOME/.gonative/config/app.toml
sed -i -e &quot;s/^pruning-keep-recent *=.*/pruning-keep-recent = \&quot;$pruning_keep_recent\&quot;/&quot; $HOME/.gonative/config/app.toml
sed -i -e &quot;s/^pruning-interval *=.*/pruning-interval = \&quot;$pruning_interval\&quot;/&quot; $HOME/.gonative/config/app.toml</pre>
  <p id="dGeO"><strong>(ОПЦИОНАЛЬНО) Выкл индексацию в<code>config.toml</code></strong></p>
  <pre data-lang="bash" id="fwvo">indexer=&quot;null&quot;
sed -i -e &quot;s/^indexer *=.*/indexer = \&quot;$indexer\&quot;/&quot; $HOME/.gonative/config/config.toml</pre>
  <p id="UDzq"><strong>(ОПЦИОНАЛЬНО) Вкл/выкл снэпшоты в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="WgiS">snapshot_interval=1000
sed -i.bak -e &quot;s/^snapshot-interval *=.*/snapshot-interval = \&quot;$snapshot_interval\&quot;/&quot; ~/.gonative/config/app.toml</pre>
  <p id="gUf3"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="5cMj">State sync</h2>
  </section>
  <pre id="bmV7" data-lang="bash"># add peer
peers=&quot;f82c497af58874eac7c862c362df9659d95f5332@5.9.87.231:60756&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.gonative/config/config.toml</pre>
  <pre id="ycho" data-lang="bash">SNAP_RPC=https://t-native.rpc.utsa.tech:443

LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 100)); \
TRUST_HASH=$(curl -s &quot;$SNAP_RPC/block?height=$BLOCK_HEIGHT&quot; | jq -r .result.block_id.hash)

echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH

sed -i.bak -E &quot;s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\&quot;$SNAP_RPC,$SNAP_RPC\&quot;| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\&quot;$TRUST_HASH\&quot;| ; \
s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\&quot;\&quot;|&quot; $HOME/.gonative/config/config.toml</pre>
  <pre id="gUOM" data-lang="bash">systemctl restart gonatived &amp;&amp; journalctl -u gonatived -f -o cat</pre>
  <p id="zZH6"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="N1Bw"><strong>Snapshot</strong></h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="yPUl" data-align="center">time: <strong>every 24 hours</strong> <strong>| </strong>indexer:<strong> kv | </strong>app.toml:<strong> goleveldb | </strong>config.toml:<strong> pebbledb</strong></p>
    <p id="SP72" data-align="center">🌐 <a href="https://share102.utsa.tech/native/" target="_blank"><strong>https://share102.utsa.tech/native/</strong></a></p>
    <pre data-lang="bash" id="Mrvp">cd $HOME
systemctl stop gonatived

cp $HOME/.gonative/data/priv_validator_state.json $HOME/.gonative/priv_validator_state.json.backup

# удаляем старую базу данных
rm -rf $HOME/.gonative/data/{application.db,evidence.db,snapshots,tx_index.db,blockstore.db,state.db,cs.wal}

# скачиваем snapshot
curl -o - -L https://share102.utsa.tech/native/native_testnet.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.gonative/

mv $HOME/.gonative/priv_validator_state.json.backup $HOME/.gonative/data/priv_validator_state.json

systemctl restart gonatived &amp;&amp; journalctl -u gonatived -f -o cat</pre>
  </section>
  <p id="76hd"><strong>Создаем сервисный файл</strong></p>
  <pre data-lang="bash" id="hcw2">tee /etc/systemd/system/gonatived.service &gt; /dev/null &lt;&lt;EOF
[Unit]
Description=gonatived
After=network-online.target

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

[Install]
WantedBy=multi-user.target
EOF</pre>
  <pre data-lang="bash" id="ORUF">systemctl daemon-reload
systemctl enable gonatived
systemctl restart gonatived &amp;&amp; journalctl -u gonatived -f -o cat</pre>
  <p id="P3nc"><strong>Создаем или восстанавливаем кошелек и сохраняем вывод</strong></p>
  <pre data-lang="bash" id="5PTg"># создать кошелек
gonatived keys add &lt;name_wallet&gt; --keyring-backend os

# восстановить кошелек (после команды вставить seed)
gonatived keys add &lt;name_wallet&gt; --recover --keyring-backend os

# подключить кошелек ledger
gonatived keys add &lt;name_wallet&gt; --ledger </pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="YLko"><strong>Не забываем сохранить seed !!!</strong></p>
  </section>
  <p id="xk3L"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="sBaD"><strong>Создаем валидатора</strong></h2>
  </section>
  <p id="0ztD">1. Получаем свой pubkey</p>
  <pre id="pVbb" data-lang="bash">gonatived comet show-validator
# {&quot;@type&quot;:&quot;/cosmos.crypto.ed25519.PubKey&quot;,&quot;key&quot;:&quot;ZXONS7NNjLWH4HePBOoHKDAYeLXQO5iUwpCRQSi1poI=&quot;}</pre>
  <p id="ywEz">2. Создаем validator.json</p>
  <pre id="qeIO" data-lang="bash">nano $HOME/.gonative/validator.json</pre>
  <p id="qdbf">3. Вставляем наш конфиг</p>
  <pre id="MyRa" data-lang="bash">{
  &quot;pubkey&quot;: {&quot;#pubkey&quot;},
  &quot;amount&quot;: &quot;1000000untiv&quot;,
  &quot;moniker&quot;: &quot;STAVR_guide&quot;,
  &quot;identity&quot;: &quot;&quot;,
  &quot;website&quot;: &quot;&quot;,
  &quot;security&quot;: &quot;&quot;,
  &quot;details&quot;: &quot;&quot;,
  &quot;commission-rate&quot;: &quot;0.05&quot;,
  &quot;commission-max-rate&quot;: &quot;0.2&quot;,
  &quot;commission-max-change-rate&quot;: &quot;0.2&quot;,
  &quot;min-self-delegation&quot;: &quot;1&quot;
}</pre>
  <p id="KCoo">4. Отправляем транзакцию</p>
  <pre id="PwMd" data-lang="bash">gonatived tx staking create-validator $HOME/.gonative/validator.json \
    --from=&lt;key-name&gt; \
    --chain-id=native-t1 \
    --fees 35000untiv --gas 350000</pre>
  <p id="iqJU"></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="kj2D"><strong>Не забываем сохранить priv_validator_key.json !!!</strong></p>
    <p id="VBzA">Подробнее о создании/редактировании валидатора можно почитать <a href="/@lesnik13utsa/RPLJpWXIoDQ">здесь</a></p>
  </section>
  <p id="gsY7"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1eUH">Полезные команды</h2>
  </section>
  <p id="Fuvu"><strong>Информация</strong></p>
  <pre data-lang="bash" id="O1c7"># проверить логи
sudo journalctl -u gonatived -f -o cat
# проверить статус
curl localhost:$PORT/status | jq
# проверить баланс
gonatived q bank balances &lt;address&gt;
# проверить pubkey валидатора
gonatived tendermint show-validator
# проверить валидатора
gonatived query staking validator &lt;valoper_address&gt;
gonatived query staking validators --limit 1000000 -o json | jq &#x27;.validators[] | select(.description.moniker==&quot;&lt;name_moniker&gt;&quot;)&#x27; | jq
# проверка информации по TX_HASH
gonatived query tx &lt;TX_HASH&gt;
# параметры сети
gonatived q staking params
gonatived q slashing params
# проверить сколько блоков пропущено валидатором и с какого блока актив
gonatived q slashing signing-info $(gonatived tendermint show-validator)
# проверить slashing
gonatived q slashing signing-info $(gonatived tendermint show-validator)
# узнать транзакцию создания валидатора (заменить свой valoper_address)
gonatived query txs --events=&#x27;create_validator.validator=&lt;your_valoper_address&gt;&#x27; -o=json | jq .txs[0].txhash -r
# просмотр активного сета
gonatived q staking validators -o json --limit=1000 \
| jq &#x27;.validators[] | select(.status==&quot;BOND_STATUS_BONDED&quot;)&#x27; \
| jq -r &#x27;.tokens + &quot; - &quot; + .description.moniker&#x27; \
| sort -gr | nl
# просмотр неактивного сета
gonatived q staking validators -o json --limit=1000 \
| jq &#x27;.validators[] | select(.status==&quot;BOND_STATUS_UNBONDED&quot;)&#x27; \
| jq -r &#x27;.tokens + &quot; - &quot; + .description.moniker&#x27; \
| sort -gr | nl</pre>
  <p id="nXYz"><strong>Транзакции</strong></p>
  <pre data-lang="bash" id="Qvx0"># собрать комиссионные + реварды
gonatived tx distribution withdraw-rewards &lt;valoper_address&gt; --from &lt;name_wallet&gt; --fees 5000untiv --commission -y

# заделегировать себе в стейк еще (так отправляется 1 монетa)
gonatived tx staking delegate &lt;valoper_address&gt; 1000000untiv --from &lt;name_wallet&gt; --fees 5000untiv -y

# ределегирование на другого валидатора
gonatived tx staking redelegate &lt;src-validator-addr&gt; &lt;dst-validator-addr&gt; 1000000untiv --from &lt;name_wallet&gt; --fees 5000untiv -y

# unbond 
gonatived tx staking unbond &lt;addr_valoper&gt; 1000000untiv --from &lt;name_wallet&gt; --fees 5000untiv -y

# отправить монеты на другой адрес
gonatived tx bank send &lt;name_wallet&gt; &lt;address&gt; 1000000untiv --fees 5000untiv -y

# выбраться из тюрьмы
gonatived tx slashing unjail --from &lt;name_wallet&gt; --fees 5000untiv -y</pre>
  <p id="zl2g"><strong>Работа с кошельками</strong></p>
  <pre data-lang="bash" id="VPqQ"># вывести список кошельков
gonatived keys list

# показать ключ аккаунта
gonatived keys show &lt;name_wallet&gt; --bech acc

# показать ключ валидатора
gonatived keys show &lt;name_wallet&gt; --bech val

# показать ключ консенсуса
gonatived keys show &lt;name_wallet&gt; --bech cons

# запрос учетной записи
gonatived q auth account $(gonatived keys show &lt;name_wallet&gt; -a) -o text

# удалить кошелек
gonatived keys delete &lt;name_wallet&gt;</pre>
  <p id="Qfld"><strong>Удалить ноду</strong></p>
  <pre data-lang="bash" id="pR9s">systemctl stop gonatived &amp;&amp; \
systemctl disable gonatived &amp;&amp; \
rm /etc/systemd/system/gonatived.service &amp;&amp; \
systemctl daemon-reload &amp;&amp; \
cd $HOME &amp;&amp; \
rm -rf .gonative gonative &amp;&amp; \
rm -rf $(which gonatived)</pre>
  <p id="fYh0"><strong>ГОВЕРНАНС</strong></p>
  <pre data-lang="bash" id="zrzg"># список proposals
gonatived q gov proposals

# посмотреть результат голосования
gonatived q gov proposals --voter &lt;ADDRESS&gt;

# проголосовать за предложение 
gonatived tx gov vote 1 yes --from &lt;name_wallet&gt; --fees 5000untiv

# внести депозит в предложение
gonatived tx gov deposit 1 1000000untiv --from &lt;name_wallet&gt; --fees 5000untiv

# создать предложение
gonatived tx gov submit-proposal --title=&quot;Randomly reward&quot; --description=&quot;Reward 10 testnet participants who completed more than 3 tasks&quot; --type=&quot;Text&quot; --deposit=&quot;11000000grain&quot; --from=&lt;name_wallet&gt; --fees 5000untiv</pre>
  <p id="chat-messages-932182862663389245"><strong>Peers and RPC</strong></p>
  <pre data-lang="bash" id="p6Zv">FOLDER=.gonative

# узнать свой peer
PORTR=$(grep -A 3 &quot;\[p2p\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;) &amp;&amp; \
echo $(gonatived tendermint show-node-id)@$(wget -qO- eth0.me)$PORTR

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

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

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

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;

# 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])</pre>
  <figure id="hEqT" class="m_original" data-caption-align="center">
    <img src="https://img3.teletype.in/files/e9/28/e92895ca-f71d-497c-9fd2-2e7eeedd5303.png" width="278" />
    <figcaption><strong>Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq</strong></figcaption>
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lesnik13utsa/fSCdiJ2oINK</guid><link>https://teletype.in/@lesnik13utsa/fSCdiJ2oINK?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa</link><comments>https://teletype.in/@lesnik13utsa/fSCdiJ2oINK?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa#comments</comments><dc:creator>lesnik13utsa</dc:creator><title>Konstellation</title><pubDate>Fri, 06 Dec 2024 23:12:17 GMT</pubDate><category>MAINNET</category><description><![CDATA[<img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png"></img>UTSA]]></description><content:encoded><![CDATA[
  <figure id="MS0U" class="m_original">
    <img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png" width="820" />
  </figure>
  <p id="head" data-align="center">🪓 <a href="https://t.me/utsa_channel" target="_blank">Telegram канал UTSA</a> 🪓 <a href="https://t.me/utsa_chat" target="_blank">Telegram чат UTSA</a></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="D2wo" data-align="center"><strong><a href="https://konstellation.tech/" target="_blank">Web</a> <a href="https://discord.gg/6tyNVUTuq5" target="_blank">Discord</a> <a href="https://github.com/konstellation/konstellation" target="_blank">Github</a></strong></p>
  </section>
  <p id="sHgA"><u><strong>Testnet details</strong></u></p>
  <ul id="2h1F">
    <li id="ED8t">Network Chain ID: <code>darchub</code></li>
    <li id="8tyv">Denom stake: <code>udarc</code></li>
    <li id="SZWc">Binary: knstld</li>
    <li id="OnH1">Working directory: <code>.knstld</code></li>
    <li id="AdcU">RPC: <a href="https://m-konstellation.rpc.utsa.tech/" target="_blank">https://m-konstellation.rpc.utsa.tech/</a></li>
    <li id="LaYP">API: <a href="https://m-konstellation.api.utsa.tech/" target="_blank">https://m-konstellation.api.utsa.tech/</a></li>
    <li id="jHeg">Explorer: <a href="https://exp.utsa.tech/konstellation/staking" target="_blank">https://exp.utsa.tech/konstellation/staking</a></li>
  </ul>
  <p id="bAc8"></p>
  <hr />
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre data-lang="bash" id="Rn4x"># проверяем статус prevotes/precommits
FOLDER=.knstld

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

PORT=&lt;ввести свой порт&gt;

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;</pre>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="CJUj"><strong>UPD 🕊 (Высота обновления: )</strong></p>
    <pre data-lang="bash" id="lngR">
# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!</pre>
  </section>
  <p id="Mmis"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="6FkE">Подготовка сервера</h2>
  </section>
  <pre data-lang="bash" id="sQKa"># обновляем репозитории
apt update &amp;&amp; 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</pre>
  <p id="M4EP"><strong>File2Ban</strong> - подробнее <a href="https://www.linuxshop.ru/articles/a26710798-nastroyka_fail2ban" target="_blank">здесь</a></p>
  <pre data-lang="bash" id="aMau"># устанавливаем и копируем конфиг, который будет иметь больший приоритет
apt install fail2ban -y &amp;&amp; \
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local &amp;&amp; \
nano /etc/fail2ban/jail.local
# раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 &lt;ip&gt;
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 &amp;&amp; systemctl disable fail2ban</pre>
  <p id="eKUj"><strong>Устанавливаем Go</strong></p>
  <pre data-lang="bash" id="CTWw">ver=&quot;1.22.3&quot; &amp;&amp; \
wget &quot;https://golang.org/dl/go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
sudo rm -rf /usr/local/go &amp;&amp; \
sudo tar -C /usr/local -xzf &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
rm &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
echo &quot;export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin&quot; &gt;&gt; $HOME/.bash_profile &amp;&amp; \
source $HOME/.bash_profile &amp;&amp; \
go version</pre>
  <p id="EOYx"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1b58">Новая установка ноды</h2>
  </section>
  <section>
    <p id="z8pZ"><u><em><strong>ВАЖНО </strong>— в командах ниже все, что в <strong>&lt;&gt;</strong> меняем на свое значение и убираем сами<strong> &lt;&gt;</strong></em></u></p>
  </section>
  <p id="sjXD"><strong>Устанавливаем бинарники</strong></p>
  <pre id="4rov" data-lang="bash">git clone https://github.com/konstellation/konstellation &amp;&amp; cd konstellation
git checkout v0.6.2
make build
mv $HOME/konstellation/build/knstld $HOME/go/bin/knstld</pre>
  <pre data-lang="bash" id="5NJc">knstld version --long | grep -e version -e commit
# version: 0.6.2
# commit: 371486832893d7dc99a68ee333ca4d2e2c375f9e</pre>
  <p id="vp48"><strong>Инициализируем ноду, чтобы создать необходимые файлы конфигурации</strong></p>
  <pre data-lang="bash" id="gydf">knstld init UTSA_guide --chain-id darchub</pre>
  <p id="Qrh4"><strong>Скачиваем Genesis</strong></p>
  <pre data-lang="bash" id="DdAQ">wget -O $HOME/.knstld/config/genesis.json &quot;https://share106-7.utsa.tech/konstellation/genesis.json&quot;

# Проверим генезис
sha256sum ~/.knstld/config/genesis.json
# f0e98b0749801ba0b2ea5f1eeff72df847ec78bde9b8ff9ca114bedc8afd8763</pre>
  <p id="Tbxh"><strong>Проверяем, что состояние валидатора на начальном этапе</strong></p>
  <pre data-lang="bash" id="P4wu">cd &amp;&amp; cat .knstld/data/priv_validator_state.json
{
  &quot;height&quot;: &quot;0&quot;,
  &quot;round&quot;: 0,
  &quot;step&quot;: 0
}

# если нет, то выполняем команду
knstld unsafe-reset-all --home $HOME/.knstld</pre>
  <p id="4cmW"><strong>Скачиваем Addr book</strong></p>
  <pre data-lang="bash" id="qKeK">wget -O $HOME/.knstld/config/addrbook.json &quot;https://share106-7.utsa.tech/konstellation/addrbook.json&quot;</pre>
  <p id="mLrA"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="kBZ8">Настраиваем конфигурацию ноды</h2>
  </section>
  <pre data-lang="bash" id="Xwmm"># правим конфиг, благодаря чему мы можем больше не использовать флаг chain-id для каждой команды CLI в client.toml
knstld config chain-id darchub

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

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

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

peers=&quot;3bf94a04c111992065810fe9e85d9adb5132b824@65.108.199.222:26626,e5e1f21957a07f623fb310737205b5b6cb1fce42@8.52.201.252:60756&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.knstld/config/config.toml
seeds=&quot;&quot;
sed -i.bak -e &quot;s/^seeds =.*/seeds = \&quot;$seeds\&quot;/&quot; $HOME/.knstld/config/config.toml

# увеличиваем количество входящих и исходящих пиров для подключения, за исключением постоянных пиров в config.toml
sed -i &#x27;s/max_num_inbound_peers =.*/max_num_inbound_peers = 40/g&#x27; $HOME/.knstld/config/config.toml
sed -i &#x27;s/max_num_outbound_peers =.*/max_num_outbound_peers = 10/g&#x27; $HOME/.knstld/config/config.toml

# настраиваем фильтрацию &quot;плохих&quot; peers
sed -i -e &quot;s/^filter_peers *=.*/filter_peers = \&quot;true\&quot;/&quot; $HOME/.knstld/config/config.toml</pre>
  <p id="QI2Z"><strong>(ОПЦИОНАЛЬНО) Настраиваем прунинг одной командой в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="3mtZ">pruning=&quot;nothing&quot;
pruning_keep_recent=&quot;0&quot;
pruning_interval=&quot;0&quot;
sed -i -e &quot;s/^pruning *=.*/pruning = \&quot;$pruning\&quot;/&quot; $HOME/.knstld/config/app.toml
sed -i -e &quot;s/^pruning-keep-recent *=.*/pruning-keep-recent = \&quot;$pruning_keep_recent\&quot;/&quot; $HOME/.knstld/config/app.toml
sed -i -e &quot;s/^pruning-interval *=.*/pruning-interval = \&quot;$pruning_interval\&quot;/&quot; $HOME/.knstld/config/app.toml</pre>
  <p id="dGeO"><strong>(ОПЦИОНАЛЬНО) Выкл индексацию в<code>config.toml</code></strong></p>
  <pre data-lang="bash" id="bXI0">indexer=&quot;null&quot;
sed -i -e &quot;s/^indexer *=.*/indexer = \&quot;$indexer\&quot;/&quot; $HOME/.knstld/config/config.toml</pre>
  <p id="UDzq"><strong>(ОПЦИОНАЛЬНО) Вкл/выкл снэпшоты в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="KPhI">snapshot_interval=1000
sed -i.bak -e &quot;s/^snapshot-interval *=.*/snapshot-interval = \&quot;$snapshot_interval\&quot;/&quot; ~/.knstld/config/app.toml</pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="dNci"><strong>(ОПЦИОНАЛЬНО) Смена портов </strong>#для 2 ноды</p>
    <pre data-lang="bash" id="dFln"># config.toml
sed -i.bak -e &quot;s%^proxy_app = \&quot;tcp://127.0.0.1:26658\&quot;%proxy_app = \&quot;tcp://127.0.0.1:36658\&quot;%; s%^laddr = \&quot;tcp://127.0.0.1:26657\&quot;%laddr = \&quot;tcp://127.0.0.1:36657\&quot;%; s%^pprof_laddr = \&quot;localhost:6060\&quot;%pprof_laddr = \&quot;localhost:6061\&quot;%; s%^laddr = \&quot;tcp://0.0.0.0:26656\&quot;%laddr = \&quot;tcp://0.0.0.0:36656\&quot;%; s%^prometheus_listen_addr = \&quot;:26660\&quot;%prometheus_listen_addr = \&quot;:36660\&quot;%&quot; $HOME/.knstld/config/config.toml

# app.toml
sed -i.bak -e &quot;s%^address = \&quot;0.0.0.0:9090\&quot;%address = \&quot;0.0.0.0:9190\&quot;%; s%^address = \&quot;0.0.0.0:9091\&quot;%address = \&quot;0.0.0.0:9191\&quot;%&quot; $HOME/.knstld/config/app.toml

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

external_address=$(wget -qO- eth0.me)
sed -i.bak -e &quot;s/^external_address *=.*/external_address = \&quot;$external_address:36656\&quot;/&quot; $HOME/.knstld/config/config.toml</pre>
    <p id="yDul">Подробнее о смене портов <a href="/@lesnik13utsa/yYp5bzk4sho">здесь</a></p>
  </section>
  <p id="QHnR"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="N1Bw"><strong>Snapshot</strong></h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="yPUl" data-align="center">time: <strong>every 7 days</strong> <strong>| </strong>indexer:<strong> kv</strong></p>
    <p id="SP72" data-align="center">🌐 <a href="https://share106-7.utsa.tech/konstellation/" target="_blank"><strong>https://share106-7.utsa.tech/konstellation/</strong></a></p>
    <pre data-lang="bash" id="bJcp">cd $HOME
systemctl stop knstld

cp $HOME/.knstld/data/priv_validator_state.json $HOME/.knstld/priv_validator_state.json.backup

# удаляем старую базу данных
rm -rf $HOME/.knstld/data 

# скачиваем snapshot
curl -o - -L https://share106-7.utsa.tech/konstellation/konstellation_mainnet.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.knstld/

mv $HOME/.knstld/priv_validator_state.json.backup $HOME/.knstld/data/priv_validator_state.json

systemctl restart knstld &amp;&amp; journalctl -u knstld -f -o cat</pre>
  </section>
  <p id="76hd"><strong>Создаем сервисный файл</strong></p>
  <pre data-lang="bash" id="baVL">tee /etc/systemd/system/knstld.service &gt; /dev/null &lt;&lt;EOF
[Unit]
Description=knstld
After=network-online.target

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

[Install]
WantedBy=multi-user.target
EOF</pre>
  <pre data-lang="bash" id="dpCI">systemctl daemon-reload
systemctl enable knstld
systemctl restart knstld &amp;&amp; journalctl -u knstld -f -o cat</pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="7iVh"><strong>Если после старта нода долго не может подцепиться к пирам, то ищем новые пиры или просим addrbook.json в дискорд</strong></p>
    <pre data-lang="bash" id="MJtd"># стопаем ноду и сбрасываем данные
systemctl stop knstld
knstld tendermint unsafe-reset-all --home ~/.knstld/ --keep-addr-book

# перезагружаем ноду
systemctl restart knstld &amp;&amp; journalctl -u knstld -f -o cat</pre>
  </section>
  <p id="P3nc"><strong>Создаем или восстанавливаем кошелек и сохраняем вывод</strong></p>
  <pre data-lang="bash" id="GMmm"># создать кошелек
knstld keys add &lt;name_wallet&gt; --keyring-backend os

# восстановить кошелек (после команды вставить seed)
knstld keys add &lt;name_wallet&gt; --recover --keyring-backend os

# подключить кошелек ledger
knstld keys add &lt;name_wallet&gt; --ledger </pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="YLko"><strong>Не забываем сохранить seed !!!</strong></p>
  </section>
  <p id="gL3M"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="sBaD"><strong>Создаем валидатора</strong></h2>
  </section>
  <pre data-lang="bash" id="JXea">knstld tx staking create-validator \
  --amount=1000000udarc \
  --pubkey=$(knstld tendermint show-validator) \
  --moniker=&quot;&lt;moniker&gt;&quot; \
  --identity=&quot;&lt;identity&gt;&quot; \
  --website=&quot;&lt;website&gt;&quot; \
  --details=&quot;&lt;details&gt;&quot; \
  --security-contact=&quot;&lt;contact&gt;&quot; \
  --chain-id=&quot;darchub&quot; \
  --commission-rate=&quot;0.10&quot; \
  --commission-max-rate=&quot;0.20&quot; \
  --commission-max-change-rate=&quot;0.01&quot; \
  --min-self-delegation=&quot;1&quot; \
  --fees=&quot;500udarc&quot; \
  --from=&lt;wallet_name&gt;</pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="kj2D"><strong>Не забываем сохранить priv_validator_key.json !!!</strong></p>
    <p id="VBzA">Подробнее о создании/редактировании валидатора можно почитать <a href="/@lesnik13utsa/RPLJpWXIoDQ">здесь</a></p>
  </section>
  <p id="DEPU"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1eUH">Полезные команды</h2>
  </section>
  <p id="Fuvu"><strong>Информация</strong></p>
  <pre data-lang="bash" id="W5vn"># проверить блоки
knstld status 2&gt;&amp;1 | jq .&quot;SyncInfo&quot;.&quot;latest_block_height&quot;

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

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

# проверить баланс
knstld q bank balances &lt;address&gt;

# проверить pubkey валидатора
knstld tendermint show-validator

# проверить валидатора
knstld query staking validator &lt;valoper_address&gt;
knstld query staking validators --limit 1000000 -o json | jq &#x27;.validators[] | select(.description.moniker==&quot;&lt;name_moniker&gt;&quot;)&#x27; | jq

# проверка информации по TX_HASH
knstld query tx &lt;TX_HASH&gt;

# параметры сети
knstld q staking params
knstld q slashing params

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

# проверить slashing
knstld q slashing signing-info $(knstld tendermint show-validator)

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

# просмотр активного сета
knstld q staking validators -o json --limit=1000 \
| jq &#x27;.validators[] | select(.status==&quot;BOND_STATUS_BONDED&quot;)&#x27; \
| jq -r &#x27;.tokens + &quot; - &quot; + .description.moniker&#x27; \
| sort -gr | nl

# просмотр неактивного сета
knstld q staking validators -o json --limit=1000 \
| jq &#x27;.validators[] | select(.status==&quot;BOND_STATUS_UNBONDED&quot;)&#x27; \
| jq -r &#x27;.tokens + &quot; - &quot; + .description.moniker&#x27; \
| sort -gr | nl</pre>
  <p id="nXYz"><strong>Транзакции</strong></p>
  <pre data-lang="bash" id="fvs6"># собрать комиссионные + реварды
knstld tx distribution withdraw-rewards &lt;valoper_address&gt; --from &lt;name_wallet&gt; --fees 5000udarc --commission -y

# заделегировать себе в стейк еще (так отправляется 1 монетa)
knstld tx staking delegate &lt;valoper_address&gt; 1000000udarc --from &lt;name_wallet&gt; --fees 5000udarc -y

# ределегирование на другого валидатора
knstld tx staking redelegate &lt;src-validator-addr&gt; &lt;dst-validator-addr&gt; 1000000udarc --from &lt;name_wallet&gt; --fees 5000udarc -y

# unbond 
knstld tx staking unbond &lt;addr_valoper&gt; 1000000udarc --from &lt;name_wallet&gt; --fees 5000udarc -y

# отправить монеты на другой адрес
knstld tx bank send &lt;name_wallet&gt; &lt;address&gt; 1000000udarc --fees 5000udarc -y

# выбраться из тюрьмы
knstld tx slashing unjail --from &lt;name_wallet&gt; --fees 5000udarc -y</pre>
  <p id="zl2g"><strong>Работа с кошельками</strong></p>
  <pre data-lang="bash" id="AUE1"># вывести список кошельков
knstld keys list

# показать ключ аккаунта
knstld keys show &lt;name_wallet&gt; --bech acc

# показать ключ валидатора
knstld keys show &lt;name_wallet&gt; --bech val

# показать ключ консенсуса
knstld keys show &lt;name_wallet&gt; --bech cons

# запрос учетной записи
knstld q auth account $(knstld keys show &lt;name_wallet&gt; -a) -o text

# удалить кошелек
knstld keys delete &lt;name_wallet&gt;</pre>
  <p id="Qfld"><strong>Удалить ноду</strong></p>
  <pre data-lang="bash" id="wjjr">systemctl stop knstld &amp;&amp; \
systemctl disable knstld &amp;&amp; \
rm /etc/systemd/system/knstld.service &amp;&amp; \
systemctl daemon-reload &amp;&amp; \
cd $HOME &amp;&amp; \
rm -rf .knstld konstellation &amp;&amp; \
rm -rf $(which knstld)</pre>
  <p id="fYh0"><strong>ГОВЕРНАНС</strong></p>
  <pre data-lang="bash" id="OSZu"># список proposals
knstld q gov proposals

# посмотреть результат голосования
knstld q gov proposals --voter &lt;ADDRESS&gt;

# проголосовать за предложение 
knstld tx gov vote 1 yes --from &lt;name_wallet&gt; --fees 5000udarc

# внести депозит в предложение
knstld tx gov deposit 1 1000000udarc --from &lt;name_wallet&gt; --fees 5000udarc

# создать предложение
knstld tx gov submit-proposal --title=&quot;Randomly reward&quot; --description=&quot;Reward 10 testnet participants who completed more than 3 tasks&quot; --type=&quot;Text&quot; --deposit=&quot;11000000grain&quot; --from=&lt;name_wallet&gt; --fees 5000udarc</pre>
  <p id="chat-messages-932182862663389245"><strong>Peers and RPC</strong></p>
  <pre data-lang="bash" id="Bros">FOLDER=.knstld

# узнать свой peer
PORTR=$(grep -A 3 &quot;\[p2p\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;) &amp;&amp; \
echo $(knstld tendermint show-node-id)@$(wget -qO- eth0.me)$PORTR

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

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

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

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;

# 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])</pre>
  <figure id="LkHi" class="m_original" data-caption-align="center">
    <img src="https://img3.teletype.in/files/e9/28/e92895ca-f71d-497c-9fd2-2e7eeedd5303.png" width="278" />
    <figcaption><strong>Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq</strong></figcaption>
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lesnik13utsa/Ol_ULENy7v0</guid><link>https://teletype.in/@lesnik13utsa/Ol_ULENy7v0?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa</link><comments>https://teletype.in/@lesnik13utsa/Ol_ULENy7v0?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lesnik13utsa#comments</comments><dc:creator>lesnik13utsa</dc:creator><title>Prysm</title><pubDate>Mon, 14 Oct 2024 09:20:18 GMT</pubDate><category>COSMOS</category><description><![CDATA[<img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png"></img>UTSA]]></description><content:encoded><![CDATA[
  <figure id="IsFB" class="m_original">
    <img src="https://img3.teletype.in/files/ac/6e/ac6e1e0d-defd-49a8-a013-982f0a502db0.png" width="820" />
  </figure>
  <p id="head" data-align="center">🪓 <a href="https://t.me/utsa_channel" target="_blank">Telegram канал UTSA</a> 🪓 <a href="https://t.me/utsa_chat" target="_blank">Telegram чат UTSA</a></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="D2wo" data-align="center"><strong>Web <a href="https://discord.gg/prysmnetwork" target="_blank">Discord</a> <a href="https://github.com/kleomedes/prysm" target="_blank">Github</a></strong></p>
  </section>
  <p id="sHgA"><u><strong>Testnet details</strong></u></p>
  <ul id="2h1F">
    <li id="ED8t">Network Chain ID: <code>prysm-devnet-1</code></li>
    <li id="8tyv">Denom stake: <code>uprysm</code></li>
    <li id="SZWc">Binary: <code>prysmd</code></li>
    <li id="OnH1">Working directory: <code>.prysm</code></li>
    <li id="AdcU">RPC: <a href="https://t-prysm.rpc.utsa.tech/" target="_blank">https://t-prysm.rpc.utsa.tech/</a></li>
    <li id="LaYP">API: <a href="https://t-prysm.api.utsa.tech/" target="_blank">https://t-prysm.api.utsa.tech/</a></li>
    <li id="jHeg">Explorer: <a href="https://exp.utsa.tech/prysm-test/staking" target="_blank">https://exp.utsa.tech/prysm-test/staking</a></li>
    <li id="kirb">Docs: </li>
    <li id="bAc8">Faucet: <a href="https://prysm-devnet-faucet.kleomedes.network/" target="_blank">https://prysm-devnet-faucet.kleomedes.network/</a></li>
  </ul>
  <hr />
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre data-lang="bash" id="SMcw"># проверяем статус prevotes/precommits
FOLDER=.prysm

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

PORT=&lt;ввести свой порт&gt;

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;</pre>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="CJUj"><strong>UPD 🕊  (Высота обновления: )</strong></p>
    <pre data-lang="bash" id="oF0K">
# ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!!
</pre>
  </section>
  <p id="Q4zr"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="6FkE">Подготовка сервера</h2>
  </section>
  <pre data-lang="bash" id="Qh7e"># обновляем репозитории
apt update &amp;&amp; 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</pre>
  <p id="M4EP"><strong>File2Ban</strong> - подробнее <a href="https://www.linuxshop.ru/articles/a26710798-nastroyka_fail2ban" target="_blank">здесь</a></p>
  <pre data-lang="bash" id="AQFq"># устанавливаем и копируем конфиг, который будет иметь больший приоритет
apt install fail2ban -y &amp;&amp; \
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local &amp;&amp; \
nano /etc/fail2ban/jail.local
# раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 &lt;ip&gt;
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 &amp;&amp; systemctl disable fail2ban</pre>
  <p id="eKUj"><strong>Устанавливаем Go ОДНОЙ КОМАНДОЙ</strong></p>
  <pre data-lang="bash" id="eJEE">ver=&quot;1.21.3&quot; &amp;&amp; \
wget &quot;https://golang.org/dl/go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
sudo rm -rf /usr/local/go &amp;&amp; \
sudo tar -C /usr/local -xzf &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
rm &quot;go$ver.linux-amd64.tar.gz&quot; &amp;&amp; \
echo &quot;export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin&quot; &gt;&gt; $HOME/.bash_profile &amp;&amp; \
source $HOME/.bash_profile &amp;&amp; \
go version</pre>
  <p id="I6hI"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1b58">Новая установка ноды</h2>
  </section>
  <section>
    <p id="z8pZ"><u><em><strong>ВАЖНО </strong>— в командах ниже все, что в <strong>&lt;&gt;</strong> меняем на свое значение и убираем сами<strong> &lt;&gt;</strong></em></u></p>
  </section>
  <p id="sjXD"><strong>Устанавливаем бинарники</strong></p>
  <pre id="1zL4" data-lang="bash">git clone https://github.com/kleomedes/prysm &amp;&amp; cd prysm
git checkout v0.1.0-devnet
make install</pre>
  <pre data-lang="bash" id="G8CV">prysmd version --long | grep -e version -e commit
# version: 0.1.0-devnet
# commit: f48a40b9541508c19b037e1a659c7ab048a1946d</pre>
  <p id="vp48"><strong>Инициализируем ноду, чтобы создать необходимые файлы конфигурации</strong></p>
  <pre data-lang="bash" id="WouO">prysmd init UTSA_guide --chain-id prysm-devnet-1</pre>
  <p id="Qrh4"><strong>Скачиваем Genesis</strong></p>
  <pre data-lang="bash" id="wPTh">wget -O $HOME/.prysm/config/genesis.json &quot;https://snapshots.polkachu.com/testnet-genesis/prysm/genesis.json&quot;

# Проверим генезис
sha256sum ~/.prysm/config/genesis.json
# afe3fae047851409fa4e8bbb321a723fb4b2dc783bb5079c716bdf7df336e0c4</pre>
  <p id="Tbxh"><strong>Проверяем, что состояние валидатора на начальном этапе</strong></p>
  <pre data-lang="bash" id="oycT">cd &amp;&amp; cat .prysm/data/priv_validator_state.json
{
  &quot;height&quot;: &quot;0&quot;,
  &quot;round&quot;: 0,
  &quot;step&quot;: 0
}

# если нет, то выполняем команду
prysmd unsafe-reset-all --home $HOME/.prysm</pre>
  <p id="4cmW"><strong>Скачиваем Addr book</strong></p>
  <pre data-lang="bash" id="IiIk">wget -O $HOME/.prysm/config/addrbook.json &quot;https://share101.utsa.tech/prysm/addrbook.json&quot;</pre>
  <p id="ud3E"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="kBZ8">Настраиваем конфигурацию ноды</h2>
  </section>
  <pre data-lang="bash" id="ZcCQ"># правим конфиг, благодаря чему мы можем больше не использовать флаг chain-id для каждой команды CLI в client.toml
prysmd config set client chain-id prysm-devnet-1

# при необходимости настраиваем keyring-backend в client.toml 
prysmd config set client keyring-backend os

# настраиваем минимальную цену за газ в app.toml
sed -i.bak -e &quot;s/^minimum-gas-prices *=.*/minimum-gas-prices = \&quot;0.025uprysm\&quot;/;&quot; ~/.prysm/config/app.toml

# добавляем seeds/bpeers/peers в config.toml
external_address=$(wget -qO- eth0.me)
sed -i.bak -e &quot;s/^external_address *=.*/external_address = \&quot;$external_address:26656\&quot;/&quot; $HOME/.prysm/config/config.toml

peers=&quot;&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.prysm/config/config.toml
seeds=&quot;ade4d8bc8cbe014af6ebdf3cb7b1e9ad36f412c0@testnet-seeds.polkachu.com:29856&quot;
sed -i.bak -e &quot;s/^seeds =.*/seeds = \&quot;$seeds\&quot;/&quot; $HOME/.prysm/config/config.toml

# увеличиваем количество входящих и исходящих пиров для подключения, за исключением постоянных пиров в config.toml
sed -i &#x27;s/max_num_inbound_peers =.*/max_num_inbound_peers = 40/g&#x27; $HOME/.prysm/config/config.toml
sed -i &#x27;s/max_num_outbound_peers =.*/max_num_outbound_peers = 10/g&#x27; $HOME/.prysm/config/config.toml

# настраиваем фильтрацию &quot;плохих&quot; peers
sed -i -e &quot;s/^filter_peers *=.*/filter_peers = \&quot;true\&quot;/&quot; $HOME/.prysm/config/config.toml</pre>
  <p id="QI2Z"><strong>(ОПЦИОНАЛЬНО) Настраиваем прунинг одной командой в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="7pAi">pruning=&quot;custom&quot;
pruning_keep_recent=&quot;1000&quot;
pruning_interval=&quot;10&quot;
sed -i -e &quot;s/^pruning *=.*/pruning = \&quot;$pruning\&quot;/&quot; $HOME/.prysm/config/app.toml
sed -i -e &quot;s/^pruning-keep-recent *=.*/pruning-keep-recent = \&quot;$pruning_keep_recent\&quot;/&quot; $HOME/.prysm/config/app.toml
sed -i -e &quot;s/^pruning-interval *=.*/pruning-interval = \&quot;$pruning_interval\&quot;/&quot; $HOME/.prysm/config/app.toml</pre>
  <p id="dGeO"><strong>(ОПЦИОНАЛЬНО) Выкл индексацию в<code>config.toml</code></strong></p>
  <pre data-lang="bash" id="Fn2D">indexer=&quot;null&quot;
sed -i -e &quot;s/^indexer *=.*/indexer = \&quot;$indexer\&quot;/&quot; $HOME/.prysm/config/config.toml</pre>
  <p id="UDzq"><strong>(ОПЦИОНАЛЬНО) Вкл/выкл снэпшоты в<code>app.toml</code></strong></p>
  <pre data-lang="bash" id="6gex">snapshot_interval=1000
sed -i.bak -e &quot;s/^snapshot-interval *=.*/snapshot-interval = \&quot;$snapshot_interval\&quot;/&quot; ~/.prysm/config/app.toml</pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="dNci"><strong>(ОПЦИОНАЛЬНО) Смена портов </strong>#для 2 ноды</p>
    <pre data-lang="bash" id="HCe9"># config.toml
sed -i.bak -e &quot;s%^proxy_app = \&quot;tcp://127.0.0.1:26658\&quot;%proxy_app = \&quot;tcp://127.0.0.1:36658\&quot;%; s%^laddr = \&quot;tcp://127.0.0.1:26657\&quot;%laddr = \&quot;tcp://127.0.0.1:36657\&quot;%; s%^pprof_laddr = \&quot;localhost:6060\&quot;%pprof_laddr = \&quot;localhost:6061\&quot;%; s%^laddr = \&quot;tcp://0.0.0.0:26656\&quot;%laddr = \&quot;tcp://0.0.0.0:36656\&quot;%; s%^prometheus_listen_addr = \&quot;:26660\&quot;%prometheus_listen_addr = \&quot;:36660\&quot;%&quot; $HOME/.prysm/config/config.toml

# app.toml
sed -i.bak -e &quot;s%^address = \&quot;0.0.0.0:9090\&quot;%address = \&quot;0.0.0.0:9190\&quot;%; s%^address = \&quot;0.0.0.0:9091\&quot;%address = \&quot;0.0.0.0:9191\&quot;%&quot; $HOME/.prysm/config/app.toml

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

external_address=$(wget -qO- eth0.me)
sed -i.bak -e &quot;s/^external_address *=.*/external_address = \&quot;$external_address:36656\&quot;/&quot; $HOME/.prysm/config/config.toml</pre>
    <p id="yDul">Подробнее о смене портов <a href="/@lesnik13utsa/yYp5bzk4sho">здесь</a></p>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Kq3m"><strong>(ОПЦИОНАЛЬНО) State Sync</strong></p>
    <pre data-lang="bash" id="dhWh"># при необходимости скачиваем wasm
curl -L https://share101.utsa.tech/prysm/wasm-prysm.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.prysm --strip-components 2</pre>
    <pre data-lang="bash" id="xxQF"># добавляем пир
peers=&quot;88ad3a3b9b981f0bbb52d5c996d0f7e1aa9426fa@65.108.206.118:61256&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$peers\&quot;/&quot; $HOME/.prysm/config/config.toml</pre>
    <pre data-lang="bash" id="hoBK">SNAP_RPC=https://t-prysm.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 &quot;$SNAP_RPC/block?height=$BLOCK_HEIGHT&quot; | jq -r .result.block_id.hash)

echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH

sed -i.bak -E &quot;s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\&quot;$SNAP_RPC,$SNAP_RPC\&quot;| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\&quot;$TRUST_HASH\&quot;| ; \
s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\&quot;\&quot;|&quot; $HOME/.prysm/config/config.toml</pre>
  </section>
  <p id="76hd"><strong>Создаем сервисный файл</strong></p>
  <pre data-lang="bash" id="Prfb">tee /etc/systemd/system/prysmd.service &gt; /dev/null &lt;&lt;EOF
[Unit]
Description=prysmd
After=network-online.target

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

[Install]
WantedBy=multi-user.target
EOF</pre>
  <pre data-lang="bash" id="xJJd">systemctl daemon-reload
systemctl enable prysmd
systemctl restart prysmd &amp;&amp; journalctl -u prysmd -f -o cat</pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="7iVh"><strong>Если после старта нода долго не может подцепиться к пирам, то ищем новые пиры или просим addrbook.json в дискорд</strong></p>
    <pre data-lang="bash" id="Zrux"># стопаем ноду и сбрасываем данные
systemctl stop prysmd
prysmd tendermint unsafe-reset-all --home ~/.prysm/ --keep-addr-book

# перезагружаем ноду
systemctl restart prysmd &amp;&amp; journalctl -u prysmd -f -o cat</pre>
  </section>
  <p id="P3nc"><strong>Создаем или восстанавливаем кошелек и сохраняем вывод</strong></p>
  <pre data-lang="bash" id="Unlu"># создать кошелек
prysmd keys add &lt;name_wallet&gt; --keyring-backend os

# восстановить кошелек (после команды вставить seed)
prysmd keys add &lt;name_wallet&gt; --recover --keyring-backend os

# подключить кошелек ledger
prysmd keys add &lt;name_wallet&gt; --ledger </pre>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="YLko"><strong>Не забываем сохранить seed !!!</strong></p>
  </section>
  <p id="Fq5F"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="sBaD"><strong>Создаем валидатора</strong></h2>
  </section>
  <p id="TPh0"><strong>1. Получаем свой pubkey</strong></p>
  <pre data-lang="bash" id="toTP">prysmd comet show-validator
# {&quot;@type&quot;:&quot;/cosmos.crypto.ed25519.PubKey&quot;,&quot;key&quot;:&quot;ZXONS7NNjLWH4HePBOoHKDAYeLXQO5iUwpCRQSi1poI=&quot;}</pre>
  <p id="BbIv"><strong>2. Создаем validator.json</strong></p>
  <pre data-lang="bash" id="RkCj">nano $HOME/.prysm/validator.json</pre>
  <p id="Iync"><strong>3. Вставляем наш конфиг</strong></p>
  <pre data-lang="bash" id="ErXT">{
  &quot;pubkey&quot;: {#pubkey},
  &quot;amount&quot;: &quot;1000000uprysm&quot;,
  &quot;moniker&quot;: &quot;moniker&quot;,
  &quot;identity&quot;: &quot;&quot;,
  &quot;website&quot;: &quot;&quot;,
  &quot;security&quot;: &quot;&quot;,
  &quot;details&quot;: &quot;&quot;,
  &quot;commission-rate&quot;: &quot;0.05&quot;,
  &quot;commission-max-rate&quot;: &quot;0.25&quot;,
  &quot;commission-max-change-rate&quot;: &quot;0.05&quot;,
  &quot;min-self-delegation&quot;: &quot;1&quot;
}</pre>
  <p id="Q2un"><strong>4. Отправляем транзакцию</strong></p>
  <pre data-lang="bash" id="5mxj">prysmd tx staking create-validator $HOME/.prysm/validator.json \
    --from=&lt;key-name&gt; \
    --chain-id=prysm-devnet-1 \
    --fees 500uprysm</pre>
  <p id="BuYM"></p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="kj2D"><strong>Не забываем сохранить priv_validator_key.json !!!</strong></p>
    <p id="VBzA">Подробнее о создании/редактировании валидатора можно почитать <a href="/@lesnik13utsa/RPLJpWXIoDQ">здесь</a></p>
  </section>
  <p id="Bd0f"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="1eUH">Полезные команды</h2>
  </section>
  <p id="Fuvu"><strong>Информация</strong></p>
  <pre data-lang="bash" id="0kwQ"># проверить блоки
prysmd status 2&gt;&amp;1 | jq .&quot;SyncInfo&quot;.&quot;latest_block_height&quot;

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

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

# проверить баланс
prysmd q bank balances &lt;address&gt;

# проверить pubkey валидатора
prysmd tendermint show-validator

# проверить валидатора
prysmd query staking validator &lt;valoper_address&gt;
prysmd query staking validators --limit 1000000 -o json | jq &#x27;.validators[] | select(.description.moniker==&quot;&lt;name_moniker&gt;&quot;)&#x27; | jq

# проверка информации по TX_HASH
prysmd query tx &lt;TX_HASH&gt;

# параметры сети
prysmd q staking params
prysmd q slashing params

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

# проверить slashing
prysmd q slashing signing-info $(prysmd tendermint show-validator)

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

# просмотр активного сета
prysmd q staking validators -o json --limit=1000 \
| jq &#x27;.validators[] | select(.status==&quot;BOND_STATUS_BONDED&quot;)&#x27; \
| jq -r &#x27;.tokens + &quot; - &quot; + .description.moniker&#x27; \
| sort -gr | nl

# просмотр неактивного сета
prysmd q staking validators -o json --limit=1000 \
| jq &#x27;.validators[] | select(.status==&quot;BOND_STATUS_UNBONDED&quot;)&#x27; \
| jq -r &#x27;.tokens + &quot; - &quot; + .description.moniker&#x27; \
| sort -gr | nl</pre>
  <p id="nXYz"><strong>Транзакции</strong></p>
  <pre data-lang="bash" id="5tlE"># собрать комиссионные + реварды
prysmd tx distribution withdraw-rewards &lt;valoper_address&gt; --from &lt;name_wallet&gt; --fees 5000uprysm --commission -y

# заделегировать себе в стейк еще (так отправляется 1 монетa)
prysmd tx staking delegate &lt;valoper_address&gt; 1000000uprysm --from &lt;name_wallet&gt; --fees 5000uprysm -y

# ределегирование на другого валидатора
prysmd tx staking redelegate &lt;src-validator-addr&gt; &lt;dst-validator-addr&gt; 1000000uprysm --from &lt;name_wallet&gt; --fees 5000uprysm -y

# unbond 
prysmd tx staking unbond &lt;addr_valoper&gt; 1000000uprysm --from &lt;name_wallet&gt; --fees 5000uprysm -y

# отправить монеты на другой адрес
prysmd tx bank send &lt;name_wallet&gt; &lt;address&gt; 1000000uprysm --fees 5000uprysm -y

# выбраться из тюрьмы
prysmd tx slashing unjail --from &lt;name_wallet&gt; --fees 5000uprysm -y</pre>
  <p id="zl2g"><strong>Работа с кошельками</strong></p>
  <pre data-lang="bash" id="WxXj"># вывести список кошельков
prysmd keys list

# показать ключ аккаунта
prysmd keys show &lt;name_wallet&gt; --bech acc

# показать ключ валидатора
prysmd keys show &lt;name_wallet&gt; --bech val

# показать ключ консенсуса
prysmd keys show &lt;name_wallet&gt; --bech cons

# запрос учетной записи
prysmd q auth account $(prysmd keys show &lt;name_wallet&gt; -a) -o text

# удалить кошелек
prysmd keys delete &lt;name_wallet&gt;</pre>
  <p id="Qfld"><strong>Удалить ноду</strong></p>
  <pre data-lang="bash" id="1m3f">systemctl stop prysmd &amp;&amp; \
systemctl disable prysmd &amp;&amp; \
rm /etc/systemd/system/prysmd.service &amp;&amp; \
systemctl daemon-reload &amp;&amp; \
cd $HOME &amp;&amp; \
rm -rf .prysm prysm &amp;&amp; \
rm -rf $(which prysmd)</pre>
  <p id="fYh0"><strong>ГОВЕРНАНС</strong></p>
  <pre data-lang="bash" id="6bQe"># список proposals
prysmd q gov proposals

# посмотреть результат голосования
prysmd q gov proposals --voter &lt;ADDRESS&gt;

# проголосовать за предложение 
prysmd tx gov vote 1 yes --from &lt;name_wallet&gt; --fees 5000uprysm

# внести депозит в предложение
prysmd tx gov deposit 1 1000000uprysm --from &lt;name_wallet&gt; --fees 5000uprysm

# создать предложение
prysmd tx gov submit-proposal --title=&quot;Randomly reward&quot; --description=&quot;Reward 10 testnet participants who completed more than 3 tasks&quot; --type=&quot;Text&quot; --deposit=&quot;11000000grain&quot; --from=&lt;name_wallet&gt; --fees 5000uprysm</pre>
  <p id="chat-messages-932182862663389245"><strong>Peers and RPC</strong></p>
  <pre data-lang="bash" id="8ebC">FOLDER=.prysm

# узнать свой peer
PORTR=$(grep -A 3 &quot;\[p2p\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;) &amp;&amp; \
echo $(prysmd tendermint show-node-id)@$(wget -qO- eth0.me)$PORTR

# узнать порт RPC
echo -e &quot;\033[0;32m$(grep -A 3 &quot;\[rpc\]&quot; ~/$FOLDER/config/config.toml | egrep -o &quot;:[0-9]+&quot;)\033[0m&quot;

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

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

# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].prevotes_bit_array&#x27; &amp;&amp; \
curl -s localhost:$PORT/consensus_state | jq &#x27;.result.round_state.height_vote_set[0].precommits_bit_array&#x27;

# 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])</pre>
  <figure id="6uUF" class="m_original" data-caption-align="center">
    <img src="https://img3.teletype.in/files/e9/28/e92895ca-f71d-497c-9fd2-2e7eeedd5303.png" width="278" />
    <figcaption><strong>Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq</strong></figcaption>
  </figure>

]]></content:encoded></item></channel></rss>