はじめに

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

今回は、ERC1155の保有者を確認する仕組みを提案しているERC5409についてまとめていきます!

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

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

概要

ERC5409は、ERC1155に「ownerOf」という新しい関数を追加して、ERC1155トークンにも「非代替性」を持たせることを目的としています。 通常、非代替トークン(NFT)の代表的な規格はERC721ですが、ERC721は柔軟性が低いという課題があります。 ERC5409では、ERC1155の効率性や柔軟性を保ったまま、ERC721のように「このトークンは誰が所有しているのか?」を簡単に確認できるようにします。

動機

ERC1155&&では、あるトークンが「本当に1つしか存在しないユニークなもの(=非代替)」なのか、それとも複数人が持てる「代替可能なもの**」なのかを、外部からは判別できません。 トークンの発行数(supply)が「1」かどうかを確認する手段が標準では用意されておらず、仮に1であっても誰が所有しているのかを直接確認する方法がありません。

ERC1155の仕様内では、「トークンIDを工夫して非代替トークンを表現する」といった方法も紹介されていますが、標準的な手法ではなく、ERC721のownerOfのようにシンプルではありません。

今回の提案でownerOf関数を追加すれば、特定のトークンが「誰のものか」をコントラクトを通して確認できるようになります。 これにより、所有者がそのトークンにメタデータを紐づけたり、所有情報を活用するような新しいユースケースにも対応できるようになります。

仕様

ERC5409では、ERC1155に新しくownerOfという関数を導入します。 これは、トークンの所有者アドレスを取得するための関数です。

IERC1155OwnerOf.sol
interface IERC1155OwnerOf {
    /// @notice NFTの所有者を取得する
    /// @dev アドレスがゼロ(0x0)の場合は、存在しないか、供給数が1を超えている(=NFTではない)ことを意味します
    /// @param tokenId NFTのID
    /// @return 所有者アドレス
    function ownerOf(uint256 tokenId) external view returns (address);
}

また、supportsInterface関数において 0x6352211e を渡した場合、必ず true を返す必要があります。

補足

このownerOf関数は、対象のトークンが存在しない場合や、NFTでない場合(例えば供給数が1以上あるような代替可能トークンの場合)でも、エラーを投げずにゼロアドレス(0x0)を返します。

これにより、呼び出し側のコントラクトやアプリケーションが「このトークンは誰のものか?」という確認をする時に、例外処理を気にせず安全に扱えるようになります。

例えば、ERC721では所有者が存在しない場合にエラーが返されることがありますが、すべてのERC721実装が必ずそうなる保証はありません。 そのため、今回の仕様ではあえて例外を出さず、常にアドレスを返す形式としています。 この設計によって、ERC721に近い使い方をしつつも、安全で扱いやすい形を実現しています。

引用

Ronan Sandford (@wighawag), "ERC-5409: EIP-1155 Non-Fungible Token extension [DRAFT]," Ethereum Improvement Proposals, no. 5409, July 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5409.

最後に

今回は「ERC1155の保有者を確認する仕組みを提案しているERC5409」についてまとめてきました! いかがだったでしょうか?

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

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