WEB3DEV

Cover image for Fixando Arquivos Usando o IPFS
Paulo Gio
Paulo Gio

Posted on

Fixando Arquivos Usando o IPFS

A fixação (pinning) é um conceito muito importante no IPFS. A semântica do IPFS tenta fazer com que cada objeto seja local - não há "recupere este arquivo para mim de um servidor remoto", apenas ipfs cat ou ipfs get, que agem da mesma maneira, não importa onde o objeto real esteja localizado.

Embora isso seja bom, às vezes você quer ser capaz de controlar o que mantém por perto. A fixação é o mecanismo que permite que você diga ao IPFS para sempre manter um determinado objeto em algum lugar - o padrão sendo o seu nó local, embora isso possa ser diferente se você utilizar um serviço de fixação remota de terceiros. O IPFS tem um mecanismo de cache bem agressivo que manterá um objeto local por um curto período de tempo depois que você executar qualquer operação do IPFS nele, mas esses objetos podem ser coletados como lixo (garbage collection) regularmente. Para evitar essa coleta de lixo, basta fixar o CID (identificador de conteúdo) de seu interesse ou então adicioná-lo ao MFS. Os objetos adicionados através do ipfs add são fixados recursivamente por padrão. As coisas no MFS não são fixadas por padrão, mas são protegidas da coleta de lixo, então pode-se pensar no MFS como um mecanismo para fixação implícita.

Vejamos este exemplo para explorar a fixação em seu nó IPFS local com um pouco mais de profundidade:

1.Primeiro, crie um arquivo chamado foo com o conteúdo ipfs rocks:

echo "ipfs rocks" > foo
Enter fullscreen mode Exit fullscreen mode

O comando echo não fornece uma saída ao usar a instrução “>” de redirecionamento de saída.

2.Logo depois, adicione foo ao IPFS usando o comando ipfs add:

ipfs add foo               

> added QmRTV3h1jLcACW4FRfdisokkQAk4E4qDhUzGpgdrd4JAFy foo
Enter fullscreen mode Exit fullscreen mode

3.Em seguida, gere uma lista de todos os objetos que você fixou em seu armazenamento local.

ipfs pin ls --type=all     


> QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc recursive
> QmRTV3h1jLcACW4FRfdisokkQAk4E4qDhUzGpgdrd4JAFy recursive
> QmQy6xmJhrcC5QLboAcGFcAE1tC8CrwDVkrHdEYJkLscrQ indirect
> ...
Enter fullscreen mode Exit fullscreen mode

O comando pin ls listará todos os objetos que estão fixados em seu armazenamento local, já o comando --type=all listará todos os diferentes tipos de fixações (recursivas, indiretas, etc.).

4.Agora use o comando pin rm <foo hash> para desafixar o objeto de destino.

ipfs pin rm <foo hash>     

> unpinned QmRTV3h1jLcACW4FRfdisokkQAk4E4qDhUzGpgdrd4JAFy
Enter fullscreen mode Exit fullscreen mode

Isso removerá o objeto foo hash de seus itens fixados.

5.Em seguida, tente executar o mesmo comando da etapa anterior.

ipfs pin rm <foo hash>     

> Error: not pinned or pinned indirectly
Enter fullscreen mode Exit fullscreen mode

Tentar executar ipfs pin rm <foo hash> novamente aqui retornará um erro, porque a etapa anterior já removeu a fixação de <foo hash>.

6.Em seguida, gere uma nova lista de todos os objetos fixados.

ipfs pin ls --type=all    

> QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc recursive
> QmQy6xmJhrcC5QLboAcGFcAE1tC8CrwDVkrHdEYJkLscrQ indirect
> ...
Enter fullscreen mode Exit fullscreen mode

Você notará que esta lista é exatamente igual à anterior acima, exceto que o <foo hash> não está mais listado.

Três tipos de fixações

Como você deve ter notado no exemplo acima, o primeiro comando ipfs pin rm não funcionou - ele deveria ter avisado que o hash fornecido foi fixado recursivamente. O que isto significa? Existem três tipos de fixações no mundo IPFS:

  • Fixações diretas, que fixam apenas um único bloco e nenhum outro relacionado a ele.
  • Fixações recursivas, que fixam um determinado bloco e todos os seus filhos.
  • Fixações indiretas, que são o resultado da fixação recursiva do pai de um determinado bloco.

Um objeto fixado não pode ser coletado como lixo — tente isto como prova:

1.Primeiro, adicione foo ao IPFS.

