Stocker des données sur la blockchain coûte cher, donc si vous avez besoin d'y stocker une grande quantité de données dans le "style blockchain" (de manière immuable, sans autorisation et distribuée), vous devez utiliser une solution de stockage externe. Le choix le plus courant consiste à utiliser IPFS , mais il existe d'autres acteurs sur le marché. L'un d'eux est l' essaim Ethereum . Dans cet article, je vais vous présenter les similitudes et les différences entre Swarm et IPFS pour vous aider à choisir la bonne solution de stockage pour votre prochain projet.
IPFS (l'acronyme de InterPlanetary File System) a été fondé en 2014 par Protocol Labs. Il s'agit d'un protocole de système de fichiers distribué qui utilise l'adressage de contenu pour identifier de manière unique chaque fichier dans un espace de noms global. IPFS n'a pas de véritable système d'incitation, c'est pourquoi Protocol Labs a créé FileCoin en 2017, qui est sa propre blockchain centrée sur le stockage.
L'idée d'Ethereum Swarm est venue de Gavin Wood, l'un des fondateurs d'Ethereum. En 2015, Viktor Trón et Daniel Nagy ont repris le projet au sein de l'équipe Geth de la Fondation. Après une ICO réussie, ils font leur propre voyage en tant que projet autonome soutenu par la Fondation Ethereum. De nos jours (en 2022), Swarm est plus ou moins complet et activement développé.
Les deux systèmes fournissent un système distribué, immuable et adressable par le contenu avec son propre système d'incitation et sa propre crypto-monnaie, et les deux sont également basés sur libp2p . Dans ce qui suit, je vais faire une comparaison étape par étape des deux systèmes.
IPFS est essentiellement une communauté de fournisseurs de stockage où les nœuds publient du contenu référencé par son hachage de contenu. La liste des nœuds de stockage pour un hachage est stockée dans un DHT . Si vous souhaitez récupérer du contenu, dans un premier temps, vous devez trouver la liste des pairs dans le DHT par le hachage du contenu. Dans la deuxième étape, l' identifiant du pair doit être traduit en une adresse IP, et dans la troisième étape, vous pouvez télécharger le contenu du pair donné à l'adresse IP.
Ethereum Swarm a une logique différente car il stocke le contenu lui-même dans le DHT. Ils appellent ce système DISC (Distributed Immutable Store for Chunks), et l'ensemble du système est conçu pour rendre cette DHT efficace. Par exemple, lorsqu'un nœud choisit d'autres nœuds pour se connecter, il choisit des pairs pour chaque ordre de proximité (c'est-à-dire, un ordre de grandeur de distance à partir de sa propre adresse). En raison de la connectivité Kademlia, trouver un morceau est très rapide dans ce système. Lorsqu'un nœud veut récupérer un morceau, il demande à ses pairs. Si un pair a le contenu, il le rend, sinon, il demande à ses pairs, etc. Le contenu est toujours stocké par des nœuds qui ont une petite distance Kademlia de lui, et à cause de la connectivité Kademlia, il est toujours possible de trouver un chemin de longueur logarithmique. Lorsque le nœud stockeur reçoit la requête de récupération, il redonne le contenu au nœud demandeur, qui à son tour le relaie au nœud qui l'a demandé, etc. jusqu'à ce qu'il arrive à l'origine de la requête. Swarm appelle cette méthode le transfert de Kademlia, et il fournit l'anonymat. Les nœuds ne connaissent que les pairs demandeurs du contenu, mais personne ne sait qui est à l'origine de la demande ou du contenu. C'est quelque chose de similaire à ce que fait le réseau Tor pour anonymiser les requêtes. Mais l'anonymat n'est qu'un des avantages de la transmission de Kademlia. Cela aide également à distribuer le contenu, mais j'écrirai à ce sujet plus tard.
Si vous souhaitez stocker du contenu modifiable (par exemple, une page Web qui change fréquemment) sur IPFS , vous pouvez utiliser IPNS . Sur IPNS, l'adresse du contenu mutable est une clé publique, et l'adresse du contenu immuable sous-jacent est signée par sa partie clé privée. La clé publique -> les affectations de contenu signé sont publiées dans la DHT. Si le contenu change, le propriétaire du contenu signe le nouveau hachage de contenu et le publie pour la clé publique, afin que les récupérateurs puissent actualiser l'affectation de contenu à partir de celui-ci.
Sur Ethereum Swarm , il existe deux types de chunks. L'un est le bloc de contenu "habituel" adressé, et l'autre est le bloc de propriétaire unique. L'adresse du morceau de propriétaire unique est un hachage du propriétaire et un ID unique. Ces blocs à propriétaire unique sont également immuables, mais vous pouvez créer l'ID à partir d'un nom de sujet et d'un numéro de série. Lorsque vous modifiez le contenu, vous devez simplement augmenter le numéro de série et publier un nouveau morceau. Les récupérateurs peuvent interroger le système et, si un nouveau morceau est disponible avec un numéro de série plus élevé, ils peuvent en rafraîchir le contenu. Swarm appelle ces flux de structure numérotés en série.
Si vous souhaitez stocker du contenu sur IPFS , vous avez plus d'options. Vous pouvez simplement choisir un fournisseur centralisé comme Infura ou Pinata, télécharger votre contenu et payer les frais de stockage pour rendre votre contenu disponible sur IPFS, ou vous pouvez simplement exécuter un nœud IPFS sur votre machine et le publier vous-même.
Une autre façon consiste à utiliser FileCoin, qui est la blockchain "officielle" d'IPFS (également développée par Protocol Labs qui a lui-même développé IPFS). FileCoin est essentiellement un marché pour les fournisseurs de stockage où vous pouvez conclure des contrats pour stocker votre contenu. Les mécanismes du réseau FileCoin protègent votre contenu et punissent les fournisseurs sous contrat qui ne conservent pas votre contenu ou ne le rendent pas disponible. Si vous récupérez le contenu et qu'un seuil de transfert de données est atteint, vous devez payer des frais.
Ethereum Swarm utilise son propre système de paiement au lieu d'une blockchain qui est quelque chose de similaire aux canaux de paiement comme le Lightning Network , mais un peu différent. Lorsqu'un nœud en paie un autre, il le fait par chèque. Ces chèques sont similaires aux chèques du monde réel, des documents signés qui peuvent être utilisés pour retirer de l'argent du contrat de chéquier du nœud.
Sur Swarm, le transfert de données est payant. Si un nœud envoie des données à son homologue, une somme modique est comptée. Chaque connexion pair a un solde, et si ce solde atteint une limite, le nœud donne un chèque à l'autre. Tout se passe hors chaîne. Seul l'encaissement du chèque nécessite une action blockchain.
Si vous voulez récupérer du contenu, vous devez payer le pair qui vous le donne. S'il a le contenu, il peut garder la totalité des frais, mais sinon, il doit payer pour son pair qui le donne. Cette logique incite les nœuds à stocker le contenu populaire localement, de sorte que Swarm agit comme un CDN adaptatif.
Sur le réseau Swarm, il n'y a pas de fournisseurs individuels. Le contenu est toujours stocké sur les nœuds qui ont la plus petite distance Kademlia de son hachage (Swarm appelle ces nœuds quartiers). C'est une propriété essentielle de Swarm de garder la DHT effectivement consultable. Vous pouvez publier du contenu sur n'importe quel nœud, ce qui le poussera vers le pair le plus proche, ce qui le poussera vers le meilleur endroit de stockage. La méthode est très similaire à la récupération de contenu mais dans le sens opposé. Si vous souhaitez stocker votre contenu sur le réseau, vous devez y joindre un timbre-poste. Un timbre-poste est quelque chose comme un chèque qui ne peut être encaissé que si vous pouvez prouver que vous en conservez le contenu.
L'interopérabilité Ethereum est le domaine où Ethereum Swarm est vraiment fort. En tant que stockage "officiel" d'Ethereum, tout est "compatible Ethereum".
Par exemple, l'adresse du nœud est dérivée de l'adresse Ethereum du propriétaire. Pour cette raison, nous pouvons utiliser le système de transfert de blocs pour envoyer des messages chiffrés à des nœuds donnés. Swarm appelle cette technique PSS qui est le successeur du protocole de messagerie Ethereum Whisper.
Le propriétaire des morceaux à propriétaire unique est également l'adresse Ethereum et la méthode de signature est la même que celle utilisée par Ethereum, vous pouvez donc simplement le vérifier sur un contrat intelligent ou l'utiliser pour attribuer des métadonnées dans les flux. Lorsque j'ai construit MyETHMeta (un système de métadonnées de type Gravatar pour les comptes Ethereum), j'ai dû utiliser un contrat intelligent pour stocker l'adresse Ethereum -> les mappages d'URL de métadonnées. Avec Swarm, cela peut se faire par un simple flux sans blockchain.
Les morceaux d'essaim sont des arbres de Merkle . Cela signifie que l'adresse du bloc est la racine Merkle du contenu. Ceci est utile si vous les vérifiez dans des contrats intelligents, car vous pouvez facilement créer des preuves d'inclusion pour le contenu. Par exemple, si vous souhaitez stocker une longue liste blanche (> 1000 éléments), vous pouvez la stocker sur Swarm au lieu de la blockchain et vérifier l'adhésion par un contrat intelligent à l'aide de preuves Merkle. Ou vous pouvez créer des cumuls complets sur Swarm où la racine de l'état est également l'adresse de contenu pour l'ensemble de l'état.
Comme vous pouvez le voir, les deux solutions de stockage ont leurs forces et leurs faiblesses.
IPFS est le système le plus ancien (dans le bon sens). Il a de nombreux cas d'utilisation, il est bien documenté et largement utilisé. Il existe de nombreux fournisseurs IPFS centralisés et vous pouvez également utiliser FileCoin pour stocker votre contenu.
Ethereum Swarm est relativement nouveau et en cours de développement, mais il possède des propriétés très intéressantes. Le stockage et la récupération de contenu anonyme, la gestion DHT super efficace et la forte compatibilité Ethereum sont des caractéristiques uniques de cette solution.