跳至主要內容

如何存取比特幣記憶池

更新於
2025年11月26日

閱讀時間 7 分鐘

概覽

比特幣是區塊鏈技術的開山鼻祖。隨著比特幣的問世,區塊鏈與去中心化迎來了嶄新時代。比特幣讓每個人都能進行如今廣受歡迎的點對點交易;本指南將教您如何從比特幣記憶池中提取這些交易。

先決條件:

  • 終端機/cmd(命令列介面)。
  • 比特幣節點。
  • 對去中心化的熱愛。

什麼是比特幣記憶池?

在比特幣網路中發送的交易並不會直接被加入區塊鏈。所有有效的交易都必須先進入一個等待區,才會被納入區塊中。這個等待區被稱為「記憶體池」(mempool)。若記憶體池的大小過大,表示網路流量繁忙,這將導致交易確認時間變長,且交易手續費隨之提高。

:根據慣例,「比特幣」(Bitcoin)指的是協議/網路,而「比特幣」(bitcoin)或「BTC」則是指該種貨幣。

比特幣的交易手續費是以每字節交易所支付的「薩托什」數量來計算的。「薩托什」是比特幣網路原生貨幣比特幣的最小單位,其中 1 比特幣 = 1 億薩托什。礦工會優先處理記憶池中交易手續費較高的交易。 但自SegWit 升級以來,比特幣交易方面出現了一些變化。該升級引入了一種稱為 SegWit 交易的新交易類型,以增加每個比特幣區塊中的交易數量。它解決了兩個問題:1. 提高了比特幣每秒的交易處理量;2. 解決了交易可變性問題。

在 SegWit 實施之前,區塊或交易的單位是以位元組(byte)為計量標準,且每個區塊的上限為 1 MB(MegaByte)或 100 萬位元組。SegWit 實施後,交易和區塊改以「權重單位」為計量標準;這些權重單位用於衡量比特幣資料並比較交易。

接下來要介紹的概念是 vByte。1 vByte 等同於 4 個權重單位。在傳統交易中,1 位元組的資料佔用 1 vByte(4 個權重單位);而在 SegWit 交易中,1 位元組的資料則僅佔用 1/4 vByte(1 個權重單位)。這種折算機制使得區塊能容納多達 4 倍的交易量。 當前比特幣區塊大小上限為 1 vMegabyte/100 萬 vByte/400 萬權重單位。大多數錢包以 satoshis/vByte 為單位計算交易手續費,該費用是根據所使用的每 vByte 數據量來支付的。

比特幣記憶池分析的應用場景

Mempool 分析有助於我們了解網路上的擁塞狀況與流量,這最終有助於我們計算交易手續費。

現在讓我們存取 mempool,並從該池中擷取一些交易資料。

設定 Quicknode 比特幣端點

基於今天的目的,我們需要一個比特幣節點來存取區塊鏈資料。鑑於比特幣的資料量龐大,若在此自行架設節點,成本將非常高昂且耗時。因此,我們將改為在此註冊一個免費的 Quicknode 帳戶,藉此便能輕鬆建立一個比特幣端點。

Quicknode 比特幣端點的螢幕截圖

請複製並儲存您節點的 HTTPS 網址,因為稍後會用到它。

如何存取比特幣記憶池/如何從比特幣取得待處理交易

我們將使用比特幣 RPC 方法來取得 mempool 資料,具體來說是getrawmempool方法。請開啟終端機/命令提示字元,並複製貼上以下內容:

curl --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getrawmempool", "params": [true]}' -H 'content-type: application/json' <QUICKNODE_BITCOIN_URL>

請將QUICKNODE_BITCOIN_URL替換為您的比特幣節點的 HTTPS 網址,該網址是在上一步驟中取得的。上方的cURL請求是針對我們的節點發出的,並搭配了 getrawmempool 方法。 

輸出結果應類似如下所示。

現在讓我們來了解輸出內容。上述方法會輸出目前位於記憶池(mempool)中的待處理交易清單。我們將從中擷取一筆交易,並逐一解析各個欄位。

{
"result": {
"2d1228abf06836b1173936061fec0384e82e3b684d7950a27f06a06f587400d3": {
"fees": {
"base": 0.00111999,
"modified": 0.00111999,
"ancestor": 0.00111999,
"descendant": 0.00111999
},
"size": 90826,
"fee": 0.00111999,
"modifiedfee": 0.00111999,
"time": 1629052793,
"height": 695936,
"descendantcount": 1,
"descendantsize": 90826,
"descendantfees": 111999,
"ancestorcount": 1,
"ancestorsize": 90826,
"ancestorfees": 111999,
"wtxid": "b3b49bb3dcae483d579710a2e1f9c7ed585ab35e2a8cb941ff8cb27ea8adec20",
"depends": [],
"spentby": [],
"bip125-replaceable": false
}
}
}

