Private agent-to-agent payments on Solana using zero-knowledge proofs.
Status: SNAP is in a tightly capped limited-release phase. Do not treat the current codebase or docs as audited deployment guidance.
SNAP lets AI agents pay each other without on-chain observers learning who paid whom. Deposits enter a shielded pool under a cryptographic commitment. Withdrawals leave the pool with a Groth16 proof that shows the recipient is entitled to the funds without revealing which deposit is being claimed.
- Agent A deposits SOL plus a commitment into the pool.
- Agent A sends a secret note to Agent B through a private channel.
- Agent B reconstructs the Merkle path and generates a Groth16 proof.
- Agent B withdraws SOL with
withdraw_zkorwithdraw_zk_relayed. - Observers can see the pool activity, but they cannot link the withdrawal to a specific deposit.
Install the SDK and its peer dependencies:
npm install snap-solana-sdk @solana/web3.js @coral-xyz/anchorMinimal private payment:
import { Connection, Keypair, PublicKey, clusterApiUrl } from "@solana/web3.js";
import { SNAPClient } from "snap-solana-sdk";
async function main() {
const connection = new Connection("https://your-rpc-url.com", "confirmed");
const sender = Keypair.generate();
const recipient = Keypair.generate();
const pool = new PublicKey("B8SyffZKt8LABKogWjH9rZcjY5PV2hyYRCbTxxbcrpFf");
const snapA = new SNAPClient(connection, sender);
const snapB = new SNAPClient(connection, recipient);
const note = await snapA.deposit(pool, 0.1);
const serialized = SNAPClient.serializeNote(note);
await snapB.withdraw(pool, SNAPClient.deserializeNote(serialized), recipient);
}
void main();If you want a runnable walkthrough from this repo, use:
npx tsx examples/basic-payment.ts
npx tsx examples/agent-to-agent.ts
npx tsx examples/relayed-withdrawal.ts| Component | Description |
|---|---|
| Solana Program | Anchor program with deposit, withdraw_zk, and withdraw_zk_relayed |
| ZK Circuit | circom Groth16 circuit using Poseidon and a depth-10 Merkle tree |
| SDK | snap-solana-sdk for note handling, proof generation, and client API |
| Agent Kit Plugin | Solana Agent Kit v2 plugin with snap_create_pool, snap_deposit, snap_withdraw, and snap_withdraw_private |
| Relayer | Express service for gas-abstracted private withdrawals |
This is a limited release. The protocol has not been audited by a third party. Pool denominations are intentionally small. Do not deposit more than you can afford to lose.
| Field | Value |
|---|---|
| Program ID | 9uePoqdgaXpqFLQM2ED1GGQrwSEiqe3r6tW1AfsnrrbS |
| Pool — 0.1 SOL | B8SyffZKt8LABKogWjH9rZcjY5PV2hyYRCbTxxbcrpFf |
| Pool — 1 USDC | 5LeuHrPBgHNhgbCy996MEjcsBk5gNHhVj6AiuuCHZ8od |
| Pool — 10 USDC | ECuHf8kgiWfmL3Q6id4WGBQWvuukhzqvF5vsxuPAKZBv |
| Network | Solana mainnet-beta |
| Protocol fee | 0.25% |
├── programs/ # Solana program (Rust/Anchor)
├── circuits/ # circom ZK circuit
├── sdk-package/ # snap-solana-sdk npm package
├── agent-kit-tool/ # Solana Agent Kit plugin
├── relayer/ # Express relay service
├── agents/ # Demo agent scripts
├── examples/ # Minimal end-to-end examples
├── scripts/ # Deployment and quickstart scripts
├── docs/ # Troubleshooting, circuit, and compliance docs
└── tests/ # Integration tests
# Build the Solana program
anchor build
# Run validator-backed tests
PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH" anchor test --skip-build
# Build and test the SDK package
cd sdk-package && npm install && npm run build && npm testThis is a limited release intended for review and testing. It is unaudited; known risks, protocol limits, and hardening work are documented in FINDINGS.md, docs/CIRCUIT_SPEC.md, docs/COMPLIANCE.md, and docs/GOVERNANCE.md.
MIT