Idées de projets
ZooBC n’a pas de machine virtuelle : personne n’y déploie de contrats. La chaîne offre à la place un large éventail de types de transactions prêts à l’emploi, et un bon projet les combine : la chaîne fait office d’arbitre et de grand livre, l’appli de vitrine, souvent sous la forme d’une seule page web (appli d’une seule page). Chaque idée ci-dessous n’utilise que des types de transactions que le nœud exécute déjà, et chacune s’accompagne du point d’attention qu’un développeur doit connaître.
Paiements
Paiement en rivière
LiquidPayment (type 6) bloque un montant, en ZBC ou en jeton, qui se libère progressivement au profit du destinataire, de façon régulière sur la durée complete_minutes choisie ; à la fin, la totalité du montant est payée automatiquement. LiquidPaymentStop (type 262), envoyé par l’une ou l’autre partie, verse la part libérée jusque-là et rend le reste. La page n’a qu’à dessiner le niveau de l’eau. Bon à savoir : la répartition suit le temps écoulé entre les horodatages des deux transactions, et la part du destinataire est arrondie vers le haut : 10 000 000 unités sur 3 minutes, arrêtées après 66 secondes, donnent 3 666 667 unités au destinataire et en rendent 6 333 333 (paiements liquides).
Caution pour dégâts
Un locataire envoie la caution sous la forme d’un SendZBC sous séquestre qui désigne un approbateur, une commission et une échéance (séquestre). L’approbateur peut approuver, et le montant va au bailleur, ou rejeter, et il revient au locataire ; l’approbateur perçoit la commission dans les deux cas. Si personne n’agit, le premier bloc après l’échéance rend le montant et la commission au locataire. Attention : le loyer du séquestre est payé à la création et n’est jamais remboursé, et une échéance située au-delà de la portée de l’élagage est refusée, sauf si le dépôt de survie de la transaction paie pour la conserver aussi longtemps.
Compte familial
LinkAccount (55), SetMemberPermissions (57), UnlinkAccount (56) et TransferGroupControl (58) donnent à une famille un solde unique derrière un maximum de 100 adresses (groupes de comptes). Attention : rejoindre le groupe exige le consentement de l’adresse qui le rejoint et fait passer tout ce qu’elle possède dans le groupe ; un nouveau membre ne peut que recevoir tant que le contrôleur ne lui a pas accordé de permissions ; et un membre qui part n’emporte rien.
Jeux
Salle de dés
CreateApp avec les types 16 à 19 (deux dés, pile ou face, roulette et machine à sous) joue contre le pool des apps. La page affiche le résultat environ 30 secondes plus tard et peut lire /api/v1/apps/pool pour afficher la mise maximale qu’autorise chaque jeu. Attention : un pari dont le plus gros gain possible dépasse 5 % du pool est refusé, et un très gros gain peut être payé sur plusieurs blocs (paris en solo).
Borne de morpion
Type 1, avec CreateApp, JoinApp, AppMove et ClaimAppTimeout (applis multijoueurs). Attention : chaque coup est une transaction, avec ses frais et son attente d’un bloc ; un joueur qui s’en va bloque la partie pendant 240 blocs avant que l’autre puisse la réclamer ; et les comptes à clés de type Ethereum ou Bitcoin ne peuvent pas occuper de siège.
Duel éclair
Une partie à canal à deux joueurs, réglée avec SettleApp (applis à canal) : les coups circulent entre les joueurs sous forme de bons signés, et la chaîne ne voit que les mises et le règlement. Attention : votre appli doit acheminer les coups entre les joueurs (le portefeuille officiel utilise un relais), conserver chaque coup signé qu’elle reçoit et surveiller la fenêtre de contestation de 240 blocs.
Jetons et échanges
Tampons de café
IssueToken (type 10) crée un jeton-tampon à 0 décimale, qui se déplace donc par unités entières ; TransferToken (11) remet un tampon à un client ; BurnToken (13) dépense les tampons au comptoir (émettre des jetons). Attention : BurnToken ne fonctionne que sur un jeton émis comme remboursable, et seul le détenteur d’une unité peut la brûler ; de plus, un jeton ne vit que tant que son entretien est payé (entretien du jeton).
Borne d’échange
CreateSwapOffer (18), AcceptSwapOffer (19) et CancelSwapOffer (20) forment un tableau d’échanges atomiques entre deux actifs quelconques (offres d’échange). Attention : un seul preneur paie la totalité du côté demandé, sans exécution partielle, et l’expiration d’une offre ne fait que bloquer son acceptation : une offre expirée reste donc bloquée jusqu’à ce que son créateur l’annule.
Enregistrements et messages
Empreinte horodatée
Une transaction dont le message porte l’empreinte SHA-256 d’un fichier montre que ce fichier existait quand ce bloc a été produit, et un FundLongevity (52), ou le champ de survie, la conserve au-delà de l’élagage (longévité). La page /verify d’une passerelle calcule l’empreinte dans le navigateur et la recherche sur la chaîne (vérifier un téléchargement). Attention : sans dépôt de longévité, les nœuds ordinaires élaguent l’empreinte après 30 à 60 jours, et un premier FundLongevity doit arriver dans un intervalle d’instantané, soit environ 30 jours.
Cartes postales scellées
Un message chiffré, marqué « ZBE1 » et scellé pour la clé du destinataire, peut contenir jusqu’à 268 octets de texte (messages signés). Attention : seul le texte est scellé ; la transaction elle-même, avec son expéditeur, son destinataire et son heure, est aussi publique que n’importe quelle autre.
Se connecter avec ZooBC
Un site affiche un défi à usage unique, l’utilisateur le signe sous forme de message ZBC-MSG-v2 avec les outils publics, soit une signature Ed25519 sur SHA3-256("ZBC-MSG-v2" ‖ hachage de genèse ‖ message), et le site vérifie la signature avec la clé du compte. Attention : la signature de messages ne fait pas partie du consensus et les nœuds n’ont aucune route pour elle, si bien que le site la vérifie lui-même ; et le portefeuille web officiel ne signe pas de messages.
Ce qui exige une modification du nœud
- Un teneur de marché automatisé. ZooBC n’a pas de pools AMM, par choix ; son marché est un carnet d’ordres complété par des offres d’échange (marchés et ordres).
- Solidity ou tout contrat EVM. Il n’y a pas de machine virtuelle.
- Un nouveau jeu, comme le poker. Les règles d’un jeu ne peuvent pas être téléversées sous forme de scripts ; un nouveau jeu exige de nouvelles règles dans le nœud.
- Un jeu de crash avec un bouton pour encaisser. Le crash est un pari en solo dont la cible est fixée à l’avance ; aucun coup ne permet d’encaisser.