+
+ | Field | +Light-Mint | +SPL Mint | +
|---|---|---|
| mint_authority | +✓ | +✓ | +
| supply | +✓ | +✓ | +
| decimals | +✓ | +✓ | +
| is_initialized | +✓ | +✓ | +
| freeze_authority | +✓ | +✓ | +
| Light-Mint Data | +✓ | +- | +
| Extensions | +✓ | +via Token-2022 | +
+
+ | Field | +Light-Token | +SPL Token Account | +
|---|---|---|
| mint | +✓ | +✓ | +
| owner | +✓ | +✓ | +
| amount | +✓ | +✓ | +
| delegate | +unimplemented | +✓ | +
| state | +✓ | +✓ | +
| is_native | +✓ | +✓ | +
| delegated_amount | +unimplemented | +✓ | +
| close_authority | +✓ | +✓ | +
| extensions | +✓ | +via Token-2022 | +
+
+ | Extension Name | +Description | +light-token | +Compressed Token | +
|---|---|---|---|
| MetadataPointer | - | ✓ | ✓ |
| TokenMetadata | - | ✓ | ✓ |
| InterestBearingConfig | - | ✓ | ✓ |
| GroupPointer | - | ✓ | ✓ |
| GroupMemberPointer | - | ✓ | ✓ |
| TokenGroup | - | ✓ | ✓ |
| TokenGroupMember | - | ✓ | ✓ |
| MintCloseAuthority | - | ✓ | - |
| TransferFeeConfig | fees must be zero | ✓ | - |
| DefaultAccountState | any state allowed | ✓ | - |
| PermanentDelegate | - | ✓ | - |
| TransferHook | program_id must be nil | ✓ | - |
| Pausable | - | ✓ | - |
| ConfidentialTransferMint | initialized but not enabled | ✓ | - |
| ConfidentialTransferFeeConfig | fees must be zero | ✓ | - |
| ConfidentialMintBurn | initialized but not enabled | ✓ | - |
| **light-token -> light-token Account** | +
+
|
+
| **SPL token -> light-token Account** | +
+
|
+
| **light-token -> SPL Account** | +
+
|
+
| + | light-token | +SPL Token | +
|---|---|---|
| **Get/Create ATA** | +getOrCreateAtaInterface() | +getOrCreateAssociatedTokenAccount() | +
| **Derive ATA** | +getAssociatedTokenAddressInterface() | +getAssociatedTokenAddress() | +
| **Transfer** | +transferInterface() | +transferChecked() | +
| **Get Balance** | +getAtaInterface() | +getAccount() | +
| **Tx History** | +rpc.getSignaturesForOwnerInterface() | +getSignaturesForAddress() | +
| **Exit to SPL** | +unwrap() | +N/A | +
| + | light-token | +SPL Token | +
|---|---|---|
| **Get/Create ATA** | +getOrCreateAtaInterface() | +getOrCreateAssociatedTokenAccount() | +
| **Derive ATA** | +getAssociatedTokenAddressInterface() | +getAssociatedTokenAddress() | +
| **Transfer** | +transferInterface() | +transferChecked() | +
| **Get Balance** | +getAtaInterface() | +getAccount() | +
| **Tx History** | +rpc.getSignaturesForOwnerInterface() | +getSignaturesForAddress() | +
| **Exit to SPL** | +unwrap() | +N/A | +
| + | + | + |
|---|---|---|
| Token Program | +- | +The light-token program for CPI. | +
| Account | +mutable | +The light-token account to close. | +
| Destination | +mutable | +Receives remaining lamports from the closed account. | +
| Owner | +signer* | +
+ - Owner of the light-token account. + - *Must be signer for `invoke()`. For `invoke_signed()`, program signs via PDA seeds. + |
+
| Rent Sponsor | +mutable, optional | ++ * light-token program PDA that fronts rent exemption at creation. + * Claims rent when account compresses and/or is closed. + | +
| + | Account | +Description | +
|---|---|---|
| 1 | +Verifies validity proofs and executes compressed account state transitions. | +|
| 2 | +CPI Authority PDA | +PDA that authorizes CPIs from the Compressed Token Program to the Light System Program. | +
| 3 | +Registered Program PDA | +Proves the Compressed Token Program is registered to use compression. | +
| 4 | +Signs CPI calls from the Light System Program to the Account Compression Program. | +|
| 5 | +Writes to state and address Merkle tree accounts. | +|
| 6 | +Solana System Program. | +
| Account | +Type | +Description | +
|---|---|---|
| Authority | +signer | +The mint authority. Must match the light-mint's mint authority. | +
| Payer | +signer, mutable | +Pays transaction fees. | +
| State Tree | +mutable | +Account of the state Merkle tree storing the light-mint. | +
| Input Queue | +mutable | +Account of the input queue associated with the state tree the light-mint is stored in. The existing hash of the light-mint is |
+
| Output Queue | +mutable | +Account of the output queue associated with the state tree the light-mint will be stored in. The updated hash of the light-mint is |
+
| light-token Accounts | +mutable | +Destination light-token Solana accounts to receive minted tokens. | +
| System Accounts | +- | +See System Accounts List above. | +
| CPI Context | +optional (none for most) |
+ Enables batched compressed account operations across multiple programs with a single validity proof. Set to `None` for most operations. | +
| CPI Context Account | +optional, mutable | +On-chain account that temporarily stores instruction data from multiple CPIs for combined execution. Set to `None` for most operations. | +
| + | + | Constraints | +Description | +
|---|---|---|---|
| 0 | +Payer | +signer, mutable | +
+ - Pays transaction fee and compression incentive (prepaid epochs). + - Does NOT pay rent exemption (fronted by `rent_sponsor`). + |
+
| 1 | +Token Account | +signer*, mutable | +
+ - The light-token account being created. + - *Must be signer for `invoke()`. + - *For `invoke_signed()`, program signs via PDA seeds. + |
+
| 2 | +Mint | +- | +The SPL or light-mint token mint. Defines which token this account holds. | +
| 3 | +- | ++ Protocol PDA that stores rent config and compression authorities. + | +|
| 4 | +- | +Solana System Program. Required for CPI to create the on-chain account. | +|
| 5 | +mutable | +
+ - light-token program PDA that fronts rent exemption at creation. + - Claims rent when account compresses. + |
+ |
| 6 | +- | ++ - Program to create and interact with light-mints, light-tokens and compressed tokens. + - Your program calls this to create the light-token account. + | +
| + | + | + |
|---|---|---|
| Payer | +signer, mutable | +
+ - Pays initial rent per epoch, transaction fee and compression incentive. + - Does NOT pay rent exemption (fronted by `rent_sponsor`). + |
+
| light-token Account | +signer*, mutable | +
+ - The light-token account being created. + - *Must be signer for `invoke()`. For `invoke_signed()`, program signs via PDA seeds. + |
+
| Mint | +- | +The SPL or light-mint token mint. | +
| Owner | +Pubkey | +The owner of the token account. Controls transfers and other operations. | +
| + | + | + |
|---|---|---|
| Owner | +- | +
+ - The wallet that will own this light-ATA. + - Used to derive the light-ATA address deterministically. + |
+
| Mint | +- | +
+ - The SPL or light-mint token mint. + - Used to derive the light-ATA address deterministically. + |
+
| Payer | +signer, mutable | +
+ - Pays initial rent per epoch, transaction fee and compression incentive. + - Does NOT pay rent exemption (fronted by `rent_sponsor`). + |
+
| light-ATA Account | +mutable | +
+ - The light-ATA being created. + - Address is derived from `[owner, ctoken_program_id, mint]`. + |
+
| - | +Solana System Program. Required for CPI to create the on-chain account. | +|
| Bump | +u8 | +The PDA bump seed for the light-ATA address derivation. | +
| Idempotent | +bool | +
+ - When `true`, silently succeeds if account already exists. + - When `false`, fails if account already exists. + |
+
| + | + | + |
|---|---|---|
| Source Account | +mutable | +The source account (SPL token account or light-token account). | +
| Destination Account | +mutable | +The destination account (SPL token account or light-token account). | +
| Authority | +signer* | +
+ - Owner of the source account. + - *Must be signer for `invoke()`. For `invoke_signed()`, program signs via PDA seeds. + |
+
| Payer | +signer, mutable | +Pays transaction fees. | +
| Compressed Token Program Authority | +- | +The light-token program authority PDA. | +
| + | + | + |
|---|---|---|
| Mint | +- | +The SPL token mint. | +
| SPL Token Program | +- | +The SPL Token program. | +
| Interface PDA | +mutable | +Interface PDA for SPL ↔ light-token transfers. | +
| Event | +Total Cost | +Payer | +Time of Rent funded | +
|---|---|---|---|
| Account Creation | +Transaction payer | +Funds 24h rent | +|
| Automatic Top ups (when rent < 3h) |
+ 776 lamports | +Transaction payer | +Funds 3h rent | +
| Load Account (when inactive) |
+ Transaction payer | +Funds 24h rent | +
| Component | +Amount | +Description | +|
|---|---|---|---|
| Prepaid rent | +388 × N epochs* | +Rent for N epochs | +|
| + | + | + | + |
| Compression cost & incentive | +10,000 lamports + 1,000 lamports |
+ Transaction cost for compression + protocol incentive |
+ |
| Transaction fee | +5,000 lamports | +Standard Solana tx fees (excl. priority fee) | +
| Account State | +Payer Cost | +Example | +
|---|---|---|
| Funded for 2+ epochs | +0 lamports | +No top-up required | +
| Funded for less than 2 epochs | +`lamports_per_write` | +Configured as 5,000 lamports → payer pays 5,000 lamports |
+
| Compressible (ran out of rent) |
+ `lamports_per_write + rent_deficit` | +Configured top-up: 5,000 lamports Rent deficit: 3,000 lamports Total payer cost: 8,000 lamports |
+
| Extension Name | +Description | +Light-Token | +Compressed Token | +
|---|---|---|---|
| {ext.name} | +{ext.description} | +✓ | +{hasRuntimeConstraint(ext.name) ? '-' : '✓'} | +
| + | + |
|---|---|
| + Protocol PDA that stores account rent config. + | +|
|
+ - light-token program PDA that fronts rent exemption at creation. + - Claims rent when account compresses. + |
+ |
| Solana System Program to create the on-chain account. | +
| + | + |
|---|---|
| + Protocol PDA that stores account rent config. + | +|
|
+ - CToken program PDA that fronts rent exemption at creation. + - Claims rent when account compresses. + |
+ |
| Solana System Program to create the on-chain account. | +
| **light-token → light-token Account** | +
+
|
+
| **SPL token → light-token Account** | +
+
|
+
| **light-token → SPL Account** | +
+
|
+