時間:2023-07-29|瀏覽:298
PolkadotWiki是波卡官方文檔,PolkaWorld目前正在翻譯和連載中。
## 隨機性
在權益證明(PoS)區(qū)塊鏈中,隨機性對于驗證人職責的公平且不可預測分配很重要。
計算機并不擅長隨機數(shù),因為它們是確定性設備(相同的輸入始終會產(chǎn)生相同的輸出)。通常大家在計算機上(例如在游戲應用程序中)所說的“隨機數(shù)”實際上是偽隨機的。也就是說,它們依賴于用戶或其他類型的Oracle(預言機)提供的足夠隨機的種子,例如氣象站的大氣噪聲、你的心律,甚至是熔巖燈,它都可以從中產(chǎn)生一系列看似隨機的數(shù)字。但是給定相同的種子,將始終生成相同的序列。
然而,這些輸入將根據(jù)時間和空間而變化,而且不可能將相同的結果輸入到全球特定區(qū)塊鏈的所有節(jié)點中。如果節(jié)點獲得不同的輸入并用它來出塊,則會發(fā)生分叉。顯然,現(xiàn)實世界的無序狀態(tài)不適合用作區(qū)塊鏈隨機性的種子。
如今生產(chǎn)環(huán)境中有兩種主要的解決區(qū)塊鏈隨機性的方法:RANDAO和VRF。Polkadot使用VRF。
## VRF
可驗證隨機函數(shù)(VRF)是一種數(shù)學運算,需要一些輸入并產(chǎn)生一個隨機數(shù)以及該提交者生成該隨機數(shù)的真實性證明。任何挑戰(zhàn)者都可以驗證該證明,以確保隨機數(shù)生成有效。
Polkadot中使用的VRF與OuroborosPraos中使用的VRF大致相同。Ouroboros的隨機性對于出塊來說是安全的,并且對于BABE也運行得很好。它們的不同之處在于,Polkadot的VRF不依賴于中央時鐘(問題變成了“誰控制中央時鐘?”),而是取決于它自己的過去結果來確定現(xiàn)在和將來的結果,并且它使用時隙號(slotnumber)作為時鐘仿真器來估計時間。
具體操作如下:
時隙(slots)是時間的離散單位,長度為六秒。每個時隙可以包含一個塊,但也可以不包含一個塊。時隙構成了時期(epochs)——在Polkadot上,2400個時隙構成了一個時期,即每個時期為4小時。
在每個時隙中,每個驗證人都會“擲骰子”。他們執(zhí)行將以下內容作為輸入的函數(shù)(VRF):
- 密鑰-專門為“擲骰子”制作的鑰匙 - Epoch隨機值-上一個(N-2)之前的epoch中各個塊的VRF值的哈希值,因此過去的隨機性會對當前的待確認隨機性(N)產(chǎn)生影響 - 時隙數(shù)(slotnumber)
輸出為兩個值:RESULT(隨機值)和PROOF(證明隨機值已正確生成的證明)。
然后將RESULT與在協(xié)議(具體來說是在PolkadotHost中)的實現(xiàn)中定義的閾值進行比較。如果該值小于閾值,那么得出此數(shù)字的驗證人將是該插時隙的可行出塊候選者。然后,驗證人嘗試創(chuàng)建一個塊,并將該塊與先前獲得的PROOF和RESULT一起提交到網(wǎng)絡中。
釣魚人(fisherman)-監(jiān)視網(wǎng)絡的收集人和驗證人錯誤行為的節(jié)點,將驗證中繼鏈區(qū)塊。由于非法投擲將產(chǎn)生非法區(qū)塊,并且由于釣魚人將在驗證人產(chǎn)生的每個區(qū)塊中訪問RESULT和PROOF,因此他們很容易自動報告作弊的驗證人。
總結一下:在VRF下,每個驗證人都會為自己擲出一個數(shù)字,并根據(jù)閾值對其進行檢查,如果隨機擲出的骰子低于該閾值,則會生成一個區(qū)塊。觀察網(wǎng)絡并報告不良行為的釣魚人事后會驗證這些投擲的有效性,并向系統(tǒng)報告任何作弊行為(例如,有人盡管擲出的數(shù)量超過閾值,但仍然假裝成出塊者)。
精明的讀者會注意到,由于這種工作方式,某些時隙可能沒有驗證人作為出塊候選者,因為所有驗證人候選者的得分都太高而錯過了閾值。我們闡明了如何解決此問題,并確保與Wiki頁面的共識部分的Polkadot出塊時間保持幾乎一致。
## RANDAO
另一種獲取鏈上隨機性的方法是以太坊的RANDAO方法。RANDAO要求每個驗證人通過對某些種子執(zhí)行數(shù)千個哈希來進行準備。之后驗證人在回合中發(fā)布最終的哈希值,并且從每個參與者進入游戲中得出隨機數(shù)。只要一名誠實的驗證人參加,隨機性就被認為是安全的(在經(jīng)濟上進行攻擊不可行)。
RANDAO可以選擇使用VDF進行增強。
## VDFs
可驗證延遲函數(shù)(VerifiableDelayFunctions)是指即使在并行計算機上也要花費規(guī)定時間才能完成的計算。它們產(chǎn)生獨特的輸出,可以公用共設置獨立有效地對其進行驗證。通過將RANDAO的結果輸入VDF,會引入延遲,從而使任何攻擊者企圖影響當前隨機性的嘗試都將過時。
VDF一般需要通過ASIC設備來實現(xiàn),這類設備需要與其他類型的節(jié)點分開運行。盡管只有一臺就足以保證系統(tǒng)的安全,并且它們將是開源的并且?guī)缀趺赓M分發(fā),但是運行這類設備既不便宜也不受激勵,對于選擇這種方法的區(qū)塊鏈用戶而言將產(chǎn)生不必要的摩擦。
[擴展資料](https://research.web3.foundation/en/latest/polkadot/BABE/Babe.html)
關注PolkaWorld 發(fā)現(xiàn)Web3.0
熱點:DOT