1
Prerequisites
Installation
Installation
- npm
- yarn
- pnpm
Install packages in your working directory:Install the CLI globally:
Report incorrect code
Copy
Ask AI
npm install @lightprotocol/stateless.js@alpha \
@lightprotocol/compressed-token@alpha
Report incorrect code
Copy
Ask AI
npm install -g @lightprotocol/zk-compression-cli@alpha
Install packages in your working directory:Install the CLI globally:
Report incorrect code
Copy
Ask AI
yarn add @lightprotocol/stateless.js@alpha \
@lightprotocol/compressed-token@alpha
Report incorrect code
Copy
Ask AI
yarn global add @lightprotocol/zk-compression-cli@alpha
Install packages in your working directory:Install the CLI globally:
Report incorrect code
Copy
Ask AI
pnpm add @lightprotocol/stateless.js@alpha \
@lightprotocol/compressed-token@alpha
Report incorrect code
Copy
Ask AI
pnpm add -g @lightprotocol/zk-compression-cli@alpha
- Localnet
- Devnet
Report incorrect code
Copy
Ask AI
# start local test-validator in a separate terminal
light test-validator
In the code examples, use
createRpc() without arguments for localnet.Get an API key from Helius and add to
.env:.env
Report incorrect code
Copy
Ask AI
API_KEY=<your-helius-api-key>
In the code examples, use
createRpc(RPC_URL) with the devnet URL.2
Mint Compressed Tokens
Report incorrect code
Copy
Ask AI
// 1. Load wallet and connect to Localnet
// 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")))
);
// Connect to local test-validator
const RPC_ENDPOINT = "http://localhost:8899";
const COMPRESSION_ENDPOINT = "http://localhost:8784";
const PROVER_ENDPOINT = "http://localhost:3001";
const connection = createRpc(RPC_ENDPOINT, COMPRESSION_ENDPOINT, PROVER_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=custom&customUrl=http://localhost:8899`
);
// 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=custom&customUrl=http://localhost:8899`
);
// 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);