Johnson Lau氏が提案する新しいColored Coinプロトコル

安土 茂亨
2017-09-04
(
Mon
)

安土 茂亨(@techmedia_think)は株式会社ハウインターナショナルに所属する開発者で2ndレイヤー技術を中心に研究開発を行っている。Open Assets ProtocolのRuby実装"openassets-ruby"や、BitcoinプロトコルのRuby実装"bitcoinrb"を開発中。本記事では、Johnson Lau氏が提案した、ビットコインでネイティブサポートしうるColored coinプロトコルの提案について解説する。

bitcoinjpjj

BitcoinのコアディベロッパーのJohnson Lau氏が先日、新しいColored Coinのプロトコルを公開した。

Colored CoinのプロトコルとしてはOpen Assets ProtocolやColuなどが有名だが、これらはいずれもBitcoinのトランザクションをオーバーレイすることで、少額のBitcoinに任意のアセットを載せてBitcoinのブロックチェーン上で流通させる2ndレイヤーのプロトコルだ。このようなオーバーレイ型のプロトコルの場合、プロトコルに対応したノードであればそのトランザクションで送付されているアセットを認識できるが、通常のBitcoinのノードからしてみると、OP_RETURNを使った特殊な出力を1つ持つが、単純にBitcoinを送金しているトランザクションにしか見えない。Bitcoinのコンセンサスにアセットの送付ルールが組み入れられるわけではないため、誤って通常のノードで色付けされたアセットをBitcoinとして使用してしまうとアセットの情報は消失してしまう。

Johnson Lau氏が新しく発表したプロトコルはこれらのオーバーレイ型と違い、Bitcoinのブロックチェーンでネイティブにアセットを取り扱う提案だ。

Colored Coinプロトコルの仕様

これらがどのような仕組みで提供されるのか見てみよう。

Colored Coin発行の2つのモード

Bitcoinと違いColored Coinには発行主体が存在し、Colored Coinは発行主体が自由に発行することができる。このプロトコルでは2つのColored Coinの発行モードをサポートしている。

  • 一度しか発行できないColored Coin アセットが発行できるのは一度のみで、追加発行が出来ないことが保証されている発行モード。スマートプロパティなど固定供給するタイプのアセットに適している。
  • 追加発行が可能なColored Coin 発行者によって何度でも追加発行が可能なアセットの発行モード。交換所によって発行される法定通貨トークンなど時間と共に供給量が変化するタイプのアセットに適している。

どちらのタイプのColored Coinかは、トランザクションの入力のnSequenceフィールドの23番目と24番目のbitで判断する。

nSequenceフィールドの23番目のbitのみがセットされている場合(SEQUENCE_COLOR_SCRIPT)、その入力のcolorは0x00008000 + 入力が参照するUTXOのscriptPubkeyをダブルSHA-256した値になる。このため、同じscriptPubkeyを入力にすれば何度でも同じcolorのコインを追加発行することができる。当然ながら追加発行できるのはscriptPubkeyの解除条件となる秘密鍵を持つユーザーのみだ。

nSequenceフィールドの24番目のbitのみがセットされている場合(SEQUENCE_COLOR_PREVOUT)、その入力のcolorは0x00000001 + 入力が参照するUTXOのtxidとn(インデックス)をダブルSHA-256した値になる。この場合、colorの識別子にUTXOのOutPoint(txid + n)が含まれているため、同じcolorのコインは二度と発行することができず、厳密に一度しか発行できないことが保証される。

nSequenceフィールドの23番目のbitと24番目のbitが両方ともセットされている場合(SEQUENCE_COLOR_TRANSFER)、その入力は入力が参照するUTXOに割り当てられているのと同じcolorを持つと判断される。

23番目と24番目のどちらのbitもセットされていない場合、その入力はnull colorとして認識される。

トランザクション出力の変更

現在トランザクションの出力にはvalueとscriptPubkeyという2つのフィールドがあるが、ここにSEQUENCE_COLOR_SCRIPTもしくはSEQUENCE_COLOR_PREVOUTで発行されたcolorをセットする256 bitのフィールドが追加される。このcolorフィールドでその出力に割り当てられたColored Coinを識別する。256 bitすべて0の場合はカラーリングされていないnull colorとして扱われる。

Open Assets Protocolなどではorder based coloringと呼ばれる手法で、トランザクション内の出力にカラーを割り当てているが、この手法は必要となるデータスペースが少なくて済む反面、割り当てられたカラーの識別子やそのメタ情報を、Colored Coinを発行したトランザクションまで遡って調べる必要がある。全トランザクションデータを持つフルノードであれば可能だが、ノードに関係のあるトランザクションしか保持しないSPVノードでは、自身に送られたコインの色を識別することができないという問題点がある。

今回のプロトコルのように出力自体にcolorデータが保持される形であれば、SPVノード単体でも出力の色を識別することが可能だ。ただカラーリングされた出力については、それぞれ32バイトずつデータ量が増えることになり、ブロックチェーンのデータ増加に繋がるという側面もある。color commitmentの追加Colored Coinを発行・送付するトランザクションには以下のフィールドで構成されるcolor commitmentと呼ばれる特殊な出力が追加されるようになる。

