> For the complete documentation index, see [llms.txt](https://realisticnode.gitbook.io/rnsetups/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://realisticnode.gitbook.io/rnsetups/es/rncasino/guides/fair-play.md).

# Juego justo

Cómo se fija cada resultado antes de cerrar las apuestas, y cómo cualquiera puede comprobarlo.

Todos los resultados de rnCasino se pueden **comprobar**: el número se fija **antes** de cerrar las apuestas, y después del giro cualquiera puede comprobar que no se cambió.

## Cómo funciona

1. Cuando se abre una ronda, la mesa elige una **semilla** secreta (64 dígitos hex al azar) y muestra su **código**: el SHA-256 de la semilla. El código está en el holograma y en `/casino fair`.
2. La semilla decide el número. Nadie puede cambiar la semilla sin cambiar el código, y el código ya es público.
3. Después del giro, la mesa muestra la semilla. Ahora cualquiera puede comprobarlo.

<figure><img src="https://i.imgur.com/1HDs2fm.png" alt="/casino fair: el código de esta ronda, y la semilla y el código de la anterior"><figcaption><p>/casino fair: el código de esta ronda, y la semilla y el código de la anterior</p></figcaption></figure>

La semilla y el código se pueden copiar haciendo clic en ellos en el chat. El botón **Juego justo** del menú Más muestra el último resultado y abre el mismo mensaje.

<figure><img src="https://i.imgur.com/cPGvIom.png" alt="El botón Juego justo en el menú Más"><figcaption><p>El botón Juego justo en el menú Más</p></figcaption></figure>

## Cómo comprobar una ronda

Necesitas la **semilla**, el número de **ronda** y el **código**; `/casino fair` muestra todo después de la ronda.

1. **El código coincide con la semilla**: el SHA-256 de la semilla tiene que ser el código que se mostró antes de cerrar las apuestas.
2. **La semilla da el número**:
   * `h` = SHA-256 de `seed:round` (la semilla, dos puntos y el número de ronda).
   * Toma los primeros 8 dígitos hex de `h` como un número.
   * Si ese número es `4294967289` o más (`4294967290` o más en mesas americanas), toma `h` = SHA-256 de `h` y prueba otra vez. Así todos los números tienen la misma probabilidad; pasa muy pocas veces.
   * El resultado es ese número módulo **37** (europea) o **38** (americana, donde 37 significa 00).

Sirve cualquier calculadora SHA-256 (por ejemplo un "SHA-256 hash generator" en internet: escribe el texto, no subas un archivo).

### Ejemplo

|                                |                                                                    |
| ------------------------------ | ------------------------------------------------------------------ |
| Semilla                        | `832cb5742e16f321a3b346575b47f2d0523c0e759628e2db708df99a2bc0059d` |
| Ronda                          | `42`                                                               |
| Código = SHA-256(semilla)      | `ff8d2108536666406315de81046cc7bfe0766a330b57193e9a30af8651c83ea0` |
| SHA-256(`832cb574...0059d:42`) | `a023dabaa51b29e9...`                                              |
| `a023daba` como número         | 2686704314                                                         |
| 2686704314 módulo 37           | **4**                                                              |

### Con un script

```python
import hashlib

seed = "832cb5742e16f321a3b346575b47f2d0523c0e759628e2db708df99a2bc0059d"
round_number = 42
pockets = 37  # 38 en las mesas americanas

sha = lambda text: hashlib.sha256(text.encode()).hexdigest()
print("code:", sha(seed))

limit = 2**32 - 2**32 % pockets
h = sha(f"{seed}:{round_number}")
while int(h[:8], 16) >= limit:
    h = sha(h)
n = int(h[:8], 16) % pockets
print("number:", "00" if n == 37 else n)
```

## Qué demuestra

* El resultado se fijó antes de cerrar las apuestas: ni el servidor ni un admin lo cambiaron después de ver las apuestas.
* Todos los números tienen la misma probabilidad: los resultados anteriores nunca cambian el siguiente. El menú Historial también lo dice, porque los números "calientes" y "fríos" solo son un dato curioso.
* Un servidor arrancado en un modo de prueba especial que fuerza los resultados no lo puede ocultar: en ese caso `/casino fair` dice en rojo que los resultados están forzados.
