Quickstart
Create your first compressed token in minutes.
Create your first compressed tokens
With this guide you will mint compressed tokens in under 5 minutes.
1
Install Dependencies
npm install --save-dev typescript tsx @types/node &&
npm install \
@lightprotocol/stateless.js \
@lightprotocol/compressed-token \
@solana/web3.js \
@solana/spl-token
2
Create an RPC connection
Run test-connection.ts
to verify your setup:
Replace <api_key>
with your actual API key before running! Get one here, if you don't have one yet.
import { createRpc } from "@lightprotocol/stateless.js";
// Helius exposes Solana and Photon RPC endpoints through a single URL
const RPC_ENDPOINT = "https://devnet.helius-rpc.com?api-key=<api_key>";
const connection = createRpc(RPC_ENDPOINT, RPC_ENDPOINT, RPC_ENDPOINT);
console.log("Connection created");
console.log("RPC Endpoint:", RPC_ENDPOINT);
3
Create and Mint Compressed Tokens
Run quickstart.ts
with the following code:
// ZK Compression Quickstart - DevNet
// 1. Load wallet and connect to DevNet via Helius RPC
// 2. Create SPL mint with token pool for compression via createMint()
// 3. Mint compressed tokens to recipient account via mintTo()
// 4. Verify compressed token balance via getCompressedTokenAccountsByOwner
import { createRpc } from "@lightprotocol/stateless.js";
import { createMint, mintTo } from "@lightprotocol/compressed-token";
import { Keypair } from "@solana/web3.js";
import { readFileSync } from "fs";
import { homedir } from "os";
// Step 1: Load wallet from filesystem
const payer = Keypair.fromSecretKey(new Uint8Array(JSON.parse(readFileSync(`${homedir()}/.config/solana/id.json`, "utf8"))));
// Helius exposes Solana and compression RPC endpoints through a single URL
const RPC_ENDPOINT = "https://devnet.helius-rpc.com?api-key=<API_KEY>";
const connection = createRpc(RPC_ENDPOINT, RPC_ENDPOINT, RPC_ENDPOINT);
const main = async () => {
try {
// Step 2: Create SPL mint with token pool for compression
console.log("\nCreating SPL mint with token pool for compression");
const { mint, transactionSignature } = await createMint(
connection,
payer,
payer.publicKey, // mintAuthority
9
);
console.log(`Mint address: ${mint.toBase58()}`);
console.log(`Create mint transaction: https://explorer.solana.com/tx/${transactionSignature}?cluster=devnet`);
// Step 3: Mint compressed tokens to recipient account
console.log("\nMinting compressed token...");
const mintAmount = 1000000000; // mintAmount with decimals
const mintToTxId = await mintTo(
connection,
payer,
mint, // SPL mint with token pool for compression
payer.publicKey, // recipient.publicKey
payer, // mintAuthority
mintAmount
);
console.log(`Compressed Token minted ${mintAmount / 1e9} token`);
console.log(`Transaction: https://explorer.solana.com/tx/${mintToTxId}?cluster=devnet`);
// Step 4: Verify compressed token balance via getCompressedTokenAccountsByOwner
const tokenAccounts = await connection.getCompressedTokenAccountsByOwner(
payer.publicKey,
{ mint } // SPL mint with token pool for compression
);
} catch (error: any) {
console.error("Error:", error.message);
}
};
main().catch(console.error);
4
Success!
That's it - you've created and minted compressed tokens. The output shows:
Address of SPL mint with token pool for compression
Compressed Token balance
Next Steps
Get an overview of compressed tokens and dive right into the cookbook.
Compressed TokensLast updated