COSMOS WIKI
June 27, 2023

Lava - providers (mainnet)

🪓 Telegram канал UTSA 🪓 Telegram чат UTSA

Web Discord Github

Провайдеры являются основой сети Lava, обслуживая запросы на ретрансляцию путем размещения ставок в сети и управляя узлами RPC в цепочках ретрансляции (например, Cosmos, Ethereum, Osmosis, Polygon и т.д.). Взамен провайдеры получают плату в виде токенов LAVA за обслуживание этих запросов


!!!ВАЖНО!!!

Начиная с testnet2 необходимо настраивать TLS сертификаты для провайдера - подробнее здесь - https://docs.lavanet.xyz/provider-tls/?utm_source=lava-discord&utm_medium=discord&utm_campaign=testnet-fork


Общие условия

  • для привязки токенов можно использовать как отдельный кошелек, так и кошелек валидатора. Рекомендуется создать отдельный кошелек
  • Для активации провайдера необходима ставка минимум в 5000 LAVA
  • общедоступные точки доступа могут быть как удаленными, так и локальными на собственном сервере. Убедитесь, что точки доступа RPC, API и gRPC находятся в рабочем состоянии
  • minimum-gas-prices выставляем на "0.000000001ulava"

Провайдер может получить статус jail, если в течение 3 последних эпох (1,5 часа) потребители жалуются на него и у них есть более 95% ошибок в первых 10 сообщениях или если соединение пропало

В текущей тестовой сети механизм слешинга отключен - поэтому провайдеры должны получить свои тестовые монеты обратно через 25 часов. Команда не планирует вводить более жесткие ограничения - поэтому после временной стадии jail можно будет вернуться к работе провайдера

В будущем возможно включение слешинга за попадание в jail


При размещении ставок в качестве провайдера в транзакциях используются четыре основных параметра:

  1. Stake: количество LAVA, которое будет отправлено в stake. Для тестовой сети это значение должно быть минимум 50000 LAVA на сеть. Значение может быть больше, но не меньше. Для mainnet необходимо 5000 LAVA
  2. Geolocation: указывает геолокацию вашего сервера. US соответствует 1, а EU соответствует 2
  3. ChainID: идентификатор целевой сети блокчейна, такой как Cosmos Mainnet, Ethereum Ropsten и т.д.
  4. Endpoints: список конечных точек, каждая из которых определяет адрес, геолокацию и интерфейс API, такой как REST, JSON-RPC и т.д. Важно отметить, что все запросы провайдера выполняются с использованием gRPC

Узнать ChainID можно несколькими способами - перейдя в dashboard или используя информацию с RPC или воспользовавшись следующей командой

lavap q spec list-spec | grep index

Настройка провайдера LAVA

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

LAVA - это идентификатор цепочки, позволяющий стать провайдером используя mainnet LAVA

В данном гайде мы будем использовать отдельный кошелек провайдера для стейка и синхронизированную ноду lava, поэтому подразумевается, что у нас уже имеется установленная актуальная версия lava и другие сети на нашем сервере. Также в нашем примере нода LAVA имеет настройку pruning = nothing и будет архивной. Наш сервер расположен в Европе, поэтому мы будем использовать --geolocation 2

0. Скачиваем бинарный файл lavap

С 02.10.2023 года для провайдера должен использоваться отдельный бинарный файл lavap. Также можно настроить lavavisor (аналог cosmovisor). Подробнее здесь

git clone https://github.com/lavanet/lava && cd lava
export LAVA_BINARY=lavap
git checkout v2.2.2
make install
lavap version
#v2.2.2

1. Создаем или восстанавливаем кошелек и пополняем его минимум на 5000LAVA

Для тестовой сети необходимо использовать --keyring-backend test, так как необходимо подписывать транзакции. В mainnet это будет исправлено

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

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

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

2. Регистрация stake для необходимой нам сети. В данном случае LAVA (lava-mainnet-1)

