BTCのNFTと言われるOrdinalsを学ぶ
少しだけ話題にでてきたBTCのNFTについて調べてみました。BTCのNFTと呼ばれるものは過去にもCounterpartyというL2で実現しており、そのたびにBTCコミュニティでは、是非が熱く議論されてきました。
BCTは純粋であるべきでNFTはいらない派とNFTがあってもいいじゃん派という感じです。そこには今回踏み込みません。
さて私が今回興味を持ったのはBTCにはEthereumのようなSmart Contractの仕組みがありません。では一体どうやってNFTを実現しているのか?その仕組みついてとても興味をそそられたわけです。
BTCについては正直言いますとEthereumに比べて私の知識はたりません。間違ったところなどあれば優しく教えていただけるとうれしいです!
ではいってみましょう!
Ordinals by Casey Rodarmor
BTCのNFTを実現したプロトコルはOrdinalsと命名されており、開発者は Casey Rodarmorです。
こちらが彼が世界にリリースした時のブログの記事です
実際にBitcoinのチェーンに書き込まれたNFTはエクスプローラーで確認できます。
https://ordinals.com/inscriptions
開発者は実際にはNFTというワードを使用せず、Inscriptions(碑文)と命名しています。デジタルデータをBitcoinのブロックに刻むには OrdというWalletが必要です。Linux系のOSにダウンロードして自分で用意する必要がありそうです。
GitHubはこちら
仕組み
この仕組みについては細かい点で私の誤解が含まれる可能性がありますので必要に応じて原文に戻って確認ください。なにか間違えがありましたらご指摘いただけるとうれしいです。さて行ってみましょう!
ビットコインはFTでは???
まずはこの問題を乗り越えます。FTであるビットコインにNFTの要素を付け加えるための理論を追加します。これが Ordinals(序数)です。序数という言葉も難しいですね。序数というのは順番を表す数字という意味となります。
この言葉が意味深なのでし。ビットコインというのは採掘を経由してこの世にうまれることはご存知でしょう。その採掘量は自動調整されています。Bitcoinはそう採掘量も決まっていていつかは新しいBitcoinが生まれません。
ここでCaseyは新たな概念を生み出します。生まれた順にビットコインに番号をつけちゃおうと!ただFTであるBitcoinに整数の値をつけられるのか??実は可能なのです。Bitcoinの最小分解粒度は satoshiと命名されており 100000000 satoshi = 1bitcoinです。なので完全な整数値をつけることが可能です
この序数理論は既存のBitcoinのOperationには何も影響を及ぼさず概念が追加されたものなので、Ordinalsが嫌いであって無視しても構わないというわけです。
さて生まれた瞬間はいいのですが、Bitcoinを送金したときはどういうことがにしましょうか?ここでFIFO(先入先出)の概念を取り入れます。
Aliceが [0…….100]のsatosi番号を持つbitcoinを所持していたとします。彼女がBobに30 satoshi送金するときは [0…29]がBobに渡るという法則を決めます。
こういった決まり事により誰のWalletにどのsatoshiがあるかを一意的に決定することができます。BlockChainがすべてのトランザクションを保持しているからできる芸当です。
jpegを追加するぞ!
これですべてのsatoshiはNFTであることになりました。今度はNFTの象徴である画像の追加です。
これにはBitcoinのtransaction witnessにデータを追加することができます。2021年の改訂Taprootにより、4MByteのサイズまでの書き込みができるようになりました。
このデータ書き込みはBitcoinとして規定されているものですが、その中に識別用に “ord“を明記し、その後に text/plain… のように文字列だったりjpegだったりを指定していきます。
このトランザクションで送信したsatoshiの0番目にこのデータを紐つけます。
これでとあるsatoshiにオンチェーンの画像的なデータがむすびつけることができました。序数理論によりこのsatoshiとデータは結びついているので専用のエクスプローラーを使えばそれを閲覧することができます。
こうやって見える
https://ordinals.com/inscription/f145fb175c07dc1057f61ae9a19c6ae5b95d4c172d6fcf0b51f4d90be5d0562fi0
3746番目のInscriptionです。
このsatoshiはこのトランザクションで生まれ
f145fb175c07dc1057f61ae9a19c6ae5b95d4c172d6fcf0b51f4d90be5d0562f
satoshi番号は
1494753043320078
さいごに
EthereumのNFTはコントラクト内の変数です。これはEthereumが共有するデーターセットの中に書き込まれたあるビットであり、トークンであるETHとは根本的に異なります。
生まれたBitcoinの粒子に全て番号をつけてNFT化してしまうレベルのロマンチックさにはかないません。
スマートコントラクトのないという限定事項の中でL2などの概念をとりいれずにここまで構築されたエンジニアさんの情熱とロマンは素敵でした。
Ethereumと同じようにつかわれることは絶対ありませんし、それを望んでもいませんでしょう。ただロマンを刻むツールとして生まれたこの概念には乾杯です!