Payments

Send money as privately as you send messages.

Overview

RVNT includes an integrated payment system built on the Bitcoin Lightning Network. Payments are sent and received within conversations, using the same encrypted channel as messages. No bank account, no credit card, no identity verification. The payment system is designed with the same philosophy as the messaging system: the server knows nothing.

Why Lightning Network? On-chain Bitcoin transactions are pseudonymous but publicly visible on the blockchain. Lightning Network transactions are off-chain, routed through payment channels, and are not recorded on the public blockchain. This provides significantly stronger privacy for small, frequent payments.

Wallet Architecture

Wallet type:       Non-custodial (you hold the keys)
Lightning impl:    LDK (Lightning Dev Kit, Rust)
On-chain backend:  Electrum (SPV, no full node required)
Key storage:       Derived from RVNT identity key
                   wallet_seed = HKDF(identity_key, "rvnt-wallet-seed")

Wallet limits:
  Maximum balance:       $500 USD equivalent
  Maximum single send:   $200 USD equivalent
  Maximum single receive: $200 USD equivalent
  Daily send limit:      $500 USD equivalent

These limits are designed to keep RVNT out of money transmitter
regulatory territory. RVNT is a messaging app with a payment
feature, not a financial services platform.

Key Derivation

The wallet seed is derived from the RVNT identity key:

  wallet_seed = HKDF-SHA256(
      ikm:  identity_private_key,
      salt: "rvnt-lightning-wallet-v1",
      info: "wallet-seed",
      len:  32
  )

  // BIP-32 master key from seed
  master_key = BIP32.from_seed(wallet_seed)

  // Lightning-specific keys derived from master
  node_key     = master_key / 0'   // Lightning node identity
  funding_key  = master_key / 1'   // Channel funding
  revocation   = master_key / 2'   // Revocation keys
  htlc_key     = master_key / 3'   // HTLC signing

Backup:
  The wallet seed is derived from your identity key.
  If you back up your identity key (which you should),
  the wallet is automatically recoverable.
  No separate seed phrase needed.

Sending a Payment

Payment flow:

  1. Alice taps "$" icon in conversation with Bob
  2. Alice enters amount (USD display, satoshi internally)
  3. RVNT constructs a payment message:

  PaymentMessage {
      type:      PAYMENT_REQUEST or PAYMENT_SEND
      amount:    u64 (satoshis)
      currency:  "USD" (display currency)
      rate:      f64 (BTC/USD rate at time of send)
      memo:      String (optional, encrypted)
      invoice:   String (BOLT 11 Lightning invoice, if request)
  }

  4. Payment message encrypted with Double Ratchet (same as text)
  5. Wrapped in sealed sender envelope
  6. Sent through Tor

  Lightning payment routing:
  7. Alice's LDK node finds a route to Bob's LDK node
  8. Payment is routed through Lightning Network channels
  9. Bob's node receives the payment
  10. Bob sees payment notification in conversation

Invoice Types

TypeInitiated ByFlow
Direct Send Sender Alice sends payment directly. Bob receives notification in chat. No invoice needed (keysend/spontaneous payment).
Invoice Request Recipient Bob sends a BOLT 11 invoice in chat. Alice scans/clicks to pay. Standard Lightning invoice flow.
Payment Request Recipient Bob sends a payment request with amount and memo. Alice confirms. RVNT handles invoice generation internally.

Currency Display

Internal:    All amounts stored in satoshis (u64)
Display:     User's preferred fiat currency
Conversion:  Real-time rate from privacy-respecting API
             (no user identification in rate queries)

Supported display currencies:
  USD, EUR, GBP, CAD, AUD, CHF, JPY, CNY, BRL, MXN, ...
  (50+ fiat currencies)

Display format:
  "$12.50 (25,000 sats)"
  "0.00025000 BTC ($12.50)"

Rate source:
  Fetched via Tor from multiple aggregators
  Cached for 60 seconds
  No API key required (public rate feeds)
  No user identification in requests

Fiat Bridge (Planned)

Planned integration with privacy-preserving fiat on/off ramps:

  On-ramp (fiat → Lightning):
    - Peer-to-peer exchanges (Bisq, RoboSats)
    - ATM integration (no-KYC Bitcoin ATMs, where available)
    - Voucher systems (Azteco, etc.)

  Off-ramp (Lightning → fiat):
    - Peer-to-peer sales (Bisq, RoboSats)
    - Lightning-to-gift-card services

  RVNT will NEVER integrate KYC-required exchanges directly.
  The fiat bridge is designed for users who need to move between
  fiat and Lightning without providing identity documents.

  Status: Planned for future release

Privacy Properties

PropertyMechanism
Payment amount hidden from server Payment message encrypted end-to-end (Double Ratchet)
Sender hidden from server Sealed sender envelope
Recipient hidden from server Sealed sender + Tor routing
No KYC Non-custodial wallet, no identity verification
No on-chain footprint Lightning Network (off-chain transactions)
Payment-message unlinkability Lightning payment routed separately from the RVNT message
IP hidden from Lightning peers LDK node traffic routed through Tor

Wallet UI

Wallet interface (within RVNT app):

  Balance display:
    ┌──────────────────────────────┐
    │  Balance: $127.50            │
    │  254,893 sats                │
    │                              │
    │  [Send]  [Receive]  [History]│
    └──────────────────────────────┘

  In-conversation payment:
    ┌──────────────────────────────┐
    │  Alice sent $25.00           │
    │  50,123 sats                 │
    │  "For coffee ☕"             │
    │  ✓ Confirmed                 │
    └──────────────────────────────┘

  Transaction history:
    - Sortable by date, amount, contact
    - Searchable by memo
    - All history stored locally (encrypted)
    - No server-side transaction history
Regulatory note: Cryptocurrency regulations vary by jurisdiction. RVNT's payment feature is designed for personal peer-to-peer transactions under applicable limits. Users are responsible for compliance with local laws. RVNT does not provide financial advice, does not custody funds, and does not facilitate regulated financial activity.

Further Reading

  • Messaging -- How payment messages are encrypted and delivered
  • Tor Integration -- How LDK traffic is routed through Tor
  • Panic Mode -- Wallet key destruction during emergency wipe

Last updated: 2026-04-12

RVNT Documentation — Post-quantum encrypted communications