Proof-of-Stake

ETH 2.0 Staking 節點宕機會受到懲罰嗎?

  • April 2, 2020

對於一些權益證明區塊鏈系統,如果節點在權益質押期間出現故障,則會受到懲罰。如果 ETH 2.0 質押節點出現故障,是否會受到某種懲罰?如果沒有它如何阻止質押者打開和關閉他們的節點以擾亂網路?

是的,離線會受到處罰。在“正常”(非活動洩漏)情況下,驗證者在離線時每年損失**大約15.8% 的股份。離線一個月約為 1.4%,一周離線約為 0.3%。

具體來說,未能創建證明的驗證者將受到處罰。當網路未能最終確定時(如@lauri-peltonen 所述),這些懲罰會更加嚴厲。這些嚴厲的懲罰也被稱為“不活動洩漏”,旨在快速驅逐(通過減少餘額)離線驗證者,以便線上驗證者可以形成多數並恢復最終確定。

Eth2 中的懲罰計算並不簡單。除了不活動洩漏之外,懲罰還考慮了驗證者的餘額和所有驗證者的總餘額。為了達到 15.8% 的數字,我使用了以下腳本,該腳本源自規範 Eth2 規範的 v0.11.1

DEPOSIT_AMOUNT = 32 * 10**9
VALIDATOR_COUNT = 16384
BASE_REWARD_FACTOR = 64
BASE_REWARDS_PER_EPOCH = 4
SECONDS_PER_SLOT = 12
SLOTS_PER_EPOCH = 32
SECONDS_PER_YEAR = 31557600
EPOCHS_PER_YEAR =  SECONDS_PER_YEAR // (SECONDS_PER_SLOT * SLOTS_PER_EPOCH)

def integer_squareroot(n):
   """
   Return the largest integer ``x`` such that ``x**2 <= n``.
   """
   x = n
   y = (x + 1) // 2
   while y < x:
       x = y
       y = (x + n // x) // 2
   return x

def get_base_reward(total_balance, effective_balance):
   return effective_balance * BASE_REWARD_FACTOR // integer_squareroot(total_balance) // BASE_REWARDS_PER_EPOCH

total_balance = DEPOSIT_AMOUNT * VALIDATOR_COUNT
validator_balance = DEPOSIT_AMOUNT

for _ in range(EPOCHS_PER_YEAR):
   penalty = get_base_reward(total_balance, validator_balance) * 3
   validator_balance -= penalty
   total_balance -= penalty

total_penalty = DEPOSIT_AMOUNT - validator_balance

print("Final balance: {}".format(validator_balance))
print("Total penalty: {}".format(total_penalty))
print("Reduction %: {}".format(100 * total_penalty / DEPOSIT_AMOUNT))

這個腳本的輸出是:

Final balance: 26935963853
Total penalty: 5064036147
Reduction %: 15.825112959375

這是一個非常粗略的近似值(忽略滯後等一些因素),15.8% 的數字非常主觀。在現實世界中,total_balance隨著現有驗證者獲得獎勵和新驗證者的加入,這一數字可能會增加。相反,由於不活動洩漏,總餘額可能會減少,懲罰會增加。

雖然您不能相信這 15.8% 的 p/a 懲罰是恆定的,但您有望了解離線懲罰的幅度

注意:這些值以前偏離了 3 倍,現在已經更新。我很抱歉。

是的,離線會受到懲罰。引用https://ethos.dev/beacon-chain/上的文章:

基本上,如果自最終確定以來已經超過四個時期,所有驗證者都會遭受不活動懲罰,該懲罰會以二次方增加,直到最終確定檢查點

您可以在本文前面查看“紀元”的含義。

引用自:https://ethereum.stackexchange.com/questions/82067