Blockchain

如何防止一個礦工竊取另一個礦工的區塊?

  • June 23, 2019

許多文章只包含類似的措辭

礦工A解決雜湊問題並將結果提供給網路進行檢查。一旦大多數網路確認,A就會獲得獎勵。

但是如何保護他的努力不被竊取呢?我認為:

  1. A解決了這個問題,所以得到可以散列到目標 hash的A原始字元串。S``H
  2. A將他的結果發送給打算獲得獎勵的網路(其他一些礦工)。
  3. 其他節點(礦工)需要雜湊S並檢查結果是否等於,H以確定是否A正確。(所以我認為在這裡可以得到SH
  4. 但是B在附近A,他得到A了 的作品,所以他得到了Sand H。然後他可以構造一個新的結果發送給其他人,聲稱B解決了問題
  5. 如果B能比 更快地傳播他的結果A,他就會得到獎勵。

我見過礦工可以偷別人的塊嗎?,其中@Highly Irregular 說

Alice 挖出的區塊包括發往 Alice 地址的挖礦獎勵。如果 Eve 更改區塊數據以將獎勵輸出到她自己的接收地址,那麼 Alice 用來解塊的隨機數(以及其他變數值,我認為是“extranonce”和時間戳)幾乎肯定不再能夠解塊。

但具體如何,他沒有說。

@Stéphane Gimenez 在這裡給出了正常的挖礦步驟,其中我沒有看到防止B竊取區塊的措施A(或者如何驗證結果最初是由 計算的A)。

A 通過添加coinbase transaction自己的比特幣地址來保護。

來自<https://en.bitcoin.it/wiki/Block_hashing_algorithm>

塊的主體包含交易。這些僅通過 Merkle 根間接散列。因為交易不是直接散列的,所以用 1 個交易對一個塊進行散列與用 10,000 個交易對一個塊進行散列所花費的精力完全相同。

target 的緊湊格式是一種特殊的浮點編碼,使用 3 字節尾數,前導字節作為指數(僅使用 5 個最低位),其基數為 256。這些欄位中的大部分將是相同的使用者。時間戳可能會有一些細微的變化。隨機數通常會有所不同,但它會以嚴格的線性方式增加。“Nonce”從 0 開始,並針對每個雜湊值遞增。每當 Nonce 溢出(它經常發生)時,生成事務的 extraNonce 部分就會增加,這會改變 Merkle 根。

此外,**兩個人擁有相同的 Merkle 根的可能性極小,因為您塊中的第一筆交易是一代人“發送”到您唯一的比特幣地址之一。**由於您的區塊與其他所有人的區塊不同,因此您(幾乎)可以保證產生不同的雜湊值。您計算的每個雜湊與網路計算的每個其他雜湊具有相同的獲勝機會。


來自http://www.righto.com/2014/02/bitcoin-mining-hard-way-algorithms.html的另一個解釋

下圖顯示了特定塊的結構,以及它是如何被散列的。黃色部分是區塊頭,後面是進入區塊的交易。第一個交易是向礦工授予挖礦獎勵的特殊 coinbase 交易。其餘交易是標準比特幣交易,用於移動比特幣。如果標頭的雜湊以足夠的零 [3] 開頭,則該塊被成功探勘。對於下面的塊,雜湊成功:0000000000000000e067a478024addfecdc93628978aa52d91fabd4292982a50,該塊在區塊鏈中成為塊#286819。

比特幣區塊的結構

當礦工解決一個區塊時,他們必須包含一個 Coinbase 交易。Coinbase 交易在區塊中是唯一的,將區塊獎勵支付給礦工地址。為了重定向塊獎勵,攻擊者必須更改 Coinbase 交易。由於所有交易都是通過產生 Merkle 根的 Merkle 樹送出的,因此更改 Coinbase 交易將更改 Merkle 根。由於 Merkle 根是區塊頭的一部分,這將改變區塊頭,從而改變區塊的雜湊值。

鑑於加密散列函式的原像抗性特性,從天文數字上看,新的塊頭也不太可能是有效塊。

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