Betrieb & Deployment
Tech-Stack
| Technologie |
Version |
Zweck |
| Next.js |
16.1.1 |
Full-Stack Framework |
| React |
19.2.3 |
UI-Rendering |
| pg |
8.17.2 |
PostgreSQL-Client |
| bcryptjs |
2.4.3 |
Passwort-Hashing |
| jsonwebtoken |
9.0.2 |
JWT-Auth |
| ethers |
6.16.0 |
Blockchain-RPC |
Deployment
Server-Konfiguration
- Port: 3002 (dev und prod)
- Host:
gameadmin.itsolution.co.at
- Prozess: Next.js Built-in Server (kein Docker)
NPM Scripts
npm run dev # Entwicklungsserver (Port 3002)
npm run build # Production Build
npm run start # Production Server (Port 3002)
Next.js Konfiguration
Minimale Konfiguration (next.config.ts) — Standard Next.js 16 Einstellungen.
Datenbank-Verbindung
Haupt-Datenbank (lib/db.ts)
const db = new Pool({
host: process.env.DB_HOST ?? "127.0.0.1",
port: Number(process.env.DB_PORT ?? 5432),
database: process.env.DB_NAME ?? "chainbets",
user: process.env.DB_USER ?? "chainbets",
password: process.env.DB_PASSWORD ?? "chainbets_dev_pw",
max: 5, // Connection Pool Size
});
Charity-Datenbank (lib/charityDb.ts)
const charityDb = new Pool({
database: "chainbets_charity",
max: 3, // Kleinerer Pool für Charity-DB
// ... gleiche Host/Port/Auth wie Haupt-DB
});
Umgebungsvariablen
Datenbank
| Variable |
Beschreibung |
Default |
DB_HOST |
PostgreSQL Host |
127.0.0.1 |
DB_PORT |
PostgreSQL Port |
5432 |
DB_NAME |
Datenbankname |
chainbets |
DB_USER |
Benutzer |
chainbets |
DB_PASSWORD |
Passwort |
chainbets_dev_pw |
Authentifizierung
| Variable |
Beschreibung |
Default |
ADMIN_JWT_SECRET |
JWT-Signing-Secret |
chainbets-admin-dev-secret |
Blockchain / RPC
| Variable |
Beschreibung |
RPC_URL |
Primary RPC Endpoint |
NEXT_PUBLIC_RPC_URL |
Public RPC (Client-side) |
PRIMARY_RPC_URL |
Fallback RPC |
Smart Contracts
| Variable |
Beschreibung |
USDT |
USDT Token Contract |
GAMEMANAGER |
GameManager Contract |
SETTLEMENT |
Settlement V4 Contract |
PRIZE_VAULT_V2 |
Prize Vault Contract |
RESERVE_VAULT |
Reserve Vault Contract |
CHARITY_VAULT |
Charity Vault Contract |
AFFILIATE_VAULT |
Affiliate Vault Contract |
CLAIM_ROUTER |
Claim Router Contract |
GAME_TREASURY |
Game Treasury Contract |
VRF_RECEIVER |
VRF Receiver Contract |
OPERATOR |
Operator/Relayer Contract |
TREASURY_SAFE |
Dev-Multisig |
TREASURY_SAFE_PROD |
Prod-Multisig |
Externe Dienste
| Variable |
Beschreibung |
ARBISCAN_API_KEY |
Arbiscan API Key |
Sicherheit
Middleware (proxy.ts)
Die Middleware schützt alle Routen mit einer Whitelist:
- Öffentliche Routen (kein Auth nötig):
/login, /api/auth/login
- Next.js Internals (durchgelassen):
/_next/, /favicon.ico
- Geschützte Routen: Alle anderen — JWT-Cookie wird geprüft
- Unbekannte Routen: 404 (API) oder Redirect zu
/login
Authentifizierung
- Cookie:
admin_session (httpOnly, secure in Production, SameSite=lax)
- JWT-Ablauf: 24 Stunden
- Passwort: bcrypt-gehashed in
admin_users-Tabelle
- Login:
last_login Timestamp wird bei jedem Login aktualisiert
Berechtigungen
- Kein Rollen-System — jeder authentifizierte Admin hat vollen Zugriff
- Schreiboperationen nur auf: Vouchers (POST), Config (POST/PUT/DELETE), Charity (POST/PUT/DELETE), Maintenance (PUT)
- Alle anderen Endpoints sind read-only
Referenzierte Datenbank-Tabellen
| Tabelle |
Datenbank |
Verwendung |
admin_users |
chainbets |
Admin-Konten & Passwörter |
users |
chainbets |
Spielerprofile |
tickets |
chainbets |
Ticket-Käufe |
buy_intents |
chainbets |
Kaufabsichten-Lifecycle |
extra_bonus_vouchers |
chainbets |
Bonus-Gutscheine |
affiliate_rates |
chainbets |
Affiliate-Beziehungen |
settlement_runs |
chainbets |
Settlement-Historie |
settlement_winner_payouts |
chainbets |
Gewinner-Auszahlungen |
user_error_logs |
chainbets |
Benutzer-Fehlerlogs |
watchdog_runs |
chainbets |
Watchdog-Durchläufe |
watchdog_alerts |
chainbets |
Watchdog-Alerts |
seed_updates |
chainbets |
VRF/Drand-Seed-Updates |
bo_config |
chainbets |
Plattform-Konfiguration |
chain_stats |
chainbets |
Chain-Statistiken & Maintenance |
settlement_pipeline_runs |
chainbets |
Pipeline-Status |
voting_rounds |
chainbets_charity |
Charity-Abstimmungsrunden |
projects |
chainbets_charity |
Charity-Projekte |
votes |
chainbets_charity |
Abstimmungen |
Blockchain-Integration
- Netzwerk: Arbitrum Sepolia (Testnet, konfigurierbar)
- Zugriff: Read-Only (keine Transaktionssignierung)
- RPC-Provider: Alchemy
- Externe Dienste: Chainlink VRF, Drand (League of Entropy)
- E-Mail: Resend.com (Re-Engagement)