ブロックチェーンの課題と可能性~BBc-1(Beyond Blockchain One)から学ぶブロックチェーン開発

第6回 UTXO型のトランザクション

この記事を読むのに必要な時間:およそ 3 分

前回に引き続き,BBc-1のトランザクションの構成の仕方について具体例を交えて解説します。今回は,UTXO(Unspent Transaction Output)型について説明します。

UTXOとは

UTXOはビットコインをはじめ,多くのブロックチェーンプラットフォームで採用されています。ネットや書籍など情報源はたくさんありますのでここで詳細は説明しませんが,エッセンスだけ紹介します。

UTXO型のトランザクションには,帳簿(仕訳帳)と同様の考え方で,トークン取引そのものを記録していきます。取引そのものの記録というのは,⁠誰から誰にいくら支払った」という情報です。記録する情報には1つ工夫があり,⁠おつりを自分に返す(支払う)⁠という取引情報を必ず含めるようにします。自分への支払い記録の中で,まだどのトランザクションからも参照されていない,すなわち支払いに利用されていないトークンを「未使用なトランザクション出力」⁠Unspent Transaction Outputをそのまま訳した意味)と見なしています。この工夫により,支払いに必要な額になるようにいくつかのUTXOを見つけて積算すれば,それら取引情報に含まれているトークンを支払いに充てることができます。ちなみに,ここで「出力」とありますが,UTXO型のトランザクションでは,デジタルアセットを出力(output)と入力(input)で表現する考え方があるので覚えておきましょう。トークンの取引では出力が支払いの情報,入力がその原資の情報として表現することがよくあります。⁠Aさんは○○トークン,Bさんは○○トークンを所有」といった,トークンの残高情報は直接的には記録されませんが,すべての自分のUTXOを見つけて合計すれば,その時点での自分のトークン残高を知ることができます。図1で,トークン取引の具体例を示して説明します。

図1 UTXO型トランザクションのトークン取引例

図1 UTXO型トランザクションのトークン取引例

図1は,UTXOを使ったトランザクションの例です。図1の場合は,各transactionには2つのOutputがありますが,上が「誰から誰へ」支払ったトークン,下が「自分へ」返却されるおつりのトークンを表しています。例えばtransaction_3は,BさんからAさんに7トークンを支払うトランザクションです。支払いの原資は,transaction_1でBさんが受け取った10トークンです。transaction_3ではおつりの3トークンが自分に支払われています(B→B: 3の部分)⁠さらにtransaction_4では,BさんからCさんに15トークンを支払うのですが,transaction_2(CさんからBさんへ20トークン支払われた)とtransaction_3に含まれる2つのUTXOを束ねて,合計23トークンをinputとします。したがって,transaction_4には,BさんからCさんへの支払い分15トークンと,Bさん自身に返却されるおつり8トークンの出力が記録されます。ここまでの取引の結果,図1には次の4つのUTXOが残っています。

  • transaction_1: Aが5トークン持っている
  • transaction_3: Aが7トークン持っている
  • transaction_4: Bが8トークン持っている
  • transaction_4: Cが15トークン持っている

UTXOを使うメリットは,残高を管理しなくても支払いができる,各トランザクションに必要な承認(署名)の数がアカウント型よりも少なくて済む,という点です。特に前者の特徴は,パブリック型ブロックチェーンシステムのように,完全な自律分散システムではメリットになります。ただし,トークンのような量を扱うアセットには向いていますが,個別のモノの所有状況などを表したい場合には,アカウント型の方が向いています。また,UTXO型の方は,利用可能なUTXOを過去の取引履歴から積算して把握しなければならないため,トランザクションを検索する手間が多くなるというデメリットもあります。

BBc-1におけるUTXO型トランザクション

前述しましたが,UTXO型のトランザクションには出力と入力という考え方があります。出力とは支払いの情報で,入力とはその原資の情報です。当然出力と入力の合計値は一致しなければなりません。BBc-1もこの形式に準拠しており,出力はevent,入力はreferenceと呼んでいます。具体的には,eventリストは複数のBBcEventオブジェクトを含み,それぞれ「誰から誰への支払い」であるかが記録されます。referenceリストは複数のBBcReferenceオブジェクトを含み,それぞれ過去のトランザクションに含まれるBBcEventへのポインタになっています。

それでは,具体例で見ていきましょう。以下のようなシナリオを考えます。

表1 UTXO型トランザクションの例

構成要素内容
登場人物Aさん(ユーザ)⁠Bさん(ユーザ)⁠Zさん(トークン発行者)
アセット種別トークン
シナリオの流れ

初期状況:Aさん,Bさんともにトークンを持っていない(BBc-1には登録されていない)

  1. Aさんが100トークンをZさんから発行してもらう
  2. Aさんが200トークンをZさんから追加発行してもらう
  3. Aさんが240トークンをBさんに支払う

著者プロフィール

久保健(くぼたけし)

1977年生まれ,大阪出身。

株式会社ゼタント代表取締役/一般社団法人ビヨンドブロックチェーン理事。大手通信会社の研究所での研究,企画部門でのプロジェクトマネジメントなどを経て,独立。気がつけばBeyond Blockchain One(BBc-1)のメイン開発者になっていたが,あくまで趣味の位置づけ。本業では,技術者・研究者も報われる会社を目指す。

コメント

コメントの記入