
特にビットコインについて調べていくとUTXOという専門用語が理解の妨げになってしまいがちだと思います。
私も理解する際にUTXOやらTxやらOutputなどの言葉がたくさん並んでいるのを見て理解に苦しんだことがあります笑
UTXOといえばアンスペント トランザクション アウトプット(Unspent Transaction Output)の長い略称のことです。
そのまま意訳すると未使用な処理の出力のことなのである種のトランザクションのことですね。
これだけだとやはりわかりにくいです。後ほどにも解説しますがUTXOはお金が移動する度にアドレスがどんどん生成されていく管理方法になっています。
UTXO自体は一つのトランザクションにすぎない意味ですが、UTXOを活用したシステムが通貨の管理方法として採用されています。
足し算引き算で残高を管理すればいいのになんでわざわざUTXOとかいうややこしいシステムを導入するのでしょうか。
実はUTXOならではのプライバシー保護のメリットがあるからなんですね。
この記事ではそうしたところも含め、文系でもUTXOについてサクッと理解できるようにまとめています。
草猫店長の目次ノート

UTXOとは移動する通貨を管理するための仕組み
またはUTXOとは残高管理の仕組み(モデル)ということもできます。
水が流れるように通貨が移動していくイメージをしてみてください。
通貨がAからBへと流れると通貨が移動した分だけAの通貨を減らさないといけません。Bの通貨もまたCの通貨へ流れていって移動した分だけ変化していきます。
本物の水の流れであれば物理的に量がその場で視えますね。
しかしデジタル通貨が移動したことを確かめるためには数字でもって整合性をつける必要があります。
整合性をつけるためには足し算や引き算などのテクニックを用いないといけませんね。
別に足し算や引き算でなくても構いません。整合性をとることができれば良いのです。
その整合性の取るための方法の一つがUTXOです。UTXOの場合は整合性を取るための計算式のようなものはなく、どちらかといえばアナログに近いやり方です。
図でないとイメージしにくいのですが、「残高」をたくさん生成していくと整合性が取れてしまうというやり方です。
このUTXOの方法でも残高が正しく反映されるようになります。
ただし、UTXOの通貨の流れは独特なので初めて知る人にとってはややこしいものです。
ここで理解しやすくする順番でUTXOを解説してきます。
2. 「おつり」が発生する時の通貨の移動
3. UnspentとTransactionとOutputを分解して見る
4. 一度に複数の人に送ってみる
5. もう少し実際的なUTXOの動き
1. いちばん基本的なUTXOの通貨移動
最初にいちばん基本的なUTXOの通貨の移動を見ていきましょう。
ポーターからスタウトへ10BTCを送りたいと思います。
この時、ポーターの残高は10BTCなので全額をスタウトへ送る形になります。
❶. ポーターからスタウトへ10BTCを送金する

❷. これでポーターからスタウトに10BTC移動して、スタウトの残高が増えました。

この動きは単純なので理解しやすいのではないでしょうか。
この時、ポーターの視点からは10BTCがアウトプットしていて、スタウトから見ると10BTCがインプットされています。
2. 「おつり」が発生する時の通貨の移動
次が肝要です。ポーターは10BTCの残高がありました。ですが3BTCだけをスタウトに送金しました。
この場合の通貨の動きが肝心になります。
❶. ポーターからスタウトへ3BTCを送金します。

❷. 無事スタウトへ3BTC送ることができました。しかし、ポーターの残高の10BTCの残高は使えなくなりました。

「一体どういうこと?」と思ったかと思います。
残りの7BTCはどこにいくのでしょうか。
❸. ここがUTXOの特徴的なところです。
ポーターは3BTCしかスタウトに送っていないのですが、10BTCの残高(つまりはUTXO)を使いました。
送金額が1BTCであっても2BTCであっても10BTCのUTXOは一度使ったら使えなくなるので残りの7BTCは新しい残高(つまりはUTXO)へ移動するということですね。

10BTCのUTXOでスタウトに加えて自分の「おつり分」の2回目のアウトプットが行われました。
「さっきからUTXOってどこの部分だよ」って思った人もいると思うので図にします。
❹. 画像の枠線の部分が一つずつのUTXOになります。赤枠の方は使用済みのUTXOで、緑枠の方が未使用のUTXOになります。

画像の形でどんどん、使用済みのUTXOと未使用のUTXOとで生成を繰り返していきます。
3. UnspentとTransactionとOutputを分解して見る
UTXOの範囲について解説しました。次はさらに細かく分けてみたいと思います。
「U」→Unspent
「TX」→Transaction
「O」→Output
分解すると上のようになりました。
「U」→Unspent
Unspentつまり未使用(未支払)というのは先ほどの画像でいうところ緑枠の部分ですね。まだ使われていない通貨です。

コード上では未使用なら配列の数字が「0」のままで、使用済みなら配列の数字が「1」に切り替わります。
「1」のUTXOは当然、使用済みのものとなり、もう使えなくなります。
「TX」→Transaction
トランザクションは画像の一つのお金の行き来の範囲をトランザクションと言います。「Tx」と表現されます。

