Skip to content

Repository files navigation

GhostDeal

Pay like cash. You pay the agreed price. The other person never sees your wallet or how much crypto you still hold.

Next.js React TypeScript starknet.js Cairo Starknet

GhostDeal: a private P2P marketplace on Starknet

What the ecosystem was missing

Privacy on Starknet already exists, but it was built for traders: private swaps, private lending, private transfers between wallets. The everyday layer was missing: buying something from a person, in person.

Cash works like that. You agree on a price, hand over the bills, take the item home. Nobody asks for your bank statement. Public crypto does the opposite: one payment puts your whole wallet on display for a stranger. Your address, your history, your remaining balance, one click away on any explorer. Fine for a trader. Not fine when you are buying a used PC from a neighbor.

GhostDeal is that missing layer: a mobile PWA for ordinary people, for the purchases you already make today. No app store, no sign-up: it opens in the phone's browser and pays from a privacy-enabled wallet you already have. The other side sees that the price was paid. Never what else you hold.

How it works

GhostDeal escrow flow: buyer locks ZK note, in-person delivery, seller claims funds without direct wallet interaction

  1. Lock payment: The buyer locks the agreed price (USDC or STRK) into private escrow via the Cairo helper inside the STRK20 privacy pool.
  2. In-person delivery: Both parties meet and exchange the item. Neither party sees the other's wallet address or remaining balance.
  3. Claim funds: The seller claims the payment into a fresh private note using the secret generated at listing time. If the deal falls through, the buyer can cancel and receive a private refund.

The promise, no fine print

We promise: the other person does not see your wallet, your balance, or your history. Only the price.

We do not promise: invisibility against a chain observer. Pool deposits, cash-out amounts, and timing stay public. We say this plainly, because privacy oversold is privacy broken.

Paying from a public wallet Paying with GhostDeal
The seller opens your address on an explorer and sees your full history The seller sees that the price was locked into escrow. No address, no balance
The rest of your wallet is one click away The rest of your shielded balance stays yours

Why it is actually private

The app never touches your keys. GhostDeal runs on the Starknet Wallet API: your wallet builds and proves the private transactions on your device. Escrow is a small Cairo contract with privacy_invoke that only the STRK20 pool can call: no admin key, no upgrade, no custody. Pay and cash out happen inside the pool's shielded zone; the app just orchestrates.

Full details in the Architecture page.

Stack

  • Next.js 16, React 19, TypeScript: mobile-first PWA
  • starknet.js 10 + get-starknet v6: Starknet Wallet API (WalletAccountV6, strk20InvokeTransaction)
  • Cairo privacy_invoke escrow (cairo/): Deposit, Claim, Cancel
  • Official STRK20 privacy pool on mainnet

Run locally

git clone https://github.com/JaDi03/GhostDeal.git
cd GhostDeal
yarn install
cp .env.example .env.local
# put your Alchemy Starknet API key in NEXT_PUBLIC_PROVIDER_URL
yarn dev

Open http://localhost:3000. Desktop: Chrome + a privacy-enabled wallet extension. Phone: open the PWA inside the wallet app.

Credits and license

Built for the STRK20 Private Sprint. Bootstrapped from the official STRK20 starter kit (Philippe ROSTAN, 2023, MIT); the GhostDeal escrow, marketplace, and UI are original work (JaDi03, 2026). MIT, see LICENSE.

About

Pay in person without showing your balance. P2P marketplace escrow on STRK20.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages