The art cannot die.
Every artwork on Perpetual is provably permanent, and that permanence does not depend on Perpetual. A mandatory on-chain STATE shard (SSTORE2) anchors each token to Ethereum. Anyone can reproduce the verification, and the entire index can be rebuilt from public data alone. This page explains, precisely, how.
We claim exactly one thing, and we claim it precisely: the artwork survives. The orderbook and index are run conventionally, centralized for speed, and their failure can never touch your art or your ownership. We do not claim a decentralization we have not built.
Most NFT art is one missed invoice from gone.
The token lives on Ethereum forever. The file it points to usually does not. When a pin lapses or a server goes dark, the chain still records your ownership of something that no longer resolves to anything.
An IPFS pin stops being paid for.
The CID is valid; no node serves it. The image is gone.
The hosting domain in the tokenURI expires.
The metadata 404s. The token points to nothing.
The marketplace that pinned the media shuts down.
Everything they hosted disappears with them.
Most NFTs are a pointer to a file held somewhere fragile. The token is permanent; the art it references is not. When the pin lapses or the server dies, the chain still says you own it, but there is nothing left to see.
Perpetual inverts the dependency. The artwork itself is written into Ethereum as a mandatory onchain proof shard. The other backends add resolution and redundancy. None of them is what keeps the art alive, so none of them can take it down.
tokenURI → fragile host · Perpetual → onchain content
Five parallel shards. One consensus-guaranteed backstop.
Each token carries five parallel, independently-verifiable shards across independent storage backends. Four add resolution and redundancy. Shard 0 — the STATE shard, stored on-chain via SSTORE2 — is the consensus-guaranteed permanence backstop, and the only one permanence actually requires.
datachain
permaweb
content-addressed
LogLedger
Consensus-guaranteed backstop
Survives as long as Ethereum
Five parallel shards, layered in depth. One consensus-guaranteed STATE backstop.
STATESSTORE2
Permanence guarantor
LOGLogLedger
IPFScontent-addressed
Arweavepermaweb
Irysdatachain
Five parallel shards · one consensus-guaranteed STATE backstop
Low-res canonical image written on-chain as contract bytecode via SSTORE2. Content hash computed on-chain. Consensus-guaranteed — lives in contract state, cannot be pruned.
shard0Configured(tokenId) · mandatory · consensus-guaranteed
Full-resolution primary copy stored in event logs via a standalone LogLedger contract (~8 gas/byte). Merkle root + size live in contract state; root-verifiable by anyone.
Merkle-verified · retention-monitored (EIP-4444) · not consensus-guaranteed
Redundant off-chain copy, pinned via Pinata, addressed by the hash of its own content.
CID = hash(content) · auto-pinned · backstopped by STATE
Pay-once permanent storage on an independent network.
confirmed permanent · endowment-funded · independent of Perpetual
A second permanent off-chain network, for redundant independence.
confirmed · separate operator · separate failure domain
Because the STATE shard (SSTORE2) is consensus-guaranteed and lives in contract state, it is the permanence backstop on its own. The LOG shard and off-chain copies (IPFS, Arweave, Irys) are performance and redundancy optimizations, not permanence obligations. If Perpetual stops paying for pinning, permanence is unaffected. This is the point most architectures miss: permanence is decoupled from operator solvency. The art does not depend on us staying in business.
For code-based art, storing the file was never the hard part.
An interactive piece that loads a library from a CDN or a font from a third party stores fine and renders blank the day that link rots. Permanence for HTML art is about eliminating every off-chain dependency. Perpetual does this in three tiers.
Inlined & self-contained
Drop a .zip of your piece — index.html plus its scripts, styles, fonts, and images. At upload we inline every local asset into one dependency-free HTML file, so it renders off any single shard with zero external calls. Nothing to rot.
Arweave path manifest
For pieces too large to inline, the whole folder is stored as an Arweave (and Irys) path manifest, so relative links resolve permanently on the gateway — pay-once, endowment-backed permanence for multi-file works, with the structure intact.
Dependencies on-chain
Reference a library by name — <script data-onchain="three.js"> — and it is read from the ScriptStore contract (SSTORE2, content-hash sealed) and inlined at render. The artwork renders even if every gateway and CDN on earth disappears. Nothing off-chain remains.
Whichever tier a work uses, its bytes are hashed and the hash is written on-chain at mint — so any copy, from any source, is verifiable against the record.
Inlining every dependency removes the rot we can remove. What no contract can promise is the runtime: a browser, a JavaScript engine, WebGL and GPU APIs are not themselves permanent. The bytes of an interactive piece are preserved and self-contained; whether they still render faithfully in fifty years depends on that runtime surviving. A still image, by contrast, decodes with universal codecs and needs no runtime at all.
So we grade permanence honestly, not as a single badge. Every token page shows a durability profile across three axes — storage (is it stored on-chain and redundantly?), rendering (self-contained image, codec-dependent video, or runtime-dependent code?), and chain (on-chain durability inherits the chain's data-availability class) — and names the single limiting factor plainly. Permanence is a spectrum; we tell you where each work sits on it.
Do not trust us. Reproduce it.
A read-only service continuously resolves every shard, hashes the content it gets back, and compares that hash against the record written onchain at mint. It reads only public data, so anyone can run the exact same checks and arrive at the exact same result. Verifiability, not our word.
Resolve
Fetch the bytes from every shard.
GET onchain · ipfs · arweave · irys
Hash
Hash the content that came back.
keccak256(content) → 0x…
Compare
Check it against the onchain record.
getMintData(tokenId).metadataHash
Status
Report a verifiable result.
match → permanence integrity 100%
read-only · independently reproducible · no proprietary inputs
“Perpetual can disappear entirely and every NFT remains fully intact: owned by the correct wallet, resolving to its artwork via the onchain proof shard, with complete provenance. A third party can re-index the contracts and stand up a replacement marketplace with zero cooperation from us.”
This is not a feature of Perpetual. It is the property Perpetual exists to preserve. Every decision on this page is tested against the sentence above. If a choice could break it, the choice does not ship.
stays onchain, always correct
resolves via Shard 0, forever
complete, public, rebuildable
The index is public infrastructure, not a moat.
The indexer reads only public onchain and storage data, and its schema is published in full. Anyone can run their own against the same sources. That openness is precisely what makes the invariant enforceable rather than merely promised.
# perpetual-indexer / schema.v1
# Reads ONLY public onchain + public storage data.
# No proprietary inputs. Anyone may run this to reconstruct the index.
source contracts {
forever_library native # marketplace-deployed instances
forever_library sovereign # artist-owned instances (federated)
settlement seaport # order fills, cancellations
}
record mint {
contract address
token_id uint256
creator address
block_number uint64
timestamp uint64 # block time
title string
media_type enum
royalty_bps uint16
metadata_hash bytes32 # from getMintData(tokenId)
}
record shard_status {
token_id uint256
index uint8 # 0 = STATE (SSTORE2, mandatory) · 1 = LOG (LogLedger)
backend enum # onchain | log | ipfs | arweave | irys | cdn
resolves bool
hash_matches bool # hash(content) == mint.metadata_hash
locked bool # isLocked(tokenId)
last_checked timestamp
}
record settlement {
order_hash bytes32
token_id uint256
from address
to address
price_wei uint256
royalty_paid uint256 # enforced at settlement (ERC-2981)
block_number uint64
}
derive {
ownership <- transfers ∪ settlements # current holder
provenance <- mint ∪ transfers ∪ sales # full history
permanence_status <- shard_status # per-token integrity
}Because every input is public, a third party can stand up an identical index with zero cooperation from Perpetual. An open schema is what turns the invariant from a promise into something you can verify for yourself.
Enforced at settlement. Not optional.
Royalties are checked at the protocol level, via ERC-2981, against the token's onchain configuration. A sale that does not honor the artist's royalty is rejected by the settlement contract itself. There is no marketplace toggle that turns this off.
Not a UI suggestion, not an honor system. The contract enforces it on every fill.
dishonored royalty → settlement rejected
0%
Permanence integrity
0%
Onchain-proof coverage
0
Verified shards
0
Works archived
The art survives, even if Perpetual does not.
Browse work engineered to outlast its marketplace, or mint your own onto a record that cannot be revoked.