🔮

NFT発行プロトコル「Zora」の技術的な概要

2024/04/12に公開

コンシューマー向けweb3企画を送り出すプロダクトスタジオ「Senspace」でCTOをしているりょーまです。今回はNFT発行プロトコルであるZoraについてソースコードレベルで深ぼったので個人的にピックアップしたいポイントをシェアします。

Zoraはクリエイター向けにNFTの発行、販売、ギャラリーの場所を提供していたり、NFT特化のL2チェーンを運営していたりします。作品に関わった人たちの売上シェア(Protocol Rewards)やインスタグラムのような馴染みのあるインターフェースでNFTを扱えることが特徴です。
分散型SNS FarcasterでシェアされるNFTがほとんどZoraが使われることから今後さらに注目されていくと期待しています。

本記事のスコープ
Zoraといっても、大きく分けてZora ContractsとZora Networkの2つがあり、NFTのトランザクションデータやメタデータを扱いやすくしたZora API (Graphql)なども提供されています。
この中でも本記事ではZora Contractsに絞って紹介したいとおもいます。

Zora Contractsの概略

Zora ContractsはZoraが開発しているクリエイターに優しいNFT(ERC721、ERC1155)の発行エコシステムで、現在Zora Chainはもちろんのこと、Ethereum、Base、Optimismにもデプロイされています。Zora ContractsにはERC1155とERC721(この中にもDropsとEdition)の3種類があり、それぞれ異なる仕様になっています。また、それぞれのNFTはFactory Contractから作成します。

名前 概要
ERC1155 同じコレクションのなかにシリーズ作品を入れることができ、それぞれの作品を複数Mintすることができます。シルクスクリーンのようなイメージ。
ERC721(Drops) 同じコレクションのなかに、それぞれの作品が個別に存在しておりメタデータも異なります。1点物のアート作品のようなイメージ。
ERC721(Edition) 同じコレクションのなかに、それぞれの作品が個別に存在しているもののメタデータは同じ。版画作品のようなイメージ。

本記事ではERC1155を対象にしますが、3種類それぞれ似ている部分も多いです。いろいろ探ってみてください。

Protocol Rewards

ZoraではNFTをミントするためにフリーミントでも1ミントごとに0.000777ETH必要です。ミントされるたびに0.000777ETHはクリエイターやリファラル、ファーストミンター、Zora運営などに分配されます。この分配金がProtocol Rewardsと呼ばれ、Zoraのエコシステムでは重要な役割を担っています。

Protocol Rewardsの概略

Free Mint

主体 分け前 説明
Creator 0.000333 ETH 作品の投稿者
Create Referral 0.000111 ETH 開発者やサービスプロバイダなどNFT作成方法の提供者
Mint Referral 0.000111 ETH Mintサイトの運営者など
First Minter 0.000111 ETH 作品を最初にMintした人
Zora 0.000111 ETH Zora運営

Paid mint

主体 分け前 説明
Create Referral 0.000222 ETH 開発者やサービスプロバイダなどNFT作成方法の提供者
Mint Referral 0.000222 ETH Mintサイトの運営者など
First Minter 0.000111 ETH 作品を最初にMintした人
Zora 0.000222 ETH Zora運営

Protocol Rewardsは以上の分配比率でわけられますが、ZoraのインターフェースからNFTを作成すると基本的にはCreate ReferralとMint ReferralはZoraのAddressに送られます。独自でリリースする際は0.000222ETHを無駄にしないようにFactoryコントラクトからデプロイし、Create ReferralとMint Referralには自分のアドレスをいれるようにしておくのがよいです。

開発用のNFTコントラクトのデプロイ

Zora Contractsと組み合わせたサービスをつくるときにはNFTコントラクトをローカルやテストネットにデプロイしていろいろできたほうがいいですが、こちらは公式ドキュメントもなくわかりにくかったです。

ローカル開発に必要なスマコンは7種類で、ProtocolRewardsDelegatedTokenCreationZoraCreator1155ImplZoraCreatorMerkleMinterStrategyZoraCreatorFixedPriceSaleStrategyZoraCreatorRedeemMinterFactoryZoraCreator1155FactoryImplEnjoy です。ZoraのGithubにあるのでcloneしてくるとOKです。
メインネットやテストネットでデプロイされているコントラクトはUpgradeableなので厳密には違いますが、以上のコントラクトをデプロイするとローカル開発ができます。

特徴的な実装

Zora Contractsは規模の大きいプロジェクトで現在も新しい機能が追加され続けています。すべてを紹介するのは無理なので、2つほど特徴的な実装をピックアップしたいと思います。

Minter

ZoraはFree Mintのほかに、Allowlist、Fixed Price、Redeemなどいくつかのミント方法を使うことができます。

Mint方法 概要
Free 0.000777ETHを支払えば期間だれでもMint可能
Allowlist NFT作成者がつくったアドレスリストに入っている、限られた人だけがMint可能
Fixed Price 有料販売
Redeem 特定のトークンと引き換えに受け取ることができる(200FT => 1NFT のように)

それぞれのMint方法に紐づくMinterコントラクトがあり、NFTはMinterコントラクトを経由してMintされます。MinterとNFTそのもののコントラクトを分けることで、今後あたらしいMint方法が出てきても対応できるようにしているのはとても良い設計だと思います。

Split & Protocol Rewards

前半に書いたとおり、Zora ContractsではNFTをMintする際に0.000777ETH必要で、それらはいくつかのアドレスに分配されます。その分配ロジックを保持しているのがSplitです。また、ETHの分配は即時行われるのではなく、ProtocolRewardsのコントラクトにいったん集められます。

MintするときにProtocolRewardsにすべてのETHが送られると同時に、その分配比率の情報が書き込まれます。ProtocolRewardsのコントラクトにはWithdraw関数が実装されているので、収益を引き出すときはこの関数にリクエストを投げます。

Enjoy

これは余談ですが、Enjoyという何も書かれていないInterfaceがどのコントラクトでも継承されています。遊びで継承されているのか、今後なんらかの機能が実装されるのかはよくわかりません。


つい先日ZoraでMintする際に$Enjoyのチップができるようになり。ZoraはFarcasterと同じぐらい目まぐるしく変化しています。この二つを組み合わせることでさまざまな作品の送り出し方ができるようになると思うのでぜひ使ってみてください。これからも面白いアップデートがでてきたら記事化、日本語化していきます!

もしよければ、X、Farcasterのフォローお願いします!
https://twitter.com/k_0214
https://warpcast.com/yuki0214

Discussion