> For the complete documentation index, see [llms.txt](https://docs.vemo.network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.vemo.network/vemo-protocol/smart-voucher/voucher-nft-collection.md).

# 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) {}
```
