Real-Money PvP
Gerçek paralı 1v1 PvP uygulamaları için sabit finansal/backend iskeleti.
Oyun mekanikleri her projede değişir; para, escrow, settlement ve Nuvei akışları değişmez.
Ne zaman kullan
- Yeni gerçek paralı PvP / matchmaking uygulaması kurulurken
- Escrow, ledger, rake, refund, deposit, withdraw işleri yapılırken
- Kullanıcı bir oyun dokümantasyonu verip “bu sistemle kur” dediğinde
Girdi kontrolü (zorunlu)
- Projede oyun mekanik dokümanını bul (
docs/game.md, GAME.md, veya kullanıcının verdiği path).
- Yoksa templates/game-documentation.md şablonunu iste; doldurulmadan oyun loop’u uydurma.
- Örnek format için examples/clue-rush.md ve examples/last-move.md oku.
- Ekonomi/iskelet için oyun dokümanındaki “3€/5€/1€” gibi örnek rakamları yeniden icat etme — sabit iskeleti uygula; tutarlar proje config’inden gelir.
Kural: Sabit iskeleti oyuna uydurma. Oyunu iskelete oturt.
Sabit iskelet (değiştirme)
Detay: references/escrow-ledger.md, references/payments-nuvei.md, references/architecture.md.
Ledger
- Append-only, double-entry (UPDATE/DELETE yok; düzeltme = ters kayıt).
- Tutarlar: integer cent veya
decimal; float yok.
- Hesaplar:
user_available:{userId}:{currency}
match_escrow:{matchId}:{currency}
house_revenue:{currency}
user_withdraw_hold:{userId}:{currency}
Match lifecycle
CREATED → FUNDED → IN_PROGRESS → SETTLED
↘ CANCELED (tam refund, rake yok)
Para akışı
| Aşama |
Davranış |
| Fund |
Her oyuncudan entry_fee → match_escrow (tek DB transaction, her iki oyuncu atomik) |
| Settle |
Escrow → kazanan + house_revenue (rake); status SETTLED; idempotent |
| Cancel |
Escrow → her iki user_available; status CANCELED; rake yok; idempotent |
Varsayılan ekonomi örneği (config ile değişir): entry 3€ + 3€ = 6€ → kazanan 5€, rake 1€.
PostgreSQL
- Tüm para hareketleri ACID transaction içinde.
- Bakiye yarışı:
SELECT ... FOR UPDATE.
- Settlement/refund:
status kontrolü + unique event_id / txn_group_id.
Nuvei
- Nuvei: gerçek pay-in / pay-out.
- Ledger: iç muhasebe, escrow, liability.
- Deposit: intent
PENDING → webhook SoT → sadece SUCCEEDED ile user_available CREDIT.
- Withdraw:
available → withdraw_hold → payout → webhook ile PAID veya hold geri alma.
- Webhook: signature doğrula,
event_id ile idempotent, hızlı ACK + queue/worker.
Realtime
- Server-authoritative; client timestamp’leri otorite değil.
- Disconnect: oyun dokümanındaki grace/cancel politikası; tamamlanamazsa CANCELED + full refund.
Matchmaking (iskelet tamamlaması)
- Paid queue’ya girmeden
user_available >= entry_fee kontrol et.
- Eşleşince tek transaction’da her iki oyuncuyu fund et (
FUNDED).
- Fund başarısızsa eşleşmeyi geri al; kısmi düşüm bırakma.
- Sonra realtime odayı aç (
IN_PROGRESS).
Oyundan alınanlar (dokümandan)
Bunları oyun dokümanından çıkar; uydurma:
- Süre, skor, hamle kuralları, beraberlik
- Disconnect / reconnect / forfeit
- Anti-cheat
- Client↔server event’ler ve authoritative state
- Edge case’ler
Uygulama sırası
- Accounts + ledger + balance okuma
- Deposit / withdraw (Nuvei webhook)
- Match fund / settle / cancel
- Matchmaking queue → fund → oda
- Game loop (server-authoritative, dokümana göre)
- Reconciliation job + withdraw risk/limit politikası
Çıktı beklentisi
Uygulama veya tasarım üretirken:
- Ledger hareketlerini account + direction + amount ile yaz
- Match status geçişlerini açık tut
- Settlement ve refund’u idempotent yap
- Oyun kurallarını dokümana bağla; çelişki varsa dokümana sor
Progressive disclosure
- Escrow/settlement adımları → references/escrow-ledger.md
- Nuvei deposit/withdraw → references/payments-nuvei.md
- Şema, güvenlik, checklist → references/architecture.md
- Yeni oyun şablonu → templates/game-documentation.md
1---2name: real-money-pvp3description: Builds real-money 1v1 PvP games with matchmaking, PostgreSQL double-entry ledger, match escrow, rake settlement, refunds, and Nuvei deposit/withdraw. Use when creating or extending a paid matchmaking game, implementing escrow or ledger money flows, integrating Nuvei pay-in/payout webhooks, or when the user provides a game mechanics document for a real-money PvP app.4---56# Real-Money PvP78Gerçek paralı 1v1 PvP uygulamaları için sabit finansal/backend iskeleti.9Oyun mekanikleri her projede değişir; para, escrow, settlement ve Nuvei akışları değişmez.1011## Ne zaman kullan1213- Yeni gerçek paralı PvP / matchmaking uygulaması kurulurken14- Escrow, ledger, rake, refund, deposit, withdraw işleri yapılırken15- Kullanıcı bir oyun dokümantasyonu verip “bu sistemle kur” dediğinde1617## Girdi kontrolü (zorunlu)18191. Projede oyun mekanik dokümanını bul (`docs/game.md`, `GAME.md`, veya kullanıcının verdiği path).202. Yoksa [templates/game-documentation.md](templates/game-documentation.md) şablonunu iste; doldurulmadan oyun loop’u uydurma.213. Örnek format için [examples/clue-rush.md](examples/clue-rush.md) ve [examples/last-move.md](examples/last-move.md) oku.224. Ekonomi/iskelet için oyun dokümanındaki “3€/5€/1€” gibi örnek rakamları **yeniden icat etme** — sabit iskeleti uygula; tutarlar proje config’inden gelir.2324**Kural:** Sabit iskeleti oyuna uydurma. Oyunu iskelete oturt.2526## Sabit iskelet (değiştirme)2728Detay: [references/escrow-ledger.md](references/escrow-ledger.md), [references/payments-nuvei.md](references/payments-nuvei.md), [references/architecture.md](references/architecture.md).2930### Ledger3132- Append-only, double-entry (UPDATE/DELETE yok; düzeltme = ters kayıt).33- Tutarlar: integer cent veya `decimal`; **float yok**.34- Hesaplar:35 - `user_available:{userId}:{currency}`36 - `match_escrow:{matchId}:{currency}`37 - `house_revenue:{currency}`38 - `user_withdraw_hold:{userId}:{currency}`3940### Match lifecycle4142```43CREATED → FUNDED → IN_PROGRESS → SETTLED44 ↘ CANCELED (tam refund, rake yok)45```4647### Para akışı4849| Aşama | Davranış |50|-------|----------|51| Fund | Her oyuncudan `entry_fee` → `match_escrow` (tek DB transaction, her iki oyuncu atomik) |52| Settle | Escrow → kazanan + `house_revenue` (rake); status `SETTLED`; idempotent |53| Cancel | Escrow → her iki `user_available`; status `CANCELED`; rake yok; idempotent |5455Varsayılan ekonomi örneği (config ile değişir): entry 3€ + 3€ = 6€ → kazanan 5€, rake 1€.5657### PostgreSQL5859- Tüm para hareketleri ACID transaction içinde.60- Bakiye yarışı: `SELECT ... FOR UPDATE`.61- Settlement/refund: `status` kontrolü + unique `event_id` / `txn_group_id`.6263### Nuvei6465- **Nuvei:** gerçek pay-in / pay-out.66- **Ledger:** iç muhasebe, escrow, liability.67- Deposit: intent `PENDING` → webhook SoT → sadece `SUCCEEDED` ile `user_available` CREDIT.68- Withdraw: `available` → `withdraw_hold` → payout → webhook ile `PAID` veya hold geri alma.69- Webhook: signature doğrula, `event_id` ile idempotent, hızlı ACK + queue/worker.7071### Realtime7273- Server-authoritative; client timestamp’leri otorite değil.74- Disconnect: oyun dokümanındaki grace/cancel politikası; tamamlanamazsa **CANCELED + full refund**.7576### Matchmaking (iskelet tamamlaması)77781. Paid queue’ya girmeden `user_available >= entry_fee` kontrol et.792. Eşleşince tek transaction’da her iki oyuncuyu fund et (`FUNDED`).803. Fund başarısızsa eşleşmeyi geri al; kısmi düşüm bırakma.814. Sonra realtime odayı aç (`IN_PROGRESS`).8283## Oyundan alınanlar (dokümandan)8485Bunları oyun dokümanından çıkar; uydurma:8687- Süre, skor, hamle kuralları, beraberlik88- Disconnect / reconnect / forfeit89- Anti-cheat90- Client↔server event’ler ve authoritative state91- Edge case’ler9293## Uygulama sırası94951. Accounts + ledger + balance okuma962. Deposit / withdraw (Nuvei webhook)973. Match fund / settle / cancel984. Matchmaking queue → fund → oda995. Game loop (server-authoritative, dokümana göre)1006. Reconciliation job + withdraw risk/limit politikası101102## Çıktı beklentisi103104Uygulama veya tasarım üretirken:105106- Ledger hareketlerini account + direction + amount ile yaz107- Match status geçişlerini açık tut108- Settlement ve refund’u idempotent yap109- Oyun kurallarını dokümana bağla; çelişki varsa dokümana sor110111## Progressive disclosure112113- Escrow/settlement adımları → [references/escrow-ledger.md](references/escrow-ledger.md)114- Nuvei deposit/withdraw → [references/payments-nuvei.md](references/payments-nuvei.md)115- Şema, güvenlik, checklist → [references/architecture.md](references/architecture.md)116- Yeni oyun şablonu → [templates/game-documentation.md](templates/game-documentation.md)