> ## Documentation Index
> Fetch the complete documentation index at: https://docs.blockdb.io/llms.txt
> Use this file to discover all available pages before exploring further.

# ERC-1155 Tokens

> ERC-1155 multi-token contract registry — URI, ERC-165 detection, gaming assets. Ethereum & EVM chains. REST API.

## Overview

* **Dataset ID:** `0203`
* **Table:** `blockdb_evm.b0203_erc1155_tokens_v1`
* **Description:** Catalog of ERC-1155 Multi Token contracts (EIP-1155); one contract can have many token types.
* **Stable id:** `contract_id` (per deployment incarnation; multiple snapshot rows possible—see callout)
* **API:** [POST /evm/entities/tokens/erc1155](/api-reference/evm/entities/tokens-erc1155)
* **CSV Sample:** [Download](https://huggingface.co/datasets/BlockDB/ERC1155-Tokens-Ethereum-And-EVM-Cryptocurrency-Data/resolve/main/data/blockdb_evm.b0203_erc1155_tokens_v1.csv?download=true)
* **JSON Sample:** [Download](https://huggingface.co/datasets/BlockDB/ERC1155-Tokens-Ethereum-And-EVM-Cryptocurrency-Data/resolve/main/data/blockdb_evm.b0203_erc1155_tokens_v1.json?download=true)

### How we recognize ERC-1155

We treat a contract as ERC-1155 when it complies with the [EIP-1155 Multi Token Standard](https://eips.ethereum.org/EIPS/eip-1155). Primary detection uses [ERC-165](https://eips.ethereum.org/EIPS/eip-165): we call `supportsInterface(0xd9b67a26)` and, if it returns true, we classify the address as an ERC-1155 multi-token contract. If that check is unavailable, we use a fallback heuristic: the contract returns a valid result for `balanceOf(address, uint256)` (the two-argument form required by EIP-1155) and does not implement `ownerOf(uint256)` or `decimals()`, so it is distinguished from ERC-721 and ERC-20. The optional **ERC1155Metadata\_URI** extension (`uri(uint256)`) is detected via ERC-165; we store `uri`, `supports_metadata_uri`, and any optional `name`/`symbol`/`decimals` when present.

<Callout icon="lightbulb" color="#3B82F6" iconType="regular">
  This table is **append-only**: the same `contract_id` can have **multiple rows** when an upgradeable proxy swaps implementation—we append refreshed view reads at **`upgradeBlock + 1`** with **`tx_index = -1`** (genesis rows use a normal tx index). For **current** metadata, take the **latest** `block_number` per `contract_id` (for point-in-time, add `block_number <= $target` first). Join on **`contract_id`**, not `contract_address` alone—redeploys at the same address get a new `contract_id`.
</Callout>

## Sample Viewer

<Frame>
  <iframe src="https://huggingface.co/datasets/BlockDB/ERC1155-Tokens-Ethereum-And-EVM-Cryptocurrency-Data/embed/viewer/default/train" frameborder="0" width="100%" height="600px" />
</Frame>

## Columns

| Column                  | Type          | Description                                                                                                  |
| ----------------------- | ------------- | ------------------------------------------------------------------------------------------------------------ |
| `contract_id`           | `BYTEA`       | Unique contract incarnation ID: 20B address + 4B creation block (BE) + 2B tx\_index (BE).                    |
| `contract_address`      | `BYTEA`       | Address of the ERC-1155 contract (20 bytes).                                                                 |
| `block_number`          | `BIGINT`      | Block of the log we attribute as the genesis/recognition point.                                              |
| `block_time`            | `TIMESTAMPTZ` | UTC timestamp of the block.                                                                                  |
| `tx_index`              | `INTEGER`     | Transaction index in the block, or **`-1`** for proxy-upgrade refresh rows (see callout).                    |
| `name`                  | `TEXT`        | Contract name from name() (optional in EIP-1155).                                                            |
| `symbol`                | `TEXT`        | Contract symbol from symbol() (optional in EIP-1155).                                                        |
| `decimals`              | `SMALLINT`    | Contract decimals from decimals() (optional in EIP-1155).                                                    |
| `uri`                   | `TEXT`        | URI from uri(uint256) (optional ERC1155Metadata\_URI); clients replace {id} with token ID in hex (64 chars). |
| `supports_metadata_uri` | `BOOLEAN`     | Whether the contract supports the ERC1155Metadata\_URI extension; NULL when detection was via fallback.      |
| `_tracing_id`           | `BYTEA`       | Tracing ID of this record.                                                                                   |
| `_parent_tracing_ids`   | `BYTEA[]`     | Tracing IDs of the parent records.                                                                           |
| `_created_at`           | `TIMESTAMPTZ` | Record creation timestamp.                                                                                   |
| `_updated_at`           | `TIMESTAMPTZ` | Record last update timestamp.                                                                                |

## Use Cases

* Multi-token and semi-fungible contract registry
* Game assets and metaverse item catalogs
* Metadata resolution via uri(uint256) with {id} substitution
* Portfolio and transfer analytics for ERC-1155 holdings

## Related Datasets

<CardGroup cols={3}>
  <Card title="Token Transfers" icon="coins" href="/data-catalog/evm/transfers/token-transfers">
    ERC-1155 transfer events for these tokens.
  </Card>

  <Card title="ERC-20 Tokens" icon="circle-dollar-to-slot" href="/data-catalog/evm/entities/erc20-tokens">
    Fungible token registry for cross-standard analysis.
  </Card>

  <Card title="ERC-721 Tokens" icon="image" href="/data-catalog/evm/entities/erc721-tokens">
    NFT token registry for cross-standard joins.
  </Card>
</CardGroup>
