NFTマーケットプレイスの仕組みを整理してみる

はじめに

こんにちは。
前回の記事では、NFTを動かすスマートコントラクトについて整理しました。

NFTの発行や送信では、ウォレットから送信されたトランザクションをもとに、スマートコントラクトが所有者情報などを更新します。

では、NFTをマーケットプレイスで「出品する」「購入する」場合は、どのような処理が行われているのでしょうか。

OpenSeaなどのNFTマーケットプレイスでは、ユーザーから見ると「出品」「購入」というシンプルな操作ですが、その裏側では、

  • NFTを移動するための権限
  • 出品価格などの販売情報
  • マーケットプレイスのスマートコントラクト
  • NFTのスマートコントラクト
  • 購入代金の支払い
  • NFTの所有者変更

といった複数の仕組みが連携しています。

今回は、

  • NFTを出品すると何が起きるのか
  • approveとは何か
  • 出品情報はどこに保存されるのか
  • NFTを購入すると何が起きるのか
  • マーケットプレイスとNFTのスマートコントラクトがどう連携するのか

について整理してみようと思います。


NFTマーケットプレイスとは?

 NFTマーケットプレイスとは、

NFTを出品・購入できるWebサービス

です。
代表的なサービスとしては、OpenSeaなどがあります。

通常のECサイトでは、

商品を出品 → 購入 → 決済 → 商品を発送

という流れになります。
一方、NFTマーケットプレイスでは、

NFTを出品 → 購入 → 暗号資産で決済 → NFTの所有者を変更

という流れになります。

物理的な商品を配送するのではなく、最終的にブロックチェーン上のNFTの所有者情報が変更される点が大きな特徴です。 

 

出品しただけではNFTの所有者は変わらない

NFTをマーケットプレイスへ出品すると、

NFTがマーケットプレイスへ預けられる

ような印象を持つかもしれません。
しかし、出品しただけではNFTの所有者が変わらない方式も一般的です。

例えば、出品前の所有者がWallet Aだった場合、

  • 出品前:Token ID 1 → Wallet A
  • 出品後:Token ID 1 → Wallet A

のままです。

マーケットプレイスには、

「このNFTを1 ETHで販売します」

といった販売情報が登録されます。

そして実際に購入されたタイミングで、NFTの所有者が購入者へ変更されます。

 

マーケットプレイスはなぜNFTを移動できる?

ここで疑問になるのが、

購入されたとき、なぜマーケットプレイスが他人のNFTを移動できるのか?

という点です。

NFTは基本的に、所有者以外が勝手に移動することはできません。
そのため、出品前などにNFTの所有者が、

このアドレスやスマートコントラクトならNFTを移動してもよい

という権限を与える場合があります。

この仕組みが approve(承認)です。

ERC-721では、代表的に次のような仕組みがあります。

  • approve
  • setApprovalForAll

イメージとしては、

NFT所有者
→ マーケットプレイスにNFT移動の権限を与える
→ 購入されたとき、その権限を使ってNFTを移動する

という流れです。

ここで重要なのは、

approveしただけではNFTは移動しない

という点です。
あくまで「移動してもよい」という権限を与えているだけで、購入されるまでは、NFTは出品者のウォレットが所有しています。 

approveとsetApprovalForAllの違い

簡単に整理すると、次のような違いがあります。

仕組み 権限の範囲 例
approve 特定のNFTのみ Token ID 1だけを許可
setApprovalForAll そのコントラクトで所有するNFT全体 所有するNFTをまとめて許可

 

実際にどちらを利用するかは、マーケットプレイスの実装によって異なります。

 

出品すると何が起きる?

出品時の流れを整理すると、概ね次のようになります。

特にポイントなのは、

  • approveはNFT移動の権限付与
  • 出品情報は価格や販売条件
  • 出品しただけではNFTは移動しない

という3点です。

 

出品情報はどこに保存される?

NFTを出品すると、

  • どのNFTを売るのか
  • 販売価格
  • 出品者
  • 有効期限

などの情報が必要になります。

ここで少し意外なのが、出品情報が必ずしもブロックチェーン上に保存されるとは限らないという点です。

マーケットプレイスによっては、

ウォレットで出品内容に署名
→ 署名済みの出品情報をマーケットプレイス側で保存
→ 購入時に署名内容を検証
→ トランザクションを実行

という方式があります。

このように、ブロックチェーンの外で情報を管理することをオフチェーンと呼びます。

出品情報をオフチェーンで管理すると、出品のたびにブロックチェーンへ書き込む必要がないため、不要なガス代を抑えられるメリットがあります。

一方、NFTを移動するためのapproveなど、ブロックチェーン上の状態を変更する操作ではトランザクションが必要になります。

 

NFTを購入すると何が起きる?

購入者がNFTの購入を承認すると、次のような流れで処理されます。

購入時は、過去の記事で紹介した

  • ウォレット
  • トランザクション
  • ガス代
  • スマートコントラクト

といった仕組みが、実際の売買処理として組み合わされます。

 

 

