# Voucher NFT Collection

### Overview

Each Voucher consists of two parts: an NFT (representing ownership) and an ERC6551Account (representing data). The Voucher NFT must belong to a Vemo Voucher NFT Collection, which is associated with a specific token address (locked asset) and must be pre-deployed before minting vouchers.

### Types of Voucher NFT Collections

1. Manual TokenURI Provision: TokenURI must be provided (selfhost tokenURI) but the collection's name and symbol can be customized according.
2. Auto-Generating TokenURI (Coming Soon): Vemo will offer an algorithm to automatically generate TokenURIs based on a provided template. The collection's name and symbol will be automatically generated based on Vemo's standard.

### How to create a collection

The VoucherFactory provides interfaces for creating VoucherCollection,

The deployment contract addresses of **VoucherCollection.sol** on different chains:

| Chain                  | Address                                    |
| ---------------------- | ------------------------------------------ |
| Avalanche Fuji Testnet | 0x65B903D7903d277bE600B8524a759aBEa3CC7e1A |
| Avalanche Mainnet      | 0xbB740E17f3c177172CaAcCef2F472DB41b9b1d19 |
| Bnb Mainnet            | 0x9869524fd160fe3adDA6218883B6526c0977D3a5 |

### &#x20; <a href="#sequence-diagram" id="sequence-diagram"></a>

1. Manual TokenURI Provision

* **createVoucherCollection**: Create a Collection that associated with a token address, name and symbol need to provide

{% code overflow="wrap" %}

```solidity

function createVoucherCollection(
        address token,
        string calldata name,
        string calldata symbol,
        IFactory.CollectionSettings calldata settings
    ) public nonReentrant returns (address) {}

struct CollectionSettings {
    uint96 royaltyRate;
    bool isSoulBound;
    FreeMintableType isFreeMintable;
    bool isSemiTransferable;
}

enum FreeMintableType {
    NON_FREE_MINTABLE,
    FREE_MINT_COMMUNITY,
    FREE_MINT_WHITELIST
}



```

{% endcode %}

2. Auto-Generating TokenURI (Coming Soon)

* **createAutoURIVoucherCollection**: Create a Collection that associated with a token address, all tokenURI of tokens will be automatically generated.

```solidity
function createAutoURIVoucherCollection(
        address token,
        address descriptor
    ) public nonReentrant returns (address) {}
```


---

# 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.vemo.network/vemo-protocol/smart-voucher/voucher-nft-collection.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.
