Skip to main content
The Light Token Program is a high performance token program that reduces the cost of account creations by 200x, while being more CU efficient than SPL on hot paths.
Account TypeKey Features
Mint AccountsCompressed account
  • Rent-free mint accounts (similar to SPL mints)
  • Custom Token Metadata extension
Token AccountsSolana account
  • Stores token balances of mints (SPL, Token-2022, or Light)
  • Sponsored rent exemption via custom rent-config

Mint Accounts

  • Light-mints are compressed accounts and cannot be decompressed. * SPL mints can not be compressed to light-mints.
Light-mints uniquely represent a token on Solana and store its global metadata, similar to SPL mint accounts with few core differences:
  1. Light-mint accounts are rent-free.
  2. Tokens created from light-mints are light-tokens.
  3. Token metadata (name, symbol, URI) is stored as an extension in the struct.
Creation CostSPLLight
Mint Account~1,500,000 lamports15,000 lamports
Diagram showing light-mint compressed account structure with three components: Hash (identifier for light-mint in purple box), Account (struct containing BaseMint with SPL-compatible fields, light-mint Data for program state, and optional Extensions for Token Metadata), and BasemintData (containing Supply, Decimals, Mint Authority, and Freeze Authority fields) with Token Metadata extension
The metadata field is used by the Compressed Token Program to store the internal state of a light-mint. The BaseMint field replicates the field layout and serialization format of SPL Mint accounts. The struct is serialized with Borsh to match the on-chain format of SPL tokens and mints. Here is how light-mints and SPL mints compare:
FieldLight-MintSPL Mint
mint_authority
supply
decimals
is_initialized
freeze_authority
Light-Mint Data-
Extensionsvia Token-2022

Token Account

Light token accounts are Solana accounts, not compressed accounts.
A light-token account holds token balances like SPL Token accounts:
  • A wallet needs a light-token account for each light-mint, SPL mint, or Token 2022 mint it wants to hold, with the wallet address set as the light-token account owner.
  • Each wallet can own multiple light-token accounts for the same light-mint.
  • A light-token account can only have one owner and hold units of one light-mint.
Creation CostSPLLight
Token Account~2,000,000 lamports~11,000 lamports
Additionally Light Token is more performant then SPL on hot paths:
light-token CUSPL-token CU
ATA Creation4,34814,194
Transfer (base path)3124,645
Transfer (rent-free hot path)1,8854,645
Diagram showing light-token Solana account structure with three components: Address (identifier for light-token account in purple box), Account (struct containing Data bytes, Executable flag, Lamports balance, and Owner set to Compressed Token Program), and AccountData (containing Mint, Owner, Amount, and Extensions fields)
Light token accounts replicate the field layout and serialization format of SPL Token accounts. The struct is serialized with Borsh to match the on-chain format of SPL tokens. Here is how light-tokens and SPL tokens compare:
FieldLight TokenSPL Token Account
mint
owner
amount
delegateunimplemented
state
is_native
delegated_amountunimplemented
close_authority
extensionsvia Token-2022

Rent Config for Light Tokens

  1. The rent-exemption for light-token account creation is sponsored by Light Protocol.
  2. Transaction payer’s pay rent
    to keep accounts “active”.
  3. “Inactive” accounts, where rent is below one epoch, are compressed
    and the rent-exemption can be claimed by the rent sponsor.
  4. Transfers to inactive accounts (decompress).
This way rent is automatically paid when accounts are used:
EventTotal CostPayerTime of Rent funded
Account CreationTransaction payerFunds 24h rent
Automatic Top ups
(when rent < 3h)
776 lamportsTransaction payerFunds 3h rent
Load Account
(when inactive)
Transaction payerFunds 24h rent
We recommend to use default values, but you can customize prepaid rent and top ups:

Associated Light Token Account

Associated light-token accounts (light-ATAs) follow the same pattern as associated token accounts (ATA):
  • Each wallet needs its own light-token account to hold tokens from the same light-mint.
  • The address for light-ATAs is deterministically derived with the owner’s address, light token program ID, and mint address.
let seeds = [
    owner.as_ref(),          // Wallet address (32 bytes)
    program_id.as_ref(),     // Compressed Token Program ID (32 bytes)
    mint.as_ref(),           // light-mint address (32 bytes)
    bump.as_ref(),           // Bump seed (1 byte)
];

Compressed Token Account

Under the hood, compressed token accounts store token balance, owner, and other information of inactive light-tokens.
  1. Light token accounts are automatically compressed/decompressed when active/inactive.
  2. Any light-token or SPL token can be compressed/decompressed at will.
You can still use compressed tokens for token distribution. Learn more about this here.
Diagram showing compressed token account structure with three components: Hash (identifier for compressed token account in purple box), Account (struct containing Data bytes, Executable flag, Lamports balance, and Address set to None), and AccountData (containing Mint, Owner, Amount, and Extensions fields marked as unimplemented)

Next Steps

Create Light Token Accounts