# Token V2

**What is Token V2?**

The Aptos token v2 standard was developed with the following as an improvement on the Aptos Token standard. It has these ideas in mind:

* *Flexibility* - NFTs are flexible and can be customised to accommodate any creative designs.
* *Composability* - Multiple NFTs can be easily composed together, such that the final object is greater than the sum of its parts
* *Scalability* - Greater parallelism between tokens

**Key Difference between Token V2 and other Aptos token standard:**

* Token V2 is an object based token.
* Decoupled token ownership from token data
* Explicit data model for token metadata via adjacent resources
* Extensible framework for tokens

**Comparison between Token V1 and Token V2:**

* Token can be easily extended with custom data and functionalities without requiring any changes in the framework
* Transfers simply a reference update
* Direct transfer is allowed without an opt in
* NFTs can own other NFTs adding easy composability
* Soul bound tokens can be easily supported

**Lets understand Token V2 using a simple example for creating a token**

```rust
module my_addrx::TokenV2
{
    use std::signer;
    use aptos_framework::object; 
    use std::option;
    use aptos_token_objects::token::{Self, Token};
    use aptos_token_objects::royalty;
    use std::string::String;

    public entry fun create_token(account: &signer,collection_name: String, token_name: String, token_description: String, token_uri: String ) {
        
        let signer_address = signer::address_of(account);
        let royalty = royalty::create(1, 10, signer_address);
      
        //minting nft
        let token_constructor_ref = token::create_named_token(
            account,
            collection_name,
            token_description,
            token_name,
            option::some(royalty),
            token_uri
        );
        let obj = object::object_from_constructor_ref<Token>(&token_constructor_ref);
        //Transfering the NFT to the signer of the transaction
        let obj_signer = object::generate_signer(&token_constructor_ref);   
        object::transfer(&obj_signer,obj,signer_address);
    }
}

```

{% hint style="info" %}
For more details [follow this](https://aptos.dev/standards/aptos-token-v2/).&#x20;
{% endhint %}


---

# Agent Instructions: Querying This Documentation

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

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

```
GET https://move-developers-dao.gitbook.io/aptos-move-by-example/advanced-concepts/token-v2.md?ask=<question>
```

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

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