Trigger e attestazioni
Un trigger è un pagamento condizionato custodito dalla catena: ZBC bloccati subito e rilasciati più tardi a un destinatario, quando una condizione è soddisfatta. La condizione è un'altezza di blocco oppure un evento del mondo esterno, come il risultato di una partita, che i nodi registrati confermano tramite attestazione. I trigger permettono blocchi temporali, regali differiti e pagamenti legati a esiti reali senza alcun codice di contratto.
Creare un trigger
Una transazione CreateTrigger (tipo 15) indica un destinatario, un importo e una condizione. I trigger trasportano solo ZBC. Ci sono due tipi di condizione:
- un trigger ad altezza indica un'altezza di blocco, che deve essere futura. Un blocco arriva ogni 15 secondi, quindi un'altezza funziona come una data: un giorno più avanti equivale a 5.760 blocchi;
- un trigger a evento indica un id di evento, e scatta quando i nodi registrati risolvono quell'evento; resta in sospeso fino ad allora o finché non viene annullato. Contiene anche un'altezza di scatto, che non viene usata.
L'importo lascia subito il saldo del creatore e viene bloccato. Finché il trigger non scatta, il creatore può riprendersi il denaro con CancelTrigger (tipo 16). Un trigger paga una sola volta: non esegue alcuno script e non si ripete.
Attestazioni: come si risolvono gli eventi
Una blockchain non può leggere da sola il mondo esterno: se ogni nodo scaricasse una pagina web, potrebbe vedere risposte diverse e i nodi non sarebbero d'accordo. ZooBC usa invece le attestazioni.
- Un nodo registrato invia un AttestEvent (tipo 17) che contiene un id di evento e un valore, ciascuno di al massimo 4.096 byte.
- Ogni nodo ha un voto per evento: un'attestazione più recente sostituisce quella più vecchia. Contano solo le attestazioni dei nodi registrati.
- Alla fine di ogni blocco, la catena conta le attestazioni di ogni evento non risolto. Quando due terzi del registro attivo attestano esattamente lo stesso valore (8 seggi su 11, per esempio), quel valore diventa il risultato dell'evento, in modo definitivo.
- Nello stesso blocco, ogni trigger in sospeso che indica l'evento paga il suo destinatario.
Un'attestazione è un compito esente da commissioni: dichiara una commissione esattamente pari a 0 e proviene dall'account proprio del nodo (vedi commissioni). Nessuna decisione che riguarda l'intero registro si risolve finché il registro è sotto il suo minimo di max(3, min_registry_size) seggi e proprietari distinti, cioè 7 su mainnet (vedi regole dei due terzi).
Id di evento riservati
Le stesse attestazioni trasportano altre decisioni della rete, sotto prefissi riservati dell'id di evento. Ciascuna viene risolta da un passaggio proprio, non da quello dei trigger:
| Prefisso | Usato per |
|---|---|
ZBRDEP1: | depositi del bridge (vedi bridge e le monete wrapped) |
ZBWDR1: | prelievi del bridge |
ZBCGOV1: | governance |
ZBCREL1: | voti sulle release (vedi release e aggiornamenti) |
Con altre funzioni
- Il pagamento di un trigger è un accredito in entrata, quindi passa attraverso la politica di ripartizione del destinatario (vedi politiche di ripartizione e di transazione).
- La politica di transazione di un destinatario viene verificata solo rispetto al CreateTrigger stesso; il rilascio raggiunge comunque un destinatario che in seguito rifiuta i pagamenti.
- In una politica di transazione, AttestEvent appartiene alla categoria Bridge.
Per i pagamenti che si ripetono, vedi trasferimenti pianificati; per denaro che matura minuto per minuto, vedi pagamenti liquidi (flussi).