生の Bitcoin トランザクションとは
生の Bitcoin トランザクションは、version、input(前の txid と output インデックス、scriptSig、sequence)、output(satoshi 単位の金額と scriptPubKey)、任意の SegWit witness データ、locktime を hex でシリアライズしたものです。txid は witness データを除いたシリアライズのダブル SHA-256 で、PSBT(BIP-174)は未署名トランザクションを署名者に必要なメタデータと一緒に包んだものです。
結果の読み方
- Input には前の outpoint(txid:index)、支出タイプ、導出アドレスが表示されます。sequence から RBF がシグナルされているか分かります。
- Output には金額、スクリプト種別、アドレスが表示されます。OP_RETURN の output は、ペイロードが印字可能ならテキストとして、そうでなければ hex として表示されます。
- Locktime は 500,000,000 未満ならブロック高、それ以上なら Unix タイムスタンプとして解釈されます。
- 署名済み / 未署名は、すべての input が scriptSig または witness を持っているかどうかで判断されます。
Output スクリプトの種類
| 種類 | scriptPubKey のパターン | アドレス | 支出データ |
|---|---|---|---|
| P2PKH | OP_DUP OP_HASH160 <20 bytes> OP_EQUALVERIFY OP_CHECKSIG | 1… | scriptSig: 署名 + 公開鍵 |
| P2SH | OP_HASH160 <20 bytes> OP_EQUAL | 3… | scriptSig の末尾が redeem script |
| P2WPKH | OP_0 <20 bytes> | bc1q…(42 文字) | witness: 署名、公開鍵 |
| P2WSH | OP_0 <32 bytes> | bc1q…(62 文字) | witness の末尾が witness script |
| P2TR | OP_1 <32 bytes> | bc1p… | witness: 64 バイトの署名(キーパス) |
| OP_RETURN | OP_RETURN <data> | なし、使用不可 | 該当なし |
具体例: weight と vsize
P2WPKH の input 1 つと P2WPKH の output 2 つを持つトランザクションは、非 witness データが 113 バイト(version、input、output 2 つ、locktime)、witness データが約 110 バイト(marker、flag、72 バイトの署名、33 バイトの公開鍵)です。weight = 113 × 4 + 110 = 562 weight unit なので、vsize = ⌈562 ÷ 4⌉ = 141 vbytes です。10 sat/vB なら手数料は 1,410 sats です。同じ支払いをレガシーの P2PKH input から行うと約 226 バイトで、すべてフル weight で数えられ 226 vbytes になります。
生の hex の入手先
Bitcoin Core: getrawtransaction <txid> または createrawtransaction。Electrum と Sparrow: トランザクションを hex としてエクスポート。エクスプローラー: mempool.space と blockstream.info は /api/tx/<txid>/hex を提供しています。ハードウェアウォレットは署名を求められた PSBT を表示します。
アドレス単体の検証はBitcoin アドレスバリデーター、bech32 文字列の確認はbech32 デコーダーで行えます。