'Deterministik' settlement katmanında ne demek

Deterministik settlement bir kontrattır: aynı input her zaman aynı output'u üretmelidir. Bir bahis kaydı ve resmi sonuç kaydı verildiğinde, settlement fonksiyonu üç değerden birini döner — settled, void, pending_review — ve aynı argümanlarla yapılan ikinci çağrı bir saat, bir hafta veya bir yıl sonra aynı değeri dönmelidir. Mantıkta zaman damgası yok, Math.random() yok, paylaşılan değişken state okuması yok.

Bu üretimde ne kadar sık ihlal edildiğini görene kadar bariz gelir. Void iadesini hesaplamak için mevcut oran cache'ini okuyan bir worker deterministik değildir. Bu uyarılar entegrasyon anatomisi yazımızda tartışılıyor.

Sporbet Soft motoru determinizmi, settlement'ı iki argümanın saf fonksiyonu olarak ele alarak — versiyonlanmış ve replay edilebilir — uygular.

Birinci adım: fonksiyon çalışmadan önce kaynak feed doğrulaması

Settlement fonksiyonu çalışmadan önce, motor resmi sonucu doğrular. Sonuç birincil feed'lerden biri (Sportradar/Betradar, Genius Sports, BetGenius) artı opsiyonel ikinci feed cross-check ile iner. Doğrulama katmanı beş kapıdan herhangi birinde başarısız olan sonuçları reddeder. Outlier skorlar — futbol maçında 47-12 final — işaretlenir. İki feed arasında çelişen skorlar trading inceleme kuyruğuna alınır. Resmi bitiş eşiğinden önce gelen sonuçlar minimum dakika eşiği (futbol için tipik olarak 85. dakika) geçene kadar tutulur.

Bir sonuç ancak beş kapıyı geçtikten sonra settlement input'u olur. Bu, kötü bir feed olayının bir marketi yanlış yönde otomatik settle etmesinin operatöre çeyreklik vendor ücretinden fazlasına mal olabileceğini hatırlayana kadar overhead gibi gelir.

İkinci adım: market template araması ve fonksiyon seçimi

Sportsbook'un sunduğu her market versiyonlanmış bir market template ile desteklenir: marketin adını, seçimlerini, parametrelerini ve — kritik olarak — onu nasıl settle edeceğini bilen settlement fonksiyonuna referansı yakalayan bir JSON belgesi. Bir 1X2 full-time market settle_1x2_ft fonksiyonuna işaret eder. Asian handikap -1.25, bet kaydına gömülü line parametresiyle settle_asian_handicap'a işaret eder.

Template versiyonludur çünkü market tanımları değişir. Bir lig ani-ölüm uzatmadan iki-periyot uzatma formatına geçtiğinde, ilgili template yeni bir versiyon yayınlar ve motor yeni bahisleri yeni fonksiyona yönlendirir; uçuşta olan bahisler ise placement anındaki versiyona bağlı kalır. Beş yıllık bir bahis hâlâ konulduğu günkü kurallar altında settle olur.

Üçüncü adım: fonksiyon çalıştırma ve replay loglaması

Sonuç doğrulandıktan ve template seçildikten sonra settlement fonksiyonu çalışır. Fonksiyon az çok saf bir kod parçasıdır — bahisi, sonucu, opsiyonel olarak önceki settlement denemesini (replay senaryoları için) alır ve settlement kararını artı ödeme tutarını döner. I/O yok, saat okuması yok, rastgele sayı yok.

Her çalıştırma append-only audit log'a bir settlement olayı yazar. Olay bet ID, sonuç ID, template ID ve versiyonu, fonksiyon ID ve versiyonu, karar, ödeme, duvar saati zaman damgası, worker ID ve input hash'lerini yakalar. Log gerçeğin kaynağıdır.

Sporbet Soft audit log'u, her settlement'ı en güncel fonksiyon versiyonlarına karşı geceleyin yeniden çalıştıran ve sapma işaretleyen sentetik bir replay harness ile eşleştirir. Dört yıl operasyonda iki gerçek settlement bug'ı bu şekilde herhangi bir müşteri fark etmeden yakalandı.

Void semantikleri ve zaten settle edilmiş seçimlerin değişmezliği

Void, naif settlement motorlarının dağıldığı yerdir. Sezgisel yorum — 'maç void edildi, hepsini geri çevirelim' — tehlikelidir. Eğer bir oyuncu dört ayaklı bir kombine yaptıysa ve üçüncü ayak zaten settle edilip kredi edildiyse, tüm maçı geriye dönük void etmek motoru harcanmış veya çekilmiş bir cüzdandan krediyi geri almaya zorlar.

Sporbet Soft kuralı açıktır: zaten settle edilmiş seçimler void üzerinde değişmezdir. Bir maç void edildiğinde, motor sadece o anda hâlâ pending olan seçimleri void eder; zaten settled olanlar settled kalır ve multi-bet ödemesi, void edilen ayağı 'void ayak' — yani efektif oranı 1.00 — olarak ele alarak yeniden hesaplanır.

Operatör kontrollü maç finalize kuralları başına — bkz. operatör seviyesi risk kontrolleri — void işlemi sabit bir taxonomi'den reason kodu (abandonment, walkover, geriye dönük annulment, vb.) ve bir operatör user ID gerektirir.

Multi-bet recompute ve kısmi cashout reconciliation

Multi-bet recompute motordaki yüksek kaldıraçlı özelliklerden biridir. Bir kombinenin tek ayağı settle olduğunda, motor tüm bahisin hazır olmasını beklemez — bahisin exposure'ını ve operatörün açık liability'sini artımlı olarak yeniden hesaplar. Eğer ayak kaybederse, bahis hemen kayıp olarak settle edilir ve operatörün bu bahis için liability'si sıfıra düşer.

Kısmi cashout ikinci bir eksen ekler. İki ayak kazandıktan sonra dört ayaklı bir kombinenin %40'ını cashout eden bir oyuncu bahisin %60'ını aktif bırakır; motor %40 cashout'u cüzdana karşı uzlaştırmalı, orijinal stake'in %60'ını hâlâ-risk-altında olarak işaretlemeli ve kalan ayaklar settle oldukça multi'yi yeniden hesaplamaya devam etmelidir.

Mühendislik zorluğu matematik değil eşzamanlılıktır. Sporbet Soft, bet ID, leg ID ve settlement deneme sayacından türetilen idempotency anahtarları kullanır — bkz. oran gecikmesi yazımız.

Dispute çözümü: audit-trail linki cevaptır

Trading-floor Slack mesajı gerektiren bir dispute çözüm akışı, Slack mesajı gibi ölçeklenir — yani hiç ölçeklenmez. Sporbet Soft modeli her disputünün partner panelindeki bahisin audit-trail linkinde başlayıp bittiğidir. Link tek ekranda gösterir: bahis kaydı, placement ve settlement'taki oyuncu cüzdan snapshot'ı, doğrulanmış kaynak feed sonucu, template versiyonu, fonksiyon versiyonu, karar, ödeme, her cashout olayı, her void olayı ve tek tıkla replay butonu.

Replay butonu settlement fonksiyonunu orijinal input'lara karşı yeniden çalıştırır ve sonucu inline gösterir. Sporbet Soft'ta settlement dispute'unun ortalama çözüm süresi iki dakikanın altında; karşılaştırılabilir tier-1 platform benchmark'ı iki güne yakın.

Fonksiyon gerçekten yanlış yaptığında — 10M+ settle edilmiş bahis üzerinde iki kez oldu — manuel settlement override akışı devreye girer. Bunlar iframe'in mühendislerinizden sakladığı detaylardır.