在本文中,我們將討論隨機數(random numbers)以及如何在以太坊 2.0 中實現隨機性。什麼是 RANDAO?什麼是 VDF (可驗證延遲函數)?它們又是如何相互配合的?信標鏈(beacon chain)如何決定輪到哪些驗證者(validator)來提議區塊,以及哪些驗證者應該對該提議進行證明(attest)?在以太坊 2.0 系統中的 1,024 條分片鏈和成千上萬名活躍驗證者之間,信標鏈是如何在任何特定時間做出這一決定的呢? 這就需要隨機性(randomness)!

關於隨機性的文章,鏈聞先前也有收錄。文章《硬核:區塊鏈上的隨機數,直接決定公鏈是否可信》主要講解了隨機性的基本概念,以及主流公鏈所採用的隨機性協議;文章《決定公鏈是否可信的隨機數,Wanchain 究竟是怎樣生成的?》講解了 Wanchain 星系共識隨機性的生成機制。

原文標題:《Two Point Oh: Randomness》
原文作者:Bruno Škvorc
翻譯、校對:Jhonny (Unitimes) & 阿劍(ETHfans)

計算機中的隨機性

以太坊隨機數生成機制:RANDAO 與 VDF 的完美結合

計算機是無法生成真正的隨機數的

你可以這麼來理解:計算機(computer)是一種機器,給定相同的輸入,總是會生成相同的輸出。它們就是計算的機器,就好像一臺計算器在 2 與 2 相加時不會得出 5 一樣(除非是惡作劇或機器受到嚴重損壞)。

爲了生成一個可靠的隨機數,計算機將依賴於 seed (種子):我們把這個值當成計算過程的輸入值,當作計算的起點,計算完成後就可以得到一個隨機的輸出值。種子可以是屏幕上鼠標光標的移動,也可以是維基百科數據庫的所有內容。用種子來執行運算之後,我們就可以得到一個無法提前預知的數值(即隨機數)。

現在,如果你訪問 BitAddress 網站(開源的 JavaScript 比特幣錢包工具),當你移動鼠標時,你會注意到「seed」將相應地發生變化。也就是說,網站正是通過你的鼠標的不規則移動來「收集隨機性」,見下圖:

以太坊隨機數生成機制:RANDAO 與 VDF 的完美結合備註:繼續移動鼠標,當圖中的百分比達到 100% 時,就可以生成一個比特幣錢包

但是,如果我們總是對生成的種子做同樣的數學操作,又怎麼能稱結果爲「隨機」的呢?關鍵在於,當足夠多的難以重複的種子放在一起時,得到的隨機數就會是相當隨機的:人們是無法在一個 500 萬像素屏幕區域重複完全一樣的鼠標運動軌跡的,因此這在某種程度上是可靠的(校對注:這就是「隨機性」的定義之一「不可復現性」)。如果再加上一些其他的數值,比如日期,或者像 Cloudflare 那樣使用熔岩燈產生僞隨機數(見下圖),也許還有某個運動隊當年進球的次數,這樣你就得到了一個相當隨機的種子(seed)。

區塊鏈中的隨機性

但是區塊鏈中沒有鼠標、傳感器或者運動比賽結果預測。更重要的是,即使一個節點得出了某個隨機數,網絡中的所有其他節點必須得出同樣的隨機數,否則該條鏈將分裂。那麼區塊鏈是如何來處理這個問題的呢?

一些區塊鏈依賴區塊哈希(block hash)來產生隨機性。因爲區塊哈希值不可預知、隨機性很強,但在所有節點上都是相同的,所以對於基本可證明公平的賭博來說,哈希值可以作爲隨機性的來源。

以太坊隨機數生成機制:RANDAO 與 VDF 的完美結合

然而,如果區塊獎勵少於礦工操縱區塊哈希所能獲得的獎勵,那對他們來說,操縱哈希值在經濟上是完全理性的。更嚴重的是,在權益證明(PoS)系統中,由於生成一個區塊幾乎不需要計算時間或能量,礦工(驗證者)可以很容易地連續生成數千個區塊,直到獲得一個他們喜歡的哈希值,然後提交這個哈希值。

在使用隨機數來選擇驗證者的語境中,道理也是一樣的。如果區塊哈希作爲種子來生成隨機數並選擇驗證者,而當前負責生產區塊的驗證者又能操作區塊哈希讓自己(或由自己控制的另一個驗證者客戶端)再次成爲區塊生產者,那麼他等於可以一直提議區塊,將其它驗證者拒之於提議區塊的獎勵之外!

顯然,我們需要更強勁的區塊鏈隨機性,以太坊 2.0 系統更是如此!

簡單概述 RANDAO

想象一下,如果房間裏面有很多人,每個人都在腦海中想象一個數字。想要得到一個隨機數的話,我們只需要求這些人一個接一個地大聲說出他們的數字。所有這些數相加之和就是一個隨機數。

以太坊隨機數生成機制:RANDAO 與 VDF 的完美結合

RANDAO 的本質就是如此。RANDAO 機制就是,當用戶通過儲存(質押) 32 ETH 成爲驗證者之後,該用戶可以任意選定一個隨機數。當需要爲某個區塊公佈隨機數時,將所有驗證者的隨機數加起來就可以得到一個全新的隨機數。

備註:上面的過程只是簡化過程,本文將不詳細論述。如果需要關於以太坊 2.0 RANDAO 這方面的專門文章,請通過 Twitter
告知作者(@bitfalls)。

