Design Cardano native token, NFT, NFT collection, fungible token, CIP-25 metadata, CIP-68 reference tokens, CIP-113 programmable tokens, minting policy, token architecture.
Scanned 9/7/2026
Install to Claude Code
npx -y skills add jiayaoqijia/cryptoskill --skill cardano-foundation-design-token --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Cardano Foundation Design Token?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/jiayaoqijia-cardano-foundation-design-token)More formats (shields.io, HTML) on the badges page.
---
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
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!