A SpyDota usa o algoritmo Provably Fair para que qualquer jogador possa verificar a justiça de um jogo. O resultado de uma caixa ou de um upgrade é definido por uma seed do servidor fixada de antemão, pela sua seed do cliente e pelo número do jogo, então ele não pode ser manipulado depois que o jogo começa.

A seed do servidor é o valor secreto a partir do qual o resultado do jogo é calculado. Para recalcular um jogo, a seed precisa ser revelada — o card do jogo faz isso por você.
Clique no seu avatar no topo do site, abra a aba “Histórico” e escolha “Caixas” ou “Upgrades”.
O botão fica no fim da linha do jogo (no celular, role a tabela para a direita). No card que abrir, clique em “Verificar” de novo.
Para verificar o jogo, a seed do servidor precisa ser revelada. Criaremos um novo par de seeds: a seed atual será revelada e preenchida na verificação, e os números dos jogos recomeçarão.
Se a seed ainda for secreta, o card vai oferecer “Trocar seeds e verificar”. A seed antiga será revelada — depois disso, dá para verificar todos os jogos feitos com ela. Os jogos novos recomeçam a contagem do 1, e os já jogados não mudam. Se a seed já foi revelada, este passo não aparece.
Seu navegador recalculou o jogo com a seed revelada e o resultado confere com o registro do servidor.
A página de verificação vai abrir. “Confere” significa que o seu navegador recalculou o jogo e chegou ao mesmo resultado que o servidor registrou. Compare o item marcado como “saiu” com a linha do histórico; no upgrade, veja “Vitória” ou “Derrota”.
Jogos feitos antes do lançamento do Provably Fair, presentes e itens concedidos não têm o botão “Verificar”. Se o item foi substituído, a verificação vale para o drop original. Se aparecer “Não confere”, salve a seed do servidor e fale com o suporte.
Antes do jogo você vê o hash da seed do servidor, então o servidor não pode mais trocar os dados de origem sem que você perceba.
Sua seed e o número do jogo participam do cálculo, então o resultado não é formado só pelo servidor.
Informe os dados de um jogo. O cálculo é feito no seu navegador e nada é enviado ao servidor.
Preencha os dados do jogo e toque em “Verificar”: o número sorteado e o item aparecerão aqui.
Seed do servidor + Sua seed + Número do jogo = Resultado justo
O servidor escolhe uma seed do servidor aleatória e mostra apenas o hash SHA-256 dela. Depois disso a seed não pode ser trocada: o hash deixaria de conferir.
Para cada jogo é calculado um HMAC-SHA256. A chave é a seed do servidor como uma string hex de 64 caracteres, exatamente como está, sem decodificar em bytes. A mensagem é montada com o tipo de jogo, o jogo, a sua seed do cliente e o número do jogo.
Os primeiros 8 caracteres hex do hash dão um número de 0 a 4.294.967.295. Dele sai o ticket de 1 a 100.000.000: floor(número × 100.000.000 / 2^32) + 1.
Na tabela de chances no momento do jogo, cada item tem o seu intervalo de tickets. Sai o item em cujo intervalo o ticket cair.
O limite é floor(chance × 100.000.000). O upgrade vence se o ticket não for maior que o limite.
A seed do servidor é revelada quando você troca as seeds. Depois disso, qualquer jogo do par pode ser recalculado no navegador, nesta página, ou com o seu próprio código.
A chave é a string hex da seed do servidor como está (64 caracteres), e não os bytes decodificados dela. É aqui que a maioria das verificações feitas por conta própria dá errado.