Wiki di ZooBC
App e sviluppo su ZooBC

App channel

Sulla catena, ogni mossa di una partita costa una transazione e un po' di attesa per un blocco. Un'app channel elimina questo costo per due giocatori: pagano le loro puntate sulla catena, si scambiano le mosse direttamente come voucher firmati e alla fine mettono sulla catena un'unica regolazione. Ogni nodo riproduce poi le mosse firmate con lo stesso motore di regole che giudica il gioco sulla catena.

Aprire un channel

Una partita channel si crea con CreateApp e il flag channel impostato a 1. Richiede esattamente due posti, ed entrambe le puntate vengono pagate sulla catena come al solito. Da quel momento le mosse viaggiano off-chain: un AppMove, ResignApp o ClaimAppTimeout inviato per una partita channel è una no-op pagata.

Mosse firmate

Ogni mossa è un voucher firmato dal posto che la esegue, su questo digest:

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

La firma viene verificata in base al tipo di account di quel giocatore (chiavi e tipi di account). Poiché il digest copre l'id dell'app, il numero di sequenza della mossa e lo stato prima della mossa, una mossa firmata non può essere riutilizzata in un'altra partita o in un'altra posizione. Nel wallet ufficiale i voucher viaggiano tra i due giocatori attraverso un relay, lo stesso servizio che trasporta le chiamate (relay).

Regolare la partita

Ciascuno dei due giocatori può inviare un SettleApp (tipo 39). Il suo corpo contiene l'id dell'app e final_seq, che deve essere uguale al numero di voucher, seguiti da ogni voucher: il posto, la lunghezza della mossa, la mossa e una firma di 64 byte. Una regolazione contiene al massimo 1.024 voucher.

Ogni nodo riproduce i voucher a partire dallo stato della partita con lo stesso motore, verificando ogni firma e ogni turno, e registra il risultato. Un SettleApp che fallisce, perché non può essere interpretato, indica l'app sbagliata, proviene da qualcuno che non è seduto al tavolo o contiene un voucher non valido, è una no-op gratuita: non viene addebitato nulla. Solo i due giocatori seduti possono inviarne uno.

Le mosse firmate entrano in un unico SettleApp; ogni nodo le riproduce; una catena firmata più lunga può sostituire la richiesta entro 240 blocchi.
Le mosse firmate entrano in un unico SettleApp; ogni nodo le riproduce; una catena firmata più lunga può sostituire la richiesta entro 240 blocchi.

La finestra di contestazione

Una regolazione è una richiesta, registrata con una scadenza 240 blocchi più tardi. Durante quella finestra ciascuno dei due giocatori può inviare un SettleApp con un final_seq più alto, cioè una catena valida di mosse più lunga. Ogni sostituzione accettata rimpiazza la richiesta e fa ripartire i 240 blocchi. Quando la finestra si chiude, si applica l'ultima richiesta:

  • la partita è stata vinta: il vincitore riceve il piatto meno il rake dell'1 %;
  • la partita è finita in pareggio: entrambe le puntate vengono rimborsate;
  • la partita era ancora in corso: il posto a cui toccava muovere perde a tavolino, e il piatto meno il rake va all'altro giocatore.
Se Bob non fa nulla, perde a tavolino; se invia in tempo una catena più lunga, la finestra riparte e si applica il risultato riprodotto.
Se Bob non fa nulla, perde a tavolino; se invia in tempo una catena più lunga, la finestra riparte e si applica il risultato riprodotto.

Giocare in sicurezza

  • Conserva ogni mossa firmata che ricevi. L'ultima posizione firmata è la tua protezione contro una regolazione che si ferma prima.
  • Tieni d'occhio la catena per le regolazioni delle tue partite: una richiesta a cui nessuno risponde entro 240 blocchi resta valida.
  • Non aspettarti né privacy né sconti. I channel sono per esattamente due posti, il risultato è pubblico una volta regolato, e una partita con un vincitore paga lo stesso rake dell'1 % del gioco sulla catena.

Vedi anche