ビットコイン技術 入門

メンプール (Mempool) - ビットコイン取引待機室

メンプールは、まだブロックに含まれていない未確認トランザクションが待機する場所です。

· 6分

メンプール (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とCPFP

メンプールに入ったトランザクションの手数料が低すぎる場合、2つのメカニズムで待機列の順位を引き上げられます。それぞれ専用の項目にまとめられています。

  • RBF(Replace-by-Fee) — 送信者が同じ入力を使うより高い手数料のトランザクションで、滞留したトランザクションを置き換えます。
  • CPFP(Child-Pays-for-Parent) — 受取人を含め、消費可能な出力を持つ誰もが高い手数料の子トランザクションを付け、マイナーがパッケージを一緒に確認するよう促します。

メンプール状態の読み方、手数料推定、full-RBF論争、0-承認決済の危険までを実践的に扱う内容は、実用記事 取引が10分経っても確認されない理由 で確認してください。

関連する概念

関連記事