波卡的隨機性|Polkadot Wiki

買賣虛擬貨幣

加入 PolkaWorld 社羣,共建 Web 3.0!


波卡作為一條 PoS 鏈,隨機性至關重要。波卡的隨機性如何產生?為什麼要選擇這種方案呢?在本章 wiki 中給出了說明。

Polkadot Wiki 是波卡官方文件,PolkaWorld 目前正在翻譯和連載中。

隨機性

在權益證明(PoS)區塊鏈中,隨機性對於驗證人職責的公平且不可預測分配很重要。

計算機並不擅長隨機數,因為它們是確定性裝置(相同的輸入始終會產生相同的輸出)。通常大家在計算機上(例如在遊戲應用程式中)所說的 “隨機數” 實際上是偽隨機的。也就是說,它們依賴於使用者或其他型別的 Oracle(預言機)提供的足夠隨機的種子,例如氣象站的大氣噪聲、你的心律,甚至是熔岩燈,它都可以從中產生一系列看似隨機的數字。但是給定相同的種子,將始終生成相同的序列。

然而,這些輸入將根據時間和空間而變化,而且不可能將相同的結果輸入到全球特定區塊鏈的所有節點中。如果節點獲得不同的輸入並用它來出塊,則會發生分叉。顯然,現實世界的無序狀態不適合用作區塊鏈隨機性的種子。

如今生產環境中有兩種主要的解決區塊鏈隨機性的方法:RANDAO 和 VRF。Polkadot 使用 VRF。

VRF

可驗證隨機函式(VRF)是一種數學運算,需要一些輸入併產生一個隨機數以及該提交者生成該隨機數的真實性證明。任何挑戰者都可以驗證該證明,以確保隨機數生成有效。

Polkadot 中使用的 VRF 與 Ouroboros Praos 中使用的 VRF 大致相同。Ouroboros 的隨機性對於出塊來說是安全的,並且對於 BABE 也執行得很好。它們的不同之處在於,Polkadot 的 VRF 不依賴於中央時鐘(問題變成了 “誰控制中央時鐘?”),而是取決於它自己的過去結果來確定現在和將來的結果,並且它使用時隙號(slot number)作為時鐘模擬器來估計時間。

具體操作如下:

時隙(slots)是時間的離散單位,長度為六秒。每個時隙可以包含一個塊,但也可以不包含一個塊。時隙構成了時期(epochs)—— 在Polkadot上,2400個時隙構成了一個時期,即每個時期為 4 小時。

在每個時隙中,每個驗證人都會 “擲骰子”。他們執行將以下內容作為輸入的函式(VRF):

  • 金鑰 - 專門為 “擲骰子” 製作的鑰匙

  • Epoch 隨機值 - 上一個(N-2) 之前的 epoch 中各個塊的 VRF 值的雜湊值,因此過去的隨機性會對當前的待確認隨機性(N)產生影響

  • 時隙數(slot number)

輸出為兩個值:RESULT(隨機值)和 PROOF(證明隨機值已正確生成的證明)。

然後將 RESULT 與在協議(具體來說是在 Polkadot Host 中)的實現中定義的閾值進行比較。如果該值小於閾值,那麼得出此數字的驗證人將是該插時隙的可行出塊候選者。然後,驗證人嘗試建立一個塊,並將該塊與先前獲得的 PROOF 和 RESULT 一起提交到網路中。

釣魚人(fisherman)- 監視網路的收集人和驗證人錯誤行為的節點,將驗證中繼鏈區塊。由於非法投擲將產生非法區塊,並且由於釣魚人將在驗證人產生的每個區塊中訪問 RESULT 和 PROOF,因此他們很容易自動報告作弊的驗證人。

總結一下:在 VRF 下,每個驗證人都會為自己擲出一個數字,並根據閾值對其進行檢查,如果隨機擲出的骰子低於該閾值,則會生成一個區塊。觀察網路並報告不良行為的釣魚人事後會驗證這些投擲的有效性,並向系統報告任何作弊行為(例如,有人儘管擲出的數量超過閾值,但仍然假裝成出塊者)。

精明的讀者會注意到,由於這種工作方式,某些時隙可能沒有驗證人作為出塊候選者,因為所有驗證人候選者的得分都太高而錯過了閾值。我們闡明瞭如何解決此問題,並確保與 Wiki 頁面的共識部分 的 Polkadot 出塊時間保持幾乎一致。

RANDAO

另一種獲取鏈上隨機性的方法是以太坊的 RANDAO 方法。RANDAO 要求每個驗證人透過對某些種子執行數千個雜湊來進行準備。之後驗證人在回合中釋出最終的雜湊值,並且從每個參與者進入遊戲中得出隨機數。只要一名誠實的驗證人參加,隨機性就被認為是安全的(在經濟上進行攻擊不可行)。

RANDAO 可以選擇使用 VDF 進行增強。

VDFs

可驗證延遲函式( Verifiable Delay Functions )是指即使在平行計算機上也要花費規定時間才能完成的計算。它們產生獨特的輸出,可以公用共設定獨立有效地對其進行驗證。透過將 RANDAO 的結果輸入 VDF,會引入延遲,從而使任何攻擊者企圖影響當前隨機性的嘗試都將過時。

VDF 一般需要透過 ASIC 裝置來實現,這類裝置需要與其他型別的節點分開執行。儘管只有一臺就足以保證系統的安全,並且它們將是開源的並且幾乎免費分發,但是執行這類裝置既不便宜也不受激勵,對於選擇這種方法的區塊鏈使用者而言將產生不必要的摩擦。

擴充套件資料

  • Polkadot 在隨機數和抽籤上的研究 - 包含了在證明機制之間作出選擇的理由:

    https://research.web3.foundation/en/latest/polkadot/BABE/Babe.html

  • 關於 Pokadot 中用到的隨機數的討論 - W3F 研究員討論波卡中的隨機性及其使用場景和假設:

    https://github.com/paritytech/ink/issues/57

原文:

https://wiki.polkadot.network/docs/en/learn-randomness

翻譯:PolkaWorld

作者:Polkadot,來源:PolkaWorld

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读