Por que o Dice não tem etapa de commit?
O Crash precisa de um segredo registrado (commit) porque o resultado dele tem que ficar definido, mas oculto enquanto a rodada acontece. Um lance de dado não tem essa fase: o resultado é consumido na mesma instrução que o sorteia. Então, em vez de fazer commit de um segredo, a derivação simplesmente não usa nenhum dado do operador: não há nada a registrar, nada a revelar e nenhuma seed que o operador possa escolher a seu favor. A entropia vem da própria rede Solana, misturada com valores que identificam a sua aposta:slothash: a entrada mais recente do sysvarSlotHashesda Solana no momento em que a transação da sua aposta é executada. É uma entropia produzida pela rede, desconhecida quando a transação é montada (quem envia não tem como saber exatamente em qual slot uma transação vai entrar).user: o endereço de 32 bytes da sua conta de usuário on-chain (uma conta que o programa deriva da sua carteira). Isso torna os resultados independentes entre jogadores: duas apostas que entram no mesmo slot recebem resultados diferentes.nonce: o seu contador pessoal de apostas, guardado on-chain e incrementado a cada jogada. Isso torna as suas próprias apostas consecutivas independentes, mesmo dentro do mesmo slot, e ainda serve de proteção contra envio duplicado.
Qual é a fórmula exata do resultado do Dice?
- A entrada do hash é a concatenação, exatamente nesta ordem: a tag ASCII
"dice", o hash do slot, o endereço da conta de usuário e, por fim, o nonce codificado em 8 bytes little-endian. - A amostra são os primeiros 16 bytes da saída SHA-256, lidos como um inteiro sem sinal de 128 bits big-endian e reduzidos módulo 10,000.
- Reduzir uma amostra de 128 bits módulo 10,000 tem um viés teórico abaixo de 2⁻¹¹⁴, dezenas de ordens de grandeza menor que a vantagem da casa, e por isso ele é documentado em vez de corrigido.
Condição de vitória e pagamento
edge_bps = 150):
O retorno esperado é o mesmo para qualquer alvo:
chance × multiplier ≈ 98.5% do valor apostado (o arredondamento para baixo favorece a casa em no máximo um ponto-base). A vantagem e os limites atuais estão em Taxas e limites.
O que é garantido e o que não é
Garantido pelo programa:- O resultado é derivado e liquidado dentro de uma única instrução on-chain, a partir de dados que o próprio programa lê. O backend não fornece o resultado e não tem como informá-lo errado.
- O operador não contribui com nenhum dado para a derivação: não existe seed do servidor para ficar testando até achar um resultado favorável.
- O seu nonce tem que ser repetido exatamente, então a mesma aposta não pode ser jogada duas vezes, nem por acidente, nem de má-fé.
- Cada jogada publica todos os dados de entrada da derivação e o resultado, então qualquer pessoa pode recalcular qualquer resultado da história.
N−1 se torna público no início do slot N, então um operador com latência muito baixa poderia estimar o resultado que uma aposta teria se entrasse no slot atual e atrasar o envio para sortear de novo. O esquema aceita isso em vez de fingir que não existe (eliminar essa brecha exigiria um oráculo VRF cujo custo por aposta supera o valor esperado da casa em apostas pequenas). O que limita isso:
- A inclusão não é totalmente controlável: é a rede, e não quem envia, que decide o slot exato em que uma transação entra.
- Todos os dados de entrada são publicados, então padrões de atraso no envio e qualquer desvio das taxas de vitória agregadas em relação às chances anunciadas são mensuráveis por qualquer pessoa a partir de dados públicos. Um abuso sistemático não tem como ficar escondido.
Como verificar um resultado do Dice?
Cada jogada emite um eventoDiceBetSettled na própria transação da aposta, com tudo o que você precisa: slothash, user, nonce, target_bps, direction, win_chance_bps, roll, multiplier_bps e is_win, além do detalhamento completo da liquidação. Para verificar:
- Abra a transação da aposta em um explorador da Solana e leia os campos do evento (a tela do Dice no app mostra os dados de verificação da sua sessão, e o seu histórico de apostas leva à transação).
- Recalcule
sha256("dice" ‖ slothash ‖ user ‖ nonce), pegue os primeiros 16 bytes em big-endian módulo 10,000 e compare com orolldo evento. - Confira se deu vitória ou derrota (
roll < targetpara Abaixo,roll > targetpara Acima) e o multiplicador de acordo com a fórmula acima.