Storage you can challenge, not just trust
SUM Chain holds files under Proof-of-Retrievability: archive nodes are assigned chunks, must answer periodic challenges with Merkle proofs, and are rewarded or slashed accordingly. SNIP V2 is live on mainnet.
From upload to on-chain proof
- 1
Register & fund RegisterFilePendingV2
A file is registered and a fee deposit is locked into its fee pool. It enters the Pending lifecycle.
- 2
Assign chunks merkle_root
Each chunk is assigned to archive nodes by deterministic rendezvous hashing over its merkle_root, three replicas by default, snapshot-stable.
- 3
Accept assignment AcceptAssignmentV2
Assigned archives attest possession before the file activates, recorded as per-file possession bitmaps.
- 4
Challenge PoR
The chain issues deterministic retrievability challenges over (file, chunk, node) at a fixed interval.
- 5
Prove or be slashed SubmitStorageProof
A valid Merkle proof draws a reward from the fee pool; an expired challenge slashes the node’s stake.
storage.params
- replication_factor
- 3
- challenge_interval
- 100 blocks
- assignment
- rendezvous hash (BLAKE3)
- max_chunks / file
- 1,048,576
- activation_grace
- 50 blocks
Reassignment active on mainnet (activated at height 8,900,000)
Deployed in runtime genesis, activates at height 9,200,000
Two further PoR gates are already in runtime genesis and activate together at height 9,200,000, with no redeploy: assignment targeting (por_assignment_targeting_enabled_from_height) and the assignment-aware bounded challenge scheduler (assignment_aware_por_scheduler_enabled_from_height).
chain_getChainParams does not expose every one of these gates, so this status uses the operator-verified runtime-genesis height and flips to active from the live block height.
Pending → Active → Abandoned
Pending
Registered and funded; chunks being assigned and accepted.
Active
Assignments accepted; subject to retrievability challenges.
Abandoned
Retired after a grace period, with the remaining deposit refunded.
The chain enforces access, not encryption
Private files register an X25519 encryption-key entry per account and store per-recipient encrypted key bundles plus access metadata on-chain. The chain enforces these access-list and key-bundle rules, it does not encrypt the raw file bytes itself; that happens client-side before upload.
private_file.rules
- visibility
- public | private
- key_registry
- X25519 per account
- access_list
- on-chain, byte-capped
- key_bundles
- ~80 B per recipient
- raw_bytes
- never chain-encrypted
SNIP, the storage product surface