# How it works

The core framework of Vemo in version 1 revolves around three key contracts: **VoucherFactory.sol**, **AccountRegistry.sol**, and **VoucherAccount.sol**. These manage all aspects of creating, splitting, and merging vouchers, creating token-bound accounts, claiming tokens according to vesting schemes, and more.&#x20;

Any Dapps, project owners, or token holders can act as the **Implementation Layer** to interact with these contracts. However, to illustrate the functionality of the Vemo protocol in a practical setting, we've created our own [IVO product](https://app.vemo.network/ivo). This IVO product makes use of both **VemoVestingPoolFactory.sol** and **VemoVestingPool.sol**, as described below:

<table><thead><tr><th width="268">File Name</th><th>Description</th></tr></thead><tbody><tr><td>VoucherFactory.sol</td><td>The code defines a smart contract, Voucher Factory, responsible for managing the distribution of both NFTs tokens and their token-bound accounts (in the form of ERC6551Account) to manage vesting positions. Additionally, it functions as a portal, allowing users to create NFT - ERC6551Account pairs in batches, specify vesting schedules, and request common information.</td></tr><tr><td>AccountRegistry.sol</td><td>The code defines the AccountRegistry contract, which functions as a factory for ERC6551Account. This contract allows for the creation and retrieval of token-bound accounts for NFTs using the CREATE2 opcode. This contract serves as a registry for token-bound accounts associated with NFTs, providing functionalities for their deterministic creation and retrieval.</td></tr><tr><td>VoucherAccount.sol</td><td>The code defines the VoucherAccount contract. This contract is designed to hold token assets on behalf of users, while simultaneously delegating ownership of those assets to the corresponding NFT owner. The NFT owner can claim the vesting tokens through either the Voucher contract or directly through the ERC6551Account contract itself.</td></tr><tr><td>VemoVestingPoolFactory.sol <br><em>(for reference only)</em></td><td>The code defines the VemoVestingPoolFactory contract. This contract functions as a factory for creating and managing VemoVestingPool contracts. It provides a standardized and efficient approach for deploying and interacting with token vesting schedules within decentralized applications.</td></tr><tr><td>VemoVestingPool.sol<br><em>(for reference only)</em></td><td>The code defines the VemoVestingPool contract. This contract is responsible for managing token vesting schedules and facilitating the purchase and distribution of tokens according to pre-defined rules. It incorporates functionalities such as whitelist verification, fee calculations, and offering flexible allocation options.</td></tr></tbody></table>

<figure><img src="/files/TpQOxioCZkOl5eEgYJGl" alt=""><figcaption><p>Vemo Protocol Architecture</p></figcaption></figure>

Moreover, Vemo is designed with scalability in mind. It can accommodate locked positions from diverse sources, such as staking as well as possess the flexibility to adapt to various business logics, with the potential for future expansion planned in version 2.


---

# 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/how-it-works.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.
