aptos-token-standards
Expert on Aptos token standards including fungible tokens (Coin framework, Fungible Asset), NFTs (Digital Asset/Token V2), collections, metadata, minting, burning, royalties, and transfer patterns.
- License 许可
- MIT
- 最近更新
- 2026-04-16
- Stars
- ★ 52
- Forks
- 13
01 前言 Front Matter
- name
- aptos-token-standards
- model
- sonnet
- license
- MIT
- metadata
- { "author": "raintree", "version": "1.0" }
- description
- Expert on Aptos token standards including fungible tokens (Coin framework, Fungible Asset), NFTs (Digital Asset/Token V2), collections, metadata, minting, burning, royalties, and transfer patterns.
- allowed-tools
- Read, Write, Edit, Grep, Glob, Bash
03 SKILL.md 正文
Aptos Token Standards Expert
Expert on Aptos token standards for fungible and non-fungible tokens.
Triggers
- token, nft, fungible asset
- coin, digital asset, collection
- mint, burn, metadata, royalty
- Token V1, Token V2
Token Frameworks Overview
| Framework | Type | Status | Use For |
|---|---|---|---|
| Coin (0x1::coin) | Fungible | Current | Simple tokens, APT |
| Fungible Asset | Fungible | Current | Advanced features |
| Token V1 (0x3) | NFT | Deprecated | Legacy only |
| Digital Asset (0x4) | NFT | Current | All new NFTs |
Coin Framework
Create Coin
module my_addr::my_coin {
use aptos_framework::coin;
struct MyCoin {}
struct Caps has key {
mint_cap: coin::MintCapability<MyCoin>,
burn_cap: coin::BurnCapability<MyCoin>,
}
fun init_module(sender: &signer) {
let (burn_cap, freeze_cap, mint_cap) = coin::initialize<MyCoin>(
sender,
string::utf8(b"My Coin"),
string::utf8(b"MYC"),
8, // decimals
true, // monitor_supply
);
move_to(sender, Caps { mint_cap, burn_cap });
}
}
Coin Operations
// Mint
let coins = coin::mint(amount, &caps.mint_cap);
coin::deposit(recipient, coins);
// Burn
let coins = coin::withdraw<MyCoin>(account, amount);
coin::burn(coins, &caps.burn_cap);
// Transfer
coin::transfer<MyCoin>(from, to, amount);
// Balance
coin::balance<MyCoin>(account);
// Register to receive
coin::register<MyCoin>(account);
Fungible Asset Framework
Create Fungible Asset
use aptos_framework::fungible_asset::{Self, MintRef, BurnRef, TransferRef};
use aptos_framework::primary_fungible_store;
struct Refs has key {
mint_ref: MintRef,
burn_ref: BurnRef,
transfer_ref: TransferRef,
}
fun init_module(admin: &signer) {
let constructor_ref = &object::create_named_object(admin, b"MY_FA");
primary_fungible_store::create_primary_store_enabled_fungible_asset(
constructor_ref,
option::none(), // max_supply
string::utf8(b"My FA"),
string::utf8(b"MFA"),
8,
string::utf8(b"https://icon.png"),
string::utf8(b"https://project.com"),
);
move_to(admin, Refs {
mint_ref: fungible_asset::generate_mint_ref(constructor_ref),
burn_ref: fungible_asset::generate_burn_ref(constructor_ref),
transfer_ref: fungible_asset::generate_transfer_ref(constructor_ref),
});
}
FA Operations
// Mint
let fa = fungible_asset::mint(&refs.mint_ref, amount);
primary_fungible_store::deposit(recipient, fa);
// Burn
let fa = primary_fungible_store::withdraw(holder, amount);
fungible_asset::burn(&refs.burn_ref, fa);
// Freeze
fungible_asset::set_frozen_flag(&refs.transfer_ref, account, true);
Digital Asset (NFT - Token V2)
Create Collection
use aptos_token_objects::collection;
collection::create_unlimited_collection(
creator,
string::utf8(b"Description"),
string::utf8(b"Collection Name"),
option::none(), // royalty
string::utf8(b"https://collection.uri"),
);
// Or fixed supply
collection::create_fixed_collection(creator, description, max_supply, name, royalty, uri);
Mint NFT
use aptos_token_objects::token;
let constructor_ref = token::create_named_token(
creator,
collection_name,
string::utf8(b"Description"),
token_name,
option::none(), // royalty
string::utf8(b"https://token.uri"),
);
// Transfer to recipient
let transfer_ref = object::generate_transfer_ref(&constructor_ref);
let linear_ref = object::generate_linear_transfer_ref(&transfer_ref);
object::transfer_with_ref(linear_ref, recipient);
NFT Properties
use aptos_token_objects::property_map;
let mutator_ref = property_map::generate_mutator_ref(&constructor_ref);
property_map::add_typed(&mutator_ref, string::utf8(b"level"), 1u64);
property_map::add_typed(&mutator_ref, string::utf8(b"rarity"), string::utf8(b"legendary"));
// Update later
property_map::update_typed(&mutator_ref, &string::utf8(b"level"), 2u64);
NFT Transfer & Burn
// Transfer
object::transfer(owner, token_object, recipient);
// Burn
token::burn(owner, token_object);
Royalties
use aptos_token_objects::royalty;
let royalty = royalty::create(
5, // numerator (5%)
100, // denominator
payee_address
);
collection::create_unlimited_collection(
creator, description, name,
option::some(royalty), // royalty
uri
);
Comparison
Coin vs Fungible Asset
| Feature | Coin | Fungible Asset |
|---|---|---|
| Simplicity | Simple | More complex |
| Flexibility | Limited | Extensive |
| Freeze/Pause | Yes | Yes (more control) |
| Adoption | Wide | Growing |
Token V1 vs Digital Asset
| Feature | Token V1 | Digital Asset |
|---|---|---|
| Object model | No | Yes |
| Composability | Limited | High |
| Soul-bound | No | Yes |
| Status | Deprecated | Current |
Best Practices
- Use Digital Asset for all new NFT projects
- Use Fungible Asset for advanced token features
- Store capability refs securely
- Validate inputs before minting
- Consider upgrade patterns early
- Test thoroughly before mainnet
TypeScript Integration
// Coin balance
const balance = await aptos.getAccountCoinAmount({
accountAddress: "0x...",
coinType: "0x1::aptos_coin::AptosCoin"
});
// NFTs
const tokens = await aptos.getAccountOwnedTokens({ accountAddress: "0x..." });
// Token data
const data = await aptos.getDigitalAssetData({ digitalAssetAddress: "0x..." });
04 同仓库更多 Skills
what-if-oracle
Run structured What-If scenario analysis with multi-branch possibility exploration. Use this skill when the user asks speculative questions like "what if...", "what would happen if...", "what are the possibilities", "explore scenarios", "scenario analysis", "possibility space", "what could go wrong", "best case / worst case", "risk analysis", "contingency planning", "strategic options", or any question about uncertain futures. Also trigger when the user faces a fork-in-the-road decision, wants to stress-test an idea, or needs to think through consequences before committing.
venue-templates
Access comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
the-fool
Use when challenging ideas, plans, decisions, or proposals using structured critical reasoning. Invoke to play devil's advocate, run a pre-mortem, red team, or audit evidence and assumptions.
scientific-writing
Core skill for the deep research and writing tool. Write scientific manuscripts in full paragraphs (never bullet points). Use two-stage process with (1) section outlines with key points using research-lookup then (2) convert to flowing prose. IMRAD structure, citations (APA/AMA/Vancouver), figures/tables, reporting guidelines (CONSORT/STROBE/PRISMA), for research papers and journal submissions.
scientific-brainstorming
Creative research ideation and exploration. Use for open-ended brainstorming sessions, exploring interdisciplinary connections, challenging assumptions, or identifying research gaps. Best for early-stage research planning when you do not have specific observations yet. For formulating testable hypotheses from data use hypothesis-generation.
research-lookup
Look up current research information using the Parallel Chat API (primary) or Perplexity sonar-pro-search (academic paper searches). Automatically routes queries to the best backend. Use for finding papers, gathering research data, and verifying scientific information.