Que se passe-t-il on-chain pendant une manche de Crash ?
Chaque manche de Crash repose sur trois transactions on-chain, dans cet ordre :- Engagement (commit) : avant l’ouverture des mises, le backend génère un secret aléatoire de 32 octets et publie on-chain son hash SHA-256 (l’instruction
start_new_round). C’est l’engagement : à partir de ce moment, seul ce secret précis pourra régler la manche. L’engagement est public dans l’événementCrashRoundPreparedde la transaction. - Mises : les joueurs placent leurs mises. Le secret reste caché ; l’engagement garantit qu’il ne peut pas être échangé.
- Démarrage de la manche / capture de l’entropie : quand la manche commence (l’instruction
start_game), le programme lit le slot hash le plus récent dans le sysvarSlotHashesde Solana et le stocke dans la manche. L’app appelle cette valeur le block hash de la manche. Le point de crash est désormais entièrement déterminé (c’est une fonction pure du slot hash stocké et du secret engagé), mais personne ne peut encore le calculer sans connaître le secret. La valeur est publique dans l’événementCrashGameStarted. - La manche se déroule : le multiplicateur grimpe et les joueurs encaissent.
- Révélation : le backend soumet le secret (l’instruction
crash). Le programme vérifie on-chain quesha256(secret)est égal à l’engagement (en cas de différence, la transaction échoue), puis calcule lui-même le point de crash et clôture la manche. L’événementCrashRoundFinalizedpublie le secret, le slot hash et le point de crash final.
Quelle est la formule exacte du point de crash ?
Le point de crash est dérivé exactement ainsi (c’est l’arithmétique qu’exécute le programme on-chain : calcul entier, aucune surprise d’arrondi) :- L’ordre de concaténation est d’abord blockhash, puis secret.
Xest lu en big-endian sur les 4 premiers octets de la sortie SHA-256.- Les divisions sont des divisions entières (arrondies à l’inférieur, floor).
- Le plancher
max(10000, …)garantit que le multiplicateur n’est jamais inférieur à 1,00x, et le plafond appliqué àXempêche des dénominateurs infinitésimaux.
Exemple détaillé
AvecX = 0xABCD1234 (2 882 343 476) et l’avantage actuel de 1,5 % (edge_bps = 150) :
À quoi ressemble la distribution
La formule transforme unX uniforme en la courbe de crash classique. La probabilité qu’une manche atteigne au moins un multiplicateur m est d’environ :
Ce qui est garanti, et ce qui ne l’est pas
Garanti par le programme :- Une fois l’engagement on-chain, l’opérateur ne peut plus changer le secret de la manche : la transaction de révélation échoue pour tout secret dont le hash ne correspond pas.
- Une fois la manche démarrée (slot hash stocké), le point de crash est fixé. Encaisser tôt, tard ou en grand nombre n’y change rien : le résultat était déterminé avant que le multiplicateur ne commence à grimper.
- Le point de crash est calculé par le programme, pas déclaré par le backend. Une valeur erronée ne peut pas être écrite on-chain.
- Tout ce qui est nécessaire à la vérification (engagement, slot hash, secret, point de crash final) est publié dans des événements on-chain, de façon permanente.
- Timing du démarrage. L’opérateur connaît le secret avant le démarrage de la manche, et son backend décide quand soumettre la transaction de démarrage. Comme les slot hashes récents sont publics, il pourrait en principe précalculer le multiplicateur potentiel pour plusieurs slots candidats et choisir le moment du démarrage pour influer sur le slot hash capturé. Le schéma ne l’empêche pas ; il le rend observable : le timing des démarrages est public, et tout biais systématique apparaîtrait dans les statistiques des points de crash publiés, que chacun peut recalculer en masse.
- Annulations. Après le démarrage de la manche, l’opérateur connaît le résultat avant les joueurs, et il pourrait annuler une manche défavorable au lieu de la révéler. Deux limites strictes s’appliquent : une annulation rembourse intégralement chaque mise (le programme n’a aucune voie de confiscation), et chaque annulation émet un événement public ; la fréquence des annulations est l’indice visible on-chain. L’annulation existe comme voie de secours en cas de perte du secret (par exemple un plantage du backend entre l’engagement et la révélation) et n’est censée servir pratiquement jamais.