# Creating, Minting, and Interacting with a Token Factory Token

The **Token Factory module** provides a simple framework for creating and managing **custom native tokens**. It allows users to create, mint, distribute and interact with their own tokens seamlessly. Each token is uniquely tied to its creator’s address and follows the standardized format `factory/{creator address}/{subdenom}.`

The module is particularly useful for **developers** and **projects** looking to **issue chain-native assets** without the complexity of deploying custom smart contracts. Regardless of the token’s intended use the **Token Factory** streamlines the entire **lifecycle**, ensuring a secure and scalable approach to token management on XION.

## **Prerequisites**

Before proceeding, make sure you have the following:

1. **XION Daemon (`xiond`) Installed:**\
   Ensure that `xiond` is installed on your system. If not, follow the [Setting up your Local Development Environment](https://docs.burnt.com/xion/developers/featured-guides/setup-local-environment/installation-prerequisites-setup-local-environment#xiond) guide to set it up.
2. **An Active Account:**\
   Set up an account using `xiond` by following the [Generate an account](https://docs.burnt.com/xion/developers/featured-guides/setup-local-environment/interact-with-xion-chain-setup-xion-daemon#generate-an-account) guide. You will use this account to execute transactions.
3. **A Funded Account:**\
   You need an account with sufficient **native XION tokens** to cover transaction fees. You can obtain testnet tokens through the [**XION testnet faucet**](/xion/developers/references/xion-testnet.md).

## **Creating a Token**

{% hint style="info" %}
Creating a new Token Factory token requires a **1000 XION fee** (on both **Testnet** and **Mainnet**). This fee protects XION users by:

* **Reducing spam** and malicious token creation.
* **Encouraging meaningful token projects**, ensuring a higher-quality ecosystem.
  {% endhint %}

To create a new token using the **Token Factory module**, you would execute the following command:

```sh
xiond tx tokenfactory create-denom <your-denom> --from <wallet-name> --chain-id <chain-id> --node <node> --gas auto --gas-adjustment <gas-adjustment> --gas-prices <gas-prices> 
```

**Parameters:**

* `<your-denom>` – The unique token name (e.g., `customtoken`).
* `<wallet-name>` – Your configured wallet name in `xiond`.
* `<chain-id>` – The chain ID of the XION network.
* `<node>` – The ID or address of the blockchain node you are connecting to.
* `--gas auto` – Automatically estimates the gas required for the transaction.
* `<gas-adjustment>` – Adjusts the estimated gas amount by **30%** to account for possible variations in actual consumption.
* `<gas-prices>` – The fee rate for gas in **uxion** (the smallest unit of XION).

**Example:**

```sh
xiond tx tokenfactory create-denom mytoken --from mywallet --chain-id xion-testnet-2 --node https://rpc.xion-testnet-2.burnt.com:443 --gas auto --gas-prices 0.025uxion
```

The following is an example of the initial output:

```
gas estimate: 2091194
auth_info:
  fee:
    amount:
    - amount: "52280"
      denom: uxion
    gas_limit: "2091194"
    granter: ""
    payer: ""
  signer_infos: []
  tip: null
body:
  extension_options: []
  memo: ""
  messages:
  - '@type': /osmosis.tokenfactory.v1beta1.MsgCreateDenom
    sender: xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r
    subdenom: emp
  non_critical_extension_options: []
  timeout_height: "0"
signatures: []
confirm transaction before signing and broadcasting [y/N]:
```

After typing **y** and pressing **Enter**, you may see the following output:

```
code: 0
codespace: ""
data: ""
events: []
gas_used: "0"
gas_wanted: "0"
height: "0"
info: ""
logs: []
raw_log: ""
timestamp: ""
tx: null
txhash: 4AC13595B2E92DD5D9B27111E71B34D598E2C19EFE7865602C3110FDEA3676F3
```

Upon successful execution, a unique token will be created with a denomination formatted as:

```
factory/<creator-address>/mytoken
```

## **Querying Token Data**

After creating a token, you may want to **verify its metadata** and check its initial state on the blockchain. This can be done using the **denom-metadata query** within the **bank** module, which retrieves essential details about the token, including its base denomination, display name, and symbol.

To query the token data, run the following command:

```sh
xiond query bank denom-metadata factory/<creator-address>/<denom> --node <rpc-endpoint>
```

**Example:**

```sh
xiond query bank denom-metadata factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp --node https://rpc.xion-testnet-2.burnt.com:443
```

**Example Output:**

```yaml
metadata:
  base: factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
  denom_units:
  - denom: factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
  display: factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
  name: factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
  symbol: factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
```

**Understanding the Output:**

* **`base`** – The full unique identifier of the token.
* **`denom_units`** – The denomination structure for different decimal representations.
* **`display`** – The default way the token is displayed in applications.
* **`name`** – The registered name of the token.
* **`symbol`** – The token’s ticker symbol (if set during metadata configuration).

## **Updating Token Metadata**

Before minting new tokens, it is important to **configure the token’s metadata** to ensure frontends and apps can properly **query and display token information** and to set the required decimal precision to be used by the token.

**Updatable Fields:**

* **`ticker-symbol`** – The short symbol representing the token (e.g., `XION`).
* **`description`** – A brief description of the token.
* **`exponent`** – The decimal precision used for display purposes.

To update the token metadata, run the following command:

```sh
xiond tx tokenfactory modify-metadata <denom> <ticker-symbol> <description> <exponent> --from <wallet-name> --chain-id <chain-id> --node <node> --gas auto --gas-adjustment <gas-adjustment> --gas-prices <gas-prices>
```

**Example:**

```sh
xiond tx tokenfactory modify-metadata factory/xion1xyz.../mytoken MYT "My custom token" 6 --from mywallet --chain-id xion-testnet-2 --node https://rpc.xion-testnet-2.burnt.com:443 --gas auto --gas-adjustment 1.7 --gas-prices 0.025uxion
```

This command updates the metadata for the `mytoken` token, setting:

* **Ticker Symbol** → `MYT`
* **Description** → `"My custom token"`
* **Exponent** → `6` (indicating 6 decimal places for display)

The following is an example of the initial output:

```
gas estimate: 68088
auth_info:
  fee:
    amount:
    - amount: "1703"
      denom: uxion
    gas_limit: "68088"
    granter: ""
    payer: ""
  signer_infos: []
  tip: null
body:
  extension_options: []
  memo: ""
  messages:
  - '@type': /osmosis.tokenfactory.v1beta1.MsgSetDenomMetadata
    metadata:
      base: factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
      denom_units:
      - aliases:
        - EMP
        denom: factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
        exponent: 0
      - aliases:
        - factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
        denom: EMP
        exponent: 6
      description: My custom token
      display: EMP
      name: factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
      symbol: EMP
      uri: ""
      uri_hash: ""
    sender: xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r
  non_critical_extension_options: []
  timeout_height: "0"
signatures: []
confirm transaction before signing and broadcasting [y/N]: 

```

After typing **y** and pressing **Enter**, you may see the following output:

```
code: 0
codespace: ""
data: ""
events: []
gas_used: "0"
gas_wanted: "0"
height: "0"
info: ""
logs: []
raw_log: ""
timestamp: ""
tx: null
txhash: 9583BEC1A62884395E466C190B1A5B3DE5EC152D0CE875BCBDE3DD333BB9E0C9
```

You can then query the metadata to see the updates:

```sh
xiond query bank denom-metadata factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp --node https://rpc.xion-testnet-2.burnt.com:443
```

**Possible Output:**

```yaml
metadata:
  base: factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
  denom_units:
  - aliases:
    - EMP
    denom: factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
  - aliases:
    - factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
    denom: EMP
    exponent: 6
  description: My custom token
  display: EMP
  name: factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
  symbol: EMP
```

## **Minting Tokens**

After successfully creating your token, you will notice that no tokens have actually been minted. To establish or increase the token supply, you must explicitly **mint new tokens**. The **minting process** allows you to generate additional tokens under your control, which can then be used within your apps, or distributed to other accounts.

To mint tokens, execute the following command:

```sh
xiond tx tokenfactory mint <amount><denom> --from <wallet-name> --chain-id <chain-id> --node <node> --gas auto --gas-adjustment <gas-adjustment> --gas-prices <gas-prices>
```

**Parameters:**

* `<amount>` – The quantity of tokens to mint.
* `<denom>` – The full denomination (including `factory/<creator-address>/<denom>`).
* `<wallet-name>` – Your configured wallet name.
* `<chain-id>` – The chain ID of the XION network.
* `<node>` – The ID or address of the blockchain node you are connecting to.
* `--gas auto` – Automatically estimates the gas required for the transaction.
* `<gas-adjustment>` – Adjusts the estimated gas amount by **30%** to account for possible variations in actual consumption.
* `<gas-prices>` – The fee rate for gas in **uxion** (the smallest unit of XION).

**Example:**

```sh
xiond tx tokenfactory mint 1000000000000factory/xion1xyz.../mytoken --from mywallet --chain-id xion-testnet-2 --node https://rpc.xion-testnet-2.burnt.com:443 --gas auto --gas-adjustment 1.5 --gas-prices 0.025uxion
```

The following is an example of the initial output:

```
gas estimate: 95267
auth_info:
  fee:
    amount:
    - amount: "2382"
      denom: uxion
    gas_limit: "95267"
    granter: ""
    payer: ""
  signer_infos: []
  tip: null
body:
  extension_options: []
  memo: ""
  messages:
  - '@type': /osmosis.tokenfactory.v1beta1.MsgMint
    amount:
      amount: "1000000000000"
      denom: factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
    mintToAddress: ""
    sender: xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r
  non_critical_extension_options: []
  timeout_height: "0"
signatures: []
confirm transaction before signing and broadcasting [y/N]: 
```

After typing **y** and pressing **Enter**, you may see the following output:

```
code: 0
codespace: ""
data: ""
events: []
gas_used: "0"
gas_wanted: "0"
height: "0"
info: ""
logs: []
raw_log: ""
timestamp: ""
tx: null
txhash: BDB5A322400076D14C831497407AF1026D6A3DD923EF1E36366C0ED0C3D5ECE1
```

If your **exponent** was set to **6**, then **`1000000000000`** would mint **1 million `mytoken` tokens** since the exponent determines how many decimal places the token uses.

## **Querying Token Balance**

Once you have minted or received tokens, you may want to **check your wallet’s balance** to see the amount of **native XION, custom tokens, and IBC-transferred assets** you hold. The **bank balance query** allows you to retrieve a complete breakdown of all tokens associated with your address.

To check the token balances for an account execute:

```sh
xiond q bank balances <your-address> --node <node>
```

Example:

```sh
xiond q bank balances xion1xyz... --node https://rpc.xion-testnet-2.burnt.com:443
```

The following is an example of the output, with `factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp` as the custom token:

```
balances:
- amount: "1000000000000"
  denom: factory/xion1ka5gdcv4m7kfzxkllapqdflenwe0fv8ftm357r/emp
- amount: "201000000000"
  denom: ibc/57097251ED81A232CE3C9D899E7C8096D6D87EF84BA203E12E424AA4C9B57A64
- amount: "4903089571"
  denom: uxion
pagination:
  total: "3"
```

## **Sending Tokens to Another Address**

Once you have minted tokens, you may want to **transfer them to another wallet**, whether for payments, rewards, or distribution to users. The **bank send transaction** allows you to send your custom tokens (or any other assets in your wallet) to another address on the **XION blockchain**.

To send tokens, use the following command:

```sh
xiond tx bank send <your-address> <recipient-address> <amount><denom> --node <node> --from <wallet-name> --chain-id <chain-id> --gas auto --gas-adjustment <gas-adjustment> --gas-prices <gas-prices>
```

**Parameter Breakdown:**

* **`<your-address>`** – The sender’s wallet address.
* **`<recipient-address>`** – The recipient’s wallet address.
* **`<amount>`** – The number of tokens to send.
* **`<denom>`** – The full token denomination, including the `factory/{creator-address}/{denom}` prefix.
* **`<node>`** – The RPC node used to broadcast the transaction.
* **`<wallet-name>`** – The name of your configured wallet in `xiond`.
* **`<chain-id>`** – The XION network’s chain ID.
* **`--gas auto`** – Enables automatic gas estimation.
* **`<gas-adjustment>`** – Adjusts the estimated gas usage (e.g., `1.5` for 50% buffer).
* **`<gas-prices>`** – Sets the gas fee rate in `uxion`.

#### **Example: Sending 500 `mytoken` Tokens**

```sh
xiond tx bank send xion1ka5... xion193h... 500factory/xion1ka5.../mytoken --node https://rpc.xion-testnet-2.burnt.com:443 --from mywallet --chain-id xion-testnet-2 --gas auto --gas-adjustment 1.5 --gas-prices 0.025uxion
```

**What Happens?**

* This **transfers 500 `mytoken` tokens** from the sender (`xion1ka5...`) to the recipient (`xion193h...`).
* The transaction is **broadcasted to the network** via the specified RPC node.
* If successful, the **recipient’s balance** is updated, and the sender’s balance is **reduced accordingly**.

You have successfully **created**, **updated**, **minted** and **transferred** a token using the **XION Token Factory module**. With this foundation, you can now integrate your token into your smart contracts and **app frontends** seamlessly.


---

# Agent Instructions: Querying This Documentation

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

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

```
GET https://docs.burnt.com/xion/developers/computation/integrations/token-factory/creating-minting-and-interacting-with-a-token-factory-token.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.
