UTXOを理解する
ビットコインが口座ではなく未使用トランザクション・アウトプット(UTXO)を使って残高を追跡する仕組み。これから構築するすべてのトランザクションの基盤です。
0ステップ ·
何を学ぶか
- UTXOモデルが口座モデルとどう異なるか
- UTXOに何が含まれ、どう識別されるか
- 与えられたアドレスに対して使えるUTXOを見つける方法
口座モデル vs. コイン・モデル
ほとんどの金融システムは口座モデルを使います。銀行は行を保存します:Alice: $5,000。AliceがBobに$200を支払うと、銀行はAliceから引いてBobに加算します。シンプルですが、信頼できる中央台帳が必要です。
ビットコインはコイン・モデルを使います。どこにも「残高」フィールドはありません。代わりに、ネットワークは個々のコイン - 未使用トランザクション・アウトプット(Unspent Transaction Outputs, UTXO) - を追跡します。あなたのウォレット残高は、あなたの秘密鍵が使えるすべてのUTXOの合計です。
| 口座モデル | UTXOモデル |
|---|---|
| 中央台帳が残高を追跡 | 残高なし - コインのみ |
| 口座ごとに1エントリー | アドレスごとに複数のUTXO |
| 加算と減算 | 消費と生成 |
| 順次処理が必要 | 並列検証可能 |
UTXOの解剖
すべてのUTXOは二つのデータで一意に識別されます:
- トランザクションID (txid): このアウトプットを生成したトランザクションの32バイト・ハッシュ
- アウトプット・インデックス (vout): そのトランザクションの何番目のアウトプットか(0, 1, 2...)
合わせてtxid:voutは特定のコインのシリアルナンバーのようなものです。UTXO自体には以下が含まれます:
txid: a1b2c3d4e5f6... (32 bytes)
vout: 0 (output index)
value: 50000 (satoshis = 0.0005 BTC)
script: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
scriptフィールド(ScriptPubKeyまたはロッキング・スクリプトと呼ばれる)は、このUTXOを使うために必要な条件を定義します。標準的なP2PKHアウトプットの場合、使用者が対応する秘密鍵の所有権を証明する必要があります。
UTXOのライフサイクル
- 誕生: UTXOは確定したトランザクションのアウトプットとして作成されます
- 存在: すべてのフルノードが維持するUTXOセットに存在します
- 死: 新しいトランザクションのインプットとして消費され、UTXOセットから永久に削除されます
UTXOは一度だけ、全量使われます。1 BTCのUTXOがあり0.3 BTCを送りたいなら、1 BTC全体を消費して二つの新しいアウトプットを作らなければなりません:受取人への0.3 BTCと、自分へのおつりとしての~0.6999 BTC。
自分のUTXOを見つける
Bitcoin CoreのCLIを使えば、使えるUTXOをリストアップできます:
bitcoin-cli listunspent
# Returns:
[
{
"txid": "a1b2c3d4...",
"vout": 0,
"address": "bc1q...",
"amount": 0.00050000,
"confirmations": 144,
"spendable": true
}
]
私たちのトランザクションでは、送りたい金額とトランザクション手数料の合計をカバーする一つ以上のUTXOを選ぶ必要があります。
なぜこれがトランザクション構築に重要か
すべてのトランザクション・インプットは既存UTXOへのポインターです。次のステップでトランザクションを構築するとき、最初に必要なのは、使いたいUTXOのリスト - それらのtxid、vout、そしてvalueです。UTXOを理解しなければ、残りの過程は不可能です。
重要なポイント:ビットコイン・トランザクションは口座間でお金を動かしません。古いコインを破壊して新しいコインを鋳造します。
次のステップ
トランザクション・インプットを構築するに進み、トランザクションのインプットとしてUTXOを参照する方法を学びましょう。