Ισορροπία και πορτοφόλια: αρχιτεκτονική πολλαπλών πορτοφολιών
1) Γιατί πολυ-πορτοφόλι και ποιοι στόχοι
Μία εγγραφή «ισοζύγιο = αριθμός» δεν καλύπτει την πραγματικότητα του iGaming. Χρειάζονται χωριστά πορτοφόλια/υποπληθυσμοί: πραγματικό χρήμα (μετρητά), χρηματικά επιδόματα, χαρτοφυλάκιο στοιχημάτων, freespins, σημεία υπολογιστών, ενίοτε νομισματικά πορτοφόλια (EUR/USD/BRL).
Οι στόχοι της αρχιτεκτονικής είναι οι εξής:- Ακρίβεια χρήματος (διπλή εγγραφή, δυνατότητα ελέγχου).
- Πολιτικές διαγραφής (για παράδειγμα, πρώτη πριμοδότηση/vager, στη συνέχεια μετρητά).
- Ταχύτητα (p95 API ≤ 250-400 ms, ποντάρισμα/διακανονισμός σε πραγματικό χρόνο).
- Ασφάλεια και συμμόρφωση (KYC/AML, όρια υπεύθυνου παιχνιδιού, ρυθμιστικές αρχές).
- Κλίμακα: κορυφές → δεκάδες χιλιάδες επιχειρήσεις/sec, δισεκατομμύρια θέσεις/μήνα.
2) Μοντέλο δεδομένων: «Ledger + Subwallets»
Ελάχιστες οντότητες
Λογαριασμός: παίκτης/εμπορικό σήμα/αγορά.
Παράδειγμα πινάκων (απλουστευμένο)
sql
-- Λογαριασμοί ισολογισμού διπλής εγγραφής (συμπεριλαμβανομένων των επιχειρήσεων)
λογαριασμοί (id, owner_user_id, είδος, νόμισμα, καθεστώς,...)
-- Απόσπαση (διπλή εγγραφή, αναφορά σε επιχειρηματική συναλλαγή)
(id, , , , , νόμισμα, κατηγορία, , )
-- Διακρατήσεις (αποθεματικά)
κατέχει (id, account_id, amount_minor, νόμισμα, λόγος, expires_at, κράτος, operation_id, created_at)
-- Πολιτικές διαγραφής (προτεραιότητες)
(id, αγορά,  jsonb, )
-- Διασταυρούμενες συναλλαγματικές ισοτιμίες fx_rates (ccy_from, ccy_to, ισοτιμία, ακρίβεια, valid_from)Κανόνας: Η αλήθεια ζει στο περιοδικό συναλλαγών ('ledger _ entries'). Το τρέχον ισοζύγιο είναι είτε ένα σύνολο (υλοποιημένο στιγμιότυπο), ή υπολογίζεται από ένα ημερολόγιο (ακριβό, αλλά μόνο αληθές).
3) Τύποι πορτοφολιών και η συμπεριφορά τους
4) Πολιτικές διαγραφής και σειρά προτεραιότητας
Σαφώς επισημοποιήστε τον αλγόριθμο για την πηγή των κεφαλαίων: Παράδειγμα (slots/καζίνο):1. Πρώτον, διαγράψτε από το WAGER (εάν το στοίχημα είναι ενεργό).
2. Στη συνέχεια, από την πρωτοβουλία BONUS έως την εξάντληση.
3. Το υπόλοιπο προέρχεται από μετρητά.
Παράδειγμα (αθλητισμός):1. Πρώτο CASH (ρυθμιστική αρχή/φόρος).
2. Στη συνέχεια, το BONUS (freebet) μεταφράζεται σε WAGER.
Εξοικονομήστε την «πολιτική απόφαση» ως χαρακτηριστικό γνώρισμα στις δημοσιεύσεις, έτσι ώστε η υποστήριξη και ο έλεγχος να δουν «γιατί την διέγραψαν».
5) Ο κύκλος ζωής του χρήματος και των πράξεων
Καταθέσεις
1. «POST/πορτοφόλι/κατάθεση» → δημιουργήσουν μια εκκρεμούσα καταχώριση (εισερχόμενα λουκάνικα PSP).
2. Webhook PSP (υπογραφή HMAC, idempotency by 'operation _ id') → credit CASH, category = 'DEPOSIT'.
3. Δημοσιεύουμε την εκδήλωση 'πορτοφόλι _ ενημερωμένη'.
Συντελεστής
1. 'POST/στοίχημα/τόπος' → δημιουργία αποθέματος (αποθεματικό) στον λογαριασμό πηγής (CASH/BONUS/WAGER).
2. Κατά την επιβεβαίωση του επιτοκίου, της μεταβίβασης της πηγής διακράτησης, η πίστωση του λογαριασμού «διακανονισμού» της υπηρεσίας του παρόχου.
3. Μετά την ακύρωση - κράτηση απελευθέρωσης.
Διακανονισμός (αποτέλεσμα)
Κέρδος: χρέωση του λογαριασμού «διακανονισμού» του παρόχου → πίστωση σε μετρητά ή WAGER→BONUS→CASH πολιτικής.
Ζημία: κλείσιμο της «δαπάνης» του παρόχου με μια συναλλαγή → χωρίς πιστώσεις στον παίκτη.
1. Έλεγχος KYC/AML, υπεύθυνα όρια παιχνιδιού.
2. Κρατήστε το ποσό της απόσυρσης.
3. Η επιτυχία του ΠΥΠ → τον τελικό χρεωστικό λογαριασμό μετρητών → πιστωτικού λογαριασμού «πληρωμή».
4. Η δεξαμενή απελευθέρωσης → PSP απέτυχε.
6) Ταυτότητα και ακριβώς μία φορά «κατά την έννοια»
Παντού 'operation _ i (UUID/ενισχυμένο ULID) με μοναδικό δείκτη. Επαναφορά → καθεστώς προηγούμενης συναλλαγής.
PSP/πάροχος παιχνιδιών webhooks: Inbox table with dedupe by 'event _ id + signature'. Επεξεργασία - idempotent εργαζόμενος (μοτίβο outbox).
Idempotency-Key στο HTTP για τον πελάτη· Φυλάσσετε το TTL ≥ 24- 72 ώρες.
7) Αποθεματικά και αποθεματικά
Η αναμονή δεν είναι διαγραφή, αλλά «πάγωμα» του διαθέσιμου υπολοίπου.
Κανόνες:- Διάρκεια ζωής: seconds→minutes (ρυθμός) ή ώρες (έξοδος).
- Η λαβή μπορεί να σβηστεί μερικώς ή πλήρως (μερική καθίζηση).
- Όταν λήξει - αυτόματη απελευθέρωση και εκδήλωση.
- Διατήρηση της σχέσης 'hold _ i ' bet _ id/recaw _ id '.
8) Νομίσματα, FX και στρογγυλοποίηση
Χρηματικά ποσά - σε μονάδες ήσσονος σημασίας (λεπτά), τύπος - ακέραιος.
Στρογγυλοποίηση της τράπεζας (στρογγυλοποίηση κατά το ήμισυ έως και) ή από την T&C.
FX: «CASH (EUR)» ↔ «CASH (USD)» είναι καλύτερο να διαιρεθούν τα πορτοφόλια. Μετατροπή ως ξεχωριστή πράξη:- «debit EUR, credit FX_EURUSD' and 'debit FX_EURUSD, credit USD» - διαφανής έλεγχος.
- Απαγορεύεται η αυτόματη «προσέγγιση» της πορείας μιας διαφοράς. όλοι οι κανόνες εμπίπτουν στην πολιτική FX.
9) Υπεύθυνος αγώνας και όρια
Όρια καταθέσεων/στοιχημάτων/ζημιών/συνεδριών (ημέρα/εβδομάδα/μήνα), ψύξη, αυτοαποκλεισμός.
Εφαρμόζεται ως προκαταρκτικός έλεγχος πριν από την κράτηση/χρέωση.
Αρχεία καταγραφής αστοχιών - σε χωριστό λογιστικό αρχείο, διαθέσιμο στην υποστήριξη και τη ρυθμιστική αρχή.
10) Σήματα καταπολέμησης της απάτης γύρω από το πορτοφόλι
Συστάδες συσκευών/ASN, συχνά μικρά κοιτάσματα → μεγάλες αναλήψεις, πλυντήρια ρούχων.
Όρια ταχύτητας στο «απόθεμα/εσωτερικό» από τον BIN/χώρα/συσκευή.
Καταλόγους για τους αποδέκτες (πορτοφόλια/IBAN), κατάλογος των «μουλαριών».
Εκδηλώσεις πορτοφολιού → στο κατάστημα χαρακτηριστικών βαθμολόγησης (σύνδεση/κατάθεση/τιμή).
11) Συνέπεια και επιδόσεις
True vs cache
Η αλήθεια είναι στο βιβλίο. Για το API «get balance», κρατήστε το υλοποιημένο στιγμιότυπο ('χρήστης _ id + πορτοφόλι _ type → balance_minor, έκδοση').
Εγγραφή: μια συναλλαγή στη βάση δεδομένων → ακυρώσει την κρύπτη.
Σε «βαριά» ροή (ζωντανή), είναι κατάλληλος ο έλεγχος της «μικρής» TTL 1-5 s + υποχρεωτικός έλεγχος αλήθειας πριν από την απόσυρση/μεγάλο στοίχημα.
Κλιμάκωση
Sharding by 'user _ id' (ενότητα/κατάταξη), ξεχωριστές ομάδες κομματιών για CASH vs BONUS.
Καυτά κλειδιά (VIP/bots) - ζητήστε συγχώνευση από τον χρήστη _ id.
Ασύγχρονες συγκεντρώσεις (συνθέστε 'απόσπαση' → 'snapshot-update' στο παρασκήνιο).
12) Συμβάσεις API (ψευδο)
Ισοζύγιο
http
GET/v1/πορτοφόλια τύποι = ΜΕΤΡΗΤΑ, BONUS
200 {«πορτοφόλια»: [
{"τύπος": "CASH", "νόμισμα": "EUR", "διαθέσιμο": 12050, "hol : 500," έκδοση ": 1942}, {" τύπος ":" BONUS "," νόμισμα ":" EUR "," διαθέσιμο ": 3000," στοίχημα _ req ": 15000}
]}Στοίχημα (με λαβή)
http
POST/v1/στοιχήματα/τόπος
{«bet _ id»: «b _ 123», «ποσό»: 500, «νόμισμα»: «EUR», «source _ policy»: «casino _ defaul ,» }
201 {«status»: «HEL ,» hold _ i : «h _ 789», «explires _ in»: 30}Διακανονισμός
http
POST/v1/στοιχήματα/διακανονισμός
{"bet _ id": "b _ 123", "αποτέλεσμα": "WIN", "payou : 1250}
200 {«status «: «SETLED «,» cash _ delta»: + 1250}http
POST/v1/αποσύρσεις
{«resaw _ i :» w _ 456 «,» ποσό «: 10000,» νόμισμα «:» EUR «,» μέθοδος «:» sepa «,» }
202 {«state»: «PENDING», «next _ check _ se : 2,» status _ ur : «/v1/αποσύρσεις/w _ 456 »}13) Παραδείγματα απόσπασης (διπλή εγγραφή)
€100 καταθέσεων (προμήθεια PSP €1, commis. λογαριασμός - χωριστός)
Χρέωση: PSP_Settlements (ευρώ) 10000
Πηγή: Χρήστης. ΜΕΤΡΗΤΑ (EUR) 10000
Χρέωση: χρήστης. Ταμειακές ροές (EUR) 100 (μετατόπιση τέλους)
Πηγή: PSP_Fees (ευρώ) 100Στοίχημα από την πρωτοβουλία BONUS (μεταφορά στο WAGER)
Χρέωση: χρήστης. BONUS (EUR) 500
Πηγή: Χρήστης. WAGER (EUR) 500 (μετακίνηση στο στοίχημα)
Χρέωση: χρήστης. ΣΤΟΙΧΗΜΑ (EUR) 500
Πηγή: Πάροχος. Διακανονισμός (ευρώ) 500 (διαγραφή επιτοκίου)Κερδίστε €12. 5 → σε μετρητά
Χρέωση: Πάροχος. Διακανονισμός (ευρώ) 1250
Πηγή: Χρήστης. ΜΕΤΡΗΤΆ (ΕΥΡΏ) 1250Διακοπή διαγραφής (υλοποίηση μέσω λογαριασμού υπηρεσίας HOLD)
Χρέωση: χρήστης. ΜΕΤΡΗΤΑ (EUR) 500
Πηγή: Χρήστης. HOLD (EUR) 500 (δημιουργήθηκε από αναμονή)
-- σε εκκαθάριση
Χρέωση: χρήστης. HOLD (EUR) 500
Πηγή: Πάροχος. Διακανονισμός (ευρώ) 500
-- για την ακύρωση
Χρέωση: χρήστης. HOLD (EUR) 500
Πηγή: Χρήστης. ΜΕΤΡΗΤΑ (EUR) 50014) Έλεγχος, αμετάβλητο και συμμόρφωση
WORM/ατρωσία καταγραφής (αποθήκευση αντικειμένου/αρχείο WAL).
Πρόσβαση σε μετα-αρχεία καταγραφής: ποιος διάβασε/άλλαξε τα όρια, ποιος έκανε χειροκίνητες προσαρμογές (μόνο μέσω «ρύθμισης-απόσπασης» με αιτιολόγηση).
GDPR/ρυθμιστικές αρχές: αποθήκευση συναλλαγών για 5-10 έτη (ανά δικαιοδοσία), διαφάνεια των διακανονισμών για τον παίκτη (ιστορικό διαγραφών/στοιχημάτων).
15) Ανοχή βλάβης και DR
Υποχρεωτική πολυ-AZ· περιφέρεια DR για το πορτοφόλι: αναπαραγωγή συγχρονισμού στη ζώνη, async - στην περιοχή· Ενεργοποιείται το PITR.
Προώθηση της αναμονής - μόνο χειροκίνητα μέσω της λίστας ελέγχου (εξαιρούνται οι διαιρέσεις εγκεφάλου).
Αποκατάσταση του εβδομαδιαίου ελέγχου (επαναφορά δοκιμής), συμφωνία του ποσού των αναφορών ελέγχου.
16) Παρατηρησιμότητα πορτοφολιού
SLI: 'deposit _ success _ ratio', 'recaw _ success _ ratio', 'bet _ hold _ latency _ p95', 'settlement _ latency _ p95'.
: 'ledger _ postings _ rate', 'db _ συνδέσεις _ κορεσμός', 'queue _ lag _ second Тех,' hold _ rate _ rate '.
Ειδοποιήσεις: Η επιτυχία του PSP μειώνεται στην αγορά, 'hold _ lied _ rate' ανάπτυξη, ο πάροχος παιχνιδιών εκτός συγχρονισμού (χωρίς επιβεβαιώσεις> N min).
17) Δοκιμές και ποιοτικός έλεγχος
Δοκιμές συμβάσεων με παρόχους PSP/παιχνιδιών (webhooks/υπογραφές).
Δοκιμές χρήματος βάσει περιουσιακών στοιχείων: άθροισμα χρεώσεων = = άθροισμα πιστώσεων σε κάθε απόσπαση.
Fuzz/χάος: καθυστερήσεις PSP/παρόχου, επαναλήψεις webhook, flappies δικτύου.
Φορτίο: στοίχημα διάρρηξης (60-120 s), εμποτισμός (4-8 h), έλεγχος 'queue _ lag' και p99.
18) Κατάλογος ετοιμότητας παραγωγής
- Είσοδος διπλού βιβλίου, όλες οι λειτουργίες μέσω της απόσπασης με «λειτουργία _ id».
- Σαφείς πολιτικές δαπανών και σειρά προτεραιότητας (εμμένει στην απόσπαση).
- Κρατάει με TTL/μερική εκκαθάριση/λήξη, επικοινωνία με στοίχημα/απόσυρση.
- Inbox/Outbox, HMAC webhooks, idempotency σε όλα τα σύνορα.
- Ατομικά πορτοφόλια CASH/BONUS/WAGER/FS/POINTS. κατανεμημένα ανά νόμισμα.
- Στρογγυλοποίηση FX και ήσσονος σημασίας· μετατροπή - ξεχωριστή πράξη.
- Όρια υπεύθυνου παιχνιδιού για την κράτηση/χρέωση· αδυναμία ελέγχου.
- Διαβάστε την κρύπτη (σύντομη TTL) + απαιτούσε έλεγχο αλήθειας πριν από κρίσιμες ενέργειες.
- PITR/αντίγραφα ασφαλείας/σενάρια DR; προωθεί με το χέρι, τακτικές ασκήσεις DR.
- Πίνακες/καταχωρίσεις SLI + τεχνικά· Κούτσουρα και κούτσουρα πρόσβασης.
- Δοκιμές φορτίου/χάους. εκθέσεις αντιπαραβολής με τους παρόχους υπηρεσιών πληρωμών.
Επανάληψη σύνοψης
Η αρχιτεκτονική πολλαπλών πορτοφολιών δεν είναι «πολλοί αριθμοί ισοζυγίου», αλλά ένα χρηματοπιστωτικό σύστημα με διπλή είσοδο, πολιτικές δαπανών, κρατήσεις και διαφανή διαδρομή για τον έλεγχο και τους παίκτες. Κρατήστε την αλήθεια στο ημερολόγιο, χρησιμοποιήστε το πορτοφόλι και την ταυτότητα, ξεχωριστά πορτοφόλια και νομίσματα, αυτόματη συμφιλίωση και DR. Με αυτόν τον τρόπο το πορτοφόλι θα είναι γρήγορο για UX, ακριβές για τα χρήματα και ανθεκτικό σε φορτία αιχμής και ρυθμιστικούς ελέγχους.
