cosmos
July 21, 2022

tx tracer/explorer на чейне Sei

Вариантов реализации этого задания как обычно несколько, ввиду сжатых сроков идем простейшим путем.

Хочу выразить благодарность команде https://www.theamsolutions.info за возможность использования их API (вероятно API он работает только по https протоколу, а времени на эту возню, как я говорил, нет).

Также хочу поблагодарить команду ping.pub за отличный продукт который они создали.


Итак простейший путь означает что для наших целей будем использовать open source проект ping.pub

🧑‍🦽 Поехали:

  • ставим веб сервер nginx (можно взять любой другой сервер: apache, caddy, Lighthttpd и т.д.):
sudo apt install nginx

проверяем что nginx встал нормально, для этого открываем в браузере страницу с ip адресом хоста на котором разворачиваем эту историю, картина должна быть такая:

оставляем все как есть и идем дальше

  • nodejs:
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
  • yarn:
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
yarn --version

На этом зависимости все.

  • Клонируем репо:
cd ~
git clone https://github.com/ping-pub/explorer.git
cd explorer
  • Вносим правки

По умолчанию ping.pub содержит кучу конфигов для майн и тестнетов космоса. К сожаления проект Sei среди них отсутствует. Не испугавшись этого и воспользовавшись имеющимися конфигами в качестве образца, создаем свой конфиг для сети Sei. Конфиг использует формат json и довольно прост для понимания.

Также хочу отметить, что майн и тестнеты разнесены по разным каталогам src/chains/mainnet и src/chains/testnet соответственно, и по логике надо создавать наш конфиг в каталоге testnet, после чего внести исправления в навигацию на главной странице, поскольку по умолчанию открывается страница с майнами, а по ссылке на тестнеты жестко вписан адрес http://testnet.ping.pub В общем это сложно и долго, а мы торопимся, поэтому делаем колхозный вариант, и закидываем конфиг в каталог с майнами, попутно удалив все лишние сети чтобы не резало глаз 👁️.

rm src/chains/mainnet/*
nano src/chains/mainnet/sei.json

вставляем туда сам конфиг ( https://gist.github.com/ryssroad/bd8be8aef696651186f2ab90c54ff7ca )

{
"chain_name": "sei",
"api": ["https://sei-api.theamsolutions.info"],
"rpc": ["http://158.101.209.61:12657"],
"sdk_version": "0.42.6",
"coin_type": "505",
"min_tx_fee": "800",
"assets": [{
"base": "usei",
"symbol": "SEI",
"exponent": "6",
"logo": "https://raw.githubusercontent.com/ryssroad/testnets/main/SeiLogo.png"
}],
"addr_prefix": "sei",
"logo": "https://raw.githubusercontent.com/ryssroad/testnets/main/SeiLogo.png"
}

Сразу скажу, за достоверность таких параметров как coin_type, min_tx_fee и т.д. не ручаюсь, достаточно того что он работает.

  • Параметр api лучше не трогать, для тех кто захочет потрогать, здесь нужно указать:

https://ip_ноды:порт_lcd(по умолчанию 1317)

  • Параметр rpc это:

https://ip_ноды:порт_rpc(по умолчанию 26657)

Сохраняем проделанную работу и идем дальше.

  • Сборка
yarn && yarn build

Процесс занимает порядком времени, около двух-трех минут, по окончании наблюдаем сообщение о том все нормально, и копируем сборку в корень веб сервера. Для nginx на стандартной ubuntu это каталог /var/www/html

cp -r ./dist/* /var/www/html

на всякий случай делаем рестарт nginx'a

systemctl restart nginx.service

На этом как ни странно все.

  • Добавим пару штрихов, читай сетей

axelar:

wget https://gist.githubusercontent.com/ryssroad/3a283625a40587bbfb31b0fe9ab37c07/raw/27a6cba0c9b3c40dbfee31008e35e113c937db89/axelar.json
cp axelar.json ~/explorer/src/chains/mainnet

juno:

wget https://gist.githubusercontent.com/ryssroad/6c6fc57d9e02d983e26064c89b4d48b8/raw/a7d4ee2362ebaf0f709ef36895930dcab3bab631/juno.json
cp juno.json ~/explorer/src/chains/mainnet
  • Ребилд
yarn && yarn build
cp -r ./dist/* /var/www/html
  • смотрим:

Конечно знатоки nginx и Vue могут закидать меня сцаными тряпками, за то как криво все проделано, однако основная цель достигнута, эксплорер работает, а это главное. Логично также будет зарегистрировать домен под это дело, и опираясь на полученный опыт добавить те сети в которых есть необходимость.

Всем спасибо ✌️


UPD

В связи с нестабильностью и непредсказуемостью паблик RPC перенаправляем эксплореры на свои ноды (вариант не рекомендуется для продакшн).

1. правим .sei/config/app.toml строка 129
- ставим enabled-unsafe-cors = true (разрешаем небезопасные кросс_ориджин_чего_то_там)
в том же конфиге строка 114
- смотрим и запоминаем порт api (должен быть 12317 или похожий) и если надо меняем 127.0.0.1 на 0.0.0.0
2. рестарт ноды
3. правим конфиг эксплорера ~/explorer/src/chains/mainnet/sei.json, в значение параметра api ставим http://node_ip:api_port (node_ip смотрим на серваке с нодой командой curl ifconfig.me, порт из конфига
4. делаем ребилд екплорера

cd ~/explorer
yarn build
cp -r ./dist/* /var/www/html