はじめに

『DApps開発入門』という本や色々記事を書いているかるでねです。

今回は、コントラクトデプロイ時にNFTを発行するときに、必ずイベントを含むようにする提案しているERC6047についてまとめていきます!

以下にまとめられているものを翻訳・要約・補足しながらまとめていきます。

他にも様々なEIPについてまとめています。

概要

ERC6047は、ERC721の仕様を拡張してNFTの追跡やインデックス作成をしやすくするために、コントラクト作成時にもTransferイベントを発行することを義務付ける提案です。

ERC721では、NFTの送付やMint(0x0からの送付)、Burn(0x0への送付)が起きた時にTransferイベントを発行するよう定められています。 しかし、コントラクト作成時にミントが行われた場合は、このイベントを発行する必要がありません。 このEIPでは、コントラクト作成時にもTransferイベントを発行することを義務付けています。

動機

現在のERC721の仕様では、NFTが新しくMintされた場合はTransferイベントを発行するルールになっていますが、コントラクト作成時にMintされたNFTは例外となっておりイベントが発行されません。

一方で、ERC1155ではMint時のイベント発行が必須となっており、コントラクト作成時でも必ずイベントが発行される仕様になっています。 このため、インデックスサービスやオフチェーンサービスは、ERC1155のNFTについては確実に追跡できるのですが、ERC721ではコントラクト作成時にMintされたNFTを正しく追跡できないという問題が発生します。

これにより、以下のメリットがあります。

  • NFTのMint・送付・Burnを一貫して記録できる
  • インデックスサービスが全てのERC721トークンを確実に取得できる
  • オフチェーンアプリケーションのデータ整合性が向上する

仕様

ERC6047に準拠するコントラクトは、以下の条件を満たす必要があります。

  • ERC721を実装すること
  • NFTの送付・Mint(0x0からの送付)・Burn(0x0への送付)が起きた時に、必ずTransferイベントを発行すること
  • コントラクト作成時のMintについても、必ずTransferイベントを発行すること

補足

ERC6047では、新しく「Creation」イベントなどを作らず、既存のTransferイベントを使うことで、既存のインデックスサービスとの互換性を維持できるようにしています。

もし新しいイベントを作ってしまうと、現在のインデックスサービスやオフチェーンアプリが対応するために追加の開発が必要になります。 しかし、Transferイベントの仕様を拡張するだけなら、既存の仕組みをそのまま使えるため、変更の影響を最小限に抑えることができます。

互換性

ERC6047に準拠する全てのコントラクトはERC721にも準拠します。 ただし、ERC721に準拠する全てのコントラクトがERC6047に準拠するわけではありません。

引用

Zainan Victor Zhou (@xinbenlv), "ERC-6047: ERC-721 Balance indexing via Transfer event [DRAFT]," Ethereum Improvement Proposals, no. 6047, November 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-6047.

最後に

今回は「コントラクトデプロイ時にNFTを発行するときに、必ずイベントを含むようにする提案しているERC6047」についてまとめてきました! いかがだったでしょうか?

質問などがある方は以下のTwitterのDMなどからお気軽に質問してください!

他の媒体でも情報発信しているのでぜひ他も見ていってください!