Skip to content
Launch App >

This page lists all the addresses and endpoints you need to integrate with Turbine.cash.

The zklsol program is deployed at the same address on all networks:

FGKoWNsvTTDCGW9JyR2DJWNzSXpejWk7yXcKsFFj9GQp
NetworkBase URL
Mainnethttps://worker.turbine.cash
Devnethttps://api-devnet.turbine.cash

Merkle trees are PDAs derived from:

seeds = ["Merkle", mint, depth]
TokenMintMerkle Tree Address
[PLACEHOLDER: MAINNET_MERKLE_ADDRESS]
TokenMintMerkle Tree Address
[PLACEHOLDER: DEVNET_MERKLE_ADDRESS]
PDASeeds
Settings["Settings"]
Merkle["Merkle", mint, depth]
MerkleZeros["MerkleZeros", mint, depth]
MerkleToken["MerkleToken", mint, depth]
MerkleNode["MerkleNode", mint, depth, index]
NullifierHash["NullifierHash", mint, depth, nullifier_hash]
FeeCollector["FeeCollector"]
Affiliate["Affiliate", affiliate_code]
import { PublicKey } from '@solana/web3.js';
const PROGRAM_ID = new PublicKey('FGKoWNsvTTDCGW9JyR2DJWNzSXpejWk7yXcKsFFj9GQp');
const CONFIG = {
mainnet: {
apiUrl: 'https://worker.turbine.cash',
rpcUrl: 'https://api.mainnet-beta.solana.com',
programId: PROGRAM_ID,
},
devnet: {
apiUrl: 'https://api-devnet.turbine.cash',
rpcUrl: 'https://api.devnet.solana.com',
programId: PROGRAM_ID,
},
};
// Derive Merkle tree PDA
function getMerkleAddress(mint: PublicKey, depth: number): PublicKey {
const [address] = PublicKey.findProgramAddressSync(
[
Buffer.from('Merkle'),
mint.toBuffer(),
Buffer.from([depth]),
],
PROGRAM_ID
);
return address;
}
// Derive nullifier hash PDA
function getNullifierHashAddress(
mint: PublicKey,
depth: number,
nullifierHash: Uint8Array
): PublicKey {
const [address] = PublicKey.findProgramAddressSync(
[
Buffer.from('NullifierHash'),
mint.toBuffer(),
Buffer.from([depth]),
nullifierHash,
],
PROGRAM_ID
);
return address;
}

The protocol uses depth 32 Merkle trees exclusively:

const MERKLE_DEPTH = 32;
// Maximum deposits per tree
const MAX_DEPOSITS = 2 ** 32; // ~4.3 billion

For production applications:

ProviderNotes
HeliusRecommended for mainnet
QuickNodeGood alternative
TritonBudget-friendly option
Public RPCOnly for testing (rate limited)
// Example with Helius
const connection = new Connection(
'https://mainnet.helius-rpc.com/?api-key=YOUR_KEY',
'confirmed'
);