Dynamic NFTs is, at its core, a pattern for empowering protocols that use NFTs. It is made up of a Solidity library, with contracts extending the OpenZeppelin library with Dynamic behaviour & the trustless upgradability mechanism. The contracts are intended to be generic and abstract, allowing for a wide range of custom implementations. According to the default implementation, only protocol owners can accept propositions to the underlying assets (in ipfs), and only the current owner of the NFT can accept the upgrades. Currently we support ERC721 and Factory contracts (Collections) which can be added through the Dapp UI. Propositions and Collections are stored on Ceramic. We also have deployed a default DynamicFactory for minting assets that get their metaata automatically pinned on IPFS. The main purpose of the DAPP is to allow protocols to have an Upgradability UX out-of-the-box. This allows new protocols extending the dyNFT contracts to have an easy and user friendly way of upgrading the assets of their NFTs. Examples: New GameFi protocols. Collectibles with Mutation/Upgrades logic. Insurance Policies. & Oracle based Dynamic NFTs. & all the other use cases of non-static NFTs

DynamicNFTs showcase

How it's made

We're using NFTPort & for auto-pining & generating the metadata. Our whole data layer uses Ceramic as it's database with 2 models - a list of Collection and a map of propositions and their underlying assets. The server is written in NodeJs & Express. Out Dapp (Svelte) is hosted on Fleek - dynamicnfts.eth :) We can easily be blockchain agnostic and support every EVM-chain, the demo is running with Polygon contracts. For the interactions with the chain we're using Moralis & NFTPort.