工作量證明是否直接有助於防止雙重支出?
我知道以前有人問過類似的問題(例如,工作證明如何防止雙重支出),但我正在努力想像解決雙重支出的解決方案直接依賴於工作證明。
想像一下礦工 Bob 試圖通過發送給 Alice 和 Jim 來雙花 1 BTC。要麼他可以將 Alice 和 Jim 的兩筆交易都包含在他探勘的單個壞塊中——在這種情況下,即使有有效的 PoW,該塊也會被拒絕。或者他可以將他的第一個(有效)交易廣播給 Alice,然後讓其他人探勘它,然後再將他自己的壞塊與 Jim 的交易一起探勘,無論是否有有效的工作證明,它都會再次被拒絕。那麼,在網路上每個完整節點執行的交易驗證級別上,雙花真的受到保護嗎?這意味著 PoW 並沒有真正直接停止雙花 - 停止雙花的只是節點知道先前確認的交易。而我們可以信任區塊鏈上的所有交易都“確認”的原因是 PoW?
如果這是正確的,並且 PoW 更像是一個高級系統範圍的解決方案,那麼我希望有人能澄清最後一個問題:為什麼我們不能用基於簡單時間戳的自動 10 分鐘區塊添加來替換 PoW ? 是不是因為它是一項關鍵任務(涉及整個系統的信任),所以不像難度計算(我們依賴時間戳),我們必須找到一個不能欺騙時間值的替代方案?(即使是這樣,單個節點也可能會假裝拒絕它)。認為工作證明基本上可以替代信任可以調節“每 10 分鐘出塊一次”的(可破解/可欺騙)時間戳伺服器,這是錯誤的嗎?
這裡對“雙重支出”一詞有多種定義。首先,雙重支出的實際定義是:多次花同樣的錢。一個簡單的例子是自動售貨機的繩子上的硬幣。你把一根繩子系在一個硬幣上,當你把硬幣放進機器時,它認為你付了錢,你從機器裡得到你想要的任何東西,然後你用繩子把硬幣拉回來,這樣它就可以再次使用了別的地方。
根據這個定義,商品交換已經發生,但是用於支付它的錢被付款人用來支付以後的另一種商品。實際上,您創建了多個相互衝突的交易,並且它們都被認為在該貨幣的會計系統中已結算(即最終且不可撤銷)。
然後是比特幣交易背景下“雙花”的定義。雙花通常用來說有多個相互衝突的未經確認的交易。但是未確認的交易不被視為已結算,因此您在此定義下存在衝突的未結算交易。
區塊鏈的目標是解決這些相互衝突的未結算交易。其目的是確保所有交易不會相互衝突,並使它們被視為已結算。因此,為了避免雙花,您需要兩個交易屬性:不可逆轉和不衝突。
非衝突部分由節點處理。節點驗證區塊和交易。如果它們包含與該塊或區塊鏈中的其他交易衝突的交易,他們會拒絕區塊。所以防止雙花沖突方面的東西是節點。
工作量證明允許不可逆轉的方面。它需要礦工花費時間和精力來創建一個塊。為了改變一個塊的內容,必須花費時間和精力來創建一個與已經存在的塊衝突的新塊。
工作量證明也用於解決區塊鏈衝突。如果有多個候選區塊鏈源自一個共同的分叉點,則節點將遵循具有最多累積工作的區塊鏈,因為該鍊是花費最多能量創建的區塊鏈。
區塊鏈的鏈部分創建了一個複合因素,因此為了替換區塊鏈中的一個塊,你還必須替換它上面的塊,從而花費更多的時間和精力。因為原來的區塊鏈上還有其他人在挖礦,所以你也必須能夠比他們更快地挖礦,這樣你的區塊鏈才能比原來的區塊鏈有更多的工作,讓你的區塊鏈被其他人接受。
因為替換區塊需要大量的時間和精力消耗,所以可以合理地假設一個區塊及其包含的交易一旦在其上開采了多個區塊就永遠不會改變。這給了我們不可逆轉的一面。這就是為什麼說確認交易是不可逆的。
為什麼我們不能用基於簡單時間戳的自動 10 分鐘區塊添加來替換 PoW?
因為那不是去中心化的。誰創建塊?如果多人可以像挖礦一樣創建區塊,那麼通過什麼機制打破關係?你如何解決兩個不同的人創建不同的塊?是什麼阻止了人們欺騙時間戳並用他們自己的版本替換區塊鏈?
解決這些問題的最簡單方法是讓區塊僅由有限且受信任的一群人製作。所以現在是中心化的。恭喜,您創建了 Paypal,但效率較低。
工作量證明的全部目的是允許一個分散的系統,在這個系統中,每個人都可以就真相達成一致,而無需一些中央權威來規定真相是什麼。如果每個人都遵循相同的規則,那麼每個人最終都會得出真相是什麼的結論。在工作量證明中使用能量消耗可以防止有人用不同的塊重寫歷史,因為這樣做很昂貴。使用工作量最大的鏈的平局允許節點匯聚在同一個區塊鏈上。工作量證明的使用回答了我上面給出的問題,而不依賴於中央權威。
總之,工作量證明允許交易成為結算且不可逆轉的。它允許節點聚合到同一個區塊鏈上,並使得重寫歷史變得極其昂貴,甚至到了不可能昂貴的地步,從而使區塊鏈中的交易變得不可逆轉。實際確保區塊鏈中不存在衝突交易並因此實際上防止真正的雙重支出留給驗證區塊鏈的節點。