Wiki ZooBC
Applis et développement sur ZooBC

Les applis à canal

Sur la chaîne, chaque coup d’une partie coûte une transaction et un peu d’attente pour un bloc. Une appli à canal supprime ce coût pour deux joueurs : ils paient leurs mises sur la chaîne, échangent leurs coups directement sous forme de bons signés, et n’inscrivent qu’un seul règlement sur la chaîne, à la fin. Chaque nœud rejoue alors les coups signés avec le même moteur de règles qui arbitre les parties jouées sur la chaîne.

Ouvrir un canal

Une partie à canal est créée avec CreateApp et l’indicateur channel mis à 1. Elle exige exactement deux sièges, et les deux mises sont payées sur la chaîne comme d’habitude. Ensuite, les coups circulent hors chaîne : un AppMove, un ResignApp ou un ClaimAppTimeout envoyé pour une partie à canal est une opération nulle payante.

Coups signés

Chaque coup est un bon signé par le siège qui le joue, et la signature porte sur ce condensé :

SHA3-256(app id (LE8) ‖ seq (LE4) ‖ SHA3-256(state before) ‖ move)

La signature est vérifiée selon le type de compte de ce joueur (types de clés). Comme le condensé couvre l’identifiant de l’appli, le numéro de séquence du coup et l’état avant le coup, un coup signé ne peut pas être réutilisé dans une autre partie ni dans une autre position. Dans le portefeuille officiel, les bons circulent entre les deux joueurs par un relais, le même service qui achemine les appels (relais).

Règlement

L’un ou l’autre joueur peut déposer un SettleApp (type 39). Son corps contient l’identifiant de l’appli et final_seq, qui doit être égal au nombre de bons, puis chaque bon : le siège, la longueur du coup, le coup et une signature de 64 octets. Un règlement transporte au plus 1 024 bons.

Chaque nœud rejoue les bons à partir de l’état de la partie avec le même moteur, en vérifiant chaque signature et chaque tour de jeu, et enregistre le résultat. Un SettleApp qui échoue, parce qu’il ne peut pas être analysé, désigne la mauvaise appli, vient de quelqu’un qui n’est pas assis ou contient un bon invalide, est une opération nulle gratuite : rien n’est prélevé. Seuls les deux joueurs assis peuvent en déposer un.

Les coups signés entrent dans un seul SettleApp ; chaque nœud les rejoue ; une suite signée plus longue peut remplacer la revendication dans les 240 blocs.
Les coups signés entrent dans un seul SettleApp ; chaque nœud les rejoue ; une suite signée plus longue peut remplacer la revendication dans les 240 blocs.

La fenêtre de contestation

Un règlement est une revendication, enregistrée avec une échéance fixée 240 blocs plus tard. Pendant cette fenêtre, l’un ou l’autre joueur peut déposer un SettleApp avec un final_seq plus élevé, c’est-à-dire une suite valide de coups plus longue. Chaque remplacement accepté se substitue à la revendication et relance les 240 blocs. Quand la fenêtre se ferme, la dernière revendication est appliquée :

  • la partie a été gagnée : le gagnant reçoit la cagnotte moins la commission de 1 % ;
  • la partie s’est terminée par un nul : les deux mises sont remboursées ;
  • la partie était encore en cours : le siège dont le chrono tourne perd par forfait, et la cagnotte moins la commission va à l’autre joueur.
Si Bob ne fait rien, il perd par forfait ; s’il dépose à temps une suite plus longue, la fenêtre redémarre et le résultat rejoué s’applique.
Si Bob ne fait rien, il perd par forfait ; s’il dépose à temps une suite plus longue, la fenêtre redémarre et le résultat rejoué s’applique.

Jouer en sécurité

  • Conservez chaque coup signé que vous recevez. La dernière position signée vous protège contre un règlement qui s’arrête trop tôt.
  • Surveillez sur la chaîne les règlements de vos parties : une revendication à laquelle personne ne répond dans les 240 blocs est maintenue.
  • N’attendez ni confidentialité ni réduction. Les canaux sont réservés à exactement deux sièges, le résultat est public une fois réglé, et une partie décisive paie la même commission de 1 % que le jeu sur la chaîne.

Voir aussi