Documentation
Everything on this page is checked against the same claims table as the product copy. If something here turns out to be untrue, that is a bug and we want to hear about it.
01 · Getting started
Dark generates a recovery phrase on your device. Write it down. It is the only way back into your account: nobody at Dark holds a copy, and there is no reset.
A standard 12 or 24 word phrase from another wallet works. Dark uses the derivation path every mainstream wallet uses, so the same phrase gives you the same addresses.
Keys are encrypted at rest and unlocked with your password or biometrics. Locking wipes them from memory. Lose the device and your phrase restores everything from the chain, because your balance lives on chain, not on our servers.
02 · Private USDG
Dark holds USDG in a vault contract where your balance is encrypted. Only you can read it. When you pay another Dark user, the amount is encrypted too.
A one-off transaction publishing your public key so others can pay you. Costs gas.
Move USDG into the vault. The amount is public — this is an ordinary token transfer anyone can see.
Pay another Dark user. The amount is encrypted. Both addresses stay visible.
Money sent to you lands in a pending balance. One transaction folds it into your spendable balance, and nobody else can do it for you.
Move USDG back out to any address. The amount is public again.
Your balance stays readable until your first private payment.
If you have only ever deposited, anyone can add up your public deposits. It stops being computable once you have sent or received a private transfer. Dark shows you which state you are in rather than letting you assume the stronger one.
Sending privately means producing a zero-knowledge proof, which costs more gas than an ordinary transfer — a few million units, paid in ETH on Robinhood Chain. Your wallet quotes the real fee before you confirm. Deposits, withdrawals and applying pending are priced like normal transactions.
03 · What stays public
Hidden from everyone but you
Readable by anyone, on any block explorer
Dark is not a mixer, and there is no anonymity set.
Each account's balance is encrypted on its own, and the USDG backing all balances sits in one contract that no one at Dark can move. The other side of that is that Dark hides amounts, not the trail. Anyone can see that your address paid another address at a particular moment. If you need to hide the relationship rather than the number, this is the wrong tool.
04 · Disclosure links
A disclosure proves one thing about your balance to one person — that it is exactly some amount, or that it falls within a range — without showing them anything more.
Choose what to prove, add a label and an expiry, and Dark produces a link. The decryption key sits in the part of the link after the #, which browsers never send to a server. Dark stores a blob it cannot read.
They open the link and their own browser checks the proof against the blockchain. They do not have to trust Dark. The page reads the balance from two independent sources, and if those disagree it refuses to show a verdict at all.
Anyone who opens the link also sees your address.
A disclosure names the account it is about. Everything already public about that address — its deposits, withdrawals and counterparties — is visible to whoever you send it to.
Revoking stops this link from working. Anyone who already opened it may have saved the proof, and a saved proof stays valid forever.
Revocation takes the link down. It cannot reach into someone's hands and unsee what they already saw.
05 · Withdrawing without Dark
Dark cannot move your funds, cannot freeze them, and cannot stop you withdrawing: those powers do not exist in the contract. But "cannot" is worth very little unless you can check it. Here is how.
dark-exit is a separate program that withdraws your USDG using nothing but your recovery phrase (or, if you use the web wallet, your Dark account key) and a blockchain endpoint of your choosing. It does not talk to Dark at all. Its source is published at github.com/DarkWalletRH/dark-exit under MIT OR Apache-2.0, so anyone can read it, change it, or publish their own build.
An offline web page does the same thing entirely in your browser. Keep a copy of it while things are calm and serve it from your own computer — the proving code and everything it needs are inside it, so it keeps working if Dark's servers are gone. It talks only to the blockchain endpoint you give it.
In Settings → Network you can point the wallet at any endpoint, including your own node. With your own node Dark's is a convenience, never a requirement. With the public RPC, private sends still read the recipient's key through Dark's relay as a second source, and fail if it is unreachable. The app builds every transaction on your device regardless.
Tested as a drill, not assumed.
We withdraw on the test network with every Dark server blocked at the network layer, with the vault paused and its limits set to zero. Withdrawing and applying pending are the two things the contract can never pause.
06 · Swaps, assets, assistant
| Feature | Private? | Notes |
|---|---|---|
| Swaps | No | Routed through a third-party aggregator on the public chain. Amounts, tokens and addresses are all visible. |
| Tokenised assets | No | Holdings and trades are public. Some are restricted by residence; Dark asks where you live and refuses trades it cannot offer. |
| Assistant | — | Messages go to Anthropic (Claude) with addresses stripped. Voice is push-to-talk: your phone turns speech into text first. It proposes actions; only you can confirm them, on your device. Treat it as a third party. |
| Staking | No | Positions and rewards are public like any on-chain balance. |
07 · Security
Move your funds, freeze them, block a withdrawal, or read your balance. There is no Dark key that decrypts anything, and no auditor key either.
Which addresses your app asks about, when you sign in, and that a given account uploaded a disclosure of a certain size at a certain time. Use Dark's blockchain endpoint and it sees the requests your wallet makes; point it elsewhere and that stops.
On the web, the wallet code is served by Dark each time you open it.
A compromised Dark deployment could, in principle, serve code that captures your keys. The Android app and the standalone withdrawal tool do not have this property. We would rather say so than let you assume otherwise.
The chain's operator can filter transactions, including withdrawals, and upgrade the chain without delay. USDG's issuer can freeze USDG, including the vault's. Proofs rely on the Aztec Ignition setup, which is secure if any one of its participants was honest. These are properties of the network, the asset and the proof system, not of Dark, and no wallet can remove them.
Beta risks
Shieldify reviewed the vault contract in October 2026 and reported nothing above informational severity. The zero-knowledge circuits, the proof verifiers and the curve library have not had an external audit yet, and no review rules out every bug. A bug could let someone take USDG from the contract, and the loss would fall on whoever withdraws last. Only deposit what you can afford to lose. The Dark team can pause deposits and private transfers and lower the caps at once, but can never stop withdrawals. The contract can never hold more than $250,000, and holds at most $50,000 while the launch caps apply. If a later audit requires a new contract version, moving your balance means a public withdrawal and deposit, which reveals that amount.
Dark v1 and v1.1
Dark v1 (0xeD7a0c6899a6AC94Aea7A5b2F8f24a948042DA9C) keeps the original proof checkers, which have a known prover bug; a bug like this could let someone take funds still in v1, and pausing v1 does not prevent that. Withdrawals from v1 stay open forever, but move your balance soon. New deposits and private sends use Dark v1.1 (0x0811b38E81a13c2fECD639a38Ce10330D16A1bd6): the same reviewed vault code with rebuilt proof checkers that have not yet been reviewed by Shieldify.
08 · Network and USDG
The technical design is written up in the whitepaper.