Swipenor: skoru istemci hesaplarsa sunucu neye güvenir?
Devam ediyorKaydırmalı doğru/yanlış bilgi yarışması denemesi; asıl mesele oyun değil, istemcinin ürettiği skoru imzayla doğrulanabilir kılmak.
- Başlangıç
- Temmuz 2026 — Devam ediyor
Teknolojiler
Mekanik basit: kart gelir, sağa kaydırırsan “Doğru”, sola kaydırırsan “Yanlış”. Yaş grubuna göre içerik (4–9, 10–17, 18+), doğru cevapta puan, seri tutturunca bonus, global ve yaş bazlı sıralama. Basit olmayan kısım, skorun kime ait olduğu.
Ne denedim
Oyun döngüsü 60fps’te istemcide dönüyor (reanimated worklet’leri + gesture-handler); skoru da doğal olarak istemci hesaplıyor. Sunucunun bu sayıya körlemesine inanması ise sıralama tablosunu ilk gün çöpe çevirir.
Denenen model signed-client: oturum başında sunucu bir server_nonce
üretiyor, istemci skoru bu nonce ile HMAC’leyip imzalıyor, API hem makuliyet
kontrolü yapıyor hem imzayı doğruluyor. Puan sabitleri de istemcide sabit
değil — doğru cevap 100 puan, seri eşiği 3, seri bonusu +25 — hepsi GET /config ile sunucudan geliyor ki istemci ile sunucu birbirinden sapmasın.
Ne çıktı
Dört ayrı depo tek klasörde: game (Expo SDK 57, React Native, TypeScript),
api (Laravel 13, PostgreSQL 16, Redis), admin (Filament, paylaşılan
veritabanı üzerinde çalışır ama şemayı hiç migrate etmez — şemanın tek sahibi
API’dir) ve Astro ile yazılmış tanıtım sayfası. Çekirdek döngü uçtan uca
çalışıyor: kaydırma, puanlama, seri bonusu, global/yaş sıralaması.
Neden devam ediyor
Açık uçlar oyunun kendisinde değil, etrafında: reklam entegrasyonu ve tek seferlik “reklamları kaldır” satın alması, mağaza materyalleri ve yayın süreci. İmza modelinin gerçek kullanıcıya karşı ne kadar dayandığını da ancak yayında göreceğim.