交易一旦生成會發生什麼?
我試圖了解比特幣在技術上是如何運作的。我了解區塊鏈、數字簽名等……我對“創建”交易後會發生什麼更感興趣。
假設比特幣每個區塊只包含一筆交易(為了簡化)。基本上:
- 有人使用其錢包創建交易
- 此交易必須經過驗證(檢查輸入、數字簽名等…
- 必須在塊雜湊上計算工作量證明
- 該塊被添加到區塊鏈
所以我知道礦工有責任提供工作證明。我的問題是:
- 一個節點如何向礦工廣播交易?它是 P2P 協議的一部分嗎?
- 礦工是否檢查交易(數字簽名、可用輸入等……)?
- 礦工是否直接向區塊鏈送出區塊?
這部分仍然讓我感到困惑,任何對文章的幫助指針都會很棒:)
更新:
在 P2P 網路中,節點不連接到所有其他節點。因此,假設網路如下所示:
node1 <-> node2 <-> node3
(1和2直接相連,2和3直接相連。1和3通過2相連)當
node1
想要廣播交易進行驗證時,它只會將其廣播到node2
. 然後node2
最終可以將其廣播node3
給他,讓他有機會驗證node1
的交易。但是,因為我們在一個不受信任的網路中,所以沒有什麼可以阻止
node2
驗證交易而不將其傳輸給node3
自己,從而為自己保留挖礦費用。我們還可以想像,
node1
永遠不要廣播它是未經確認的交易,自己做挖礦工作,只廣播經過驗證的塊,這樣它就會“合併”到區塊鏈中。比特幣如何應對這種情況?
關於您的更新:
確實,當一個節點收到一筆交易時,沒有任何東西強迫他們轉發它。如果他們願意,他們可以坐在上面。
但是網路看起來不像你畫的那樣。如果 Node1 真的希望他的交易得到確認,他希望將其分發給盡可能多的其他節點。特別是,如果節點 2 是唯一知道交易的礦工,那麼直到節點 2 成功挖出一個塊才能確認。假設 Node2 只控製網路總挖礦能力的一部分,這可能需要(非常)長時間。節點 1 更希望他的交易被包含在下一個區塊中成為礦工,無論誰開採它。
因此,出於這個原因,Node1 不會將事務僅發送到 Node2,而是發送到許多不同的節點。例如,Bitcoin Core 預設會嘗試連接至少 8 個不同的節點。如果這些節點中至少有幾個是誠實的,他們會將交易中繼到更多節點,依此類推。這也意味著 Node2 的貪婪動機較少;只有在沒有其他礦工知道交易(或很少)的情況下,貪婪才會有所幫助,並且 Node2 知道這不太可能是這種情況。另一方面,如果 Node2 是礦工,那麼她有一點不貪心的動機:投資了比特幣挖礦設備後,Node2 有興趣讓比特幣保持高價值,這只有在人們繼續使用的情況下才會發生它,並且快速確認他們的交易往往會鼓勵這種情況。所以在某個時候,
(請記住,並非所有節點都是礦工。比特幣網路上的許多節點都是由不進行任何挖礦的人執行的,只是為了好玩而執行一個完整的節點,或者為了無私地支持網路,或者因為他們使用預設設置安裝了比特幣核心,並不真正知道或關心它實際上在做什麼。)
至於第二種情況,如果 Node1 自己是礦工,他當然可以保留自己的交易以包含在自己的塊中,而不是在網路上傳輸它們。這也意味著他不必為該交易支付費用(或者,等效地,他將費用返還給自己)。有兩個權衡:(1)如上所述,交易將需要更長的時間才能被確認;(2) 如果網路上有大量交易,足以讓所有區塊都被填滿,那麼通過將他自己的交易包含在他的區塊中,Node2 將放棄包含其他人的交易的能力,這將向他支付費用。因此,由 Node1 決定什麼對他最有利。但這對其他人沒有影響,因此無論哪種方式,這對網路都不是問題。