仮想通貨関連の用語|メモリープール(mempool)とは

要約:

  • メモリープールとは、マイナーやバリデータの承認待ちのトランザクションを保管する場所です。
  • メモリープールはノード上に存在しています。単一のメモリープールがあるわけではなく、各ノードがそれぞれのメモリープールに承認待ちトランザクションを保管しています。
  • ユーザーが送信したトランザクションは、まずノードによってチェックされます。審査をパスするとメモリープールに入れられ、他のノードに共有されます。

メモリープールとは

メモリープール(mempool)とは、マイナーやバリデータに承認される前(ブロックチェーンに追加される前)のトランザクションの保管場所です。より厳密には、承認前のトランザクションを保管するために、各ノードが割り当てる容量です。

出典:babypips

メモリープールは「承認前トランザクションの待合室」とも表現されます。

ノードごとに存在する

メモリープールは共通のものがあるわけではなく、各ノードがそれぞれ保有しています。メモリープールの中身はノードごとに一致しているわけでもありません。

割ける容量の大きいノードは、より多くの承認前トランザクションを保管できます。

詳細は後述しますが、ユーザーのウォレットから送られたトランザクションは、つながりのあるノードに送られ、最初に受け取ったノードはつながりのあるノードに共有します。各ノードはこのように、メモリープールに含めたトランザクションを伝播させていきます。

メモリープールが必要な理由

利便性の向上

メモリープールが待合室として機能するおかげで、ユーザーは自由にトランザクションを送れます。

前提として、1つのブロックに全てのトランザクションを入れることはできません。そのため、ユーザーから送られてきたトランザクションが多いと、マイナーやバリデータはガス代が高いトランザクションを優先的にブロックに含めます。

したがって、一部のトランザクションはすぐにはブロックに含めてもらえず、含めてもらうのを待っていないといけません。メモリープールは、そういった経緯で発生した承認待ちのトランザクションを保管できます。

もしメモリープールがなかったら、トランザクションの送り直しを要求されたかもしれません。

ちなみに以下のグラフの青線は、ビットコインの1つのブロックに入っているトランザクション数を表しています。だいたい2,000前後で推移しています。

出典:Blockchain.com

マイナーやバリデータにとって有利

またメモリープールがあるおかげで、マイナーやバリデータは収益性を高められます。

ブロックに入れられたトランザクションにかかる手数料は、そのブロックを生成したマイナーやバリデータの報酬になります。そのため、高いガス代が設定されたトランザクションを優先すれば、得られる報酬が多くなります。

メモリープールがあるおかげで、マイナーやバリデータはトランザクションを比較でき、有利なトランザクションを優先的にブロックに入れられ、報酬を増やせます。

メモリープールのデータは確認可能

メモリープールのデータは、ブロックチェーンエクスプローラーなどから確認できます。メモリープールは承認待ちのトランザクションの待合室なので、ブロックチェーンを使う人がどれだけいるか(ブロックチェーンの健康状態)が分かります。

試しにビットコインのメモリープールを見てみたいと思います。以下は2023年5月6日時点の24時間表示のメモリープールの様子です。

出典:Johoe’s Bitcoin Mempool Statistics

上記のグラフは、設定されたガス代の高さでトランザクションを色分けしています。上にある赤っぽい部分はガス代が高いトランザクション、下にある青っぽい部分はガス代が低いトランザクションです。一度に含められるトランザクションの量(weight)には制限があるので、マイナーは上にあるトランザクションから優先的にブロックに含めます。

以下も、2023年5月6日時点の24時間表示のメモリープールの様子です。今度はトランザクションの数が縦軸になっています。

出典:Johoe’s Bitcoin Mempool Statistics

以下も2023年5月6日時点の24時間表示のメモリープールの様子です。トランザクションを重さ(weight)が縦軸になっています。

出典:Johoe’s Bitcoin Mempool Statistics

ちなみにvMB(バーチャルメガバイト)とは、ビットコインがトランザクションの容量を計測する際に使う単位です。

ビットコインでは、トランザクションの容量(重さ)を「weight unit」という単位で表します。4,000,000 weight unitsまでなら1つのブロックに入れられます。

