# Add Extended CW20 Token Info

You can enhance your CW20 token with rich metadata such as website, social links, full description, images, and legal/audit info — stored off-chain and referenced from `marketing_info.project` in your smart contract.

***

### Step 1: Prepare Extended Metadata <a href="#step-1-prepare-extended-metadata" id="step-1-prepare-extended-metadata"></a>

The extended metadata must be stored as a JSON file hosted on a publicly accessible URL. The URL will be placed in the CW20 `marketing_info.project` field **with SHA-256 checksum verification** to ensure data integrity.

**JSON Format Specification**

Here is the approved format of the metadata file:

```json
{
  "version": "1.0",
  "name": "MyToken",
  "symbol": "MTK",
  "website": "https://mytoken.example.com",
  "description": {
    "format": "markdown",
    "image_url": "https://mytoken.example.com/images/logo-large.png",
    "video_url": "https://www.youtube.com/@axiome_ru",
    "content": [
       {
         "language": "en",
         "text": "Full token description in markdown or plain text, no more then 60k symbols..."
       },
       {
         "language": "de",
         "text": "Vollständige Token-Beschreibung in Markdown- oder Klartextformat, nicht mehr als 60.000 Zeichen …"
       }
     }
  },
  "socials": {
    "X (ex. Twitter)": "https://twitter.com/mytoken",
    "Telegram": "https://t.me/mytokenchat",
    "Discord": "https://discord.gg/mytoken",
    "GitHub": "https://github.com/mytoken"
  },
  "legal": {
    "terms_url": "https://mytoken.example.com/terms",
    "privacy_url": "https://mytoken.example.com/privacy"
  },
  "audit": [
    {
      "provider": "Certik",
      "url": "https://certik.com/projects/mytoken",
      "date": "2024-12-01"
    }
  ],
  "contacts": {
    "email": "contact@mytoken.example.com",
    "support_url": "https://mytoken.example.com/support"
  }
}
```

**Notes:**

* `description.format` must be either `"markdown"` or `"text"`
* any fields except `version`, `name`, `symbol` can be set to `null` if not used
* `socials` can include any keys (e.g., TikTok, Instagram, etc.)
* `description.content` can contain either a string or an array of objects:
  * If a string is provided, it will be used directly as the token description.
  * If an array of objects is provided, each object must have the following structure:\
    `{ "language": "<2-letter code>", "text": "<description string>" }`.\
    In this case, the application or explorer will select the most appropriate translation based on the user’s selected language.\
    The selection algorithm is as follows:
    1. Attempt to find a translation matching the user’s language using a two-letter language code according to **ISO 639-1**.
    2. If no matching language is found, attempt to use the `en` (English) translation.
    3. If `en` is not available, use the first translation in the list.

***

### Step 2: Calculate SHA-256 <a href="#step-2-calculate-sha-256" id="step-2-calculate-sha-256"></a>

To ensure the metadata has not been tampered with, calculate its **SHA-256 checksum** (of the raw file content).

**On Linux/macOS:**

```json
curl -s https://cdn.example.com/exmpl.json | sha256sum
```

**On Windows (PowerShell):**

```powershell
Invoke-WebRequest -Uri "https://cdn.example.com/exmpl.json" -UseBasicParsing | % Content | `
    Out-File -Encoding ascii -FilePath metadata.json
Get-FileHash metadata.json -Algorithm SHA256
```

Suppose the result is:

```
aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899
```

***

### Step 3: Upload Project Info to the Contract <a href="#step-3-upload-project-info-to-the-contract" id="step-3-upload-project-info-to-the-contract"></a>

CW20 contracts support setting `marketing_info.project` with a URL that includes the `sha256sum` as a query parameter.

**Example `axmd` TX to set the project info:**

```sh
axmd tx wasm execute <contract_address> '{
  "update_marketing": {
    "project": "https://cdn.example.com/exmpl.json?sha256sum=aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899"
  }
}' \
--from <your_wallet_name> \
--gas auto --gas-adjustment 1.3 --fees 5000uaxm \
--chain-id demo
```

Replace:

* `<contract_address>` — with the CW20 contract address
* `<your_wallet_name>` — with your wallet (keyring) name

***

#### Done! <a href="#done" id="done"></a>

Once the transaction is confirmed, your token will have a verifiable extended metadata link accessible via `marketing_info.project`.

Axiome Wallet, Axiome Explorer, and dApps can parse this JSON and render:

* Full token details
* Social links
* Brand image/video
* Contact and legal info


---

# 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.axiomeinfo.org/developer-documentation/add-extended-cw20-token-info.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.
