◇ Experimental · testnet only◇ Apache-2.0 · not an offer of securities◇ Groth16 · BN254 · Poseidon◇ Not audited for mainnet◇ Proofs generated client-side◇ Audit round 9 · 2026-04-26◇ Do not deposit mainnet funds◇ Ethereum Sepolia · Solana localnet◇ v0.1.0-rc · commit 41c9ae8b◇ Experimental · testnet only◇ Apache-2.0 · not an offer of securities◇ Groth16 · BN254 · Poseidon◇ Not audited for mainnet◇ Proofs generated client-side◇ Audit round 9 · 2026-04-26◇ Do not deposit mainnet funds◇ Ethereum Sepolia · Solana localnet◇ v0.1.0-rc · commit 41c9ae8b
The Deadlink Protocol

Unlinkable by design.

Groth16BN254Poseidonbrowser‑side

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.

ChainsEthereumSolana
Proof systemGroth16 · BN254
HashPoseidon
ClientBrowser · ~15–30s
Try it · a real proof, in your browser
Indicative · backend offline
Anonymity set · EVM pool
1,147
sepolia · seed values · backend offline
Solana pool
219
localnet · cap 4,096
Proofs verified · 7d
342
on-chain events
Relay queue
0 pending
1 operator · phase 0x2

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.

§ 01 / Protocol

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.

§ 02 / Audit posture

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.
Audit · 2026-04-26
File · docs/audits/r9/README.md
R9 round · fresh-eyes · triage
Critical
19
R9 · triage0%
High
138
R9 · triage0%
Medium
229
R9 · triage0%
Low
274
R9 · triage0%
§ 03 / Components

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.

pkg/circuitsGOOD

Circuits

Groth16 over BN254. Withdraw + P2P circuits audited; Poseidon hashes; deterministic setup ceremony reproducible from docs.

circom · r1cs · 18.2k constraintsdocs ↗
pkg/contracts-evmPARTIAL

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.

solidity 0.8.24 · foundrydocs ↗
pkg/contracts-solanaPARTIAL

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.

anchor · rust 1.77 · spldocs ↗
pkg/frontendGOOD

dApp (Next.js)

Deposit / Withdraw / P2P / Receive flows. WalletConnect slot held but not wired. Respects reduced-motion and keyboard-only.

next 15 · rsc · shared tokenspreview ↗
pkg/backendPARTIAL

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.

node · ts · in-memory treedocs ↗
pkg/sharedGOOD

@private-mixer/shared

Proof helpers, Poseidon, Merkle utils. The only package we'd recommend integrating today. Apache-2.0, semver, unit-tested.

typescript · isomorphicnpm ↗
pkg/extensionPARTIAL

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.

mv3 · 2.4mb · encrypted at reststore ↗
pkg/relayPARTIAL

Relay network

Single operator deployed; multi-relay coordination, per-job escrow slashing, and dispute mechanism shipped. Multi-operator competition + testnet registry pending Wave 4.

node · 1 operator · slashing on-chainrunbook ↗
§ 04 / Journeys

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.

Time · ~90s
Proof · none (deposit only)
Fee · 0%
  1. 01Install the extensionChrome / Firefox · MV3 offscreen worker for proof generation.
  2. 02Create encrypted vaultAES-256-GCM with PBKDF2 key derivation. Password only; no account.
  3. 03Connect walletMetaMask, Phantom, Solflare, or Backpack. WalletConnect support pending — slot held but not yet wired.metamask / phantom
  4. 04Select amount + chain + tokenNative first. Non-native tokens greyed with "coming soon" until MockUSDC / SPL mint lands.
  5. 05Preview fee + sign0.5% withdraw baseline shown even on deposit. No hidden line items.
  6. 06Deposit confirmedCommitment written on-chain. Note saved to extension vault.COMMITMENT · 0x41c9…ae8b
§ 05 / Roadmap

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.

Shipped0x0
In flight0x1 · 0x2 · 0x3
Scoped0x4
Future0x5 · 0x6 · 0x7 · 0x8
0x0

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.

Complete2025
100%
0x1

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.

Code-complete · Wave 4 gatedQ1 2026
~95%
0x2

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.

Code-complete · operator gatedQ2 2026
~85%
0x3

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.

Code-complete · ceremony gatedQ2–Q3 2026
~75%
0x4

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.

Not startedQ4 2026
0%
0x5

Time-Locked Spends

Programmable time-locks on notes enabling vesting schedules, scheduled payouts, dead-man switches, and other temporal spending conditions — all privately enforced.

Future—
research
0x6

Incentive / Reputation Scoring

Privacy-preserving reputation signals for relay operators, compliance providers, and integrators — quality metrics without identity exposure.

Future—
research
0x7

Private Governance / Voting

Token-weighted governance where votes are cryptographically anonymous but verifiably valid, with support for anonymous delegation and shielded proposals.

Future—
research
0x8

Decentralized Identifiers

DID-compatible identity layer bound to Deadlink pubkeys, enabling selective disclosure and cross-app identity without doxing the underlying key.

Future—
research
§ 06 / Vocabulary

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.

note
A user's private position in the pool: amount + secret key. The chain sees only its commitment.
not token · balance · coin
commitment
The on-chain public hash of a note — Poseidon(amount, pubkey). Opaque to observers.
not deposit record · receipt
nullifier
A one-way hash published when a note is spent. Prevents double-spend without revealing which note was spent.
not spend proof · burn token
anonymity set
The pool of commitments a note is indistinguishable from. Privacy grows with set size.
informally privacy pool ok
relay
A third party that submits a withdrawal on the user's behalf. Fee encoded inside the proof.
not bridge · mixer · router
change note
The new private note created when a partial withdrawal leaves a remainder in the pool.
not refund · change token
p2p transfer
A within-pool private send. Funds never leave the pool; recipient decrypts an incoming note client-side.
not internal transfer
unlinkable
Cryptographically independent. No observer can connect the deposit transaction to the withdrawal transaction.
not untraceable · fully private
§ 07 / Who this is for

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.

01 — primary

Skeptical protocol evaluator

Devs, researchers, auditors, fund analysts. Asking: is this credible? do they overclaim?

Decides by · reading the audit section, opening the repo, grep-ing "TODO"
02

Privacy-curious user

Already uses mixers, or wants to. Asking: does it actually work? how private is it really?

Decides by · the proof demo, the FAQ, opening the docs
03

Integrator

Wiring @private-mixer/shared into another product. Asking: API? licence? cadence?

Decides by · api-reference.md, GitHub activity, semver history
04

Potential operator / contributor

Relay operators, circuit contributors. Asking: what's the work? what's the payoff?

Decides by · the relay runbook, roadmap, governance posture
§ 08 / FAQ

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.

Deadlink -- Privacy Protocol Redefined