weight unitsのほか、vbyte(バーチャルバイト)という単位も存在しており、「4 weight units = 1 vbyte(= 1 vsize)」という関係性です。したがって4,000,000 weight unitsは、1,000,000 vbytesや1vMBとも表せます。

4vMBは、実際には2MBくらい、理論上4 MBくらいと言われています。

以下は、全期間(利用したサイトの全期間)のビットコインのメモリープールの様子です。縦軸はトランザクションの数です。

出典:Johoe’s Bitcoin Mempool Statistics

2023年5月時点が一番トランザクションの数が多いですね。

以下は、全期間のビットコインのメモリープールの様子です。縦軸はトランザクションの重さです。

出典:Johoe’s Bitcoin Mempool Statistics

トランザクションの流れ

トランザクションの流れについて整理してみたいと思います。トランザクションの流れにはメモリープールも大きく関係しています。

トランザクションとは、メッセージに署名を付与したものです。例えば、メタマスクで1 ETHを送るという内容を入力して署名すると、トランザクションを作成したことになります。作成したトランザクションは自動でノードに送られます。

トランザクションの流れは以下の通りです。

  1. ユーザーがウォレットで送金条件を入力する
  2. ユーザーは署名を行う
  3. トランザクションがノードに送られる
  4. ノードはトランザクションを検証する
  5. 問題なければメモリープールに加えられ、接点のあるノードにトランザクションを共有する
  6. マイナー・バリデータがトランザクションをブロックに入れる
  7. ブロックが承認されれば、トランザクションは確定となる
  8. ノードは確定済みトランザクションをメモリープールから削除する

以下はイメージです。上記の手順1〜5を表しています。

出典:Alchemy

何を検証するのか

送信されたトランザクションは、ノードに検証されて合格したらメモリープールに入れてもらえるのでした。

ノードはブロックチェーンのルールに従ってチェックしていますが、具体的に何をチェックしているかというと、以下のような点が挙げられます。

  • 十分な資金があるか(送金、ガス代)
  • トランザクション作成者が送信者本人か
  • 送信内容に改ざんがされていないか
  • ナンス(Nonce)

不合格の場合は、ノードによってトランザクションが拒否されます。

上記のナンス(Nonce)は、イーサリアムなどの場合のみチェックされます。イーサリアムのナンスとは、そのウォレットアドレスが送信したトランザクションの順序を数える数字です。

例えばナンス1のトランザクションは、ナンス0のトランザクションよりも先には承認されないなどのルールがあり、ノードはこれをチェックします。

検証前にメモリープールに入れられる?

「送信されたトランザクションは、検証されてからメモリープールに入れられる」と説明しましたが、この点は誤っているかもしれません。

調べていると「メモリープールに入れられ、その後に検証される。検証をパスしたトランザクションは「pending」状態となる」という説明もありました。

いろいろ調べましたが不明でした、、

参照

Johoe's Bitcoin Mempool Size Statistics
Johoe's Bitcoin Mempool Size Statistics
Mempool | Binance Academy
Mempool | Definition: A node’s mechanism for keeping track of unconfirmed transactions that the node has seen (but have not yet been added to a block).
What Is a Mempool? | Ledger
A mempool is a blockchain node’s waiting room for queued and pending transactions, but what does it do exactly? Ledger Academy Explains:
Mempool Definition | CoinMarketCap
A mempool is the node's collection of all of the unconfirmed transactions that it has seen.

↓ビットコインのMempoolについて

Bitcoin Mempool — Simply explained
In 2020, 11 years after Bitcoin's official birth, we hardly deal with Bitcoin's fundamental technology.

↓イーサリアムのMempoolについて

What is a Mempool?
A mempool, or memory pool, is a list of pending transactions waiting for validation from a node before it is committed to a block on the blockchain.
Ethereum Memory pool. How does it work?
The Ethereum blockchain is actually a distributed ledger, just like the bitcoin blockchain, it offers computing functionality in the form…

↓ビットコインのブロックサイズについて

bitcoinmagazine.com
Network Activity - Bitcoiner.live
Weight units - Bitcoin Wiki

↓イーサリアムのナンスについて

What is nonce in Ethereum? How does it prevent double spending?
recently I got fascinated by blockchain, and started learning Ethereum. I came across the concept of the nonce in Ethereum. After researching I found out that n...

コメント

タイトルとURLをコピーしました