Для примера ниже мы создали поддомен lava-provider.utsa.tech с используемым портом 12345. Этот номер порта предназначен для информирования других о том, что услуги Вашего провайдера будут работать по этому адресу с этим конкретным номером порта. Пожалуйста, не путайте provider_port с номерами портов RPC, API или gRPC!

ВАЖНО - перед началом необходимо настроить сертификат TLS

Вы можете изменить данный порт на необходимое Вам значение, при этом не забудьте сделать данный порт открытым для внешнего мира. Также поменяйте <name_wallet> <moniker> <lava.your-site:443> <VALOPER_ВАЛИДАТОРА> на свои значения

lavad tx pairing stake-provider LAVA 5000000000ulava <lava.your-site:443>,2,tendermintrpc,rest,grpc,archive 2 <VALOPER_ВАЛИДАТОРА> --from <name_wallet> --provider-moniker "<moniker>" --delegate-limit "9000000000000ulava" --delegate-commission 70 --keyring-backend test --chain-id lava-mainnet-1 --gas auto --gas-adjustment 1.5 --fees 5000ulava -y

Поздравляю - Вы официально заявили о себе как о поставщике услуг в LAVA!

Для регистрации других сетей отправьте еще одну транзакцию заменив LAVA и поддомен на свои значения"

Самое время проверить статус своего провайдера

# проверить зарегистрированного провайдера
lavap query pairing account-info <lava@1sdx...>

# проверить всех провайдеров в сети LAVA
lavap query pairing providers LAVA

Настройка rpcprovider.yml

!!! ВАЖНО !!!

C testnet2 команда просит создавать отдельные конфиг файлы для каждой сети провайдера. При этом необходимо создавать разные сервисные файлы для запуска

Создаем конфиг со следующим содержимым

nano $HOME/.lava/config/lava-provider.yml

Используйте именно 0.0.0.0:12345, чтобы успешно ловить входящий трафик. Также в конфиге при необходимости поменяйте порты 26657, 9090 и 1317 на свои значения RPC, gRPC и API соответственно.

В данном случае мы используем архивную RPC ноду, которая сохраняет всю историю блоков

endpoints:
    - api-interface: tendermintrpc
      chain-id: LAVA
      network-address:
        address: "127.0.0.1:12345"
        disable-tls: true
      node-urls:
        - url: ws://127.0.0.1:26657/websocket
        - url: http://127.0.0.1:26657
        - url: http://127.0.0.1:26657
          addons:
            - archive
    - api-interface: grpc
      chain-id: LAVA
      network-address:
        address: "127.0.0.1:12345"
        disable-tls: true
      node-urls:
        - url: 127.0.0.1:9090
        - url: 127.0.0.1:9090
          addons:
              - archive
    - api-interface: rest
      chain-id: LAVA
      network-address:
        address: "127.0.0.1:12345"
        disable-tls: true
      node-urls:
        - url: http://127.0.0.1:1317
        - url: http://127.0.0.1:1317
          addons:
              - archive

Начиная с v1.0.2 lavap можно и нужно использовать cache

Служба кэширования Lava используется для сокращения затрат и повышения общей производительности сети. От службы кэширования выигрывают как провайдеры, так и потребители. Провайдеры, включившие кэширование, могут возвращать ответы быстрее, чем провайдеры, у которых кэширование не включено

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

tee /etc/systemd/system/lava-cache.service > /dev/null << EOF
[Unit]
Description=Lava cache service
After=network-online.target
[Service]
User=$USER
ExecStart=$(which lavap) cache 127.0.0.1:7777 --metrics_address 127.0.0.1:5747 --log_level debug
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable lava-cache.service
systemctl start lava-cache.service
journalctl -u lava-cache.service -f -o cat

Создаем сервисный файл. Замените <name_wallet> на свое значение

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

[Service]
User=$USER
WorkingDirectory=/root/.lava/config
ExecStart=/root/go/bin/lavap rpcprovider lava-provider.yml --geolocation 2 --from <name_wallet> --chain-id lava-testnet-2 --keyring-backend test --cache-be 127.0.0.1:7777
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

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

