The way projects usually work (BAYC, Meebits, etc.):

On-Chain you have a single mapping. It says Address X owns Token Y The other thing it stores is where the metadata for that token lives. As an example, here's a link to BAYC's: https://ipfs.io/ipfs/QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/1

In there you'll find a file containing all the traits of BAYC #1. It's Mouth is Grin, its Clothes is Vietnam Jacket, etc. You'll also find taht the image lives here: https://ipfs.io/ipfs/QmPbxeGcXhYQQNgsC6a36dDyYUcHgMLnGKnF8pVFmGsvqi

When they made BAYC what they did was generate on their personal computers 10,000 combinations of traits and images and upload them to IPFS. None of the data about each Ape lives on the blockchain. The only thing that actually lives on the blockchain is where you can find the info about that Ape.

https://images-ext-2.discordapp.net/external/sbRE6xZOPlbbrH1JgtSAXrxZJY6mL3x4YGG-FCQEd_w/https/ipfs.io/ipfs/QmPbxeGcXhYQQNgsC6a36dDyYUcHgMLnGKnF8pVFmGsvqi?width=330&height=330

This isn't a problem for projects that aren't dynamic! This is a total legitimate way to make and host NFTs. Instead of storing GIGABYTES of data on the blockchain (mucho expensive) you can store info about where to find the image on the internet. Everyone's happy.

When NFTs become dynamic, there's a problem... Who is responsible for serving up the changing data? When you change your traits who's in charge of storing that data?

Well if it's not on-chain it's hosted by someone's server. That means if their server goes down, no more access to your image or your metadata. (luckily OpenSea caches this stuff and saves a copy, but you see the point): The stuff that makes your NFT your NFT - The image, the traits, all of it - it's reliant on a central party to keep their servers on.

Once the servers are off the blockchain doesn't know anything about your token except for a deadend piece of info about where it used to live So here's the deal: Let's start storing info on-chain. And I'm not talking about the images or anything. Because that wouldn't be a reasonable thing to do given costs.

Instead, let's store the traits of an NFT on the blockchain and then USE those to generate the image, store it on a persistent, evergreen place on the internet (IPFS + Arweave) and then allow the whole system to work even when the central servers go down.

Your Dog is NOT just a link from a contract to a URL and an image. Your Dog is so much more than that.

Here is how a dog looks in the contract: Background: 0x11 Color: 0x04 Hat: 0x01 Eyes: 0x07 Mouth: 0x01 etc. etc.

We randomly generate this ^ when you mint a token. All on the blockchain!

All we do is then look at your Dog's data on the blockchain and render an image from it. It's all based on which traits you got which are stored on-chain. Then we put that image on IPFS + Arweave and tell the contract "Hey, the image is now over here!"

Boom. On-Chain stored NFTs that will live forever