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
| Transaction | Type | Ce qu’elle fait |
|---|---|---|
| DFSCreateFile | 8 | crée le fichier à un chemin, avec son contenu |
| DFSUpdateFile | 264 | remplace le contenu au même chemin |
| DFSDeleteFile | 520 | supprime 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 DFS | Fichier stocké | |
|---|---|---|
| Taille | jusqu’à environ 64 Kio | jusqu’à 100 000 fragments de 1 Mio |
| Contenu | dans la transaction | des fragments sur cinq nœuds détenteurs, jamais sur la chaîne |
| Sur la chaîne | une ligne sous dfs: | le manifeste : racine, tailles et identifiants des fragments |
| Modifications | mise à jour et suppression au même chemin | un nouveau contenu a une nouvelle racine, c’est donc un nouveau fichier |
| Le loyer va au | fonds de longévité | fonds de stockage |
| Contrôle d’accès | aucun : le contenu est dans une transaction publique | un 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.