This repository holds the eth.berlin 2022 hackathon project of the TEAM TUM Blockchain Club. The project tackles POAP related privacy concerns and tries to improve way of collecting POAPs. Check our Pitchdeck for further information.
To use the prototypic Private POAP wallet you have to:
To have a working solution, you require API keys for the Dune and POAP APIs. Once received, supply your API keys to the wallet.service.ts file in the /poap-it/src/services/ directory.
Load required packages
npm install
npm start
POAPs are a trend that gained large traction in the last couple of years of the crypto scene developments. These days, many events and booths on events allow visitors to mint a POAP in recognition of their presence. While that motivates people to move around and collect those NFTs, it also results in privacy related problems.
Overall, we see three dimensions of potential issues:
- Link of identity and location based on people's Ethereum wallet address - possibly linked with ENS, UD or Twitter - and POAPs that indicate where they were at a certain point.
- Link of relationships, based on POAPs' timestamp property, which allows to determine the likelihood of people to have a real-life relationship
- Learning and forging profiles of identities based on POAP collection analytics and dusting attacks on publicly known Ethereum wallet addresses
The Private POAP PoC implements a four-step user-flow:
- Initialize a HD wallet based on the BIP39 standard
- Derive wallets by incrementing the Path property; determine empty Ethereum wallets with a POAP count of 0
- Mint POAP via POAP API
- Claim GET and Claim POST
- Display POAP Collection based on used Ethereum wallet list
In order to display all your POAPs you first need to collect them from your wallets. We do this by querying the token ids, which uniquely identify POAPs, from the DUNE database. We used the following query to get all POAP token ids that belong to a certain address:
select
"tokenId"
from
erc721."ERC721_evt_Transfer"
where
erc721."ERC721_evt_Transfer"."contract_address" =
'\x22c1f6050e56d2876009903609a2cc3fef83b415'
and
erc721."ERC721_evt_Transfer"."to" =
CONCAT('\x', substring('{{Address}}' from 3):: bytea
You can test it for your own address at Dune Query
- POAP based communities with zkp of POAP ownership
- Private POAP collection with curation feature