Giveth / Roadmap

Open Roadmap Planning via Tokenlog
0 stars 1 forks source link

GIVmatching #26

Closed divine-comedian closed 11 months ago

divine-comedian commented 2 years ago

Design a system where top-ranked projects on the platform receive matching funds from the Giveth Matching Pool -

Check out this spec from the forum: https://forum.giveth.io/t/givmatching-idea-generation-on-how-to-distribute-funds/346/19

Open to changes but this spec has been up for +3 months on the forum. We'll need to consider that the Giveth Matching Pool needs at least $500k funds to begin and will need continuous funding afterwards.

To that end we should consider if this should happen before, during or after GIVfi development.

Here's the full post from the forum with my proposed spec :point_down:

Okay everyone, I took a serious stab at trying to figure this out and I came up with a pretty robust solution. Strap in, we're going deep. :diving_mask:


General Overview

With GIVmatching we will take "top-ranked projects" from established bi-weekly rounds and distribute a portion of the funds held in the Giveth Matching Pool to these projects. The metrics for deciding "top-ranked projects" will change depending on where we are in the current Giveth Core Roadmap. More details on that a bit further down. :straight_ruler:

GIVmatching starts officially when we hit $500,000 worth of funds held inside of the Matching Pool. We will liquidate all holdings at that time into GIV and distribute matching funds exclusively in GIV. :bank:

From launch, every 2 weeks we will take a percent of the current GIV holdings in the Matching Pool and set them aside to have as matching funds for a given number of top-ranked projects. This means, without receiving additional funding each round will distribute incrementally less as the GIVmatching supply dwindles.

The top "top-ranked project" will have a set percentage more of maximum matching funding than the bottom "top-ranked" project, with all the projects inbetween calculated proportionally. This is the variance factor. :pie:

For example:

There's 200,000 GIV in the Matching Pool. We want to distribute 10% (20,000 GIV tokens), we have 10 "top-ranked" projects picked for the round. Our variance factor is 110% so the top project will receive 10% more tokens than the bottom project. The distribution would be as follows, from lowest to highest:

Rank Placement Tokens to Receive
Rank #10 1901.29050320353
Rank #9 1924.84130368797
Rank #8 1947.79142148437
Rank #7 1970.13596385686
Rank #6 1991.87176575824
Rank #5 2012.99731160521
Rank #4 2033.51265156975
Rank #3 2053.41931353044
Rank #2 2072.72021177969
Rank #1 2091.41955352388

Donations made to the Matching Pool after launch will be arbitrarily liquidated into GIV at any given moment, decided by the multisig holders, thus keeping the GIV supply periodically topped up.

GIVmatching will provide up to 75% of the USD value of donations as matching funds or if this over the matching funds remaining it will match with whatever funds remain for the given project. The 75% matching is considered the GIVmatching Factor. :money_with_wings:

A project that has been "top-ranked" in a round and received GIVmatching funds will become ineligible for the subsequent 5 rounds (10 weeks). :no_entry_sign:

Parameters

There's a few parameters that we'll need to decide at launch and we could modify between rounds:

The first two states that will define a project's rank are pre-GIVpower launch and post-GIVpower launch.

pre-GIVpower :astronaut:

Before the launch of GIVpower the clearest metric we have for ranking projects is USD value of donations received within a given period. Projects must be Verified to be eligible for GIVmatching. :moneybag:

Following the GIVbacks bi-weekly cycle we can get the sum of the USD value of donations received to each project during the given period dates, we'll take the top slice of highest donated to verified projects, assuming elgibility, and make them eligible for GIVmatching on donations for following 2 week round.

post -GIVpower :rocket:

After the launch of GIVpower we'll have a new metric to consider, that will be the average amount of GIVpower staked to a project during a round. We'll now have this metric in addition to USD value of donations received to consider when ranking projects. GIVmatching will transition to follow the bi-weekly cycle of GIVpower from GIVbacks.

We can dynamically set how much we value one metric over the other by introducing two new parameters: Donation Factor and GIVpower Factor which can increase or decrease the influence of each metric on the final GIVmatching rank of a project. :balance_scale:

For example:

We have 10 Projects with the following stats at the end of the round:

Project Donations USD value for Period Average GIVpower
Project A 500 1000
Project B 1000 200
Project C 2000 500
Project D 15000 10
Project E 250 60000
Project F 40000 2000
Project G 5000 4000
Project H 6000 7000
Project I 10000 8000
Project J 500 60000

Our Donation Factor is 1 and our GIVpower Factor is 0.5. We multiply the second column by the Donation Factor and the third column by the GIVpower Factor. Our project ranking then looks like this:

Project Final Donation Score Final GIVpower score Total Score Top-project Rank:
Project A 500 500 1000 10
Project B 1000 100 1100 9
Project C 2000 250 2250 8
Project D 15000 5 15005 4
Project E 250 30000 30250 3
Project F 40000 1000 41000 1
Project G 5000 2000 7000 7
Project H 6000 3500 9500 6
Project I 10000 4000 14000 5
Project J 500 30000 30500 2

Parameters

So we'll introduce two new parameters than can be changed, making our total list of modifiable parameters post GIVpower launch to be:

Spreadsheets!

It wouldn't feel right with some good ol' spreadsheets to play around with some parameters. You can fork this Google Sheet and get started.

CHECK IT OUT! :eyes: https://docs.google.com/spreadsheets/d/1jneA_gvTRMgOMgv_KmhJNagqDms1YIudD-0m1I-wnVk/edit?usp=sharing

Major props to Zhiwei for creating the variance factor algorithm and @cquinterom096 for implementing the cusom function script so we can actually play around with it!

divine-comedian commented 11 months ago

Closing this one as it's now become QF which is already launched and sailing!