Equidad demostrable
El resultado de cada jugada queda fijado antes de la apuesta y cualquiera puede recalcularlo: no hace falta creernos.
Cómo funciona
En un casino físico ves girar la carta, caer los dados, dar vueltas la ruleta. En línea eso ocurre dentro de un programa, y es el programa lo que hay que comprobar.
Antes de la apuesta el servidor publica el hash SHA-256 de su semilla secreta. Cambiar la semilla después es imposible: el hash lo delataría. Cuando el par de semillas se cambia, la semilla anterior del servidor se revela, y cualquier tirada hecha con ese par se puede recalcular con la fórmula de abajo.
La comisión de la casa es del 1%. El pago se calcula como apuesta × 99 ÷ probabilidad en porcentaje, así que al jugador le vuelve el 99% del valor esperado. Es lo único que diferencia el juego de una moneda limpia; no se retiene nada más.
Semillas
Un par de semillas es tuyo y nuestro. La semilla del servidor se genera al azar y su hash se muestra de inmediato: la semilla en sí sigue en secreto hasta que se cambia el par, porque de lo contrario las tiradas futuras se conocerían de antemano. La semilla del cliente la pones tú, y sin ella no hay tirada que calcular: el resultado depende de ambas partes.
El tercer ingrediente es el nonce, el número de la apuesta dentro del par actual. Sube de uno en uno con cada jugada, así que dos tiradas del mismo par nunca parten de los mismos datos.
Cómo se obtiene el número
La semilla del servidor, la semilla del cliente y el nonce se combinan en un HMAC-SHA512. Los 128 caracteres hex resultantes se leen en ventanas de cinco: el primer valor menor que 1 000 000 se toma módulo 10 000, lo que da una tirada de 0 a 9999, es decir, de 0.00 a 99.99.
El umbral de descarte está por equidad: una ventana de cinco caracteres hex da números de hasta 1 048 575, y ese rango no se divide exacto entre 10 000; sin descarte, los resultados bajos saldrían más a menudo que los altos. 1 000 000 sí se divide exacto, así que los 10 000 resultados son igual de probables. La probabilidad de que se descarten las 25 ventanas es del orden de 10⁻³³.
hex = HMAC_SHA512(key = serverSeed, msg = clientSeed + "-" + nonce) Leemos el hex en ventanas seguidas de 5 caracteres (0-4, 5-9, …): el primer valor < 1 000 000 → roll = valor % 10000 (si se descartan las 25 ventanas — roll = 9999) Menor: ganas si roll < target · Mayor: ganas si roll > target Pago = apuesta × 9900 / chanceUnits (redondeo hacia abajo) · comisión 1%
Código del motor
Exactamente lo que calcula las tiradas en el servidor, y exactamente lo que las recalcula en tu navegador. Que las dos partes coincidan lo garantiza un test.
const WINDOW = 5; // caracteres hex por ventana: 20 bits, 0..1048575
const REJECT = 1_000_000; // el mayor múltiplo de 10000 que cabe en una ventana
function roll(serverSeed, clientSeed, nonce) {
const hex = createHmac("sha512", serverSeed)
.update(`${clientSeed}-${nonce}`)
.digest("hex"); // 128 caracteres
// ventanas de 5 caracteres hex seguidos: 0-4, 5-9, ... 120-124
for (let i = 0; i * WINDOW + WINDOW <= hex.length; i++) {
const lucky = parseInt(hex.slice(i * WINDOW, i * WINDOW + WINDOW), 16);
if (lucky < REJECT) return lucky % 10000; // 0..9999
}
// se han descartado las 25 ventanas (probabilidad ~1e-33)
return 9999;
}
// pago: comisión del 1%, redondeo hacia abajo
const payout = (amount, chanceUnits) => amount * 9900n / BigInt(chanceUnits);
Cómo comprobar tu propia jugada
En la mini aplicación: Equidad en la barra inferior, o «Verificar la jugada» en la tarjeta de cualquier apuesta.
- Pestaña «Semillas»: aquí está el hash de la semilla del servidor vigente. Quedó fijado antes de tus apuestas.
- Cambia el par de semillas. La semilla anterior del servidor se revela; tu semilla del cliente sigue siendo tuya.
- Pestaña «Reveladas»: la semilla revelada aparece junto a su hash. Compruébalo: el SHA-256 de la semilla debe coincidir con el que se mostraba antes de las apuestas.
- Pestaña «Verificar»: pega la semilla del servidor, la semilla del cliente y el nonce de la apuesta en cuestión. La tirada se recalcula en tu propio navegador y se compara con el resultado de la jugada.
El cálculo se hace en tu dispositivo y no pasa por nuestro servidor. Con la fórmula de arriba puedes repetirlo en cualquier lenguaje: HMAC-SHA512 está en todas partes.