但即使在這種情況下,最後一個公開隨機數的人也可以在一定程度上操縱隨機數。最後一個人可以選擇保持沉默,以這樣或那樣的方式改變這個最終的隨機數:房間裏的最後一個人可以記住之前每個人公佈的數字,如此一來,就可以知道加上(或者不加上)他提供的數字之後的最終隨機數結果。如果相對於其他數字,某個數字對最後一個人更有利,那最後一個人就有動機去進行某種程度的操縱,不管程度高低。

對於這一問題,以太坊 2.0 將通過 VDF (可驗證延遲函數)來解決!

RANDAO + VDF

VDF 全稱爲 Verifiable Delay Function (可驗證延遲函數)。

其言外之意就是此類行數需要花很長時間來進行計算。

比如,對數字 X 來說,一種 VDF 可以是 X 的連續 6 次平方:

((((((X^2)^2)^2)^2)^2)^2)^2

假如 X=5,那麼最終結果就是:

((((((5^2)^2)^2)^2)^2)^2)^2 =(((((25^2)^2)^2)^2)^2)^2 =((((625^2)^2)^2)^2)^2 =(((390625^2)^2)^2)^2 =((152587890625^2)^2)^2 =(23283064365386962890625^2)^2 =542101086242752217003726400434970855712890625^2 =293873587705571876992184134305561419454666389193021880377187926569604314863681793212890625

隨着計算的繼續,計算的結果將越來越大。一個複雜的 VDF 將需要花費很長的時間才能計算出來,因爲對於任何計算機來說,其計算過程都是非常複雜的。這個例子來源於一個真實的 VDF,直到現在它還是在 MIT 的一個時間膠囊密碼學謎題的一部分,該 VDF 用了 80 萬億次平方。

那麼這有什麼意義呢?

首先,在計算最終數字時的延遲(delay)是可以 驗證的,我們知道哪些計算機操作是達到結果所必需的,並且能夠以合理的精確度確定機器達到結果所需要的時間。

其次,如果要計算出第三級結果,那計算機就 必須 先計算出第一級和第二級的結果 —— 我們無法在多臺計算機上並行地進行此計算,因爲每個新的輸入都依賴於之前的輸出,而且每個輸出都需要預先確定的計算時間。

如果現在我們用 RANDAO 中的隨機數來代替上方 VDF 例子中的數字 X,且如果函數的指數不是 6 而是好幾千,並且函數不是使用平方(^2)而是更復雜的函數,那麼我們將得到一個完全不同的函數,這個函數會將 RANDAO 的結果轉變成另一個完全不一樣的隨機數,而且要計算出這個結果將需要花上一段時間,不管你擁有多少臺電腦。

以太坊隨機數生成機制:RANDAO 與 VDF 的完美結合

通過引入這種延遲,並使計算的時間要長於驗證者可以通過影響某個隨機數而獲得利益的時間,我們就可以消除最後一級的隨機性偏差 —— 即消除單個驗證者可以對 RANDAO 結果產生的最後一點操控。

在以太坊 2.0 階段,這個 VDF 被定義爲 102 分鐘時長 —— 超過了一個半小時。當前以太坊基金會正與 Filecoin 等區塊鏈項目合作,資助開發一種針對此計算優化的開源 ASIC —— 這是一種專門用來進行這種計算的微型計算機。該機器將由愛好者、加密貨幣項目和其他區塊鏈平臺甚至驗證者來運行,它具有一個小優勢,可以第一時間響應 VDF 檢查,而且不需要比一般的微型計算機全節點更高的電力成本。

這樣一種高度專業化的機器確保了任何其他試圖對 RANDAO 重獲最後一點影響的人,都必須開發出比當前的 ASIC 效率高 100 倍的機器。開發這種設備將耗資巨大,除非真有某種一本萬利的用途;而如果能開發出來的話,幾乎可以完全摧毀以太坊。

在以太坊 2.0 階段,每 6.4 分鐘稱爲一個時間段(epoch)。每經過一個 epoch, RAODAO 就揭曉一次,同時這也意味着每過一個 epoch 我們就得運行一個新的 VDF。每個 VDF 的週期是 102.4 分鐘,因此總會有 16 個 VDF 同時運行。VDF 得到的結果即作爲隨機性種子,用來選定下一組驗證者,保證公平性。

Nimbus 中的隨機性

以太坊隨機數生成機制:RANDAO 與 VDF 的完美結合

在 Nimbus 客戶端中,我們與以太坊 2.0 技術規範保持一致。我們的 RANDAO 實現已經符合以太坊 2.0 規範的 0.5.1 版本。我們需要確保我們的測試與官方測試相匹配。

現在談論 VDF 還爲時過早。VDF 還處於研究階段,而且它被添加到規範中之後,客戶端也還需要一段時間才能趕上它。我們必須設計出與遠程 VDF 設備通信的方法、對 staking (質押)獎勵進行輕微修改,使其更偏向於運行 VDF 的區塊生產者,等等。現在,鑑於 RANDAO 對於以太坊的早期需求來說已經夠用了,它將作爲混洗驗證者和提供其他隨機性的基礎層。

結語

以太坊 2.0 將每隔 6.4 分鐘生成一個可靠的隨機數,該隨機數的隨機性足以確保鉅額價值的安全。

只有當某人搭建的 VDF ASIC 的效率比以太坊社區提供的任何 ASIC 都高 100 倍,或者當全球所有的 VDF ASIC 都離線時,以太坊的 VDF 纔會失敗。即便真的出現了這種情形,底層的 RANDAO 所帶來安全性也能將影響降到最小,使以太坊足以保證鏈上財富的安全。

來源鏈接:our.status.im