Decentralized Gitcoin Profiles Proposal

Overview

A request for proposal was posted here which asks that a decentralized version of Gitcoin profiles be designed and proposed.

Storage and Retrieval of Identity Data

  • Create data schemas (jsonschema, JSON-LD @contexts, etc.) to be eventually governed by the community. We should pick 3-4 most important ones to interoperate, which are desired by other platforms.
    • Trust Bonus
    • Individual Verifications
    • Grants Participation
    • Hackathon Participation
    • Bounties Completed
    • Governance Participation
  • Map to Django data models and who was the source of truth. Did this information get submitted from the user or trusted system accounting of grants participation? This determines who the issuer should be for the data. Gitcoin should generally not sign its name on user-submitted claims, as it will not know what it is signing or implying.
  • Data are exported to a data source of the user’s choice, including Ceramic/IDX. They pick the DID that appears as the data subject after demonstrating control. Sensitive data should be uploaded to a permissioned off-chain storage solution, preferably accessible via the user’s Web3 wallet such as Kepler, but Dropbox/GDrive/iCloud/1Password should work as well to maximize user optionality.

Profile Migration

  • Data issuance and transfer should only take a few clicks for the user, and if we have W3C Verifiable Credentials and Decentralized Identifiers support, this allows a broader ecosystem to openly utilize the information.

Data Structure

  • See contexts and schemas above.

Misc Thoughts

  • We will need a library to utilize the profiles
  • Need to define/identify the protocol
  • Need to address cost due to on chain aspects
  • Must not be tied to a single service
  • Would be great to add a place in the protocol to link this to a DID
    • Only after verifying DID control
  • Must be usable by Gitcoin (centralized and decentralized grants) but also others that are not Gitcoin as well
  • Must not release data that the user does not want released
Select a repo