本記事は
NRIネットコム Advent Calendar 2022
9日目の記事です。
🎁 8日目
▶▶本記事 ▶▶
10日目
🎄
はじめに
昨今、デジタル資産の非代替性及びその所有権を保証するために、NFTと呼ばれるトークンが活用されています。NFTを利用した様々なサービスがローンチされていますが、いざその仕組みついて技術的な理解を深めようといろいろ調べてみても、なかなか体系的な理解が得られませんでした。調べ方もあると思いますが、やはりブロックチェーン関連技術は技術的な側面より資産的な側面がフィーチャーされやすく、そもそも技術的に中身を解説した情報が見つかりにくいというのも関係していると思います。
そこでこの記事では、NFTマーケットプレイスを例にNFT取引の技術的な構成について基本を整理してみました。実際にはここで説明すること以外にも、セキュリティなど様々な観点で設計が必要な点はありますが、NFT取引を実現する基本的な構成は理解できる内容になっているかと思います。
NFTとは
NFT取引の中身を見ていく前に、まずNFTとはどういうものか抑えておきます。NFTとはNon-Fungible Tokenの略で、日本語では非代替性トークンと呼ばれています。非代替性とは、全く同じものが存在せず替えが効かないということであり、別のコインや資産などで代替できない性質を表します。
このNFTを特定のデジタル資産に紐づけることで、そのデジタル資産自体にNFTが持つ非代替性を付与することができます。また、この仕組みをブロックチェーンで実現することで、ブロックチェーンが持つ情報の透明性や改ざん耐性といった性質を継承することができます。
NFTについては以下の記事でも解説されているので、詳しく知りたい方は見てみてください。 tech.nri-net.com
NFT取引の全体像
NFT取引の概念図を表すと下図のようになります。ブロックチェーンにはEthereumを採用した例です。デジタル資産を生み出したユーザ(Owner
)とそれを売買するユーザが2人いて、売買するためのマーケットプレイスとそのServer/DBがあり、デジタル資産の所有権の管理にEthereumブロックチェーンを使った構成となります。
NFT取引の技術的構成
それでは、上図をトピックごとに切り出して順番に見ていこうと思います。
アカウント発行
まずはマーケットプレイス上でのアカウント発行について考えていきます。
基本的には一般的なアプリケーションと同様ですが、アカウント情報にEOA Address
を紐づけておくことが特徴的です。EOA
とは簡単に言うとEthereum上のユーザアカウントを指しており、EOA Address
とはEthereum上のアカウント情報への識別子を指しています。つまり、マーケットプレイス上のアカウントIDとEthereum上のアカウントIDを紐づけて発行・保管しておくということになります。
デジタル資産の登録
次に、マーケットプレイスにアップロードしたデジタル資産に、どのように所有権が付与されるのか考えていきます。
マーケットプレイスにアップロードされたデジタル資産はオリジナルとしてサーバーに保存し、そのメタ情報をEthereumネットワーク上に構成されるIPFS(P2Pの分散型ファイルシステム)上に作成します。メタ情報には、デジタル資産のIDやタイトル、説明、保管先URLなどをJSON形式で記録しておきます。特徴的なのは、デジタル資産のオリジナルデータ自体はEthereumとは異なるサーバー上に保存しておき、Ethereumで一度のトランザクションで書き込めるデータ容量とそれに比例して発生するトランザクション手数料の問題を回避しているところです。ちなみに、オリジナルデータ自体をブロックチェーンに書き込む設計も存在し、「フルオンチェーンNFT」と呼ばれます。
そして、Ethereum上にNFTを発行することで、デジタル資産の所有者をブロックチェーン上に書き込みます。NFTの中身をそれ自体のID、デジタル資産のメタデータへの参照、所有者のEOA Address
(Owner Address
)とすることで、メタデータから参照できるデジタル資産の所有者はOwner Address
であると表現しています。このOwner Address
は前述した通りマーケットプレイス上のアカウントIDと紐づいているので、最終的な所有権を持っているアカウントを特定することができます。
また、NFTの操作はスマートコントラクトと呼ばれるEthereum上で動作するプログラムを通して行います。NFTの操作を実現するスマートコントラクトにはERC-721という標準規格が存在しており、基本的にはこれに準拠するようにプログラムを実装します。例えば、この標準規格ではownerOf() - 指定したNFTのOwner Addressを取得する
であったり、transferFrom() - 指定したNFTの所有権を移動する
といったインタフェースが定義されています。balanceOf() - 指定したOwner Addressが所有するNFTの数を取得する
とtokenOfOwnerByIndex() - 指定したOwner Addressが所有するN番目のNFTを取得する
を組み合わせれば、あるアカウントが所有するすべてのNFTの情報を取得するという操作もできそうですね。
デジタル資産の売買
最後に、デジタル資産の所有権の移動について考えていきます。
行っていることは非常にシンプルで、マーケットプレイス上でデジタル資産の売買が成立したら、NFT上に記録されているOwner Address
を購入者のEOA Address
にスマートコントラクトを通して書き換えるだけです。
おわり
今回はNFTマーケットプレイスを例にNFT取引の技術的な構成について整理してみました。割りとシンプルな仕組みで実現されていることが確認できたのではないかなと思います。
また、NFTはメタバースと関連して取り上げられることも多い言葉ですよね。メタバースとはコンピュータネットワーク上の仮想空間のことで、現実とは異なるもう一つの世界を構築しています。現実でモノを作ればそれは必然的に唯一無二なものになりますが、仮想空間でモノを作ってもそれが唯一無二であるとは保証されません。そこで、NFTというデジタル資産に非代替性を付与することができる技術を利用し、現実と同じようにモノを作ればそれはその仮想空間において唯一のものであることが保証できるようになるんですね。NFTとその土台にあるブロックチェーン技術がメタバースを支える重要な要素技術の一つであることが理解できました。