Create and Register a Mint Account for Compression
Complete guide to create and register an SPL token mint account for compression with createMint(), troubleshooting and advanced configurations.
The mint account itself requires rent (like regular SPL mints), but individual compressed token accounts are rent-free.
Compressed tokens use an SPL mint that is registered with the compressed token program. Connect an existing SPL mint with createTokenPool() or use createMint() to create a new one from scratch.
Copy
Ask AI
// Create SPL mint with token pool for compressionconst { mint, transactionSignature } = await createMint( rpc, payer, mintAuthority.publicKey, decimals,);
Best Practice: Each mint supports a maximum of 4 token pools total. During compression/decompression operations, token pools get write-locked. Use addTokenPools() to create additional pools that increase per-block write-lock capacity.
Developer EnvironmentBy default, this guide uses Localnet.
Copy
Ask AI
# Install the development CLInpm install @lightprotocol/zk-compression-cli
Copy
Ask AI
# Start a local test validatorlight test-validator## ensure you have the Solana CLI accessible in your system PATH
Copy
Ask AI
// createRpc() defaults to local test validator endpointsimport { Rpc, createRpc,} from "@lightprotocol/stateless.js";const connection: Rpc = createRpc();async function main() { let slot = await connection.getSlot(); console.log(slot); let health = await connection.getIndexerHealth(slot); console.log(health); // "Ok"}main();
Alternative: Using DevnetFollow these steps to create an RPC Connection. Replace <your_api_key> with your API key before running.
Run this script to create a mint account with token pool for compression.
create-mint.ts
Copy
Ask AI
// 1. Setup funded payer and connect to local validator// 2. Create SPL mint with token pool for compression via createMint()import { Keypair } from '@solana/web3.js';import { createRpc } from '@lightprotocol/stateless.js';import { createMint } from '@lightprotocol/compressed-token';async function createCompressedMint() { // Step 1: Setup funded payer and connect to local validator const rpc = createRpc(); // defaults to localhost:8899 const payer = Keypair.generate(); const airdropSignature = await rpc.requestAirdrop(payer.publicKey, 1000000000); // 1 SOL await rpc.confirmTransaction(airdropSignature); // Step 2: Call createMint() to create mint account and token pool for compression const { mint, transactionSignature } = await createMint( rpc, payer, payer.publicKey, // mint authority 9 ); console.log("SPL mint with token pool for compression created"); console.log("Mint address:", mint.toBase58()); console.log("Transaction:", transactionSignature); return { mint, transactionSignature };}createCompressedMint().catch(console.error);