Skip to content
Launch App >

Detailed documentation for zklsol program instructions.

Deposit tokens into the privacy pool with a cryptographic commitment.

AccountWritableSignerDescription
signerYesYesDepositor wallet
signerTokenAccountYesNoDepositor’s token account
settingsNoNoProgram settings PDA
merkleYesNoMerkle tree PDA
merkleTokenAccountYesNoPool token account
mintNoNoToken mint
systemProgramNoNoSystem program
tokenProgramNoNoToken program
rentNoNoRent sysvar
interface DepositArgs {
commitment: number[]; // 32 bytes
amount: BN; // Amount in base units
}
await program.methods
.deposit({
commitment: Array.from(commitment),
amount: new BN(1000000),
})
.accounts({
signer: wallet.publicKey,
signerTokenAccount: userTokenAccount,
settings,
merkle,
merkleTokenAccount,
mint,
systemProgram: SystemProgram.programId,
tokenProgram: TOKEN_PROGRAM_ID,
rent: SYSVAR_RENT_PUBKEY,
})
.rpc();

Withdraw tokens using a ZK proof.

AccountWritableSignerDescription
signerYesYesRelayer/caller
settingsNoNoProgram settings
merkleYesNoMerkle tree
merkleTokenAccountYesNoPool token account
recipientNoNoRecipient address
recipientTokenAccountYesNoRecipient token account
mintNoNoToken mint
nullifierHashYesNoNullifier PDA (created)
feeCollectorYesNoFee collector
feeCollectorTokenAccountYesNoFee token account
systemProgramNoNoSystem program
tokenProgramNoNoToken program
interface WithdrawArgs {
nullifierHash: number[]; // 32 bytes
proof: number[]; // 256 bytes
root: number[]; // 32 bytes
depositSize: BN;
}

Withdraw and swap tokens in one operation.

Similar to withdraw plus:

AccountDescription
swapTokenAccountIntermediate swap account
outputMintOutput token mint
outputTokenAccountOutput token destination
interface WithdrawSwapArgs {
nullifierHash: number[];
proof: number[];
root: number[];
depositSize: BN;
// Jupiter swap data passed via remaining accounts
}

Recover funds from an unindexed deposit.

AccountWritableSignerDescription
signerYesYesOriginal depositor
signerTokenAccountYesNoDepositor’s token account
settingsNoNoProgram settings
merkleYesNoMerkle tree
merkleTokenAccountYesNoPool token account
mintNoNoToken mint
nullifierHashNoNoCheck not spent
systemProgramNoNoSystem program
tokenProgramNoNoToken program
interface RevertArgs {
nullifier: number[]; // 32 bytes - original nullifier
secret: number[]; // 32 bytes - original secret
commitment: number[]; // 32 bytes - commitment hash
}

Create an Address Lookup Table for the user.

AccountWritableSignerDescription
signerYesYesUser wallet
userAddressLookupTableYesNoUser LUT PDA
addressLookupTableYesNoActual LUT account
systemProgramNoNoSystem program
addressLookupTableProgramNoNoALT program
rentNoNoRent sysvar
interface CreateAddressLookupTableArgs {
recentSlot: BN; // Recent slot for derivation
}

Add addresses to an existing LUT.

AccountWritableSignerDescription
signerYesYesLUT owner
userAddressLookupTableNoNoUser LUT PDA
addressLookupTableYesNoActual LUT
addressLookupTableProgramNoNoALT program

Pass addresses to add as remaining accounts.


Register as an affiliate.

AccountWritableSignerDescription
signerYesYesAffiliate wallet
affiliateYesNoAffiliate PDA
settingsNoNoProgram settings
systemProgramNoNoSystem program
interface CreateAffiliateArgs {
affiliateCode: number[]; // Unique code
feeShareBps: number; // Fee share in basis points
}

Create token account for affiliate earnings.

AccountWritableSignerDescription
signerYesYesAffiliate
affiliateNoNoAffiliate PDA
affiliateTokenAccountYesNoToken account to create
mintNoNoToken mint
tokenProgramNoNoToken program
associatedTokenProgramNoNoATA program
systemProgramNoNoSystem program

Withdraw accumulated affiliate earnings.

AccountWritableSignerDescription
signerYesYesAffiliate
affiliateYesNoAffiliate PDA
affiliateTokenAccountYesNoAffiliate token account
destinationTokenAccountYesNoWhere to send earnings
tokenProgramNoNoToken program

These instructions are restricted to program authority:

InstructionPurpose
create_settingsInitialize program
update_settingsUpdate configuration
create_merkleCreate new Merkle tree
create_merkle_nodeInitialize tree node
update_merkle_feesUpdate fee rates
create_fee_collectorCreate fee collector
withdraw_fee_collectorWithdraw fees