メモリプールとは何か
ビットコイントランザクションがブロックに含まれる前に待機するメモリプール(Mempool)の動作原理を解説します。各ノードの独立したメモリプール、マイナーのトランザクション選択、手数料競争、RBFとCPFP、ゼロ承認の危険性まで。
ビットコインウォレットで送信ボタンを押すと何が起こるのでしょうか。トランザクションは即座にブロックに記録されるわけではありません。送信ボタンを押した時点とブロックに含まれる時点の間には、必ず待機区間が存在します。この待機空間がメモリプール(Mempool)です。
メモリプールの定義
メモリプールはMemory Poolの略称です。ビットコインネットワークにおいて、まだブロックに含まれていない未確認(unconfirmed)トランザクションが待機する一時的な保存領域です。
ビットコインブロックは平均10分ごとに1つ生成されます。その10分の間に発生するすべてのトランザクションは即座には処理されず、メモリプールで自分の順番を待ちます。マイナーが次のブロックを作成する際に、メモリプールからトランザクションを取り出してブロックに格納します。
[ウォレットから送信] → [ネットワーク伝播] → [メモリプール待機] → [マイナー選択] → [ブロック格納] → [確認完了]
「1つのメモリプール」は存在しない
よく「ビットコインのメモリプール」と1つの場所のように言いますが、実際には単一のメモリプールは存在しません。ビットコインネットワークに参加する各ノードが、自分自身のメモリプールを独立して管理しています。
東京にあるノードのメモリプールとニューヨークにあるノードのメモリプールはほぼ同じですが、完全に同一ではありません。その理由は以下のとおりです。
- 伝播遅延: トランザクションがすべてのノードに到達するまでに時間がかかります。
- ノード設定の違い: 最低手数料率、メモリプールの最大サイズなどの設定がノードごとに異なります。
- 接続状態: ノードが接続しているピア(peer)によって、受信するトランザクションが異なる場合があります。
したがって「メモリプールにトランザクションがある」とは、正確には「特定のノードのメモリプールに当該トランザクションがある」という意味です。ほとんどの場合、トランザクションは数秒以内にネットワーク全体に広がるため、実用的には大きな差はありません。
トランザクションがメモリプールに入るまでの過程
トランザクションが生成されてブロックに含まれるまで、以下のステップを経ます。
ステップ1:ブロードキャスト ウォレットソフトウェアが署名済みトランザクションを接続先のビットコインノードに送信します。
ステップ2:ノード検証 トランザクションを受信したノードは有効性を検証します。主な検証項目は以下のとおりです。
| 検証項目 | 内容 |
|---|---|
| 署名の有効性 | 秘密鍵の所有者が署名したか |
| 二重支払いの有無 | 入力UTXOがすでに消費されていないか |
| 手数料の充足 | 最低手数料率(min relay fee)を満たしているか |
| スクリプトの有効性 | ロック/アンロックスクリプトが正しいか |
ステップ3:メモリプールに追加 検証を通過すると、ノードは当該トランザクションを自身のメモリプールに追加します。
ステップ4:周辺ノードに伝播 ノードは接続している他のノードに新しいトランザクションを通知します。受信したノードも同じ検証過程を経て自身のメモリプールに追加し、再び周辺に伝播します。この過程が繰り返されてトランザクションがネットワーク全体に広がります。
検証に失敗したトランザクションはメモリプールに追加されず、伝播もされません。
マイナーのトランザクション選択
マイナーは新しいブロックを作成する際にメモリプールからトランザクションを選択します。すべてのトランザクションを格納できるわけではありません。ブロックにはサイズ制限があるためです。
ビットコインのブロックサイズ上限は**4MB(4,000,000 weight units)**です。一般的なブロックには約2,000〜4,000個のトランザクションが入ります。
マイナーの選択基準はシンプルです。**手数料率(sat/vbyte)が高いトランザクションから優先的に含めます。**マイナーの収益はブロック報酬と手数料の合計なので、同じブロック空間であれば手数料をより多く支払うトランザクションを格納するのが合理的です。
メモリプールのトランザクション(手数料率の高い順):
50 sat/vbyte ████████████ ← 次のブロックに含まれる
30 sat/vbyte ██████████ ← 次のブロックに含まれる
15 sat/vbyte ████████ ← 次のブロックに含まれる
─────────────────────────── ブロックサイズ上限(4MB weight)
8 sat/vbyte ██████ ← 待機
3 sat/vbyte ████ ← 待機
1 sat/vbyte ██ ← 待機(長時間)
メモリプールの混雑と手数料競争
メモリプールにトランザクションが増えると競争が激しくなります。1つのブロックに格納できるトランザクション数は限られているため、早い確認を求めるならより高い手数料率を設定する必要があります。
ネットワーク混雑度に応じた手数料率の変化の例:
| ネットワーク状態 | 未確認TX数 | 次のブロック手数料率 | 予想待機時間(1 sat/vbyte) |
|---|---|---|---|
| 閑散 | 数千件 | 1〜2 sat/vbyte | 10〜20分 |
| 普通 | 数万件 | 5〜15 sat/vbyte | 数時間 |
| 混雑 | 10万件以上 | 50〜200 sat/vbyte | 数日〜無期限 |
2024年のビットコイン半減期前後には手数料率が数百sat/vbyteまで高騰した事例があります。反対に、週末や日本時間の早朝(UTC基準の午前)にはメモリプールが比較的閑散になる傾向があります。
メモリプールのパージ(Purging)
各ノードのメモリプールは無制限にトランザクションを保管するわけではありません。Bitcoin Coreのデフォルト設定ではメモリプールの最大サイズは300MBです。
メモリプールが上限に達すると、ノードは**手数料率が最も低いトランザクションから削除(purge)**します。削除されたトランザクションは当該ノードのメモリプールからは消えますが、ネットワークから完全に消えたわけではありません。他のノードのメモリプールにはまだ残っている可能性があります。
またBitcoin Coreはデフォルトで**14日間(336時間)**以上メモリプールに留まったトランザクションを期限切れとして処理します。
メモリプールパージ条件:
1. メモリプールサイズが300MB(デフォルト)に到達
2. 手数料率が最も低いTXから削除
3. 最低リレー手数料率(minrelaytxfee)未満のTXを拒否
4. 14日以上未確認のTXを期限切れ処理
メモリプールから削除されたトランザクションはキャンセルされたわけではありません。当該UTXOは依然として元の所有者のものであり、新しいトランザクションを作成して再送信できます。
RBFとCPFP:手数料を調整する2つの方法
メモリプールにトランザクションが入った後、手数料が低すぎて確認が遅延する場合、2つの方法で手数料を調整できます。
RBF(Replace-By-Fee)
手数料を引き上げて新しいバージョンのトランザクションに置き換える方法です。
- 原理: 同じ入力(UTXO)を使用しつつ、手数料率を引き上げた新しいトランザクションをブロードキャストします。ノードは既存のトランザクションを新しいトランザクションに置き換えます。
- 条件: 元のトランザクションにRBFシグナル(BIP 125)が含まれている必要があります。nSequenceの値が0xfffffffe未満であればRBFが有効化されます。
- 使用シナリオ: 手数料を低く設定した後、急いで確認が必要になった場合。
元のトランザクション: 5 sat/vbyte → メモリプール待機中
RBFトランザクション: 25 sat/vbyte → 元のTXを置き換え → 早い確認
CPFP(Child-Pays-For-Parent)
受取人が未確認トランザクションの出力を使って、高い手数料の子トランザクションを作成する方法です。
- 原理: マイナーは子トランザクションを含めるためには親トランザクションも一緒に含める必要があります。子の高い手数料が親の低い手数料を補償します。
- 使用シナリオ: 受取人が早く確認を受けたい場合、または送信者がRBFを設定していなかった場合。
| 比較項目 | RBF | CPFP |
|---|---|---|
| 実行主体 | 送信者 | 受取人(または送信者) |
| 原理 | 既存TXの置き換え | 新規TX追加で合計手数料を引き上げ |
| 前提条件 | RBFシグナルが必要 | 未確認出力の存在が必要 |
| 効率性 | 高い(追加データなし) | 低い(子TXのサイズ分だけ追加コスト) |
実習:txid.ukでメモリプールの現況を確認する
txid.ukのホーム画面では、現在のメモリプールの状態をリアルタイムで確認できます。
確認可能な情報:
- 未確認トランザクション数: 現在メモリプールで待機中のトランザクションの総数
- メモリプールサイズ: 待機中のトランザクションの総データサイズ(MB)
- 推奨手数料率: 目標確認時間(次のブロック、30分、1時間など)に応じた手数料率
未確認TX数が多くメモリプールサイズが大きければ混雑状態であり、高い手数料率が必要です。反対にメモリプールがほぼ空であれば、最低手数料率(1 sat/vbyte)でも次のブロックに含まれる可能性があります。stats.txid.ukではメモリプールサイズ、平均手数料率などのトレンドを時系列グラフで確認でき、手数料が低い時点を予測するのに役立ちます。
メモリプールと0-conf(ゼロ承認)取引の危険性
トランザクションがメモリプールに入ったもののまだブロックに含まれていない状態を**0-conf(ゼロ承認)**と呼びます。一部の店舗やサービスでは迅速な決済のために0-conf取引を受け入れていますが、これには危険が伴います。
- RBFによる二重支払い: 送信者がRBFで受取人のアドレスを変更した新しいトランザクションに置き換えることができます。
- マイナーの協力: マイナーが元のトランザクションの代わりに別のトランザクションをブロックに含める可能性があります。
- 伝播競争: 同一UTXOを使用する2つのトランザクションが同時にブロードキャストされると、ノードごとに先に受信したものが異なる場合があります。
ブロックに含まれて最低1承認を受けてこそ、トランザクションは確定的に有効です。高額取引では6承認(約1時間)を待つのが慣行です。メモリプールにあるということは「ネットワークに通知された」という意味であり、「確定した」という意味ではありません。
まとめ
メモリプールはビットコイントランザクションがブロックに含まれる前に待機する一時的な空間です。各ノードが独立して自身のメモリプールを管理し、マイナーは手数料率が高いトランザクションからブロックに格納します。ネットワークが混雑すると手数料競争が激しくなり、RBFとCPFPを通じて手数料を事後調整できます。メモリプールの状態を確認し、適切な手数料率を設定することが、ビットコインを効率的に使用する核心です。txid.ukでリアルタイムのメモリプール現況を確認する習慣をつけましょう。
関連記事: