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.
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.
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éfixe | Utilisé pour | |
|---|---|---|
ZBRDEP1: | les dépôts du pont (voir [[the-bridge | le pont]]) |
ZBWDR1: | les retraits du pont | |
ZBCGOV1: | la gouvernance | |
ZBCREL1: | les votes sur les versions (voir [[releases-and-updates | les 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.