> For the complete documentation index, see [llms.txt](https://the-artist-xchange.gitbook.io/the-artist-xchange/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://the-artist-xchange.gitbook.io/the-artist-xchange/docs/ierc1155.md).

# IERC1155

> ERC-1155 Multi Token Standard

*See <https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1155.md> Note: The ERC-165 identifier for this interface is 0xd9b67a26.*

## Methods

### balanceOf

```solidity
function balanceOf(address _owner, uint256 _id) external view returns (uint256)
```

Get the balance of an account's Tokens.

#### Parameters

| Name    | Type    | Description                     |
| ------- | ------- | ------------------------------- |
| \_owner | address | The address of the token holder |
| \_id    | uint256 | ID of the Token                 |

#### Returns

| Name | Type    | Description                                       |
| ---- | ------- | ------------------------------------------------- |
| \_0  | uint256 | The \_owner's balance of the Token type requested |

### balanceOfBatch

```solidity
function balanceOfBatch(address[] _owners, uint256[] _ids) external view returns (uint256[])
```

Get the balance of multiple account/token pairs

#### Parameters

| Name     | Type       | Description                        |
| -------- | ---------- | ---------------------------------- |
| \_owners | address\[] | The addresses of the token holders |
| \_ids    | uint256\[] | ID of the Tokens                   |

#### Returns

| Name | Type       | Description                                                                                 |
| ---- | ---------- | ------------------------------------------------------------------------------------------- |
| \_0  | uint256\[] | The \_owner's balance of the Token types requested (i.e. balance for each (owner, id) pair) |

### isApprovedForAll

```solidity
function isApprovedForAll(address _owner, address _operator) external view returns (bool)
```

Queries the approval status of an operator for a given owner.

#### Parameters

| Name       | Type    | Description                    |
| ---------- | ------- | ------------------------------ |
| \_owner    | address | The owner of the Tokens        |
| \_operator | address | Address of authorized operator |

#### Returns

| Name | Type | Description                                    |
| ---- | ---- | ---------------------------------------------- |
| \_0  | bool | True if the operator is approved, false if not |

### safeBatchTransferFrom

```solidity
function safeBatchTransferFrom(address _from, address _to, uint256[] _ids, uint256[] _values, bytes _data) external nonpayable
```

Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call).

*Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard). MUST revert if `_to` is the zero address. MUST revert if length of `_ids` is not the same as length of `_values`. MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient. MUST revert on any other error. MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard). Balance changes and events MUST follow the ordering of the arrays (\_ids\[0]/\_values\[0] before \_ids\[1]/\_values\[1], etc). After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).*

#### Parameters

| Name     | Type       | Description                                                                                                             |
| -------- | ---------- | ----------------------------------------------------------------------------------------------------------------------- |
| \_from   | address    | Source address                                                                                                          |
| \_to     | address    | Target address                                                                                                          |
| \_ids    | uint256\[] | IDs of each token type (order and length must match \_values array)                                                     |
| \_values | uint256\[] | Transfer amounts per token type (order and length must match \_ids array)                                               |
| \_data   | bytes      | Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to` |

### safeTransferFrom

```solidity
function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes _data) external nonpayable
```

Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).

*Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard). MUST revert if `_to` is the zero address. MUST revert if balance of holder for token `_id` is lower than the `_value` sent. MUST revert on any other error. MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard). After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).*

#### Parameters

| Name    | Type    | Description                                                                                              |
| ------- | ------- | -------------------------------------------------------------------------------------------------------- |
| \_from  | address | Source address                                                                                           |
| \_to    | address | Target address                                                                                           |
| \_id    | uint256 | ID of the token type                                                                                     |
| \_value | uint256 | Transfer amount                                                                                          |
| \_data  | bytes   | Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to` |

### setApprovalForAll

```solidity
function setApprovalForAll(address _operator, bool _approved) external nonpayable
```

Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.

*MUST emit the ApprovalForAll event on success.*

#### Parameters

| Name       | Type    | Description                                                |
| ---------- | ------- | ---------------------------------------------------------- |
| \_operator | address | Address to add to the set of authorized operators          |
| \_approved | bool    | True if the operator is approved, false to revoke approval |

## Events

### ApprovalForAll

```solidity
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)
```

*MUST emit when approval for a second party/operator address to manage all tokens for an owner address is enabled or disabled (absense of an event assumes disabled).*

#### Parameters

| Name                 | Type    | Description |
| -------------------- | ------- | ----------- |
| \_owner `indexed`    | address | undefined   |
| \_operator `indexed` | address | undefined   |
| \_approved           | bool    | undefined   |

### TransferBatch

```solidity
event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _values)
```

*Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard). The `_operator` argument MUST be msg.sender. The `_from` argument MUST be the address of the holder whose balance is decreased. The `_to` argument MUST be the address of the recipient whose balance is increased. The `_ids` argument MUST be the list of tokens being transferred. The `_values` argument MUST be the list of number of tokens (matching the list and order of tokens specified in \_ids) the holder balance is decreased by and match what the recipient balance is increased by. When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address). When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address).*

#### Parameters

| Name                 | Type       | Description |
| -------------------- | ---------- | ----------- |
| \_operator `indexed` | address    | undefined   |
| \_from `indexed`     | address    | undefined   |
| \_to `indexed`       | address    | undefined   |
| \_ids                | uint256\[] | undefined   |
| \_values             | uint256\[] | undefined   |

### TransferSingle

```solidity
event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value)
```

*Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard). The `_operator` argument MUST be msg.sender. The `_from` argument MUST be the address of the holder whose balance is decreased. The `_to` argument MUST be the address of the recipient whose balance is increased. The `_id` argument MUST be the token type being transferred. The `_value` argument MUST be the number of tokens the holder balance is decreased by and match what the recipient balance is increased by. When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address). When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address).*

#### Parameters

| Name                 | Type    | Description |
| -------------------- | ------- | ----------- |
| \_operator `indexed` | address | undefined   |
| \_from `indexed`     | address | undefined   |
| \_to `indexed`       | address | undefined   |
| \_id                 | uint256 | undefined   |
| \_value              | uint256 | undefined   |

### URI

```solidity
event URI(string _value, uint256 indexed _id)
```

*MUST emit when the URI is updated for a token ID. URIs are defined in RFC 3986. The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata URI JSON Schema".*

#### Parameters

| Name           | Type    | Description |
| -------------- | ------- | ----------- |
| \_value        | string  | undefined   |
| \_id `indexed` | uint256 | undefined   |
