Wiki ZooBC
Transactions

Déclencheurs et attestations

Un déclencheur est un paiement conditionnel conservé par la chaîne : des ZBC bloqués maintenant et versés plus tard à un destinataire, lorsqu’une condition est remplie. La condition est soit une hauteur de bloc, soit un événement du monde extérieur, comme le résultat d’un match, que les nœuds enregistrés confirment par attestation. Les déclencheurs permettent des verrous temporels, des cadeaux différés et des versements liés à des résultats du monde réel, sans le moindre code de contrat.

Créer un déclencheur

Une transaction CreateTrigger (type 15) indique un destinataire, un montant et une condition. Les déclencheurs ne portent que des ZBC. Il existe deux sortes de condition :

  • un déclencheur de hauteur désigne une hauteur de bloc, qui doit être dans le futur. Un bloc arrive toutes les 15 secondes, donc une hauteur fonctionne comme une date : un jour plus tard correspond à 5 760 blocs ;
  • un déclencheur d’événement désigne un identifiant d’événement, et se déclenche lorsque les nœuds enregistrés résolvent cet événement ; il reste en attente jusque-là ou jusqu’à son annulation. Il porte aussi une hauteur de déclenchement, qui n’est pas utilisée.

Le montant quitte aussitôt le solde du créateur et il est bloqué. Tant que le déclencheur ne s’est pas déclenché, le créateur peut récupérer l’argent avec CancelTrigger (type 16). Un déclencheur paie une seule fois : il n’exécute aucun script et ne se répète pas.

Trois issues pour une boîte de ZBC bloqués : la hauteur de bloc H est atteinte, les deux tiers du registre s’accordent sur une valeur, ou un CancelTrigger arrive avant le déclenchement et rend l’argent au créateur
Trois issues pour une boîte de ZBC bloqués : la hauteur de bloc H est atteinte, les deux tiers du registre s’accordent sur une valeur, ou un CancelTrigger arrive avant le déclenchement et rend l’argent au créateur

Les attestations : comment les événements se résolvent

Une blockchain ne peut pas lire le monde extérieur par elle-même : si chaque nœud consultait une page web, ils pourraient obtenir des réponses différentes et se trouver en désaccord. ZooBC utilise à la place des attestations.

  • Un nœud enregistré envoie un AttestEvent (type 17) portant un identifiant d’événement et une valeur, chacun d’au plus 4 096 octets.
  • Chaque nœud dispose d’une voix par événement : une attestation plus récente remplace la précédente. Seules les attestations des nœuds enregistrés comptent.
  • À la fin de chaque bloc, la chaîne compte les attestations de chaque événement non résolu. Lorsque les deux tiers du registre actif attestent exactement la même valeur (8 sièges sur 11, par exemple), cette valeur devient le résultat de l’événement, de façon définitive.
  • Dans ce même bloc, chaque déclencheur en attente qui désigne l’événement paie son destinataire.
Onze nœuds, dont huit détiennent la même carte de valeur ; le décompte franchit les deux tiers, le déclencheur s’ouvre et paie son destinataire, et le résultat est enregistré de façon définitive
Onze nœuds, dont huit détiennent la même carte de valeur ; le décompte franchit les deux tiers, le déclencheur s’ouvre et paie son destinataire, et le résultat est enregistré de façon définitive

Une attestation est un devoir sans frais : elle déclare des frais d’exactement 0 et provient du propre compte du nœud (voir les frais). Aucune décision à l’échelle du registre n’est résolue tant que le registre est sous son plancher de max(3, min_registry_size) sièges et propriétaires distincts, soit 7 sur le mainnet (voir les règles des deux tiers).

Identifiants d’événement réservés

Les mêmes attestations portent d’autres décisions du réseau, sous des préfixes réservés de l’identifiant d’événement. Chacune est résolue par sa propre étape, et non par l’étape des déclencheurs :

PréfixeUtilisé pour
ZBRDEP1:les dépôts du pont (voir [[the-bridgele pont]])
ZBWDR1:les retraits du pont
ZBCGOV1:la gouvernance
ZBCREL1:les votes sur les versions (voir [[releases-and-updatesles versions et mises à jour]])

Avec les autres fonctionnalités

  • Le versement d’un déclencheur est un crédit entrant : il passe donc par la politique de répartition du destinataire (voir les politiques de répartition et de transaction).
  • La politique de transaction d’un destinataire n’est vérifiée que pour le CreateTrigger lui-même ; le versement parvient quand même à un destinataire qui refuse les paiements par la suite.
  • Dans une politique de transaction, AttestEvent appartient à la catégorie Bridge.

Pour des paiements qui se répètent, voir les transferts programmés ; pour de l’argent qui se libère progressivement minute par minute, voir les paiements liquides.

Voir aussi