ここ数日で話題になっているビットコイン上のプロジェクトに、OrdinalsというフルオンチェーンNFTプロトコルがあります。
個人的には直接ブロックチェーンを利用するNFT自体が無駄という意見なので、フルオンチェーン(紐づけるファイルのデータを全てブロックチェーン上に記録する)は愚かとさえ感じますが、もちろん対価となる手数料さえ払えば何を記録するのもユーザーの自由なので今日はそこを議論するつもりはありません。
Ordinalsがどういう仕組みなのか、特にCounterpartyやRGBなどビットコイン上でNFTを扱うことのできる他のプロトコルとどう違うかに焦点を当てていきます。
Ordinal Theoryとは
Ordinal Numbersとは序数、つまり順番の番号(何番目)を指す言葉で、Ordinal Theoryは「ビットコイン上で発行された全てのsatoshi (sats)に固有番号を振るシステム」というような意味を持ちます。具体的にどういうことでしょうか。
例えばビットコインの最初のブロックで50BTC、すなわち50億satsが発行されたとき、そのsatsに0,1,2,3,...,4999999999と順番を振ります。そして以後のトランザクションにおいて入力されるsatsと出力されるsatsの対応関係についてルールを定めることで特定のsatを「採掘から最後のトランザクションまで」追跡することができます。
例えばその50BTCを25BTCと25BTCに分割して送金する際に、0番目の出力には0~2499999999番目、1番目の出力には2500000000~4999999999番目のsatsが割り振られるなどの決まりが定められています。
実際には最初のブロックで採掘されたコインは送金不可能です。また上記の例は単純化されていますが、実際は手数料として一部のsatsがマイナーに渡ることなどを考慮した仕様になっています。
つまり、ビットコインの全てのsatsに通し番号をつけ、その移動を記録する1つの方法としてOrdinal Theoryというものは提案されました。紙幣の記番号ですね。
キリ番など珍しいsatsをたまたま持っている場合もあるかもしれません。それを面白がって作ったようなページもあります。
紙幣でもキリ番や小さい番号、ゾロ目などでコレクター価値がついているものがありますね。珍しいものでは額面の数十倍で取引されることもあるようです。(珍しい1 satが50 satで買えるわけにはいかないように思いますが!)
全てのsatsに通し番号を振るOrdinal Theoryについて詳しくは以下のページにまとまっています。
Ordinalsでは特定のsatにデータを付加できる
さて、特定のsatに固有番号を振って追跡する方法としてのOrdinal Theoryが何に使われるために生まれてきたのかというと、その特定のsatにデータを付加してNFTのように扱うため、というのが実際のところと思われます。メーリスの投稿には他にも使い方の例がありましたが、ウェブサイトは明らかにNFT色が濃く出ているためです。
特定のsatにデータを付加することをInscribe、付加したデータをInscriptionと表現しており、データが付加されたsatsはその後移転してもデータが付加された時点まで遡って参照することができます。
Ordinalsの2大特徴はOrdinal Theoryとこのデータの保存方法だと思います。
データの保存場所が特徴
従来、ビットコイン上になにかのデータを保存したりコミットする際にはOP_Returnというオペコードを使うことが一般的でした。このオペコードを使うことでトランザクションの出力にデータを1度に80バイトまで記録することができるため、ビットコイントランザクションと何らかの情報を紐づけるようなプロトコルはこぞって利用してきました。
例えばCounterpartyなど一昔前のプロトコルはOP_Returnにデータを保存し、それをクライアントが解釈することで機能していました。
さらに昔、OP_Returnが登場する以前はアルファベットの並びで文章を表現した特製のアドレスを作成し、そこから送金して似たようなことを行っていました。現在も時折見かけますが、この方法は対応する秘密鍵が未知のアドレスを生成して行うため、すべてのノードが保持するUTXOセットに実際は使用できないUTXOが溜まっていってしまうので推奨されません。
OP_Returnやバニティアドレスの特徴として、トランザクションの出力でいきなりデータにコミットおよび公開(Reveal)が行える点が挙げられます。その一方で、Ordinalsが採ったアプローチはデータへのコミットと公開を別々のトランザクションで行うことでした。
Commit TransactionではReveal Transactionの入力に使うためのUTXOを生成します。このP2TR UTXOは通常のスクリプトの末尾にEnvelopeと呼ばれるコードブロックを含み、その中身がReveal時にInscribeされることとなります。具体的には、
OP_FALSE
OP_IF
OP_PUSH "ord"
OP_1
OP_PUSH "text/plain;charset=utf-8"
OP_0
OP_PUSH "Hello, world!"
OP_ENDIF
というコードを付け加えます。このコードは実行されることはありませんが、Reveal Transactionにおいて署名領域に記録されます。Taprootの導入と同時にスクリプトのサイズに関する制限が緩和されたため、OP_Returnとは桁違いの情報量を含めることができます。また、出力データであるOP_Returnとは異なり、署名領域のデータはSegwitの導入によって手数料コストが1/4で済みます。(UTXOセットの縮小を促すための施策で、実際のブロックサイズが1MBを超える理由です)
Taproot開発者たちが意図しなかったこの使い方がフルオンチェーンNFT志向の強いOrdinals開発者たちの格好の道具となったわけです。
長所は永続性、欠点はコスト
さて、Ordinalsの長所はというと何よりオンチェーンで全て完結することによる永続性です。Counterpartyにおいてもそうでしたが、全てのデータがオンチェーンで誰にでも公開されていることは忘れ去られてからの再発見も可能にします。Ordinalsの場合は本当に全てのデータが記録されている上に、非常にシンプルな仕組みであることも将来的な復元可能性にプラスに作用し、彼らがOrdinalsでInscribeされたsatsをDigital Artifact (デジタル遺物)と呼ぶのもうなずけます。
その一方で、当たり前ですがフルオンチェーンということはコストが高くついてしまいやすいです。また署名領域のデータが1/4サイズで評価されることを悪用していると捉えられやすい仕組みのため、もし流行るとOP_Return以上に一般ビットコイナーからの反発を招く可能性もあります。
また長短ある特徴として、Ordinal Theoryの仕様上では複数のDigital Artifactを1つのUTXOにまとめることもできます。それを分割する際に上手いことUTXOを分ける必要があり、dust limitとの兼ね合いや取り出したいDigital Artifactの位置の問題で複数のトランザクションに分けて行う必要が出てくるため、必ずしも安く済むわけではありません。
まとめ
・Ordinalsはビットコイン上のフルオンチェーンNFTを扱う1つのアプローチ
・Ordinal Theoryでビットコイン上の全てのsatoshiに固有識別子を割り当てる
・Taproot scriptに評価されないコード片を含めることで、そこに記録したデータを特定のsatoshiに関連付けることができる
・シンプルな仕組みで記録したデータの永続性が期待できる
・データ保存量が大きいにも関わらず、Segwitで導入された署名領域の手数料75%引きの恩恵を受けるため、ビットコイナーの反発が予想される