上述 JSON 輸出的說明:

第 3 行:這是用來識別區塊鏈上交易的一組交易識別碼。

第 4 至 9 行:交易手續費明細。

第 10 行:根據BIP 141 規定的交易大小。

第 11 行:以 BTC(比特幣)計價的交易手續費。

第 12 行:交易手續費,其中手續費差值用於決定挖礦優先級。

第 13 行:交易進入交易池的時間,以自 1970 年 1 月 1 日格林威治標準時間(GMT)起算的秒數表示。

第 14 行:交易進入交易池時,區塊鏈(最新區塊)的高度。

第 15 行:mempool 中包含本筆交易在內的後代交易數量。

第 16 行:mempool 中所有後代交易的大小。

第 17 行:修改了 mempool 中所有後續交易的費用。

第 18 行:mempool 中包含此筆交易在內的祖先交易數量。

第 19 行:mempool 中所有祖先交易的大小。

第 20 行:mempool 中所有祖先交易經調整後的費用。

第 21 行:交易 ID 及見證資料

第 22 行:若本交易使用未確認交易作為輸入,請於此處填寫。

第 23 行:若另有未確認的交易正在使用此交易中的資料,則必須在此處填入。

第 24 行:一個布林值,用以表示該交易是否可根據BIP 125 進行替換。

現在,要取得實際的交易資料,我們必須使用另一個方法`getrawtransaction`,該方法會回傳關於特定交易的資訊。請將以下內容複製並貼上至您的終端機/命令提示字元中:

curl --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getrawtransaction", "params": ["2d1228abf06836b1173936061fec0384e82e3b684d7950a27f06a06f587400d3", true]}' -H 'content-type: application/json' <QUICKNODE_BITCOIN_URL>

請將QUICKNODE_BITCOIN_URL替換為您的比特幣節點的 HTTPS 網址,該網址我們在上一步驟中已取得。 以上是透過 cURL向我們的節點發送的請求,其中包含 getrawtransaction 方法。要取得此方法,我們將對節點進行 ping 操作以解析該方法。此方法需傳入兩個參數:第一個是待查詢交易的交易 ID;第二個是布林值,若設定為 false,則返回字串;否則,則返回 JSON 物件。

我們已將第二個參數設定為「true」,因此輸出結果應如下所示。

此處貼出的交易物件說明:

第 3 行:用於識別區塊鏈上交易之交易 ID(與所提供者相同)。

第 4 行:來自見證交易 txid 的交易雜湊值。

第 5 行:根據BIP 141 規定的交易大小。

第 6 行:交易的虛擬大小,此數值取自見證交易的大小。

第 7 行:交易的版本號,目前為 1 或 2。若為 2,則表示適用BIP 68

第 8 行:鎖定時間以區塊編號指定。若指定了鎖定時間,則該交易僅能在鎖定時間對應的區塊編號之後,才能被納入區塊。例如,若鎖定時間指定為 30,礦工只能在第 30 個區塊開採完成後,才可將該交易納入區塊。

第 9 至 20 行:Vin 顯示了該筆交易作為輸入所使用的 mempool 交易清單。

第 21 至 33 行:Vout 顯示以這筆特定交易作為輸入的 mempool 中的交易清單。

第 34 行:區塊雜湊值,此處顯示為 null,因為該筆交易尚未確認。

第 35 行:該交易已通過的確認次數。

第 36 行:交易進入池中的時間,以自 1970 年 1 月 1 日格林威治標準時間(GMT)起算的秒數表示。

第 37 行:新增該筆交易之區塊的挖礦時間;由於該筆交易目前處於待處理狀態,此處為 null。

第 38 行:'txid' 的序列化、十六進位編碼資料

透過分析上述資料,我們可以深入了解比特幣交易的來龍去脈。比特幣交易相當複雜,但 getrawtransaction 方法會提供原始交易資訊,這些資訊淺顯易懂,便於查閱與理解。

結論

恭喜您已掌握比特幣記憶池的運作。在本指南中,我們學習了什麼是比特幣記憶池、比特幣記憶池的用途、如何存取比特幣記憶池/如何取得比特幣待處理交易,以及如何取得比特幣待處理交易資料。

訂閱我們的電子報,獲取更多關於以太坊的文章與指南。如有任何意見回饋,歡迎透過Twitter 聯絡我們。您隨時都可以在我們的Discord社群伺服器上與我們聊天,那裡聚集了您這輩子見過最酷的開發者們 :)

分享這份指南