Had a great call today with @mmurthy going into the details of our Karma integration. Work is ready to begin, but similar to our sourcecred integration way back in 2021, we’ll need to figure out some weights and parameters to kick this thing off.
We can choose to include a whopping data sources that are tracked and used give a participation score to Giveth community members & contributors. These 6 data sources are:
First thing is to decide the relative weight of each data source compared to the others, give in numbers. We can also choose to not include an integration from a specific data source.
Let’s break down each source and what we need to decide.
This integration has a lot of options for customizing how we track and score contributions. Some things we could consider:
- Messages sent
- Messages sent in specific channel
- Which Discord channels to track
- Emoji reactions
- Minimum character length of messages to be included
- Replies to messages
This integration tracks lines of code added and removed in commits made to given repositories. We can value adding lines of code worth more than removing lines of code if we so choose. To decide:
- Which GitHub repositories to include
- What should the relative weight be for adding a line of code vs. removing a line of code
We can track a user’s forum activity with many different data points, this includes:
- Topics created, specified by category
- Comments made
- Likes received & average likes received on topics & comments
- Length of comments & average length of comments
We’ll need to decide:
- Weight of creating a topic
- Weight of categories (posting a topic in a given category)
- Weight of posting a comment on a topic
- Weight of average likes received
- Weight of average comment length
- Exclude comments under what character length from calculations
Nothing specific to define here. We track whether or not a user voted in each snapshot that they were eligible to vote in. Eligibility is defined by holding at least 1 GIV token.
Nothing specific to define here. We track whether or not a user voted in each vote, in each app (Conviction Voting & Tao Voting) that they were eligible to vote in. Eligibility is defined by holding at least 1 gGIV token.
Nothing specific to define here. We track whether or not a user voted in each vote, in each app (5 day voting & GIVbacks Distribution) that they were eligible to vote in. Eligibility is defined by holding at least 1 nrGIV token.
For the Forum and Discord integrations instead of each user getting “points” per say, the calculation is made to find the most active user. The most active user by each metric then represents a score of 100% and every subsequent user underneath is given a relative percentile based on how they compare to the most active user.
This is separated by platform – to clarify the scores of the Forum and Discord are calculated separately, using the method above.
We also have the option to break up leader boards into multiple sections - i.e. one for governance and one for contributors, this means we could break up the integrations into different sections. For example, we could include Gardens, nrGIV and Snapshot into a governance leader board and Forum, Discord, Github into a contributors leader board.
This could be an interesting option but my personal recommendation is we keep it simple for now and see how the standard leader board works then complexify as we see fit a bit later on.
It looks pretty feasible and shouldn’t cause us too much headache. Already Karma outputs a CSV file that let’s us find the score for each contributor. This is basically all we would need to be able to plug it into the existing reward system framework (RAD tool) and combine it fluidly with Praise rewards.
We might have to do some tweaking to the format but @mateodaza is already familiar with how we did it with sourcecred so it won’t be much more complicated than that. However I recommend we let it run with just the leader board so we can revise our params after seeing how they work for a bit.
This is a lot of settings to process! I’ll kick this off with my take on how we should parameterize our integration and anyone please feel free to iterate or propose their own set of parameters!
- Discord: 0 (no integration)
- Github: 3.8
- Snapshot: 2
- Forum: 3
- nrGIV: 2
- Gardens: 2
- Which Github repositories to include:
- GitHub - Giveth/giveth-dapps-v2: This project is the aggregation of GIVeconomy and Giveth.io DApps in a single repo
- GitHub - Giveth/giveth-docs: Documentation and Guides for Giveth.io
- GitHub - Giveth/impact-graph
- GitHub - Giveth/notification-center: It's a microservice that would handle all notification of giveth.io and trace.giveth.io
- GitHub - Giveth/givpower
- GitHub - Giveth/dapp-mailer: Email notification system for (d)apps
- GitHub - Giveth/ui-design-system
- GitHub - Giveth/giv-token-contracts
- GitHub - Giveth/GIVfi
- GitHub - Giveth/givback-calculation: Calculate givback calculation for giveth donors
- What should the relative weight be for adding a line of code vs. removing a line of code:
- Adding lines: 2
- Removing lines: 1.3
- Category weights (creating a topic in a category):
- Proposals: 1.5
- Everything else: 1
- Creating a topic vs. commenting:
- Creating a topic: 3
- Commenting on a topic: 1
- Weight of average of likes received on comments & topics: 1.2
- Weight of average length of comments: 1.5
- Exclude comments under 60 characters (about half the length of a tweet)
Eligibility is defined by holding at least 1 GIV token.
Eligibility is defined by holding at least 1 gGIV token.
Eligibility is defined by holding at least 1 nrGIV token.