color commitment = header + color tag + bitfield

各フィールドの内容は以下の通り。

<table style="table-layout: fixed;"><tr><td>header</td><td>4 byte</td><td><span style="background-color: #ddd">OP_RETURN OP_PUSHDATA2 0x85 0xad</span></td></tr><tr><td>color tag</td><td>32 byte</td><td>colorの識別子</td></tr><tr><td>bitfield</td><td>任意<br>(最低1 byte)</td><td>トランザクション内のどの出力がカラーリングされた出力かを識別するためのフィールドで、カラーリングされている出力のインデックスのフラグをセットするビット列。このフィールドで指定されていないインデックスの出力は<span style="background-color: #ddd">null color</span>として扱われる。</td></tr></table>

手数料としてのColored Coin

Bitconのトランザクションの手数料は、トランザクションの全入力が持つビットコインの量からトランザクションの全出力にセットされているビットコインを引いた差分が手数料になるが、ビットコインに加えてColored Coinも手数料にすることができる。ルールはビットコインと同様で、入力のColored Coinから出力のColored Coinを引いた差分がそのColored Coinの手数料となり、マイナーはビットコインと同様、生成したブロックのコインベーストランザクションでColored Coinの手数料を入手することができるようになる。

Colored Coin用に追加されるコンセンサス

このプロポーザルでは以下のColored Coin用の新たなコンセンサスルールが追加される。ただし、このコンセンサスルールが適用されるのは、トランザクションのnVersionが3以上の場合のみだ。トランザクションのnVersionが3より小さい場合、このコンセンサスは適用されず、その出力はすべてnull colorとなる。

  • 入力が保持しているColored Coinの合計量より、出力でセットされたColored Coinの合計量が多いトランザクションは無効
  • color commitmentの出力はnull colorである必要があるため、その出力にcolorが割り当てられているトランザクションは無効
  • color commitmentのデータ長が37バイト未満のトランザクションは無効
  • color commitmentのcolor tagにセットするcolorに0がセットされたトランザクションは無効
  • color commitmentのbitfieldにトランザクションの出力の範囲外のインデックスがセットされているトランザクションは無効
  • 1つの出力に複数のcolorが割り当てられている場合、そのトランザクションは無効。
  • 入力が参照する出力がnull colorなのに、入力のnSequenceでSEQUENCE_COLOR_TRANSFERをセットしているトランザクションは無効
  • 入力が参照する出力がカラーリングされているのに、入力のnSequenceでSEQUENCE_COLOR_SCRIPTもしくはSEQUENCE_COLOR_PREVOUTをセットしているトランザクションは無効
  • コインベーストランザクションのColored Coinがそのブロック内のトランザクションのColored Coinの手数料の合計より高い場合、そのブロックは無効

コンセンサスルールに抵触すると無効なトランザクションとして扱われ、ブロックに入れられることはない。したがってオーバーレイ型のプロトコルと違い、誤ったトランザクションをブロードキャストして色情報が消失するといったことを防ぐことができる。

今後の展開

Colored CoinがBitcoinでネイティブにサポートされるようになると、Bitcoinのブロックチェーンでビットコイン以外の任意の価値を流通するプラットフォームとしての応用がより広がることが期待されるが、プロトコルを発表したJohnson Lau氏は以下のようなツイートをしている。

Not calling it a "BIP" as I think Bitcoin is unlikely to do this (and I think it shouldn't). But altcoins may take some risks and try

— Johnson Lau (@johnsonlau01) 2017年8月9日

BitcoinのブロックチェーンはあくまでBitcoinのエコシステムであり、この提案が実際に導入される可能性は今のところ低く、実際にソフトフォークの計画なども現時点では白紙だ。

※ これらの機能についてはJohnson Lau氏により参照実装が公開されているので、ビルドすればregtest環境などで試すことができる。github.com/jl2012/bitcoin/commits/color

No items found.
MARKETSとビットバンクについて

bitbank MARKETSは国内暗号資産(仮想通貨)取引所のビットバンクが運営するマーケット情報サイトです。ビットバンクは日本の関東財務局登録済の暗号資産(仮想通貨)取引所です(暗号資産交換業者登録番号 第00004号)。

販売所について

ビットバンクの販売所なら、業界最狭クラスのスプレッドでお好みの暗号資産(仮想通貨)をワンタップで購入できます。

取引所について

ビットバンクならシンプルで軽量、しかも高い機能性を備えたスマートな暗号資産(仮想通貨)取引所で本格的トレードも可能です。

豊富な機能を持つ、
安定したビットバンクのアプリ。
外出先でも取引のチャンスを逃しません。
ビットバンクで暗号資産をはじめよう!
無料口座開設はこちら
新着記事
VIEW ALL
新着記事
VIEW ALL
市況・相場分析
VIEW ALL
調査レポート
VIEW ALL

ニュース速報

VEIW ALL