Wiki di ZooBC
Dati e archiviazione

File sulla catena (DFS)

ZooBC ha due modi per conservare un file. Un file DFS è pensato per contenuti piccoli: il file viaggia dentro la propria transazione, e la catena lo registra come riga di dataset del suo proprietario. I file più grandi vanno nel pool di archiviazione, divisi in frammenti che non toccano mai la catena. Questo articolo tratta i file DFS.

Il record e il contenuto

Un file DFS di un proprietario in un percorso è la riga di dataset (owner, owner, "dfs:" + path): chi imposta la riga e il destinatario sono entrambi il proprietario, e la proprietà è dfs: seguito dal percorso. Il valore della riga è la forma esadecimale di un record di metadati:

  • l'hash SHA3-256 del contenuto, e la sua dimensione;
  • i permessi (0644);
  • due timestamp;
  • il numero di porzioni e l'hash di ciascuna porzione.

Il contenuto vero e proprio viaggia nel corpo della transazione. Un corpo può essere al massimo di 65.536 byte, quindi un file DFS contiene fino a circa 64 KiB. I nodi conservano i byte in una tabella locale delle porzioni accanto alla catena; non fanno parte dello stato di consenso. La riga sulla catena contiene gli hash, quindi chiunque può verificare il contenuto rispetto a essa.

Percorsi

Un percorso inizia con / ed è lungo al massimo 1.024 byte. Non può contenere //, .., un byte NUL, un ritorno a capo o un avanzamento di riga. Una / finale viene scartata, quindi /a/b/ e /a/b indicano lo stesso file. Solo le transazioni DFS possono scrivere righe sotto dfs: o dfs:dir:; un SetupAccountDataset con uno di questi prefissi viene rifiutato.

Creare, aggiornare, cancellare

TransazioneTipoChe cosa fa
DFSCreateFile8crea il file in un percorso, con il suo contenuto
DFSUpdateFile264sostituisce il contenuto nello stesso percorso
DFSDeleteFile520rimuove il file

Una creazione su un file esistente, e un aggiornamento o una cancellazione di un file che non esiste, sono no-op pagate: la commissione viene addebitata e non cambia nulla. Un'app dovrebbe quindi leggere la riga del percorso prima di scegliere tra creazione e aggiornamento.

Canone e rimborsi

Una riga DFS è un oggetto dataset come qualsiasi altro. Ha un proprio indirizzo di deposito (ZBS_…) che chiunque può finanziare, e paga il canone dei dataset ogni periodo sui suoi byte, la proprietà più il valore esadecimale: al prezzo iniziale, 0,05 ZBC per MiB per periodo su mainnet. Il canone viene prelevato dal deposito e poi dal proprietario, e accreditato al pool di longevità. Se nessuno dei due può pagare, la riga viene disattivata, come per qualsiasi dataset.

Cancellare un file DFS restituisce a ogni pagante, proprietario compreso, la propria parte non usata del deposito. Il denaro viene consumato in ordine di arrivo: il pagamento più vecchio si esaurisce prima che venga toccato il successivo, quindi chi ha pagato più di recente riottiene di più.

File DFS o file archiviato?

File DFSFile archiviato
Dimensionefino a circa 64 KiBfino a 100.000 frammenti da 1 MiB
Contenutodentro la transazioneframmenti su cinque nodi detentori, mai sulla catena
Sulla catenauna riga sotto dfs:il manifest: radice, dimensioni e id dei frammenti
Modificheaggiornamento e cancellazione nello stesso percorsoun nuovo contenuto ha una nuova radice, quindi è un nuovo file
Il canone va ail pool di longevitàil pool di archiviazione
Controllo degli accessinessuno: il contenuto è in una transazione pubblicaun flag privato con una lista di accesso

Nessuno dei due modi si basa sulle macchine della ZooBC Foundation o sul computer di chi ha caricato il file.

Due modi per conservare un file: un file DFS dentro la sua transazione, oppure un file archiviato diviso in frammenti detenuti da cinque nodi.
Due modi per conservare un file: un file DFS dentro la sua transazione, oppure un file archiviato diviso in frammenti detenuti da cinque nodi.

Vedi anche