為什麼只需要 50+ 次確認而不是 n/2 + 1 次確認,其中 n 是網路中的節點數?
在像 raft 這樣的典型共識算法中,它需要大多數節點就某事達成一致,但我發現乙太坊交易只需要大約 50 次確認就可以在 coinbase 中獲得批准。
這是一個工程近似值,如果有 50 多個確認,交易堅持的可能性非常高,還是我理解理論錯誤?
我認為您不了解工作證明算法的工作原理。這個想法是節點有兩個不同的角色:
- 挖礦角色,即創建包含交易的區塊。
- 驗證角色,即驗證收到的塊實際上是一個格式良好的塊,並且它位於現有區塊鏈之上。
為了確保達成共識,您確實需要以某種方式知道超過一半的節點(實際上,大約是所有節點)同意您的塊是區塊鏈的一部分這一事實。我認為您假設每次一個節點接受此塊時都會收到一個“確認”。這是“驗證者”的確認(每個節點都是驗證者)。
我們在區塊鏈中所說的“確認”是在您的區塊頂部添加的一個有效區塊。這是“礦工確認”,即礦工已經接受了這個區塊是有效的,所以他們在它上面進行了開採。
在大多數節點同意的情況下,這是試圖做出決定。一個節點的協議不能超過 n 個(因為網路中只有 n 個)。這是為了確保諸如確保網路正常工作(無腦裂)以及在節點特定錯誤的情況下存在冗餘。例如,在太空梭中,希望相同的錯誤不會影響多個系統(NASA 有不同的公司生產程式碼來滿足相同的規範,比如
geth
Parity),並且至少有一個特定類型的感測器正在工作。多數用於打破關係。優選地,所有節點都是一致的。在 50 個(或選擇的任何數字——比特幣通常為 6 個)中,假設節點(通常)達成共識,這取決於節點達成共識的時間,以區塊(確認)來衡量,即撤消事務所需的工作量/撤消事務的機率的代理。確認越多(這可能是無限的),交易永久的可能性就越高。理論上,乙太坊網路可以軟分叉並分裂成許多部分,每個部分都有 50 個確認。但是,這在正常情況下不太可能發生。在目前的網路規模下,當節點正常工作時,長度超過 3 或 4 的自然分割可能相當少見。
總之,51% 的協議是針對冗餘和/或可用性;它衡量協議和“錯誤”。區塊確認用於交易的最終確定性,是攻擊者撤消(或隨機機會)成本的代理。