jax
a permissionlessly incentivized file storage layer for Ethereum
Created on 28th February 2025
•
jax
a permissionlessly incentivized file storage layer for Ethereum
The problem jax solves
Decentralized file storage incentives are broken - you either depend on centralized pinning services (IPFS), questionable tokenomics (Arweave), complex fixed-term contracts (Filecoin), or pay a premium for short-term availability (Ethereum, EigenDA, Celestia).
jax allows anyone to permissionlessly build new incentive models for file storage by writing smart contracts - no expertise in distributed systems or file storage necessary!. Simply deposit tokens into a smart contract and jax will distribute those tokens to everyone who makes a given file available for download. Opening up the design space for storage incentives allows applications to implement the incentivization models that best fit their use case without sacrificing decentralization or data availability.
User Interaction and Data Flow
- Anyone can upload files to the network by interacting with a JAX node
- Files are given a content identifier and made available for peers in the network to access
- Anyone can deploy a rewards pool for a given file, which will signal to the network that there is incentive for making the file available
- Nodes in the network can opt-in to receiving rewards by calling into the rewards pool and publicizing the node ID that is making the file available
- Each node in the network fetches storage proofs from other nodes in the network that claim to have files
- Upon checking the storage proof, the node will update it's local eigentrust score for the node it fetched from, increasing its score if the proof is valid and decreasing it if the proof is invalid
- Anyone can call into the rewards pool to distribute rewards, which kicks off a request to the AVS to attest to the global eigentrust scores for all nodes claiming to store the file
- Once the AVS operators come to consensus and report the global eigentrust scores for each node onchain, rewards in the pool are distributed to the nodes in the network
- Deposits into each rewards pool are permissionless, allowing anyone to customize the incentive model for storing that file!
The project architecture and development process
jax consists of three main components:
- a set of smart contracts that coordinate a set of AVS operator and encode the logic for permissionlessly distributing token rewards to file providers
- an Eigenlayer AVS operator node implementation that communicates with file provider nodes to calculate the global eigentrust scores. these eigen trust scores reflect peers behavior in making a given hash available to the network
- a file provider node implementation that uses iroh (a peer-to-peer networking lib) to make files and succinct file proofs available to peers and calculate local eigentrust scores for peers
All files in jax are hashed using Blake3 to generate a content identifier. The merkelized structure of Blake3 hashes allows peers to provide succinct storage proofs for random 1kb chunks regardless of the size of the file.
jax implements Eigentrust, an algorithm for calculating reputation in a peer-to-peer network. The global trust score for a given node can be calculated by any other node in the network by recursively checking the local trust scores reported by trusted peers for that node.
This gives jax a clear model for AVS consensus - all AVS operators running live file provider nodes and not manipulating results will calculate the same global trust value for a peer independently. Operators that sign over trust scores that do not match this value can be slashed.
jax uses Iroh to manage peer-to-peer connections and share blobs. Iroh uses Ed25519 keys to identify and locate nodes in the network. This allows nodes signatures to be verified onchain to authenticate the ethereum address which should receive its rewards, while also enabling peers to locate it and request file proofs.
Product Integrations
jax is structured as an EigenLayer AVS. It implements an AVS operator node that communicates with file provider nodes as well as a set of smart contracts that coordinate the AVS operator nodes.
Key differentiators and uniqueness of the project
- Most decentralized storage providers tightly couple their storage mechanism with their incentive mechanisms. jax's key innovation is separating these concerns, allowing anyone who can transfer tokens or write smart contracts to develop new incentive mechanisms for file storage without needing to bootstrap a network of storage providers or implement any storage/peering logic.
- We don't require mining as a means of securing the state of the network, such as Filecoin and Arweave do
- We don't aim to solve persistence as Arweave does -- our goal is to make content available and incentivize untrusted peers to collaborate in this
- We don't rely on sealed data like Filecoin does -- all data is and should be immediately available to peers over Iroh
- We use succinct hot storage proofs for coordinating all of this without the need of sealing or unsealing
Trade-offs and shortcuts while building
- We forked the incredible squaring repo and didn't change any of the contract / service names despite modifying the logic (since there were so many hardcoded references to infinite squaring)
- The contracts exceeded the spurious dragon size limit, so we deployed the demo locally with a custom contract size limit instead of deploying to eigenlayer's testnet
- Only ETH is supported as a reward token for file providers. We could extend the contracts to allow for pooling of arbitrary ERC20s and on-chain assets.
- AVS operator rewards / slashing are not yet implemented. Operators should be disincentivized to provide incorrect eigen trust values.
- We only had time to implement local eigen trust, we would require a DHT + protocol to bootstrap on in order to calculate full eigen trust.
- We coordinated content discovery through smart contracts. Ideally this should be done through a DHT, with a federated network of tracker nodes discovering and providing the locations for content by advertising signed <node, hash> pairs. We are discussing this with the Iroh team.
- We only allow staked AVS operators to reap rewards. We ideally would've liked to decouple probing peer behavior from storage and allow unstaked peers to provide storage the network and passively earn rewards. Think "passively earning income for providing your excess drive space on your laptop or mobile device."
- We implemented a very simple strategy for participating in pools -- enter every pool you observe as a storage provider. Ideally we would've liked to implement more sophisticated strategies based on the peer size of a storage pool, available bounty, or type of content being incentivized.
- Our reward distribution is very simple -- claiming rewards distributes the entire value of the pool to storage providers. This should be implemented on a customizable curve.
Tracks Applied (4)
Best EigenLayer AVS
EigenLayer
Best Eigen App
EigenLayer
Build a Decentralized Content Management System Using Web3:// and EthStorage
EthStorage