Private Bitcoin payments via Shielded CSV — no new chain, no token, no consensus change, no trusted operator. Only Bitcoin, zero-knowledge proofs, and the user's own keys.
The public API layer for zkCoins — REST + LNURL on top of the node's internal kernel RPC. This is the multi-tenant, hosted-wallet service surface that wallets, the SDK, and the explorer speak. It is optional and operator-run; the trustless core is the node.
Full system docs: docs.zkcoins.com · Specification: docs.zkcoins.com/specification
zkCoins lets you send value on Bitcoin without anyone seeing the amount, the asset, who paid, or who received. Bitcoin stores only opaque markers that a spend happened — not the coin's contents, which travel privately between sender and receiver as a small encrypted bundle. Double-spend protection is the chain's job; your seed derives every key, your wallet is the only thing that can spend, any node can serve you, and you verify everything against Bitcoin yourself. Built on the zkCoins concept (Robin Linus) and the Shielded CSV construction (Jonas Nick, Liam Eagen, Robin Linus).
| Layer | What it is | Repo |
|---|---|---|
| App · Explorer | end-user wallet (LNURL receive) · public explorer web-app | zk-coins/app · zk-coins/explorer |
| SDK | thin TypeScript client — on-device keys, signing, node/API calls | zk-coins/sdk |
| zkCoins API | public REST + LNURL, hosted-wallet service (optional) | zk-coins/api ← this repo |
| zkCoins node | trustless kernel — scan · accumulator · verify · prove · store · publisher | zk-coins/node |
| bitcoind · Nostr relay | Bitcoin L1 settlement and ordering · off-chain transport and data availability | upstream (own or external) |
Supporting repos: zk-coins/research, zk-coins/plonky2, zk-coins/docs.
The API layer sits outward of the node. It consumes the node's internal kernel RPC (gRPC kernel.v1, specification §7.8) and exposes the public REST API (§7.5) plus LNURL/aliasing to wallets, the SDK, the app, and the explorer — REST outward, gRPC inward.
- It owns its own, non-value-bearing database (LNURL mappings,
username/aliasing, rate-limits, push-subscription registrations). The value-bearing data — coins, proofs, bundles, the nullifier accumulator — stays in the node (§4.8); the API layer never touches the node's database directly. - It never touches Bitcoin and holds no SPEND key. Capability-gating, rate-limiting, and the LNURL receive flow live here; proving, broadcasting, and chain scanning stay in the node.
- Running it is optional: a sovereign personal node serves its own wallet directly; the API layer is the "public service node" role that hosts other accounts.
Status: scaffold. The API surface is currently served by
zk-coins/nodedirectly; this repo will hold the standalone API layer once the kernel RPC contract stabilises. The full design is specified in §6.1 (kernel and API), §7.5 (REST), and §7.8 (kernel RPC).
MIT