После старта сервиса в логах убеждаемся, что cashe работает

Далее видим подобные логи

Также можно воспользоваться командой проверки конфигурации

lavap test rpcprovider --from <name_wallet> --keyring-backend test

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

# проверить логи на успешные транзакции
journalctl -fn 100 -u lava-provider | grep succeeded
# проверить зарегистрированного провайдера
lavap query pairing account-info <lava@1sdx...>
# сделать unstake
lavap tx pairing unstake-provider "LAV1" \
    --from "<name_wallet>" \
    --keyring-backend "test" \
    --gas="auto" \
    --gas-adjustment "1.5" \
    --fees 5000ulava
# удалить провайдера
systemctl stop provider-lava
systemctl disable provider-lava
rm /etc/systemd/system/provider-lava.service
systemctl daemon-reload
cd $HOME/.lava/config/
rm lava-provider.yml

Incentivized Evmos ipRPC

Стимулированная программа RPC для Evmos стартует 2 октября! Это ознаменует новую парадигму для валидаторов, превращая запуск и держание RPC в бизнес-возможность!

Подробнее о программе можно прочитать здесь

После ежемесячного распределения вознаграждений экосистемы каждый провайдер обязан требовать свои вознаграждения по контракту на распространение!

Для участия в программе необходимо:

  • установить ноды EVMOS mainnet и EVMOS testnet
  • настроить и зарегистрировать провайдеров для каждой сети
  • создать сертификаты TLS для EVMOS mainnet и EVMOS testnet
  • получить токены LAVA (50000 для каждой сети). Для этого заполните данную форму
  • вступить в дискорд lava и оставаться там активным для получения дальнейших обновлений и поддержки

Минимальные технические требования:

  • Chain id: Mainnet-evmos_9001-2, Testnet-evmos_9000-4
  • Protocol version: Mainnet-13.0.2, Testnet-14.0.0
  • Pruning configuration: at least 50,000 blocks
  • Evmos APIs enabled: eth, net, web3
  • Transaction indexing: indexer="kv"
Подразумевается, что у Вас уже установлены ноды LAVA, EVMOS-mainnet и EVMOS-testnet с нужными параметрами. Также Вы настроили TLS сертификаты для сетей EVMOS. После этого можно продолжить настройку провайдера

0. Скачиваем бинарный файл lavap

С 02.10.2023 года для провайдера должен использоваться отдельный бинарный файл lavap. Также можно настроить lavavisor (аналог cosmovisor). Подробнее здесь

git clone https://github.com/lavanet/lava && cd lava
export LAVA_BINARY=lavap
make install
lavap version
#v1.0.4

1. Создаем или восстанавливаем кошелек и пополняем ровно на 50000LAVA

Для тестовой сети необходимо использовать --keyring-backend test, так как необходимо подписывать транзакции. В mainnet это будет исправлено

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

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

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

2. Регистрируем stake для необходимой нам сети. В данном случае EVMOS mainnet

Для примера ниже мы ранее создали поддомен evmos-mainnet-provider.utsa.tech с используемым портом 12349 в nginx. Этот номер порта предназначен для информирования других о том, что услуги Вашего провайдера будут работать по этому адресу с этим конкретным номером порта. Порт может быть рандомным. Пожалуйста, не путайте provider_port с номерами портов RPC, API или gRPC!

ВАЖНО - перед началом необходимо настроить сертификат TLS

Вы можете изменить данный порт на необходимое Вам значение, при этом не забудьте сделать данный порт открытым для внешнего мира. Также поменяйте <name_wallet> <moniker> <lava.your-site:443> на свои значения

lavap tx pairing stake-provider "EVMOS" \
    "50000000000ulava" \
    "<lava.your-site:443>,2,tendermintrpc,rest,grpc,jsonrpc" 2 \
    --from "<name_wallet>" \
    --provider-moniker "<moniker>" \
    --keyring-backend "test" \
    --gas="auto" \
    --gas-adjustment "1.5" \
    --fees 5

