# Welcome to VORJ

vorj.app, for the builders, innovators and artists

## What is VORJ?

VORJ is a no code Web3 as a service platform based on the VeChainThor blockchain. VORJ removes the technical barriers to creating digital property. VORJ simplifies the smart contract creation process through a beautifully designed, simple to use and user friendly interface.

{% hint style="warning" %}
VORJ is not intended and has not been optimized for mobile device usage.
{% endhint %}

## How to access VORJ?

Use the URL [vorj.app](https://vorj.app) to access the VORJ frontend and access the API at <https://api.vorj.app/main/v2/docs>. VORJ is built to be intuitive for the user, feel free to explore VORJ but if you want a user guide refer to [this section](/guides) of the documents.

## VORJ origins?

The word VORJ is derived from the American phonetic spelling of forge; to make or shape an object by heating it in a fire and hammering it.

Support is available at <support@vorj.app>

{% hint style="warning" %}

#### Warning: VORJ is currently beta

* This API is not meant for production use, currently beta.
* You, the user, accept all responsibility for the use of the VORJ API.
* Through the use of the API you are agreeing to the [terms of service](/the-legal-bits) and [privacy policy](/the-legal-bits) of VORJ.
* The VeChain Foundation San Marino nor any other entity associated with VeChain nor VORJ accept any responsibility associated with the use of VORJ.
* All smart contracts created and deployed through VORJ are done so through the VORJ deployment wallet and thus these smart contracts are owned and controlled by VORJ, unless they are transferred by the user to another wallet.
* The digital assets, either fungible or non-fungible, that are created as part of the smart contracts are minted into your own self-custody wallet, through the provided API endpoints, and thus the digital assets are owned and controlled by the private key holder of that wallet.
  {% endhint %}

## Offerings

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td></td><td>VORJ Smart Contracts</td><td></td><td><a href="/pages/gNZh8qu05GYWWt6VmxDu">/pages/gNZh8qu05GYWWt6VmxDu</a></td></tr><tr><td></td><td>Indexer</td><td></td><td><a href="/pages/d0UZYo7HhSf13d6XjLqj">/pages/d0UZYo7HhSf13d6XjLqj</a></td></tr><tr><td></td><td>Transaction Executor</td><td></td><td><a href="/pages/a0Y0W3oS5Sf4awSGqdIq">/pages/a0Y0W3oS5Sf4awSGqdIq</a></td></tr><tr><td></td><td>Contract Deployer</td><td></td><td><a href="/pages/juRRqTBXBgNyU8ps4NNm">/pages/juRRqTBXBgNyU8ps4NNm</a></td></tr></tbody></table>


# VORJ Smart Contracts

Secure and battle tested smart contracts from OpenZeppelin on VeChain, through VORJ.

VORJ offers a range of fungible and non-fungible (NFT) smart contract templates. VORJ implements and offers the secure and battle tested [OpenZeppelin smart contracts](https://github.com/OpenZeppelin/openzeppelin-contracts).

The beta release of the VORJ frontend currently only offers the fungible ERC-20 and the non-fungible ERC-721 smart contracts standards through a user friendly interface. More smart contract standards will be added to the frontend over time. However, from the backend application programmable interface (API) a user has access to a wider selection of smart contract standards, ERC-20, ERC-721, UUPS, ERC-1155 and ERC-4626.

## Fungible Tokens

A fungible token is a form of digital asset that can be easily interchanged with other tokens of the same type because each token has the same value and properties. In other words, every token is identical to every other token, and they can be exchanged or traded without any difference in value or functionality.

For example, if you have two $1 dollar bills, they have the same value and can be used interchangeably. Similarly, if you have two fungible tokens, such as ERC-20 tokens they have the same value and can be used interchangeably.

Fungible tokens are often used as a form of currency or as a way to represent other digital property such as stocks, bonds or commodities on a blockchain. They are also commonly used a a means of exchange in decentralized applications and smart contracts, where they can represent anything from voting rights to loyalty points.

Supported Fungible Token Standards: [ERC-20](https://docs.openzeppelin.com/contracts/4.x/api/token/erc20)

{% hint style="info" %}
As of Friday 5th May 2023 VORJ implements the [ERC20Capped](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Capped.sol) contract instead of the [ERC20 base](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) contract.
{% endhint %}

## Non-Fungible Tokens (NFTs)

A non-fungible token (NFT) is a unique digital asset that is not interchangeable with any other asset because it has unique characteristics and properties that make it different from all other assets. The most common NFT standard in use within the blockchain ecosystem is the ERC-721 standard.

Unlike fungible tokens, which have identical values and can be traded interchangeably, NFTs are unique and often represent one of a kind items such as digital art, collectibles, music, videos and other forms of media. Each NFT has a unique identifier, `tokenID`, that distinguishes it from all other tokens and represents its unique value and properties.

For example, image you have a digital painting. While you could create multiple copies of the file, each copy would be identical and thus not unique. However, if you create an NFT of the digital painting, it becomes a unique asset that is represented by a specific token on a blockchain. This token can be bought, sold or traded just like a physical painting.

Supported Non-Fungible Token Standards: [ERC-721](https://docs.openzeppelin.com/contracts/4.x/api/token/erc721) and [UUPS](https://docs.openzeppelin.com/contracts/4.x/api/proxy#UUPSUpgradeable).

## Semi-Fungible Tokens (SFTs)

A semi-fungible token is a type of digital asset that has some fungibility, but also contains unique properties that differentiate it from other tokens of the same type. The most common SFT standard in use within the blockchain ecosystem is the ERC-1155 standard.

Like fungible tokens, SFTs can be exchanged on a one to one basis because they have identical values, but they may also contain unique attributes that affect their value.

For example, imagine a game token that represents a specific character in a game. While multiple copies of the token may exist, each token may have unique attributes such as different power levels or abilities, making them non-interchangeable with other tokens of the same type.

SFTs are often used in gaming, collectibles, and other applications where a balance between fungibility and uniqueness is required.

Supported Semi-Fungible Token Standards: [ERC-1155](https://docs.openzeppelin.com/contracts/4.x/api/token/erc1155).

## Tokenized Vault Standard

The tokenized vault standard is a type of smart contract that enables the creation of secure and flexible single-asset vaults, of ERC-20 tokens, and gives shares to the user that deposits assets. A leading tokenized vault standard is the ERC-4626 standard. The ERC-4626 standard is built on top of the ERC-20 standard.

Tokenized vaults are the foundation for lending markets, aggregators and yield bearing tokens in decentralized finance (DeFi). The tokenized vault standard defines a way to deposit an asset and in return get share tokens representing the amount you deposit. While these assets are deposited you can earn more underlying tokens due to yield strategies that accrue interest on the pool of assets staked. The shares can then be redeemed for your original asset and any yield earned.

Supported Tokenized Vault Standard: [ERC-4626](https://docs.openzeppelin.com/contracts/4.x/api/interfaces#IERC4626).

## Decentralized Autonomous Organization (DAO) Contracts

A DAO is a collectively owned, blockchain-governed organization working towards a shared mission. DAOs allow communities of members to work together without having to trust a leader to manage the funds or operations. Instead of a leader there are blockchain based rules that define how the organization works and everything happens transparently on-chain.

The core aspect of a DAO is the smart contract, which defines the rules of the organization and holds the organizations treasury. Once the smart contract is deployed on the blockchain it cannot be changed expect through a vote. The group makes decisions collectively, and payments are automatically authorized when votes pass.

Supported DAO Contracts: [Governor](https://docs.openzeppelin.com/contracts/4.x/api/governance)

{% hint style="info" %}
Have a suggestion for a smart contract standard that we should implement as part of VORJ? Contract us at <support@vorj.app>.
{% endhint %}

## Smart Contract ABIs

{% hint style="warning" %}
As we update and improve VORJ the ABIs are subject to change as such the document below may become outdated.\
\
For realtime access to the VORJ ABIs you can use the endpoint GET`/main/v2/blockchain/contracts/abi/endpoint.`
{% endhint %}

The file below provides all of the VORJ ABIs as of the 28th November 2023.

{% file src="/files/VRqtdCPafkOcKaXeQXc8" %}


# Indexer

API endpoints to give you all the information you need to get building.

The VORJ application programmable interface (API) offers various endpoints providing up to date and easily consumable VeChainThor information. View the available endpoints [here](https://api.vorj.app/main/v2/docs).

{% hint style="warning" %}
Some contracts may not be decoded and hence not included. If you have a contract that has not been decoded contact us at <support@vorj.app>.

(More ABI's please ... nom, nom, nom)
{% endhint %}

{% hint style="info" %}
If you don't see an endpoint that you would like or have come across an issue please contact us at <support@vorj.app>.
{% endhint %}

## Blockchain API

Get the latest or historical block(s), transaction(s) or contract(s) information in an easy to consume response.

Want the parsed contents of the last 10 blocks, `/main/v2/blockchain/blocks`. Just the transactions in a given block, `/main/v2/blockchain/blocks/{blockNumber}/transactions`, or just the NFT transfers `/main/v2/blockchain/blocks/{blockNumber}/nft/transfers`.

There are plenty of API endpoints to provide you with the latest or historical blockchain information.

## NFT API

Get the latest, historical or aggregated data for a non-fungible token (NFT) collection or tokenId.

Get all of the NFT information for a given wallet `/main/v2/blockchain/nft/{address}`. Retrieve the latest or historical information for a given NFT contract `/main/v2/marketplace/contracts/{contractAddress}/activity` or `/main/v2/marketplace/contract/{contractAddress}/{tokenID}/history`.

Use our powerful aggregations to get NFT statistics for NFT sales `/main/v2/marketplace/collectionActivity` or see the top NFT buyers `/main/v2/marketplace/buyerActivity`.

{% hint style="info" %}
Our aggregations are updated every hour:

* `collectionActivity` on the hour every hour
* `buyerActivity` on the half hour every hour
  {% endhint %}

## Carbon API

Sustainability is at our core. We have endpoints to keep you informed of your carbon footprint when using VORJ. You can easily see the footprint of your VORJ organization `/main/v2/carbon/organization` or a particular VORJ project `/main/v2/carbon/project/{projectID}`. We provide a nice graphical interface in the VORJ frontend to keep users informed of their carbon footprint.

We didn't stop at supporting just VORJ based contracts we also provide a set of carbon endpoints for wallet address `/main/v2/carbon/address/{address}` and contracts addresses `/main/v2/carbon/contract/{contractAddress}`. Use these endpoints to stay informed of your carbon footprint whether you are a collector, degen, developer or enthusiast.

## Balance API

Check the VET and VTHO balance of a given wallet address `/main/v2/vet/balance/{address}`. Want to see the transfers for a given wallet address instead `/main/v2/vet/transfers/{address}`.&#x20;

## Contract Push Notifications

Get notifications, via webhooks, for events associated with a given contract address `/main/v2/webhooks/subscribe`.


# Transaction Executor

Make that transaction happen.

VORJ offers an application programmable interface (API) to emit transactions throughout the VeChainThor blockchain network.

The endpoint `main/v2/blockchain/sendTransaction` supports both the mainnet and testnet. The user can provide a raw transaction string in the request body.


# Contract Deployer

VORJ offers an application programmable interface (API) to emit contracts throughout the VeChainThor blockchain network.


# Roles & Permissions

Segregation of duties through roles and permissions.

Within VORJ there are different levels of roles and permissions. The table below outlines the roles and permission.

<table><thead><tr><th width="134"></th><th width="253">Create / Delete Organization</th><th width="221">Add / Remove Member</th><th width="213">Create / Delete Project</th><th width="128">Edit Project</th><th width="141">View Project</th></tr></thead><tbody><tr><td>Owner</td><td>Y</td><td>Y</td><td>Y</td><td>Y</td><td>Y</td></tr><tr><td>Super User</td><td></td><td>Y</td><td>Y</td><td>Y</td><td>Y</td></tr><tr><td>User</td><td></td><td></td><td></td><td>Y</td><td>Y</td></tr><tr><td>Viewer</td><td></td><td></td><td></td><td></td><td>Y</td></tr></tbody></table>


# Organization, Project & Contracts

A hierarchy to help organize your work.

Within VORJ we have the concept of an organization, project and contract. Combined these represent a hierarchy to help to organize you work.

## Organization

{% hint style="info" %}
An Owner of an organization cannot join another organization. So if you want to be part of multiple organizations you will need to use separate email accounts. Alternatively, an Owner can delete their account and transfer ownership to another member of the organization they are leaving.
{% endhint %}

An organization is where you can collaborate with team members on projects.

## Project

{% hint style="info" %}
Each project is configured to be on either testnet or mainnet. The smart contracts within a project inherit the network from the project. Once set the network cannot be changed.
{% endhint %}

A project is where you and your team can create and group smart contracts into logical collections.&#x20;

## Contracts

{% hint style="info" %}
A smart contract inherits the network from the project that it exists within. Smart contract cannot be moved from project to project.
{% endhint %}

A contract refers to smart contract. Currently, from the frontend we offer, the capability to create ERC-20 or ERC-721 smart contracts.


# Plans, Resources and Usage

The inner workings of VORJ.

VORJ offers four types of monthly subscription plan, which is configurable at an organization level. Each plan will come with it's own cost and resource allocation. Resources are allocated and consumed at a project level. Each plan will auto renew every 30 days. The subscription renewal will reset the consumed resources for an organization to zero.

{% hint style="warning" %}
VORJ is currently a beta release, as such there is only a free plan on offer
{% endhint %}

## Plans

Currently, as VORJ is in a mainnet beta release we only offer a free plan. See the image below for the resource limits associated with the free plan.

{% hint style="info" %}
If you are looking for a larger plan size on the current VORJ mainnet beta release please contact us at <support@vorj.app>.
{% endhint %}

Paid for plans with different resource limits will be on offer as part of our alpha release.

<figure><img src="/files/r9pxgL8ISmd7FA84VRtD" alt=""><figcaption><p>Free plan resource limits</p></figcaption></figure>

## Resource Definitions

Each plan will have a different cost and resource allocation. Please read the following definitions to ensure that you understand each of the resources:

* **API Calls:** Each API call to or from the VeChainThor blockchain.
* **API Calls / Min:** The maximum amount of API calls per minute.
* **Smart Contract Deployments:** A deployment of a smart contract to the blockchain.
* **NFT Max Supply:** The max supply of any non-fungible token.

## Usage Definitions

Each resource, with the exception of NFT Max Supply, is configurable at a project level. Meaning that the Owner or SuperUser of an organization can define how many API Calls, API Calls / Min or Smart Contract Deployments a project can consume.

* **Unallocated:** The resources that are free to assign as they are resources that are not already allocated to a project and have not been consumed.
* **Allocated:** Are resources that are assigned to a project and therefore cannot be consumed or allocated to any other project. The Owner or SuperUser can always adjust the allocated resources for a project. The amount of resources allocated can never be lower than the consumed amount of resources.
* **Consumed:** These are resources that have been used by a project. They cannot be reallocated. Consumed resources are automatically renewed as part of the 30 day subscription.


# NFT Creation Flows

VORJ offers three distinct NFT creation flows.

### Dynamic Table Flow

This flow is the default approach and provides a dynamic user interface allowing a user to create up to 5 attributes of metadata. The user can provide a collection `description` and add up to a maximum of 5 attributes across all of the media items. This creation flow is limited to collections that are less than or equal to 20 pieces of media.

<figure><img src="/files/5VOumEeYzo6vix8OgUmG" alt=""><figcaption><p>Example of the dynamic flow.</p></figcaption></figure>

### Metadata Only Flow

This flow is enabled by uploading a valid metadata json object, see example metadata json object below. There is a required set of fields for the metadata json object to be considered valid.

The following keys are required:

* `tokenId:` The unique tokenId for the media item.
* `name:` The name of the media item.
* `description:` The description of the media item.

{% hint style="warning" %}
`edition` is an optional field and if present will supersede the `tokenId.`
{% endhint %}

{% hint style="warning" %}
Valid values for both `tokenId` and `edition` are values that are greater than 0.
{% endhint %}

```markup
[  
  {
    "tokenId": "1",
    "data": {
      "name": "TokenId 1 Name",
      "description": "TokenId 1 Description",
      "edition": "1",
      "attributes": [
        {
          "trait_type": "Trait Type 1 Name",
          "value": "Trait Type 1 Value"
        },
        {
          "trait_type": "Trait Type 2 Name",
          "value": "Trait Type 2 Value"
        }
      ]
    }
  },
  {
    "tokenId": "2",
    "data": {
      "name": "TokenId 2 Name",
      "description": "TokenId 2 Description",
      "edition": "2",
      "attributes": [
        {
          "trait_type": "Trait Type 1 Name",
          "value": "Trait Type 1 Value"
        },
        {
          "trait_type": "Trait Type 2 Name",
          "value": "Trait Type 2 Value"
        }
      ]
    }
  }
]
```

### Media and Metadata Flow

This flow is activated when a user opts into providing a metadata json object as an alternative to using the dynamic table flow. The user must upload a metadata object, following the same requirements and outline as above.


# Guides

A set of user guides to help you start your journey with VORJ

## What is VORJ

VORJ is a no code Web3 as a service platform on the VeChainThor blockchain. VORJ removes the technical barriers to creating digital assets. VORJ simplifies the smart contract creation process through a beautifully designed, simple to use and user friendly interface.

The word VORJ is derived from the American phonetic spelling of forge; to make or shape an object by heating it in a fire and hammering it.

## Purpose of these Guides

The purpose of this guide is to provide you, the reader, with a set of instructions to follow in order to be able to use either the VORJ frontend user interface or the VORJ backend application programmable interface (API) to create and deploy a ERC-721 smart contract.

From a frontend perspective VORJ is currently limited to the creation of ERC-20 and ERC-721 smart contract standards. However, through the backend API, VORJ supports a wider selection of smart contract standards, ERC-20, ERC-721, ERC-1155, UUPS and ERC-4626.

{% hint style="warning" %}

#### Warning: VORJ is currently beta

* This API is not meant for production use, currently beta.
* You, the user, accept all responsibility for the use of the VORJ API.
* Through the use of the API you are agreeing to the [terms of service](/the-legal-bits) and [privacy policy](/the-legal-bits) of VORJ.
* The VeChain Foundation San Marino nor any other entity associated with VeChain nor VORJ accept any responsibility associated with the use of VORJ.
* All smart contracts created and deployed through VORJ are done so through the VORJ deployment wallet and thus these smart contracts are owned and controlled by VORJ, unless they are transferred by the user to another wallet.
* The digital assets, either fungible or non-fungible, that are created as part of the smart contracts are minted into your own self-custody wallet, through the provided API endpoints, and thus the digital assets are owned and controlled by the private key holder of that wallet.
  {% endhint %}


# Video Guides

## A step-by-step video guide on how to get started with VORJ

{% embed url="<https://www.youtube.com/watch?v=8kuEeSphcTM>" %}


# Written Guides


# Backend User Guide

A backend user guide for the VORJ beta release

## URL

<https://api.vorj.app/main/v2/docs>

{% hint style="info" %}
A valid API key or JWT token is required to use the API. Accounts can only be created through the frontend.
{% endhint %}

## Purpose of this guide

{% hint style="warning" %}

#### Warning: VORJ is currently beta

* This API is not meant for production use, currently beta.
* You, the user, accept all responsibility for the use of the VORJ API.
* Through the use of the API you are agreeing to the [terms of service](/the-legal-bits) and [privacy policy](/the-legal-bits) of VORJ.
* The VeChain Foundation San Marino nor any other entity associated with VeChain nor VORJ accept any responsibility associated with the use of VORJ.
* All smart contracts created and deployed through VORJ are done so through the VORJ deployment wallet and thus these smart contracts are owned and controlled by VORJ, unless they are transferred by the user to another wallet.
* The digital assets, either fungible or non-fungible, that are created as part of the smart contracts are minted into your own self-custody wallet, through the provided API endpoints, and thus the digital assets are owned and controlled by the private key holder of that wallet.
  {% endhint %}

The purpose of this guide is to provide a first time VORJ user with the steps required to create an account, organization, project and API key to start using the VORJ API endpoints.

{% hint style="info" %}
Every endpoint described in this document should be prefixed by the`/main/v1`
{% endhint %}

## API Authorization

Most of the APIs offered by VORJ require a valid JWT token or API key to be passed through the Authentication header. As a first time user of the API there is a requirement to populate the JWT token in order to generate an API key. A returning user can provide their previously generated API key. The JWT token should be placed into the `bearerAuth` input box and the API Key should be placed into the `apikeyAuth` input box.

The user should securely manage and store their API keys once it is generated and presented to the user. In the event of losing an API key the old one can be deleted, via the endpoint `DELETE /projects/apikey`, and a new one can be generated by the user through the endpoint `POST /projects/apikey`, see creating an API Key section for further details.

## Create and verify an account

Before you can proceed you first need to create and verify an account through the frontend. Follow the steps [here](/guides/written-guides/frontend-user-guide#create-and-verify-an-account).

## Create an organization and project

Once you have created your account you need to create an organization and project. Follow the steps [here](/guides/written-guides/backend-user-guide#create-an-organization-and-project).

## Allocate resources to your project

Make sure to allocate resources to your project. Follow the steps [here](https://docs.vorj.app/guides/written-guides/pages/Ee9bpaL5V2llPDfzWuLr#1.-allocate-resources).

{% hint style="info" %}
The network of the project determines the network of the API key. In other words, a testnet API key cannot be used to query mainnet.
{% endhint %}

## Create an API key

Go to the Account Management page, via your avatar. Go to the API keys tab and create an API with the permissions of your choice. Copy and securely store the API key value, VORJ does not store the API key.

{% hint style="info" %}
API Keys are generated in VORJ, they are not stored within VORJ.
{% endhint %}

## How to use the API key

Go to <https://api.vorj.app/main/v2/docs> press the `Authorize` button and enter the API key value you copied and or stored into the `apiKeyAuth` field. This will now enable you to use several of the endpoints. Unlocked endpoints are shown by a locked lock symbol.


# Frontend User Guide

A frontend user guide for the VORJ beta release

## URL

[vorj.app](https://vorj.app)

## Purpose of this guide

The purpose of this guide is to provide a first time VORJ user with the steps required to create and deploy an ERC-721 smart contract through the VORJ frontend.

{% hint style="warning" %}

#### Warning: VORJ is currently beta

* This API is not meant for production use, currently beta.
* You, the user, accept all responsibility for the use of the VORJ API.
* Through the use of the API you are agreeing to the [terms of service](/the-legal-bits) and [privacy policy](/the-legal-bits) of VORJ.
* The VeChain Foundation San Marino nor any other entity associated with VeChain nor VORJ accept any responsibility associated with the use of VORJ.
* All smart contracts created and deployed through VORJ are done so through the VORJ deployment wallet and thus these smart contracts are owned and controlled by VORJ, unless they are transferred by the user to another wallet.
* The digital assets, either fungible or non-fungible, that are created as part of the smart contracts are minted into your own self-custody wallet, through the provided API endpoints, and thus the digital assets are owned and controlled by the private key holder of that wallet.
  {% endhint %}

## Create and verify an account

To get started on VORJ, you will first need to create and verify an account. Follow the four steps to create and verify your VORJ account.

### 1. Landing page

From the landing page if you already have an account you can login. If you are a new user and are creating an account press the `Register` link.

<figure><img src="/files/givlURTK9BOmk0GLpzQo" alt=""><figcaption><p>VORJ landing page, use the Register link to create an account.</p></figcaption></figure>

### 2. Provide an email address and name

After having selected the register account you will be prompted to provide an email address and a name. After populating this information press `Sign Up`.

{% hint style="info" %}
**Name criteria:**

* Must be more than 5 characters in length.
* Alphanumeric characters only.
* No special characters allowed.
  {% endhint %}

<figure><img src="/files/QhrEy82E1ZCW4vVyqNNI" alt=""><figcaption><p>VORJ account creation page.</p></figcaption></figure>

### 3. Set a password

The next step in creating your VORJ account is to set a password and agree to the Terms of Service. Once you have read and are satisfied with the Terms of Service proceed to check the associated checkbox. Signing up to the newsletter is optional and you can always change your preferences at a later stage. The `Next` button will become active once a valid password is set and the Terms of Service checkbox is checked.

{% hint style="info" %}
**Password criteria:**

* Must be more than 8 characters in length.
* 1 Uppercase and 1 lowercase character.
* 1 Numeric character.
* 1 Special character.
  {% endhint %}

<figure><img src="/files/imp7i3cwgdENfQvpHq8p" alt=""><figcaption><p>VORJ account password creation page.</p></figcaption></figure>

### 4. Verify your account

You will receive a verification code through the email address that you signed up with. Please provide this verification code to complete your VORJ account creation.&#x20;

<figure><img src="/files/IbCAnia67iqBHiCb9SyQ" alt=""><figcaption><p>VORJ account verification page.</p></figcaption></figure>

After a successful registration you will be presented with a success message as shown in the image below.

<figure><img src="/files/dUNSgl657cgR7HlRvUWK" alt=""><figcaption><p>Successful account creation and prompt for next steps.</p></figcaption></figure>

## Create an organization and project

The next step is to create an organization. An organization is a space where you can collaborate with team members to create projects which group your smart contracts.

### 1. Provide an organization name and image

From the success page, as show above, select the `Create Organization` button which will start the organization creation process.

<figure><img src="/files/vFlGmdL04UjmEa1mgX8R" alt=""><figcaption><p>Provide an organization name and image.</p></figcaption></figure>

### 2. Select a plan

As there is only one place select the `Next` button to select the Free plan.

{% hint style="warning" %}
VORJ is currently a beta release, as such there is only a free plan on offer
{% endhint %}

<figure><img src="/files/eLnz1vDfjWPAGRXGirJ1" alt=""><figcaption><p>Select a plan for your organization.</p></figcaption></figure>

### 3. Add members

You can invite team members to join your organization to collaborate with you as you create smart contracts. To procced press `Next` to move onto the final step in the organization creation process.

<figure><img src="/files/FDRYkZ7NeOVjRqxMnSLj" alt=""><figcaption><p>Add members to you organization team.</p></figcaption></figure>

### 4. Create a project

A project is a workspace within an organization where you and your team can collaborate on creating smart contracts. Provide a project name, select the network that you want to deploy your smart contract on and set an image for your project.

{% hint style="info" %}
Smart contracts inherit the network setting of a project and smart contracts cannot be moved between projects.
{% endhint %}

<figure><img src="/files/OtY51jb0ov5PYQYwmDKJ" alt=""><figcaption><p>Creating your first project.</p></figcaption></figure>

After successfully creating an organization and project you will be directed to the dashboard page, which is shown in the image below.

<figure><img src="/files/W43LnYhsc5PvBBoWOAR5" alt=""><figcaption><p>Dashboard for our new organization</p></figcaption></figure>

## Create a smart contract

The next step is to create a smart contract. After we have successfully created a project, we should be on a page similar to the image show above. From here we can select the project card by clicking on it. By clicking on the project card we are entering the project space, we should now be on a page similar to the image shown below.

<figure><img src="/files/MPmBfRMavqgYwIQksLpH" alt=""><figcaption><p>The project detail page is where we create and can access our smart contracts.</p></figcaption></figure>

### 1. Allocate resources

The first step is to allocate resources to our project so that we can create, deploy and interact with our smart contracts. To allocate resources select the `Allocate Resources` button.

{% hint style="info" %}
Refer to [Plans, Resources and Usage](/welcome-to-vorj/plans-resources-and-usage) for more information.
{% endhint %}

We will be presented with a modal where we can assign a set amount of `API Calls`, `API Calls/Min` and `Smart Contract Deployments` for the project to use. In this example we have set the following values:

* API Calls: 100
* API Calls/Min: 10
* Smart Contract Deployments: 2

Once you have set the resources for your project press the `Confirm` button to proceed to the next step.

{% hint style="info" %}
A minimum of 2 `API Calls` and 1 `Smart Contract Deployment` resources are required to be allowed to create a smart contract.
{% endhint %}

<figure><img src="/files/TZXgTe9LwcUhfxvfARUy" alt=""><figcaption><p>Resource allocation for a project</p></figcaption></figure>

The image below is an example of a project with no smart contracts but with resources allocated. The next step is to begin the smart contract creation process.

<figure><img src="/files/aC4YEkUcD3rlGDtZxH1s" alt=""><figcaption><p>An example of a project with resources allocated.</p></figcaption></figure>

### 2. Select a smart contract standard

Having allocated resources and having met the minimum resource allocation requirements we should now be able to use the `Create Smart Contract` button. We will be presented with the options of smart contracts standards that we choose from.

We will be selecting the ERC721 token standard to create a Non-Fungible Token (NFT).

<figure><img src="/files/R1poadsGlZKiArdN0ocn" alt=""><figcaption><p>A list of smart contract standards to select from.</p></figcaption></figure>

### 3. Create and deploy an NFT

{% hint style="warning" %}
Smart contracts are immutable, this means that once they are deployed they cannot be changed or altered in anyway.  It is advised that you proceed with caution.

Always, check the contents of the form and double check it before deploying.
{% endhint %}

{% hint style="info" %}
The NFT media that you provide as part of your NFT will be uploaded to the [InterPlanetary File System](https://ipfs.tech/) (IPFS).
{% endhint %}

#### a. NFT configuration

Having selected the NFT standard we are presented with the template to populate, as shown in the image below. This template has a number of required and optional fields.

At a minimum the fields under the heading `Token Appearance` must be populated. The fields contained in the `Features` section are optional. It is strongly advised that you read the supporting information icons to understand the purpose of the fields before activating them.

#### b. Media upload

{% hint style="warning" %}
VORJ beta release and restricts the user to creating an NFT collection with a maximum of 20 images. Future releases will lift this limitation through the availability of plans with different levels of resources.
{% endhint %}

{% hint style="info" %}
The current release provides one route for creating NFTs which is through a dynamic table to add metadata to uploaded images. Additional flows will be supported in future releases.
{% endhint %}

{% hint style="info" %}
Supported media formats: mp3, mpeg, wov, ogg, mp4, webm, jpg, jpeg, git, svg, glb and gltf.
{% endhint %}

Either drag and drop or press upload icon within the `Upload Media` section. Select the group of media files that you want to upload, these can be images, video, sound or animation files. You must upload all of the files in one group at the same time. A limited number of file types are supported and there is a maximum file size per media item. Currently, there is a limit of 20 media items per NFT contract.

<figure><img src="/files/b06OQViPTbktvn4VmQcH" alt=""><figcaption><p>The NFT smart contract template.</p></figcaption></figure>

#### c. Populate metadata

Having uploaded the media files you will be presented with additional fields to populate within the `Metadata` section. You can provide a description for your NFT collection and up to five attributes per media items via the dynamic table. To add an attribute field use the `Set Metadata` button.

<figure><img src="/files/O3jLAMYoMXrAuu3KnKqa" alt=""><figcaption><p>NFT dynamic table for attribute setting.</p></figcaption></figure>

#### d. Preview

Once you have populated the NFT metadata you can use the `Preview` section to check and confirm the metadata of each item in your collection.

<figure><img src="/files/DmL5W0Z8xT7k0kXhltMc" alt=""><figcaption><p>NFT preview.</p></figcaption></figure>

#### e. Deploy

{% hint style="info" %}
Deploying a smart contract takes a minimum of two minutes but could be longer depending on network congestion and other pending transactions within VORJ.
{% endhint %}

As shown in the image above the final action is to either save the contract via the `Save` button and deploy it at a later stage or to deploy the contract via the `Deploy` button.

{% hint style="info" %}
You can monitor all of the pending and historical transactions for your organization via the `Usage` page and the `Transactions` tab. The `Usage` page is accessible as the second icon on the side navigation bar.
{% endhint %}

The first image below shows the screen that will immediately appear once you select `Deploy`. The `here` links to the above mentioned `Usage` page and `Transactions` tab.

The second image shows the state of the contract that is pending deployment. The contract is in a read only state as the contract deployment transaction is propagated through the blockchain network. Once the contract deployment is successful you should be able to interact with the smart contract, more on this in the next section.

<figure><img src="/files/0KMiIVAuEOH4q0pBqzyr" alt=""><figcaption><p>Transaction submitted notification.</p></figcaption></figure>

<figure><img src="/files/l0iVGHiKH6b78NWLWONH" alt=""><figcaption><p>Contract pending deployment.</p></figcaption></figure>

## NFT Actions

Once your smart contract has been successfully deployed you can perform various activities on your smart contract via the `Actions` tab.

{% hint style="info" %}
The actions available may differ depending on the features that you decided to activate on your smart contract.
{% endhint %}

<figure><img src="/files/VwFYVoDwjRggHelVlctr" alt=""><figcaption><p>NFT actions.</p></figcaption></figure>

### Mint an NFT

To mint an NFT simply populate the `Address` field with the receiver Vechain address along with a valid `tokenID(s)`.

{% hint style="info" %}
If you cannot remember the tokenIDs that you used in your collection go back to the `Contract` tab and scroll to the `Preview` section and use the `edition` value as an input into `tokenID`.
{% endhint %}

{% hint style="info" %}
This particular smart contract is configured to use selective minting instead of sequential minting.\
\
Selective minting allows the user to select the tokenID to send per transaction whereas sequential minting mints the tokenIDs in sequential order.
{% endhint %}

Congratulations you have now created, deployed and minted an NFT on the VechainThor blockchain.


# API Pagination

Some guidance and instructions on how pagination is implemented on the VORJ API.

A user can customize their data pagination by setting the number of items per page, specifying the sorting field and direction, and providing the `lastItemPrimary` when navigating to subsequent pages. In cases where two or more items have the same value for the sorting field, the `lastItemSecondary` can be used to help differentiate items.

| Parameter          | Description                                                                                                                                                                                                                                                                                                                                                         | Required                                          | Note                                                                                                                                                                                                                                                                           |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| limit              | Max number of items to be returned in a given page                                                                                                                                                                                                                                                                                                                  | No (default value= 10)                            | Minimum limit value is 10 and max limit value is 100                                                                                                                                                                                                                           |
| sortingField       | The field by which the list of items is sorted before it's paginated or divided into smaller, manageable sections for display.                                                                                                                                                                                                                                      | Yes (in some cases there will be a default value) | In some cases this field won't be present. In that case we are sorting by a set field, this set filed will be in API description so user knows what value to use for `lastItemPrimary`.                                                                                        |
| sortingDirection   | <p>Defines the order in which the items in a paginated list are arranged. Can take two values <code>asc</code> and <code>desc</code>.</p><ul><li><code>asc</code>(ascending): In this sorting direction, items are arranged in ascending order.</li><li><code>desc</code> (descending): In this sorting direction, items are arranged in descending order</li></ul> | Yes                                               |                                                                                                                                                                                                                                                                                |
| lastItemPrimary    | Refers to the value of the sorting field of the last item in the page of results. This value is used to determine which items are displayed on the current page and which items appear on the subsequent page when navigating through paginated data.                                                                                                               | Yes (not required to get 1st page)                |                                                                                                                                                                                                                                                                                |
| lastItemSecondary  | In cases where two or more items have the same value for the sorting field, the `lastItemSecondary` comes into play. It's an additional attribute or field that can be used to differentiate these items. I VORJ we used the objects `_id` value as this ensures uniqueness                                                                                         | No                                                |                                                                                                                                                                                                                                                                                |
| sortingMarketplace | This field is used in some of the marketplace endpoints and is used to determine which marketplace to sort by.                                                                                                                                                                                                                                                      | No (default value = all)                          | This field is used in marketplace endpoints as there is embedded information in the items returned. When using the `sortingField` parameter in these marketplace endpoints, you would specify the `sortingMarketplace` to narrow down the sorting to a particular marketplace. |


# Tutorials


# How to create an account on VORJ

A tutorial on how to create an account on VORJ.

## Objective of this tutorial

The objective of this tutorial is to provide a simple jargon free step-by-step guide on how a user can create and verify an account on VORJ.

{% hint style="info" %}
You can create a free account on VORJ all you need is an email address. No subscription or credit card information is required to create a free account.
{% endhint %}

## What is VORJ?

VORJ is a website that allows anyone with basic internet skills to create and deploy tokens.

{% hint style="info" %}
Tokens represent digital assets that are digitally transferable between people.
{% endhint %}

## 1. Navigate to VORJ

VORJ is available to everyone with an internet connection. Either click this link, <https://vorj.app/>, or type the address into your preferred web browser.

{% hint style="info" %}
VORJ is optimised for larger screen sizes, mobile users will notice display issues.
{% endhint %}

## 2. Account creation process

Perform the following steps to create an account on VORJ. This should should be a familiar and intuitive process for the majority of users.

### 1. Navigate to the Sign Up page

Having navigated to the VORJ website you should now see a screen similar to the image below. This is the VORJ landing page. If you have already registered an account with VORJ you should be able to input your credentials and login.

For those that do not have an account press the `Register` link at the bottom of the page, located under the Log In button. From here you will be redirected to another page that will allow you to register for an account with VORJ.

<figure><img src="/files/P9X8yNfDMj0TbrN2ROLN" alt=""><figcaption><p>The VORJ landing page.</p></figcaption></figure>

### 2. Register an account

Having selected the `Register` link you should now see a page similar to the one below, the registration page. To register an account with VORJ all you need to have is an email address that you have access to. Enter your email address and a name / username for your account.

{% hint style="info" %}
**Name criteria:**

* Must be more than 5 characters in length.
* Alphanumeric characters only.
* No special characters allowed.
  {% endhint %}

After populating both the email address and name fields with valid values the Sign Up button should change colour to blue which signifies that your information is valid and that the button is now active. Press the Sign Up button to proceed to the next step in creating your VORJ account.

<figure><img src="/files/oCqsjtUaAiCmZmeiR2KI" alt=""><figcaption><p>The VORJ registration page.</p></figcaption></figure>

### 3. Set a password for your account

{% hint style="warning" %}
It is your responsibility to use a secure and memorable password. However, in the event that you forget your password there is an account recovery process within VORJ.
{% endhint %}

The next step in the is to set a password for your account. Having pressed the Sign Up button your should see a screen similar to the one below, the VORJ password setting page.

<figure><img src="/files/lOk4mqcBhqhgAdwZjkD1" alt=""><figcaption><p>The VORJ password setting page.</p></figcaption></figure>

VORJ requires a password to meet certain criteria which you can see on the page and in the information section below. Please provide a password in the first input cell. Each password criteria that is completed successfully will be shown with a green light next to the completed criteria. Incomplete criteria will remain unlit, as shown in the image below. You will be required to confirm your password by entering it again in the second input cell.

{% hint style="info" %}
**Password criteria:**

* Minimum of 8 characters (recommended 12+ characters).
* Minimum of 1 number.
* Minimum of 1 lowercase letter.
* Minimum of 1 uppercase letter.
* Minimum of 1 special character.
  {% endhint %}

Before you can continue to the next step you must agree to the Terms of Service which also includes agreeing to the Privacy Policy. Both of the documents are also available here, [The Legal Bits](/the-legal-bits).

{% hint style="info" %}
Please take the time to read both the Terms of Service and Privacy Policy before agreeing.
{% endhint %}

Once you have provided both a valid and confirmed password as well as agreeing to the Terms of Service the Next button should change colour to blue which signifies that your information is valid and that the button is now active.

### 4. Verify your account

After pressing the Next button from the previous page you should now be presented with a screen similar to the image below. This step is required to ensure that you have access to the email address that you registered with. Navigate to the inbox of the email address that you registered with and enter the code.

{% hint style="info" %}
Be to sure to check you inbox, junk and spam folders for an email from <noreply@vorj.app>.
{% endhint %}

If the verification has expired you can request a new verification email by pressing the `Resend email` link.

<figure><img src="/files/B3iTIE7vbpbi3FK8eciY" alt=""><figcaption><p>Verify your email address page.</p></figcaption></figure>

After a successful registration you will be presented with a success message as shown in the image below.

<figure><img src="/files/bnGYvaJMKLebc3uqDkHR" alt=""><figcaption><p>Successful account creation page.</p></figcaption></figure>

### 5. Done, congratulations

Congratulations, you have successfully created your very own VORJ account. Follow the next tutorial on how to create an organisation and start creating tokens.

## Next step, create an organization

The next tutorial in this series will explore how to create an organization followed by a project and a token.&#x20;


# Create an organization and project space

A tutorial on how to create an organization and project space with VORJ.

## Prerequisites

To follow this tutorial you must have created and verified your account on VORJ. If you have not completed this please follow this tutorial [How to create an account on VORJ](/tutorials/how-to-create-an-account-on-vorj).

## Objective of this tutorial

The objective of this tutorial is to provide a simple jargon free step-by-step guide on how a user can create an organization and a project.

## What is an organization in VORJ?

An organization is a space where you can collaborate with team members to create projects which are used to organize your smart contracts which create your tokens.

{% hint style="info" %}
Simply put, a smart contract is a computer program stored on a blockchain that runs when a set of conditions are fulfilled.\
\
Don't overthink it, we aren't going to get overly technical. Just think of a smart contract as a vending machine, `money + snack selection = snack dispensed` . Vending machines remove the requirement to have a shop keeper or store assistant, instead you trust the code of the vending machine.&#x20;
{% endhint %}

## 1. Navigate to the Account Created page

If you are continuing on from the previous tutorial of [How to create an account on VORJ](/tutorials/how-to-create-an-account-on-vorj) press the Create Organization button, as seen in the image below. If you have logged out of VORJ then login at <https://vorj.app/> and then press the Create Organization button. Alternatively if you have not created and verified an account please go back to the first tutorial  [How to create an account on VORJ](/tutorials/how-to-create-an-account-on-vorj).

<figure><img src="/files/bnGYvaJMKLebc3uqDkHR" alt=""><figcaption><p>Successful account creation page.</p></figcaption></figure>

## 2. Create an organization

The create organization page, as show below, is a simple form for you to name your organization and provide an image or use a default image. Once you have provided the information select the Next button to proceed to the next step.

{% hint style="info" %}
You can change both the organization name and image after creation.
{% endhint %}

<figure><img src="/files/vFlGmdL04UjmEa1mgX8R" alt=""><figcaption><p>Provide an organization name and image.</p></figcaption></figure>

## 3. Select a plan

The next step in the create organization process is to select a plan for your organization to use. At the moment there is only one plan available, the Free Plan. From the image below, you can see that the Free Plan comes with certain usage restrictions. Select the Next button to continue to the next step in the process.

{% hint style="info" %}
Refer to [Plans, Resources and Usage](/welcome-to-vorj/plans-resources-and-usage) for more information in terms of the plan metrics.
{% endhint %}

{% hint style="info" %}
VORJ will offer a range of paid plans with differing levels of user restrictions. However, VORJ will always offer a Free Plan.
{% endhint %}

<figure><img src="/files/eLnz1vDfjWPAGRXGirJ1" alt=""><figcaption><p>Select a plan for your organization.</p></figcaption></figure>

## 4. Add members

You should now see a page similar to the image below. This section of the create organization process allows you to invite team members to join your organization to collaborate with you as you create smart contracts.

{% hint style="info" %}
An email will be sent if the receiver does not have a VORJ account or they have an account and are not already in an organization.
{% endhint %}

Once you have completed this process or if you do not want to add any members to your organization press the Next button to continue.

<figure><img src="/files/gbaNoMwQpbxSuooV8pt4" alt=""><figcaption><p>Add members to your organization.</p></figcaption></figure>

## 5. Create a project

The final step in the process is to create a project. You should see a screen similar to the image below.

A project is a workspace within an organization where you and your team can collaborate on creating smart contracts. To create a project provide a project name, select the network that you want to deploy your smart contracts too and set an image for your project. Complete the process by pressing the Finish button.

{% hint style="info" %}
For first time users our suggestion is to use testnet for your first project and smart contracts.
{% endhint %}

{% hint style="info" %}
Smart contracts inherit the network setting of a project and smart contracts cannot be moved between projects.
{% endhint %}

<figure><img src="/files/OtY51jb0ov5PYQYwmDKJ" alt=""><figcaption><p>Creating your first project.</p></figcaption></figure>

## 6. Done, Congratulations

After successfully creating an organization and project you will be directed to the dashboard page, which is shown in the image below.

<figure><img src="/files/W43LnYhsc5PvBBoWOAR5" alt=""><figcaption><p>Dashboard for our new organization</p></figcaption></figure>

## Next step, create, deploy and mint a token

The next tutorial in this series will explore [Create, deploy & mint a fungible token](/tutorials/create-deploy-and-mint-a-fungible-token).&#x20;


# Create, deploy & mint a fungible token

A step-by-step tutorial on how to create, deploy and mint a ERC-20 fungible token with VORJ.

## Prerequisites

To follow this tutorial you must have completed the following:

* Created and verified your account on VORJ. If you have not completed this please follow this tutorial [How to create an account on VORJ](/tutorials/how-to-create-an-account-on-vorj).
* Created an organization and a project. If you have not completed this step please follow this tutorial [Create an organization and project space](/tutorials/create-an-organization-and-project-space).

## Objective of this tutorial

The objective of this tutorial is to provide a simple jargon free step-by-step guide on how a user can create, deploy and mint fungible tokens.

## What is a ERC-20 fungible token?

To answer the question of what is an ERC-20 fungible token let's first break this question into two.

### What do we mean by fungible token?

A fungible token is a form of digital asset that can be easily interchanged with other tokens of the same type because each token has the same value and properties. In other words, every token is identical to every other token, and they can be exchanged or traded without any difference in value or functionality.

For example, if you have two $1 dollar bills, they have the same value and can be used interchangeably. Similarly, if you have two fungible tokens, such as ERC-20 tokens they have the same value and can be used interchangeably.

Fungible tokens are often used as a form of currency or as a way to represent other digital property such as stocks, bonds or commodities on a blockchain. They are also commonly used a a means of exchange in decentralized applications and smart contracts, where they can represent anything from voting rights to loyalty points.

### What does ERC-20 mean? (Technical - skip if you want)

{% hint style="info" %}
An Ethereum Request for Comment (ERC) is a document that outlines the rules that determine how data is formatted, transmitted and also what actions will take place when an event occurs.
{% endhint %}

The ERC-20 standard, which is one of the most popular token standards, determines the standards / rules that determine how data is formatted, transmitted and what actions will take place when an events occurs.

As VeChain is [compatible with the Ethereum Virtual Machine (EVM)](https://docs.vechain.org/core-concepts/evm-compatibility) and the ERC-20 standard is used across all EVM compatible chains for interoperability across chains it makes sense for VeChain to use the ERC-20 fungible token standard.

## 1. Access your project

If you are continuing on from the previous tutorial of [Create an organization and project space](/tutorials/create-an-organization-and-project-space) you should see a screen similar to the image below. If you have logged out of VORJ then login at <https://vorj.app/> and you should see a screen similar to the image below.

<figure><img src="/files/unc4vutNHgVMfCcDlCsy" alt=""><figcaption><p>Dashboard page with one testnet project.</p></figcaption></figure>

Select the project that you created by pressing on it. This should redirect you to the project space. Your screen should now look similar to the one below.

<figure><img src="/files/AS5xLt4BddyUpV3cOHar" alt=""><figcaption><p>Project page with no smart contracts.</p></figcaption></figure>

## 2. Allocate some resources to your project

{% hint style="info" %}
Refer to [Plans, Resources and Usage](/welcome-to-vorj/plans-resources-and-usage) for more information in terms of the plan metrics.
{% endhint %}

To create a fungible token we must first assign some resources to the project. Select the Allocate Resources button. This will bring up a modal similar to what is show below. This modal allows you to assign resources to your project. Let's just max out the resources for this project. We can always reassign unused resources across projects.

<figure><img src="/files/lfbLCud5cd1M18OYSF3q" alt=""><figcaption><p>Assign resources modal screen.</p></figcaption></figure>

After having assigned all of the available resources to a project we should see a screen similar to the one below.

<figure><img src="/files/w5OjezxzveX5zeWnGLYG" alt=""><figcaption><p>An example of a project with assigned resources.</p></figcaption></figure>

## 3. Create and deploy a fungible token

Press the Create Smart Contract button in the top right hand corner to start. This will open a modal requesting you to select the smart contract standard that you want to create. Select the first option Fungible Token.

<figure><img src="/files/8ASVEh2aeksCoIdtcqVy" alt=""><figcaption><p>Smart contract options in VORJ.</p></figcaption></figure>

After selecting the Fungible Token option you should now see a screen similar to the one presented below. This is the fungible token form. There are four fields that must be populated and two optional features. While there are information icons available on the page which should help you understand what is required in each field let's quickly talk through each of the six fields.

<figure><img src="/files/2UtSYp4JqKQV1s1ZGq7u" alt=""><figcaption><p>ERC-20 Fungible Token form.</p></figcaption></figure>

<table><thead><tr><th width="155">Field</th><th>Description</th></tr></thead><tbody><tr><td>Token Name</td><td>The name of your token, which must be at least two characters long.</td></tr><tr><td>Token Symbol</td><td>The symbol for your token, which must be at least three characters long.</td></tr><tr><td>Decimals</td><td>Determines how divisible the token is, usually set to 18 decimals, but can be set to any value between 0 and 50.</td></tr><tr><td>Max Supply</td><td>The total maximum supply which can never be exceeded.</td></tr><tr><td>Burnable</td><td>Whether users should be able to burn their tokens.</td></tr><tr><td>Pausable</td><td>Whether the contract can be paused which will prevent all interaction with the contract until it is unpaused. (Useful for emergency response)</td></tr></tbody></table>

Populate the fields with any values that you want and select the features that you would like for your specific smart contract implementation. Once you have populated the form press the Deploy button or if you prefer press Save and come back later and Deploy another time.

Once you have pressed Deploy you will see a screen similar to the below which is informing you that there will be a minimum of a two minute wait until your contract has been deployed and indexed by VORJ.

<figure><img src="/files/YaXiyc3JXOfVe4HKTh4H" alt=""><figcaption><p>Deployment and indexing taking place.</p></figcaption></figure>

Once the contract has been deployed and indexed by VORJ you can perform some Actions with your smart contract.

## 4. Perform some actions with your fungible token

Once your fungible smart contract has been deployed you should see a screen similar to the below.

<figure><img src="/files/5agfsMu6sNGvBesMPfvY" alt=""><figcaption><p>Deployed fungible token action tab.</p></figcaption></figure>

There are some elements on this screen that we should discuss. The long hexadecimal string starting with 0x is the contract address of your deployed smart contract. Next to the contract address are two icons. The first icon copies the address to your clipboard. The second icon links out to the explorer to view your smart contracts transactions.

The form elements on this page will depend on the features that you implemented as part of your contract. From the image above we can see that the contract was deployed with the pausable feature. This means that the contract can be paused and unpaused with the press of a button.

The primary function on the Action tab is the ability to mint tokens. You can mint tokens from your fungible smart contract to any address with any given amount by populating the Address and Amount cells. We have provided a useful balance counter for the smart contract to inform the user how many tokens remain un-minted.

{% hint style="danger" %}
Double check that the address is correct. Once a transaction has been submitted it is irreversible and the funds cannot be recovered.
{% endhint %}

To do a test transaction you could send some of the tokens to the burn address \`0x000000000000000000000000000000000000dEaD\`. This is an address which is used to burn tokens, the funds in this address are lost forever as there is an almost zero percent likelihood that the key for this address can be generated.

## Done, Congratulations

You have successfully created and deployed a fungible token on the vechain blockchain.

In terms of next steps you can choose to either continue the tutorial series and explore [Create, deploy & mint a non-fungible token (NFT)](/tutorials/create-deploy-and-mint-a-non-fungible-token-nft)or investigate what you can do with your newly generated fungible token in the [Fungible token utility](/tutorials/fungible-token-utility).


# Fungible token utility

There are a number of things that you can do with your newly created fungible token. Here is a list of some actions and tutorials to follow:

* [How to list your fungible token on the official token registry](/tutorials/fungible-token-utility/how-to-list-your-fungible-token-on-the-official-token-registry)
* [How to manually add your token in the VeWorld wallet](/tutorials/fungible-token-utility/how-to-manually-add-your-token-in-the-veworld-wallet)
* [How to create a liquidity pool for your fungible token](/tutorials/fungible-token-utility/how-to-create-a-liquidity-pool-for-your-fungible-token)


# How to list your fungible token on the official token registry

Get your fungible token on the approved token list.

The token registry represents an approved list of fungible tokens. This is the list that is used for wallets and DeFi protocols. So if you want users to be able to easily access your token without having to go through the process of manually importing it via the contract address you should consider getting your token listed on the token registry.

## Prerequisites

To list your token on the token registry you will need:

* Have created a fungible token to list on the official token registry. You can follow this guide if you haven't created a fungible token yet [Create, deploy & mint a fungible token](/tutorials/create-deploy-and-mint-a-fungible-token).
* A GitHub account.
* Working knowledge of GitHub. The ability to fork a repo and create a pull request.

## Get listed on the token registry

To get your token listed on the token registry follow the steps in the official repo, <https://github.com/vechain/token-registry>.


# How to manually add your token in the VeWorld wallet

A step-by-step tutorial on how to manually add your newly created VORJ fungible token into your VeWorld wallet.

## Prerequisites

To list your token on the token registry you will need:

* Have created a fungible token to list on the official token registry. You can follow this guide if you haven't created a fungible token yet [Create, deploy & mint a fungible token](/tutorials/create-deploy-and-mint-a-fungible-token).
* Have a VeWorld wallet. Other VeChain wallets will have similar flows as this tutorial.

## 1. Login, navigate to your project and fungible token contract

To start we need to login to [VORJ](https://vorj.app). Once you have successfully logged in you can navigate to a mainnet project that you created earlier which contains a fungible token which has been deployed to mainnet. If you do not have a mainnet project or have not created and deployed a fungible token on mainnet follow the previous tutorials, [Create an organization and project space](/tutorials/create-an-organization-and-project-space) and [Create, deploy & mint a fungible token](/tutorials/create-deploy-and-mint-a-fungible-token) making sure to create your project using the mainnet network.

You should be see a screen similar to the one below. This particular fungible token contract has been deployed to mainnet and has a total supply of 1,000,000 tokens with zero tokens minted.

<figure><img src="/files/ToYusabZy3Rd1xHkuXqR" alt=""><figcaption><p>A mainnet deployed fungible token.</p></figcaption></figure>

## 2. Copy your fungible token contract address

Use the copy icon, <img src="/files/hvOAU4dRJYjTxAr8prz7" alt="" data-size="line">, from the smart contract heading section of your fungible token. An example is shown in the image below. Pressing the copy icon will copy the smart contract address of your fungible token contract into you clipboard.

<figure><img src="/files/4HP7NAQ67GWTm6Pi6riJ" alt=""><figcaption><p>Example of a fungible token contract address.</p></figcaption></figure>

## 3. Add the fungible token contract address into VeWorld

Follow the steps and images below to add your token to VeWorld:

* Open and login into the VeWorld extension.
* On the VeWorld landing screen select the Manage Tokens button.
* From here select the Add Custom Token button.
* Paste the previously copied fungible token address into the input field. Be sure to double check that you have pasted the correct address. Once verified press the Add button.
* You will be redirected to the Manage Tokens page and you should see your token listed in the Custom Tokens list.
* Navigate back to the VeWorld landing screen by pressing the back arrow, <img src="/files/ZTCoIk8XCj74S4cn6loN" alt="" data-size="line">, which is in the top left of the screen.
* Now you should see your fungible token and associated balance on the VeWorld landing screen.

<div><figure><img src="/files/oxTCqL5BJpMuqRjvmL07" alt="" width="183"><figcaption><p>VeWorld landing screen.</p></figcaption></figure> <figure><img src="/files/9S9RiAyPhyzx0lBbVk6S" alt="" width="183"><figcaption><p>Manage token page.</p></figcaption></figure> <figure><img src="/files/Ay72rC4cxklTKStSWxEL" alt="" width="182"><figcaption><p>Add token page.</p></figcaption></figure> <figure><img src="/files/9B4auQLswfoy5aMnuqwa" alt="" width="181"><figcaption><p>Updated manage token page.</p></figcaption></figure> <figure><img src="/files/jtBxdzNJ4uxN6tklHNuY" alt="" width="179"><figcaption><p>Updated VeWorld landing page.</p></figcaption></figure></div>

##


# How to create a liquidity pool for your fungible token

A step-by-step guide on how to list and set liquidity for your fungible token.

{% hint style="danger" %}
Disclosure and Disclaimer: The following content is for educational purposes only. It is not financial advice or legal advice.
{% endhint %}

## Prerequisites

To follow this tutorial you must have completed the following:

* Created and verified your account on VORJ. If you have not completed this please follow this tutorial [How to create an account on VORJ](/tutorials/how-to-create-an-account-on-vorj).
* Created an organization and a project. If you have not completed this step please follow this tutorial [Create an organization and project space](/tutorials/create-an-organization-and-project-space).
* Created, deployed and minted a fungible token. If you have not completed this step please follow this tutorial [Create, deploy & mint a fungible token](/tutorials/create-deploy-and-mint-a-fungible-token).
* You will need a wallet that you have control over and you will also need some VET and VTHO.

{% hint style="info" %}
If you don't already have a VeChain compatible wallet create one using [VeWorld](https://www.veworld.net/) or [Sync2](https://lite.sync.vecha.in/#/) which are browser compatible and have mobile support.
{% endhint %}

{% hint style="warning" %}
To continue this tutorial you need to have deployed a fungible token (ERC-20) on mainnet. If you followed the previous tutorials you likely deployed a fungible token on testnet. Repeat the tutorials creating a project and fungible token on mainnet.
{% endhint %}

## Objective of this tutorial

The objective of this tutorial is to provide a simple step-by-step guide on how a user can create a liquidity pool for their fungible token.

## What is a liquidity pool and how does it work?

A liquidity pool is created when a user deposits a pair of fungible tokens into a smart contract. These smart contracts are then used to provide liquidity to platforms that provide services such as, token swaps on decentralized exchanges (DEX) or decentralized finance (DeFi) protocols. In return for providing liquidity, users expect to earn a percentage of transaction fees.

## 1. Login, navigate to your project and fungible token contract

To start we need to login to [VORJ](https://vorj.app). Once you have successfully logged in you can navigate to a mainnet project that you created earlier which contains a fungible token which has been deployed to mainnet. If you do not have a mainnet project or have not created and deployed a fungible token on mainnet follow the previous tutorials, [Create an organization and project space](/tutorials/create-an-organization-and-project-space) and [Create, deploy & mint a fungible token](/tutorials/create-deploy-and-mint-a-fungible-token) making sure to create your project using the mainnet network.

You should be see a screen similar to the one below. This particular fungible token contract has been deployed to mainnet and has a total supply of 1,000,000 tokens with zero tokens minted.

<figure><img src="/files/ToYusabZy3Rd1xHkuXqR" alt=""><figcaption><p>A mainnet deployed fungible token.</p></figcaption></figure>

## 2. Mint tokens into your wallet

In order to create a liquidity pool for our newly created fungible token we first need to own and control some of the tokens. To do this we will need to mint some tokens into a wallet address that we own and control.

### a. Get your wallet public address

I will be using the VeWorld desktop wallet for the rest of this tutorial. The Sync2 wallet has a similar interface and capability so if you are using that wallet you should be able to follow along.

In the image below you will see an image showing a VeWorld wallet. To get the public address of your wallet use the copy icon, <img src="/files/1pZJcflFCOPd94xH5cxZ" alt="" data-size="line">. This will copy the public address of your wallet into your clipboard.

<figure><img src="/files/oxTCqL5BJpMuqRjvmL07" alt="" width="365"><figcaption><p>Example of a VeWorld wallet.</p></figcaption></figure>

### b. Mint tokens into your wallet

Now with your wallet public address in your clipboard navigate back back to VORJ and your mainnet fungible token actions page. What you see on screen should be similar to the image below.

I am going to mint half of the max supply of this particular fungible token contract, 500,000 tokens, into a wallet that I control. Paste the previously copied public address of your wallet into the address input field and type an amount into the amount field. Verify the information in the fields and when you are satisfied press the Mint button.

<figure><img src="/files/villqf6saKMLZZhoqatn" alt=""><figcaption><p>Mint tokens into a wallet you own and control.</p></figcaption></figure>

### c. Add the fungible token contract to your wallet

This step is required if your token is not present on the official token registry. If your token is on the official token registry then skip this step to Step 3. To add your token to the official token registry, follow this guide [How to list your fungible token on the official token registry](/tutorials/fungible-token-utility/how-to-list-your-fungible-token-on-the-official-token-registry).

We need to manually add our fungible token contract to our VeWorld wallet. In order to do this please follow this guide [How to manually add your token in the VeWorld wallet](/tutorials/fungible-token-utility/how-to-manually-add-your-token-in-the-veworld-wallet).

## 3. Create a liquidity pool

At this stage you should have a VeWorld wallet with some amount of your fungible token and some amount of VET and VTHO.

There are two decentralized finance (DeFi) protocols that you can add liquidity to [VeRocket](https://app.verocket.com/) and [Vexchange](https://vexchange.io/swap). Given that both have similar interfaces I will provide a tutorial just one, [VeRocket](https://app.verocket.com/).

Further custom steps will be added for now you can follow the VeRocket guide on how to create a liquidity pool <https://help-center.verocket.com/guides/provide-liquidity>.

## Done, Congratulations

You have successfully created a liquidity pool for your fungible token on the VechainThor blockchain.


# Create, deploy & mint a non-fungible token (NFT)

A step-by-step tutorial on how to create, deploy and mint a ERC-721 NFT with VORJ.

## Prerequisites

To follow this tutorial you must have completed the following:

* Created and verified your account on VORJ. If you have not completed this please follow this tutorial [How to create an account on VORJ](/tutorials/how-to-create-an-account-on-vorj).
* Created an organization and a project. If you have not completed this step please follow this tutorial [Create an organization and project space](/tutorials/create-an-organization-and-project-space).

## Objective of this tutorial

The objective of this tutorial is to provide a simple jargon free step-by-step guide on how a user can create, deploy and mint an NFT collection.

## What is a ERC-721 NFT?

To answer the question of what is a ERC-721 NFT let's first break this question into two.

### What do we mean by non-fungible token (NFT)?

A NFT is a unique digital asset that is not interchangeable with any other asset because it has unique characteristics and properties that make it different from all other assets. The most common NFT standard in use within the blockchain ecosystem is the ERC-721 standard.

Unlike fungible tokens, which have identical values and can be traded interchangeably, NFTs are unique and often represent one of a kind items such as digital art, collectibles, music, videos and other forms of media. Each NFT has a unique identifier, `tokenID`, that distinguishes it from all other tokens and represents its unique value and properties.

For example, image you have a digital painting. While you could create multiple copies of the file, each copy would be identical and thus not unique. However, if you create an NFT of the digital painting, it becomes a unique asset that is represented by a specific token on a blockchain. This token can be bought, sold or traded just like a physical painting.

### What does ERC-721 mean? (Technical - skip if you want)

{% hint style="info" %}
An Ethereum Request for Comment (ERC) is a document that outlines the rules that determine how data is formatted, transmitted and also what actions will take place when an event occurs.
{% endhint %}

The ERC-721 standard, which is one of the most popular token standards, determines the standards / rules that determine how data is formatted, transmitted and what actions will take place when an events occurs.

As VeChain is [compatible with the Ethereum Virtual Machine (EVM)](https://docs.vechain.org/core-concepts/evm-compatibility) and the ERC-721 standard is used across all EVM compatible chains for interoperability across chains it makes sense for VeChain to use the ERC-721 non-fungible token standard.

## 1. Go to the Dashboard page

If you are continuing on from the previous tutorial of [Create, deploy & mint a non-fungible token (NFT)](/tutorials/create-deploy-and-mint-a-non-fungible-token-nft) you can skip to step 4 of this tutorial.

If you have come to this tutorial having completed the [Create an organization and project space](/tutorials/create-an-organization-and-project-space) tutorial you should see a screen similar to the image below.

If you are on another page other than the Dashboard page, which should be similar to the image below, navigate to the Dashboard page by selecting the top left icon on the navigation bar on the left.

If you have logged out of VORJ then login at <https://vorj.app/> and you should see a screen similar to the image below.

<figure><img src="/files/unc4vutNHgVMfCcDlCsy" alt=""><figcaption><p>Dashboard page with one testnet project.</p></figcaption></figure>

## 2. Access your project

Select the project that you created by pressing on it. This should redirect you to the project space. Your screen should now look similar to the one below.

<figure><img src="/files/AS5xLt4BddyUpV3cOHar" alt=""><figcaption><p>Project page with no smart contracts.</p></figcaption></figure>

## 3. Allocate some resources to your project

{% hint style="info" %}
Refer to [Plans, Resources and Usage](/welcome-to-vorj/plans-resources-and-usage) for more information in terms of the plan metrics.
{% endhint %}

To create a non-fungible token we must first assign some resources to the project. Select the Allocate Resources button. This will bring up a modal similar to what is show below. This modal allows you to assign resources to your project. Let's just max out the resources for this project. We can always reassign unused resources across projects.

<figure><img src="/files/lfbLCud5cd1M18OYSF3q" alt=""><figcaption><p>Assign resources modal screen.</p></figcaption></figure>

After having assigned all of the available resources to a project we should see a screen similar to the one below.

<figure><img src="/files/w5OjezxzveX5zeWnGLYG" alt=""><figcaption><p>An example of a project with assigned resources.</p></figcaption></figure>

## 4. Create and deploy a non-fungible token

From within your project space press the Create Smart Contract button in the top right hand corner to start. This will open a modal requesting you to select the smart contract standard that you want to create. Select the second option Non-Fungible Token.

<figure><img src="/files/8ASVEh2aeksCoIdtcqVy" alt=""><figcaption><p>Smart contract options in VORJ.</p></figcaption></figure>

After selecting the Non-Fungible Token option you should now see a screen similar to the one presented below. This is the non-fungible token form. There are two fields that must be populated, five optional features and two file upload components. While there are information icons available on the page which should help you understand what is required for each item let's quickly talk through each of the nine items.

<figure><img src="/files/DvdOyIiXdCKQzacPUGz5" alt=""><figcaption><p>ERC-721 Non-Fungible Token form.</p></figcaption></figure>

<table><thead><tr><th width="155">Field</th><th>Description</th></tr></thead><tbody><tr><td>Token Name</td><td>The name of your token, which must be at least two characters long.</td></tr><tr><td>Token Symbol</td><td>The symbol for your token, which must be at least three characters long.</td></tr><tr><td>Burnable</td><td>Whether users should be able to burn their tokens.</td></tr><tr><td>Pausable</td><td>Whether the contract can be paused which will prevent all interaction with the contract until it is unpaused. (Useful for emergency response)</td></tr><tr><td>Selective</td><td>This determines the minting approach. The default approach is for sequential minting which means minting the tokens in <code>tokenId</code> order. The user can opt-in for selective minting which enables the user to select the <code>tokenId</code> to mint.</td></tr><tr><td>Royalties Receiver Address</td><td>The address to receive royalties at. Royalties are generated from secondary sales. (Note: Subject to the marketplace supporting royalty payments)</td></tr><tr><td>Royalties Percentage Fee</td><td>The percentage of the sale price to be paid to the royalties receiver address from each secondary sale.</td></tr><tr><td>Upload Media</td><td>The media that you provide here will be uploaded to <a href="https://ipfs.tech/">IPFS</a>. </td></tr><tr><td>Metadata</td><td>The metadata associated with your collection. Populated through either a dynamic table or a json upload.</td></tr></tbody></table>

Populate the two required fields with any values that you want and select the features that you would like for your specific smart contract implementation.

Once you have populated the form press the Deploy button or if you prefer press Save and come back later and Deploy another time.

Once you have pressed Deploy you will see a screen similar to the below which is informing you that there will be a minimum of a two minute wait until your contract has been deployed and indexed by VORJ.

<figure><img src="/files/YaXiyc3JXOfVe4HKTh4H" alt=""><figcaption><p>Deployment and indexing taking place.</p></figcaption></figure>

Once the contract has been deployed and indexed by VORJ you can perform some Actions with your smart contract.

## 5. Perform some actions with your NFT

Once your NFT smart contract has been deployed you should see a screen similar to the below.

<figure><img src="/files/ek0KCjzH9FOTaaiA83hZ" alt=""><figcaption><p>Deployed NFT action tab.</p></figcaption></figure>

There are some elements on this screen that we should discuss. The long hexadecimal string starting with 0x is the contract address of your deployed smart contract. Next to the contract address are three icons. The first icon copies the address to your clipboard. The second icon links out to the explorer to view your smart contracts transactions. The third icon, IPFS, links to the VORJ IPFS node where your media has been uploaded to.

The form elements on this page will depend on the features that you implemented as part of your contract. From the image above we can see that the contract was deployed with the pausable feature. This means that the contract can be paused and unpaused with the press of a button.

The primary function on the Action tab is the ability to mint tokens. You can mint tokens from your NFT smart contract to any address. In this particular contract we set the minting approach to selective. Selective minting means that we can choose which tokens to mint to which address and we can mint any amount by populating the TokenID cell from the dropdown list. We have provided a useful balance counter for the smart contract to inform the user how many tokens remain un-minted.

{% hint style="danger" %}
Double check that the address is correct. Once a transaction has been submitted it is irreversible and the NFT cannot be recovered.
{% endhint %}

To do a test transaction you could send some of the tokens to the burn address `0x000000000000000000000000000000000000dEaD`. This is an address which is used to burn tokens, the funds in this address are lost forever as there is an almost zero percent likelihood that the key for this address can be generated.

## Done, Congratulations

You have successfully created and deployed a NFT on the vechain blockchain.

In terms of next steps consider investigating what you can do with your newly generated fungible token in the [NFT utility](/tutorials/nft-utility).


# NFT utility

There are a number of things that you can do with your newly created NFT. Here is a list of some actions and tutorials to follow:

* [List your NFT token on the official token registry](/tutorials/nft-utility/how-to-list-your-nft-on-wov)
* [List your NFT on the WoV marketplace](/tutorials/nft-utility/how-to-list-your-nft-on-wov)


# How to list your NFT on the official token registry

Get your NFT on the official NFT token list.

The token-registry represents a list of the known NFTs. The benefit of listing your NFT collection on the official token registry is for ease of visibility and accessibility by third parties such as VORJ collection statistics and additional VeWorld NFT integration.

## Prerequisites

To list your token on the token registry you will need:

* Have created a fungible token to list on the official token registry. You can follow this guide if you haven't created a fungible token yet [Create, deploy & mint a non-fungible token (NFT)](/tutorials/create-deploy-and-mint-a-non-fungible-token-nft).
* A GitHub account
* Working knowledge of GitHub (Ability to fork a repo and create a pull request)

## Get listed on the token registry

To get your token listed on the token registry follow the steps in the official repo, <https://github.com/vechain/nft-registry>.


# How to list your NFT on WoV

List your NFT collection directly from VORJ on the WoV marketplace.

[World of V](https://worldofv.art) (WoV) is one of the leading marketplaces on VeChain. VORJ has partnered with WoV to enable VORJ users to list their NFTs on a marketplace through the press of a button.

{% hint style="danger" %}
This feature is currently in Beta please contact <support@vorj.app> if you encounter any issues.
{% endhint %}

## Prerequisites

To follow this tutorial you must have completed the following:

* Created and verified your account on VORJ. If you have not completed this please follow this tutorial [How to create an account on VORJ](/tutorials/how-to-create-an-account-on-vorj).
* Created an organization and a project. If you have not completed this step please follow this tutorial [Create an organization and project space](/tutorials/create-an-organization-and-project-space).
* Created and deployed an NFT on the VeChainThor blockchain. You can follow this guide if you haven't created a NFT yet [Create, deploy & mint a non-fungible token (NFT)](/tutorials/create-deploy-and-mint-a-non-fungible-token-nft).
* You will need a wallet that you have control over and you will also need some VTHO.

{% hint style="info" %}
If you don't already have a VeChain compatible wallet create one using [VeWorld](https://www.veworld.net/) or [Sync2](https://lite.sync.vecha.in/#/) which are browser compatible and have mobile support.
{% endhint %}

{% hint style="warning" %}
To continue this tutorial you need to have deployed a non-fungible token (ERC-721) on mainnet. If you followed the previous tutorials you likely deployed a fungible token on testnet. Repeat the tutorials creating a project and non-fungible token (NFT) on mainnet.
{% endhint %}

## Objective of this tutorial

The objective of this tutorial is to provide a simple step-by-step guide on how a user can list their NFT on the WoV marketplace.

## What is a NFT marketplace and how does it work?

A NFT marketplace is somewhere you can buy and sell NFTs.

## 1. Login, navigate to your project and fungible token contract

To start we need to login to [VORJ](https://vorj.app). Once you have successfully logged in you can navigate to a mainnet project that you created earlier which contains a NFT which has been deployed to mainnet. If you do not have a mainnet project or have not created and deployed a NFT on mainnet follow the previous tutorials, [Create an organization and project space](/tutorials/create-an-organization-and-project-space) and [Create, deploy & mint a fungible token](/tutorials/create-deploy-and-mint-a-fungible-token) making sure to create your project using the mainnet network.

You should be see a screen similar to the one below. This particular fungible token contract has been deployed to mainnet and has a total supply of 5 tokens with zero tokens minted.

<figure><img src="/files/CaVSBhGTKEmyvDOlQ4VJ" alt=""><figcaption><p>A mainnet deployed NFT contract.</p></figcaption></figure>

## 2. Mint tokens into your wallet

In order to list your NFT on the WoV marketplace the NFTs you first need to own and control the tokens. To do this we will need to mint some tokens into a wallet address that we own and control.

### a. Get your wallet public address

I will be using the VeWorld desktop wallet for the rest of this tutorial. The Sync2 wallet has a similar interface and capability so if you are using that wallet you should be able to follow along.

In the image below you will see an image showing a VeWorld wallet. To get the public address of your wallet use the copy icon, <img src="/files/1pZJcflFCOPd94xH5cxZ" alt="" data-size="line">. This will copy the public address of your wallet into your clipboard.

<figure><img src="/files/oxTCqL5BJpMuqRjvmL07" alt="" width="365"><figcaption><p>Example of a VeWorld wallet.</p></figcaption></figure>

### b. Mint tokens into your wallet

Now with your wallet public address in your clipboard navigate back back to VORJ and your mainnet NFT actions page. What you see on screen should be similar to the image below.

As I intend to list all of the NFTs on WoV I am going to mint all of the NFTs, 5, into a wallet that I control. Paste the previously copied public address of your wallet into the address input field and type an amount into the amount field. Verify the information in the fields and when you are satisfied press the Mint button.

<figure><img src="/files/jEkeAssUSjuzyvs7MBo2" alt=""><figcaption><p>Mint NFTs into a wallet you own and control.</p></figcaption></figure>

## 3. List and sell on the WoV Marketplace

The last action required to list your NFT collection on the WoV marketplace is to provide the same address that you minted your tokens into in the address box that is next to the List button. Once pressed you will be presented with a screen similar to the one below.

{% hint style="info" %}
The address that you minted your NFTs into should be the same address as the listing address.

The purpose of providing an address before listing is to facilitate the user to change the collection information such as the description, icon and banner image.

In order to change the collection information the user must log into WoV with this wallet address and update their profile.
{% endhint %}

<figure><img src="/files/zQHiW6QLevcCc7CpA1TI" alt=""><figcaption><p>Listing modal with link to WoV NFT collection.</p></figcaption></figure>

Press the here link which will open a new tab in your browser linking you to the WoV marketplace listing of your NFT which will be similar to the screen below.

{% hint style="info" %}
Press the `All` filter to see the NFT collection. When you navigate to the page initially the default filter is `On Sale.`
{% endhint %}

<figure><img src="/files/IGOburd1f6nZp5m2uga6" alt=""><figcaption></figcaption></figure>

## 4. List your NFTs for sale

In order to sell your NFTs on the WoV marketplace you need set a sale price. To do that you need to log into the WoV marketplace with the wallet that you minted the NFTs into and configure a price.

### a. Access your WoV profile

Use the Connect button in the top right-hand corner to connect to the wallet holding your NFTs.&#x20;

<div><figure><img src="/files/IGOburd1f6nZp5m2uga6" alt=""><figcaption><p>NFT collection view, not logged in.</p></figcaption></figure> <figure><img src="/files/rEFFng5FJtubA0raBLeZ" alt=""><figcaption><p>Logged in view, showing the Profile option.</p></figcaption></figure></div>

### b. Update your profile

Once connected, select the icon in the top right-hand corner again and select the Edit Profile option. At a minimum you should provide a Display Name and Email Address in order to be able to edit your collection icon, banner and description. Press the update button and sign and send the transaction.

### c. Set a price

Once logged in and on your profile page you should see a screen similar to the first image below. You should see all of the NFTs that you minted into your wallet via VORJ, which we did as part of step 2 of this tutorial. Press the List button at the bottom of the screen and select that NFTs that you want to sell followed by pressing the Confirm Sell button. You should now see something similar to the third screen which is an interface allowing you to set the price per NFT you have selected to sell.

<div><figure><img src="/files/UTRmAkx17nrKKFwvHKrz" alt=""><figcaption><p>Profile screen.</p></figcaption></figure> <figure><img src="/files/zmZbyrejU8ld2cpfo9zp" alt=""><figcaption><p>Selected NFTs to sell.</p></figcaption></figure> <figure><img src="/files/q9xWU4FwIBZiC6L64UB0" alt=""><figcaption><p>Set a price.</p></figcaption></figure></div>

Once you have set a price for your NFTs. You can press the Confirm button. You will now be prompted to login to your wallet and sign a transaction to List your NFTs. This will cost a small amount of VTHO. Once you confirm the transaction in your wallet and the transaction completes your collection should now be listed.

<figure><img src="/files/ucA9lJbh4Nm9Tj8R6apm" alt=""><figcaption><p>NFTs on sale.</p></figcaption></figure>

## Done, Congratulations

You have successfully created a listing of your NFT collection on the VeChainThor blockchain.


# Changelog

A record of all the notable changes made to VORJ.

<details>

<summary>Fixes &#x26; Improvements - 21 February 2024</summary>

* Major updates to the underlying codebase and infrastructure in order to improve overall performance and maintainability.
* As a result of these major updates the API has migrated from v1 to v2 and is now discoverable at <https://api.vorj.app/main/v2/docs>
* Enable Role Based Access Controls (RBAC) on smart contracts to allow the delegation of tasks such as minting and burning to nominated accounts.
* Several minor user interface enhancements.
* Various aspects of code clean up and refactoring.

</details>

<details>

<summary>Fixes &#x26; Improvements - 13 October 2023</summary>

* Initial frontend support for Govoner Contracts "DAO", more detail available [here](https://docs.openzeppelin.com/contracts/4.x/).
* Extend ERC-721 with optional claimable condition.
* Several minor user interface enhancements.
* Various aspects of code clean up and refactoring.

</details>

<details>

<summary>Fixes &#x26; Improvements - 13 September 2023</summary>

* Integration with World of V Marketplace.
* Several minor user interface enhancements.
* Various aspects of code clean up and refactoring.

</details>

<details>

<summary>Fixes &#x26; Improvements - 23 August 2023</summary>

* Update the Free Plan limits to:

  <figure><img src="/files/IlktsvxAhYFYEigBsPQg" alt="" width="375"><figcaption></figcaption></figure>
* Several minor user interface enhancements.
* Various aspects of code clean up and refactoring.

</details>

<details>

<summary>Fixes &#x26; Improvements - 12th July 2023</summary>

* Introduction of new NFT creation flows, read [here](/welcome-to-vorj/nft-creation-flows) for more details.
* Deeper IPFS integration through our own VORJ nodes.
* Creation of new tutorials, see [here](/tutorials) for more information.
* Initial frontend support for ERC-4626 "Tokenized Vault Standard", more detail available [here](https://docs.openzeppelin.com/contracts/4.x/erc4626).
* Update smart contracts to use the latest release of OpenZeppelin contracts, see changes [here](https://github.com/OpenZeppelin/openzeppelin-contracts/releases).
* Adjust NFT media file sizes; min 100B and max 500MB.
* Several minor user interface enhancements.
* Various aspects of code clean up and refactoring.

</details>

<details>

<summary>Fixes &#x26; Improvements - 1st June 2023</summary>

* The Transfer Action transfers both the ownership and master of the contract to the receiver address, previously only the ownership was transferred.
* Add a user interface for fungible and non-fungible (NFT) contracts to identify remaining token supply that has not been minted.
* Improve and optimize load time on the smart contract page.
* Various aspects of code clean up and refactoring.

</details>

<details>

<summary>Fixes &#x26; Improvements - 25th May 2023</summary>

* Add validation to the ERC20 and ERC721 contract, actions and transfer tabs to provide users with more informative error messages and guidance.
* Only show the pause functionality on the smart contract actions tab if the functionality has been enabled on contract creation. (**Note:** The pause functionality can still be enabled and activated via the backend API.)&#x20;
* Various minor interface updates and bug fixes focusing on improved user experience.
* Improve and optimize load time across various pages.

</details>

<details>

<summary>Fixes &#x26; Improvements - 8th May 2023</summary>

* Update from using [ERC20 base](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) contract to [ERC20Capped](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Capped.sol) contract. Change effective Friday 5th May.
* All ERC20 contracts created through VORJ prior to Friday 5th May **do not** have a capped supply, they have an initial supply, which can be exceeded.
* Some additional validation and minor copy updates throughout the application.

</details>

<details>

<summary>Fixes &#x26; Improvements - 28th April 2023</summary>

* Mobile support for landing and sign-up pages **only.**
* Add a warning message for mobile viewports stating that VORJ is not optimized for mobile.
* For each transaction wait, approximately 2 minutes, until the contract is indexed by the VORJ indexer.
* Marketplace aggregation will return the previous response object instead of the partial response object while the aggregation is in process.
* ERC721:
  * Remove the ability to switch from sequential to selective minting.
  * Add an amount field to allow minting a given amount of tokens.
  * Add validation to minting fields.
* ERC20:
  * Add an amount field to allow minting a given amount of tokens.
  * Add validation to minting fields.
  * Fix for incorrect minting amount caused by decimals.
* Some additional validation and minor copy updates throughout the application.

</details>

<details>

<summary>Beta Release - 17th April 2023</summary>

* Initial beta release of [VORJ](https://vorj.app).
* Free plan only with support for ERC20 and ERC721 (dynamic table only) smart contracts.

</details>


# The Legal Bits

By using VORJ, either through the frontend user interface or through the application programmable interface (API) you, the user, are subscribing to the Terms of Service and the Privacy Policy of VORJ, as provided in the documents below.

{% file src="/files/zirQIPRoYRCo5BTMS3hf" %}
VORJ Terms & Conditions
{% endfile %}

{% file src="/files/2vMzAHBQcyrNwES8LM3S" %}
VORJ Privacy Policy
{% endfile %}


# FAQ

## How to change your notification preferences?

As a verified VORJ user after you have logged into VORJ you can alter your email notification preferences via the Settings page which is accessible via your account avatar.

## How to delete your account?

As a verified VORJ user after you have logged into VORJ you can delete you account via the Delete Account button on the Profile tab of the Account Management page.

If you have created an account but have not created or joined an organization after you successfully login you will be presented with the options to create or join an organization or delete your account.

## How to request to be blacklisted / unblacklisted?

If you are not a registered VORJ user and are being spammed by emails associated with VORJ please contact <support@vorj.app> to have your email address either added or removed from the blacklist.


