Blockchain

為什麼不直接將塊雜湊用作難度分數?

  • December 14, 2018

為什麼比特幣會應用難度函式來阻止雜湊,然後使用該函式的輸出相加並確定“最長”鏈?

為什麼不直接將所有塊雜湊(作為 bigint)相加,然後將最長的鏈視為總和最大或最小的鏈?

這是否有一些數學原因,或者它只是性能優化或避免過度依賴大整數算術的一種方式?

背景資料:

區塊雜湊必須小於某個值(由難度函式定義)才能使區塊有效。

通常,隨著時間的推移,網路難度增加。因此,隨著區塊高度的增加,有效區塊雜湊的截止值已經降低。

—————

為什麼不直接將所有塊雜湊(作為 bigint)相加,然後將最長的鏈視為總和最大或最小的鏈?

我認為通過舉一個例子來解釋為什麼這種實現被破壞可能是最容易的。讓我們考慮一個遵循“給定區塊高度的最小總和”規則的系統:

—————

為簡單起見,我們假設一個 pow 函式的輸出值範圍為 1-100。假設目前設置了網路難度,因此任何小於或等於 10 的輸出都是有效的。

現在,礦工 A 在高度 X 處找到一個區塊,區塊雜湊值為 10。這是有效的,因此它被添加到鏈中。

礦工 B 看到了這一點,但繼續探勘區塊高度 X,因為如果他們能找到雜湊值為 9 或更少的區塊,那麼他們的新鏈將替換之前接受的區塊。通過以這種方式強制重組,他們可能能夠成功實施雙花攻擊等。

—————

這個例子展示了礦工如何利用算法來重寫區塊鏈。對於“給定區塊高度的最大總和”規則也是如此:如果礦工發現一個小的區塊雜湊(例如,上例中的區塊雜湊 = 5),另一個礦工可以通過繼續在舊區塊上挖礦來獲利,從而迫使如果他們發現一個具有更大但仍然有效的塊雜湊的塊,則進行重組。

為了使比特幣網路正常執行,博弈論需要激勵礦工始終在鏈尖進行挖礦。可以這麼說,使用難度函式而不是顯式的塊雜湊值有助於“公平競爭”。這是因為任何有效的區塊雜湊並不比任何其他有效的區塊雜湊好或差。

引用自:https://bitcoin.stackexchange.com/questions/77435