smart contract development

Smart Contract Development

We understand the architectures that safely perform and produce the results you need…

DeFi Protocol development

DeFi Protocols

We build DeFi protocols that enable the exchange of products and services…

cross-chain bridge development

Cross-Chain Bridges

Extend your app and enable token transfers, smart contracts, data exchange, and more…

NFT platform development

NFT Platforms

We build platforms that enable the creation, buying, and selling of non-fungible tokens (NFTs)…


Discussion – 


Discussion – 


Did You Get NFT Storage Right Or Are Your Users Buying Only Metadata?

Think Your NFT Digital Art Will Remain Accessible?  Maybe Not…

When creating an NFT digital graphic/art collection for minting, one of the items of consideration is “where will your NFT images be stored?”  Whether or not you’re using a lazy minting process, as we are with our upcoming Shardeez launch (see our Anatomy of an NFT Launch, Part 1 post for more info) — where and how you store your NFT’s digital files becomes something you need to understand how to navigate, or risk selling nothing but metadata to your purchasers.

As Blockchain developers, we’ve learned a LOT as it comes to creating NFT marketplaces, and particularly a lazy minting capability – which allows for NFTs to be minted as they are sold, and to sell them in batches – so as a collection first hits the market, buyers can purchase 1, 5, 10, or whatever number of the collection they want to purchase.  They don’t get to select the EXACT NFT image(s) they’ll receive – as it’s more like a gumball machine – you might get a red, blue, yellow, or green gumball – you take your chances when you put in your coins.  Same with the lazy minting process!

Once purchased, the buyers can keep the ones they want, and list the remaining ones on an NFT marketplace within the blockchain where they were purchased.  In this way, they can make money from having purchased the NFT as the “original” purchaser, and then sell the ones they don’t want to hold onto at (hopefully) a higher price on a secondary marketplace.


Understanding the NFT Storage Realities

As we dove into assembling this process, we started to examine NFT storage mechanisms – to understand what might be the best way to go.  And as we asked more questions, the realities started to reveal themselves.  What we cover in this post can be utilized beyond NFT storage to other apps that need to think through blockchain decentralized storage possibilities – even though our focus is NFT digital file storage.

I’ll outline the storage options below – because if you’re building an NFT collection to bring to market, you’ll want to understand the realities about storage – so you’re sure to select the right storage mechanism for your collection.

First let’s walk through the 3-Step System for a lazy mint NFT system:

1.  Webpage that offers your NFT collection, with a way for the user to connect their wallet, so that they may indicate the quantity they want to purchase, and consummate the purchase.

2. The smart contract then will check the funds in the wallet, and the quantity being purchased, and then randomly select the images for delivery and “mint” them as NFTs (placing the metadata on the blockchain along with a pointer to the smart contract and purchaser’s wallet address for each NFT minted).

3. Confirmation that lets the buyer know the process has completed, and the NFTs should be visible in their wallet.  Their crypto wallet will display the digital file associated with the content that was purchased.


NFT Metadata

The Metadata for the NFT contains the link to the digital file that is the graphic/art that corresponds to the metadata.  Where it is stored is important because over time, it needs to remain available and accessible, because blockchain data is immutable – CANNOT be changed – so that link to the file and the file’s ability to remain available through that reference is, well, HUGE.

Make sense?

Assembling your NFT lazy minting system might seem relatively straight forward, but if you don’t understand and set up the storage in a sufficient way, your purchasers might only end up with having purchased metadata rather than the graphic/art asset they thought they were purchasing.


What Are Different NFT Storage Possibilities?


IPFS – the underlying storage mechanism

IPFS stands for “Interplanetary File System” and according to its website, is a peer-to-peer file storage network.  Content is accessible through peers located anywhere in the world, that might relay information, store it, or do both. IPFS knows how to find what you ask for using its content address (CID) rather than its location.

Sounds pretty cool, right?!  But let’s look a little deeper at how files are stored in the network.

