メインコンテンツへスキップ

ビットコインのメンプールにアクセスする方法

更新日:
2025年11月26日

読了時間:7分

概要

ビットコインはブロックチェーン技術の先駆けです。ビットコインの登場により、ブロックチェーンと分散化の新たな時代が幕を開けました。ビットコインのおかげで、誰もが今日のようにP2P取引を楽しめるようになりました。このガイドでは、ビットコインのメンプールからこうした取引を取得する方法について解説します。

前提条件:

  • ターミナル/cmd(CLI)。
  • ビットコインノード。
  • 分散化への愛。

ビットコインのメモプールとは何ですか?

ビットコインネットワーク上で送信される取引は、ブロックチェーンに直接追加されるわけではありません。有効な取引はすべて、ブロックに組み込まれる前に待機エリアに入る必要があります。この待機エリアは「メンプール」と呼ばれています。メンプールのサイズが大きい場合は、ネットワークのトラフィックが混雑していることを示しており、その結果、取引の確認時間が長くなり、取引手数料が高くなります。

:一般的な慣例では、Bitcoinはプロトコル/ネットワークを指し、bitcoinまたは BTCは通貨を指します。

ビットコインの取引手数料は、取引の1バイトあたりに支払われるサトシの数で測定されます。サトシは、ビットコインネットワークのネイティブ通貨であるビットコインの最小単位であり、1ビットコイン=1億サトシです。マイナーは、メモプール内の取引手数料が高い取引を優先的に処理します。 しかし、SegWitのアップグレード以降、ビットコインの取引に関してはいくつかの変化がありました。このアップグレードにより、ビットコインブロックあたりの取引数を増やすために、「SegWit取引」と呼ばれる新しい取引形式が導入されました。これにより、次の2つの問題が解決されました。1. ビットコインにおける1秒あたりの取引数が増加したこと、2. 取引の改ざん可能性(トランザクション・マレアビリティ)の問題が解決されたことです。

SegWit導入前は、ブロックや取引はバイト単位で測定され、各ブロックの容量は1 MB(メガバイト)、つまり100万バイトに制限されていました。SegWit導入後は、取引やブロックは「ウェイト」単位で測定されるようになり、このウェイト単位を用いてビットコインのデータを測定し、取引を比較するようになりました。

次に説明する概念は「vByte」です。1 vByteは4ウェイト単位に相当します。従来のトランザクションでは、1バイトのデータに1 vByte(4ウェイト単位)が必要です。一方、SegWitトランザクションでは、1バイトのデータに1/4 vByte(1ウェイト単位)しか必要としません。この割引により、ブロックには4倍のトランザクションを詰め込むことが可能になります。 現在のビットコインのブロックサイズは、1 vMegabyte/100万 vByte/400万ウェイト単位に制限されています。ほとんどのウォレットは、トランザクション手数料を「サトシ/vByte」単位で計算しており、これは使用されたデータ1 vByteごとに支払われます。

ビットコインのメンプール分析の活用事例

メンプールの分析は、ネットワーク上の混雑状況やトラフィックを把握するのに役立ち、ひいては取引手数料の算出に役立ちます。

それでは、mempoolにアクセスして、プールからいくつかのトランザクションデータを取得してみましょう。

Quicknodeのビットコインエンドポイントの設定

本日の目的を達成するには、ブロックチェーンデータにアクセスするためのビットコインノードが必要です。ビットコインには膨大なデータがあるため、ここで独自のノードを立ち上げるのは非常にコストがかかり、時間もかかります。そこで、代わりにこちらで無料のQuicknodeアカウントに登録し、簡単にビットコインのエンドポイントを作成できるようにします。

Quicknodeのビットコインエンドポイントのスクリーンショット

後で必要になるため、ノードのHTTPS URLをコピーして保存しておいてください。

ビットコインのメンプールへのアクセス方法/ビットコインの保留中の取引を取得する方法

ビットコインのRPCメソッドを使用して、mempoolデータを取得します。具体的には、getrawmempoolメソッドを使用します。ターミナルまたはコマンドプロンプトを開き、以下の内容をコピーして貼り付けてください:

curl --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getrawmempool", "params": [true]}' -H 'content-type: application/json' <QUICKNODE_BITCOIN_URL>

QUICKNODE_BITCOIN_URL を、前の手順で取得したビットコインノードの HTTPS URL に置き換えてください。上記は、getrawmempool メソッドを使用した、当ノードへのcURLリクエストの例です。 

出力は次のようなものになるはずです。

それでは、出力内容について見ていきましょう。上記のメソッドは、現在メンプールにある保留中のトランザクションのリストを返します。その中から1つのトランザクションを取り出し、各フィールドについて詳しく見ていきましょう。

{
"result": {
"2d1228abf06836b1173936061fec0384e82e3b684d7950a27f06a06f587400d3": {
"fees": {
"base": 0.00111999,
"modified": 0.00111999,
"ancestor": 0.00111999,
"descendant": 0.00111999
},
"size": 90826,
"fee": 0.00111999,
"modifiedfee": 0.00111999,
"time": 1629052793,
"height": 695936,
"descendantcount": 1,
"descendantsize": 90826,
"descendantfees": 111999,
"ancestorcount": 1,
"ancestorsize": 90826,
"ancestorfees": 111999,
"wtxid": "b3b49bb3dcae483d579710a2e1f9c7ed585ab35e2a8cb941ff8cb27ea8adec20",
"depends": [],
"spentby": [],
"bip125-replaceable": false
}
}
}

