トランザクションをブロードキャストする

署名されたビットコイン・トランザクションをネットワークにブロードキャストする方法 - あなたのノードからメムプール、そしてブロックへ。

0ステップ ·

進捗 0/0

何を学ぶか

  • 生トランザクションをビットコイン・ネットワークに投入する方法
  • トランザクション伝播中に起こること
  • トランザクションがメムプールから確認されたブロックにどう移動するか

生トランザクションを送る

あなたは16進形式の完全に署名されたトランザクションを手にしています。これをネットワークに届ける必要があります。ブロードキャストするいくつかの方法があります。

Bitcoin Core CLI

フルノードを運営しているなら、これが最も主権的な選択肢です:

bitcoin-cli sendrawtransaction "02000000000101..."

コマンドはトランザクションが受理されればtxidを返し、拒否された場合はその理由(無効な署名、不十分な手数料、二重支出など)を説明するエラーメッセージを返します。

プログラムによるRPC

JSON-RPCをノードに使用:

curl --user rpcuser:rpcpass \
  --data-binary '{"method":"sendrawtransaction","params":["02000000..."]}' \
  http://127.0.0.1:8332/

公開API

ノードを運営していない場合、いくつかのサービスが生トランザクションを受け付けます:

  • mempool.space - POST /api/txに生16進をボディとして
  • blockstream.info - POST /api/tx
  • Electrumサーバー - blockchain.transaction.broadcastメソッド経由

プライバシー注意:第三者サービスを通じたブロードキャストは、広いネットワークに到達する前にあなたのIPアドレスとトランザクションを明らかにします。自分のノードを運営することでこれを避けられます。

ブロードキャスト後に起こること

ステップ1:ローカル検証

あなたのノード(またはAPIエンドポイント)は中継する前にトランザクションを検証します:

  • すべてのインプットUTXOは未使用か?
  • 署名はロッキング・スクリプトに対して検証されるか?
  • 手数料は最小中継閾値(デフォルト:1 sat/vB)以上か?
  • トランザクションは最大標準サイズ(400,000 WU)以下か?
  • すべての標準性チェックをパスするか?

いずれかのチェックが失敗すると、トランザクションは特定のエラー・コードで拒否されます。よくあるエラー:

エラー意味
missing-inputs参照されたUTXOが存在しないか既に使用済み
bad-txns-inputs-missingorspent二重支出の試み
insufficient fee手数料率が最小中継閾値未満
non-mandatory-script-verify-flag無効な署名

ステップ2:ネットワーク伝播

検証されると、あなたのノードはゴシップ・プロトコルを使ってトランザクションをピアにブロードキャストします:

  1. ノードは新しいtxidをリストしたinv(インベントリ)メッセージを送る
  2. このtxidを見たことがないピアがgetdataで要求する
  3. ノードは完全なトランザクション(txメッセージ)で応答する
  4. 受信した各ピアは独立に検証し、プロセスを繰り返す

よく接続されたノードは2~5秒以内にネットワークの大部分に到達します。

ステップ3:メムプール・エントリー

トランザクションを検証するすべてのノードは、それをローカルメムプール - 未確認トランザクションの待機プール - に追加します。トランザクションはマイナーがブロックに含めるまでここに留まります。

メムプールの動作はノードによって異なります:

  • デフォルトのメムプール・サイズ制限:300 MB
  • デフォルトの有効期限:336時間(2週間)
  • メムプールが満杯になると、最も低い手数料率のトランザクションが追い出される

ステップ4:マイニング

マイナーはメムプールからトランザクションを選んで候補ブロックを構築し、手数料率(sat/vB)で優先順位をつけます。マイナーが有効なプルーフ・オブ・ワークを見つけると、ブロックがネットワーク全体に伝播し、あなたのトランザクションは最初の確認を達成します。

最初の確認までの平均時間:~10分、しかしこれは大きくばらつきます。ブロックが素早く見つかれば1分かもしれません。混雑時に手数料率が低すぎれば、数時間または数日かかるかもしれません。

トランザクションのモニタリング

ブロードキャスト後、トランザクションを追跡できます:

# Check if it's in your node's mempool
bitcoin-cli getmempoolentry "txid"

# Get full transaction details
bitcoin-cli getrawtransaction "txid" true

またはmempool.spacetxid.ukのようなブロック・エクスプローラーを使ってリアルタイムで見ることができます。tx.txid.ukを使って生トランザクションをデコードし、ブラウザから直接ブロードキャストすることもできます。

トランザクションが詰まった?

トランザクションが確認されない場合、選択肢があります:

  • RBF (Replace-By-Fee) - 詰まったトランザクションをより高い手数料のバージョンで置き換える
  • CPFP (Child Pays for Parent) - 両方に十分な手数料を支払う子トランザクションを作る
  • 再ブロードキャスト - トランザクションがメムプールから落とされた場合、tx.txid.uk経由で再投入する

完全ガイドを読む:詰まったビットコイン・トランザクションを直す方法

次のステップ

検証と探索に進み、ブロックチェーン上でトランザクションを確認し、次に何が来るかを学びましょう。