iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0

「我們前面一直談到驗證者,但一直沒講他們是怎麼運作的」特務 K 問。

他整理了一下我們目前談到的事:

  • 驗證者把交易打包到區塊
  • 驗證者會從交易收受優先費

但怎麼成為一個驗證者呢?我們前面操作節點沒操作到。

小雨思考了一下,的確他還沒機會提到驗證者。在準備跑驗證者節點這個大工程之前,也許可以先來看個儀表板。

https://beaconcha.in/ 也是一個 開源 的儀表板,專注在提供共識層上面的資訊。

共識層與押金制

「在進入儀表版前,我們可以先簡單介紹共識層的功能和角色嗎?」特務 K 問。

「當然可以,共識層的目的,就是讓讓整個點對點網路自動做出決定,讓一段時間以前的資料都敲定下來,不會再動了。」小雨說。

小雨話講得簡單,但背後有些細節。

首先我們知道決定區塊鏈的鏈頭,就能決定那條鏈代表的全域狀態。這個推理是這樣:因為鏈頭有個欄位,是前一個區塊的雜湊值,代表鏈頭能鎖定前一個區塊。而前一個區塊也能以通樣的道理鎖住更前一個區塊。以此類推,決定了鏈頭就決定了過去區塊的歷史。而過去區塊的歷史也唯一決定了過去交易的排序。決定過去交易的歷史,現在的全域狀態就決定了。

再者,要在點對點網路決定這個鏈頭,有點困難。這是因為在點對點網路中,可能同時會有互相競爭的鏈頭。我們列一個可能的情境:

  • 假設已經分配好哪個驗證者應該在哪個時段,負責產出區塊。
  • 驗證者 A 被分配到產出現在這個時段的區塊。驗證者 B 下一個時段。
  • 但有可能 A 因故沒有上線,或網路線路速度因素,A 產出的區塊 a 沒有及時廣播到其他的節點。
  • B 因為沒看到 A 的區塊,直接出了一個區塊 b,並標記前一個時段沒區塊。 範例
  • 這時一個全節點同時看到 a 和 b ,該選誰?

因此,我們需要有些規則來選 a 或 b 。節點們可能可以在幾十秒內對 a 或 b 有所分歧,但幾小時後總得全部認同其中一個。要達到那樣,得要驗證者對 a 或 b 投票。

但驗證者並非都是好人。壞人可能亂投票,目的是故意讓點對點網路無法達成共識,有些節點認為 a 是鏈頭,有些認為 b 是鏈頭。有些覺得你有花了一筆錢,有些覺得你沒有。

點對點網路至此,已經可以算是被破壞掉了。

「以太坊怎麼處理壞人呢?」特務 K 問。

「這就是為什麼要押金制了,驗證者抵押一筆鏈上資產,系統偵測到惡意行為時可以沒收資產作為逞罰」小雨說「這樣讓攻擊是需要付出成本的。」

惡意行為的樣態有很多種,不一定每種都能懲罰,以太坊區分了兩種:

  • 可歸責行為:
    • 行為:驗證者做出破壞共識的惡意投票。
    • 判斷:投票的簽章和內容可以程式判斷決定懲罰與否。
    • 懲罰:可以重罰,沒收大部分押金
  • 不可歸責行為:
    • 行為:
      • 缺席:驗證者離線。有可能是系統故障,或惡意離線
      • 被排擠:或其送出的訊息被其他節點完全拋棄,效果同離線。
    • 判斷:沒辦法程式分辨惡意與否
    • 懲罰:微小但隨時間加重的離線懲罰

儀表板

兩人翻開了 beaconcha.in 網站,映入眼簾的是一組標題般的數字:

Epoch               390,645 / 390,642
Current Slot               12,500,666

Active Validators           1,069,462
Joining / Leaving     830K / 860K ETH

Staked ETH             35,709,300 ETH
Average Balance             33.45 ETH

時間

第一組數字和時間有關。以太坊的押金制,把時區分為較短的 出塊期(Slot) 與較長的 計票期(Epoch)

  • 出塊期
    • 目的:產出區塊的時間。
    • 設計考量:區塊要有足夠的時間廣播到其他節點,或全世界。
    • 長度: 12 秒
  • 計票期
    • 目的:蒐集簽章與計票。產出下一個敲定檢查點的時間。
    • 設計考量:
      • 時間長度、最低押金、驗證者總數相互取捨。
      • 時間越長:可以蒐集更多票、容納更多驗證者,但敲定越慢
      • 最低押金:越低讓成為驗證者更容易,有助去中心化。越高可以減少驗證者,減少集章壓力。
      • 驗證者總數:越高越去中心化,但更多簽章需要蒐集。
    • 長度:定義為 32 個出塊期,相當於 6 分鐘 24 秒。

在儀表板的計票期可以看到兩個數字。左邊的是當下所屬的計票期,右邊的是 敲定(Finalized) 的計票期。

中間會有 準敲定(Justified) 的計票期。

「每個出塊期是精確的 12 秒,那我可以推估信標鏈創世區塊的時間?」特務 K 問。

「對的,是 2020 年 12 月 1 號的 12:00:23 UTC 那個命中註定的時刻」小雨回答。

這個時間點,可以在儀表板中的 第零個區塊 看到。

「其他的數字看起來都很合理,但為什麼那個時間不是整點,而是有 23 秒呢?」

「因為信標鏈創世區塊的產生條件,是在當時算力制的主鏈在整點之後產生的第一個區塊」小雨說「算力制的區塊產出時間沒辦法精確控制,算力制的遺緒因此以那 23 秒的方式一併帶入了無盡的未來之中。」

嫻熟升級歷史的 Ben Edgington 對這段關鍵時刻 有些記載

驗證者

第二組數字和驗證者有關。

「怎麼樣叫一個驗證者呢?你應該沒辦法數人頭對吧?」特務 K 問。

「沒錯!所以要成為『一個』驗證者,必須到存款合約先抵押 32 ETH 的押金,並註冊一把 BLS 公鑰」小雨回答「所以一把公鑰算一個驗證者。」

「BLS 是什麼呢?」

「BLS 是一種聚合簽章機制,他是以太坊押金制能容納眾多驗證者的關鍵,多個驗證者的簽章能被聚集成一個,減少資料傳輸和驗章負擔」小雨說「但名字的來源是三個論文作者的姓氏字首。」

兩人注意到,上線驗證者(Active Validators) 約有 100 萬人。

「為什麼要特別說他是上線的驗證者呢?」

「因為驗證者可能剛押完金,還在排隊等上線,或是正在等提款」小雨說「有另外一篇 鐵人文章 有講驗證者的生命週期。」

兩人注意到,大量的驗證者正在排隊等上線以及排隊等提款。以前這個隊伍是數一次有幾個驗證者能經過,但在今年五月的 Pectra 升級之後,變成隊伍的限制是以金額計算的

押金

最後一組數字則和押金有關。

Staked ETH 顯示總抵押金額為三千五百萬的以太幣。以一顆 4200 美元,一美元 30 台幣換算,大概是 4.5 兆新台幣。台灣 2024 GDP 大概是 25 兆新台幣。

小雨希望他沒多算或少算一些零。

「這麼龐大的一筆金額抵押在區塊鏈上,蠻嚇人的」特務 K 評論。

最後一筆數字是平均餘額:33.45 ETH 。

「每個驗證者雖然抵押 32 ETH ,但因為正確的投票、出塊行為皆有獎勵,所以平均餘額會比 32 ETH 多些」小雨說。


上一篇
一板一眼的電腦
系列文
那個有好多好多節點的電腦調查報告11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言