# Storage Type

The concept of Storage Type has been introduced to make sure our protocol does **not rely only on one storage** but is flexible to accept URLs from different storages.

Each storage type is defined by:

* **ID** (*uint16*) - a number representing the storage type in our memory
* **Name** - an identifier
* **ProvidedUrl** (*string*) - the structure of the url that needs to be passed

Each StorageType must be compliant with `ItProofHashRegistryStorageTypeInterface.sol`. When retrieving the URL, you can specify a `_version` parameter (*uint256*), that tells the contract how you want back the URL. Typically

* **0**: the version sent with ProvidedUrl
* **1**: the URL ready to be accessed

## Currently accepted storage types

### Arweave V1

Storage that uses Arweave chain (see <https://www.arweave.org/>). Each file is identified by a 43 characters string, that is also the identification of the transaction on their chain.

**ID:** 0\
**ProvidedUrl**: 43 characters identifying the URL

Returned URLs based on `_version` parameter:

* **0** - the 43 chars passed as ProvidedUrl
* **1** - the full URL in the form of `https://arweave.net/{ProvidedUrl}`
