https://github.com/collinsadi/opaque
A stealth-address wallet and privacy protocol
https://github.com/collinsadi/opaque
privacy protocol rust solidity stealth
Last synced: 3 days ago
JSON representation
A stealth-address wallet and privacy protocol
- Host: GitHub
- URL: https://github.com/collinsadi/opaque
- Owner: collinsadi
- License: mit
- Created: 2026-02-19T15:20:08.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-03-29T18:14:33.000Z (3 months ago)
- Last Synced: 2026-03-29T20:32:31.377Z (3 months ago)
- Topics: privacy, protocol, rust, solidity, stealth
- Language: TypeScript
- Homepage: https://opaque.cash
- Size: 34.6 MB
- Stars: 3
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
╔═══════════════════════════════════════╗
║ O P A Q U E ║
╚═══════════════════════════════════════╝
Private payments & proof-backed reputation on Ethereum
Website
·
GitHub
·
SDK
·
Docs
·
Playground
·
PSR Verifier Demo
·
Demo
---
**Opaque** is an open protocol for **unlinkable receive addresses** and optional **reputation you can prove without doxxing your wallet**. Think of it as: every payment can land at a fresh address only you control, while still letting apps verify things like “this person passed KYC” or “this account is in good standing”—using zero-knowledge proofs when you opt into that layer.
No single product owns the stack: there is a **reference wallet** at [opaque.cash](https://opaque.cash), a [**TypeScript SDK**](https://www.npmjs.com/package/@opaquecash/opaque) for builders, [**developer docs**](https://docs.opaque.cash) (guides + API reference + playground), and **on-chain contracts** you can read and deploy yourself.
> **Heads-up:** This is experimental software. Stealth cryptography and local-only data paths have real trade-offs—read [DISCLAIMER.md](DISCLAIMER.md) before relying on it for anything serious.
---
## What the protocol does today
| | |
|:---|:---|
| **Stealth payments (EIP-5564)** | Recipients share a **meta-address** (not a single static deposit address). Senders derive a **one-time address** per transfer so observers cannot trivially link your incoming flow on-chain. |
| **Registry** | Optionally map your normal Ethereum address to your meta-address so people can pay you **by `0x…`** without pasting a long key—resolution is public; the unlinkability is in how funds are received. |
| **Announcer** | Senders emit a compact **announcement** on-chain so the right recipient can **discover** which stealth outputs are theirs (with **view tags** so scanning stays practical). |
| **Manual “ghost” receives** | The app can also generate one-time addresses **without** an on-chain announcement; those rely on **local storage** on the device—flexible, but not recoverable from chain state alone. |
| **PSR — private reputation** | When you need it, **attestation metadata** can ride alongside announcements. The recipient can **discover traits** from their announcements, then build **Groth16 proofs** scoped to an action and verify against **on-chain roots**—showing *that* you qualify without exposing *who* you are to everyone. |
Under the hood, heavy lifting uses **Rust → WebAssembly** for scanning and crypto, **viem**-friendly ABIs for contracts, and hosted circuit artifacts on [opaque.cash](https://opaque.cash) for proof generation when you don’t self-host.
---
## Build with the SDK
The **`@opaquecash/opaque`** package is the unified client: configure **chain + RPC + wallet signature + WASM**, pass **indexer-shaped announcements**, and get **calldata** for register/announce flows, **owned outputs**, **balances by token**, and **PSR traits**—without forcing a specific indexer or UI.
```bash
cd sdk && npm install && npm run build
```
Point your app at the published WASM entry (or your own build):
`https://www.opaque.cash/pkg/cryptography.js`
Full API surface, types, and lower-level packages (`@opaquecash/stealth-*`, `@opaquecash/psr-*`) live in **[sdk/packages/opaque/README.md](sdk/packages/opaque/README.md)**.
---
## Developer docs
The **`docs/`** app is a Vite + React site: quick start, configuration, indexer integration, send/receive guides, PSR flows, API reference, and a **playground**.
```bash
cd docs && npm install && npm run dev
```
Use it alongside the SDK README when you’re wiring **Graph-style announcement rows**, **reputation proofs**, or custom deployments.
---
## Repository map
| Path | What you’ll find |
|------|------------------|
| [`frontend/`](frontend/) | Reference wallet UI (balances, send, receive, private balance) |
| [`sdk/`](sdk/) | **`@opaquecash/opaque`** and modular stealth + PSR packages |
| [`docs/`](docs/) | Developer documentation site |
| [`infra/`](infra/) | Hardhat contracts, deploy scripts |
| [`scanner/`](scanner/) | Rust WASM core; see [scanner/WASM_BUILD.md](scanner/WASM_BUILD.md) |
---
## Contracts (Sepolia)
| | |
|:---|:---|
| **StealthMetaAddressRegistry** | [0x77425e04163d608B876c7f50E34A378624A12067](https://sepolia.etherscan.io/address/0x77425e04163d608B876c7f50E34A378624A12067) |
| **StealthAddressAnnouncer** | [0x840f72249A8bF6F10b0eB64412E315efBD730865](https://sepolia.etherscan.io/address/0x840f72249A8bF6F10b0eB64412E315efBD730865) |
| **Groth16Verifier** | [0x78A169b6E308Fd5BfAfc728f216CdB06EcEdde06](https://sepolia.etherscan.io/address/0x78A169b6E308Fd5BfAfc728f216CdB06EcEdde06) |
| **OpaqueReputationVerifier** | [0x30B750Ae9851e104F8dbB4B8082b1a07a34885B0](https://sepolia.etherscan.io/address/0x30B750Ae9851e104F8dbB4B8082b1a07a34885B0) |
---
## Community
Issues and PRs are welcome—whether you’re fixing a doc typo, improving the SDK ergonomics, or integrating Opaque into something new.
**Support:** [hello@collinsadi.xyz](mailto:hello@collinsadi.xyz)
---
MIT License · Built in public · opaque.cash