作者:Ben Edgington
人生中能見證龐大的、分散式的多客戶端區塊鏈創世的機會是非常難得的。不久前的7月30日是以太坊1.0區塊鏈創世的五周年——真正重大的創世事件很罕見且相隔甚遠。
至於以太坊2.0,Medalla測試網已經在8月4日上線,這很可能是我們今年下半年唯一一次在以太坊2.0發布前的正式綵排。
Eth2的創世機制說來有點複雜,創世是一個區塊鏈系統為自身注入生命的過程。我將用淺顯易懂的語言儘可能準確地講解它。至於真正技術上的說明,讀者可以在Eth2 annotated spec上看我的注釋。
在下文,「創世事件」指代信標鏈啟動並開始處理證明和區塊的確切時間。也是slot 0 epoch 0開始的時間。
(如果讀者想看速覽的話,可以直接跳到後文「創世的兩種情況」部分)
驗證者存款
首先,讀者需要知道的一點背景知識是驗證者在加入Eth2前需要將存款存進Eth1區塊鏈上的合約里。對於每個Eth2的驗證者來說,他們需要將32個ETH和其他一些數據發送到合約。
例如,讀者可以通過Launchpad網站發送存款和數據到Medalla測試網。請記住Medalla現在在用Goerli測試網的ETH!不要發送主網的ETH到合約。當然,到了真正的信標鏈發布的時候,我們會用主網的ETH。
接下來,我們只關心有效存款:不少於32個ETH的單筆存款,或屬於同一個驗證者的、總計不少於32個ETH的多筆存款,為此需要額外的數據驗證(加密簽名)。任何無效或不足的存款都將在創世中被忽略不計。
信標節點
在創世前,在Eth2鏈上活躍的只有信標節點;在創世後,驗證者會馬上活躍起來。信標節點維持著系統的狀態,並在點對點的網路里相互通信。
因此,在創世前,有大量的信標節點關注著以太坊1.0區塊鏈,留意著存款合約上的有效存款。他們不需要24小時留意,因為Eth1的區塊都被打上時間戳,因此節點可以在創世前的任何時間跟進最新情況。
現在,大家都知道Eth1的區塊可以回滾,且可以改變主意,決定哪些交易是有效的。這就是為什麼你在交易所轉入ETH時需要等待30個區塊的時間。回滾的範圍通常非常小——大約一到兩個區塊;但一旦遇到網路攻擊,回滾的範圍可以變很大。為了盡量避免在Eth2上出現這種情況,我們在同步Eth1鏈上數據時非常謹慎地保持14 * 1024秒的延遲,大概是4小時。我把這稱為Eth1的同步距離 (Eth1 follow distance)。
什麼時候?誰?
關於創世的兩個問題「什麼時候?」和「誰?」:什麼時候開始,和誰會在創世塊驗證者大軍里。這兩個問題的答案定義著信標鏈的創世狀態,所有其他的狀態都由此衍生開來。
大致的過程如下:
★ 關注Eth1區塊鏈上的存款情況
★ 當經歷了足夠長的時間和存款達到一定數量時,創建創世狀態
★ 兩天後,在創世時間啟動區塊鏈
在第2步,我們在尋找Eth1上第一個區塊時需要特別注意兩點:
★ 是否有足夠的存款;
★ 時間是否太早。
符合這兩個條件的第一個區塊將被設為創世狀態。
時間和角色的受以下三個關鍵參數設置的影響:
★ MIN_GENESIS_TIME 是創世事件可以發生的最早時間。對Medalla來說,就是1596546000 Unix time——2020年8月4日UTC時間13:00:00,採用RFC2822規範。
★ GENESIS_DELAY 是172800秒,48小時整。這是創建創世狀態和區塊鏈與創世事件啟動之間的時間間隔。這段延遲是為了讓客戶端團隊將創世狀態寫進他們的信標節點裡,這樣即使他們不運行驗證者節點也不再需要關注Eth1的區塊鏈。這也為舉辦一般的創世事件直播和聚會活動預留時間。
★ MIN_GENESIS_ACTIVE_VALIDATOR_COUNT 是在創建創世狀態前我們在Eth1的存款合約里所需的最低有效驗證者數量。在Medalla測試網(和主網),這個參數是16384個驗證者。
創世的兩種情況
創世狀態所基於的第一個Eth1區塊需要滿足以下兩個條件:
★ 至少有16384 (MIN_GENESIS_ACTIVE_
VALIDATOR_COUNT) 個驗證者已經在這個或之前的區塊上進行了註冊;以及
★ 它的時間戳不會太早 (不早於MIN_GENESIS_TIME - GENESIS_DELAY這段時間)。
根據這兩個要求得到滿足的順序,創世過程會以下面兩種情況進行:
1.存款數先得到滿足
在這種情況下,條件1先得到滿足。我們在最早創世時間前收到的足夠的存款。
Medalla測試網在MIN_GENESIS_TIME - GENESIS_DELAY間的時間點是周日8月2日UTC 1300。
我們的啟動區塊是這個時間後挖到的第一個Eth1上的區塊,也就是在13:00:05挖到的(1pm後的5秒)。
如果截止到該區塊存款合約收到的有效存款達到或超過16384筆,那麼至今收到的所有存款都會包含在創世狀態里。因此,驗證者數量可能會遠超出16384(在Altona測試網上,我們將MIN_GENESIS_ACTIVE_VALIDATOR_COUNT設為640,但結果有685個創世驗證者)
這個Eth1區塊啟動創世狀態的運算,而Medalla的創世事件將在區塊時間戳的48小時整後開始。在這個例子里,就是8月4日周二的13:00:05。
紅色區塊是滿足兩個條件的第一個Eth1區塊
請注意,由於Eth同步距離,我們直到4小時後才真正知道創世狀態。也就是說,在這種情況下,我們將在8月2日周日UTC1700知道Medalla的創世狀態。總結
如果存款數額首先滿足要求,那麼創世事件會在最早創世時間後幾秒啟動。創世狀態包含這個時間點48小時以前的所有註冊了的驗證者。
2.時間戳滿足條件早於存款數
這種情況在條件2先得到滿足的時候發生。存款數增長緩慢,且沒有在預定時間內達到最低有效數額。
在這種情況下,打包第16384筆存款的Eth1區塊成為啟動區塊。我們假設這個區塊是在8月5日周三UTC 12:34:56被挖到的。
現在,區塊狀態將包含16384個驗證者和在那個區塊里任何其他有效的存款。因此,如果那個區塊包含多筆存款的話,那麼將會有比最低存款數更多的驗證者包含在內。
創世時間將會是該區塊的時間戳加48小時。在這個例子里,就是8月7日周五UTC 12:34:56。
紅色的區塊是滿足兩個要求的第一個Eth區塊
同樣,由於Eth1同步距離,直到這個Eth1區塊被挖出的4小時後我們才知道創世狀態或創世時間。總結
如果存款增長慢,在包含第16384筆存款的Eth1區塊被挖出48小時,創世事件會啟動。創世狀態包含16834個驗證者,加上在同一個Eth 1區塊里的其他一些驗證者。
結論
文章寫到這裡,大家是不是已經了解了信標鏈創世的基本情況??
如果你沒趕上Medalla創世狀態的敲定,那麼你的驗證者將會按照存款時間順序進入排隊隊伍,並在創世後被慢慢安排到驗證者集里。排隊可能會花上幾個小時或幾天的時間。
期待在Medalla上見到你們!
冷萃財經原創,作者:Awing,轉載請註明出處:https://www.lccjd.top/2020/08/07/%e4%b8%80%e6%96%87%e8%af%a6%e8%a7%a3%e4%bf%a1%e6%a0%87%e9%93%be%e7%9a%84%e5%88%9b%e4%b8%96/?variant=zh-tw
文章評論