The idea of NFTs is changing. People are finding use cases for having dynamic metadata. This is possible currently by changing the data off chain then updating the URI in a token. This can be costly and slow because of the need to edit storage on the blockchain. That is why my project aimed to lower those costs. By using IPNS and storing the record/entry on the contract you can update your NFT off-chain. My system works by creating an api that accepts requests for private/public keys, then using that to create an IPNS record that gets returned to the user. From there the client will mint an NFT and create the contract with the IPNS record. As long as the user has the ability to customize the URI in which ever easy-to-mint framework or service, they can take advantage of dynamic metadata and even images.

Customizeable NFTs showcase

How it's made

The InterPlanetary Name System (IPNS) was created to bring mutability and human readable URIs to IPFS. The content of IPFS hashes ARE immutable, but IPNS hashes can point to different things. Once you have your IPNS record, you can change what it points to as many times as you want. For the project I build searched and searched through examples and repos to understand how to use IPFS as an application developer. I set up a local go-ipfs server, to do that I dual booted my computer to use Ubuntu so that I could have access to the DHT. Little did I know it didn't matter I just had to create the node programmatically. After that I realized I only really needed IPNS modules, but there was little information on it, it was very hard to wrap my head around things. I created a go project, running go-ipfs & go-ipns, a basic gorilla/mux server. When someone reaches the getKeys endpoint, I would generate & return a key:pair. Then immediately after wards would execute the postKey endpoint to create an IPNS entry/record and embed the users public key into the record. From there I returned the package and then finish the minting process client side.