As NFTs have now became a widely adopted medium, we have been exploring how they could be used to handle personal information sharing. We have been digging the problem to find a useable and scalable solution.
What it does
Each wallet can mint a single, non-transferable ERC721 token. Each token holder can indicate both a profile picture (chosen amongst the NFTs owned by the wallet) and a main ENS domain as public information that are stored on IPFS. Each holder can also indicate private information like their first name, last name, Twitter & Discord handles, which are encrypted with the wallet's private key and stored on IPFS. The ERC721 smart contract references the hash to this data. The token image is generated as an HTML document with the public data from IPFS. Whenever an app wants to access a user's information, it will be able to access both the public & private data, by decrypt it with the user public key.
How we built it
React / Next.js / Truffle
Challenges we ran into
The solution has to respect a few constraints:
- the solution should be decentralized
- the solution should be cost-efficient, ie as little data as possible should be stored on-chain
- the user information should not be publicly available on the blockchain
- the user should be able to edit their private information
- the solution should be easy to implement by third-party developers
- the NFT should be shillable
Accomplishments that we're proud of
We came up with a simple and robust solution described above.
What we learned
Sleep is overrated.
What's next for NFID