罰沒防護
罰沒防護是一種本地安全機制,用以阻止驗證者不慎簽署一則會害其質押被罰沒的訊息。在權益證明中,某些行為是可被證明地受罰的:為同一個時隙提議兩個不同區塊,或投出兩則衝突的證明(雙重投票,或「包圍」先前投票的一票)。這些規則的存在是為了讓模稜兩可的一物兩簽變得昂貴——但誠實的營運者可能不慎觸發它們,例如在當機、設定錯誤、或在兩台機器上運行相同金鑰之後。罰沒防護正是使這類意外不可能發生的護欄。
它以一份嚴格的本地紀錄運作:驗證者用戶端保有一個罰沒防護資料庫,列出它曾簽署的每一個區塊時隙、以及它投出的每一則證明的來源/目標紀元。在簽署任何新東西之前,用戶端會查詢這個資料庫,並拒絕產出任何會違反罰沒規則的訊息——它不會為已提議過的時隙簽第二個區塊,也不會簽署任何雙重投票或包圍先前投票的證明。此防護在設計上偏向保守:一有疑慮便拒簽,寧可承受小小的失職懲罰,也不冒大得多的罰沒之險。
這份防護的好壞,全繫於該資料庫的完整性,這使金鑰的可攜性變得危險。惡名昭彰的失敗,是為「冗餘」而把驗證者金鑰匯入第二台機器:每台機器各自保有自己的罰沒防護資料庫,彼此都不知對方簽了什麼,一旦兩者為同一時隙簽署,你就被罰沒。這正是質押的首要鐵則:一把驗證者金鑰在任一時刻都只能在「恰好一個」地方啟用。要在機器間安全地搬移金鑰,營運者會匯出並匯入標準化的罰沒防護互換檔(EIP-3076),使新執行個體繼承完整的簽署歷史。
理解罰沒防護「做什麼、不做什麼」很重要。它純粹是一個本地、防禦性的工具,保護誠實的驗證者免於自招的罰沒;它對偵測或懲罰他人毫無作用,也救不了一個真心想攻擊網路的驗證者。為求更高保障,營運者會搭配遠端簽章器,並日益採用分散式驗證者技術——它把一把金鑰拆分到數個節點上,使驗證者維持可用,而任何單一機器都不曾握有一把完整、可被罰沒的金鑰。
它所強制的首要鐵則:一把驗證者金鑰,任一時刻只在恰好一個地方啟用。要遷移,請連同金鑰匯出 EIP-3076 罰沒防護歷史——絕不要只複製金鑰然後祈禱沒事。