Provably Fair
Sistema de verificação de honestidade. Você pode reproduzir e conferir o resultado de qualquer batalha — provando que nada foi manipulado.
Como funciona
antes do jogo
Compromisso
Publicamos só o hash do server seed — impossível mudar depois.
durante
Jogo
Cada rodada combina server seed + client seed + nonce num roll.
depois
Revelação
O server seed é revelado — você recalcula e confere tudo.
O resultado de cada rodada é calculado com base em três valores:
- server seed — parte secreta do servidor, publicada só como hash antes do jogo (revelar antes permitiria prever resultados).
- client seed — parte pública/do jogo (na batalha =
id-da-batalha:slot). - nonce — o número da rodada (1, 2, 3…), garantindo um resultado único por rodada.
roll = HMAC‑SHA256(serverSeed, "clientSeed:nonce") → primeiros 8 hex ÷ 0xffffffff → número [0,1)
Depois que a batalha termina, o server seed é revelado — aí você recalcula e confirma que bate com o hash publicado.
Código de verificação
console
// Verificação (JavaScript) — cole no console do navegador
async function roll(serverSeed, clientSeed, nonce) {
const enc = new TextEncoder();
const key = await crypto.subtle.importKey("raw", enc.encode(serverSeed),
{ name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
const sig = await crypto.subtle.sign("HMAC", key, enc.encode(clientSeed + ":" + nonce));
const hex = [...new Uint8Array(sig)].map(b => b.toString(16).padStart(2,"0")).join("");
return parseInt(hex.slice(0,8), 16) / 0xffffffff;
}
// ex.: roll(serverSeed, battleId + ":" + slot, rodada).then(console.log)Verifique uma batalha
Cole o ID (ou o link) de uma batalha finalizada.