Перейти до основного вмісту
Change page

Винагороди та штрафи у 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% активних валідаторів змогли дійти консенсусу щодо поточного початку блокчейну. Витік через неактивність був активований, і фінальність зрештою була відновлена!

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

Подальше читання

Джерела