"I shall protect my family, even if it means turning the entire world against me.
There is no need for words among shadows."
โ The Shadow Monarch
Stop exposing yourself to every protocol.
When you use PrivacyCash directly โ PrivacyCash knows your wallet.
When you use PrivacyCash directly โ PrivacyCash knows your wallet.
When you use any privacy protocol โ That protocol sees YOU.
๐ฎ Live Demo: https://ashborn-sol.vercel.app Now featuring the Shadow Monarch Aesthetic experience.
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ YOU โ โโโโถ โ SHADOW MONARCH โ โโโโถ โ PrivacyCash โ
โ (Invisible) โ โ (The Entity) โ โ (Sees Monarch) โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ Recipient โ
โ (Sees Monarch) โ
โโโโโโโโโโโโโโโโโโโ
PrivacyCash sees "The Shadow Monarch."
PrivacyCash sees "The Shadow Monarch."
You? You're a ghost.
| Without Ashborn | With The Shadow Monarch |
|---|---|
| PrivacyCash knows your wallet | PrivacyCash sees The Monarch |
| Light Protocol links your proofs | Light Protocol sees The Monarch |
| You hide in 1 protocol's pool | You hide in The Monarch's Army |
| 1 protocol breach = you're exposed | K-Anonymity Amplified |
"The Shadow Army sees only the Monarch. The Enemy sees nothing."
- You send intent to Ashborn (shield 1 SOL, transfer 0.5 SOL privately)
- The Shadow Monarch envelopes it (strips your IP, wallet, metadata)
- The Monarch calls PrivacyCash/Recipient with ITS OWN identity
- Protocols execute โ they only see The Monarch's omnibus wallet
- You receive results โ unlinkable, anonymous, untraceable
npm install @alleyboss/ashborn-sdkAshborn requires a Address Lookup Table (ALT) to function on Devnet.
Without this config, you will encounter ALT not found errors.
Solana transactions have a hard limit of 1232 bytes. PrivacyCash transactions are "heavy" due to Zero-Knowledge proofs.
graph TD
subgraph WITHOUT_ALT ["โ Without ALT (Fails)"]
A[ZK Proof\n400 bytes] --> B[Encrypted State\n200 bytes]
B --> C[20 Addresses\n640 bytes]
C --> D[Total: 1240 bytes]
D -->|OVER LIMIT| E[โ Transaction Failed]
style D fill:#ffcccc,stroke:#ff0000
style E fill:#ff0000,color:#fff
end
subgraph WITH_ALT ["โ
With ALT (Success)"]
F[ZK Proof\n400 bytes] --> G[Encrypted State\n200 bytes]
G --> H[20 Addresses\n20 bytes]
H -- "Compressed via ALT" --> I[Total: 620 bytes]
I -->|FITS| J[โ
Transaction Success]
style I fill:#ccffcc,stroke:#00ff00
style J fill:#00ff00,color:#fff
end
-
Configure Environment: Create
.env.localin theappdirectory:# PrivacyCash Keypair (for shield/unshield operations) PRIVACYCASH_DEMO_KEYPAIR=[...your_privacycash_keypair...] # Ashborn Relay Keypair (receives user funds, acts as privacy layer) ASHBORN_RELAY_KEYPAIR=[...your_ashborn_relay_keypair...] # Address Lookup Table NEXT_PUBLIC_ALT_ADDRESS=<GENERATED_ADDRESS>
-
Two Keypairs Required:
- PRIVACYCASH_DEMO_KEYPAIR: Used for PrivacyCash shield/unshield operations
- ASHBORN_RELAY_KEYPAIR: Acts as the privacy relay layer between users and PrivacyCash
Why two keypairs?
User Wallet โ ASHBORN_RELAY_KEYPAIR โ PRIVACYCASH_DEMO_KEYPAIR โ PrivacyCash PrivacyCash only sees PRIVACYCASH_DEMO_KEYPAIR, never the user's wallet! -
Generate ALT Address: Run the included utility script to create and populate a Devnet ALT:
npx tsx scripts/setup-alt.ts
Copy the output address into your
.env.local.
import { PrivacyRelay } from '@alleyboss/ashborn-sdk';
const relay = new PrivacyRelay({
relayKeypair: serverKeypair,
rpcUrl: 'https://api.devnet.solana.com',
});
// PrivacyCash NEVER sees your user
await relay.shield({ amount: 0.1 });
// ShadowWire - Recipient NEVER sees your user
await relay.generateStealth({ viewPubKey, spendPubKey });
// ZK Proof โ REAL Groth16 via snarkjs (not simulated)
const proof = await relay.prove({ balance: 0.5, min: 0.1, max: 1.0 });
// proof.isReal === true โ Real cryptographic proof| Protocol | What They See | What They DON'T See |
|---|---|---|
| PrivacyCash | Ashborn Relay wallet | Your wallet, IP, identity |
| ShadowWire | Ashborn Relay ephemeral key | Your stealth meta-address |
| Light Protocol | Ashborn's ZK commitment | Your balance, history |
| x402 Micropay | Relay payment signature | Your agent's wallet |
| ZK Groth16 | Valid proof (snarkjs) | Your actual balance |
Traditional privacy:
- You โ PrivacyCash pool โ 100 users โ You're 1 of 100
With Ashborn Shadow Relay:
- You โ Ashborn pool โ 1000 users โ PrivacyCash pool โ 100 users
- You're 1 of 100,000 (1000 ร 100 = K-Anonymity squared)
PrivacyCash can't identify you because they only see Ashborn.
Even if PrivacyCash is compromised, you're still anonymous.
Need to prove you're not a criminal? No problem.
// Prove balance > $10,000 (for lender)
// WITHOUT revealing your wallet or exact balance
await relay.prove({
balance: 50000,
min: 10000,
max: Infinity
});
// โ
Lender knows you qualify
// โ Lender doesn't know your wallet
// โ PrivacyCash doesn't know either๐ฎ Try it: ashborn-sol.vercel.app
The Shadow Agent demo has two modes. Both use all Ashborn features โ the difference is whether PrivacyCash adds an extra mixing layer on top.
These are NOT external services โ they are implemented inside Ashborn:
| Feature | Implementation | Location in Code |
|---|---|---|
| ECDH Stealth Addresses | Ashborn ShadowWire (Vitalik's formula) | sdk/src/shadowwire.ts |
| ZK Hashing | Light Protocol (Poseidon) | programs/ashborn/Cargo.toml |
| State Compression | Light Protocol (Merkle) | programs/ashborn/src/state/merkle.rs |
| ZK Groth16 Proofs | groth16-solana + snarkjs | On-chain program + SDK |
Clarification: These are technologies built into Ashborn's code, not external API calls.
๐ก๏ธ Privacy Level: STRONG โ All features are 100% real and verifiable on-chain.
User Wallet โ Ashborn Privacy Layer โ Stealth Address (Recipient)
โ
โโ ShadowWire: Generate ECDH stealth address
โโ Light Protocol: Update Merkle tree
โโ ZK Groth16: Generate range proof
โโ Decoys: Add fake outputs
| Feature | Status |
|---|---|
| ECDH Stealth Addresses (ShadowWire) | โ Real |
| Light Protocol (ZK Compression) | โ Real |
| ZK Groth16 Proofs | โ Real |
| SOL Transfers | โ Real |
Use this mode for hackathon evaluation โ Everything verifiable on Solscan!
๐ก๏ธ๐ก๏ธ Privacy Level: MAXIMUM โ Ashborn's features PLUS PrivacyCash mixing pool.
User Wallet โ Ashborn Privacy Layer โ PrivacyCash Pool โ Recipient
โ โ
โโ ShadowWire ECDH โโ Funds mixed with others
โโ Light Protocol โโ Transaction graph broken
โโ ZK Groth16 โโ New ZK proof on exit
โโ Decoys
Both modes do the same Ashborn processing! The difference:
- Mode 1: Funds go directly to stealth address
- Mode 2: Funds also pass through PrivacyCash pool (extra mixing)
| Component | Status | Why? |
|---|---|---|
| Ashborn (Layer 1) | โ Real | All features work on devnet |
| PrivacyCash Shield (Layer 2) | ZK proof exceeds 1.4M compute | |
| PrivacyCash Unshield | Depends on shield working |
Why dual-layer is stronger:
- Even if stealth layer compromised โ funds still mixed in pool
- Even if pool analyzed โ stealth address hides identity
- Attacker must break BOTH layers โ exponentially harder!
Why PrivacyCash simulated? ZK proofs require ~1.85M compute units. Devnet limit is 1.4M. Works on mainnet with premium RPC.
| Component | Address | Purpose |
|---|---|---|
| Ashborn Program | BzBUgtEFiJjUXR2xjsvhvVx2oZEhD2K6qenpg727z5Qe |
On-chain program |
| Ashborn Relay Wallet | 77mZZ8UyWmkS4nMUQtxbFL98HRLpTjWrrFgowyg3BrA |
Privacy relay layer |
| PrivacyCash Program | ATZj4jZ4FFzkvAcvk27DW9GRkgSbFnHo49fKKPQXU7VS |
Shield/unshield operations |
On devnet, PrivacyCash shield and unshield operations are simulated due to Solana compute limitations:
Why?
- PrivacyCash uses Groth16 zero-knowledge proofs for privacy
- ZK proof verification requires >1.4M compute units
- Solana devnet has strict 1.4M compute unit limit to prevent abuse
- Even with maximum compute budget and priority fees, ZK proofs exceed devnet capacity
What Works on Devnet:
- โ Deposit to Ashborn: User wallet โ Ashborn Relay (real transaction)
- โ Ashborn to PrivacyCash: Ashborn Relay โ PrivacyCash wallet (real transaction)
โ ๏ธ Shield: PrivacyCash ZK proof (simulated)โ ๏ธ Unshield: PrivacyCash ZK proof (simulated)
Production (Mainnet):
- โ All operations work with premium RPC providers:
Technical Details:
PrivacyCash ZK Proof Requirements:
- Groth16 verification: ~1.5M compute units
- Merkle tree updates: ~200K compute units
- Nullifier checks: ~150K compute units
- Total: ~1.85M compute units
Devnet Limit: 1.4M compute units (hard cap)
Mainnet with Premium RPC: 2M+ compute units
The demo gracefully simulates shield/unshield while showing real deposit and transfer transactions to demonstrate the complete privacy architecture.
MIT โ See LICENSE
THE SHADOW RELAY
World sees nothing. Only you know.
ARISE.
