The Rpc connection is used to interact with the ZK Compression JSON RPC. It's a thin wrapper extending Solana's web3.js Connection class with compression-related endpoints, such as getCompressedAccount, getCompressedTokenBalancesByOwner, and more.
Example Usage with Devnet
conststateless=require("@lightprotocol/stateless.js");/// Helius exposes Solana and compression RPC endpoints through a single URLconstRPC_ENDPOINT="https://devnet.helius-rpc.com?api-key=<api_key>";constCOMPRESSION_RPC_ENDPOINT=RPC_ENDPOINT;constPROVER_ENDPOINT=RPC_ENDPOINTconstconnection:Rpc=createRpc(RPC_ENDPOINT,COMPRESSION_RPC_ENDPOINT,PROVER_ENDPOINT)asyncfunctionmain() {let slot =awaitconnection.getSlot();console.log(slot);let health =awaitconnection.getIndexerHealth(slot);console.log(health);// "Ok"}main();
Visit the JSON RPC Methods section for the full list of compression endpoints supported in Rpc .
Quickstart
Starting the test-validator for Local Development
lighttest-validator
The command above will start a single-node Solana cluster, an RPC node, and a prover node at ports 8899, 8784, and 3001.
Creating and Sending Transactions
Creating, Minting, and Transferring a Compressed Token
This example uses the compressed token program, which is built using ZK Compression and offers an SPL-compatible token layout.
import { LightSystemProgram, Rpc, confirmTx, createRpc,} from"@lightprotocol/stateless.js";import { createMint, mintTo, transfer } from"@lightprotocol/compressed-token";import { Keypair } from"@solana/web3.js";constpayer=Keypair.generate();consttokenRecipient=Keypair.generate();/// Localnet constconnection:Rpc=createRpc();constmain=async () => {/// Airdrop lamports to pay feesawaitconfirmTx( connection,awaitconnection.requestAirdrop(payer.publicKey,10e9) );awaitconfirmTx( connection,awaitconnection.requestAirdrop(tokenRecipient.publicKey,1e6) );/// Create a compressed token mintconst { mint,transactionSignature } =awaitcreateMint( connection, payer,payer.publicKey,9// Number of decimals );console.log(`create-mint success! txId: ${transactionSignature}`);/// Mint compressed tokens to the payer's accountconstmintToTxId=awaitmintTo( connection, payer, mint,payer.publicKey,// Destination payer,1e9// Amount );console.log(`Minted 1e9 tokens to ${payer.publicKey} was a success!`);console.log(`txId: ${mintToTxId}`);/// Transfer compressed tokensconsttransferTxId=awaittransfer( connection, payer, mint,7e8,// Amount payer,// OwnertokenRecipient.publicKey // To address );console.log(`Transfer of 7e8 ${mint} to ${tokenRecipient.publicKey} was a success!`);console.log(`txId: ${transferTxId}`);};main();
Creating Lookup Tables
For public networks, we provide shared lookup tables for Light's common program IDs and accounts