Участие в работе Оракула

Предоставление цен на активы через участие в работе Оракула

Обзор

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

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

На данный момент каждое окно голосования имеет длину 2 блока.

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

На шаге основного голосования в окне X, валидатор предоставляет обменные курсы для текущего окна. Они также хэшированы и сравниваются с данными предварительного голосования, которые были предоставлены в предыдущем окне X-1, чтобы убедиться, что данные не был изменены в этом окне. В конце периода голосования все обменные курсы складываются и вычисляется взвешенная медианная цена (взвешена по количеству голосов валидаторов), это позволяет определить истинный обменный курс каждого актива.

Для валидаторов, отказавшихся от участия в работе Оракула или предоставивших ошибочные данные, предусмотрены штрафы. У валидаторов есть счетчик ошибок, в котором отслеживается количество окон для голосования, в работе которых валидатор либо не принимал участие, либо предоставил неверные данные, которые слишком сильно отклоняются от средневзвешенной медианной цены. Если за определенный период голосований валидатор допускает слишком много ошибок, производится процедура слэшинга (срезание баланса) в качестве наказания за ошибочное поведение в течение длительного периода времени.

Размер штрафа 0,01% если менее 5% голосований за период в 1 неделю валидны. Разрешенное отклонение от медианной взвешенной цены ±1%.

Шаги

Предварительное голосование

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

Пример предоставления обменного курса

12.345uatom,420.69usei,3.1415ufoo

Пример с командной строкой

seid tx oracle aggregate-prevote {salt} {exchange_rates} {validator_addr} --from {your_key}

Основное голосование

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

Пример предоставления обменного курса

12.345uatom,420.69usei,3.1415ufoo

Пример с командной строкой

seid tx oracle aggregate-vote {salt} {exchange_rates} {validator_addr} --from {your_key}

Запуск скрипта Оракула

В ПО включен модуль Оракула, который может быть сконфигурирован в качестве сервиса в systemd, что поможет предоставить более надежное и настраиваемое решение для предоставления цен на активы. Модуль может быть встроен при помощи команды make install-price-feeder из репо Sei, также понадобится файл конфигурации, в котором будут содержаться данные об аккаунте-отправителе цен для голосования, а также дополнительные данные для конфигурации, такие как активы и провайдеры, участвующие в ценообразовании.

Пример файла конфигурации можно найти здесь https://github.com/sei-protocol/sei-chain/blob/master/oracle/price-feeder/config.example.toml

Валидатору потребуется обновить данные, относящиеся к его адресу, ключам и валютным парам, которые включены в вайт лист. Также, ниже представлен пример настройки systemd для запуска оракула в качестве сервиса:

[Unit]
Description=Oracle Price Feeder
After=network.target

[Service]
User=root
Type=simple
Environment="PRICE_FEEDER_PASS={your keyring password for the oracle account here}"
# alternatively to `Environment`, validators can use `EnvironmentFile` to designate a file from which to get env var info
ExecStart=/root/go/bin/price-feeder /path/to/oracle/price_feeder_config.toml
Restart=on-failure
LimitNOFILE=6553500

[Install]
WantedBy=multi-user.target

Комбинированное голосование

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

Пример с командной строкой

seid tx oracle aggregate-combined-vote {vote_salt} {vote_exchange_rates} {prevote_salt} {prevote_exchange_rates} {validator_addr} --from {your_key}

Делегация права голоса

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

Пример

seid tx oracle set-feeder <new-address> --from <wallet-name> --fees 2000usei --chain-id <chain-id>

Отказ от голосования

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

Last updated