---
# System prepended metadata

title: KOALA

---


![](https://i.imgur.com/f6YDZTH.png =50x)

# KOALA
Permanently pin your IPFS data with Arweave

![](https://i.imgur.com/OWf4BDT.jpg)



### Introduction
IPFS is widely used by the different blockchain communities to host their data (NFTs, Apps...etc) but it lacks one feature: Permanence. In fact, the data can disappear forever If no one hosts it anymore, Therefore pinning the IPFS contents to keep them available permanently is an absolute necessity, and what better way to do that than to use Arweave. 
### Description
KOALA is a layer two “2” protocol on top of Arweave, its main goal is to pin content from IPFS to Arweave faster, cheaper, and with more features (like pinning folders) than the current mechanism. 
### System Features
* Running KOALA node.
* Having KOALA tokens.
* Stacking KOALA tokens to run a node.
* Pinning data and paying with KOALA tokens.
* Validators earn KOALA tokens for running the node for X amount of time.
* Validators earn KOALA tokens for adding data in IPFS.
* Sync other nodes when a new tx is pinned.
* Slashing a few tokens when validators go offline.
* Validators can withdraw all their tokens after an amount of time.
* Deploying a folder
    * Creating two new tags `IPFS-FOLDER` and `FOLDER-HASH` the first will be name of the folder, and the second is a `hash` to verify every file is here and in case there's a lot of `IPFS-FOLDER` 

### KOALA Node
The node consits of two parts plus an API.
The node should run using `docker` directly.
#### `IPFS` node
There's nothing to say about the `IPFS` instance except it needs to be publicly available of course.
#### NodeJs script
The `NodeJs` script will be reponsible of those aspect:
* Querying every new tx with `IPFS-Add` tag and tags we are going to add to handle `Folders` etc.
    * something similar to what we are doing with communityxyz caching.
* Verifying that the CID sent matches the one calculated for the data.
* Adding the data to `IPFS`.
* Sending and Receiving `Sync` events.
* Synchronizing with other Nodes. 
* Handling request from cli first.
#### Backend (it's not really a part of the node but :shushing_face: )
* Registring Nodes.
    * Having a kind of unique key per node to authenticate it. (maybe using its wallet address is a good idea)
* Handling Nodes Tokens. (Staking, Minting, and Slashing)
    * Using `community-js` looks the best way :raised_hands: 
* Tracking Nodes
    * Number of file pinned.
    * Number of file distributed.
    * Time online/offline.
* Recieving txs from client and Posting them to arweave.net.
### Client
* Having a CLI to Post directly to the node.