¿Qué pasa on-chain durante una ronda de Crash?
Cada ronda de Crash se construye con tres transacciones on-chain, en este orden:- Compromiso: antes de que se abran las apuestas, el backend genera un secreto aleatorio de 32 bytes y publica on-chain su hash SHA-256 (la instrucción
start_new_round). Este es el compromiso: a partir de ese momento, solo ese secreto exacto puede liquidar la ronda. El compromiso es público en el eventoCrashRoundPreparedde la transacción. - Apuestas: los jugadores hacen sus apuestas. El secreto sigue oculto; el compromiso garantiza que no se puede cambiar.
- Inicio de la ronda / captura de entropía: cuando empieza la ronda (la instrucción
start_game), el programa lee el hash de slot más reciente del sysvarSlotHashesde Solana y lo guarda en la ronda. La app llama a este valor el hash de bloque de la ronda. El punto de crash ya está completamente determinado (es una función pura del hash de slot guardado y del secreto fijado), pero nadie que no conozca el secreto puede calcularlo todavía. El valor es público en el eventoCrashGameStarted. - La ronda se desarrolla: el multiplicador sube y los jugadores cobran.
- Revelación: el backend envía el secreto (la instrucción
crash). El programa verifica on-chain quesha256(secret)es igual al compromiso (si no coincide, la transacción falla), luego calcula él mismo el punto de crash y finaliza la ronda. El eventoCrashRoundFinalizedpublica el secreto, el hash de slot y el punto de crash final.
¿Cuál es la fórmula exacta del punto de crash?
El punto de crash se deriva exactamente así (esta es la aritmética que ejecuta el programa on-chain: matemática entera, sin sorpresas de redondeo):- El orden de concatenación es primero blockhash, luego secret.
Xse lee en big-endian a partir de los primeros 4 bytes de la salida de SHA-256.- Las divisiones son divisiones floor (enteras, redondeando hacia abajo).
- El piso
max(10000, …)significa que el multiplicador nunca es menor que 1.00x, y el tope sobreXevita denominadores astronómicamente pequeños.
Ejemplo resuelto
ConX = 0xABCD1234 (2,882,343,476) y la ventaja actual del 1.5% (edge_bps = 150):
Cómo se ve la distribución
La fórmula convierte unX uniforme en la clásica curva de crash. La probabilidad de que una ronda llegue al menos a un multiplicador m es aproximadamente:
Qué está garantizado, y qué no
Aplicado por el programa:- Una vez que el compromiso está on-chain, el operador no puede cambiar el secreto de la ronda: la transacción de revelación falla con cualquier secreto cuyo hash no coincida.
- Una vez que la ronda empezó (hash de slot guardado), el punto de crash queda fijado. Cobrar pronto, tarde o en masa no cambia nada: el resultado quedó determinado antes de que el multiplicador empezara a subir.
- El punto de crash lo calcula el programa, no lo informa el backend. No se puede escribir un valor incorrecto on-chain.
- Todo lo necesario para verificar (compromiso, hash de slot, secreto, punto de crash final) se publica en eventos on-chain, de forma permanente.
- Momento del inicio. El operador conoce el secreto antes de que empiece la ronda, y su backend decide cuándo enviar la transacción de inicio de ronda. Como los hashes de slot recientes son públicos, en principio podría precalcular el multiplicador que saldría con distintos slots candidatos y elegir el momento del inicio para influir en qué hash de slot se captura. El esquema no lo impide; lo hace observable: el momento de inicio de cada ronda es público, y cualquier sesgo sistemático aparecería en las estadísticas de los puntos de crash publicados, que cualquiera puede recalcular en masa.
- Cancelaciones. Una vez que la ronda empezó, el operador conoce el resultado antes que los jugadores, y podría cancelar una ronda desfavorable en lugar de revelarla. Se aplican dos límites estrictos: una cancelación reembolsa todo lo apostado (el programa no tiene ninguna vía de confiscación), y cada cancelación emite un evento público; la frecuencia de cancelaciones es la señal on-chain. La cancelación existe como vía de recuperación ante un secreto perdido (por ejemplo, una caída del backend entre el compromiso y la revelación), y se espera que prácticamente nunca se use.