No confíes en nuestra palabra. Pregúntale a tu IA.
Todo este sorteo es público y se puede recalcular. Copia el enlace del expediente, pégalo en la inteligencia artificial que tú prefieras —ChatGPT, Claude, Gemini— y pídele que lo audite. Te dirá, por su cuenta y sin que nosotros intervengamos, si el sorteo fue limpio.
Audítalo con tu IA
Copiamos por ti un texto listo con las instrucciones de verificación. Pégalo en tu IA y deja que ella saque sus propias conclusiones.
Verificado
Pasó 5 de 5 pruebas independientes.
La semilla no se cambió después de sellarla
El sha256 de la semilla revelada coincide con el hash que se publicó antes de vender el primer ticket.
La lista de participantes es la que se selló antes del sorteo
El árbol Merkle de los 50 participantes reproduce exactamente la raíz publicada en el compromiso.
Son los que son: sin duplicados ni participantes fantasma
Cada número y cada comprobante de pago es único, nadie entró después del cierre, y el total declarado coincide con la lista.
La aleatoriedad la fija drand, una fuente pública independiente
Reconsultando el round 29583412 de drand se obtiene el mismo valor que usó el sorteo.
El ganador se deriva del algoritmo público, paso por paso
Recomputando HMAC + muestreo sin sesgo se obtiene el índice 7 (número 0), idéntico al resultado publicado.
Esta misma verificación corre aquí en vivo y la puede repetir cualquiera: el algoritmo es público (más abajo) y los datos también.
iPhone 15 Pro Max
50
000
Ticket RL-008-000
Las pruebas
El algoritmo, abierto
El ganador no se elige a dedo: se calcula con una fórmula fija a partir de tres datos públicos que nadie puede cambiar a su antojo — la semilla sellada antes de vender, la aleatoriedad pública de drand fijada después de cerrar ventas, y la lista sellada de participantes.
semilla_maestra = HMAC_SHA256(clave = server_seed, mensaje = randomness + ':' + lista_merkle_root). Para i = 0,1,2,...: x = primeros 8 bytes de SHA256(semilla_maestra + uint32_be(i)) como entero de 64 bits; limite = floor(2^64 / N) * N (N = total de participantes); si x < limite entonces ganador_indice = x mod N y termina (muestreo por rechazo, sin sesgo). El ganador es el participante en esa posición de la lista sellada.
Versión v1-hmac-sha256-rejection
La fórmula exacta (reproducible)
El detalle preciso para que tú —o una IA— recalculen el resultado sin adivinar nada. Es el mismo método para los ganadores de un sorteo y para el orden de las 75 bolas del bingo.
Semilla maestra. semilla_maestra = HMAC-SHA256(clave, mensaje) → 32 bytes. clave = los 32 BYTES del server_seed (se decodifica su hex de 64 caracteres a bytes; el server_seed se publica como su sha256 ANTES de cerrar y se revela DESPUÉS). mensaje = utf8( randomness + ':' + lista_merkle_root ): el hex del randomness de drand y el hex de la raíz Merkle, unidos por un único carácter ':' (dos puntos), sin espacios.
Flujo aleatorio. Existe UN contador entero que empieza en 0 y se incrementa en CADA intento (también en los rechazos), compartido a lo largo de TODAS las extracciones. En cada intento: bloque = SHA-256( semilla_maestra (32 bytes) ‖ uint32_be(contador) ), donde uint32_be son los 4 bytes big-endian del contador. x = los primeros 8 bytes del bloque leídos como entero sin signo big-endian de 64 bits.
Muestreo. Muestreo por rechazo SIN reemplazo, sin sesgo de módulo. Se parte de restantes = [0,1,…,n-1] (para el bingo n=75; la bola = indice+1). Para sacar cada elemento: m = cantidad en 'restantes'; limite = floor(2^64 / m) * m. Se piden bloques (avanzando el contador) hasta obtener x < limite; entonces pos = x mod m, se toma restantes[pos] y se elimina de la lista. Se repite hasta agotar los puestos pedidos (75 para la permutación completa de bolas).
Resultado. Bingo: el orden de las 75 bolas es esa permutación (bola = indice+1). Gana la PRIMERA cartilla que completa el patrón recorriendo el orden — 'linea' = una fila de 5 (el centro [col 2][fila 2] cuenta como marcado/libre); 'lleno' = las 25 casillas (centro libre). Empate en la misma bola = co-ganadoras. Para premios consuelo se siguen tomando las siguientes cartillas que completan, una por puesto, sin repetir cartilla.
# 1) Semilla maestra (32 bytes)
semilla_maestra = HMAC_SHA256(
clave = bytes(server_seed_hex), # los 32 bytes del seed revelado
mensaje = utf8(randomness + ":" + lista_merkle_root)
)
# 2) Permutacion sin reemplazo
# n = participantes (sorteo) | n = 75 (bingo)
contador = 0 # compartido por TODAS las extracciones
restantes = [0, 1, ..., n-1]
orden = []
while restantes:
m = len(restantes)
limite = floor(2**64 / m) * m # rechazo: elimina el sesgo de modulo
while True:
bloque = SHA256( semilla_maestra + uint32_be(contador) )
contador += 1
x = int_big_endian(bloque[0:8]) # 64 bits
if x < limite:
pos = x % m
orden.append(restantes.pop(pos))
break
# Sorteo: ganadores = primeros K de 'orden'.
# Bingo: orden de bolas = indice+1; gana la 1a cartilla que completa el patron.Árbol Merkle. Las hojas van en el mismo orden que la lista 'participantes' (indice ascendente). Se sube por niveles: el padre de cada par = sha256_hex( bytes(izquierda) ++ bytes(derecha) ), donde bytes(x) decodifica el hash hexadecimal de 64 caracteres a sus 32 bytes; se concatenan los 64 bytes y se aplica sha256. Si un nivel tiene una cantidad impar de nodos, el último se empareja consigo mismo. Se repite hasta quedar un solo nodo: esa es la lista_merkle_root.
Reconsulta el azar público en https://api.drand.sh/<chain_hash>/public/<round>. Versión del algoritmo: v1-permutacion-sin-reemplazo.
Los 50 participantes
La lista completa, sellada antes del sorteo. Son los que son.
| # | Número | Ticket | Pago | Registrado |
|---|---|---|---|---|
| 0 | 041 | RL-001-041 | 84bcdd433043… | 2026-06-08 10:00 |
| 1 | 178 | RL-002-178 | d72ea8db577d… | 2026-06-08 11:00 |
| 2 | 315 | RL-003-315 | 6eb8564373a6… | 2026-06-08 12:00 |
| 3 | 452 | RL-004-452 | 337329cd9b3c… | 2026-06-08 13:00 |
| 4 | 589 | RL-005-589 | 5a4dbf3b39ef… | 2026-06-08 14:00 |
| 5 | 726 | RL-006-726 | 4cacfd601d14… | 2026-06-08 15:00 |
| 6 | 863 | RL-007-863 | de452ac9aa29… | 2026-06-08 16:00 |
| 7 | 000 | RL-008-000 | 1985048c4b22… | 2026-06-08 17:00 |
| 8 | 137 | RL-009-137 | b160fad5f9f3… | 2026-06-08 18:00 |
| 9 | 274 | RL-00A-274 | abf1a58d63c5… | 2026-06-08 19:00 |
| 10 | 411 | RL-00B-411 | 39702a237107… | 2026-06-08 20:00 |
| 11 | 548 | RL-00C-548 | 8d1064a6390b… | 2026-06-08 21:00 |
| 12 | 685 | RL-00D-685 | 1bbdcad214d8… | 2026-06-08 22:00 |
| 13 | 822 | RL-00E-822 | 69bd464b7ae6… | 2026-06-08 23:00 |
| 14 | 959 | RL-00F-959 | 0c4ea8033390… | 2026-06-09 00:00 |
| 15 | 096 | RL-00G-096 | 441ca9a15131… | 2026-06-09 01:00 |
| 16 | 233 | RL-00H-233 | 074856c7f89a… | 2026-06-09 02:00 |
| 17 | 370 | RL-00I-370 | 6207b26ef2b6… | 2026-06-09 03:00 |
| 18 | 507 | RL-00J-507 | b27b70b327fb… | 2026-06-09 04:00 |
| 19 | 644 | RL-00K-644 | 3209d911fe82… | 2026-06-09 05:00 |
| 20 | 781 | RL-00L-781 | 7b84faeea95b… | 2026-06-09 06:00 |
| 21 | 918 | RL-00M-918 | a499f9078339… | 2026-06-09 07:00 |
| 22 | 055 | RL-00N-055 | 8bd8d464bccf… | 2026-06-09 08:00 |
| 23 | 192 | RL-00O-192 | cfc442d314ec… | 2026-06-09 09:00 |
| 24 | 329 | RL-00P-329 | 8be8675c4375… | 2026-06-09 10:00 |
| 25 | 466 | RL-00Q-466 | cd54447b4302… | 2026-06-09 11:00 |
| 26 | 603 | RL-00R-603 | ae93d9c65bf7… | 2026-06-09 12:00 |
| 27 | 740 | RL-00S-740 | 385ed98d33b5… | 2026-06-09 13:00 |
| 28 | 877 | RL-00T-877 | 0d9ee49e1224… | 2026-06-09 14:00 |
| 29 | 014 | RL-00U-014 | eb37511f3ac7… | 2026-06-09 15:00 |
| 30 | 151 | RL-00V-151 | 2fe0a9ff7898… | 2026-06-09 16:00 |
| 31 | 288 | RL-00W-288 | d485514375e2… | 2026-06-09 17:00 |
| 32 | 425 | RL-00X-425 | 14987eea6386… | 2026-06-09 18:00 |
| 33 | 562 | RL-00Y-562 | ef10f624dacf… | 2026-06-09 19:00 |
| 34 | 699 | RL-00Z-699 | 0218dbdd90c4… | 2026-06-09 20:00 |
| 35 | 836 | RL-010-836 | fa19278c9c2a… | 2026-06-09 21:00 |
| 36 | 973 | RL-011-973 | edff792cffc5… | 2026-06-09 22:00 |
| 37 | 110 | RL-012-110 | 6e5721de81c6… | 2026-06-09 23:00 |
| 38 | 247 | RL-013-247 | 4af826850f56… | 2026-06-10 00:00 |
| 39 | 384 | RL-014-384 | 75d7d3c0ccea… | 2026-06-10 01:00 |
| 40 | 521 | RL-015-521 | a3efd0e52727… | 2026-06-10 02:00 |
| 41 | 658 | RL-016-658 | 4049ddd0b731… | 2026-06-10 03:00 |
| 42 | 795 | RL-017-795 | f9ce727ca58d… | 2026-06-10 04:00 |
| 43 | 932 | RL-018-932 | 242c33e01c08… | 2026-06-10 05:00 |
| 44 | 069 | RL-019-069 | 7564e82e7e1f… | 2026-06-10 06:00 |
| 45 | 206 | RL-01A-206 | 35405b405f7b… | 2026-06-10 07:00 |
| 46 | 343 | RL-01B-343 | e86e05d21893… | 2026-06-10 08:00 |
| 47 | 480 | RL-01C-480 | c0f550008993… | 2026-06-10 09:00 |
| 48 | 617 | RL-01D-617 | a9a8609ac913… | 2026-06-10 10:00 |
| 49 | 754 | RL-01E-754 | 45fc6b909897… | 2026-06-10 11:00 |