File System

Por trás das diferentes APIs de conteúdo no protocolo Decentraland existe uma implementação de um sistema de arquivos distribuído. Cada servidor de conteúdo mantém uma cópia de todo o armazenamento e sincroniza as atualizações que recebe com outras instâncias.

Arquivos enviados para o sistema são imutáveis. Uma vez implantados, nem seu identificador nem seu conteúdo mudam. Eles só podem ser atualizados no sentido de que uma nova versão é carregada e as aplicações optam por usá‑la, enquanto a antiga pode ser descartada.

Você pode experimentar com arquivos na práticaarrow-up-right seção.

Identificadores de arquivos

O sistema de arquivos do Decentraland é organizado em um índice plano (ou seja, não há uma hierarquia natural de diretórios), onde cada arquivo é identificado por uma string única.

As strings identificadoras são prefixadas base32arrow-up-right codificações do hash SHA-256 do conteúdo do arquivo, usando o IPFS CID v1arrow-up-right algoritmo. Eles se parecem com isto:

bafybeicgclohdfaccu2sqqkzrzuenjxzcry3m5vcb4mpxgucjl3oheq5tq

O prefixo nos primeiros bytes indica a codificação, a versão e o tipo de hash do próprio identificador.

circle-info

Por motivos históricos, algumas APIs chamam o identificador de arquivo de hash em vez de id, mas referem‑se à mesma coisa. Você também pode encontrar identificadores legados em conteúdo antigo que parecem um pouco diferentes.

Na prática, esses detalhes não são necessários para descobrir e baixar conteúdo. A maioria dos clientes do protocolo pode tratar identificadores como strings opacas sem perder funcionalidades.

Observe que identificadores modernos CIDv1 são compatíveis com IPFS, produzindo o mesmo CID para o mesmo arquivo, então o IPFS pode ser usado como provedor de arquivos.

Propriedade e Persistência

Exceto por snapshotsarrow-up-right, os arquivos armazenados na rede estão associados a uma entityarrow-up-right de propriedade de uma conta Ethereum. O proprietário é o único autorizado a atualizar a entity e os arquivos relacionados.

Os servidores de conteúdo são obrigados pelo protocolo a sempre armazenar a versão mais recente de uma entity e seus arquivos, mas podem escolher se retêm versões antigas de acordo com sua configuração individual.

Baixando arquivos

O /contents/<fileId>arrow-up-right endpoint do servidor de conteúdo pode ser usado para baixar qualquer arquivo. Seus identificadores são encontrados no manifestoarrow-up-rightda

Enviando arquivos

Os arquivos não são enviados de forma independente. Em vez disso, eles são empacotados dentro de entities e enviados durante a implantação da entity para o servidor de conteúdo.

Veja a documentação para criadores de conteúdoarrow-up-right para mais detalhes.

Atualizado