トランザクション・アウトプットを構築する

トランザクション・アウトプットを構築する方法 - 受取人、金額、ロッキング・スクリプトの定義。P2PKH、P2WPKH、おつりアウトプットを含む。

0ステップ ·

進捗 0/0

何を学ぶか

  • トランザクション・アウトプットの構造
  • P2PKHとP2WPKHロッキング・スクリプトの仕組み
  • 常におつりアウトプットが必要な理由

アウトプットの構造

各アウトプットは、トランザクションが確定した後に存在する新しいUTXOを定義します。二つのフィールドを含みます:

フィールドサイズ説明
Value8 バイトサトシ単位の金額(リトル・エンディアン)
ScriptPubKey可変ロッキング・スクリプト - このアウトプットを使う条件

16進での単一アウトプット:

# Value: 100,000 satoshis (0.001 BTC), little-endian
a086010000000000

# ScriptPubKey Length
19

# ScriptPubKey (P2PKH)
76a91489abcdefabbaabbaabbaabbaabbaabbaabbaabba88ac

Value:サトシでの金額

アウトプット値は常に8バイトのリトル・エンディアン整数としてサトシ(1 BTC = 100,000,000サトシ)で表されます。

0.001   BTC = 100,000 sats   → a086010000000000
0.01    BTC = 1,000,000 sats  → 40420f0000000000
1.0     BTC = 100,000,000 sats → 00e1f50500000000

リトル・エンディアンへの変換:16進値を取り、16個の16進文字にパディングし、バイト・ペアを反転します。100,000(0x186A0)の場合:

0x186A0 → 00000000000186A0 → A086010000000000

ScriptPubKey:ロッキング・スクリプト

ScriptPubKeyは誰がこのアウトプットを使えるかを定義します。異なるスクリプト・タイプは異なる使用条件を作ります。

P2PKH (Pay-to-Public-Key-Hash)

古典的なビットコイン・アウトプット。公開鍵ハッシュ(1で始まるビットコイン・アドレス)に資金をロックします:

OP_DUP OP_HASH160 <20-byte pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

16進で:

76  a9  14  <20 bytes>  88  ac
│   │   │               │   └─ OP_CHECKSIG
│   │   │               └───── OP_EQUALVERIFY
│   │   └───────────────────── Push 20 bytes
│   └───────────────────────── OP_HASH160
└───────────────────────────── OP_DUP

このアウトプットを使うには、ハッシュが埋め込まれたpubKeyHashと一致する署名と公開鍵を提供する必要があります。

P2WPKH (Pay-to-Witness-Public-Key-Hash)

現代的なSegWitアウトプット。ウィットネス公開鍵ハッシュ(bc1q...アドレス)に資金をロックします:

OP_0 <20-byte pubKeyHash>

16進で:

00  14  <20 bytes>
│   │
│   └─── Push 20 bytes
└─────── OP_0 (witness version 0)

P2WPKHスクリプトはより短く、それはより安い手数料を意味します。アンロッキング・データはScriptSigの代わりにウィットネス・フィールドに移動します - ステップ8でカバーします。

おつりアウトプット

あなたのインプットUTXOが送りたい金額と手数料に正確に一致しない限り - ほぼ起こりません - 残りを自分に戻すおつりアウトプットが必要です。

例:

Input:  0.005 BTC  (your UTXO)
Output: 0.003 BTC  (to recipient)
Output: 0.0019 BTC (change, back to you)
Fee:    0.0001 BTC (implicit - not an output)

手数料は暗黙的です:総インプットと総アウトプットの差です。トランザクションに「fee」フィールドはありません。おつりアウトプットを忘れると、差額全体がマイナー手数料になります - 高価な間違いです。

ベスト・プラクティス:おつりをあなたが管理する新しいアドレスに送りましょう。アドレスの再利用は、あなたのトランザクションを互いにリンクすることでプライバシーを弱めます。

アウトプットの順序

あなたのトランザクションはどんな順序でもアウトプットを持てます。しかし、順序をランダム化する(常に支払いを最初、おつりを二番目にする代わりに)とプライバシーが改善されます。一部のウォレットは決定論的なアウトプット順序のためにBIP69を実装していますが、これは議論の的です。

まとめる

一つの支払いと一つのおつりアウトプットがあるチュートリアル・トランザクション:

# Output count
02

# Output 0: Payment (0.003 BTC to recipient's P2WPKH)
e093040000000000        # 300,000 satoshis
160014<20-byte-hash>    # ScriptPubKey

# Output 1: Change (0.0019 BTC back to our P2WPKH)
b882020000000000        # 190,000 satoshis
160014<20-byte-hash>    # ScriptPubKey

次のステップ

トランザクション手数料を計算するに進み、トランザクションが迅速に確認されるよう正しい手数料を設定する方法を理解しましょう。