The main PFP NFT technological problem we find is how most projects provide their "unique" and "random" NFT.
There is a common way these projects provide randomness to their NFTs:
- Create a contract with a baseUri pointing to a generic image representing the unrevealed state;
- Sell all the NFTs with an unrevealed aspect (e.g.: a gif, a video);
- Run a program on their computers to generate and order a list of the NFTs randomly;
- Change the baseUri on the contract, so that the users can access their revealed NFTs.
This approach shows us two huge problems blockchain projects should not have: zero transparency and complete centralization!
So, after these projects revealed each buyer their NFTs, changing the baseUri and providing the randomness on their computers, can the team ensure they didn't change some tokens or gave themselves the NFTs with the rarest attributes by changing the ownership? How can anyone be sure that the team didn't benefit themselves or their partners?
They can't ensure and you can't be sure, as much as you trust the team. The problem here is beyond how nice the team is or how trustable they are. This problem only exists because these teams aren't using the blockchain to prove randomness: they only use it to prove ownership! If the smart contract proves randomness and ownership in the blockchain, which is a public ledger, then the buyers don't need to trust the team, they need to trust and understand the blockchain technology.
But poor transparency isn't the only problem. Many NFT projects also have a function on the contract that allows changes of the token's baseUri.
A little bit about the metadata composition:
Metadata = baseUri + tokenId + metadata extension Eg: https://ipfs.io/ipfs/QmWJvWd3y2HPKhqoVLPRR84HDRSBy5Z85pSVuYeSQRZXrZ/1234.jsonbaseUri = https://ipfs.io/ipfs/QmWJvWd3y2HPKhqoVLPRR84HDRSBy5Z85pSVuYeSQRZXrZ/ tokenId = 1234 metadata extension = .json
So, if it's possible to change the baseUri, these teams can change the "metadata"! Now we have a centralization problem! At any time, they can change someone else's NFT appearance and drop all the NFTs.
E.g.: The owner of the contract changes the baseUri to `www.google.com`. The composition will be: www.google.com + tokenId + .json. No metadata will come from it; they simply dropped the NFTs by changing baseUri.
By centralizing the NFTs on their hands, they can, even with IPFS, change the metadata when they choose to. They can even store all NFTs in a centralized way, which is a BIG problem. But that isn't the case for Yung Pixels and we've addressed this issue in this article.
The poor transparency and centralization problem are all issues blockchain came to solve, so we chose to handle these problems efficiently and straightforwardly: we provide and prove everything on-chain.
- Create the contract with the baseUri already set for the Yung Pixels;
- Let the buyers buy and reveal the token whenever they want;
- Store all Metadata in IPFS with a backup in Piñata, which also uses IPFS.
And that's it.
At Yung Pixels, we'll have several YP already deployed on IPFS before the sales. Through VRF, the buyers are free to reveal IF and WHEN they want, and try their luck by "opening its pack" to reveal a Yung Pixel of the metadata list stored on IPFS. In this way, we guarantee that we cannot drop the NFTs, since we don't have the power to set the baseUri, and we cannot benefit someone, since the ability to reveal is on the buyer's hand. And the buyer can be sure that the reveal is fair as Yung Pixels uses true randomness and no one can interfere on the process, which is completely decentralized, and truly random, while also being proofable on the Blockchain.