59 lines
2.6 KiB
Markdown
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).
|