What is it?

Dorsia Club is unlike most NFT projects out there in that it is fully customizable. What you mint are profile-like NFT business cards with randomized attributes, but name, position and social links of your own choosing: a dynamic NFT.

The insipiration for the project comes from the Business Card scene from American Psycho

Seeing that NFT projects look all the same, I decided to take a funny twist at it similar to how the movie portrayed the posh attitude of these vice presidents, trying to one-up each other over the most miniscule of details.

The resulting project is Dorsia Club, deployed on the Mumbai testnet.

What it does

For it to be an NFT Business Card, you need to be able to set the name and position that you wish. At the same time, for it to follow the NFT trends, attributes need to be randomly generated. Besides, it would not be a business card if you could not link it back to you.

So that is what it does: every newly minted NFT Business Card has randomized attributes, but with name and positions of your own. You can also add your social links, like your Twitter, Discord, Github, ... The final asset gets generated on-demand by an off-chain oracle and pinned on IPFS, all in less than 30 seconds.

You can further customize the cards that you own by updating name, position, links..., or by swapping these values between two cards while keeping there randomized attributes. Besides, you can trade these cards natively in the marketplace, and send copies to whomever you want of them NFT soulbound tokens.

How it uses IPFS

Unlike most NFT projects out there, which rely on centralized storage solutions like Google Drive to store their assets, the idea with this project was always to embrace a more decentralized solution, but that is scalable, as is explained further below. The obvious solution is then to use IPFS to store business cards, more specifically the web3 storage API.

Minting a new card or updating an existing one both emit events at the smart contract level. The off-chain oracle is actively listening to these events. When it registers one, it builds the new business card using the parameters specified by the blockchain event: the asset is defined at the smart contract level. Once generated, it pins the resulting card on ipfs, and sends that content identifier to the smart contract as part of a callback transaction.

The end result is a fully dynamic NFT that changes on user's input. This logic could also be implemented using the InterPlanetary Name System, which would remove the need for a callback transaction: the hash would stay the same. But this could result in some scalability concerns, as explained below.

How it was built

The smart contracts are programmed in Solidity and tested using Javascript truffle and hardhat libraries. The website is made on React.js, and the off-chain oracle is programmed on Python, using IPFS, more specifically web3 storage, as a storage solution.

Project challenges

While building the oracle, there was no references to projects that had dynamic NFTs that were constructed on-demand. It was a challenge to program all that logic into something that generates an asset quickly enough for the user to not lose on the experience, which, as far as I am aware, was a first.

What's next for Dorsia Club

A future release is not at all unlikely, but before that I am planning on adding more functionality. A possible idea is an NFT betting game built around these business cards, so that the best card wins, just like in the American Psycho scene.

Another concern is the centralized point of failure that is the oracle: a python script being run on an AWS server under my control. There are however plans to decentralize this dynamic NFT feature, and this could only be possible thanks to IPFS.

Since an IPFS content identifier (CID) is generated deterministically, different parties creating identical Business Cards will arrive at the same CID. This can be used to decentralize the oracle, allowing Business Card owners to generate Cards and perform these callback transactions themselves. The smart contract would then settle on a given CID once it receives a majority of votes, and honest participants would be financially compensated.

Additional Resources

Polygonscan links:

Reach out on Twitter: @0xdeenz

Share this project:

Updates