O que acontece on-chain durante uma rodada de Crash?
Toda rodada de Crash é construída a partir de três transações on-chain, nesta ordem:- Commit: antes de as apostas abrirem, o backend gera um segredo aleatório de 32 bytes e publica on-chain o hash SHA-256 dele (a instrução
start_new_round). Esse é o commit: a partir desse momento, só aquele segredo exato pode liquidar a rodada. O commit é público no eventoCrashRoundPreparedda transação. - Apostas: os jogadores fazem suas apostas. O segredo continua oculto; o commit garante que ele não pode ser trocado.
- Início da rodada / captura de entropia: quando a rodada começa (a instrução
start_game), o programa lê o hash de slot mais recente na sysvarSlotHashesda Solana e o armazena na rodada. O app chama esse valor de hash do bloco da rodada. O ponto de crash agora está totalmente determinado (é uma função pura do hash de slot armazenado e do segredo registrado), mas ninguém que não conheça o segredo consegue calculá-lo ainda. O valor é público no eventoCrashGameStarted. - A rodada acontece: o multiplicador sobe e os jogadores fazem cash out.
- Revelação: o backend envia o segredo (a instrução
crash). O programa verifica on-chain sesha256(secret)é igual ao commit (se não for, a transação falha), depois calcula ele mesmo o ponto de crash e finaliza a rodada. O eventoCrashRoundFinalizedpublica o segredo, o hash de slot e o ponto de crash final.
Qual é a fórmula exata do ponto de crash?
O ponto de crash é derivado exatamente assim (esta é a aritmética que o programa on-chain executa: matemática de inteiros, sem surpresas de arredondamento):- A ordem de concatenação é primeiro blockhash, depois secret.
Xé lido em big-endian a partir dos primeiros 4 bytes da saída do SHA-256.- As divisões são divisões inteiras com floor (arredondamento para baixo).
- O piso
max(10000, …)significa que o multiplicador nunca fica abaixo de 1.00x, e o teto emXevita denominadores absurdamente pequenos.
Exemplo prático
ComX = 0xABCD1234 (2,882,343,476) e a vantagem atual de 1.5% (edge_bps = 150):
Como é a distribuição
A fórmula transforma umX uniforme na clássica curva de crash. A probabilidade de uma rodada chegar a pelo menos um multiplicador m é aproximadamente:
O que é garantido, e o que não é
Garantido pelo programa:- Depois que o commit está on-chain, o operador não pode mudar o segredo da rodada: a transação de revelação falha com qualquer segredo cujo hash não corresponda.
- Assim que a rodada começa (hash de slot armazenado), o ponto de crash está fixado. Fazer cash out cedo, tarde ou em massa não muda nada: o resultado foi determinado antes de o multiplicador começar a subir.
- O ponto de crash é calculado pelo programa, não informado pelo backend. Um valor errado não pode ser gravado on-chain.
- Tudo o que é preciso para verificar (commit, hash de slot, segredo, ponto de crash final) é publicado em eventos on-chain, para sempre.
- Momento do início. O operador conhece o segredo antes de a rodada começar, e o backend dele decide quando enviar a transação de início da rodada. Como os hashes de slot recentes são públicos, em princípio ele poderia pré-calcular o multiplicador que sairia para slots candidatos e escolher o momento do início para influenciar qual hash de slot é capturado. O esquema não impede isso; ele torna isso observável: o momento de início das rodadas é público, e qualquer viés sistemático apareceria nas estatísticas dos pontos de crash publicados, que qualquer pessoa pode recalcular em massa.
- Cancelamentos. Depois que a rodada começa, o operador conhece o resultado antes dos jogadores e poderia cancelar uma rodada desfavorável em vez de revelá-la. Há dois limites rígidos: um cancelamento devolve integralmente todo valor apostado (o programa não tem nenhum caminho de confisco), e todo cancelamento emite um evento público; a frequência de cancelamentos é o sinal on-chain. O cancelamento existe como caminho de recuperação caso um segredo seja perdido (por exemplo, uma queda do backend entre o commit e a revelação), e a expectativa é que praticamente nunca seja usado.