- name
- design-token
- description
- Design Cardano native token, NFT, NFT collection, fungible token, CIP-25 metadata, CIP-68 reference tokens, CIP-113 programmable tokens, minting policy, token architecture.
- allowed-tools
- Read Grep Glob
- disallowed-tools
- Bash Edit Write WebFetch WebSearch
<!-- Documentation lookup path: ${CLAUDE_SKILL_DIR}/../../docs/sources/ -->
# Design Cardano Native Token
Guide the user through designing a Cardano native token: choosing the right
CIP standard, designing the minting policy, structuring metadata, and planning
for ecosystem compatibility.
## When to Use
- User wants to create an NFT or NFT collection
- User wants to create a fungible token
- User asks about CIP-25, CIP-68, or CIP-113 standards
- User wants to design token metadata
- User needs help choosing between token standards
- User asks about updatable metadata or programmable tokens
- User wants to understand reference tokens (label 100/222/333/444)
## When NOT to Use
- User wants to write the minting policy validator code -- use `write-validator`
- User wants to build the actual minting transaction -- use `build-transaction`
- User has a failing mint transaction -- use `debug-transaction`
- User wants a security review of an existing minting policy -- use `review-contract`
## Key Principles
1. **Pick the right CIP standard first.** CIP-25 is simple but immutable.
CIP-68 enables updatable metadata via reference tokens. CIP-113 (still a
draft) makes tokens programmable via shared-custody validation. The choice
affects the entire architecture.
2. **Design the minting policy before the metadata.** The policy determines
who can mint, when, and how many. It is the foundation of token security.
3. **Plan for ecosystem compatibility.** Wallets, marketplaces, and explorers
rely on CIP standards to display tokens correctly. Non-conformant metadata
will appear broken in most tools.
4. **Minimize on-chain data.** Store large assets (images, documents) off-chain
via IPFS or Arweave. On-chain metadata should contain references (IPFS CID),
not raw data.
5. **Consider the full token lifecycle.** Can it be burned? Can metadata be
updated? Can supply change? These decisions must be made at design time.
## Workflow
### Step 1: Identify the Token Type
Ask the user what they are building:
| Token Type | Description | Recommended Standard |
|------------|-------------|---------------------|
| Simple NFT | One-off unique token, immutable | CIP-25 |
| NFT Collection | Series of unique tokens, immutable | CIP-25 or CIP-68 |
| Updatable NFT | NFT with mutable metadata | CIP-68 (label 222) |
| Fungible Token | Divisible, tradeable token | CIP-68 (label 333) |
| Rich Fungible Token | Fungible with detailed on-chain metadata | CIP-68 (label 444) |
| Programmable Token | Token with on-chain behavior rules | CIP-113 |
### Step 2: Search Bundled Documentation
Search the bundled documentation for relevant content:
- `${CLAUDE_SKILL_DIR}/../../docs/sources/cips/` - CIP specifications (CIP-25, CIP-68, CIP-113)
- `${CLAUDE_SKILL_DIR}/../../docs/sources/mesh-sdk/` - Mesh SDK docs
- `${CLAUDE_SKILL_DIR}/../../docs/sources/evolution-sdk/` - Evolution SDK docs
- `${CLAUDE_SKILL_DIR}/../../docs/sources/aiken/` - Aiken language docs
### Step 3: Choose the CIP Standard
Search `${CLAUDE_SKILL_DIR}/../../docs/sources/` for detailed CIP comparisons.
**CIP-25 (Simple Metadata)**
- Metadata stored in transaction metadata (label 721)
- Immutable after minting -- cannot update
- Simplest to implement
- Universally supported by wallets and marketplaces
- Best for: simple NFTs and collections that never need updates
**CIP-68 (Reference Tokens)**
- Metadata stored in a datum at a reference token UTxO
- Updatable by spending and recreating the reference UTxO
- Uses label pairs: 100 (reference) + 222 (NFT) / 333 (FT) / 444 (RFT)
- More complex to implement but far more flexible
- Best for: projects needing updatable metadata, rich fungible tokens,
or dynamic NFTs
**CIP-113 (Programmable Tokens — draft, unmerged PR #444)**
- Tokens are held at a shared script address; ownership is tracked by stake
credential, and validation logic runs on every transfer, mint, and burn
- An on-chain registry links each token to its transfer/issuance logic;
substandards (freeze-and-seize, KYC) plug into the shared framework
- Most complex; reference implementation is unaudited and not production-ready
- Best for: regulated tokens, stablecoins, and compliance-bound assets
See `references/cip-token-standards.md` for a detailed comparison.
### Step 4: Design the Minting Policy
The minting policy is a Cardano script that authorizes token creation.
**Native Script Policies (no Plutus needed):**
- **Time-locked:** Minting allowed only before a specific slot.
After the deadline, no more tokens can ever be minted. Good for
fixed-supply collections.
```json
{
"type": "all",
"scripts": [
{ "type": "sig", "keyHash": "<policy_key_hash>" },
{ "type": "before", "slot": 98765432 }
]
}
```
- **Multi-sig:** Require multiple signatures to mint.
**Plutus Script Policies (for complex logic):**
- **One-shot (NFT guarantee):** Consume a specific UTxO to ensure
the policy ID is unique and can only mint once.
- **Collection minting:** Allow minting multiple tokens under the
same policy with rules (e.g., max supply, whitelist).
- **CIP-68 minting:** Must mint the reference token (label 100)
alongside the user token (label 222/333/444) in the same transaction.
### Step 5: Design the Metadata Structure
#### CIP-25 Metadata
Attached to the minting transaction under label 721:
```json
{
"721": {
"<policy_id>": {
"<asset_name>": {
"name": "My NFT #1",
"image": "ipfs://QmXyz...",
"mediaType": "image/png",
"description": "Description of the NFT",
"attributes": {
"trait1": "value1",
"trait2": "value2"
}
}
}
}
}
```
Required fields: `name`, `image`
Optional but recommended: `mediaType`, `description`
#### CIP-68 Datum Metadata
Stored as a datum on the reference token UTxO:
```
Constr(0, [
// metadata map
Map([
(Bytes("name"), Bytes("My NFT #1")),
(Bytes("image"), Bytes("ipfs://QmXyz...")),
(Bytes("mediaType"), Bytes("image/png")),
(Bytes("description"), Bytes("Description")),
]),
// version
Int(1),
// extra (application-specific)
Constr(0, [])
])
```
The datum structure is: `Constr 0 [metadata_map, version, extra]`
- `metadata_map`: key-value pairs where keys are byte strings
- `version`: integer version number
- `extra`: application-specific data (use `Constr 0 []` for none)
### Step 6: Plan the Asset Name Encoding
Token asset names are byte strings (max 32 bytes). Conventions:
- **CIP-25 NFTs:** Use human-readable names, hex-encoded
(e.g., `"MyNFT001"` becomes `4d794e4654303031`)
- **CIP-68 tokens:** Prefix with the label in hex:
- Reference token: `000643b0` + name bytes (label 100)
- NFT user token: `000de140` + name bytes (label 222)
- FT user token: `0014df10` + name bytes (label 333)
- RFT user token: `001bc280` + name bytes (label 444)
### Step 7: Architecture Decisions
Guide the user through these design choices:
- **Supply model:** Fixed supply (time-lock policy) vs. ongoing minting
(Plutus policy with admin key)
- **Burnability:** Should tokens be burnable? Most policies allow it
by default. Time-locked policies make burning impossible after the deadline.
- **Metadata storage:** IPFS (decentralized, persistent) vs. HTTP URLs
(centralized, mutable). Prefer IPFS with CID pinning.
- **Royalties:** CIP-27 defines on-chain royalty info. Marketplaces may
or may not enforce it. CIP-113 can enforce royalties at the protocol level.
- **Collection grouping:** All tokens under one policy ID form a
"collection." Use one policy per logical collection.
### Step 8: Ecosystem Compatibility Checklist
Verify the design works with:
- [ ] Wallets: display name, image, and metadata correctly
- [ ] Marketplaces: JPG Store, CNFT.io recognize the token standard
- [ ] Explorers: CardanoScan, Cexplorer show metadata
- [ ] Token registries: Cardano Token Registry for fungible tokens
- [ ] IPFS: images and files are pinned and accessible
- [ ] Metadata standard: conforms to chosen CIP exactly
## Common Mistakes
- **Wrong label for CIP-68:** Using 721 (CIP-25) metadata label with
CIP-68 tokens. CIP-68 uses datums, not transaction metadata.
- **Exceeding 32-byte asset name limit:** Including the CIP-68 prefix
in the 32-byte calculation. The prefix IS part of the 32 bytes.
- **Not minting the reference token:** CIP-68 requires both the reference
token (100) and user token (222/333/444) to be minted together.
- **Forgetting mediaType:** Without `mediaType`, wallets may not render
the asset correctly.
- **Using HTTP URLs instead of IPFS:** HTTP URLs are mutable and can break.
Always prefer `ipfs://` URIs for permanence.
## References
- `references/cip-token-standards.md` -- detailed CIP-25 vs CIP-68 vs CIP-113 comparison
- CIP-25: https://cips.cardano.org/cip/CIP-25
- CIP-68: https://cips.cardano.org/cip/CIP-68
- CIP-113: https://cips.cardano.org/cip/CIP-113
- CIP-27 (Royalties): https://cips.cardano.org/cip/CIP-27
- Search `${CLAUDE_SKILL_DIR}/../../docs/sources/` for minting policy patterns and examples
Ver no GitHub