Unconfirmed-Transactions
為什麼總有一些未確認的交易?
據我所知,一個礦工在收到另一個礦工的有效區塊後就開始創建一個新區塊。然後它開始使用它在其記憶體池中的所有事務在它剛剛收到的塊之上構造和散列下一個塊。
誰能向我解釋為什麼會發生這種情況?是因為礦工使用了一些交易選擇機制嗎?還是因為節點之間的連通性不可靠?或者是其他東西?
事務的生命週期如下:
- 交易創建:
發件人創建交易,他包括收件人列表,確定要花費哪些先前的交易輸出,並對其進行簽名。輸出總額和輸入總額之間的差異決定了交易費用。 2. 中繼:
發送方將交易送出到比特幣網路。他只需將其發送給他的同行,然後再將其轉發給他們的同行。最終,當交易通過網路傳播時,每個人都會看到它。 3. 交易選擇:
從礦工目前知道的所有交易(“記憶體池”)中,每個礦工選擇一個他們想要包含在塊中的子集。他們通常選擇包含盡可能多的內容(1MB),並選擇為自己創造最多的收入(首先是最高費用)。不過,礦工可以做出他們想要的任何選擇,甚至根本不包括任何交易(除了所需的 coinbase 交易)。 4. 區塊發現:
大約每十分鐘,一名礦工成功地創作了一個區塊。該塊通過將其寫入區塊鏈來確認他先前選擇的交易(只要該塊最終成為工作量最大的鏈的一部分)。該塊依次通過網路中繼,以更新網路新狀態的所有節點。此時付款被視為已結算(具有高度的信心,儘管一些額外的確認不會受到傷害)。
有多種方式使交易無法在此過程中得到確認:
- 交易無效,例如花費不可用的錢、格式錯誤、與已確認的交易衝突或簽名不正確。節點不會中繼無效交易,如果它們已經擁有它們,則將它們從記憶體池中刪除。
- 交易不會被轉發。例如,當交易費用低於
minRelayTxFee
發送方同行的費用時,就會發生這種情況。發件人不會將此類交易添加到他們的記憶體池中,也不會中繼它。- 沒有為塊模板選擇交易。如果一筆交易不屬於交易費率最高的 1MB,它通常會被顯著延遲,直到費率降到自己的水平,它被競爭交易無效,或者礦工被其他方式激勵將其包含在一個塊中。這樣的事務最終可能會超時(事務如何離開記憶體池?),但可以無限期地保持有效。
因此,1)每 10 分鐘 1MB 的塊空間供應有嚴格限制,2)比特幣交易在很多方面都很有用,因此總會有某種最低出價來使用塊空間(例如合併低價值未使用的輸出、時間戳、彩色硬幣應用程序、去中心化備份、詩歌……)。因此,對區塊空間的需求總是比供應多,區塊空間的價格將在供需匹配的費率下找到某種平衡。因此,總會有一些未確認的交易。