Unlinkable by design.
Deposit on one chain. Withdraw on any supported chain. A zero-knowledge privacy protocol for public blockchains — deposits become opaque commitments in a shared pool; withdrawals prove membership with a Groth16 zk-SNARK generated on your device. The two are never linked on-chain.
Live figures resolve to /api/merkle/state on the configured backend. When the backend is unreachable, this strip shows indicative seed values and the eyebrow above flips to Indicative · backend offline.
One pool. Opaque notes. Proofs, not trust.
Deadlink is a shared anonymity set across supported chains. Every deposit records only a cryptographic commitment. Every withdrawal proves set membership without revealing which commitment. The two are independent on-chain events.
noteThe user's private position
Each deposit creates a note — a sealed record of amount and owner key. The chain sees only a Poseidon hash. Notes live encrypted in the user's browser extension, never on-chain.
proofA Groth16 zk-SNARK
To spend, the user proves "I own a note in the pool" without revealing which one. The proof publishes a nullifier that retires that specific note from the set — no double-spends, no linkage.
relayGas-paying third party
If the user submits their own withdrawal, the gas address leaks to the destination. A relay submits on their behalf; the fee is encoded inside the proof so it cannot be inflated. Today: one operator. multi-relay · phase 0x2.
p2pPrivate send, same pool
Users can transfer value to another Deadlink public key without funds leaving the pool. No withdrawal, no gas trail, 10× cheaper than a withdraw. The recipient sees a new note after the next indexer sync.
Public, calibrated, ongoing.
We publish the severity breakdown before we ask anyone to click Deposit. The cryptographic core is strong; the operational and integration layers leak. This will be visible for as long as it is true.
Not mainnet-ready today. R9 fresh-eyes round re-opens Groth16 ceremony, bridge reservation binding, and committee↔rendezvous credential separation as headline risks before any mainnet deploy.
Eight packages. One posture each.
Every piece of Deadlink ships with a public posture grade — GOOD, PARTIAL, BROKEN, FUNDAMENTALLY BROKEN. Visual overclaim is a bug we refuse to ship.
Circuits
Groth16 over BN254. Withdraw + P2P circuits audited; Poseidon hashes; deterministic setup ceremony reproducible from docs.
EVM contracts
Pool, relay-registry, blacklist-registry, and Sprint 11 BridgeReceiver deployed on Sepolia. Verifiers gated on trusted-setup ceremony before mainnet. Fuzz harness at 92% branch.
Solana programs
Anchor program E2E green on localnet (deposit, withdraw, P2P, compliance). Sprint 11 bridge-receiver code-complete. Merkle tree capped at 4,096 leaves; devnet deploy + tree migration tool gated on Wave 4.
dApp (Next.js)
Deposit / Withdraw / P2P / Receive flows. WalletConnect slot held but not wired. Respects reduced-motion and keyboard-only.
Indexer & Merkle sync
Unified MerkleTreeService synchronizes EVM + Solana into a single anonymity set; per-chain counters with freeze-on-gap (R5-XC-H3/L3). Degrades to indicative numbers on outage.
@private-mixer/shared
Proof helpers, Poseidon, Merkle utils. The only package we'd recommend integrating today. Apache-2.0, semver, unit-tested.
Browser extension
Chrome MV3 only at present (Firefox unsupported — uses chrome.* APIs without webextension-polyfill). AES-256-GCM vault, PBKDF2 key derivation, in-popup proof generation.
Relay network
Single operator deployed; multi-relay coordination, per-job escrow slashing, and dispute mechanism shipped. Multi-operator competition + testnet registry pending Wave 4.
Seven flows cover everything.
The shapes real users move through — from first deposit to recovery. Each is a concrete screen path; none is aspirational.
First-time deposit
Install the extension, create an encrypted vault, connect a wallet, and drop the first note into the pool.
- 01Install the extensionChrome / Firefox · MV3 offscreen worker for proof generation.
- 02Create encrypted vaultAES-256-GCM with PBKDF2 key derivation. Password only; no account.
- 03Connect walletMetaMask, Phantom, Solflare, or Backpack. WalletConnect support pending — slot held but not yet wired.metamask / phantom
- 04Select amount + chain + tokenNative first. Non-native tokens greyed with "coming soon" until MockUSDC / SPL mint lands.
- 05Preview fee + sign0.5% withdraw baseline shown even on deposit. No hidden line items.
- 06Deposit confirmedCommitment written on-chain. Note saved to extension vault.COMMITMENT · 0x41c9…ae8b
0x0 → 0x8. What ships. When.
Phases are hex because the team can't help themselves. Dates move; the pulsing marker shows where we actually are.
Core Protocol
The cryptographic foundation: zk-SNARK circuits, Poseidon commitments, nullifier double-spend prevention, and on-chain verification. Proves the privacy model works end-to-end on a single chain.
Multi-Chain + P2P
Extends the protocol across Ethereum and Solana with a shared anonymity set, adds private in-pool transfers between users, and encrypted note delivery so recipients can discover funds off-chain. Both chains E2E green independently; cross-chain live testnet gated on Wave 4.
Privacy Relay Network
Replaces self-submitted withdrawals with a network of staked relay operators that pay gas on the user's behalf, defeating wallet-level deanonymization and enabling fee competition. Multi-relay coordination, per-job escrow slashing, and dispute mechanism shipped; pending testnet registry + multi-operator QA.
Compliance + Cross-Chain Bridges
Sprint 11 cross-chain bridge (committee-attested EVM↔Solana withdrawals) and compliance-proof flows with OFAC blacklist support shipped to develop. Mainnet gated on trusted-setup ceremony + R9 remediation. Governance/fee token deferred.
DeFi Native
Brings private primitives to DeFi — shielded AMM swaps with private order matching, shielded liquidity pools, and eventually shielded lending/yield — so users can transact with DeFi protocols without revealing positions.
Time-Locked Spends
Programmable time-locks on notes enabling vesting schedules, scheduled payouts, dead-man switches, and other temporal spending conditions — all privately enforced.
Incentive / Reputation Scoring
Privacy-preserving reputation signals for relay operators, compliance providers, and integrators — quality metrics without identity exposure.
Private Governance / Voting
Token-weighted governance where votes are cryptographically anonymous but verifiably valid, with support for anonymous delegation and shielded proposals.
Decentralized Identifiers
DID-compatible identity layer bound to Deadlink pubkeys, enabling selective disclosure and cross-app identity without doxing the underlying key.
Use the right word. Reject the wrong one.
We don't use mixer, launder, or untraceable. Privacy protocols were poorly named for a decade; we're not making it worse.
Written for evaluators. Useful to everyone else.
Every claim on this page resolves to a file in the repo. If you came to grep for TODO, you're exactly our audience.
Skeptical protocol evaluator
Devs, researchers, auditors, fund analysts. Asking: is this credible? do they overclaim?
Privacy-curious user
Already uses mixers, or wants to. Asking: does it actually work? how private is it really?
Integrator
Wiring @private-mixer/shared into another product. Asking: API? licence? cadence?
Potential operator / contributor
Relay operators, circuit contributors. Asking: what's the work? what's the payoff?
The questions worth answering.
Short, precise, and linked to source when possible.
Is Deadlink a mixer?
No — and we don't use the word. A mixer shuffles funds among participants; the privacy comes from operational obscurity. Deadlink is a commitment pool with zk proofs of membership: the privacy is cryptographic, not behavioural. The pool is shared across supported chains, singular, and designed around opaque notes rather than coordinated mixing rounds.
Is the cross-chain claim real today?
The pool is cross-chain by design — the backend's unified Merkle service indexes EVM + Solana into a single anonymity set. The Sprint 11 committee-attested bridge (EVM↔Solana withdrawals) is code-complete on develop and runs against a localnet harness; live testnet execution is gated on the Wave 4 committee deploy. UI does not claim more than that today.
What actually leaks today?
R9 (2026-04-26) re-opens three live risks: every shipped Groth16 zkey rides single-contributor entropy until the production trusted-setup ceremony runs; BridgeReceiver.reserveWithdrawal defers struct↔signals binding to a second tx (front-runnable lock); committee + rendezvous share a bearer token. The single-operator relay can also time-correlate withdrawals until multi-operator QA ships. See docs/audits/r9/findings.md.
Where are my funds held?
On-chain, in the protocol contracts. There is no custodian. The notes — your ability to spend — live encrypted in the browser extension, AES-256-GCM with PBKDF2 key derivation. Lose the extension without a backup and you lose access to those notes; the funds remain in the pool, indistinguishable from any other commitment.
Why browser-side proofs?
Proof witnesses contain the user's secret key. Generating them in-browser keeps the secret on the user's device. The cost is ~15–30 seconds of wall clock; the alternative is giving a server the keys to spend your notes.
What's the fee?
0.5% on withdrawals, 0.1% on P2P transfers, capped at ~$10k equivalent per transaction. The relay's fee (when you use a relay) is encoded inside the proof so the relay cannot inflate it at submit time.
Can I integrate this?
Today, integrate only @private-mixer/shared — the proof and Poseidon helpers. The contracts, backend, and extension are pre-audit; integrating them now is an appetite for risk we wouldn't recommend on a production surface. See docs/components/api-reference.md.