イントロダクション#
UTXO
は Unspent Transaction Output
の略であり、未使用のトランザクション出力 を意味します。これはビットコインや他のいくつかのブロックチェーンネットワークでの中核的な概念です。
ビットコインなどの UTXO ベースのブロックチェーンネットワークでは、トランザクションは直接アカウントから別のアカウントに移動するのではなく、入力と出力の形式で行われます。各トランザクションには入力と出力があり、入力は以前のトランザクションの出力を参照し、出力は新しい UTXO を作成します。
UTXO は電子現金と見なすことができます。ビットコインを受け取ると、実際にはいくつかの UTXO を受け取ることになります。ビットコインを送信すると、実際にはいくつかの UTXO を消費し、新しい UTXO を生成することになります。
Note
すべての出力が UTXO であるわけではありませんか?
いいえ、すべての出力が UTXO ではありません。
ビットコインや他の UTXO ベースのブロックチェーンネットワークでは、まだ使用されていない出力のみが UTXO と呼ばれます。
出力が新しいトランザクションの入力として使用されると、その出力はすでに使用されたものと見なされ、それは UTXO ではなくなります。この場合、新しいトランザクションは新しい出力を生成し、これらの新しい出力は新しい UTXO となります。
したがって、UTXO はすべての出力のサブセットであり、まだ使用されていない出力のみを含みます。
ケーススタディ#
ビットコインや他の UTXO ベースのブロックチェーンネットワークでは、アカウントの残高は実際には使用可能な UTXO の合計によって決まります。各 UTXO には関連する値があり、それはビットコインの数量を表します。
例えば、3 つの UTXO があり、それらの値がそれぞれ 0.5 BTC、0.2 BTC、0.3 BTC であるとします。その場合、アカウントの残高はこれら 3 つの UTXO の値の合計である 1 BTC になります。
ビットコインを送信する場合、送信したい金額をカバーするために十分な UTXO を選択する必要があります。例えば、0.6 BTC を送信したい場合、0.5 BTC と 0.2 BTC の値の UTXO を選択することができます。そして、選択した UTXO を入力とし、送信したい金額とお釣りを出力とする新しいトランザクションを作成します。
この例では、新しいトランザクションの出力は 2 つになります。1 つは 0.6 BTC であり、これが送信したい金額です。もう 1 つは 0.1 BTC であり、これがお釣りです。このお釣りは新しい UTXO となり、将来のトランザクションで使用することができます。
仮コードによるアカウント残高の計算の実装#
以下は UTXO ベースのブロックチェーンネットワークでアカウントの残高を計算するための仮コードです:
- 変数
balance
を 0 で初期化します。この変数はアカウントの残高を格納するために使用されます。 - アカウントのすべての UTXO を取得します。通常、これは
getUTXOs(address)
という関数またはメソッドを呼び出すことで行われます。ここでaddress
はアカウントのアドレスです。 - すべての UTXO を反復処理します。各 UTXO について:
- UTXO が使用されていないかどうかをチェックします。これは UTXO の
spent
属性をチェックすることで行われます。spent
がfalse
であれば、UTXO は使用されていないことを意味します。 - UTXO が使用されていない場合、その値(通常は
value
属性)をbalance
に加算します。
- すべての UTXO の反復処理が完了したら、
balance
がアカウントの残高です。
以下はこのプロセスの仮コード表現です:
function calculateBalance(address) {
let balance = 0;
// getUTXOsは指定したアドレスのすべてのUTXOを取得できる関数と仮定します
let utxos = getUTXOs(address);
for (let utxo of utxos) {
if (!utxo.spent) {
balance += utxo.value;
}
}
return balance;
}
影響#
UTXO(未使用のトランザクション出力)の影響は次のようになります:
- アカウントの残高の記録:UTXO ベースのブロックチェーンネットワークでは、アカウントの残高はそのすべての UTXO の値の合計で表されます。各 UTXO には関連する値があり、それはビットコインの数量を表します。
- トランザクションの検証:UTXO はトランザクションの検証にも使用されます。新しいトランザクションが発生する場合、そのトランザクションの入力は有効な UTXO である必要があります。これにより、トランザクションの入力が使用されていないことが保証され、二重支払いが防止されます。
- トランザクションの作成:ビットコインを送信する場合、送信したい金額をカバーするために十分な UTXO を選択する必要があります。その後、選択した UTXO を入力とし、送信したい金額とお釣りを出力とする新しいトランザクションを作成します。このお釣りは新しい UTXO となり、将来のトランザクションで使用することができます。
- プライバシーの向上:各トランザクションで新しい UTXO が生成されるため、トランザクションの追跡がより困難になり、ユーザーのプライバシーが向上します。
- 並列処理の向上:UTXO モデルにより、複数のトランザクションを並行して処理することができます。各トランザクションは独立しており、入力 UTXO が重複していない限り、同時に処理することができます。これにより、ブロックチェーンネットワークのスループットが向上します。