1. 程式人生 > >比特幣的“自私挖礦”

比特幣的“自私挖礦”

自私挖礦簡單一點說,就是挖到一個礦的時候,先不釋出,繼續挖,等到挖到第二個礦的時候再一次性發布兩個礦;另一種情況是在你挖到第二個礦之前,網路裡有別人挖到了礦,這個時候你也把自己挖到的區塊釋出出來,進入競爭狀態。在自私的礦工具有一定量的算力基礎的情況下,這樣的作答可以獲得比誠實挖礦更高的收益。

過程

  1. 自私礦池挖到塊A之後不直接釋出全網, 只在自己的礦池中廣播該塊, 形成私有鏈, 並且繼續挖下一塊B
  2. 當檢測到網路上有人發出下一塊A’時, 再廣播自己挖到的塊, 使網路進入競爭狀態.
  3. 如果自私礦池挖出B時, 直接釋出, 讓全網轉到自己的鏈上, 自己獲得塊A和塊B的收益, 同時浪費掉了網路在A’以及分叉上使用的算力.
  4. 如果誠實節點在塊A後挖出了新塊, 那麼自私礦池享受塊A的利益.如果誠實節點在塊A’後挖出新塊, 那麼自私礦池不獲利.

分析

γ代表誠實節點選擇在自私礦池釋出的區塊上挖礦的比例, (1-γ)則是誠實節點在競爭區塊上挖礦的比例α是自私礦池的算力大小, (1-α)是誠實節點的算力總和。 在這裡插入圖片描述 第一張圖可以看到, 無論自私礦池的私有塊在競爭中能否勝出, 在自私礦池的算力高於一定比例時, 都能獲得超過誠實挖礦的收益.

第二張圖可以看到:

  • 當γ為1時, 無論自私礦池算力多少都可以獲得更大收益
  • 當γ為1/2時, 自私礦池算力超過全域性的1/4即可獲得更大收益
  • 當γ為0時, 自私礦池算力超過全域性1/3即可獲得更大收益.

舉例

假設自私礦池的算力佔全網總算力的1/3。 誠實挖礦:   算力佔1/3,意味著平均每三個礦中有一個礦是己方挖出來的,平均收益1/3; 自私挖礦:   從鏈的某個節點開始,維護自己的私鏈,挖礦開始;     1.假如公網首先挖到第一個礦,立刻合併公鏈和私鏈,在新塊上重新開始這個策略;     2.假如你挖到了第一個礦A,概率為1/3,暫時不廣播:       <在這裡我們假設誠實節點選擇在自私礦池釋出的區塊上挖礦的比例為0>           1> 你挖到第二個礦B,概率為1/3, 此時私鏈上有兩個礦,全網廣播;           2> 公網挖到一個礦A’,概率為2/3,此時公私鏈上均有一個塊,你釋出自己剛才挖到的塊,                 進入競爭狀態:                   A.你(私鏈)挖到第二個塊B,概率為1/3,此時私鏈上有兩個快,全網廣播;                   B.公網挖到第二個塊B’,此時公鏈長度大於私鏈長度,你不獲利;

  針對以上分析,我們看一下自私礦池的平均收益:                   1/3 * 1/3 * 2+ 2/3 * 1/3 * 2 = 0.6667 > 0.3333

所以這種情況下自私挖礦是獲利的 ,在這裡我們假設的條件很極端,即誠實節點選擇在自私礦池釋出的區塊上挖礦的比例為0,但實際情況下這個比例不會為0 ,說明自私礦池獲利的可能性會更大,即自私礦池的平均收益會更大。