Description

This NFT project asks a simple question: can a group of people collaborate to tell a story together? People mint words of their choice, one after another, in order to form a story. The mint price linearly increases. All money from the mint is paid out to the holders of the previous words. This way, players have a monetary incentive to select words which will keep the story going. Also, words can be changed by calling a changeWord function. Words can only be changed every two days. This means that people will be able to sell their words to others who want to change the word, and even previous parts of the story can change over time.

Storyblocks showcase

How it's made

Some sponsor tech I used was: Polygon (deployed on PoS chain), IPFS/Filecoin (stored on Pinata), Moralis (stored files on IPFS), and Opensea (NFT Tutorials used to design ERC721). The stack I used was: Hardhat + OpenZeppelin + Solidity for contracts, Vercel + NextJS + TailwindCSS for frontend. Something particularly hacky I did was using a Merkle tree to quickly ensure that a set of words was within an allowed set of words in the smart contract. The problem is that we don't want to allow anybody to push any string to the contract as their next word, we only want it to be within a set of approved english words (which is sourced from the most common english words). However, we can't store this set on-chain. So, I computed a merkle tree and the minter send the merkle proof to verify that the word was indeed part of the allowed words in the smart contract. See this line of code: https://github.com/storyblocksnft/storyblocks/blob/d639dab50a6e4687254426aafd915ece57d1f0de/contracts/Storyblocks.sol#L152