Вознаграждения и штрафы в Proof-of-Stake
Эфириум защищен с помощью своей собственной криптовалюты — эфира (ETH). Операторы узлов, желающие участвовать в проверке блоков и определении вершины цепи, вносят эфир в депозитный контракт в Эфириуме. Затем им платят в эфире за запуск программного обеспечения валидатора, которое проверяет действительность новых блоков, полученных через одноранговую сеть, и применяет алгоритм выбора форка для определения вершины цепи.
У валидатора есть две основные роли: 1) проверка новых блоков и их «аттестация», если они действительны, 2) предложение новых блоков при случайном выборе из общего пула валидаторов. Если валидатор не выполняет ни одну из этих задач по запросу, он упускает выплату в эфире. Валидаторам также иногда поручается агрегация подписей и участие в комитетах синхронизации.
Существуют также некоторые действия, которые очень сложно совершить случайно и которые указывают на злой умысел, например, предложение нескольких блоков для одного и того же слота или аттестация нескольких блоков для одного и того же слота. Это поведение, за которое предусмотрен слэшинг, в результате чего у валидатора сжигается некоторое количество эфира (до 1 ETH) перед тем, как валидатор будет удален из сети, что занимает 36 дней. Эфир валидатора, подвергнутого слэшингу, медленно истощается в течение периода выхода, но на 18-й день он получает «штраф за корреляцию», который тем больше, чем больше валидаторов подвергается слэшингу примерно в то же время. Таким образом, структура стимулов механизма консенсуса платит за честность и наказывает злоумышленников.
Все вознаграждения и штрафы применяются один раз за эпоху.
Читайте дальше для получения более подробной информации...
Вознаграждения и штрафы
Вознаграждения
Валидаторы получают вознаграждения, когда они отдают голоса, которые согласуются с большинством других валидаторов, когда они предлагают блоки и когда они участвуют в комитетах синхронизации. Значение вознаграждений в каждой эпохе рассчитывается на основе base_reward. Это базовая единица, из которой рассчитываются другие вознаграждения. base_reward представляет собой среднее вознаграждение, получаемое валидатором в оптимальных условиях за эпоху. Оно рассчитывается из эффективного баланса валидатора и общего количества активных валидаторов следующим образом:
base_reward = effective_balance * (base_reward_factor / (base_rewards_per_epoch * sqrt(sum(active_balance))))
где base_reward_factor равно 64, base_rewards_per_epoch равно 4, а sum(active balance) — это общий стейк эфира среди всех активных валидаторов.
Это означает, что базовое вознаграждение пропорционально эффективному балансу валидатора и обратно пропорционально количеству валидаторов в сети. Чем больше валидаторов, тем больше общая эмиссия (поскольку sqrt(N)), но тем меньше base_reward на одного валидатора (поскольку 1/sqrt(N)). Эти факторы влияют на APR для узла стейкинга. Ознакомьтесь с обоснованием этого в заметках Виталика (opens in a new tab).
Затем общее вознаграждение рассчитывается как сумма пяти компонентов, каждый из которых имеет вес, определяющий, сколько каждый компонент добавляет к общему вознаграждению. Эти компоненты:
1. source vote: валидатор своевременно отдал голос за правильную исходную контрольную точку
2. target vote: валидатор своевременно отдал голос за правильную целевую контрольную точку
3. head vote: валидатор своевременно отдал голос за правильный головной блок
4. sync committee reward: валидатор принял участие в комитете синхронизации
5. proposer reward: валидатор предложил блок в правильном слоте
Веса для каждого компонента следующие:
TIMELY_SOURCE_WEIGHT uint64(14)
TIMELY_TARGET_WEIGHT uint64(26)
TIMELY_HEAD_WEIGHT uint64(14)
SYNC_REWARD_WEIGHT uint64(2)
PROPOSER_WEIGHT uint64(8)
Сумма этих весов равна 64. Вознаграждение рассчитывается как сумма применимых весов, разделенная на 64. Валидатор, который своевременно отдал голоса за источник, цель и вершину, предложил блок и участвовал в комитете синхронизации, может получить 64/64 * base_reward == base_reward. Однако валидатор обычно не является предлагающим блок, поэтому его максимальное вознаграждение составляет 64-8 /64 * base_reward == 7/8 * base_reward. Валидаторы, которые не являются ни предлагающими блок, ни членами комитета синхронизации, могут получить 64-8-2 / 64 * base_reward == 6.75/8 * base_reward.
Дополнительное вознаграждение добавляется для стимулирования быстрых аттестаций. Это inclusion_delay_reward. Его значение равно base_reward, умноженному на 1/delay, где delay — это количество слотов, разделяющих предложение блока и аттестацию. Например, если аттестация отправляется в течение одного слота после предложения блока, аттестующий получает base_reward * 1/1 == base_reward. Если аттестация поступает в следующем слоте, аттестующий получает base_reward * 1/2 и так далее.
Предлагающие блок получают 8 / 64 * base_reward за каждую действительную аттестацию, включенную в блок, поэтому фактическое значение вознаграждения масштабируется в зависимости от количества аттестующих валидаторов. Предлагающие блок также могут увеличить свое вознаграждение, включив в предложенный ими блок доказательства неправомерного поведения других валидаторов. Эти вознаграждения являются «пряниками», которые поощряют честность валидаторов. Предлагающий блок, который включает слэшинг, будет вознагражден slashed_validators_effective_balance / 512.
Штрафы
До сих пор мы рассматривали валидаторов, которые ведут себя идеально, но как насчет валидаторов, которые не отдают своевременно голоса за вершину, источник и цель или делают это медленно?
Штрафы за пропуск голосов за цель и источник равны вознаграждениям, которые аттестующий получил бы, если бы он их отправил. Это означает, что вместо добавления вознаграждения к их балансу, из их баланса вычитается равная сумма. За пропуск голоса за вершину штраф не предусмотрен (т. е. голоса за вершину только вознаграждаются, но никогда не штрафуются). Нет штрафа, связанного с inclusion_delay — вознаграждение просто не будет добавлено к балансу валидатора. Также нет штрафа за непредставление блока.
Узнайте больше о вознаграждениях и штрафах в спецификациях консенсуса (opens in a new tab). Вознаграждения и штрафы были скорректированы в обновлении Bellatrix — посмотрите, как Дэнни Райан и Виталик обсуждают это в этом видео Peep an EIP (opens in a new tab).
Слэшинг
Слэшинг — это более суровое действие, которое приводит к принудительному удалению валидатора из сети и связанной с этим потере его стейка в эфире. Существует три способа, которыми валидатор может быть подвергнут слэшингу, и все они сводятся к нечестному предложению или аттестации блоков:
- Путем предложения и подписания двух разных блоков для одного и того же слота
- Путем аттестации блока, который «окружает» другой (фактически изменяя историю)
- Путем «двойного голосования» при аттестации двух кандидатов на один и тот же блок
Если эти действия обнаружены, валидатор подвергается слэшингу. Это означает, что 0.0078125 немедленно сжигается для валидатора с 32 ETH (масштабируется линейно с активным балансом), затем начинается 36-дневный период удаления. В течение этого периода удаления стейк валидатора постепенно истощается. На середине срока (18-й день) применяется дополнительный штраф, величина которого масштабируется в зависимости от общего стейка эфира всех валидаторов, подвергнутых слэшингу за 36 дней до события слэшинга. Это означает, что когда больше валидаторов подвергается слэшингу, величина слэшинга увеличивается. Максимальный слэшинг — это полный эффективный баланс всех валидаторов, подвергнутых слэшингу (т. е. если слэшингу подвергается много валидаторов, они могут потерять весь свой стейк). С другой стороны, единичное, изолированное событие слэшинга сжигает лишь небольшую часть стейка валидатора. Этот штраф на середине срока, который масштабируется в зависимости от количества валидаторов, подвергнутых слэшингу, называется «штрафом за корреляцию».
Утечка при бездействии
Если уровень консенсуса прошел более четырех эпох без достижения финальности, активируется аварийный протокол, называемый «утечка при бездействии». Конечная цель утечки при бездействии — создать условия, необходимые для восстановления финальности цепи. Как объяснялось выше, для финальности требуется, чтобы 2/3 от общего стейка эфира согласовали исходные и целевые контрольные точки. Если валидаторы, представляющие более 1/3 от общего числа валидаторов, отключаются от сети или не могут отправить правильные аттестации, то абсолютное большинство в 2/3 не может финализировать контрольные точки. Утечка при бездействии позволяет стейку, принадлежащему неактивным валидаторам, постепенно истощаться до тех пор, пока они не будут контролировать менее 1/3 от общего стейка, что позволит оставшимся активным валидаторам финализировать цепь. Каким бы большим ни был пул неактивных валидаторов, оставшиеся активные валидаторы в конечном итоге будут контролировать >2/3 стейка. Потеря стейка является сильным стимулом для неактивных валидаторов возобновить работу как можно скорее! Сценарий утечки при бездействии произошел в тестовой сети Medalla, когда < 66% активных валидаторов смогли прийти к консенсусу относительно текущей вершины блокчейна. Утечка при бездействии была активирована, и финальность в конечном итоге была восстановлена!
Дизайн вознаграждений, штрафов и слэшинга механизма консенсуса поощряет отдельных валидаторов вести себя правильно. Однако из этих проектных решений возникает система, которая сильно стимулирует равное распределение валидаторов между несколькими клиентами и должна сильно препятствовать доминированию одного клиента.
Дополнительная литература
- Обновление Эфириума: уровень стимулов (opens in a new tab)
- Стимулы в гибридном протоколе Casper Эфириума (opens in a new tab)
- Аннотированная спецификация Виталика (opens in a new tab)
- Советы по предотвращению слэшинга в Eth2 (opens in a new tab)
- Анализ штрафов за слэшинг в рамках EIP-7251 (opens in a new tab)
Источники