Apuestas en solitario
Seis juegos se juegan a solas contra la casa: dos dados, cara o cruz, ruleta, tragamonedas, lotería y crash. Una apuesta es una transacción CreateApp con un solo asiento. Su resultado proviene de una aleatoriedad que no existía cuando se hizo la apuesta, y el fondo de apps paga los premios.
Hacer una apuesta
El apostante envía CreateApp con el tipo del juego (de 16 a 21), la apuesta y lo apostado, en ZBC o en un token. Lo apostado pasa al fondo de apps cuando se ejecuta la apuesta. Cualquier cuenta puede apostar, incluidas las cuentas con claves al estilo de Ethereum o de Bitcoin, que no pueden ocupar un asiento en una partida multijugador (apps multijugador).
Un byte final N, de 1 a 100, juega la misma apuesta N veces con una sola semilla, con lo apostado repartido a partes iguales entre las jugadas.
Cuándo y cómo se sortea el resultado
Una apuesta incluida en el bloque N se resuelve en el bloque N + 2, con la semilla de ese bloque, unos 30 segundos después. La semilla de cada bloque la calcula su productor a partir de la semilla anterior con una función aleatoria verificable (semilla del bloque (VRF)), así que mientras la apuesta está entrando en el bloque N, la semilla del bloque N + 2 todavía no existe. Nadie puede predecir el resultado, y el productor que incluyó la apuesta no puede verlo antes. Si el bloque N + 2 lo produce el propio nodo del apostante (se comparan las cuentas de propietario), la apuesta espera a un bloque posterior producido por otro.
El sorteo es un hash de esa semilla y del id de la app, bajo una etiqueta propia:
r = LE64(first 8 bytes of SHA3-256("zbc-apps" ‖ seed ‖ LE64(app id) ‖ LE64(0)))
La primera jugada de una apuesta múltiple usa r; las siguientes usan las salidas de un generador splitmix64 sembrado con r. Cualquiera puede recalcular el resultado a partir de datos públicos y comprobar el pago. No hay ningún secreto que revelar ni ningún lote diario: cada apuesta se liquida por sí sola.
Tablas de pagos
| Juego | Apuesta | Un premio paga | Ventaja de la casa |
|---|---|---|---|
| Cara o cruz (17) | cara o cruz | 1.98× | 1 % |
| Dos dados (16) | menos de 7, o más de 7 | 2.28× | 5 % |
| el 7 de la suerte | 5.70× | 5 % | |
| un total exacto | 34.20 ÷ combinaciones (2 o 12: 34.2×) | 5 % | |
| Ruleta (18) | un solo número | 36× | 1/37, alrededor del 2.7 % |
| rojo o negro | 2× | alrededor del 2.7 % | |
| Tragamonedas (19) | triple 7, otro triple, cualquier pareja | 50×, 15×, 1.8× | alrededor del 10.7 % |
| Lotería (20) | un número del 0 al 99 | 90× | 10 % |
| Crash (21) | un objetivo T de 1.01× a 10.00× | T, cuando el punto de crash alcanza T | alrededor del 1 % |
Para un total exacto con los dados, las combinaciones son el número de maneras en que dos dados pueden sumarlo: 6 − |7 − total|. La ruleta tiene 37 casillas, la 0 verde, y sus colores siguen la rueda europea real. Las tragamonedas tienen tres rodillos de ocho símbolos, con un retorno esperado de 457.4/512. En el crash el objetivo se fija al hacer la apuesta; no hay ningún movimiento para retirarse antes.
La ventaja de la casa está incorporada en cada tabla. En el cara o cruz ganas la mitad de las veces y un premio devuelve 1.98 veces lo apostado, así que de media cada ZBC apostado vuelve como 0.5 × 1.98 = 0.99 ZBC, y el 1 % restante se queda en el fondo de apps. Una pérdida no mueve nada, ya que lo apostado ya está en el fondo.
El tope de apuesta
Antes de aceptar una apuesta, el nodo calcula el mayor pago que podría llegar a producir, no su media, y lo compara con un tope del 5 % del saldo del fondo en el activo de la apuesta:
largest payout ≤ floor(pool balance × 500 ÷ 10,000)
El mayor pago es el propio multiplicador de la apuesta en los dados, 1.98× en el cara o cruz, 36× en la ruleta, 50× en las tragamonedas, 90× en la lotería y T en el crash. Una apuesta por encima del tope se rechaza al enviarla («bet too large for the apps pool»), y una que llegue de todos modos a un bloque es una operación nula pagada.
El tope significa que ningún resultado afortunado puede vaciar el fondo por sí solo. Un segundo límite, el cupo por bloque, puede repartir un premio muy grande entre varios bloques (fondo de apps).