# Monetarisierung - dgray.io

## Preismodell

**1 Anzeige = 1 Monat = 1 EUR/USD/CHF/GBP (oder 200 JPY)**

- Einfach, transparent, fair
- Power-User (mit Reputation): 2 Monate Laufzeit
- Bezahlung ausschließlich via **Monero (XMR)** über eigenen BTCpay-Server

## Reputation & Trust-System

### Sichtbarkeit
- Anzeigen von Accounts mit erfolgreichen Verkäufen werden höher gerankt
- Neue Accounts erscheinen weiter unten in Suchergebnissen

### Reputation-Stufen

| Stufe | Deals | Vorteile |
|-------|-------|----------|
| Neu | 0 | Standard (1 Monat Laufzeit) |
| Verifizierter Verkäufer | 5+ | Badge, bessere Sichtbarkeit |
| Power-User | 15+ | 2 Monate Laufzeit, höheres Ranking |
| Top Seller | 50+ | Badge, Priority-Ranking, maximale Sichtbarkeit |

- Käufer bestätigt erfolgreichen Abschluss
- Deals werden erst nach Käufer-Bestätigung gezählt

### Proof of Wallet (optional)
- Einmalige Monero-Mikrozahlung als Verifikation
- Zeigt: "Wallet verifiziert" im Profil
- Freiwillig, keine Pflicht

## Anti-Abuse Maßnahmen

### Rate-Limiting
- Max. 3 neue Anzeigen pro Tag für neue Accounts
- Limit erhöht sich mit Reputation

### Captcha (Eigenes PoW)
- Proof-of-Work basiert, kein Tracking
- Keine externe Abhängigkeit, keine Lizenzkosten
- Client löst SHA256-Challenge (Difficulty 4, ~1-3 Sek)
- Bei Account-Erstellung (immer)
- Bei Anzeigen-Erstellung (nur neue Accounts ohne bisherige Listings)
- Bei Login (nur nach 3+ Fehlversuchen)
- Implementierung: `js/services/pow-captcha.js`, `js/components/pow-captcha.js`

## Payment-Integration

- **Provider**: BTCpay Server (self-hosted)
- **URL**: https://pay.xmr.rocks/
- **Proxy**: `pow.dgray.io` — alle API-Aufrufe laufen über den PHP-Proxy (BTCPay API-Key bleibt serverseitig)
- **Primär**: Monero (XMR)
- **Alternativ**: Andere Kryptos via Trocador-Plugin (automatischer Swap zu XMR)
- **Preisumrechnung**: Live XMR-Kurs via Kraken API
  - EUR, USD, CHF, GBP, JPY
- **Bestätigung**: Nach 1 Blockchain-Confirmation (via Webhook)

### Flow: Draft → Processing → Published

1. User erstellt Listing → wird als `draft` mit `payment_status: unpaid` gespeichert
2. BTCPay Invoice wird über `pow.dgray.io/btcpay/invoice` erstellt
3. BTCPay Checkout-Modal öffnet sich im Frontend (`js/services/btcpay.js`)
4. Nach Zahlung:
   - **Frontend**: Prüft Status via `pow.dgray.io/btcpay/status` nach Modal-Close
   - **Webhook**: `pow.dgray.io/btcpay/webhook` empfängt BTCPay Events, setzt `status: published` + `payment_status: paid` nach 1 Confirmation
5. Listing wird veröffentlicht (30 Tage Laufzeit, `expires_at` wird gesetzt)

### Endpunkte (pow.dgray.io)

| Endpoint | Methode | Beschreibung |
|----------|---------|-------------|
| `/btcpay/invoice` | POST | Invoice erstellen (listingId, currency) |
| `/btcpay/status?id={id}` | GET | Invoice-Status abfragen |
| `/btcpay/webhook` | POST | BTCPay Webhook (auto-publish nach Confirmation) |

## Offene Fragen

- [x] ~~BTCpay Server Setup & Hosting~~ → https://pay.xmr.rocks/
- [x] ~~XMR-Kurs API für Umrechnung~~ → Kraken API
- [x] ~~Anzahl Deals für Power-User Status~~ → 5/15/50 Stufen
- [x] ~~Captcha-Lösung~~ → Eigenes PoW-Captcha (keine Lizenzkosten)
- [x] ~~Payment-Proxy~~ → `pow.dgray.io` (PHP, API-Key serverseitig)
- [x] ~~Webhook für Auto-Publish~~ → `btcpay-webhook.php` auf `pow.dgray.io`
