數字貨幣挖礦的「運氣」本質上是一種概率事件。想像一下,每個礦工都得到了一張彩票,以獲取他們提供的一定量的哈希算力。為了便於說明,假設您提供了1 EH/s的哈希算力,而網絡中的總哈希算力是100 EH/s,那麼您將獲得100張彩票其中的1張,即中獎概率是1%。所以每發現100個區塊,按照統計學計算你也會找到其中的1個區塊。
上面的描述應該使你有一個基本了解,但是如果你想深入了解它,請繼續閱讀以下內容!
一個礦池是由一組礦工組成,礦工共同努力以減少回報的波動性。礦工通過網絡共享他們的處理能力,然後根據他們為找到區塊所做的工作量來分配獎勵,並向礦池運營商收取費用。
當挖礦難度增加到小礦商可能需要耗費數年才能自己找到一個區塊時,加入礦池便成為一種趨勢。解決這個問題的辦法是讓礦工們集中他們的資源以至於他們可以更快地生成區塊,從而在目的一致的基礎上獲得部分區塊獎勵。
這種分配模式是根據礦工在礦池中的算力佔比,每天獲得固定的收益。該模式最終目的是消除「運氣」成分,減少了礦工的風險,但將風險轉移給了礦池的運營者。運營者可以收取手續費來彌補這些風險可能造成的損失。
意思是說「根據過去的 N 個股份來支付收益」,這種分配模式是根據礦池當天的實際收益,按照算力佔比,將收益分配給礦工。這意味著,所有的礦工一旦發現了一個區塊,大家將根據每個人自己貢獻的股份數量佔比來分配區塊中的貨幣。
每個哈希算力挖出區塊的概率為1/(²³²*Difficulty)。
截止至2020年2月19日,BTC難度為15,546,745,765,549。
所以每個哈希算力能挖出一個區塊的概率是0.000000000000000000001498%。
計算「運氣」的正確方法是看每輪的預期份額和實際份額。
「運氣」=平均值(每輪預期份額/每輪實際份額)
「運氣」越多,挖礦的「運氣」就越好。200%的好運意味著只需提交了一半的份額,你就可以找到一個區塊。
「運氣統計」與上述相反。這是我們作為礦池運營商對「運氣」的看法。
「運氣統計」=平均值(每輪實際份額/每輪預期份額)
「運氣統計」值越小,「運氣」越好。0.5的「運氣統計」意味著你提交的份額是找到區塊所需的一半。
在一段時間內看「運氣」,不應按照時間(小時,天等)來看,而應該以區塊為單位。「運氣」差異在根據「運氣」得出結論或比較兩個不同的礦工時尤為重要。一名礦工可能比另一名開採出更多的區塊,這在很大程度上影響了我們對「運氣」的看法。
從基本的泊松分布開始,它是一個離散隨機的概率分布,表示給定數量的事件在一個固定的時間或空間間隔內發生的概率。如果這些事件以已知的恆定平均速率發生,並且與上一次事件發生以來的時間無關。泊松分布的問題在於它是離散的而不是連續的。泊松分布處理的是固定時間段內的事件數,但這不是我們查看「運氣統計」的方式。
下一步是檢查伽馬分布,它是連續的。伽馬分布是泊松點過程中事件之間時間的概率分布。事件以恆定的平均速率連續而獨立地發生的過程。伽瑪分布解決的問題是「要等到n個隨機事件都發生,需要經歷多久時間」。當伽馬分布的形狀參數為整數時,該分布稱為愛爾朗分布。這對於查看「運氣統計」數據很重要,因為它始終是正整數。
「運氣統計」是負的二項分布,因此可以使用愛爾朗分布來類比。
我們不需要深入研究這個分布的公式,但是可以將愛爾朗分布視為指數分布的一般化。該分布是連續分布,通常用來度量事件發生的預期時間(即挖出一個區塊)。
使用這種分布使得計算「運氣」更加簡便,並且隨著網絡難度的增加,實際上將變得更加準確。在當前的網絡難度下,錯誤率不會超過百萬分之一。
如果這很難理解,那麼下一節將幫助您將其可視化。
使用愛爾朗分布,PDF能表明「運氣統計」是某個任意值的可能性有多大。在任何時候,「運氣統計」數值是一個確切數字(即1.00000000000)的概率都是0%。相反,PDF可以用來指定「運氣統計」值落在特定值範圍內(即低於1.0)的概率。
參考公式如下:
您可以使用R語言或python計算PDF。但是更簡單的方法是使用Wolfram Alpha網站。
quantile(ErlangDistribution[Number of Blocks, Number of Blocks], optional %)
每繪製1個區塊,PDF顯示了一系列的潛在結果。這意味著「運氣統計」數據很可能遠遠低於1.0的均值。
如果我們將區塊數量增加到14,這大約是每天網絡獎勵的10%,那麼我們可以看到分布開始變得更加規範化。現在,「運氣統計」數值更有可能接近1.0,但仍有很大的變化空間。
如果我們將區塊數量增加到144,也就是100%的每日網絡獎勵,那麼我們就會看到一條正常的曲線,其中包含了相當小範圍的潛在結果。在144個區塊中,「運氣統計」數值不太可能低於0.7或高於1.3。
PDF有助於理解查看大樣本(即在更多區塊上取平均值)中「運氣統計」數據的重要性。
CDF是分析「運氣統計」數據的好方法。假設你的礦池在過去的1、10和140個區塊中「運氣統計」數值為1.3。這是不幸的還是幾乎不可能的?(並引發了其他問題)。
同樣,您可以使用R語言或python來建模,但也可以使用Wolfram Alpha網站或excel。
Wolfram Alpha: CDF[ErlangDistribution[nblocks, nblocks], Luck Statistic]
Excel: =GAMMA.DIST(Luck Statistic, nblocks, 1 / nblocks, 1)
1個區塊中「運氣統計」數值為1.3的結果將顯示為0.727468。這意味著,在一個區塊的100次重新運行中,約有73次我們會看到更幸運的區塊。而在27%的情況下,會有看到一個更倒黴的區塊。
我們把下表放在一起來顯示多個區塊具有特定「運氣統計」的概率。如您所見,有些時候「運氣統計」數值太糟糕,以至於數值不可相信(例如,平均超過60個區塊「運氣統計」的值為1.5)。
我們通常不太關心這些,因為我們不會虧本。但這可能是檢查數據是否正確的原因。
正如我們在開始時所描述的,PPS礦池為它的礦工消除了挖礦差異。因此,壞「運氣」損害了礦池,好「運氣」有利於礦池,而礦工永遠不會受到影響。唯一讓礦工們擔心的是,如果一個礦池破產,他們將無法得到待結款項,還要經歷停工期,直到他們換到新的礦池。
作為PPS礦池運營商,我們非常認真地跟蹤我們的「運氣」。我們要確保有足夠的流動性來彌補短期差異。我們還希望確保一切運行正常。通常在「運氣」不好的時候,我們會檢查自己是否真的那麼倒黴。如果我們發現我們的「運氣」比99%的情況都差,那麼我們就會開始考慮其他因素,比如對礦池的攻擊或技術bug。我們將通過下面的一個礦池攻擊示例來做進一步討論。
自從我們推出自己的BTC礦池以來,我們發現每找到9個區塊,平均「運氣」值為0.502。作為一個礦池運營商,我們對此感到高興,但是仍處於可能性範圍之內(在4%的情況下它會更好)。通過運行其他10個礦池,我們知道壞「運氣」也有可能出現,所以我們不希望這種情況繼續下去。
PPLNS礦池的運營與PPS礦池相反。不是由礦池來承擔差異風險,而是由礦工承擔。一段時間的壞「運氣」意味著礦工得到的回報更少,但一段時間的好「運氣」意味著他們得到的回報更多。
對於PPLNS礦池而言,礦工可能會在經歷一段時間的厄運後離開。這情況被稱為「賭徒謬誤」(Gambler’s Fallacy),即人們認為如果某個特定事件在過去比平常更頻繁地發生,那麼它在未來發生的可能性就較小(反之亦然)。人們認為下個礦池可能不會有更好的「運氣」。
PPLNS礦池中的礦工應該密切關注他們池中的「運氣」。如果不太可能是壞「運氣」的緣故,那麼礦池可能會受到攻擊或存在bug。
這是對礦池最常見的攻擊之一,通常來自於其他競爭對手的礦池。如果它們是PPS礦池,它們將破產;如果它們是PPLNS礦池,它們的礦工將離開它們。
當礦工沒有返回他們創建的有效哈希值時,就會發生區塊截留。
攻擊者(礦工)會設置一些自定義規範以不返回小於預設大小的哈希值。預設的大小通常略低於網絡目標(難度的倒數)。因此,礦工仍將獲得他們提交給礦池中高於共享目標但低於網絡目標份額的報酬。礦工永遠不會向礦池發送一個有效區塊的哈希值。因為付給礦工的費用就好像他們可以生產一個網絡區塊一樣,而PPS礦池會出現虧損,PPLNS礦池中的礦工也會損失收入。
有很多方法可以防止這些攻擊,但是沒有一個明確的、萬無一失的方法。這通常是通過礦池監控礦工的個人「運氣」,並在他們不可能產生低於網絡目標的哈希值之後鎖定他們的帳戶來完成的。