これで一つのトランザクションを表現しています。
「O」→Output

これは説明するまでもありませんが、Outputそのものですね。
UTXOはこれらを全てくっつけた用語ということです。
4. 一度に複数の人に送ってみる
次に複数人に送ってみた場合のシミュレーションを図解説してみます。
スタウトに3BTC、シュバルツに2BTC送る場合が下の画像のようになります。

何人に送ったところで「おつり」が発生すれば「おつり」のUTXOが生成されます。
5. もう少し実際的なUTXOの動き
実際のところ、自分が保有しているUTXOは複数になります。
シュバルツは先ほどポーターから2BTCのインプットを受け取りました。
今は3つのUTXOを保有しています。
3つのUTXOを保有している状態でデュンケルに3.5BTCという微妙な数字で送金してみます。
❶. シュバルツは6BTCを保有していますが受け取ったUTXOは3つあります。

❷. 3.5BTCをデュンケルに送りました。
ちょうどいいサイズのUTXOがないので複数のUTXOを複合してデュンケルに送金しています。
未使用なBTCはそのままシュバルツの残高の中に引き継がれます。そして、「おつり」もシュバルツの残高に引き継がれます。

最初からこの画像を見るとややこしいかもしれませんが、順を追って見るとわかりましたでしょうか。
実際にはこのやり取りの他にマイナー手数料が差し引かれた後に「おつり」が引き継がれます。
マイナー手数料が1BTCだとしたら、10BTC保有していて3BTCを送金すると、自分のアカウントの残高にあるのは7BTCではなくマイナー手数料が引かれた6BTCとなります。
UTXOとアカウントベースの2種類の管理方法
このUTXOは通貨としての役割を持った仮想通貨に採用されています。
一方でスマートコントラクトに特化したイーサリアムのような仮想通貨では使われていません。
イーサリアムの場合は、みんなが想像しているような足し算引き算などを駆使して整合性をとる方法です。
シンプルな代わりに計算がたくさん必要になります。
UTXOにするメリットとデメリット
そもそもなぜ足し算引き算などを利用した計算でできるものをわざわざUTXOとして利用するのでしょうか。
何か理由があるはずです。
UTXOにする理由
- 追跡が困難になる
- リプレイアタック耐性がある
- 二重支払いのチェックができる
このようにいろいろとメリットがあります。
リプレイアタックとは仮想通貨のハードフォーク時に過去に起った攻撃です。ここでは省略します。
二重支払いのチェックですが、先ほどのように一度使い終わったUTXOは使えなくなります。そのため不正を行うと整合性が取れなくなり不正が発覚しやすいです。
特に追跡が困難になるについて解説したいです。

画像は10BTCの残高のうち、3BTCをスタウトに送って「おつり」が7BTCだと想定した図でした。
図のように自分視点から見れば「おつり」の7BTCが自分の「おつり」だとわかりますよね。
ですが他人から見るとそうでもありません。もしかしたらスタウトに3BTC送って残りの7BTCはシュバルツかもしれませんし、デュンケル宛かもしれません。
ただただ、はたから見ると分裂しているようにしか見えないんですね。
もちろん、追跡しようと思えばできるのですが面倒な作業を要するため、一般の人からの追跡は困難と言われています。
UTXOのデメリット
- ある時点での残高の確認が困難になる(不便)
- ウォレットアプリなどの開発側にとってはややこしい。
- メモリの消費が大きくなりやすい
ざっとこのような理由が出てきます。
追跡困難とは裏返すとある時点での残高やお金の流れをつかむことが難しくなるということですね。
また、UTXOの数が増えていくほど、状態を保存しておくためのメモリ消費量は大きくなってコストがかかるようになります。
開発側にとってもUTXOを追ってユーザーの残高をただしく反映させなければならないので少々、手間を取らされてしまいます。
仮想通貨のUTXOモデルとは まとめ

UTXOは慣れないと難しいです。
私も図や動画をみたりでないと理解が容易ではありませんでした。
UTXOの概念がわかればビットコインなどの送金目的としての仮想通貨の理解がはかどります。
なぜ、ビットコインのブロックチェーンがハッキングされなかったのか、より感じられるようになるということです。
UTXOに興味をもつのであればブロックチェーンの思想的な部分にも興味があるのではないでしょうか。
よく「ブロックチェーンで非中央集権化を!」と分散型社会の到来を望んでいる人もいます。
ですが、分散型をブロックチェーンで実現するのは難しいと思っています。もちろん分散型社会に近くのは間違いないのですがそれがゴールにはなり得ないと考えています。
そうした理由については 【 ブロックチェーンの本質 】インターネットを継ぐもので解説しています。ブロックチェーンの本当の価値について考えたい人は読んでみてくだ歳。
ブロックチェーンのハッキング事件について詳細は知りたい人は 【初体験】 ブロックチェーンのハッキング 仮想通貨を抱いて眠れるのかなんかの記事がオススメです。
周辺知識としてはサイドチェーンを覚えておくと良いかと思いますよ。
良かったらシェアしてね♪ /