WEB3DEV

Cover image for Tutorial Web 3 – Como carregar e enviar arquivos na rede IPFS usando NodeJs
Fatima Lima
Fatima Lima

Posted on

Tutorial Web 3 – Como carregar e enviar arquivos na rede IPFS usando NodeJs

Tutorial Web 3 – Como carregar e enviar arquivos na rede IPFS usando NodeJs

Image description

A Web3 é um território fascinante e desconhecido. Recentemente, decidi aprender algumas coisas sobre as tecnologias Web3. Embora eu tivesse algumas idéias básicas sobre a blockchain e NFTs, nunca tentei escrever um programa para a Web3.

Então decidi aprender sobre a tecnologia Web3 e escrever um programa simples que pudesse fazer upload de arquivos para a rede IPFS.

O que é o IPFS?

Antes de começar, se você não souber o que é IPFS, IPFS significa InterPlanetary File System. É um protocolo para salvar arquivos em uma rede descentralizada de computadores. Se você fizer o upload de um arquivo para o Google Drive, você faz o upload de seu arquivo para um servidor pertencente ao Google. O servidor pertence ao Google e por isso é um armazenamento centralizado..

No entanto, ao contrário do Google Drive, o protocolo IPFS armazena arquivos em computadores de todo o mundo. Não há um único proprietário para a rede ou para os computadores que armazenam os dados. Portanto, ele é descentralizado. É um pouco semelhante ao protocolo BitTorrent usado para compartilhamento de arquivos.

No entanto, ao contrário do Google Drive, os dados que você carrega no IPFS não são privados. Portanto, você não deve carregar ou armazenar dados sensíveis na rede IPFS. Além disso, uma vez que você carrega dados na rede IPFS, eles permanecem para sempre na rede IPFS, e você não pode editar ou apagar seus dados. Se você quiser editar, você precisa fazer novamente o upload de uma cópia modificada e utilizá-la em seu lugar.

Devido a esta natureza, a rede IPFS é usada para salvar imagens NFT também.

Agora que você tem uma ideia básica sobre o protocolo IPFS, vamos tentar escrever um programa usando NodeJs para carregar um arquivo na rede IPFS. Você precisará ter algum conhecimento básico em JavaScript para entender o código. E você vai precisar de um editor de texto como o VsCode.

Criar um novo projeto NodeJs

Crie um novo projeto NodeJs executando,

npm init -y
Enter fullscreen mode Exit fullscreen mode

Você terá um novo projeto em seu computador local.

Instale as dependências

npm install nft.storage node-fetch notenv
Enter fullscreen mode Exit fullscreen mode

Obter uma chave API NFT.storage

NFT.storage é um serviço (gateway IPFS) que facilita o carregamento e o envio de arquivos pela rede IPFS por meio de sua API, pois ela fará o trabalho pesado.

Você também pode usar a biblioteca ipfs-js para carregar e enviar arquivos por meio do protocolo IPFS.

Você pode facilmente se inscrever no nft.storage usando sua conta GitHub e obter uma chave API.

Salve a chave API que você obteve do nft.storage em um arquivo .env.

Carregando seu arquivo no IPFS

Armazenei um arquivo png simples como test.png na pasta do projeto que enviaremos para a rede IPFS.

Estamos usando o seguinte código para carregar o arquivo na rede IPFS. É simples e autoexplicativo.

import { NFTStorage, File } from "nft.storage";
import fs from "fs";
import dotenv from "dotenv";
import fetch from "node-fetch";

dotenv.config();

const { NFT_STORE_API_KEY } = process.env;
const storeAsset = async () => {
  const client = new NFTStorage({ token: NFT_STORE_API_KEY });
  const metaData = await client.store({
    name: "Example NFT",
    description: "Testing IPFS network",
    image: new File([await fs.promises.readFile("test.png")], "test.png", {
      type: "image/png",
    }),
  });

  return metaData.url;
};
Enter fullscreen mode Exit fullscreen mode

Além da imagem, também podemos carregar alguns metadados em formato JSON associados ao arquivo que carregamos para a rede IPFS. No exemplo, estamos adicionando um nome e uma descrição como metadados. O link para o arquivo da imagem estará na propriedade da imagem dos metadados.

A função retornará o url ipfs do seu arquivo metadados.json carregado. O arquivo metadata.json contém todas as informações sobre o arquivo que você acabou de carregar na rede IPFS (nome, descrição, imagem, etc.).

A propriedade da imagem da json terá o link para o arquivo de imagem que você acabou de carregar.

ipfs://bafyreice4ib5is4zjv3kugad5rzlvgsojuq767qbys6ppwy5itys3gi2ze/metadata.json
Enter fullscreen mode Exit fullscreen mode

Ótimo, você carregou com sucesso um arquivo para a rede IPFS. Em breve ele estará no armazenamento de outra pessoa para sempre.

Abrindo um arquivo IPFS a partir do navegador

Ao contrário de um URL comum, você não pode abrir diretamente um url ipfs a partir de seu navegador. Você precisará usar um gateway, tal como o gateway IPFS da CloudFlare ou o ipfs.io.

Você precisa substituir o protocolo de seu link IPFS (ipfs://) por https://ips.io ou https://clourflare-ipfs.com e você poderá ler o conteúdo do arquivo de metadados.

O seguinte código substituirá o protocolo ipfs:// de seu url IPFS por um que possa ser acessado através do gateway IPFS da CloudFlare.

const ipfsToHttp = (url) => {
  return url.replace("ipfs://", "https://cloudflare-ipfs.com/ipfs/");
};
Enter fullscreen mode Exit fullscreen mode

Se você ler o arquivo metadados.json, a propriedade da imagem do arquivo JSON conterá o link para o arquivo de imagem que você acabou de carregar.

Podemos usar o fetch para recuperar o arquivo metadata.json.

const getMetaData = async (url) => {
  const metaData = fetch(url)
    .then((response) => response.json())
    .then((data) => {
      return data;
    });

  return metaData;
};
Enter fullscreen mode Exit fullscreen mode

A saída seria assim

{
    "name":"Example NFT",
    "description":"Testing storing",
    "image":"ipfs://bafybeid5klxzkhkc2qe36s2tqu5anysou3y5fpet2ovfihtr2l76hrnybu/test.jpeg"
}
Enter fullscreen mode Exit fullscreen mode

Agora tudo o que você precisa fazer é converter o link IPFS da propriedade de imagem para um link de protocolo http por meio do gateway IPFS da CloudFlare e você poderá acessar seu arquivo de imagem que acabou de carregar na rede IPFS.

https://cloudflare-ipfs.com/ipfs/bafybeid5klxzkhkc2qe36s2tqu5anysou3y5fpet2ovfihtr2l76hrnybu/test.jpeg
Enter fullscreen mode Exit fullscreen mode

Você pode encontrar o código completo no repositório GitHub – https://github.com/rukshn/web3-lessons

Esse artigo foi escrito por RUKSHAN e traduzido por Fátima Lima. Seu original pode ser lido aqui.

Top comments (0)