Hi Eth Magicians, I wanted to share some thoughts on a new pattern regarding ERC1155, or NFT that is 1.) non-transferrable (a.k.a soul bound) and can only be minted with signatures from all agreed addresses.
TLDR
Using ERC-1155 as a social footprint to represent interaction among a small set of addresses. When all participant agrees on such action, and provide the signatures; A mint can be initialised. Once minted, these tokens would be burnable, but not transferable.
Motivation:
Social interaction is full of friction without any review or trust system. It takes time for us to feel safe to strangers and new ideas. While centralised platforms like Linkedin, Facebook or Airbnb provide useful feedback, they are opaque, prone to censorship or fraud.
Being a popular and reputable figure on social media like Twitter, Instagram, is also not a reliable model, since the business model of social media tolerate buying up followers, and there is little way for normal users to distinguish how the validity of a person from their number of followers, no doubt these platform has been increasingly less reputable and more commercial.
With Ethereum, and public blockchain in general, it opens up the composability layer of human interaction and trust. When we interacted with another individual in a meaningful way, some sort of familiarity and trust is created such that later on it becomes easier for us to interact with the same person or even his/her friends. This is a non-trivial property of social interaction and how we build trust towards people around us. Currently, many of such meaningful interactions faded in the course of time because those meaningful interactions have no better way to be represented other than a twitter follow, or a telegram “Hi”.
Besides working as a medium of forming community, NFT can also be a tool to represent small group of social interaction. Once these social interactions are represented on-chain, there are potentially other dapps or trust composability usage based on custom metadata of the NFT they minted.
Reference Implementation
Some brief interfaces
// each address sign a message and provide their signature in order to whitelist themselves for a ERC1155 NFT
function initilizeNFT(bytes memory _signatures, bytes32 _rawMessageHash, address[] memory addresses)
// once the NFT is initialized, the address which provided signature in `initilizeNFT` can now mint the NFT.
function mint(uint256 tokenId, address to) external {
(require(p2pwhitelist[tokenId][to], "not whitelist");
A full implementation
Outstanding thoughts:
- Any concerns on privacy
- What metadata should be encoded
- Would the contract be ddos if it does not require privileged actor/owner.
Next Steps:
- Any feedback is appreciated!
- Further discussion on the implementation reference, to make sure it is as generic as possible and considering as many potential use cases as possible.
- Potentially draft a EIP / ERC Token Standard once enough use cases are explored.