Bitcoin-Core

兩條鏈如何共存?

  • July 20, 2022

我無法理解,兩條鍊是如何共存的,就像這些對我來說模棱兩可的觀察結果:

  • 在我讀過的一篇文章中,只有最長的鍊是有效的,其餘的鏈交易被發送回未確認的交易,但是在比特幣區塊鏈中,2 個以上的鏈(側鏈)如何共存?應該只有 1 個有效鏈吧?
  • 如果誠實礦工在他的區塊中有雙花交易,這是由某個惡意的人完成的,誠實礦工在廣播他的區塊後,他的區塊將被拒絕,因為他有其他惡意人的雙花交易,而這不是礦工的過錯。這個問題是如何解決的?
  • 如果只有最長的鍊是有效的,小鏈交易中有多少塊被丟棄並發送回未確認池?
  • 如果攻擊者試圖雙花並以某種方式試圖超越有效鏈,如何處理這個問題?

在我讀過的一篇文章中,只有最長的鍊是有效的,其餘的鏈交易被發送回未確認的交易,但是在比特幣區塊鏈中,2 個以上的鏈(側鏈)如何共存?應該只有 1 個有效鏈吧?

從側鏈的角度來看,主鏈中的塊根本就不是塊,它們是無意義的垃圾,因為它們不遵循側鏈的規則。從主鏈的角度來看,側鏈中的塊根本不是塊,因為它們不遵循主鏈的所有規則。

簡而言之,如果存在不止一個持久的不同鏈,那隻能是因為兩條鏈遵循不同的規則。

如果誠實礦工在他的區塊中有雙花交易,這是由某個惡意的人完成的,誠實礦工在廣播他的區塊後,他的區塊將被拒絕,因為他有其他惡意人的雙花交易,而這不是礦工的過錯。這個問題是如何解決的?

一個誠實的礦工永遠不會在他的區塊中包含雙重支出。

如果只有最長的鍊是有效的,小鏈交易中有多少塊被丟棄並發送回未確認池?

從不包含這些交易的較長鏈的角度來看,如果它們在該鏈中有效,則它們被認為是未確認的。從任何特定鏈的角度來看,任何未包含在該鏈中的有效交易都被視為未經確認,只要它由於包含衝突交易而既不包含也不衝突。

如果攻擊者試圖雙花並以某種方式試圖超越有效鏈,如何處理這個問題?

包含雙花的鏈永遠不會有效,因為雙花違反了鏈規則。這樣的“鏈”與隨機垃圾沒有區別。

區塊鏈分叉、鏈重組和陳舊區塊

你混淆了幾個不同的概念。由於沒有中央協調,偶爾會有兩個礦工同時隨機找到一個新區塊。由於每個競爭塊首先被一些節點看到,並且它們都有相同數量的總鏈工作,因此網路在什麼是最佳鏈尖上存在短暫的分歧。假設塊高度為 500,塊為 500_A 和 500_B。

自然,兩個相互競爭的區塊包含大部分相同的交易,因為兩個礦工都看到相同的未確認交易,並選擇了提供最多交易費用的任何交易。甚至可能在塊 500_A 中存在與塊 500_B 中的交易衝突的交易。

然而,最好的鏈只能有一個高度為 500 的區塊!從首先看到 500_A 的節點的角度來看,另一個區塊 500_B 不是最佳鏈的一部分,也不算數。從首先看到 500_B 的節點的角度來看,500_A 不是最佳鏈的一部分,也不算數。

最終,找到了另一個塊。假設它是 501_A 並建立在 500_A 之上。由於由 500_A+501_A 組成的鏈尖現在比鏈尖 500_B 更長且工作量更大,因此平局被打破,每個節點都辨識出相同的最佳鏈。已經跟隨具有 500_A 的鏈尖端的節點只需添加新的塊 501_A。已經看到塊 500_B 的人首先通過還原塊 500_B重組為新的最佳鏈尖端,然後應用 500_A 和 501_A。我們將未成為最佳鏈一部分的塊 500_B 稱為陳舊塊。從最佳鏈的角度來看,是否找到過時的區塊並不重要。它不是最好的鏈條的一部分。

側鏈

側鍊是與比特幣區塊鏈掛鉤的*不同的其他區塊鍊網路。*他們可以使用不同的共識機制,允許其他規則,並有專門的目的,例如更私密的交易方式或啟用額外的智能合約功能。側鏈的範例包括 Liquid 和 RSK。

“誠實的礦工在他的區塊中包含雙花”

*在比特幣中,我們以未使用的交易輸出 (UTXO)*的形式分別跟踪每一筆可花費的比特幣。每個交易輸出都是唯一可辨識的。在創建交易時,交易明確指定它花費了哪些 UTXO。每個交易輸出只能使用一次。

雙花是嘗試將相同的交易輸出花費兩次。例如,這種嘗試可能需要創建一個使用 UTXO 向 Alice 匯款的交易,以及使用相同 UTXO 向攻擊者匯款的第二筆交易。然後,攻擊者向 Alice 展示了向 Alice 發送資金的交易,但試圖獲取將資金返還給自己的交易,而不是包含在一個塊中。由於這兩個交易相互衝突,它們永遠不會被包含在同一個交易歷史中,更不用說在一個區塊中了。

一個誠實的節點會驗證他們聽到的所有未經確認的交易,然後再將它們添加到他們自己的記憶體池中。礦工從他們的記憶體池建構他們的塊模板。誠實的礦工永遠不會在他們的記憶體池中同時有兩個衝突的交易,因此永遠不會將它們都包含在同一個塊中,因為他們會在接受之前驗證衝突對的第二個交易時注意到 UTXO 已經被花費交易到他們的記憶體池。

如果礦工在建構區塊之前沒有驗證交易,最終產生了一個無效的區塊,那是他們不遵守共識規則的錯

沒有誠實的網路參與者接受無效塊

花費之前已經花費的錢的交易是無效的。包含無效交易的區塊是無效的。節點不接受無效塊。試圖廣播無效塊的攻擊者只會被禁止和忽略。

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