ipfs add foo           

> added QmRTV3h1jLcACW4FRfdisokkQAk4E4qDhUzGpgdrd4JAFy foo
> 11 B / 11 B [===================] 100.00%
Enter fullscreen mode Exit fullscreen mode

Isso irá adicionar o arquivo foo ao IPFS.

2.Logo depois, use o comando repo gc para executar uma coleta de lixo no repositório.

ipfs repo gc

> removed QmVoSaWpZYicoLSAcdwxDPt2Gk4WVFCfBFTBtwwY2ASD9P
> removed QmcpK3cSDyPGiNriMZrZTNu8YCPBSiMAApuvMqXaJVyuWr
> removed QmdpczDhBmrkxerCUWkEcRExcTHFcA4EcDCeYNdXcV5iqE
> ...
Enter fullscreen mode Exit fullscreen mode

O comando repo gc removerá todos os objetos desafixados do IPFS.

3.Em seguida, use o comando cat <foo hash> para mostrar o conteúdo de foo.

ipfs cat <foo hash>    

> ipfs rocks
Enter fullscreen mode Exit fullscreen mode

O comando retornará ipfs rocks, já que o <foo hash> foi fixado, portanto não pode ser removido.

Mas, e se foo fosse de alguma forma desafixado...

1.Use o comando pin rm para desafixar <foo hash>.

ipfs pin rm <foo hash>    

> unpinned QmRTV3h1jLcACW4FRfdisokkQAk4E4qDhUzGpgdrd4JAFy
Enter fullscreen mode Exit fullscreen mode

Isso irá desafixar foo.

2.Agora, execute o comando de coleta de lixo novamente.

ipfs repo gc              

> removed QmPPjksRv8SqiibAy6bSAXBnnfcBf3QnTnApxWjcFUTTkZ                                                
> removed QmS3wrDNoaRtRi84K7Hf8jzh5sBZcwrQFj7CZLmmmacS2U                                                
> removed QmRTV3h1jLcACW4FRfdisokkQAk4E4qDhUzGpgdrd4JAFy
Enter fullscreen mode Exit fullscreen mode

Assim como anteriormente, isso removerá todos os objetos desafixados do IPFS.

3.Para finalizar, execute cat <foo hash> novamente para ver se ele retorna o conteúdo de foo.

ipfs cat <foo hash>       

> ipfs rocks
Enter fullscreen mode Exit fullscreen mode

Você notará que a saída ainda retorna a resposta correta, porque embora <foo hash> tenha sido removido do armazenamento local, os dados ainda existem no IPFS.

Fixação local versus remota

Todas as informações acima pressupõem que você está fixando itens localmente, ou seja, em seu nó IPFS local. Esse é o padrão de comportamento do IPFS, mas também é possível fixar seus arquivos em um serviço de fixação remota. Esses serviços de terceiros oferecem a oportunidade de fixar arquivos, não em seu próprio nó local, mas em nós que eles operam. Você não precisa se preocupar com o espaço em disco disponível ou tempo de atividade (uptime) do seu próprio nó.

Embora você possa usar a própria GUI, CLI ou outras ferramentas de desenvolvimento de um serviço de fixação remota para gerenciar arquivos IPFS fixados em seus serviços, você também pode trabalhar diretamente com serviços de fixação usando sua instalação IPFS local - o que significa que você não precisa aprender sobre a API exclusiva ou outras ferramentas de um serviço de fixação.

  • A API do Serviço de Fixação do IPFS oferece uma especificação que permite aos desenvolvedores integrar qualquer serviço de fixação que suporte a especificação ou criar seus próprios. Graças ao formato de especificação OpenAPI, clientes e servidores podem ser gerados a partir do arquivo de especificação YAML.
  • Se você usar o Kubo 0.8+ na linha de comando, terá acesso aos comandos ipfs pin remote atuando como um cliente para interagir com as APIs do serviço de fixação. Adicione seus serviços de fixação favoritos, fixe CIDs com nomes legíveis por humanos, obtenha status de fixação e muito mais, diretamente da CLI. Saiba como →
  • O IPFS Desktop e sua interface da web equivalente do IPFS no navegador, a Interface do Usuário (UI) da Web do IPFS, oferecem suporte a serviços de fixação remota, para que você possa fixar em seu(s) serviço(s) de fixação favorito(s) diretamente da interface do usuário. Saiba como →

Tutorial publicado na Documentação Oficial do IPFS. Traduzido por Paulinho Giovannini.

Top comments (0)