How can I differentiate between a fungible and non-fungible token in ERC1155.

contract GameItems is ERC1155 {
    uint256 public constant GOLD = 0;
    uint256 public constant SILVER = 1;
    uint256 public constant THORS_HAMMER = 2;
    uint256 public constant SWORD = 3;
    uint256 public constant SHIELD = 4;

    constructor() public ERC1155("https://game.example/api/item/{id}.json") {
        _mint(msg.sender, GOLD, 10**18, "");
        _mint(msg.sender, SILVER, 10**27, "");
        _mint(msg.sender, THORS_HAMMER, 1, "");
        _mint(msg.sender, SWORD, 10**9, "");
        _mint(msg.sender, SHIELD, 10**9, "");

Is quantity of tokens is the only way? What if I mint 10**18 amount of THORS_HAMMER, then how can I distinguish between other fungible tokens and this(THORS_HAMMER) non-fungible token?

  • hi @haris please follow up you have an answer here Jul 30, 2022 at 14:09

1 Answer 1


You cannot.

The ERC-1155 specification does not distinguish between fungible and non-fungible tokens.

That means even if you receive a token that is a one-of-one, there is no guarantee at the ERC-1155 level that there will not be a second one of that same token and token ID.

If there are any additional guarantees available, then those are made at the implementation level.

Or in plain language:

Bob: how do you use shoes to fly?

Mary: shoes don't fly

Bob: well what about these shoes?

Mary: yeah, well those are flying shoe

Bob: so how do I fly with them?

Mary: it looks like there's a fly button right there on the side

Bob: does it work?

Mary: I don't know, why don't you try it?


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.