是否有任何隨機相關的工作量證明算法?
在比特幣中,在第 X 個散列上發現塊的機率與在第 Y 個散列上發現的機率相同1。因此,發現的機率是隨機依賴的。
**是否存在隨機依賴的工作量證明算法?**使用一個礦工可能不知道他們離發現有多近,但他們會知道他們正在“越來越近”。
如果您想快速而骯髒地描述我認為這種算法可能有趣的原因,請繼續閱讀:
比特幣的隨機獨立性的一個結果是,每當一個礦工發現一個區塊時,沒有其他競爭礦工“更接近”重新發現同一個區塊(使用不同但有效的雜湊也遇到了困難)。當然,比特幣不會為重新發現區塊提供任何激勵/獎勵是很自然的,因為工作證明最好用於嘗試發現最新的區塊。不幸的是,具有足夠雜湊能力和時間的攻擊者很有可能連續多次擊敗競爭對手。這就是為什麼說為了安全起見,您需要等待 6 次確認,這相當於一個小時的交易等待時間。我們可以說比特幣確認是串列的。
相比之下,隨機相關的工作證明可以有效地實現並行確認;從而大大減少交易等待時間,因為預計在第一次發現區塊後不久就會重新發現。假設使用此類證明的加密貨幣不僅獎勵第一次發現一個區塊,而且獎勵第一次重新發現的 X。然後,付款接收方只需要驗證交易是否列在所有區塊的發現中(或至少有足夠高的百分比)。理想情況下,攻擊者進行重新發現所需的雜湊算力應該與初始發現相同(線性增長)。這些重新發現散列可以以與交易相同的方式記錄,通過包含在子塊中的費用/獎勵。
1實際上,當尚未發現任何塊時,機率會略微增加,並且僅更改固定的最小位數,例如僅增加隨機數欄位時;但是考慮到滿足目前難度的可能雜湊的天文數字,差異是如此之小以至於無關緊要。
是否存在隨機依賴的工作量證明算法?
是的。另一個類似於尼克描述的想法:
在創建 merkle 樹時,在每個事務的末尾添加一個額外的 8 個字節,在一個名為
nEffort
. 標題中的nBits
欄位描述了必須(平均)在塊上完成的工作總量。按塊中的交易數量拆分該工作,然後您可以通過更改來單獨探勘每個交易,nEffort
直到 merkle 樹的葉子散列到足夠低的值。請注意,這不會取代交易 ID,它本質上只是 merkle 樹的每個葉元素的一個額外欄位。要檢查工作,請確保 merkle 樹的每個葉子都滿足難度/Number_of_transactions 參數。
這樣做的缺點:
- 如果沒有所有交易數據,就無法驗證區塊頭,這對於 SPV 節點來說顯然是非常有限的,因為 SPV 節點的交易安全性取決於包含它的區塊數量。
- 這也可以使雙花更容易。只需探勘一筆給自己代幣的交易,並在您將代幣發送給其他人後將其釋放。
- 它會抑制向您的區塊添加新交易,因為每筆新交易都意味著所有先前探勘的交易都將減少工作量。
這可能不是一個好主意,但它是另一種隨機依賴工作證明的方法。
使用一個礦工可能不知道他們離發現有多近,但他們會知道他們正在“越來越近”。
是的,這是可能的。
您可能需要 16 個難度為 A/16 的區塊頭,而不是需要一個具有難度 A 的區塊頭。這將有可能弄清楚你在這個過程中走了多遠。
相比之下,隨機相關的工作量證明可以有效地實現並行確認;從而大大減少交易等待時間,因為預計在第一次發現區塊後不久就會重新發現。假設使用此類證明的加密貨幣不僅獎勵第一次發現一個區塊,而且獎勵第一次重新發現的 X。
這也是可能的。你可以通過讓比特幣中的每個區塊有 1 個或多個父級來做到這一點。您需要某種方式規則來決定將哪些事務保留在合併塊中(因為有些事務不可避免地會發生衝突)。
前兩個變化的缺點:
- 通常,礦工一聽到交易就會包括交易。包含交易並不意味著您會失去任何進展。但如果你越來越近,你就不想放棄它。
- 只有 X 最強的礦工和礦池才能繼續營業。其他人也可能不會為採礦而煩惱。
- 全節點需要 X 倍的頻寬來驗證區塊。一旦塊被驗證,它也將需要額外的儲存空間。如果塊非常不同,則可能需要 X 倍的儲存空間。如果塊是相同的,那麼每個塊(coinbase 和塊頭)只會額外增加約 350 個字節。