Поздравляю - Вы официально заявили о себе как о поставщике услуг в LAVA!

Для регистрации других сетей отправьте еще одну транзакцию заменив EVMOS и поддомен на EVMOST"

lavap tx pairing stake-provider "EVMOST" \
    "50000000000ulava" \
    "<lava.your-site:443>,2,tendermintrpc,rest,grpc,jsonrpc" 2 \
    --from "<name_wallet>" \
    --provider-moniker "<moniker>" \
    --keyring-backend "test" \
    --gas="auto" \
    --gas-adjustment "1.5" \
    --fees 5

Самое время проверить статус своего провайдера

# проверить зарегистрированного провайдера
lavap query pairing account-info <lava@1sdx...>

Настройка rpcprovider.yml

!!! ВАЖНО !!!

C testnet2 команда просит создавать отдельные конфиг файлы для каждой сети провайдера. При этом необходимо создавать разные сервисные файлы для запуска

Создаем конфиг со следующим содержимым

nano $HOME/.lava/config/evmos-mainnet-provider.yml

В конфиге при необходимости поменяйте порты 26657, 9090, 1317 и 8545 на свои значения RPC, API, RPC и jsonRPC соответственно

endpoints:
#evmos-mainnet
  - api-interface: tendermintrpc
    chain-id: EVMOS
    network-address:
      address: 0.0.0.0:12349
      disable-tls: true
    node-urls:
      - url: ws://127.0.0.1:26657/websocket
      - url: http://127.0.0.1:26657
  - api-interface: grpc
    chain-id: EVMOS
    network-address:
      address: 0.0.0.0:12349
      disable-tls: true
    node-urls: 
      - url: 127.0.0.1:9090
  - api-interface: rest
    chain-id: EVMOS
    network-address:
      address: 0.0.0.0:12349
      disable-tls: true
    node-urls: 
      - url: http://127.0.0.1:1317
  - api-interface: jsonrpc
    chain-id: EVMOS
    network-address:
      address: 0.0.0.0:12349
      disable-tls: true
    node-urls: 
      - url: http://127.0.0.1:8545

Начиная с v1.0.2 lavap можно и нужно использовать cache

Служба кэширования Lava используется для сокращения затрат и повышения общей производительности сети. От службы кэширования выигрывают как провайдеры, так и потребители. Провайдеры, включившие кэширование, могут возвращать ответы быстрее, чем провайдеры, у которых кэширование не включено

Если Вы ранее для lava уже создали на данном сервере lava-cache.service, то переходите к следующему шагу

Создаем сервисный файл. Замените <name_wallet> на свое значение

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

[Service]
User=$USER
WorkingDirectory=/root/.lava/config
ExecStart=/root/go/bin/lavap rpcprovider evmos-mainnet-provider.yml --geolocation 2 --from <name_wallet> --chain-id lava-testnet-2 --keyring-backend test --cache-be 127.0.0.1:7777
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable provider-evmos-mainnet
systemctl restart provider-evmos-mainnet && journalctl -u provider-evmos-mainnet -f -o catat

Проверка провайдера

Команда Lava создала скрипт проверки правильности настройки. Ниже предоставлен ожидаемый успешный результат проверки

git clone https://github.com/lavanet/evmos-node-verify
cd evmos-node-verify

#python3 verify-evmos.py <rest-endpoint> <tendermint-rpc-endpoint> <json-rpc endpoint>
python3 verify-evmos.py http://127.0.0.1:1507 http://127.0.0.1:62057 http://127.0.0.1:8555

Также можно воспользоваться командой проверки конфигурации

lavap test rpcprovider --from <name_wallet> --keyring-backend test
ВАЖНО - если какой-либо тест выдает ошибку, то поменяйте в app.toml настройки конечных точек на true, перезагрузите ноды и сделайте новую проверку. Также иногда помогает просто перезагрузка провайдера

Проверить награды за провайдера, которые будут доступны через 30 дней

lavad query pairing provider-monthly-payout <provider>

Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq