ERC721-CとNFTのロイヤリティの行方
こんにちは石ころです。今日はNFTのロイヤリティに関するちょっとマニアックな話を書きたいと思います。
一昨日、OpenSeaがNFTのロイヤリティのサポートを終了することを発表し、NFTツイッターでは騒ぎになっています。
と同時に、そういえばDigiDaigakuのLimitBreak社がERC721-Cとかいう、ロイヤリティ問題を解決するものを作ってなかったっけ?という声も見かけるので、それについて書きます。
TL:DR
(TL:DRを書いたところで、本文を読まないと結局何をしゃべっているか意味不明だなぁ。)
ロイヤリティの問題は、その仕組みがオンチェーンのプロトコルに含まれていないことと、ブラックリスト方式ではWrapperによっていくらでも迂回できてしまうこと
これを解決するために発明されたのが、オンチェーンロイヤリティの仕組みを含んだ、マケプレ用のプロトコル「Payment Processor」および、ホワイトリスト方式を活用したNFTの新規格「ERC721-C」
これをマケプレおよびNFTのプロジェクトが採用し、普及すれば、ロイヤリティが復活する希望がある
ただし、スマートコントラクトウォレットが使えなくなるなどの欠点もありそう
とりあえずまだ様子見の段階か
前提のおはなし
ロイヤリティとは、NFTが二次売買されるたびに、NFTを発行したクリエイターに数%入る手数料のことですが、昨年、いくつかのマケプレがロイヤリティの徴収を任意化しはじめました。
任意化というのは、NFTを二次流通で買う人がロイヤリティを払いたければ払うし、払いたくなければ払わなくてもいい、というものです。
ロイヤリティを徴収できなくなったクリエイターからの反感を買いそうですが、NFTバブルがはじけ、マケプレも苦戦を強いられる中、悠長なことを言ってられなくなったのかもしれません。
マケプレは手数料ビジネスですので、売買ボリュームを増やす必要があり、ロイヤリティを任意化することは、売買手数料の低下を意味し、売買の促進につながります。
全く同じ商品をより安く買えるお店が他にあるなら、大半の人間がそちらを選ぶでしょう。このままではまずいと最大手のOpenSeaは危機を感じたのか、OpenSea上の一部のコレクションはロイヤリティを任意化するなどして追随しました。
一方、OpenSeaはクリエイターの声も汲み取りつつ、一部のコレクションはロイヤリティを継続する構えも見せました。とはいえ、そのままロイヤリティを継続しても、他のマケプレにユーザーが流れてしまうだけなので、
「うちで取引される一部のNFTは引き続きちゃんとロイヤリティが発生するようにします。そのかわり、うちでNFTを取引したいなら、そのNFTのコントラクトの中に、ロイヤリティをサポートしていない、こことここのマケプレでは取引不可というリストを含めてください」
というルールを設けました。このブラックリスト機能で、ロイヤリティをサポートしない他マケプレへのユーザーの流出を防ぎ、自社に囲い込み戦略でしょうか。
Seaportの呪縛
このOpenSeaのブラックリストには、競合のBlurも含まれていましたが、Blurは即座にこれを突破しました。
OpenSeaは独自に開発したマケプレ機能群のスマートコントラクト(Seaportと呼ばれています)をオープンソースにしていました。誰でもこのSeaportを使ってマケプレを構築することが可能でした。
Blurは元々独自に開発したマケプレ機能を使っていましたが、上記のOpenSeaのブラックリストを突破するために、マケプレ機能をSeaport版にすり替えたのです。
これによって、OpenSeaがBlurをブラックリストに入れようと思ったら、Seaportをブロックすることになってしまう、すなわちOpenSea自身もブラックリストに入ってしまうので、Blurをブラックリストに入れられない・・・、というなんとも面白い事態になりました。
OpenSeaは良かれと思ってSeaportをオープンソースにしていたものの、自分で自分の首をしめてしまった形です。
参考)この件を暴いた方による詳細な分析スレです:
https://twitter.com/pandajackson42/status/1620081518575235073?s=20
オンチェーンでロイヤリティを強制
それでは、Seaportをオープンソースにしていなかったら問題なかったのでしょうか?
たしかに、もしSeaportがオープンソースでなければ、ソースコードが流出でもしない限りBlurをはじめ他マケプレはSeaportを使えなくなるので、迂回策がなくなり、上記の問題は起きていなかったかもしれません。
ただ、より本質的な問題は、そもそもロイヤリティの徴収がオンチェーンではなくオフチェーンで起きていること、という見方もできます。
Seaportのスマートコントラクト群にはロイヤリティを強制するような仕組みが含まれていないため、他のマケプレは、Seaportをマケプレ機能の土台に利用した上で、Seaportの守備範囲外のオフチェーン(=Web2データベース)でロイヤリティを無視する、ということができました。
NFTコントラクト内のブラックリストは、NFTを他の特定のコントラクトアドレスへ移すことを禁止できますが、オフチェーンで起きていることをブロックすることはできません。
仮にSeaportがプロトコルレベルでロイヤリティを強制していたら、Seaportを利用することは、ロイヤリティ強制の遵守を意味するので、当然ロイヤリティを迂回する策にはなりえません。
また、ロイヤリティ発生の仕組みがオフチェーンで起きているということは、ロイヤリティをサポートする言っていたマケプレが、ある日ころっと気が変わって、やっぱりやめました、と言う可能性もあります。今回OpenSeaが発表したことです。
マケプレのプロトコルレベルでロイヤリティの仕組みが規定されていれば、オフチェーンで方針をコロコロ変えることはできません。
(もちろん、Seaportにロイヤリティの仕組みが含まれていても、もしマケプレが本気でロイヤリティをやめたいと思ったら、Seaportごと捨てるという策はとれると思いますが。)
さて、ここでLimitBreak社が開発した新たなプロトコルが、Payment Processorです。これはSeaportと同じく、マケプレ機能群のスマートコントラクトですが、ロイヤリティ徴収の仕組みをプロトコルの中に含めました。Seaportと同じように、オープンソースで公開されています。
これで、オンチェーンでロイヤリティを強制できますが、Payment Processorを土台に開発されたマケプレ1社が存在するだけでは、結局、手数料回避を図るユーザーがロイヤリティをサポートしない他マケプレを使うだけなので、意味がありません。
なので、そのような他マケプレをブロックする仕組みが依然として必要です。
Payment Processorのような、オンチェーンロイヤリティを含んだプロトコルと、OpenSeaが作った、NFTコントラクト内にブラックリストを入れる仕組みを組み合わせれば、万事解決でしょうか?
(※ややこしいですが、前者のオンチェーンロイヤリティの仕組みはマケプレ機能群のスマートコントラクトに含まれていて、後者のブラックリストの仕組みはNFTのスマートコントラクトに含まれています。)
ブラックリストの限界
実はブラックリストには欠点があります。Blurのファウンダーの発言を見てみましょう:
OpenSeaがブラックリスト方式を発表したとき、我々も1週間ですぐに採用した。けどこれは持続的な解決策ではない。オンチェーンでロイヤリティを強制する方法はない。迂回できてしまう。
みんなDeFiでさんざん頑張ろうとした(けど結局ダメだった)。ロイヤリティを強制しようとしたり、取引最低価格(=なんETH以上でしか売れないとか)を定めたり。
ブラックリストは暫定的な解決策にはなりうると思ったから採用した。けどいずれ意味がなくなるもの。もちろん、これがロイヤリティの最終形態とは思わないし、ロイヤリティのもっと賢いやり方はあるとは思うけど。(以下Podcastの00:53:00あたりから。)
ブラックリスト方式はなぜ持続可能ではないのでしょうか。
ブラックリスト方式について真っ先に上がる批判が、「そんなのWrapされて簡単に迂回されるじゃん」です。
Wrapとはなんでしょうか。「包む」という意味の英単語ですが、イメージとしては、フリマアプリで売買が禁止されているものがあったとして、バレないように包装用紙で包んで分からないようにする、という感じでしょうか。買い手は、包装用紙をほどけば、中のものを取り出せます。
より具体的には、例えば、CryptoPunksはERC721規格が生まれる前から存在したため、ERC721ではありません。そのままではOpenSeaで取引できないので(禁止されているわけではなく、OpenSeaが対応していないというだけ)、ERC721ではないCryptoPunksをERC721にしちゃう、ERC721で包んじゃう、という裏技を使います。
仕組みとしては、元のCryptoPunks(これは非ERC721)をWrap用のスマートコントラクト(以下Wrapperコントラクト)に転送してロックし、対になる新たなNFT(これはERC721)をWappedPunksとして発行します。
これでOpenSeaで扱えるようになり、買い手は、購入したWrappedPunksをWrapperコントラクトに戻せば、元のCryptoPunksがアンロックされて返ってくる、みたいな仕組みです。
さて、OpenSeaのブラックリストに話を戻ります。OpenSeaがBlurをブラックリスト指定したとします。これを迂回してBlurでも取引したい人がいれば、そのNFT(Blurがブロックされているもの)を、新たなNFT(Blurがブロックされていないもの)にWrapします。
この際に裏側で起こることは、さきほどの説明と同様に、元のNFTをWrapperコントラクトに送ってロックし、新たなNFTを発行します。新たなNFTはなんの制約もかかっていない普通のNFTなので、Blurで取引できてしまいます。
OpenSeaがこのタイミングでロイヤリティ強制を終了すると発表した真意は分かりませんが、いずれにせよブラックリスト方式は、Seaportを使った迂回や、Wrap問題がある以上、恒久的な解決策ではなく、遅かれ早かれ意味がなくなるものでした。
OpenSea自身も、これは延命措置に過ぎないことを自覚していたのではないでしょうか。
ホワイトリストの登場
Wrap問題を解決するために、DigiDaigakuがPayment Processorとともに開発したNFTの新規格が、ERC721-Cです。これはホワイトリスト方式を採用しています。
ホワイトリストは、ブラックリストの反対で、この取引所はダメだよ、ではなく、この取引所はOKだよ(それ以外はデフォルトでダメ)と指定する方法です。
一見、逆にしただけで大差がないように見えますが、ホワイトリストにすることで、上記のWrap問題を解決することができます。
Wrapを阻止するためには、NFTをWrap用のスマートコントラクトに転送することを阻止しないといけません。ホワイトリスト方式では、NFTを取引できるのは指定されたアドレスだけですから、そこらのWrap用のスマートコントラクトに転送することができなくなります。
ブラックリスト方式だったときは、指定したアドレスがNGでしたが、Wrapperコントラクトは新たに無数に発行できるのですから、事前にそれらをブラックリストで包含することなど不可能でした。
ERC721-Cはセキュリティレベルが6段階に分かれていますが、クリエイターが3から6を選べば、「Receiver cannot be a smart contract」「Receiver must be an EOA」などと書かれており、Wrapを阻止できることが分かります。
ERC721-Cは、このホワイトリスト方式を採用することで、ロイヤリティをサポートしないマケプレを完全に締め出すことができます。ブラックリスト方式と違って迂回策はありません。
(上記表で6種あるうち、EnableOTCと書かれているものでは、マケプレを利用せずに、AさんがBさんにNFTを送って、別取引でBさんから対価のETHをもらう、ということは出来るかもしれませんが、これは別にできてもいいんじゃないかと思います。BAYCの創業者も、それはむしろ出来ないとダメでしょと言っています。今までもできましたし、これを禁止したら、自身のウォレット間でNFTを移すこともできなってしまいNFTの良さが消えかねません。)
さらに、このホワイトリストに誰を入れるかを決められるのは、NFTを発行するクリエイター自身です。
OpenSeaが導入していたブラックリストでは、誰をブラックリストに含めるかをOpenSeaが決めていました。このマケプレでは取引OKにしたい、と思っても、OpenSeaがダメと言ったらダメでした。
それに対してERC721-Cでは、クリエイターが自由に決められます。
今までクリエイターはマケプレが都度決めるルールに従うほかありませんでしたが、ERC721-Cの世界では、主権がマケプレからクリエイター側に移行します。
今後
さて、ERC721-CとPayment Processorが登場したことで、ロイヤリティが完全復活し、もう明日から心配はいらないのでしょうか。
ERC721-CはNFT規格、Payment Processorはマケプレのプロトコルに過ぎないので、ネクストステップとしては、これらを採用したマケプレの存在が必要になります。
LimitBreakが相当お膳立てしてくれているので、台頭するのも時間の問題かと思います。(既にいくつかあります。)
プロジェクトごとにERC721-Cを使用して独自マケプレを構築することも考えられます。
OpenSeaやBlurがERC721-Cを採用せず、今のロイヤリティ任意の方針を継続した場合、Seaport = ロイヤリティサポートしないプロトコル、となるので、
ERC721-C採用勢が、ホワイトリストからSeaportを外してOpenSeaとBlurを締め出す、あるいはOpenSeaがERC721-Cを採用することももちろんあるかもしれません。
他のプレイヤーが、ERC721-Cとは別の似たような規格を生み出すか可能性もあります。
昨日BAYC運営のYuga LabsがOpenSeaを捨てると宣言しましたが、Yuga Labsの創業者は以前ホワイトリスト方式を推していたので、わざわざ独自開発せず、ERC721-Cを採用するんじゃないか?と個人的には思ったりします。
ERC721-Cのトレードオフ
ERC721-Cの欠点を指摘する人もいるので最後にそれに触れておきます。
それは、Wrapを阻止するために、(セキュリティレベルによっては)スマートコントラクトとの交信が禁止されていることです。
NFTをスマートコントラクトに転送できないということは、おそらくスマートコントラクトウォレットが使えなくなります。
スマートコントラクトウォレットについては以前こちらで書いてみましたのでご参照ください。
https://twitter.com/ishicorodayo/status/1633453190699175937?s=20
ヴィタリックもスマートコントラクトウォレットを推していて、イーサリアムが向かう未来だと考えている人も多くいます。
例えば、最近話題になったERC6551なんかもスマートコントラクトウォレットを使っているのでおそらくERC721-Cとは両立しないはずです。
ERC6551は、キャラNFTが武器NFTを持つことができるような機能ですが、
この仕組みの裏側は、キャラNFTが直接武器NFTを持っているのではなく(ERC721自体にそのような機能はありません)、
武器NFTを新たなスマートコントラクトウォレット(ERC6551ではトークンバウンドアカウントと呼ばれるもの)に転送し、そのスマートコントラクトウォレットを操作できるのは、キャラNFTのホルダーアドレスだけ、と指定することで、実質的に、キャラNFTによる武器NFTの保有を可能にするものです。
ERC721-Cによって武器NFTをスマートコントラクトウォレットに送れなくなったら、ERC6551は使えない気がします。
ただ、スマートコントラクトウォレットもまだ普及していませんし、今後どうなるか分からないので、杞憂である可能性もあります。様子見するしかないですね。
終わり
もし内容に誤りがあった場合は遠慮なくコメント等でご指摘いただけると、補足修正しますのでありがたいです。また、もし参考になっていたらシェアしてくれたら嬉しいです!