一文了解信標鏈的創世
作者|
至於以太坊2.0,Medalla測試網Medalla測試網
Medalla測試網Eth2 annotated specMedalla測試網
已經在8月4日上線,這很可能是我們今年下半年唯一一次在以太坊2.0發布前的正式彩排。
Eth2的創世機制說來有點複雜,創世是一個區塊鏈系統為自身注入生命的過程。我將用淺顯易懂的語言盡可能準確地講解它。至於真正技術上的說明,讀者可以在
上看我的註釋。
在下文,“創世事件”指代信標鏈啟動並開始處理證明和區塊的確切時間。也是slot 0 epoch 0開始的時間。Launchpad(如果讀者想看速覽的話,可以直接跳到後文“創世的兩種情況”部分)
驗證者存款
首先,讀者需要知道的一點背景知識是驗證者在加入Eth2前需要將存款存進Eth1區塊鏈上的合約裡。對於每個Eth2的驗證者來說,他們需要將32個ETH和其他一些數據發送到合約。例如,讀者可以通過
網站發送存款和數據到Medalla測試網。請記住Medalla現在在用Goerli測試網的ETH!不要發送主網的ETH到合約。當然,到了真正的信標鏈發布的時候,我們會用主網的ETH。
接下來,我們只關心有效存款:不少於32個ETH的單筆存款,或屬於同一個驗證者的、總計不少於32個ETH的多筆存款,為此需要額外的數據驗證(加密簽名)。任何無效或不足的存款都將在創世中被忽略不計
信標節點14 * 1024在創世前,在Eth2鏈上活躍的只有信標節點;在創世後,驗證者會馬上活躍起來。信標節點維持著系統的狀態,並在點對點的網絡里相互通信。
因此,在創世前,有大量的信標節點關注著以太坊1.0區塊鏈,留意著存款合約上的有效存款。他們不需要24小時留意,因為Eth1的區塊都被打上時間戳,因此節點可以在創世前的任何時間跟進最新情況。
現在,大家都知道Eth1的區塊可以回滾,且可以改變主意,決定哪些交易是有效的。這就是為什麼你在交易所轉入ETH時需要等待30個區塊的時間。回滾的範圍通常非常小——大約一到兩個區塊;但一旦遇到網絡攻擊,回滾的範圍可以變很大。為了盡量避免在Eth2上出現這種情況,我們在同步Eth1鏈上數據時非常謹慎地保持
秒的延遲,大概是4小時。我把這稱為Eth1的同步距離(Eth1 follow distance)
什麼時候?誰?
關於創世的兩個問題“什麼時候?”和“誰?”:什麼時候開始,和誰會在創世塊驗證者大軍裡。這兩個問題的答案定義著信標鏈的創世狀態,所有其他的狀態都由此衍生開來。
大致的過程如下:
關注Eth1區塊鏈上的存款情況
當經歷了足夠長的時間和存款達到一定數量時,創建創世狀態
兩天后,在創世時間啟動區塊鏈
在第2步,我們在尋找Eth1上第一個區塊時需要特別注意兩點:
是否有足夠的存款;
MIN_GENESIS_TIME時間是否太早。1596546000符合這兩個條件的第一個區塊將被設為創世狀態。
GENESIS_DELAY是創世事件可以發生的最早時間。對Medalla來說,就是172800是
MIN_GENESIS_ACTIVE_VALIDATOR_COUNTUnix time——2020年8月4日UTC時間13:00:00,採用RFC2822規範。16384是
秒,48小時整。這是創建創世狀態和區塊鏈與創世事件啟動之間的時間間隔。這段延遲是為了讓客戶端團隊將創世狀態寫進他們的信標節點裡,這樣即使他們不運行驗證者節點也不再需要關注Eth1的區塊鏈。這也為舉辦一般的創世事件直播和聚會活動預留時間。
是在創建創世狀態前我們在Eth1的存款合約裡所需的最低有效驗證者數量。在Medalla測試網(和主網),這個參數是
個驗證者。
創世的兩種情況
創世狀態時基於滿足以下兩個條件的第一個Eth1區塊:
創世狀態所基於的第一個Eth1區塊需要滿足以下兩個條件:
至少有16384 (MIN_GENESIS_ACTIVE_VALIDATOR_COUNT) 個驗證者已經在這個或之前的區塊上進行了註冊;以及
它的時間戳不會太早(不早於MIN_GENESIS_TIME – GENESIS_DELAY這段時間)。
根據這兩個要求得到滿足的順序,創世過程會以下面兩種情況進行:
存款數先得到滿足
在這種情況下,條件1先得到滿足。我們在最早創世時間前收到的足夠的存款。
Medalla測試網在MIN_GENESIS_TIME – GENESIS_DELAY間的時間點是周日8月2日UTC 1300。
我們的啟動區塊是這個時間後挖到的第一個Eth1上的區塊,也就是在13:00:05挖到的(1pm後的5秒)。
請注意,由於Eth同步距離,我們直到4小時後才真正知道創世狀態。也就是說,在這種情況下,我們在8月2日週日UTC1700知道Medalla的創世狀態。
總結
總結
總結
總結
如果存款數額首先滿足要求,那麼創世事件會在最早創世時間後幾秒啟動。創世狀態包含這個時間點48小時以前的所有註冊了的驗證者。
2.時間戳滿足條件早於存款數
這種情況在條件2先得到滿足的時候發生。存款數增長緩慢,且沒有在預定時間內達到最低有效數額。
在這種情況下,打包第16384筆存款的Eth1區塊成為啟動區塊。我們假設這個區塊是在8月5日週三UTC 12:34:56被挖到的。
創世時間將會是該區塊的時間戳加48小時。在這個例子裡,就是8月7日週五UTC 12:34:56。
總結
如果存款增長慢,在包含第16384筆存款的Eth1區塊被挖出48小時,創世事件會啟動。創世狀態包含16834個驗證者,加上在同一個Eth 1區塊裡的其他一些驗證者。
結論
結論
結論
文章寫到這裡,大家是不是已經了解了信標鏈創世的基本情況?
聲明:ECN的翻譯工作旨在為中國以太坊社區傳遞優質資訊和學習資源,文章版權歸原作者所有,轉載須註明原文出處以及ethereum.cn,若需長期轉載,請聯繫ethereumcn@gmail.com進行授權。