At the heart of IPFS is a Content ID, which is a hash of the file being stored.  IPFS’ goal is to identify the content, rather than the location.  So, your NFT metadata would store the CID to the digital asset, not a URL – and then IPFS, uses a Distributed Hash Table (DHT) to locate the file wherever it may exist within the peer-to-peer network.

The devil is always in the detail for how exactly all of that works – and if you want to dig into the specs, you can find them here. 

Theory and Reality Don’t Match Up

In theory, the file should be stored across the peer-to-peer network, right?  But it is not.  Your best option is to run your own node, and store your files in your local node – but there’s no decentralization in that approach.  So what are the options?

Why would running a local node guarantee your files remain available?  Well, because you are in control of that node, and would ensure that the files are there and available.  IPFS nodes are not required to store every file.  That would/could take up a HUGE amount of storage space.  So nodes only want to store those files that are in use, being accessed on a regular basis.  Make sense?  

Pinning is Important

Enter the concept of “Pinning” – which does EXACTLY what you think it would – pins the files to an IPFS node – meaning that they’ll be available on that node over time – as long as they continue to be “pinned”.  So how does one achieve pinning?  That is where a service outside of IPFS comes in – and there are a few choices for this:



Pinata is a commercial, centralized SaaS business, where you set up an account, and can upload your files/directories, etc. and Pinata will ensure that your files are “pinned” across IPFS nodes – and they run multiple IPFS nodes.  Not exactly decentralized, but they’re stored (or can be) redundantly, so if any Pinata nodes go down, your files will be on another node – each of which are “pinning” your files to it. You pay for this service.

The downside is once your NFTs are sold, without some mechanism to “transfer” the pinning of that graphic/file, you need to keep that Pinata account, or risk having your NFT collection no longer available on IPFS.  And once your NFT collection is sold, you want the new owners to start paying to have their NFT images pinned.  So the minting process would need to allow for this to happen as part of the purchase (i’ll call this shipping and delivery of the asset), just like in eCommerce when goods are purchased today.



NFT.Storage is a free service (for uploads up to 31GB in size) that works with IPFS to provide “pinning” services for keeping the files that are uploaded available.  NFT.Storage is working with IPFS and any IPFS compatible file storage system, like ARWeave or Storj, so that files can be stored redundantly.

Per its own site, NFT.Storage stores many copies of uploaded data on the public IPFS network in two primary ways: in dedicated IPFS servers managed by NFT.Storage, and decentralized on Filecoin.”  

NFT.Storage will pin on it’s IPFS network, and they backup to Filecoin as well (since it’s free, I think they must be running Filecoin nodes (see below) and that makes it pay for itself potentially). They utilize Filecoin as a backup, so if NFT.Storage’s servers are taken down, the files will continue to be available via Filecoin (which is IPFS – so CIDs would be consistent across both).


Filecoin (FIL)

Filecoin is a distributed blockchain solution, that utilizes IPFS storage.  It adds the “missing incentive layer” to IPFS, ensuring that files have persistence over time (essentially an implementation that achieves the same thing as IPFS “pinning”).  They have a three-prong verification system for node providers, that proves that a file in its entirety is being stored, and the node providers are incentivized based upon that verification – that’s how they make it economically viable.

The three-step verification system includes these sorts of proofs:

  1. Proof of SpaceTime – Verifies the entirety of a file is being stored, unaltered, over the agreed-upon duration.
  2. Proof of Replication – Verifies the agreed-upon number of copies of a file are being stored.
  3. Verifiable Action – The global Filecoin blockchain verifies proofs and automatically takes corrective action when needed.

For more information about getting started and storing files with Filecoin, you can utilize NFT.Storage (which uses Filecoin behind the scenes), or you can find the apps that allow you to store files on Filecoin hereAnd there are full dev libraries that allow integration with Filecoin as well, which is essentially what you’ll see at the link above – apps that have done that integration.  It’s fun to see what’s getting built – to bring into the thinking for the solution that you may want to implement.


