SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
28.11.2024

Lição 163: IPFS e Armazenamento Descentralizado

Nesta lição, vamos explorar o Sistema InterPlanetário de Arquivos (IPFS) e como ele pode ser utilizado para soluções de armazenamento descentralizado. Vamos discutir os benefícios de usar IPFS, o básico de como ele funciona e fornecer exemplos de como integrar IPFS em um contrato inteligente Solidity.

O que é o IPFS?

O IPFS é um sistema de arquivos distribuído peer-to-peer que busca conectar todos os dispositivos de computação com o mesmo sistema de arquivos. Pense nele como um Dropbox descentralizado. Ele permite que os usuários armazenem e compartilhem dados de maneira segura e eficiente, tornando-o uma escolha ideal para aplicações descentralizadas (dApps).

Benefícios do IPFS

  1. Descentralização: Os dados são armazenados em uma rede de nós, reduzindo o risco de um único ponto de falha.
  2. Resistência à Censura: Uma vez que os dados são adicionados ao IPFS, não podem ser facilmente removidos ou alterados.
  3. Endereçamento por Conteúdo: Os arquivos são recuperados pelo seu hash de conteúdo, garantindo integridade e fácil recuperação.
  4. Eficiência: O IPFS pode distribuir dados de forma eficaz, permitindo acesso mais rápido e reduzindo o uso de largura de banda.

Como o IPFS Funciona?

O IPFS opera com alguns princípios fundamentais:

  • Endereçamento por Conteúdo: Os arquivos são acessados através de um hash único (CID - Identificador de Conteúdo) derivado do conteúdo do arquivo. Isso significa que mesmo que o arquivo seja movido, ele ainda pode ser acessado usando o mesmo CID.
  • Tabela de Hash Distribuída (DHT): O IPFS usa uma DHT para encontrar pares que armazenam o conteúdo desejado, levando a uma recuperação eficiente de dados em toda a rede.
  • Versionamento: O IPFS permite controle de versão através de sua estrutura de bloco, permitindo que os usuários acompanhem as mudanças ao longo do tempo.

Configurando o IPFS

Antes de mergulharmos no código, você precisa configurar um nó IPFS. Você pode instalar o IPFS usando os seguintes comandos:

# Instalar o IPFS
npm install -g ipfs

# Inicializar um novo repositório IPFS
ipfs init

# Iniciar o daemon do IPFS
ipfs daemon

Agora que temos um nó IPFS em execução, podemos enviar e recuperar dados.

Adicionando Dados ao IPFS

Para adicionar um arquivo ao IPFS, você pode usar o seguinte comando no seu terminal:

ipfs add <seu-arquivo.ext>

Este comando retornará um CID que você pode usar para acessar este arquivo mais tarde.

Integrando IPFS com um Contrato Inteligente Solidity

Agora, vamos ver como podemos usar o IPFS em um contrato inteligente Solidity. Vamos criar um contrato simples que permite que os usuários façam upload de um documento para o IPFS e armazenem o CID na blockchain Ethereum.

Exemplo de Contrato Inteligente Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract ArmazenamentoDeDocumentos {
    // Estrutura para guardar informações do documento
    struct Documento {
        string cid; // Identificador de conteúdo do arquivo IPFS
        string nome; // Nome do documento
        address proprietario; // Proprietário do documento
    }

    // Mapeamento para armazenar documentos por id
    mapping(uint256 => Documento) public documentos;
    uint256 public quantidadeDocumentos;

    event DocumentoEnviado(uint256 indexed documentoId, string cid, string nome, address proprietario);

    // Função para enviar um documento
    function enviarDocumento(string memory _cid, string memory _nome) public {
        quantidadeDocumentos++;
        documentos[quantidadeDocumentos] = Documento(_cid, _nome, msg.sender);

        emit DocumentoEnviado(quantidadeDocumentos, _cid, _nome, msg.sender);
    }

    // Função para recuperar detalhes do documento
    function obterDocumento(uint256 _documentoId) public view returns (string memory, string memory, address) {
        Documento memory doc = documentos[_documentoId];
        return (doc.cid, doc.nome, doc.proprietario);
    }
}

Explicação

  1. Estrutura Documento: Esta estrutura representa um documento com um Identificador de Conteúdo (CID), seu nome e o endereço do proprietário.
  2. Mapeamento: Usamos um mapeamento para relacionar um ID de documento único com os metadados correspondentes do documento.
  3. Eventos: Quando um documento é enviado, um evento é emitido, facilitando o rastreamento de envios.
  4. Funções:
    • enviarDocumento: Recebe um CID e nome do documento para armazenar o documento na blockchain.
    • obterDocumento: Permite que os usuários recuperem os detalhes do documento com base no ID do documento.

Implantando e Interagindo com o Contrato

Você pode implantar este contrato usando ferramentas como Remix, Truffle ou Hardhat. Uma vez implantado, você pode interagir com ele chamando a função enviarDocumento com o CID correspondente que você obteve do IPFS ao adicionar um arquivo.

Conclusão

Nesta lição, cobrimos o básico do IPFS e como ele funciona como uma solução de armazenamento descentralizada. Também exploramos como integrar o IPFS com contratos inteligentes Solidity para criar um sistema de armazenamento de documentos. Utilizando o IPFS, os desenvolvedores podem aproveitar os benefícios da descentralização, garantindo que a integridade dos dados e a resistência à censura sejam mantidas.

À medida que você continua a desenvolver dApps, considere as vantagens de usar o IPFS para suas necessidades de armazenamento de dados!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!