# Non-Fungible Tokens (NFTs)

NFTs are unique digital assets, and similar to the ERC-721 standard on Ethereum, the CosmWasm ecosystem uses the CW721 standard. XION supports this NFT standard, with several ready-to-use contracts available in the [**cw-nfts**](https://github.com/public-awesome/cw-nfts) repository. These contracts enable teams to deploy NFT collections with minimal customization while benefiting from enhanced security and reliability.

{% hint style="success" %}
Reusing these contracts **without modification** may reduce or eliminate the need for a security audit before deploying to XION Mainnet.
{% endhint %}

## Available CW721 Contract Variants

| Contract                   | Transferable | On-Chain Metadata      | Updatable Metadata   | Use Case Examples                                     |
| -------------------------- | ------------ | ---------------------- | -------------------- | ----------------------------------------------------- |
| **cw721-base**             | Yes          | No                     | No                   | Basic NFT collections with off-chain metadata         |
| **cw721-updatable**        | Yes          | No                     | Yes                  | Dynamic NFTs (e.g., avatars that evolve, gaming NFTs) |
| **cw721-metadata-onchain** | Yes          | Yes                    | No                   | Fully on-chain generative art, digital collectibles   |
| **cw721-soulbound**        | No           | No                     | No                   | Identity badges, certificates, proof-of-participation |
| **cw721-expiration**       | Yes          | No                     | Yes (via expiration) | Subscription NFTs, time-limited memberships           |
| **cw721-fixed-price**      | Yes          | No (usually off-chain) | Yes (price config)   | Simple marketplaces with fixed price sales            |
| **cw721-non-transferable** | No           | No                     | No                   | Achievements, diplomas, SBTs (Soulbound Tokens)       |
| **cw721-receiver-tester**  | Yes          | No                     | No                   | Utility contract used for testing receive hooks       |
| **cw2981-royalties**       | Yes          | Yes                    | No                   | Royalty-enabled NFTs for artists and creators         |

#### 1. **cw721-base**

The standard implementation of the CW721 specification.\
**Features:**

* Minting, transferring, burning
* Token-level ownership and metadata
* Approved operators

**Ideal for:**\
Basic NFT collections with off-chain metadata

📦 **Repo:** [`cw721-base`](https://github.com/public-awesome/cw-nfts/tree/main/contracts/cw721-base)

#### 2. **cw721-updatable**

An extension of `cw721-base` that allows metadata to be updated after minting.\
**Features:**

* All `cw721-base` features
* Supports updating token metadata

**Ideal for:**\
Dynamic NFTs such as evolving avatars, game characters, or NFTs that change over time

📦 **Repo:** [`cw721-updatable`](https://crates.io/crates/cw721-updatable)

#### 3. **cw721-metadata-onchain**

A variant of `cw721-base` where full metadata is stored directly on-chain.\
**Features:**

* All `cw721-base` features
* Stores metadata (name, description, image) directly in state

**Ideal for:**\
NFTs where immutability and decentralization of metadata are critical (e.g., generative art, collectibles)

📦 **Repo:** [`cw721-metadata-onchain`](https://github.com/public-awesome/cw-nfts/tree/main/contracts/cw721-metadata-onchain)

#### 4. **cw721-soulbound**

Implements non-transferable NFTs, often referred to as Soulbound Tokens (SBTs).\
**Features:**

* Minting only
* Disables transfer and approval functionality

**Ideal for:**\
Credentials, identity, certifications, badges, or non-transferable memberships

📦 **Repo:** [`cw721-soulbound`](https://crates.io/crates/cw721-soulbound)

#### 5. **cw721-expiration**

Extends `cw721-base` with support for setting expiration times on NFTs.\
**Features:**

* All `cw721-base` features
* Optional expiration timestamp per token
* Hooks for expiration-based behavior

**Ideal for:**\
Time-based NFTs such as subscriptions, memberships, or event passes

📦 **Repo:** [`cw721-expiration`](https://github.com/public-awesome/cw-nfts/tree/main/contracts/cw721-expiration)

#### 6. **cw721-fixed-price**

A contract combining NFT minting with a built-in fixed-price marketplace.\
**Features:**

* Minting and transferring
* Price configuration per token
* Direct buy functionality

**Ideal for:**\
Launching NFT collections with fixed-price sales without needing a separate marketplace contract

📦 **Repo:** [`cw721-fixed-price`](https://github.com/public-awesome/cw-nfts/tree/main/contracts/cw721-fixed-price)

#### 7. **cw721-non-transferable**

A stricter soulbound implementation with enforced immutability.\
**Features:**

* No transferring or burning
* Tokens are permanent and non-movable once minted

**Ideal for:**\
Highly permanent identity artifacts such as diplomas, licenses, or irreversible credentials

📦 **Repo:** [`cw721-non-transferable`](https://github.com/public-awesome/cw-nfts/tree/main/contracts/cw721-non-transferable)

#### 8. **cw721-receiver-tester**

A testing utility contract for verifying the `cw721` `Receive` hook functionality.\
**Features:**

* Implements `cw721::Receiver` interface
* Logs or validates token reception

**Ideal for:**\
Testing and verifying behavior of contracts that send or receive NFTs

📦 **Repo:** [`cw721-receiver-tester`](https://github.com/public-awesome/cw-nfts/tree/main/contracts/cw721-receiver-tester)

#### 9. **cw2981-royalties**

Implements the CW2981 royalty standard for NFT creators.\
**Features:**

* Attaches royalty info to CW721 tokens
* Royalty enforcement during sales (via marketplaces)

**Ideal for:**\
NFT collections where artists or creators want automatic royalty support\
📦 Repo: [`cw2981-royalties`](https://github.com/public-awesome/cw-nfts/tree/main/contracts/cw2981-royalties)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.burnt.com/xion/developers/computation/re-using-existing-contracts/non-fungible-tokens-nfts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
