Jul 12, 2026

NIP-60: The Cashu Wallet Revolution on Nostr

Portable ecash wallets synced over Nostr relays, no server dependency, no KYC.

NIP-60: The Cashu Wallet Revolution on Nostr

We are done watching governments and corporations turn the internet into a surveillance panopticon. Your data is your sovereignty. Your keys are your freedom. Break the Digital Cage.


The Problem: Lightning Network Requires Running a Node

NIP-47 (Nostr Wallet Connect) was a breakthrough — apps can now request Lightning payments through a wallet relay. But there's a hidden dependency: the app must have a Lightning node operator running behind the scenes.

That's not "own your keys." That's "rent a node."

NIP-60 changes everything.


NIP-60: Portable Cashu Wallets

NIP-60 defines how Cashu wallets are stored and synced across Nostr relays. Instead of keys locked in a single app, your ecash wallet becomes a portable state — just like your identity.

The Architecture

┌─────────────────────────────────────────────────────────────┐
│                     NIP-60 Wallet State                     │
├─────────────────────────────────────────────────────────────┤
│  Relay A ───┐                                               │
│             ├── kind:30060 (wallet metadata)               │
│  Relay B ───┤                                               │
│             ├── kind:30060 (wallet history)                │
│  Relay C ───┘                                               │
│                                                             │
│  Device 1 (phone) ── reads/writes via relay sync            │
│  Device 2 (laptop) ── same wallet, same keys, same history  │
│  Device 3 (tablet) ── recover by fetching from any relay    │
└─────────────────────────────────────────────────────────────┘

The Kind:30060 Event

{
  "kind": 30060,
  "pubkey": "<wallet owner's Nostr pubkey>",
  "tags": [
    ["mint", "https://mint.example.com"],
    ["token", "lntoast1pqd..."],
    ["balance", "5430"],
    ["created_at", "1700000000"]
  ],
  "content": "Cashu wallet state for npub1..."
}

Your wallet state is append-only. Every token deposit, spend, or swap becomes a new event. Any device can reconstruct your wallet by fetching all kind:30060 events from your write relays.


The Ecosystem: NDK-Wallet and Cashu Cache

NDK-wallet (nostr-dev-kit) implements NIP-60:

import { NDKWallet } from '@nostr-dev-kit/ndk-wallet'
import NDK from '@nostr-dev-kit/ndk'

const ndk = new NDK({ relayList: ['wss://relay.damus.io'] })
const wallet = new NDKWallet(ndk)

// Auto-synced across relays
const balance = await wallet.getBalance()
const tokens = await wallet.receiveTokens(21, 'sat')
await wallet.sendTokens(tokens, 'npub1...')

Cashu Cache (NIP-60 compliant) runs on any relay — your wallet is cached in the same place your follows and mute lists live.


Why This Matters for 0xPrivacy

  • No server dependency — your wallet is on the relays you already trust
  • Multi-device sync — phone, laptop, tablet all see the same balance
  • No KYC — Cashu mints don't need your name
  • NutZap integration — NIP-61 lets anyone tip you with Cashu tokens
  • Offline resilience — if a relay is down, another copy has your wallet

The Link to NIP-61 (NutZaps)

NIP-61 defines NutZaps — Cashu-powered tips on Nostr:

  1. Alice fetches Bob's kind:10019 to see his trusted mints
  2. She mints a P2PK-locked token to Bob's pubkey
  3. Publishes kind:9321 event tagging Bob
  4. Bob's wallet redeems the token

With NIP-60, Bob's wallet state lives on the same relays as his social graph. The tip is censorship-resistant because it's not a Lightning invoice — it's a signed token that only the recipient can redeem.


The Cypherpunk Math

  • Lightning Network: Requires on-chain escrow, KYC at 2+ points, custodial pools for liquidity
  • Cashu + NIP-60: Your keys, your tokens, your privacy. No blockchain. No KYC. No middleman.

The future is ecash-native social networks. Your followers, your mute lists, your wallet — all kind:3 and kind:30060 events synced across the same relay swarm.


🔥 Built by 0xPrivacy.online — "Break the Digital Cage"