How Solana NFTs Differ from Ethereum

How NFTs Work on Ethereum

The first NFTs were created on Ethereum. At first it was a free for all and every new NFT or NFT project encoded data in a proprietary way. But over time, a standard started to emerge and was codified in the ERC-721 standard.

Today, if you want to create a new NFT on Ethereum, you'll deploy a new smart contract on the blockchain that adheres to the ERC-721 standard.

So let's say that we are creating a new NFT project — Lumens. We would write a contract for Lumens and then deploy it to the blockchain and get a contract ID, say 123luma123contract.

That contract keeps track of who owns which Lumen NFTs and has the power to mint new NFTs and transfer existing NFTs. If you own Lumen #5 and want to transfer it to someone, you send a signed message to the contract telling the contract to update ownership of Lumen #5.

So now we have a bunch of Lumen NFTs that are all grouped under one contract. This gives us the idea of a collection of NFTs. On Ethereum, an NFT is identified by the contract name + the token number. So Lumen#5 could also be referred to as 123luma123contract/5.

In theory, this all sounds nice but in practice it's much more messy. Part of the reason for the messiness is that everyone is writing and deploying their own ERC-721 contract. That's led to a ton of quirks and many NFT projects don't even properly adhere to the ERC-721 standard.

Solana Does Things Differently

Now Solana does a lot of things differently, for better and for worse.

On Ethereum for every NFT collection, you need to create a new ERC-721 contract. While this gives you more control, it's also complicated and expensive. It's like creating a new website by starting with some sample code.

On Solana, when you create a new token or NFT, you use the existing programs already deployed that are part of Solana's Program Library. You can think of the SPL as analogous to the Python standard library. Sure, you could write your own version of map and sum but it's much easier to just use the builtins.

The main drawback with Solana's Token Program is that it doesn't have a concept of NFTs or NFT collections.

To create an NFT on Solana, we are creating a token but then setting some special parameters on the token to make it effectively an NFT. Specifically, a Solana NFT is a token with supply == 1 and decimals == 0. It's a little awkward, but it works.

Creating a collection is much more difficult. There's not a standardized, easy way of grouping a set of NFTs into a collection. While on Ethereum, if you mint multiple NFTs from the same contract, you can see they all came from the same contract.

On Solana, you can set a Collection Name for your NFT. But that field isn't verified. So if I create the Lumen NFT collection, you could come along and decide to create an NFT with Collection Name == Lumen and pretend that your NFT is part of my collection.

Then, how are people selling collections of NFTs on Solana? They are using hacks like verifying that the creator address of NFTs or just storing the list of NFTs in a collection in a web2 database.

So while it's a lot easier and cheaper to get create a Solana NFT, there are a lot of things you need to figure out in order to create a successful NFT project.

In a follow up post, I'll cover how to find the NFTs that someone owns given their wallet address.