I do not understand something: ERC721 standard interface contains a name and a symbol.

ERC1155 is very similar to ERC721 and I do not understand why there are no symbol and name variables in ERC1155.

I know I can add it but is there a specific reason for this missing?

Thanks a lot.

3 Answers 3


The ERC1155 standard interface has a URI (Uniform Resource Identifier) that can point to a file where you can specify all the characteristics of the token (name, symbol, description, size, color or whatever you want).

On the other hand, ERC721 standard interface has only name & symbol, but there is also a metadata extension (ERC721Metadata) to use also a URI with additional data.

Having this metadata URI gives you a lot more flexibility to define all data you may need about the token, besides name and symbol from the original ERC721 specs.

Therefore, the difference is that ERC721 was originally defined to use only name and symbol as mandatory fields and URI extension as optional feature, whereas ERC1155 came with the URI by default.


From the Rationale section of the standard:

The symbol function (found in the ERC-20 and ERC-721 standards) was not included as we do not believe this is a globally useful piece of data to identify a generic virtual item / asset and are also prone to collisions. Short-hand symbols are used in tickers and currency trading, but they aren’t as useful outside of that space.


The name function (for human-readable asset names, on-chain) was removed from the standard to allow the Metadata JSON to be the definitive asset name and reduce duplication of data. This also allows localization for names, which would otherwise be prohibitively expensive if each language string was stored on-chain, not to mention bloating the standard interface. While this decision may add a small burden on implementers to host a JSON file containing metadata, we believe any serious implementation of ERC-1155 will already utilize JSON Metadata.


But sometimes you'd still prefer to have identifiable contract name on Etherscan, OpenSea etc.

So you can declare them as strings inside contract:

string public name = "StackExchange";
string public symbol = "STK";
  • it works. thank you
    – saike
    Commented Mar 27 at 15:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.