mempool(メモリ プール)の主な機能は、検証される前にトランザクションを保持することです。ビットコインやイーサリアムなどのブロックチェーンでも、mempoolが使用されています。ブロックチェーンの過負荷は、トランザクションが長時間滞留する主な要因です。トランザクションを速やかに処理したい場合は、適切なガス手数料を使用することが重要です。
私たちは、さまざまなブロックチェーン上でトランザクションを頻繁に行います。しかし、ブロックチェーンの要素がどのように動作するかを理解することは、トランザクションの迅速化やコスト削減に寄与できる可能性があります。
しかしこの分析では、ブロックチェーン内の重要なコンポーネントであるMempoolとその動作原理について説明し、ビットコインおよびイーサリアムのネットワーク上で保留または遅延しているトランザクションをどのように処理できるかについても詳しく説明します。
こちらもお読みください:ブロックチェーンエクスプローラーとは何ですか?
メンプール(メモリプールの短縮形)は、未確認のトランザクションなどの情報を保持するノードの領域で、まだ承認または検証されていないトランザクションの待機室として機能します。要するに、メモリプールは、トランザクションがまだブロックに含まれていない段階で待機する場所です。
トランザクションが検証されると、それがブロックチェーン上のすべてのノードによってアクセス可能になります。ただし、トランザクションが承認される前に、さまざまなノードは署名を確認し、出力が入力を超えていないか、システムがすでに同様のトランザクションを送信していないかなどを確認します。これらの条件が満たされない場合、バリデーターまたはマイナーはトランザクションを拒否することがあります。
重要なことは、ブロックチェーンには単一のメモリプールが存在しないという点です。ブロックチェーンネットワーク内の各ノードには独自のトランザクションプール(またはtxpool)と呼ばれるメモリプールが存在します。その結果、さまざまなノードのトランザクションプールが共同でブロックチェーン全体のメモリプールを形成するのです。
例として、ビットコインネットワークにおいても、トランザクションは直接的にブロックチェーンに組み込まれるわけではありません。代わりに、各ノードはトランザクションを「mempool」または「txpool」と呼ばれる一時的なストレージに保存します。その結果、トランザクションのキューが形成され、チェックや検証が必要な状態になります。
したがって、トランザクションをソートしてブロックに追加する必要がなく、整理されたトランザクションのキューとしてメンプールを定義することで済みます。トランザクションは確認されるか、ブロックにパッケージ化される前にのみ、メモリプール内に存在することに留意してください。上記の図において、青色の領域がノード内のメモリプールを示しています。また、次の図はネットワーク全体でのメモリプールの分布を示しています。
フルビットコインネットワークのノードにはMempoolがある - Babypips
上の図から分かる通り、ビットコインやイーサリアムなどのネットワーク内のすべての完全ノードにはメモリプールが存在します。同様に、次の図に示されているように、すべてのトランザクションはネットワークノード間でブロードキャストされます。
紫色のユーザーが始めるビットコイントランザクションは、承認前にメモリプールに保存されることになります。トランザクションが検証を受けると、その後の図に示されているように、それがブロックに追加されることに重要な注意を払うことが必要です。
ファイルに追加 (ブロック) - Babypips
図の青い矢印は、トランザクションが検証された際に何が起こるかを示しており、トランザクションが txpool からブロックに移動される段階です。この段階で、すべてのコンピュータには確認されたトランザクションの更新されたデータが存在することになります。
一般的に言えば、Mempoolは異なるブロックチェーンのアーキテクチャに応じて異なる方法で機能します。Mempoolの動作は、各ブロックチェーンのコンセンサスメカニズムの種類によって影響を受けます。つまり、Mempoolの挙動はネットワークのコンセンサスメカニズムのタイプに応じて異なります。トランザクションはバリデータによって検証されることもありますし、検証されることもあります。また、マイナーの役割もネットワークによって異なります。
例えば、ビットコインのブロックチェーンでは、Proof-of-Workコンセンサスメカニズムが使用されているため、トランザクションはマイナーによって検証されます。一方、イーサリアムのネットワークでは、バリューメカニズムによってトランザクションが承認されます。
こちらもお読みください:イーサリアムの再構築とネットワークの健全性に関する潜在的な懸念
ビットコインネットワークでは、トランザクションごとに最低でも6つの確認が必要ですが、一方でイーサリアムブロックチェーンでは最低でも7つの確認が必要です。基本的に、メモリプール内の各トランザクションには特定のステータスが付与されます。これらのトランザクションは保留中の状態でキューに登録されます。バリデータやマイナーがキューに登録されたトランザクションを検証すると、それらは保留中から確認済みの状態に移行します。
こちらもお読みください:ビットコインライトニングネットワークとは何ですか?
友人にETHを送る場合の簡単な手順を見てみましょう。最初に取引の確認をおこなう。ウォレットアドレスを入力し、送信するETHの量を指定します。次に、トランザクションを処理するためのガス手数料を設定します。これは、トランザクションの処理速度を決定する要因です。
これらの手続きを実行すると、トランザクションはキューに追加され、検証待ちの状態になります。この段階では、トランザクションはまだブロックに含まれていないため、ネットワーク全体にブロードキャストされるだけです。
その後、バリデーターがトランザクションを検証します。トランザクションがすべての条件を満たすことが確認されると、トランザクションはキューから保留状態に移行し、確認待ちとなります。この段階で、バリデーターの1つがメモリプールからトランザクションを選び、新しいブロックに追加します。
新しいブロックに含まれるトランザクションは、複数のバリデーターによって承認されます。そして、このプロセスによって友人が送られたETHを受け取る準備が整います。
以下の手順で、友人にETHを送るプロセスを見てみましょう。
ステップ 1: 送信者は宛先アドレスを入力し、ネットワーク取引手数料を受け入れ、「送信」をクリックします。
ステップ 2: トランザクションは最も近いメモリプールに追加され、キューに入れられます。
ステップ 3: メモリプールのデータがネットワーク内の他のノードにブロードキャストされます。
ステップ 4: ノードがトランザクションを承認し、そのステータスが「キューに登録済み」から「保留中」に変わります。
ステップ 5: マイナーは保留中のトランザクションを選択し、ブロックに追加します。
ステップ 6: 残りのノードは、メモリプールからトランザクションを削除します。
ステップ 7:トランザクションが完了し、資産が宛先ウォレットに移動します。
これにより、トランザクションがどのように処理されるかが理解できます。トランザクション処理中に遅延が発生する理由と、これに対処する方法についても見てみましょう。
トランザクションがメモリ内で滞留する主な要因は、ネットワークの接続性です。利用可能なブロックスペースに多くのトランザクションが積み重なると、MEMPOOL BACKLOG が発生し、保留中のトランザクションが平均を上回る場合に発生します。
ブロックチェーン上のトラフィック レベルに影響を与える特定のイベントやニュースは、ネットワーク内で輻輳を引き起こす可能性があります。エアドロップ、新しい取引所への上場、またはパートナーシップの締結などがその例です。ただし、ノードは特定の項目を優先する要因も考慮します。これには以下が含まれます。
取引手数料: 異なる取引に付随する手数料の額によって、最初に承認される取引が決まります。マイナーとバリデーターは報酬を追求するため、高い手数料がかかる取引を優先します。
したがって、マイナーとバリデーターは、サトシ/バイトなどの単位あたりの手数料に基づいて、mempool 内のトランザクションを整理し、最終的に最も高い手数料のトランザクションを最初にブロックに追加します。このシステムは、ユーザーに高い手数料の設定を促す役割を果たします。
それにもかかわらず、ネットワークトラフィックに応じて、ユーザーはガス手数料を設定し、トランザクションをタイムリーに強化できます。イメージしているシナリオでは、履歴データ、ネットワークの混雑度、トランザクションボリューム、およびメモリ内の手数料分布などの要素を考慮してガス手数料を決定します。
確認時間: ユーザーは料金を設定する前に確認時間を考慮する必要があります。確認時間が長い場合、マイナーとバリデーターは高い手数料のトランザクションを優先していることを示します。mempool が混雑している場合、低い手数料の取引は完了までに時間がかかることがあります。
ブロックスペース: ブロックスペースはトランザクションの承認にかかる時間を決定します。制限が常にあるため、マイナーやバリデーターは高い手数料のトランザクションを優先的に扱います。これは、低い手数料のトランザクションがメモリプール内で待たされることを意味します。
メモリプールのサイズとエビクション: 各トランザクションはブロックに追加される際に、サイズ(キロバイト単位)のデータとして計測されます。したがって、大きなメモリプールは多くのトランザクションを保持できます。通常、ノードはメモリプールのサイズを設定しますが、ビットコインの場合、一般的には300MBです。メモリプールがしきい値に達すると、ノードは最低トランザクション料金を設定する場合があります。
これらのダイナミクスを理解することで、適切な取引手数料を設定し、合理的な時間内にトランザクションを承認させることが容易になります。ピーク時には過剰な支払いを避け、低いスループットの時には適切な手数料を設定するなど、効果的な対処が可能です。また、トランザクションの検証時間に関する正確な予測を行うこともできます。
トランザクションがmempoolで詰まる理由は複数ありますが、その多くはガス手数料に関連しています。ただし、ネットワークの混雑がトランザクションがmempoolで詰まる最も一般的な理由です。混雑が発生すると、高い手数料を支払うトランザクションが優先的に処理される傾向があります。それ以外のトランザクションはmempoolに滞留する可能性があります。
そのため、ネットワークがピーク時に混雑している場合、最善の対策はトランザクション手数料を増やすことです。これは、混雑時にガス手数料が急上昇するためです。したがって、混雑時にトランザクションを処理する場合、他の時間帯の手数料と一致させることが重要です。ネットワークの利用者は、処理を優先させるために料金を支払っているわけです。
また、トランザクションがメモリプールに滞留するもう1つの理由は、ハッシュレートの低下です。保留中の多数のトランザクションを処理するための十分な計算能力がネットワーク内にない場合、ハッシュレートが低下していると判断されます。この状態では、トランザクションの処理が遅くなり、mempoolにトランザクションが滞留する可能性が高まります。
トランザクションがメモリプールで詰まる場合、いくつかの選択肢があります。最初の選択肢はトランザクションをキャンセルすることです。この場合、新たなトランザクション手数料が発生します。例えば、同じ nonce を使用してトランザクションを再送信することができます。
次に、MetaMaskやElectrumなどのサードパーティのウォレットを使用してLedgerを接続することで、トランザクションを高速化することもできます。ただし、この場合は追加の手数料を支払う必要があります。
3番目の選択肢は、トランザクションが少し長い時間をかけて完了するのを待つことです。これにより、ネットワークトラフィックが減少するタイミングを待つことで、追加の費用をかけることなくトランザクションを完了させることができます。
ビットコインネットワークに送信されるトランザクションは、直ちにブロックチェーンに追加されるわけではありません。最初に、これらのトランザクションはメモリプールに追加されます。過去には、このようなトランザクションには、バイト当たりのサトシ単位で測定される手数料が必要でした。
しかし、SegWitのアップグレード後にこの仕組みが変更され、トランザクションの計算は重み単位で行われるようになりました。SegWitの利点は、以前よりも多くのデータをブロックに追加できることです。具体的には、ブロックごとに2MBのデータを扱えるようになり、その後4MBまで増加する可能性があります。
最初の段階では、イーサリアムネットワークでは、トランザクションが検証される前にメモリプールに入れる必要がありました。しかし、後にブロックチェーンがプルーフ・オブ・ワークからプルーフ・オブ・ステークのコンセンサスメカニズムに移行した際に、新たな概念である「ブロックビルダー」が導入されました。
基本的に、ブロックビルダーは、最適化されたトランザクションバンドルを形成するために、トランザクションをまとめる役割を果たすサードパーティの役割です。この場合、サードパーティのエンティティは、メモリプールから特定のトランザクションを選び出し、それらを最適な順序でバンドルにまとめます。その後、このバンドルをバリデーターに提供して、トランザクションを含むブロックに組み込むようにします。この作業を行ったサードパーティのエンティティは、その報酬として暗号資産を受け取ることができます。
メモリプールは、ブロックチェーンノードがトランザクションを検証する前に一時的に保持するスペースです。トランザクションがこのメモリプールにとどまる期間は、ネットワークトラフィックの混雑やガス手数料などの要因によって変動します。具体的には、イーサリアムブロックチェーンではトランザクションプールと呼ばれる仕組みが使用されています。
mempoolは、トランザクションがブロックに追加される前に保留されるスペースであり、トランザクションが検証を受けると、それらはブロックチェーン上のブロックに組み込まれます。
メモリプール内に一部のトランザクションが存在する場合、バリデーターやマイナーの中から一部がこれらを選択し、ブロックに追加することがあります。ただし、ネットワークのトラフィックが過度に混雑している場合、一部のトランザクションは長期間キューに入れられたり、保留状態のままになる可能性があります。
BTCのメモリプールは、ビットコインネットワーク内で処理されるトランザクションの待機室であり、通常、すべてのビットコインブロックチェーンノードには個別のメモリプールが存在します。
イーサリアムのメモリプールは、イーサリアムノード内でトランザクションが確定する前に一時的に保存されるスペースであり、トランザクションが確定するまでの所要時間は、一定期間内のイーサリアムネットワークのトラフィックによって影響を受けます。
著者:Gate.ioの研究者Mashell C.
翻訳者:AkihitoY.
免責事項:
この記事は研究者の意見を表すものであり、取引に関するアドバイスを構成するものではありません。
本記事の内容はオリジナルであり、著作権はGate.ioに帰属します。転載が必要な場合は、作者と出典を明記してください。そうでない場合は法的責任を負います。