メンプール (Mempool) — ビットコイン取引待機室
メンプールは、まだブロックに含まれていない未確認トランザクションが待機する場所です。
メンプール (Mempool, Memory Pool) は、まだブロックに含まれていない未確認トランザクションが待機する場所です。各ビットコインノードは独自の独立したメンプールを保持しているため、厳密には「一つのメンプール」ではなく、ネットワークに分散された数万の個別メンプールが存在します。
graph LR USER["👤 ユーザー"] -->|"Tx作成"| NODE["📡 ノード"] NODE -->|"伝播"| MEMPOOL["🔄 メムプール
(未確認Tx待機)"] MEMPOOL -->|"マイナーが選択
(高手数料優先)"| BLOCK["⛏️ ブロック"] BLOCK -->|"検証後追加"| CHAIN["⛓️ ブロックチェーン"] style MEMPOOL fill:#f7931a,stroke:#f7931a,color:#000 style CHAIN fill:#3fb950,stroke:#3fb950,color:#000
トランザクションのライフサイクル
ビットコインのトランザクションは生成から最終確認まで明確な段階を経ます。
生成段階: ユーザーがウォレットソフトウェアを通じてトランザクションを構成します。消費するUTXOを入力として選択し、受信アドレスと金額を出力として指定し、秘密鍵で署名します。この時点ではトランザクションはまだネットワークに伝播されていない状態です。
伝播段階: 署名されたトランザクションが接続されたピアノードに送信されます。受信ノードはinvメッセージで他のピアに新しいトランザクションの存在を通知し、関心のあるピアがgetdataで要求すると実際のトランザクションデータを転送します。このゴシップ方式によりトランザクションは数秒以内にネットワーク全体に拡散されます。
検証段階: 各ノードは受信したトランザクションに対して独立した検証を実行します。署名の有効性、参照されたUTXOの存在、二重支払いの試み、スクリプト実行結果、手数料の適正性などを確認します。検証に失敗したトランザクションは即座に破棄されます。
メンプール待機段階: 検証を通過したトランザクションはノードのメンプールに追加されます。ここでマイナーがブロックに含めるまで待機します。手数料が高いトランザクションほど早く採掘される確率が高くなります。
採掘と確認段階: マイナーがメンプールから手数料率(sat/vB)が高い順にトランザクションを選択して候補ブロックを構成し、有効なプルーフ・オブ・ワークが見つかるとブロックがネットワークに伝播されます。そのブロックに含まれたトランザクションはメンプールから除去され、1-承認(confirmation)状態になります。
メンプールポリシー: 最小リレー手数料と有効期限
ノードはメンプール管理のためにポリシールールを適用します。**最小リレー手数料(minRelayTxFee)**はデフォルトで1 sat/vBに設定されており、これより低い手数料のトランザクションはメンプールに追加されず、他のノードに中継もされません。これはスパムトランザクションによるメンプールの溢出を防ぐ最初の防御線です。
メンプール有効期限はデフォルトで336時間(2週間)に設定されています。この期間中に採掘されなかったトランザクションはメンプールから自動的に除去されます。また、メンプールサイズに上限(デフォルト300MB)が設定されており、これを超過すると手数料が最も低いトランザクションから順に退出されます。
RBF (Replace-by-Fee) と CPFP (Child-Pays-for-Parent)
RBF (Replace-by-Fee) はすでにメンプールにあるトランザクションをより高い手数料のトランザクションに置き換えるメカニズムです。BIP125で定義されたopt-in RBFは、トランザクションのシーケンス番号が0xfffffffe未満の場合に置換可能であることを示します。置換トランザクションは元のトランザクションのすべての入力を含み、絶対手数料(総手数料)が元より高くなければなりません。
CPFP (Child-Pays-for-Parent) は手数料が低くメンプールに滞留しているトランザクションの出力を消費する新しいトランザクション(子)を高い手数料で作成する手法です。マイナーは親と子のトランザクションをパッケージとして評価し、結合された手数料率が十分に高ければ両方をブロックに含めます。CPFPは受信者側からも手数料ブースティングが可能であるという点でRBFと補完的な関係にあります。
Full-RBF 論争
Bitcoin Core 24.0(2022年)で導入されたfull-RBFオプション(mempoolfullrbf=1)は、opt-inシグナルなしにすべての未確認トランザクションの置換を許可します。この機能をめぐる論争はビットコインコミュニティにおける重要なポリシー議論でした。
賛成派は、未確認トランザクションは最終性が保証されていないため、RBFシグナルに依存することは偽のセキュリティ感覚を与えるだけだと主張しました。マイナーは経済的合理性に従ってより高い手数料のトランザクションを選択するインセンティブがあり、full-RBFはこの現実をコードに反映するだけだというものです。反対派は、0-承認決済に依存する商人やサービスへの悪影響を懸念しました。Bitcoin Core 28.0ではfull-RBFがデフォルトで有効化されました。
手数料推定戦略と実践的ヒント
効率的な手数料設定は、確認速度とコストのバランスです。mempool.spaceのような可視化ツールを通じて現在のメンプールの手数料分布を確認できます。急を要さないトランザクションは週末やネットワークが閑散な時間帯を活用することで手数料を大幅に節約できます。
手数料推定における重要な単位は**sat/vB(satoshi per virtual byte)**です。セグウィット以降、ブロック容量はウェイトユニットで計算され、1 vByte = 4 weight unitsです。マイナーは利用可能なブロック空間に最も高い手数料率のトランザクションを優先配置するため、総手数料ではなく手数料率が確認優先順位を決定します。
RBFをサポートするウォレットを使用すると、最初に低い手数料で送信し、必要に応じて手数料を引き上げることができ、過剰な手数料支払いを避けることができます。これは不確実なメンプール状況下での合理的な戦略です。
メンプールサイズの変動とネットワーク状態の解釈
メンプールサイズはビットコインネットワークのリアルタイム健全性指標です。メンプールが空であればネットワーク使用量が少なく、最小手数料でも次のブロックに含まれることを意味します。逆にメンプールが数百MBまで膨張すると、ブロック空間への需要が供給を大きく超過していることを示し、手数料が急騰します。
歴史的にメンプールの混雑は市場の急変(急騰または急落時の移動需要)、NFT/Ordinalsブーム、スパム攻撃などと関連してきました。2017年末のビットコイン価格急騰期にはメンプールが数十万件の未確認トランザクションであふれ、手数料がトランザクションあたり数十ドルに達しました。このような混雑イベントは、セグウィット採用、バッチ処理導入、ライトニングネットワーク使用拡大などスケーラビリティソリューションの採用を促進するきっかけとなりました。
関連する概念
- ノード — メンプールを保持し、トランザクションを検証して伝播させるビットコインネットワーク参加者
- プルーフ・オブ・ワーク — マイナーがメンプールからトランザクションを選択してブロックを生成するコンセンサスメカニズム
- セグウィット — 手数料構造に影響を与えたビットコインプロトコルアップグレード
- ライトニングネットワーク — メンプール混雑を回避するオフチェーン決済ソリューション
- ビットコインとは? — ビットコインの基本概念と動作原理を紹介する出発点