Wiki di ZooBC
Dati e archiviazione

Pagare per conservare i dati (longevità)

I nodi ZooBC eliminano la cronologia vecchia, quindi una transazione ordinaria resta su un nodo di mainnet da 30 a 60 giorni (pruning della cronologia). Un record di longevità mantiene una transazione scelta, e il blocco in cui si trova, su ogni nodo finché il record ha denaro. È il modo in cui una prova di pagamento, l'hash di un documento o un escrow con una scadenza lontana restano leggibili da qualsiasi nodo.

Aprire un record

Ci sono due modi per aprire un record.

  • Il campo di sopravvivenza. Una transazione di versione 2 o 3 contiene un campo di sopravvivenza: il deposito proprio del mittente, pari a 0 oppure ad almeno 0,1 ZBC (10.000.000 di unità atomiche). Un deposito lì apre un record per quella stessa transazione (involucro della transazione).
  • FundLongevity (tipo 52). Qualsiasi account può finanziare qualsiasi transazione. Il corpo è esattamente di 28 byte: l'id della transazione di destinazione (8 byte), l'importo (8), l'altezza del blocco che contiene la destinazione (4) e la dimensione della destinazione (8), cioè il suo corpo più il suo messaggio. L'importo deve essere di almeno 0,1 ZBC.

Il primo finanziamento deve arrivare finché la transazione di destinazione ha meno di un intervallo di snapshot, 172.800 blocchi (circa 30 giorni) su mainnet, e deve indicarne l'altezza e la dimensione reali. Quella finestra garantisce che ogni nodo detenga ancora la transazione di destinazione e possa verificare quanto dichiarato. Un primo finanziamento in ritardo o errato è una no-op pagata: la commissione viene trattenuta e non viene finanziato nulla.

Una ricarica successiva deve indicare la stessa dimensione, e può arrivare in qualsiasi momento finché il record vive. Il suo prezzo viene fuso nel prezzo del record con una media ponderata.

Il corpo di 28 byte di FundLongevity, la finestra del primo finanziamento e i due intervalli gratuiti.
Il corpo di 28 byte di FundLongevity, la finestra del primo finanziamento e i due intervalli gratuiti.

Quanto costa

Quando il record viene aperto blocca la dimensione della transazione di destinazione e il prezzo di archiviazione per MiB (0,05 ZBC all'inizio). Non paga nulla fino a due intervalli di snapshot dopo il blocco della transazione, perché i nodi conservano comunque la transazione per quel tempo. Dopo di che, una volta per periodo:

rent = ceil(payload bytes × locked price ÷ 1,048,576), at least 1 unit

Il canone viene prelevato dal deposito e accreditato al pool di longevità, che paga ai nodi una fetta in ogni blocco attraverso la lotteria coinbase. Al prezzo iniziale un payload di 16 byte paga 77 unità per periodo e un payload di 1.000 byte ne paga 4.769, quindi per quest'ultimo il deposito minimo di 0,1 ZBC copre più di 2.000 periodi. Quando il denaro di un record arriva a zero, il record viene rilasciato e la sua transazione può di nuovo essere eliminata.

Gli snapshot portano con sé le transazioni finanziate insieme alle intestazioni dei blocchi che le contengono, quindi anche un nodo che entra a partire da uno snapshot le detiene (snapshot e fast sync).

Chiudere un record

Il canone viene prelevato dal denaro dei paganti in ordine di arrivo: il deposito più vecchio si esaurisce prima che venga toccato il successivo. Un record vive finché qualcuno continua a pagare.

Per chiuderlo in anticipo, ogni pagante il cui denaro non è ancora esaurito vota con una normale CloseLongevity (tipo 309). Quando l'ultimo di loro ha votato, il record si chiude e il suo resto va al pool di longevità.

  • Una ricarica ritira il voto di quel pagante, e anche un nuovo pagante deve votare.
  • Un pagante che ha perso la propria chiave semplicemente mantiene in vita il record finché il suo denaro non si esaurisce.
  • Quando la fatturazione esaurisce il denaro dell'ultimo pagante che non aveva votato, il record si chiude in quel blocco di fatturazione.

Nulla di ciò che viene versato in un record torna a un pagante, quindi nessuno può prendersi i depositi degli altri. Il tipo CancelLongevity (53) è dismesso: ogni catena lo rifiuta. Nessuna parte esterna, ZooBC Foundation compresa, può chiudere un record.

I depositi dei paganti vengono consumati a partire dal più vecchio; il record si chiude quando ogni pagante con denaro residuo ha votato.
I depositi dei paganti vengono consumati a partire dal più vecchio; il record si chiude quando ogni pagante con denaro residuo ha votato.

Leggere i record

L'API del nodo ha route per i record e i prezzi: /longevity, /longevity/quote, /accounts/<address>/survival, /accounts/<address>/objects e /objects/<id>.

Vedi anche