為什麼我的記憶體池數量比區塊瀏覽器少得多?
我已經執行了大約兩天的完整節點。我想獲得所有 mempool txs 的列表(使用
getrawmempool false
),發現它只返回了大約 3,000 個,儘管所有區塊瀏覽器目前顯示大約 12,000 個。我知道節點之間的記憶體池會有所不同,但這似乎是一個很大的差異。我能對此做些什麼嗎?我的
getmempoolinfo
:"size": 1985, "bytes": 3458091, "usage": 10785216, "maxmempool": 300000000, "mempoolminfee": 0.00001000, "minrelaytxfee": 0.00001000
bitcoin-cli getmempoolinfo
吐什麼?您可能想要增加
maxmempool
配置值。
TL;DR:
未經確認的交易只轉發一次。如果你不線上,你只會在失去的交易被包含在一個區塊中時才知道它們。
你可能知道,比特幣使用八卦協議來傳遞交易和區塊資訊。當新交易被送出到網路時,支出者錢包將向其對等節點宣布它。每個對等節點將檢查它之前是否聽說過該事務,如果沒有,將請求完整的事務。然後,對等節點繼續驗證交易並將其依次傳遞給其對等節點。交易通過網路傳播,直到所有線上節點都收到交易。然後,節點將把交易保存在他們的記憶體池中,直到它被包含在一個塊中或過期。請注意,每個未確認的交易僅在網路上公佈一次。
當一個新節點加入網路時,新節點開始參與八卦,並將聽到送出給網路的任何新交易。新節點將不會聽到之前廣播的未確認交易,因為其他節點不會重新廣播他們在其記憶體池中持有的交易(儘管有人提議改變它)。然而,當一個區塊被宣佈時,每個節點都會從它的對等節點那裡檢索所有失去的交易,以便能夠驗證這個區塊。這保證了所有相關事務最終都會傳播。
我檢索了您提出問題期間的記憶體池視覺化工具的螢幕截圖(通過jochen-hoenicke.de)。您提到您的節點在您檢索記憶體池計數時執行了大約兩天。如果您查看 5 月 27 日的圖表,您會發現在 1-2 聰/字節的費率範圍(最低的藍色波段)內有大量交易。如果您仔細觀察,您會發現這些交易中的大部分已在兩天前送出到網路,即在您的節點線上之前。因此,您的節點不會知道正常執行時間較長的節點所知道的大部分事務。