Transfer SOL privately. Private SPL tokens transfer and private swap will soon follow.
The program is fully audited by Accretion, HashCloak, Zigtur and Kriko, and verified onchain (with hash c6f1e5336f2068dc1c1e1c64e92e3d8495b8df79f78011e2620af60aa43090c5).
This project implements a privacy protocol on Solana that allows users to:
- Shield SOL: Deposit SOL into a privacy pool, generating a commitment that is added to a Merkle tree.
- Withdraw SOL: Withdraw SOL from the privacy pool to any recipient address using zero-knowledge proofs.
The implementation uses zero-knowledge proofs to ensure that withdrawals cannot be linked to deposits, providing privacy for Solana transactions.
- program/: Solana on-chain program (smart contract)
- src/: Rust source code for the program
- test/: Tests
- Cargo.toml: Rust dependencies and configuration
- Solana CLI 2.1.18 or later
- Rust 1.79.0 or compatible version
- Anchor 0.31.1
- Node.js 16 or later
- npm or yarn
- Circom v2.2.2 https://docs.circom.io/getting-started/installation/#installing-dependencies
If you want to integrate Privacy Cash into your project, use the Privacy Cash SDK here.
-
Navigate to the program directory:
cd anchor -
Build the program:
anchor build
-
Run unit test:
cargo test -
Run integration test:
npm run test:sol npm run test:spl npm run test:mint-checked
-
Deploy the program to devnet:
anchor build -- --features devnet rm target/deploy/zkcash-keypair.json cp zkcash-keypair.json target/deploy/zkcash-keypair.json anchor deploy --provider.cluster devnet or rm target anchor build --verifiable cp zkcash-keypair.json target/deploy/zkcash-keypair.json anchor deploy --verifiable --provider.cluster devnet or solana program deploy target/deploy/zkcash.so --program-id zkcash-keypair.json --upgrade-authority ./deploy-keypair.json
-
Deploy to mainnet:
anchor build --verifiable rm target/deploy/zkcash-keypair.json cp zkcash-keypair.json target/deploy/zkcash-keypair.json anchor deploy --verifiable --provider.cluster mainnet
-
Transfer the authority to multisig wallet
solana program set-upgrade-authority 9fhQBbumKEFuXtMBDw8AaQyAjCorLGJQiS3skWZdQyQD \ --new-upgrade-authority AWexibGxNFKTa1b5R5MN4PJr9HWnWRwf8EW9g8cLx3dM \ --upgrade-authority deploy-keypair.json \ --skip-new-upgrade-authority-signer-check \ --url mainnet-beta