Fungible Tokens
Sui provides two standards for creating fungible tokens. Both produce Coin<T> objects that are fully interoperable with wallets, DeFi protocols, and address balances. The difference is in how you create, configure, and manage the token's metadata and supply.
Coin standard vs currency standard
| Feature | Coin Standard | Currency Standard |
|---|---|---|
| Creation function | coin::create_currency | coin_registry::new_currency or new_currency_with_otw |
| Metadata storage | Standalone CoinMetadata object | Centralized in CoinRegistry at 0xc |
| Supply models | Uncontrolled only | Fixed, burn-only, or uncontrolled |
| Regulatory support | create_regulated_currency_v2 | make_regulated() during initialization |
| Metadata updates | Requires TreasuryCap | Dedicated MetadataCap (can be frozen or deleted) |
| RPC discovery | Requires knowing CoinMetadata object ID | Queryable from the central registry |
| Status | Active | Recommended for new projects |
Choosing a standard
Use the following guidance to pick the right standard for your project:
For new tokens, use the Currency Standard. It provides richer supply controls, centralized metadata discovery, and a dedicated MetadataCap for metadata management.
Creating a new token
-
Most projects: Use
coin_registry::new_currency. You can call this at any time after publishing your package. See Create Fungible Tokens: Currency Standard. -
Need a One-Time Witness proof: Use
coin_registry::new_currency_with_otwin your module'sinitfunction. This requires a two-step publish-then-finalize process. -
Need the legacy Coin Standard: Use
coin::create_currencyin your module'sinitfunction. See Create Fungible Tokens: Coin Standard.
Configuring supply
Only the Currency Standard supports supply model configuration:
- Fixed supply: Mint the total supply during initialization, then call
make_supply_fixedto lock theTreasuryCapinside theCurrency. No further minting or burning is possible. - Burn-only (deflationary): Mint the initial supply, then call
make_supply_burn_onlyto prevent future minting while still allowing burns. - Uncontrolled: The default. The
TreasuryCapholder can mint and burn freely.
Adding regulatory controls
Both standards support regulated tokens with deny-list capabilities. The Currency Standard simplifies this with make_regulated(allow_global_pause, ctx) during initialization, which returns a DenyCapV2 for managing the deny list. See Regulated Tokens for deny-list management.
Migrating an existing token
If you have an existing Coin Standard token, the Currency Standard provides migration functions to register your coin in the CoinRegistry while preserving its existing CoinMetadata object ID. See the Currency Standard reference for migration details.
Example patterns
These guides show common token configurations in action:
- Fixed-supply token: Mint a capped supply at creation and freeze it permanently.
- In-game currency: Mintable game tokens with admin controls.
- Loyalty tokens: Non-transferable reward points using the Closed-Loop Token standard.
- Regulated tokens: Tokens with deny-list and global pause capabilities.
Coin Standard
Currency Standard
Regulated Currencies
Create regulated currencies on Sui using the Coin Registry system with deny list capabilities for access control.
Token Vesting Strategies
Implement a vesting strategy for your token launch on Sui to strengthen long-term commitment, prevent market dumps, and align stakeholder incentives.
Bridging Tokens
Moving tokens from one blockchain to another is called bridging. To bridge tokens from another blockchain to Sui, you can use the Sui Bridge, Wormhole Connect, Wormhole Portal Bridge, or ZetaChain.