ENS bound, non-transferrable on-chain badges with Push notifications
On-chain Authenticity and reputation. Though there are some projects trying to develop NFT based certificates and stuff, there's always a question of authenticity since they can be transferred and traded in a secondary market. And also many of them are centralized. As Vitalik said, "If someone is looking at your POAP, they are not interested in whether or not you paid someone who attended some event. They are interested in whether or not you personally attended that event. Proposals to put certificates (eg. driver's licenses, university degrees, proof of age) on-chain face a similar problem: they would be much less valuable if someone who doesn't meet the condition themselves could just go buy one from someone who does."
If you could simply trade such certificates, it doesn’t have any value at all. So it should be bound and non-transferrable to build authenticity around the token. The more authentic you are, the more reputation you acquire. Given the pace of development of metaverse, there needs to be somesort of on-chain reputation system that should be able to find how genuine/authentic a person is without revealing personal info. I think that ENS is growing rapidly at the same time, so literally everyone’s on-chain identity will be owning an ENS domain. So what I’m trying to build is a trustless, open and decentralized system that helps everyone to issue on-chain, non-transferrable, ERC721 compatible badges tied to the ENS domain. It has infinite amount of usecases, For example, Devfolio could use ENSBound Badges to issue their privileged limited edition badge for best performers in the hackathon. So the user's with the badge issued by Devfolio on thier ENS domain will provide increased reputation and trust without the need for sharing their personal info. Hence ideas like ENSBound badges can be used to prevent fraud or unauthorized use of digital assets, by ensuring that the badge is only valid for the user to whom it was issued to.
Challenges:
I spent a lot of time in planning and ideation. So I was left with minimal amount of time for development, So time management was quite challenging. I wanted to implement more features like automated tests, on-chain badge rendering, CLI tool for interacting with the contracts.. But I had very less time for development. Integrating push protocol via Subgraph was quite challenging as it was unstable on the testnet. Sometimes I receive the notifications and sometimes not so it took a lot of time from me. As a solo hacker, it was a bit challenging to work on multiple aspects of the project like integrating ENS, subgraph, push protocol, deployment, documentation in such a small window.
Bugs:
I think I found a bug in the _mint()
method of ENSBoundBadge
contract, which always sets the balanceOf[owner]
to 1
. Then I realized that there might be scenarios that a single account can have multiple badges from same collection for example, if a company issues badges for all the problems that’s solved in a hackathon and if a person solves 5 out of 10 problems, then the company can issue 5 badges to the user. I resolved it by adding a flag called canMintMultiple
in the initializer.