Justiça comprovável
O resultado de cada jogada fica fixado antes da aposta e pode ser recalculado por qualquer um — não é preciso acreditar na nossa palavra.
Como funciona
Num cassino de verdade você vê a carta virar, o dado cair, a roleta girar. No jogo online isso acontece dentro de um programa — e é o programa que você tem de conferir.
Antes da aposta, o servidor publica o hash SHA-256 da sua semente secreta. Trocar a semente depois é impossível: o hash entregaria. Quando o par de sementes é trocado, a semente antiga do servidor é revelada — e toda rolagem feita com aquele par pode ser recalculada pela fórmula abaixo.
A taxa da casa é de 1%. O pagamento é aposta × 99 ÷ chance em porcentagem, ou seja, 99% do valor esperado voltam para o jogador. É a única coisa que diferencia o jogo de um cara ou coroa honesto; não há nenhuma outra retenção.
Sementes
O par de sementes é seu e nosso. A semente do servidor (server seed) nós geramos ao acaso e mostramos o hash dela na hora: a semente em si fica em segredo até a troca do par, senão as rolagens futuras seriam conhecidas de antemão. A semente do cliente (client seed) é você quem define, e sem ela não dá para calcular rolagem nenhuma — o resultado depende dos dois lados.
O terceiro ingrediente é o nonce, o número da aposta dentro do par atual. Ele sobe de um em um a cada jogada, então duas rolagens do mesmo par nunca partem dos mesmos dados de entrada.
Como o número é gerado
A semente do servidor, a semente do cliente e o nonce são combinados em um HMAC-SHA512. Os 128 caracteres hex que saem daí são lidos em janelas de cinco: o primeiro valor menor que 1 000 000 é reduzido módulo 10 000 — o que dá uma rolagem de 0 a 9999, isto é, de 0.00 a 99.99.
O limite de descarte existe por uma questão de justiça: uma janela de cinco caracteres hex dá números de até 1 048 575, e essa faixa não é múltipla de 10 000 — sem o descarte, os resultados baixos sairiam com mais frequência do que os altos. 1 000 000 é múltiplo, então todos os 10 000 resultados são igualmente prováveis. A chance de as 25 janelas serem descartadas é da ordem de 10⁻³³.
hex = HMAC_SHA512(key = serverSeed, msg = clientSeed + "-" + nonce) Lemos o hex em janelas seguidas de 5 caracteres (0-4, 5-9, …): primeiro valor < 1 000 000 → roll = valor % 10000 (se as 25 janelas forem descartadas — roll = 9999) Menor: ganha se roll < target · Maior: ganha se roll > target Pagamento = aposta × 9900 / chanceUnits (arredondado para baixo) · taxa de 1%
Código do motor
Exatamente o que calcula as rolagens no servidor, e exatamente o que as recalcula no seu navegador. Que os dois lados batem é garantido por um teste.
const WINDOW = 5; // caracteres hex por janela: 20 bits, 0..1048575
const REJECT = 1_000_000; // maior múltiplo de 10000 que cabe na janela
function roll(serverSeed, clientSeed, nonce) {
const hex = createHmac("sha512", serverSeed)
.update(`${clientSeed}-${nonce}`)
.digest("hex"); // 128 caracteres
// janelas 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
}
// as 25 janelas foram descartadas (probabilidade ~1e-33)
return 9999;
}
// pagamento: taxa de 1%, arredondado para baixo
const payout = (amount, chanceUnits) => amount * 9900n / BigInt(chanceUnits);
Como conferir a sua jogada
No mini app: Justiça na barra de baixo, ou «Verificar a jogada» no card de qualquer aposta.
- Aba «Sementes» — aqui está o hash da semente do servidor em uso. Ele foi fixado antes das suas apostas.
- Troque o par de sementes. A semente anterior do servidor é revelada; a sua semente do cliente continua sendo sua.
- Aba «Reveladas» — a semente revelada fica ao lado do hash dela. Confira: o SHA-256 da semente tem de bater com o que era mostrado antes das apostas.
- Aba «Verificar» — cole a semente do servidor, a semente do cliente e o nonce da aposta em questão. A rolagem é recalculada ali mesmo no seu navegador e comparada com o resultado da jogada.
O cálculo roda no seu aparelho e não passa pelo nosso servidor. Com a fórmula acima dá para repetir a conta em qualquer linguagem — HMAC-SHA512 existe em todas.