2つのスマートコントラクトが連携する

NFTの購入では、1つのスマートコントラクトだけで処理が完結するとは限りません。
代表的には、次のような役割分担があります。

マーケットプレイスのスマートコントラクト

  • 出品内容を確認する
  • 購入条件を確認する
  • 代金を処理する
  • NFTの移動処理を呼び出す

NFTのスマートコントラクト

  • NFTの所有者を管理する
  • NFTの移動権限を確認する
  • NFTの所有者を購入者へ変更する

イメージとしては、

購入者
→ マーケットプレイスのスマートコントラクト
→ NFTのスマートコントラクト
→ 所有者変更

という流れです。

前回の記事では、スマートコントラクトは「外部から呼び出されることで処理を実行する」と紹介しましたが、スマートコントラクトから別のスマートコントラクトを呼び出すこともできます。

NFTマーケットプレイスは、その代表的な例のひとつです。

 

支払いはどう処理される?

NFTを購入すると、NFTの所有者変更とあわせて代金の支払いも行われます。
例えば1 ETHのNFTを購入する場合、

購入者
↓
1 ETHを支払う
↓
出品者へ代金を送る
↓
NFTの所有者を購入者へ変更する

という処理が行われます。

実際には、マーケットプレイスのスマートコントラクトを経由し、

  • 出品者への支払い
  • マーケットプレイス手数料
  • 必要に応じてロイヤリティ

などが処理されることもあります。

つまり、NFTの購入は単純な所有者変更だけではなく、

「支払い」と「NFTの所有者変更」を連携して実行する処理

と考えると分かりやすいです。

 

ロイヤリティとは?

NFTでは、作品が二次販売されたときに、クリエイターへ報酬を支払う仕組みが使われることがあります。
これをロイヤリティと呼びます。

例えば、マーケットプレイス手数料が2.5%、ロイヤリティが2.5%の場合、

NFT販売価格:1 ETH

に対して、

出品者:0.95 ETH
クリエイター(ロイヤリティ):0.025 ETH
マーケットプレイス手数料:0.025 ETH

のように分配されるイメージです。

ただし、ロイヤリティの扱いはマーケットプレイスやNFTの仕組みによって異なります。
そのため、

NFTなら必ず二次販売時にロイヤリティが支払われる

というわけではありません。

 

出品と購入では何がブロックチェーンに記録される?

出品から購入までを整理すると、処理によってブロックチェーンへの書き込み有無が異なる場合があります。

操作 ブロックチェーンへの書き込み
approve あり
出品情報の作成 オフチェーンの場合もある
NFT購入(支払い・所有者変更を含む) あり

 

購入時の「支払い」と「所有者変更」は、多くの場合1つのトランザクションの中でまとめて実行されます。

つまり、マーケットプレイスのすべての操作がブロックチェーン上で実行されているわけではありません。
必要に応じて、

  • オフチェーンのWebサービス
  • ウォレットの署名
  • オンチェーンのスマートコントラクト

を組み合わせています。

ここは、通常のWebサービスとWeb3の仕組みが混ざり合っている部分でもあります。

 

Web2のECサイトとの違い

一般的なECサイトとNFTマーケットプレイスを簡単に比較すると、次のようになります。

項目 Web2のECサイト NFTマーケットプレイス
商品の所有情報 サービス側で管理 NFTスマートコントラクトで管理
出品情報 データベース オフチェーンまたはオンチェーン
操作の承認 ログインなど ウォレット署名
購入処理 API・DB更新 スマートコントラクト実行
決済 クレジットカードなど ETHなどの暗号資産
所有者変更 サービス側のデータ更新 ブロックチェーン上で更新

NFTマーケットプレイスも画面部分は通常のWebアプリケーションですが、NFTの所有者情報や売買の最終的な処理にはブロックチェーンが利用されます。

 

まとめ

今回紹介した内容を整理すると、次のようになります。

用語 役割
NFTマーケットプレイス NFTを出品・購入するWebサービス
approve NFTを移動する権限を与える仕組み
setApprovalForAll 複数のNFTに対してまとめて移動権限を与える仕組み
オフチェーン ブロックチェーンの外で情報を処理・保存すること
マーケットプレイスのスマートコントラクト 売買条件や支払い、NFT移動などを制御する
NFTのスマートコントラクト NFTの所有者や移動権限などを管理する
ロイヤリティ 二次販売時などにクリエイターへ支払われる報酬

NFTマーケットプレイスでは、「出品」「購入」という簡単な操作の裏側で、

  • approveによる移動権限
  • 出品情報
  • マーケットプレイスのスマートコントラクト
  • NFTのスマートコントラクト
  • 支払い処理
  • NFTの所有者変更

が連携しています。

これまでの記事で紹介してきたウォレット、トランザクション、ガス代、スマートコントラクトは、それぞれ独立した仕組みではなく、NFTの売買の中で組み合わされて利用されています。

今回の記事では、その仕組みが実際の「出品・購入」という操作の中でどのようにつながっているのかを整理しました。