Blockchain

鏈賽:如何知道競爭鏈的鍊長?

  • September 19, 2019

如果發生分叉,礦工首先會在他們收到的區塊上進行開採。此外,他們只轉發他們最先收到的區塊(因此他們將用於探勘的區塊)!

所以可能會發生 10% 的網路將在鏈 A 上挖礦。另外 90% 將在鏈 B 上挖礦。所以只有 10% 知道鏈 A,90% 知道鏈 B。一些邊緣節點會知道鏈 A 和鏈 B… 取決於覆蓋結構的外觀。

如果現在 10% 的分叉(鏈 A)將探勘一個塊並將其發送到網路會發生什麼?為什麼其他節點不會丟棄鏈 A 中的塊?他們怎麼知道這條鏈更長?他們怎麼知道區塊不只是 DDOS 攻擊的一部分?

如果有人能給我詳細的描述衝突是如何解決的,我會很高興的。

如果現在 10% 的分叉(鏈 A)將探勘一個塊並將其發送到網路會發生什麼?

當建立在鏈 A 之上的礦工找到一個有效塊時,它將將該塊中繼到網路的其餘部分。為了約定俗成,讓我們假設分叉(鏈 A 和鏈 B)發生在區塊高度N。這就是網路上的不同節點在收到一個N+1父節點在鏈 A 上的高度塊時的反應方式。

  1. 已經使用鏈 A 的節點:對他們來說,這個區塊N + 1是區塊鏈的自然發展,因此他們只會將此區塊添加到他們的區塊鏈中。
  2. 使用鏈B但有鏈A塊的節點:可能有一些節點在從鏈BN接收到高處的塊後,在高處接收到了鏈A的塊N。由於這些節點首先從鏈B接收到塊,所以他們將使用這個版本的鏈條作為他們的主要鏈條。但是,稍後收到的來自鏈 A 的塊不會被丟棄,而是會被處理並保存在磁碟上。因此,當從鏈 A 版本收到高度為 N + 1 的塊時,這些節點只是恢復高度為 N 的鏈並使用保存在磁碟上的另一個塊。
  3. 只有鏈 B 的節點:當它們從鏈 A 接收高度為 N+1 的塊時,這些節點將看到它們沒有其父節點。結果,這些節點將使用 查詢父塊previousblockhash並查看它是否存在。然後,擁有該區塊的節點將該區塊傳輸給沒有該區塊的節點。當收到該塊時,這些節點將看到該鍊是最長的工作量證明鏈,因此它們現在將在鏈 A 上執行。從鏈 B 高度為 N 的塊變得陳舊,但它沒有被丟棄,仍然是保存在磁碟上。

他們怎麼知道這條鏈更長?

節點接受最長的工作量證明鏈(在大多數情況下它與最長的鏈相同)。節點首先同步標頭並驗證鏈的工作證明,然後再向其他節點詢問實際塊。當 B 鏈版本的鏈上的節點收到 A 版本鏈上的區塊頭時N+1,他們會看到chainwork收到的區塊的 比他們已經擁有的鏈的區塊多,因此會使用它來查詢與之關聯的區塊它。

他們怎麼知道區塊不只是 DDoS 攻擊的一部分?

當他們收到區塊頭時,首先驗證工作量證明。因此,如果攻擊者想用無效塊向網路發送垃圾郵件,他/她必須使用有效的工作證明來這樣做。這意味著像其他礦工一樣花費大量精力但沒有獲得獎勵(因為該塊沒有任何祖先,它將被拒絕)。如果節點收到帶有無效工作證明的塊頭,則發送此塊頭的節點將在某些嘗試此惡作劇後被列入黑名單。這實際上是 1990 年代 PoW 用於防止垃圾郵件的基礎。

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