NFT発行プロトコル「Zora」の技術的な概要
コンシューマー向け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種類で、ProtocolRewards
、DelegatedTokenCreation
、ZoraCreator1155Impl
、ZoraCreatorMerkleMinterStrategy
、ZoraCreatorFixedPriceSaleStrategy
、ZoraCreatorRedeemMinterFactory
、ZoraCreator1155FactoryImpl
、Enjoy
です。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のフォローお願いします!
Discussion