アメリカのマイアミにてBitcoin 2022というカンファレンスが現在開催されています。その中で、LNDを開発するLightning Labs社のroasbeef氏がTARO (Taproot Asset Representation Overlay)というプロトコルと、それに関連するBIPsを発表しました。
ちょうど2週間前に解説したOmniBOLTのように、ビットコイン上で通貨・トークンを発行し、それをライトニングネットワークで送ることができる、という内容を強調した発表だったので、今日はTAROが既存のプロトコルとどう違うのか、実際に利用される見込みはあるのかについて調べました。
細かい仕組みがけっこう難解なので、現時点では理解しきれていない部分もあります。したがって今日解説する内容はある程度抽象化したものです。
もし大きく間違っていたら訂正記事を出します。
これまでのビットコイン上でのアセット発行
最近も本稿で触れたことのあるCounterpartyやOmniなど、ビットコイン上でアセットを発行するプロトコルは色々と存在しました。その共通点として
・オンチェーンにOP_RETURNでデータを記載することで発行・送金等を行う
・そのデータを該当するレイヤー2で解釈して検証する
という仕組みでした。また、これらは自分でノードを動かすこともでき、自分でブロックチェーンにトランザクションを発行できるパーミッションレスな形のものでした。
ビットコイン上でアルトコインを発行する需要はスケーラビリティ上の問題からアルトコインへと移っていきました。操作のたびにOP_RETURNを含んだビットコイントランザクションを発行しないといけないからです。
Taroはその点、スケーラビリティに優れているということですが、どういう仕組みになっているのでしょうか。
TAROの仕組み
まず確実に把握する必要があることは、TaroとCounterparty、Omniは全く異なる構造になっているということです。例えばTaroでは原則としてユーザーのトランザクションの実行にアセットの発行者の協力が必要な形を取るでしょう。
ユーザーは発行者に依頼して自分の残高を操作してもらい、その操作の結果は発行者がブロックチェーンにコミットします。発行者が残高一覧の更新をコミットする間隔は特に規定されていないので、多数のトランザクションをまとめることも、1トランザクションごとにコミットすることも可能です。
あるいはasset splitといって、ユーザーが自分の残高を減らし、その事実にコミットして減らした残高と等しい新しいアセットをオンチェーントランザクションを使って発行することもできます。(預り証みたいなものですね) これを使って発行者の立場で送金をすることもできますが、預り証ネットワークのユーザーの検証の手間は増えますし、動作し続ける必要のあるカウンターパーティの数も増えていきます。預り証の関係がネストされていくのは実際のところ好ましくないでしょう。
預り証と表現していますが、これは発行者が協力してくれなくなった場合にGOXすると思われるからであり、発行者による盗難リスクがあるのか(盗難を防止できるのは親となるアセットの発行者だけだと思われますが、それが期待できるか)は認識できていません。不正なトランザクションは没収されるとの記述を見ましたがそれを保証する仕組みはわかりませんでした。
ユーザーはブロックチェーンにコミットされているツリーや発行者に問い合わせたツリー、発行者が発行してくれるトランザクション受付の証明書などを通して自分の残高や総発行量が正しいことを検証できますが、根本的に動作のためには発行者に依存する仕組みです。
~~~
さて、Taroでは書き込みに際してOP_RETURNではなくTaprootを活用して、ブロックチェーンにアセットの発行や残高一覧を記録していきます。
80バイトという制限があり、トランザクションサイズに影響するOP_RETURNとは異なり、Taprootにおいてスクリプトを格納する木には大量のデータへのコミットメントを含めることができることを利用します。(ただしデータ自体はオフチェーンで保持しないといけません。)