Mining-Theory

雙花怎麼會發生?

  • September 22, 2021

我是比特幣的新手,並試圖了解雙重支出問題是如何發生的,以及隱含的“挖礦”需求。

假設比特幣的工作方式如下:

  • 在網路中,選擇一個節點作為“主持人”節點。也就是說,從廣播的交易中創建一個“塊”的責任在於這個塊,而不是其他人。這個“主持人”節點每 N 秒或每 N 個區塊創建等更改一次。
  • 從未經確認的交易池中,“主持人”隨機挑選 100 筆交易。它使用公鑰驗證它們是合法的(授權的),並通過查看區塊鏈來驗證所選交易和過去的交易之間沒有“雙重花費”。
  • 一旦它驗證了所有交易都是合法的,它就會通過將這些交易放在一起來創建一個塊(也就是說,沒有探勘,什麼都沒有。只是一個非常快速的操作)並在網路上廣播這個塊。
  • 每個收到塊的節點都會驗證它是合法的。也就是說,他們通過檢查公鑰來驗證交易是否得到授權,並驗證在新區塊本身或整個區塊鏈中沒有雙重支出。
  • 重複。

那麼,這個方案有什麼問題呢?這裡怎麼會出現“雙花”,“挖礦”又如何防止呢?

有兩種類型的雙花。第一個是簡單的,通過節點驗證鏈來解決;第二個是更難的一個,以及挖礦的目的是解決什麼(或至少是抑制)。

在比特幣和您所描述的系統中,確實很容易確保節點接收到的鏈不包含任何雙重花費:只需驗證所有交易並拒絕任何花費在同一鏈中較早花費的輸出的鏈. 完畢。

然而,這對於如何確保您擁有與其他人相同的鏈,更重要的是,擁有一個未來將由其他礦工/建造者建構的鏈的問題沒有任何作用。看,在比特幣中,你永遠不能完全確定你所看到的(有效的)區塊在未來實際上是否會成為公認鏈的一部分。可能還有另一個你根本沒有聽說過的更多工作鏈,當你聽說時,你會切換到它。當你這樣做時,已確認的交易可能會回到未確認的狀態,或者更糟糕的是,與現在在新鏈中確認的交易發生衝突。

因此,困難的部分與一條鏈內的雙花無關,而是確定關於該鍊是什麼的共識。比特幣使用最多工作規則來做到這一點,其中具有最多累積工作證明的(否則有效的)鏈將被接受為活動鏈。這激勵了礦工們一起工作,因為如果他們建構的區塊不是由其他礦工建構的,它就會變得毫無價值(如果它沒有最終進入活躍鏈,它的補貼/費用就會失去)。

你的系統可以工作嗎?可能,但這取決於細節,並且不可避免地會在非常不同的假設下工作。首先,你的版主是如何決定的,你如何確保每個人都同意版主是誰?如果不是每個人都同意這一點,你可能會分叉那些認為主持人是其他人的節點。這是一個非常重要的問題,尤其是在存在潛在不穩定網路的情況下,潛在的惡意行為者可能會選擇選擇性地不將所有消息轉發給他們的對等方。事實上,我認為解決這個問題的唯一方法是擁有一組固定的、受信任的控制器來決定主持人(集中式……),或者……使用工作證明來決定主持人(這使得它類似於DPoW)。第二,當版主在同一高度簽署兩個不同的區塊,並將一個版本發送給某些節點,將另一個版本發送給其他節點時,你會怎麼做?他們是否了解這一點,相互交流,然後嘗試將版主“列入黑名單”?然後同樣的問題出現了:你如何確保每個人都同意這個黑名單?對此有解決方案,但它們都涉及某種共識機制,以使網路上的每個人都同意。這些共識機制都不是簡單的,許多都存在缺陷,並且它們都有自己的假設集,這些假設可能適用於現實世界,也可能不適用。你如何確保每個人都同意這個黑名單?對此有解決方案,但它們都涉及某種共識機制,以使網路上的每個人都同意。這些共識機制都不是簡單的,許多都存在缺陷,並且它們都有自己的假設集,這些假設可能適用於現實世界,也可能不適用。你如何確保每個人都同意這個黑名單?對此有解決方案,但它們都涉及某種共識機制,以使網路上的每個人都同意。這些共識機制都不是簡單的,許多都存在缺陷,並且它們都有自己的假設集,這些假設可能適用於現實世界,也可能不適用。

所以最終的問題是解決雙花(除了同一鏈內的雙花)需要一個共識機制。比特幣共識問題的解決方案是工作量證明。

如果絕大多數礦工是惡意的,工作量證明方案理論上可能會“失敗”。

同樣,如果大多數塊作曲家都是惡意的,您的方案理論上可能會“失敗”。

Nakamoto 2008 通過引入 Deus Ex Machina(物理能量輸入)“解決”了選擇下一個礦工(拜占庭將軍)的問題。

同樣,您的方案需要一些 Deus Ex Machine 設備,該設備以某種方式公平地選擇下一個塊作曲家(拜占庭將軍),一組惡意節點不可能進行遊戲。如果你只是簡單地使用一些“隨機”算法,但由於某種原因導致偽隨機,惡意節點最終會發現它並成為塊組成者的更大份額。然後他們開始創建私有替代區塊鏈,並在必要時釋放它們,以便通過使用交易重組來實現雙花。

如果您的方案不支持事務重組,那麼它就無法以可預測的速度可靠地生成塊。

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