NSFW: DinoNouns | Interactive On-chain NFT
TL;DR
- Develop an interactive NFT experience using Nouns assets (Dino head-based Nouns)
- On-chain interactive NFT leveraging
animation_url
in NFT metadata - On-chain HTML, CSS and JS with option for customization
- Sandbox for creating a new interactive experience for the Nouns ecosystem
- 2 months of work for refining, adding features, and open-sourcing
Ideas ⌐◨-◨
Ohaiii NounsDAO, I’m Nero One, an active member of NounsMY!
I love to experiment and explore different mediums and NFT, it opens up a new way of doing even more than we could before.
I’ve seen some of the stuff people have been doing in the space and it inspires me a lot! But I saw a lack of creation/innovation in terms of interactive NFT.
The “WHAT IF”
So I’ve been thinking, what if DinoNouns can be interactive and at the same time the whole thing is all on-chain? What if we can teach the character some words so it can reply us back? Make it jump? Perhaps changing the DinoTerminal skins? It would be cool to play with!
Before I continue, here’s a quick note on my past projects:
Past Project
I’ve worked on several Interactive NFT projects and most of it was off-chain, COMLINK+ (pointed to a hosted site), tulsv1 (uploaded to IPFS).
Fully On-Chain?
However this time I wanted to fully put the whole HTML on-chain + interactive.
So to achieve this, all assets need to be encoded in base64 (HTML, CSS, JS, fonts) and to be included in the smart contract. Oh and I’m using vanilla HTML, CSS and JS to make it simple as possible without any other dependencies.
Nouns SVG
For Nouns SVG generation, I’m currently using NounsDescriptorV2 contract to generate on-chain SVG for DinoNouns. To be used in both of the image
(in teh metadata) and in the HTML itself.
Seed for the generation is based on Dino name and tokenId of the NFT:
uint256 pseudorandomness = uint256(keccak256(abi.encodePacked(_name, _id)));
Dynamic NFT?
Each Dino name is stored on-chain and to change it, you’re required to interact with the DinoNouns contract. Changing name will reroll the Dino .
Do you want to re-skin your DinoTerminal? You can do it! Customize your CSS and put that into the contract! Oh, it’s token mapped. So if you do for your token, only u get the custom CSS!
Summary ⌐◨-◨
Vision
The token is the canvas - Nahiko
To bring awareness on on-chain interactive NFT and how the community can utilise it
Objective
- NounsDAO community can fork, experiment and play with their own idea/interaction they want to bring into their project.
- Opening up new possibilities for future Nouns fork to embed interaction within the project
Strategy
- Build HTML-based interaction with UI/UX
- Create smart contract architecture for the on-chain interaction and utilisation of HTML, JS and CSS.
- Make use of the existing Nouns ecosystem [
NounsDescriptor
andNounsSeeder
] - Refine the codebase for future fork
- Open-source it!
Deliverables
- I have built the MVP (minimum viable product) for the project. This includes:
- UI/UX Design
- Interactive HTML Page demo deployed on Surge
- Deployed initial prototype on Goerli Testnet
- Smart contract architecture
- Contract deployment on Mainnet
- DinoNouns collection on OpenSea and minted 3
- GitHub repo for the project (work in progress)
- Report and updates will be posted on my social media and discourse.
- Refine, add features and prepare the repo for open-source
Features
- Text-based command interaction
- Dynamic on-chain name
- CSS Animation
- Utility commands
- Dynamic favicon and title (only if you view it in a separate tab)
- Custom CSS
- Teach your dino wordsssss~
- Commands have a
30%
chance to fail - hehehehe - Map commands to button
- Use keyboard shortcut
[a,b,x,y]
for the buttons - and more…
Commands
List of commands
Command | Desc | Usage | eg |
---|---|---|---|
/dino | give temporary nickname | /dino [name] | /dino abu |
/run | make dino run | /run | /run |
/jump | make dino jump | /jump | /jump |
/clear | clear logs | /clear | /clear |
/reset | reset to default dino | /reset | /reset |
/map | map command to button | /map [btn][command] | /map a run |
/teach | teach your dino words! | /teach [word] [reply] | /teach yo whatsupp! |
/help | help command | /help [command] | /help [cmd] |
[any] | dino will say it back | [any] | hi |
nouns | Link to nouns.wtf | nouns | nouns |
center | Link to nouns.center | center | center |
You can create yours too if you fork the project!
Budget Breakdown ⌐◨-◨
I’m asking for:
- 6 ETH - Work done for the current MVP on deliverables
- 4 ETH - Work done for deliverables 2 and 3 (December 2022)
Payable to neroone.eth || 0xA6c0F7bde119930fB919ed02F8155887EcF0D756
oh ya guysss, please let me know about anything~
Thank you for reading. wohohoooooooo~
p/s: Thanks to @Voadz, my fellow NounsMY for helping out!