礦工如何在 Proof Of Stake 中被選中?
我正在嘗試了解 POS。我知道 POS 使用的貨幣類似於 POW 系統中的雜湊算力。我們擁有的股份越多,我們開採區塊的機會就越大。在我讀到的各種來源中,礦工是確定性地選擇的。
有人可以解釋一下,礦工選擇是如何發生的。以及每個人如何就同一個礦工達成一致,必須涉及一些算法。
這裡提到了很多:https ://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ 但是,我似乎找不到我的查詢的答案。
不同幣種的 Staking 鑄幣算法不同;例如,BlackCoin 與 Cardano 不同。
有幾種 Staking 方法,但其中大多數都容易受到“研磨攻擊”的影響,而且幾乎沒有一種方法被證明可以抵御所有攻擊(僅通過顯示某些特定攻擊不起作用來直覺地證明安全)。
為了具體回答您的問題,我將描述一個被證明是安全的股權證明協議的具體案例:Ouroboros Praos協議。
在 Praos 協議中,您可以想像每個 satoshi 對應一個公鑰/私鑰對。用於質押的 Praos 協議的工作原理如下:如果您是誠實質押者,則查看目前日期和時間並將其四捨五入到最接近的秒(您將其四捨五入的時間單位通常是可配置的,並且對應於同步的“槽” ”協議)。比如說,你得到
d = "2018-07-01 00:19:24"
. 您將該日期和時間作為輸入,並使用與您的 satoshi 對應的私鑰對其進行簽名,從而獲得簽名s
。然後,您將該簽名與難度目標T
進行比較,看看是否s <= T
,類似於比特幣如何將塊雜湊與難度進行比較。如果是,那麼您已被“選舉為領導者”,並且您可以生成一個塊。您首先生成x
由記憶體池中的交易以及指向前一個塊的指針組成的塊內容。然後,您x
使用您的公鑰進行簽名,並生成另一個簽名s'
。然後,您向網路廣播您的簽名s
,說明您已當選;選舉確認的目前日期和時間d
;已確認的交易x
,其中還包括對前一個區塊的引用;以及您在區塊內容上的簽名s'
。元組(s, d, x, s')
是塊。現在,其他驗證者可以檢查您是否是合法當選的領導者。他們檢查那
s
是 的簽名d
,那s'
是 的簽名x
,x
包含有效交易並指向前一個區塊鏈的尖端(具有較舊的時間戳和非衝突交易)。最後,他們必須驗證您是否符合目標:s
必須低於T
。這是一個非常簡單的協議,但令人驚訝的是,它可以被證明是安全的。這就是它優雅的原因。這也與比特幣生成區塊的方式非常相似。如果你對為什麼這個協議是安全的感興趣,我鼓勵你閱讀這篇論文。
一些細節:
- 不良行為者有可能在他們被選為領導者的同一日期時間生成多個塊內容。這不會造成問題,因為誠實的各方只會生成送出到一個較舊區塊的區塊,從而打破平局。
- 兩個誠實方可能同時生成一個塊。這不是問題,也可能發生在比特幣中。只要調整協議參數以不允許塊在插槽之間經常出現,這種關係就會得到解決(確切的參數在論文中指定)
- 我上面說
s
的是目前時間的“簽名”d
,但技術要點是它不是簽名,實際上是我們所說的VRF - Verifiable Random Function。這就像一個簽名,除了它保證輸出行為像一個隨機輸出(例如一個完美的雜湊行為像一個“隨機預言”)。