# 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ática](https://github.com/decentraland/docs/blob/main/contributor/content/practice/README.md) seção.

### Identificadores de arquivos <a href="#identifiers" id="identifiers"></a>

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 [base32](https://en.wikipedia.org/wiki/Base32) codificações do hash SHA-256 do conteúdo do arquivo, usando o [IPFS CID v1](https://docs.ipfs.tech/concepts/content-addressing/) 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.

{% hint style="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.
{% endhint %}

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 [snapshots](https://github.com/decentraland/docs/blob/main/contributor/content/snapshots/README.md), os arquivos armazenados na rede estão associados a uma [entity](https://github.com/decentraland/docs/blob/main/contributor/content/entities/README.md) 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 <a href="#downloading" id="downloading"></a>

O [`/contents/<fileId>`](https://decentraland.github.io/catalyst-api-specs/#tag/Content-Server/operation/getContentFile) endpoint do servidor de conteúdo pode ser usado para baixar qualquer arquivo. Seus identificadores são encontrados no [manifesto](https://github.com/decentraland/docs/blob/main/contributor/content/entities/README.md)da

### 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údo](https://github.com/decentraland/docs/blob/main/creator/README.md) para mais detalhes.
