我們是否將所有事務都放入記憶體池中?
我想知道孤兒交易是否也儲存在記憶體池中?如果是,比特幣客戶端如何區分孤兒交易和非孤兒交易?
比特幣核心維護一個單獨的孤兒池,其中包含缺少父母的交易。它的主要目的是處理以錯誤順序向我們發送獨立事務組的對等方,因此這個池不需要很大。
自比特幣核心 v0.13.0 以來,發送給對等點的所有交易都是分批發送的,並且在這些批次中按依賴順序發送。這大大減少了網路上孤立池的平均大小(從數百個減少到通常只有幾個)。
孤兒交易
“孤兒交易”是缺少父交易的交易,因此至少有一個節點未知的輸入。當節點以錯誤的順序接收交易或父節點被雙花時,可能會發生這種情況,因此該新交易的輸入之一將永遠不會出現。在滿足交易的先決條件之前,這樣的交易基本上看起來是無效的,因為節點將認識到交易正在花費節點不知道的錢。mempool 不儲存孤立的交易,但它將它們收集在一個單獨的孤立池中,以防父級仍然被中繼。
孤塊
孤立塊是節點不知道其父塊的塊。這可能發生在早期版本的比特幣中,即在您收到父節點之前,稍後的塊被中繼到您的節點,例如在同步期間。我相信節點至少會保留孤立塊,直到他們可以確定它不是最長鏈的一部分(即它們同步到孤立塊的高度)。
陳舊的塊
當兩個礦工在相同高度發現區塊時,不時會出現鏈叉。一旦兩個競爭區塊中的一個獲得後繼者,另一個區塊將成為“陳舊鏈尖”的一部分。一般來說,節點只認為同高的一個區塊是有效的,因此忽略了同高平行區塊中的確認。僅在相同高度的兩個區塊之一中確認的交易將被視為在另一個區塊中未確認。節點會認為他們在相同高度收到的第二個區塊不是最長鏈的一部分,只是保持它能夠遵循潛在的重組。
因此,恐怕我不知道您認為區分孤塊和非孤塊可能存在什麼問題。;) 在大多數情況下,您可能認為“孤立交易”要麼是無效交易,要麼是未經確認的交易。
如果我錯過了您問題的重點,請更新您的文章並在評論中告訴我。