Arweave (AR)

And that brings us to Arweave.  From their wiki, “Arweave is a protocol that allows you to store data permanently, sustainably, with a single upfront fee.”  Arweave has built an integration with IPFS, so users can store and pin files on IPFS, but it is not natively IPFS based, like Filecoin is.

Arweave’s vision is ambitious:  “On top of the core Arweave protocol lives the permaweb: A global, permanent web of pages and applications that live forever.”

You might be wondering how is Arweave different from Filecoin?  Here’s a bit on that:

While both are data storage solutions and have similarities such as being decentralized and built on blockchain technology, Arweave is focused on the problem of long-term data storage, whereas Filecoin is trying to disrupt the current storage market through a low-cost alternative to temporary storage.”

In a nutshell, The base protocol of the permaweb is Arweave. This system is powered by two fundamental components, a scalable blockchain-like structure that uses an incentive system for their storage nodes (what they are calling a mining system) to store more files and be rewarded for it.  They have an innovative approach for ensuring the permanent nature of the files/data once stored within Arweave through what they term their “sustainable endowment” 

The Gateway servers, which utilize GraphQL and index the data contained within the Arweave “permaweb”, are left for Web3 applications to be designed and run – so no incentive layer has been created for these. instead, it relies on the decentralized (or centralized) Apps that will be built on the Arweave protocol, and it is through these Gateways that users will have the ability to access and render the files and data stored on Arweave. 

Read the details about gateway servers.  This layer will allow rendering of any file/data stored on Arweave to be accessible and renderable to Web2 or Web3 apps, without any special software to do so.

To get a sense for how much it will cost (and it’s lifetime, forever pricing) to store files on Arweave, just check the pricing page at their Ardrive offering.  It allows you to calculate the fee (and remember it’s a one-time fee).

Arweave has full dev tools and libraries for building apps that integrate with the Arweave protocol.


Storage is important to pay attention to as Blockchain apps evolve

There are opportunities beyond just NFT storage with both Arweave and Filecoin.  For example, Solana recently chose Arweave as the storage platform it will utilize to migrate the ever-growing blockchain data off-chain, with a pointer, so each node doesn’t have the burden of storing all of the blockchain data over time – given this, think about how much more will be able to be associated with a blockchain transaction, where now it’s constrained – as we reviewed in our look at the design of Smart Contracts in an earlier post. The possibilities could be enormous!


Developing Your NFT Storage Solution

Implementing on these protocols, with the exception of NFT.Storage is not trivial.  However, understanding that your NFT digital images will live in perpetuity over time is an important consideration that is oftentimes overlooked.

The digital assets you are selling are only represented in the blockchain as a pointer to the content that NFT is associated with – so if you don’t take this seriously, you’re only selling the metadata – and not the image – something that your users won’t realize until it’s too late, and it will feel like a rug pull to them once they do, especially if your NFT collection has a good measure of success!

Thinking about and building the solutions that power NFT lazy minting, NFT marketplaces, and NFT Smart Contracts is one of our specialties!  If you’ve got an NFT collection or marketplace to launch, and want some help doing it – reach out!

If you’ve got a project that would benefit from integrating with blockchain-based storage solutions, we’d love to have a conversation!

Kim Albee

As a complete blockchain enthusiast and the Director of Marketing, Kim brings her insights and questions to the forefront to help new blockchain startups gain clarity when developing their projects. When not totally absorbed in all things marketing and blockchain, you can find her at a tiny cabin next to a Wisconsin lake with people and critters that make her happy.


Submit a Comment

Your email address will not be published. Required fields are marked *

You May Also Like

Database for Web3 Dapps

Database for Web3 Dapps

Data storage on the blockchain has been pretty rudimentary.  However, that appears to be changing, and as it does,...