DCIPs/EIPS/eip-5615.md

59 lines
2.6 KiB
Markdown

---
eip: 5615
title: ERC-1155 Supply Extension
description: A simple mechanism to fetch token supply data from ERC-1155 tokens
author: Gavin John (@Pandapip1)
discussions-to: https://ethereum-magicians.org/t/eip-5615-eip-1155-supply-extension/10732
status: Review
type: Standards Track
category: ERC
created: 2022-09-07
requires: 1155
---
## Abstract
This ERC standardizes an existing mechanism to fetch token supply data from [ERC-1155](./eip-1155.md) tokens. It adds a `totalSupply` function, which fetches the number of tokens with a given `id`, and an `exists` function, which checks for the existence of a given `id`.
## Specification
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.
```solidity
interface ERC1155Supply is ERC1155 {
// @notice This function MUST return whether the given token id exists, previously existed, or may exist
// @param id The token id of which to check the existence
// @return Whether the given token id exists, previously existed, or may exist
function exists(uint256 id) external view returns (bool);
// @notice This function MUST return the number of tokens with a given id. If the token id does not exist, it MUST return 0.
// @param id The token id of which fetch the total supply
// @return The total supply of the given token id
function totalSupply(uint256 id) external view returns (uint256);
}
```
Implementations MAY support [ERC-165](./eip-165.md) interface discovery, but consumers MUST NOT rely on it.
## Rationale
This ERC does not implement [ERC-165](./eip-165.md), as this interface is simple enough that the extra complexity is unnecessary and would cause incompatibilities with pre-existing implementations.
The `totalSupply` and `exists` functions were modeled after [ERC-721](./eip-721.md) and [ERC-20](./eip-20.md).
`totalSupply` does not revert if the token ID does not exist, since contracts that care about that case should use `exists` instead (which might return false even if `totalSupply` is zero).
`exists` is included to differentiate between the two ways that `totalSupply` could equal zero (either no tokens with the given ID have been minted yet, or no tokens with the given ID will ever be minted).
## Backwards Compatibility
This ERC is designed to be backward compatible with the OpenZeppelin `ERC1155Supply`.
## Security Considerations
None.
## Copyright
Copyright and related rights waived via [CC0](../LICENSE.md).