Pro Tip
For maximum privacy, wait some time between shielding and transferring. This makes it harder to correlate your transactions.
Learn how to use ZKLINK for private transactions on Solana. This guide covers everything from basic concepts to advanced SDK integration.
ZKLINK is a privacy protocol built natively for Solana that enables fully private transactions using zero-knowledge proofs (zk-SNARKs). Unlike other privacy solutions, ZKLINK hides the sender, receiver, and amount of every transaction.
All transaction details are hidden using advanced cryptography.
You control your keys at all times. No trusted third parties.
Proof generation in under 1 second, optimized for Solana.
Every proof is verified by Solana validators.
Get started with ZKLINK in just a few steps. No coding required for basic usage.
Connect your Phantom, Solflare, or any Solana-compatible wallet to the ZKLINK app. Your private keys never leave your device.
Deposit SOL into the ZKLINK shielded pool. This converts your public SOL into private, shielded SOL that can't be tracked.
Transfer shielded SOL to any address. The transaction is completely private — sender, receiver, and amount are all hidden.
Convert your shielded SOL back to regular SOL whenever you need to interact with other Solana apps.
For maximum privacy, wait some time between shielding and transferring. This makes it harder to correlate your transactions.
ZKLINK uses a combination of cryptographic techniques to achieve privacy while maintaining the security guarantees of the Solana blockchain.
When you shield SOL, your funds enter a shared "shielded pool." This pool contains the combined funds of all ZKLINK users, making it impossible to trace individual balances.
Each shielded transaction creates a commitment (a cryptographic hash representing your funds) and a nullifier (a unique value that prevents double-spending). These are stored on-chain but reveal nothing about the actual transaction.
// 1. Shield: Public SOL → Shielded Pool PublicSOL → createCommitment(amount, secret) → ShieldedBalance // 2. Transfer: Prove ownership without revealing details generateProof(oldCommitment, newCommitment, nullifier) → Verifier checks proof on-chain → ShieldedBalance transferred privately // 3. Unshield: Shielded Pool → Public SOL proveOwnership(commitment) → PublicSOL returned
ZKLINK uses zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge) to prove transaction validity without revealing any details.
A zk-SNARK allows you to prove that you know something (like a secret key) without revealing what that something is. In ZKLINK's case, you prove:
All without revealing who you are, who you're sending to, or how much.
Proofs are generated off-chain on your device, then submitted to Solana for on-chain verification. This keeps proof generation fast while maintaining trustless verification.
| Metric | Value | Notes |
|---|---|---|
| Proof Generation | <800ms |
On modern devices |
| Proof Size | 288 bytes |
Compact for on-chain storage |
| Verification Time | ~10ms |
Fast on-chain verification |
| Security Level | 128-bit |
Industry standard |
Understanding what ZKLINK hides and what it doesn't is crucial for using it effectively.
Avoid shielding and immediately unshielding the same amount. This pattern can be analyzed to link your transactions. For best privacy, vary amounts and timing.
Integrate ZKLINK into your application using our TypeScript SDK.
# Using npm npm install @zklink-protocol/sdk # Using yarn yarn add @zklink-protocol/sdk # Using pnpm pnpm add @zklink-protocol/sdk
import { ZklinkClient, Keypair } from '@zklink-protocol/sdk'; // Initialize the client const zklink = new ZklinkClient({ network: 'mainnet-beta', wallet: yourWalletAdapter, }); // Shield SOL (deposit into private pool) const shieldTx = await zklink.shield({ amount: 10 * 1e9, // 10 SOL in lamports }); // Send private transfer const transferTx = await zklink.privateTransfer({ recipient: recipientPublicKey, amount: 5 * 1e9, // 5 SOL }); // Unshield SOL (withdraw from private pool) const unshieldTx = await zklink.unshield({ amount: 5 * 1e9, recipient: yourPublicKey, });
For complete API documentation, including all methods, parameters, and examples, see our API Reference section.
Yes. Your private keys never leave your device. ZKLINK's smart contracts are non-upgradeable and cannot access your funds — only you can move your shielded SOL.
Your funds remain safe on-chain. The smart contracts are immutable and will continue to function. You can always unshield your funds using any compatible interface or directly via the contracts.
Yes. ZKLINK has been audited by leading security firms. Audit reports are available in our Security section.
ZKLINK charges a small protocol fee (0.1%) on shield and unshield operations. Private transfers between shielded addresses have no protocol fee — you only pay Solana network fees.
Yes. ZKLINK works with Ledger and other hardware wallets through Phantom, Solflare, and other wallet adapters.
Security is our top priority. Here's how we keep your funds safe.
Our smart contracts and cryptographic circuits have been audited by:
We run a bug bounty program with rewards up to $100,000 for critical vulnerabilities. If you find a security issue, please report it responsibly.
Never share your private keys or seed phrase with anyone. ZKLINK team will never ask for your keys. Beware of phishing sites — always verify you're on the official ZKLINK domain.