Armazenar dados no blockchain é caro, portanto, se você precisar armazenar uma grande quantidade de dados no “estilo blockchain” (de maneira imutável, sem permissão e distribuída), precisará usar uma solução de armazenamento externo. A escolha mais comum é usar o IPFS , mas existem outros players no mercado. Um deles é o Ethereum Swarm . Neste artigo, apresentarei as semelhanças e diferenças entre Swarm e IPFSs para ajudá-lo a escolher a solução de armazenamento certa para seu próximo projeto.
O IPFS (sigla para InterPlanetary File System) foi fundado em 2014 pelo Protocol Labs. É um protocolo de sistema de arquivos distribuído que usa endereçamento de conteúdo para identificar exclusivamente cada arquivo em um namespace global. O IPFS não tem um sistema de incentivo real, é por isso que o Protocol Labs criou o FileCoin em 2017, que é seu próprio blockchain centrado em armazenamento.
A ideia do Ethereum Swarm veio de Gavin Wood, um dos fundadores do Ethereum. Em 2015, Viktor Trón e Daniel Nagy assumiram o projeto dentro da equipe Geth da Fundação. Depois de uma ICO bem-sucedida, eles fazem sua própria jornada como um projeto autônomo apoiado pela Ethereum Foundation. Hoje em dia (em 2022), o Swarm é mais ou menos completo e desenvolvido ativamente.
Ambos os sistemas fornecem um sistema distribuído, imutável e endereçável por conteúdo com seu próprio sistema de incentivo e criptomoeda, e também ambos são baseados em libp2p . A seguir, farei uma comparação passo a passo dos dois sistemas.
O IPFS é basicamente uma comunidade de provedores de armazenamento onde os nós publicam conteúdo referenciado por seu hash de conteúdo. A lista de nós de armazenamento para um hash é armazenada em um DHT . Se você deseja recuperar o conteúdo, na primeira etapa, você deve encontrar a lista de pares no DHT pelo hash do conteúdo. Na segunda etapa, o id do par deve ser traduzido para um endereço IP e, na terceira etapa, você pode baixar o conteúdo do par fornecido no endereço IP.
O Ethereum Swarm tem uma lógica diferente porque armazena o próprio conteúdo no DHT. Eles chamam esse sistema de DISC (Distributed Immutable Store for Chunks), e todo o sistema é projetado para tornar esse DHT eficiente. Por exemplo, quando um nó escolhe outros nós para se conectar, ele escolhe pares para cada ordem de proximidade (ou seja, ordem de distância de magnitude de seu próprio endereço). Por causa da conectividade Kademlia, encontrar um pedaço é muito rápido neste sistema. Quando um nó deseja recuperar um pedaço, ele pergunta a seus pares. Se um peer tem o conteúdo, ele devolve, se não, ele pede seus peers, etc. encontre um caminho de comprimento logarítmico. Quando o nó armazenador recebe o pedido de recuperação, ele devolve o conteúdo ao nó solicitante, que por sua vez o retransmite ao nó que o solicitou, etc., até chegar à origem do pedido. O Swarm chama esse método de encaminhamento de Kademlia e fornece anonimato. Os nós conhecem apenas os pares solicitantes do conteúdo, mas ninguém sabe quem é a origem da solicitação ou do conteúdo. É algo semelhante ao que a rede Tor faz para tornar as solicitações anônimas. Mas o anonimato é apenas uma vantagem de encaminhar Kademlia. Também ajuda a distribuir o conteúdo, mas escreverei sobre isso mais tarde.
Se você deseja armazenar conteúdo mutável (por exemplo, uma página da Web que muda com frequência) no IPFS , pode usar o IPNS . No IPNS, o endereço do conteúdo mutável é uma chave pública e o endereço do conteúdo imutável subjacente é assinado por sua parte da chave privada. A chave pública -> atribuições de conteúdo assinadas são publicadas no DHT. Se o conteúdo for alterado, o proprietário do conteúdo assina o novo hash de conteúdo e o publica para a chave pública, para que os recuperadores possam atualizar a atribuição de conteúdo a partir dele.
No Ethereum Swarm , existem dois tipos de chunks. Um é o bloco endereçado de conteúdo “usual” e o outro é o bloco de proprietário único. O endereço do bloco de proprietário único é um hash do proprietário e um ID exclusivo. Esses blocos de proprietário único também são imutáveis, mas você pode criar o ID a partir de um nome de tópico e um número de série. Ao alterar o conteúdo, basta aumentar o número de série e publicar um novo bloco. Os recuperadores podem pesquisar o sistema e, se um novo bloco estiver disponível com um número de série maior, eles poderão atualizar o conteúdo dele. O Swarm chama esses feeds de estrutura com número de série.
Se você deseja armazenar conteúdo no IPFS , você tem mais opções. Você pode simplesmente escolher um provedor centralizado como Infura ou Pinata, carregar seu conteúdo e pagar a taxa de armazenamento para disponibilizar seu conteúdo no IPFS ou simplesmente executar um nó IPFS em sua máquina e publicá-lo você mesmo.
Outra forma é usar o FileCoin, que é o blockchain “oficial” do IPFS (também desenvolvido pelo Protocol Labs que desenvolveu o próprio IPFS). FileCoin é basicamente um mercado para provedores de armazenamento onde você pode fazer contratos para armazenar seu conteúdo. Os mecanismos da rede FileCoin mantêm seu conteúdo seguro e punem os provedores contratados que não guardam ou não disponibilizam seu conteúdo. Se você recuperar o conteúdo e um limite de transferência de dados for atingido, você terá que pagar uma taxa.
O Ethereum Swarm usa seu próprio sistema de pagamento em vez de um blockchain que é algo semelhante a canais de pagamento como a Lightning Network , mas um pouco diferente. Quando um nó paga a outro, fá-lo em cheque. Esses cheques são semelhantes aos cheques do mundo real, documentos assinados que podem ser usados para sacar dinheiro do contrato do talão de cheques do nó.
No Swarm, a transferência de dados tem uma taxa. Se um nó enviar dados para seu par, uma pequena taxa será cobrada. Toda conexão peer tem um saldo, e se esse saldo atingir um limite, o nó dá um cheque para o outro. Tudo sai da cadeia. Apenas descontar o cheque precisa de ação blockchain.
Se você deseja recuperar o conteúdo, deve pagar ao colega que o fornece. Se tiver o conteúdo, pode ficar com a taxa inteira, mas se não tiver, tem que pagar pelo seu par que o cede. Essa lógica incentiva os nós a armazenar o conteúdo popular localmente, de modo que o Swarm atua como um CDN adaptável.
Na rede Swarm, não há provedores individuais. O conteúdo é sempre armazenado nos nós que possuem a menor distância Kademlia de seu hash (o Swarm chama esses nós de vizinhança). É uma propriedade essencial do Swarm manter o DHT efetivamente pesquisável. Você pode publicar conteúdo em qualquer nó, que o enviará para o ponto mais próximo, que o enviará para o melhor local de armazenamento. O método é muito semelhante à recuperação de conteúdo, mas na direção oposta. Se você deseja armazenar seu conteúdo na rede, deve anexar um selo postal a ele. Um selo postal é algo como um cheque que só pode ser descontado se você puder provar que mantém o conteúdo.
A interoperabilidade do Ethereum é o campo onde o Ethereum Swarm é realmente forte. Como armazenamento “oficial” do Ethereum, tudo é “compatível com Ethereum”.
Por exemplo, o endereço do nó é derivado do endereço Ethereum do proprietário. Por causa disso, podemos usar o sistema de encaminhamento de blocos para enviar mensagens criptografadas para determinados nós. Swarm chama essa técnica de PSS, que é o sucessor do protocolo de mensagens Ethereum Whisper.
O proprietário dos pedaços de proprietário único também é o endereço Ethereum e o método de assinatura é o mesmo que o uso Ethereum, então você pode simplesmente verificá-lo em um contrato inteligente ou usá-lo para atribuir metadados em feeds. Quando criei o MyETHMeta (um sistema de metadados semelhante ao Gravatar para contas Ethereum), tive que usar um contrato inteligente para armazenar endereços Ethereum -> mapeamentos de URL de metadados. Com o Swarm, isso pode ser feito por um simples feed sem blockchain.
Pedaços de enxame são árvores Merkle . Isso significa que o endereço do bloco é a raiz Merkle do conteúdo. Isso é útil se você os verificar em contratos inteligentes porque pode criar facilmente provas de inclusão para o conteúdo. Por exemplo, se você deseja armazenar uma lista de permissões longa (> 1000 elementos), pode armazená-la no Swarm em vez do blockchain e verificar a associação por um contrato inteligente usando provas Merkle. Ou você pode criar rollups completos no Swarm, onde a raiz do estado também é o endereço de conteúdo para todo o estado.
Como você pode ver, ambas as soluções de armazenamento têm seus pontos fortes e fracos.
O IPFS é o sistema mais antigo (no bom sentido). Tem muitos casos de uso, é bem documentado e amplamente utilizado. Existem muitos provedores IPFS centralizados e você também pode usar o FileCoin para armazenar seu conteúdo.
O Ethereum Swarm é relativamente novo e está em desenvolvimento, mas possui algumas propriedades muito interessantes. O armazenamento e recuperação de conteúdo anônimo, o gerenciamento supereficiente de DHT e a forte compatibilidade com Ethereum são recursos exclusivos desta solução.