Wiki ZooBC
Données et stockage

Les fichiers sur la chaîne (DFS)

ZooBC dispose de deux façons de conserver un fichier. Un fichier DFS sert aux petits contenus : le fichier voyage dans sa propre transaction, et la chaîne l’enregistre comme une ligne de jeu de données de son propriétaire. Les fichiers plus volumineux vont dans le stockage décentralisé, découpés en fragments qui ne touchent jamais la chaîne. Cet article traite des fichiers DFS.

L’enregistrement et le contenu

Le fichier DFS d’un propriétaire à un chemin donné est la ligne de jeu de données (owner, owner, "dfs:" + path) : l’auteur (setter) et le destinataire sont tous deux le propriétaire, et la propriété est dfs: suivi du chemin. La valeur de la ligne est la forme hexadécimale d’un enregistrement de métadonnées :

  • le hachage SHA3-256 du contenu, et sa taille ;
  • les permissions (0644) ;
  • deux horodatages ;
  • le nombre de segments et le hachage de chaque segment.

Le contenu lui-même voyage dans le corps de la transaction. Un corps peut faire au plus 65 536 octets, si bien qu’un fichier DFS contient jusqu’à environ 64 Kio. Les nœuds conservent les octets dans une table locale de segments, à côté de la chaîne ; ils ne font pas partie de l’état de consensus. La ligne sur la chaîne contient les hachages, donc n’importe qui peut vérifier le contenu par rapport à elle.

Chemins

Un chemin commence par / et fait au plus 1 024 octets. Il ne peut contenir ni //, ni .., ni octet NUL, ni retour chariot, ni saut de ligne. Un / final est supprimé, si bien que /a/b/ et /a/b désignent le même fichier. Seules les transactions DFS peuvent écrire des lignes sous dfs: ou dfs:dir: ; une SetupAccountDataset portant l’un de ces préfixes est refusée.

Créer, mettre à jour, supprimer

TransactionTypeCe qu’elle fait
DFSCreateFile8crée le fichier à un chemin, avec son contenu
DFSUpdateFile264remplace le contenu au même chemin
DFSDeleteFile520supprime le fichier

Une création sur un fichier existant, ou une mise à jour ou une suppression d’un fichier absent, est une opération nulle payante : les frais sont prélevés et rien ne change. Une application doit donc lire la ligne du chemin avant de choisir entre création et mise à jour.

Loyer et remboursements

Une ligne DFS est un objet de jeu de données comme un autre. Elle possède sa propre adresse de dépôt (ZBS_…) que n’importe qui peut alimenter, et elle paie le loyer de jeu de données à chaque période sur ses octets, la propriété plus la valeur hexadécimale : au prix de départ, 0,05 ZBC par Mio et par période sur le mainnet. Le loyer est prélevé sur le dépôt, puis sur le propriétaire, et crédité au fonds de longévité. Si aucun des deux ne peut payer, la ligne est désactivée, comme pour tout jeu de données.

Supprimer un fichier DFS rend à chaque payeur, propriétaire compris, sa propre part inutilisée du dépôt. L’argent est consommé selon le principe premier entré, premier sorti : le paiement le plus ancien est épuisé avant que le suivant ne soit touché, si bien que les payeurs les plus récents récupèrent le plus.

Fichier DFS ou fichier stocké ?

Fichier DFSFichier stocké
Taillejusqu’à environ 64 Kiojusqu’à 100 000 fragments de 1 Mio
Contenudans la transactiondes fragments sur cinq nœuds détenteurs, jamais sur la chaîne
Sur la chaîneune ligne sous dfs:le manifeste : racine, tailles et identifiants des fragments
Modificationsmise à jour et suppression au même cheminun nouveau contenu a une nouvelle racine, c’est donc un nouveau fichier
Le loyer va aufonds de longévitéfonds de stockage
Contrôle d’accèsaucun : le contenu est dans une transaction publiqueun indicateur privé avec une liste d’autorisation

Aucune des deux voies ne repose sur les machines de la ZooBC Foundation ni sur l’ordinateur de celui qui téléverse.

Deux façons de conserver un fichier : un fichier DFS dans sa transaction, ou un fichier stocké découpé en fragments détenus par cinq nœuds.
Deux façons de conserver un fichier : un fichier DFS dans sa transaction, ou un fichier stocké découpé en fragments détenus par cinq nœuds.

Voir aussi