最近よく聞くUTXOとは何…?
UTXO:Unspent Transaction Output
Bitcoinの履歴を遡るにはどうしたら良いだろうか?
多くの人は「ブロックチェーンを遡る」と答えるだろう。確かにブロックチェーンを遡ればすべての履歴を閲覧することが可能です。しかし、その履歴を1件1件確認していくことの大変さは容易に想像がつくことでしょう。
実際はブロックチェーンのデータとは別に、UTXOデータベースというのを作っています。これはブロックチェーンの情報を元にして作られる別のデータベースで、新しいブロックが生成されるたびに更新されており、Bitcoinによる処理の大半はUTXOのデータベースを参照しております。結果、すばやく検索や参照ができるようになっております。
このUTXOは「chainstate」というデータベースで管理されており、Bitcoin Coreがバージョン「0.8.0」より実装されました。この変更によりデータサイズが大幅に削減され、ノードはフルトランザクションインデックスを保持する必要がなくなり、bcoinやbtcd、NBitcoinなど他の実装でも一般的な実装方法として採用されました。
しかし、バージョン「0.8.0」のUTXOには脆弱性が見つかりました。それはデータベースからトランザクションを確認や検証をする際には、性質上、全アウトプットを含むデータをロードする必要があり、必要なデータが1つのアウトプットであっても、全てのデータをロードする必要がありました。その際にデータの容量が過度に大きくなると、受信したノードがメモリー不足に陥りネットワークがクラッシュしてしまうのです。
さらにこのUTXOのデータ量は年々増加傾向にあり、ユーザーが増え活発になればなるほど増加していきます。下記に全期間のデータ量をグラフ化した画像を添付致します。
トランザクションを確認する際に、全データのロードが必要になるので、データ量が増加していけばいくほどネットワークのクラッシュに繋がってしまうのです。
そこでUTXOのデータ量を削減するために、送金や管理の際になるべく、1つのブロックにコインをまとめることが望ましいのですが、逆に1度の送信にかかるデータ量が増え、手数料の増加に繋がるためユーザーからすると望ましい手段ではありませんでした。
しかし、これらの問題は先日リリースされたバージョン「0.15.0」と「segwit」の実装によって改善されました。
まずバージョン「0.15.0」により、以前は全トランザクションのロードが必要だったのに対し、1つのトランザクション毎(アドレス毎)にロードが出来るようになりました。それにより10〜20%のメモリーが削減され、UTXOの作成スピードも30〜40%向上しました。しかし、1つのトランザクション毎での生成が可能になったため、スペースは以前よりも必要になっております。
そして「segwit」の実装によって、送金や管理の際に、1つのブロックにコインをまとめることで手数料の削減効果も期待できます。segwitはInputデータ(入力データ)を取引内に含めないため、どれだけ小さな取引をまとめてもデータ量に変化はありません。
これらの実装により、UTXOのデータ量を削減することができ、データベースの管理も容易になりました。今後もこの「UTXO」は多くの場面で名前を聞くことになるので、基礎知識として記憶しておくと良いでしょう。
このバージョン「0.15.0」のリリースは中国の仮想通貨規制の混乱中に発表がありました。各種通貨の価格が上下している中で、毎日前進しているのは素晴らしいことです。このBitcoinの技術的な動向は今後も目が離せません。
次のバージョンアップ「0.16.0」のリリースは半年後となっております。
ーーーーーーーーーーーーーーーーーー
Bitcoin Japan
ーーーーーーーーーーーーーーーーーー
Facebook
https://www.facebook.com/japan.btc/
Twitter
https://twitter.com/imai_ryouji?lang=ja
はてなブログ
http://crypto-currency.hatenablog.jp/