The Onchain Spectrum: NFT Storage on Ethereum, Bitcoin, and Solana
IPFS is a peer-to-peer network for sharing data. It's a popular choice for underpinning NFT metadata, and if used properly it offers strong redundancy and availability assurances.
But what happens when it's used improperly? In the worst case scenario, the associated art becomes unavailable, and the NFTs become mere tokens. We've seen this before with platforms like Ascribe, Digital Objects, Editional, and even FTX.
More recently, this week NFT sleuths discovered that nearly 30,000 NFTs from eBay's shuttered KnownOrigins marketplace—including iconic XCOPY works—rely on an outdated Infura link in their IPFS implementations, jeopardizing the availability of their art going forward.
That said, there is no right or wrong storage approach per se—it's more about determining sufficiency on a case-by-case basis. Yet as an NFT adventurer yourself, it's incredibly important to understand the basics of storage so you can navigate the nuances here and make informed collecting decisions.
Toward that end, let's walk through a quick refresher of the onchain spectrum as it stands today on Ethereum, Bitcoin, and Solana. Some of the subcategory names below are my own, and I may have missed some things, but this primer can be your cheatsheet to start from.
Ethereum's NFT Spectrum
- Offchain — Beyond the token itself, the art and metadata live in an external solution like a private server or IPFS. Here IPFS is most preferable because with some work the data can be pinned indefinitely or copied extensively for redundancy. In contrast, private servers have proven to be a ticking time bomb when it comes to availability.
- Subcategories: Semi-Offchain (Some metadata onchain, some offchain), Chain-to-Chain (Metadata stored on an external Layer 1, like Arweave)
- Onchain State — The tokens and data live entirely within an Ethereum smart contract. It’s relatively expensive, but this approach allows for high durability guarantees, programmable expressiveness, runtime art (i.e. dynamic + fully onchain art like Terraforms), etc.
- Subcategories: Hybrid Onchain (When an offchain collection is retroactively brought onchain in a separate smart contract), Hashed Onchain (Storing composite images with a hash in a smart contract, e.g. CryptoPunks), Layer 2 State (The tokens and data live in an L2 smart contract without external dependencies)
- Onchain Calldata — This approach encodes media directly within Ethereum transaction calldata. The technique is notably inexpensive, but it lacks programmable expressiveness, and media stored like this might get pruned in Ethereum’s Purge phase.
- Subcategories: Optional Calldata (e.g. 0xmons, where holders can choose calldata or full contract storage), L2 Calldata (Like on L1, this approach entails storing media in an L2’s transaction calldata)
- Onchain Blobs — NFTs stored here exist in a new primitive, blobspace. This approach is really inexpensive, but it lacks expressiveness, and full storage is only for 18 days before archiving kicks in.
- Witnessed Data — A hybrid offchain-onchain system a la Witness Protocol that hashes unrevealed data in checkpoints to Ethereum, Arbitrum, etc., e.g. a game that doesn’t need to immediately publish all its asset data onchain.
Bitcoin's NFT Spectrum
- Counterparty — The metaprotocol renowned for being home to the Rare Pepes, it uses OP_RETURN transactions to embed token data and other information into Bitcoin transactions.
- Inscriptions — Introduced by the Ordinals protocol, inscriptions use the witness data section of Bitcoin transactions (expanded by the Taproot upgrade) to store media data. They offer strong permanence guarantees and low storage costs, but they lack the native expressiveness of smart contracts (though recursive inscriptions offer dynamism possibilities).
- Stamps — An approach that involves making NFTs on Bitcoin by encoding metadata in multi-signature unspent transaction outputs (UTXOs). This method makes Stamps unpruneable and essentially permanent, though they’re more expensive to create than inscriptions.
- Bitcoin L2s — Admittedly there isn’t much live here yet, but with OP_CAT on the horizon and projects like StarkWare eyeing Bitcoin scaling solutions, this should prove increasingly fertile ground for Bitcoin NFTs going forward.
Solana's NFT Spectrum
- Offchain — The “Metadata Account” segment of Solana's popular Progammable NFT (pNFT) standard has a URI section for supporting external storage via private server, IPFS, etc. Some Solana projects rely on Arweave instead, so the Chain-to-Chain approach is also seen here.
- Onchain State — The tokens and data live entirely within Solana accounts; for instance, one technique here is storing images as SVG strings inside Solana addresses, making them readily retrievable.
- Subcategories: Compressed NFTs (Also known as cNFTs, these NFTs make use of the Merkle Trees data structure to efficiently store condensed versions of NFT data onchain), ZK Compression (A new primitive introduced in June 2024 that allows state to be stored in compressed accounts)
- Onchain Calldata — When assets are stored at the level of a Solana transaction, e.g. Solana Inscriptions. We’ve also seen hybrid approaches here, like using calldata storage in combination with external solutions like Arweave.