ERC-7632 - Interfaces for Named Token

Created 2024-02-08
Status Draft
Category ERC
Type Standards Track
Authors
Requires

Abstract

Extends tokens using uint256 tokenId to support tokenName of type string and to convert back to tokenId.

Motivation

For Marketplaces, Explorers, Wallets, DeFi and dApps to better display and operate NFTs that come with a name.

Specification

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174.

  1. Compliant contracts MUST support tokenName and a mapping between tokenName and tokenId in one of the following ways:
  2. 1a all compliant contracts are RECOMMENDED to implement the following interfaces: IERC_NamedTokenCore,
interface IERC_NamedTokenCore {
  function idToName(uint256 _tokenId) external view returns (string);
  function nameToId(string memory _tokenName) external returns (uint256);
}

and it should satisfy the behavior rules that: - 1a.1. when a new name is introduced, it is RECOMMENDED to emit an event newName(uint256 indexed tokenId, string tokenName). - 1a.2. tokenId and tokenName MUST be two-way single mapping, meaning if tokenId exists, tokenName MUST exist and vice versa and tokenId = nameToId(idToName(tokenId)) and tokenName = idToName(nameToId(tokenName)) MUST hold true.

interface IERC_NamedTokenExtension {
  function isValidTokenName(string memory _tokenName) external view returns (string);
  function normalizeTokenName(string memory _tokenName) external view returns (string memory);
}

Rationale

  1. We allow a default way to map tokenId and tokenName for convenience, but we also allow contracts to implement their own ways of mapping tokenId and tokenName for flexibility.

  2. We consider providing an interface for

Backwards Compatibility

This proposal is fully backwards compatible with token contracts using uint256 tokenId as the unique identifier.

Security Considerations

This proposal assumes that both tokenName and tokenId are unique amongst all tokens.

If token names are not normalized, two distinct token names may confuse users as they look alike. Contract developers shall declare a normalization mechanism if non-unique tokenName is allowed using IERC_NamedTokenExtension.

Copyright

Copyright and related rights waived via CC0.