NACHWEISLICH FAIR
Jedes Mal, wenn eine Wette eines Nutzers im Jackpot registriert wird, wird die Uhrzeit der Wette aufgezeichnet. Falls mehrere Wetten getätigt werden, werden diese einfach zur bestehenden Wette addiert, ohne die Registrierungszeit zu ändern. Sobald der Countdown 0 erreicht, werden die Wetten chronologisch sortiert, die insgesamt gesetzten Münzen summiert und eine Zufallszahl zwischen 1 und der Gesamtzahl der Münzen generiert.
Beispielsweise, wenn es 3 Wetten von 500, 700 und 100 Münzen gibt, beträgt die Gesamtsumme 1300 Münzen. In diesem Fall wird eine Zahl zwischen 1 und 1300 (einschließlich) generiert. Wenn die generierte Zahl 1000 ist, gewinnt der Nutzer, der 700 Münzen gesetzt hat.
import crypto from "crypto";const serverSeed = "1234";const publicSeed = "abcd";const nonce = 3;const roundBets = [{ user: "Macaco", betAmount: 500, createdAt: "2025-11-23T22:04:02.324Z" },{ user: "Tarifa", betAmount: 700, createdAt: "2025-11-23T22:04:03.324Z" },{ user: "Mono", betAmount: 100, createdAt: "2025-11-23T22:04:05.324Z" }];const seed = `JACKPOT-${serverSeed}-${publicSeed}:${nonce}`;const MACACO_WINS = doesBotMacacoWins(seed);if (MACACO_WINS) {console.log("Ganador: MACACO BOT");return;}const WINNER = calculateWinner(seed, roundBets);console.log("El ganador del Jackpot es", WINNER);function doesBotMacacoWins(seed) {const hash = crypto.createHmac("sha256", seed).digest("hex");const h = Number.parseInt(hash.slice(0, 52 / 4), 16);const e = Math.pow(2, 52);const roll = Math.floor(h/e * 100);return roll < 7;}function calculateWinner(seed, roundBets) {roundBets.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());const totalCoins = roundBets.reduce((sum, bet) => sum + bet.betAmount, 0);const hash = crypto.createHmac("sha256", seed).digest("hex");const h = Number.parseInt(hash.slice(0, 52 / 4), 16);const e = Math.pow(2, 52);const WINNER_TICKET = Math.floor(h/e * totalCoins) + 1;let cumulative = 0;for (const bet of roundBets) {const start = cumulative + 1;cumulative += bet.betAmount;if (WINNER_TICKET >= start && WINNER_TICKET <= cumulative) {return bet.user;}}throw new Error("No winner calculated. This should never happen if roundBets is valid.");}