トランザクションをブロードキャストする
署名されたビットコイン・トランザクションをネットワークにブロードキャストする方法 - あなたのノードからメムプール、そしてブロックへ。
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:ネットワーク伝播
検証されると、あなたのノードはゴシップ・プロトコルを使ってトランザクションをピアにブロードキャストします:
- ノードは新しいtxidをリストした
inv(インベントリ)メッセージを送る - このtxidを見たことがないピアが
getdataで要求する - ノードは完全なトランザクション(
txメッセージ)で応答する - 受信した各ピアは独立に検証し、プロセスを繰り返す
よく接続されたノードは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.spaceやtxid.ukのようなブロック・エクスプローラーを使ってリアルタイムで見ることができます。tx.txid.ukを使って生トランザクションをデコードし、ブラウザから直接ブロードキャストすることもできます。
トランザクションが詰まった?
トランザクションが確認されない場合、選択肢があります:
- RBF (Replace-By-Fee) - 詰まったトランザクションをより高い手数料のバージョンで置き換える
- CPFP (Child Pays for Parent) - 両方に十分な手数料を支払う子トランザクションを作る
- 再ブロードキャスト - トランザクションがメムプールから落とされた場合、tx.txid.uk経由で再投入する
完全ガイドを読む:詰まったビットコイン・トランザクションを直す方法
次のステップ
検証と探索に進み、ブロックチェーン上でトランザクションを確認し、次に何が来るかを学びましょう。