In the NFT hackathon we built http://milliondollartokenpage.com/ to learn how to build with Ethereum NFTs, and in this hackathon we've added DeFi elements such as staking to incentivise viewership. Essentially people can own a piece of a virtual billboard, place the content they like, and get rewarded for doing so.
Milliondollartokenpage has 10,000 blocks of 10x10 pixels represented by 10,000 ERC721 NFTs on the Ethereum network. Our motto is interact, trade and share. Users can (1) interact by browsing around thousands of images living side-by-side in the same virtual space and click on individual ones to learn more. (2) trade each pixel block, buying and selling them on the open-market. And (3) share the site and earn rewards from the staking pool. A description of the project and how to use it can be found here: https://milliondollartokenpage.com/about.
The app was built with a React front-end (typescript, ethers.js and our own UI framework), Python back-end (web3 client and ipfs), and Solidity for the smart-contracts (openzeppelin standards and hardhat).
We've added staking functionality this time around to create an incentive for people to view the site. As an owner of an NFT on the site you can stake DAI to get your content featured. The more DAI you've staked the higher the chance of your content being shown off. The DAI that's been staked into our pool is then put to work on Compound and Aave lending platforms earning interest. The returns on this DAI are then given to randomly to users who view and share the site.
The featuring of content gives NFT-holders a worthwhile reason for staking, given the opportunity cost of putting up their capital. While the randomised prize-giving for sharing gives people an incentive to come back and helps to grow the community.
We've got two different contracts, one for the NFTs and one for staking, that users interact with separately. We make use of a script emulating proof-of-work within the actual browser to ensure that they are genuinely interacting with the website and sharing in order to stop bots from gaming our rewards.