上記のJSON出力の説明:

3行目:これは、ブロックチェーン上のトランザクションを識別するためのトランザクションIDです。

4行目~9行目:取引手数料の内訳。

10行目:BIP 141に基づくトランザクションのサイズ。

11行目:BTC(ビットコイン)建ての取引手数料。

12行目:マイニングの優先順位決定に用いられる、手数料差分を含む取引手数料。

13行目:1970年1月1日(GMT)からの経過時間(秒)で、トランザクションがプールに登録された時刻。

14行目:トランザクションがプールに入った時点でのブロックチェーンの高さ(最新のブロック)。

15行目:このトランザクションを含めた、mempool内の子トランザクションの数。

16行目:mempool内のすべての子トランザクションのサイズ。

17行目:mempool内のすべての子トランザクションの手数料を修正しました。

18行目:このトランザクションを含めた、mempool内の祖先トランザクションの数。

19行目:mempool内のすべての祖先トランザクションのサイズ。

20行目:mempool内のすべての親トランザクションの修正後の手数料。

21行目:トランザクションIDとウィットネスデータ

22行目:この取引の入力として未確認の取引が使用される場合は、ここにその取引を入力してください。

23行目:この取引のデータを使用している別の未確認取引がある場合は、ここにその取引を入力してください。

24行目:BIP 125に基づき、トランザクションが置換可能かどうかを示すブール値。

さて、実際のトランザクションデータを取得するには、特定のトランザクションに関する情報を返す別のメソッド「getrawtransaction」を使用する必要があります。ターミナルまたはコマンドプロンプトに以下の内容をコピーして貼り付けてください:

curl --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getrawtransaction", "params": ["2d1228abf06836b1173936061fec0384e82e3b684d7950a27f06a06f587400d3", true]}' -H 'content-type: application/json' <QUICKNODE_BITCOIN_URL>

QUICKNODE_BITCOIN_URL を、前の手順で取得したビットコインノードの HTTPS URL に置き換えてください。 上記は、getrawtransaction メソッドを使用した、当ノードへのcURLリクエストです。このメソッドを取得するには、当ノードに ping を送信してメソッドを解決します。このメソッドには 2 つのパラメータを渡す必要があります。1 つ目は、照会対象のトランザクションのトランザクション ID です。2 つ目はブール値で、false に設定すると文字列が返され、それ以外の場合は JSON オブジェクトが返されます。

2番目のパラメータを「true」に設定したので、出力は次のようになるはずです。

ここに貼り付けられたトランザクションオブジェクトの説明:

3行目:ブロックチェーン上のトランザクションを識別するためのトランザクションID(提供されたものと同じ)。

4行目:ウィットネス取引のtxidから生成されたトランザクションハッシュ。

5行目:BIP 141に基づくトランザクションのサイズ。

6行目:ウィットネス取引のサイズから算出される、トランザクションの仮想サイズ。

7行目:トランザクションのバージョン番号。現在は1または2です。2の場合、BIP 68が適用されることを意味します。

8行目:ロック時間はブロック番号で指定されます。ロック時間が指定されている場合、そのトランザクションは、ロック時間に対応するブロックが過ぎた後にのみ、そのブロックに追加されます。例えば、ロック時間が「30」と指定されている場合、マイナーはそのトランザクションを、ブロック番号30がマイニングされた後にのみ取り込むことができます。

9行目~20行目:Vinは、この特定のトランザクションが入力として使用している、メンプール内のトランザクションの一覧を表示します。

21行目~33行目:Voutは、この特定のトランザクションを入力として、mempool内のトランザクションの一覧を表示します。

34行目:ブロックハッシュ。トランザクションがまだ確認されていないため、ここではnullとなっています。

35行目:トランザクションが通過した確認回数。

36行目:1970年1月1日(GMT)からの経過時間(秒)で、トランザクションがプールに登録された時刻。

37行目:トランザクションが追加されたブロックがマイニングされた時刻。このトランザクションは保留中であるため、ここではnullとなっている。

38行目:「txid」のシリアル化され、16進数でエンコードされたデータ

上記のデータを分析することで、ビットコイン取引の仕組みを詳しく理解することができます。ビットコイン取引はかなり複雑ですが、getrawtransactionメソッドを使えば、見やすく理解しやすい生の取引情報を取得することができます。

結論

ビットコインのメンプールについて理解を深められたことをお祝いします。本日のガイドでは、ビットコインのメンプールとは何か、その活用方法、ビットコインのメンプールへのアクセス方法/保留中の取引の取得方法、そしてビットコインの保留中の取引データの取得方法について学びました。

イーサリアムに関する記事やガイドをもっと読みたい方は、ぜひニュースレターにご登録ください。ご意見やご感想がございましたら、Twitterからお気軽にお寄せください。また、Discordコミュニティサーバーでは、これまで出会った中で最もクールな開発者たちが集まっていますので、いつでもお気軽にチャットで交流してください :)

このガイドをシェアする