Skip to main content

Storage

Validators that opt into the storage role serve user files. Storage proofs are aggregated by the PoU module and rewarded each block.

File manifests

A manifest is the on-chain record of a stored file:

{
"cid": "blake3:...",
"size": 1048576,
"shards": 16,
"replicas":3,
"ttl_blocks": 432000,
"owner": "frx1...",
"fee_afrx":"1000000000"
}
PathReturns
/file/manifestsevery active manifest
/pou/recordsper-validator served-bytes & success-rate

How PoU works

Each block, the chain picks a random shard from a random manifest and requests a Merkle-proof from the assigned validators. Proofs land in the gossip layer; the keeper aggregates and pays out from the reward pool.

See Modules · Omnia for the integration with consensus.

Chunk assignment

When a file is uploaded, the chain automatically assigns each chunk to CHUNK_REPLICATION_FACTOR = 3 storage nodes (least-loaded-first).

// GET /file/assignment/:file_id/:chunk_index
{
"file_id": "00000000…",
"chunk_index": 0,
"assigned_nodes": ["frx1aaa…", "frx1bbb…", "frx1ccc…"],
"assigned_at_height": 145230
}
curl https://v2.rpc.fenryx.io/file/assignments/<file_id>

The chain does not force physical data transfer — off-chain daemons on each assigned node download the chunk from the uploader.

PathReturns
/file/assignment/:file_id/:chunk_indexAssignment for one chunk
/file/assignments/:file_idAll chunk assignments for a file