About this Prize
Write out a smart contract with comments and verify that it works:
Funders of a prize may vote on who wins the prize.
Verified user = a user who connected their Gitcoin passport and whose passport has a score of 21.8 or higher. (This takes a user about three minutes. The Gitcoin passport is a form of “proof of personhood” by assigning you a score through cross-referencing multiple things that real people tends to have including social media accounts and a history of crypto transactions. The more social media accounts and transactions you show, the higher score you receive.)
There are three stages:
- 1. Submission stage
- 2. Voting stage
- 3. Retrospective stage
Submissions are assorted into a randomized order at the start of the voting stage.
Funders may alter their votes at any time during the voting stage.
The options include voting for a refund and voting for which contestant should win.
Verified users have 1 vote for each 1 USD equivalent of funds they contributed to the prize.
Unverified users have 0.5 votes for each 1 USD equivalent of funds they contributed to the prize.
(This is to prevent someone from creating an anonymous account and then voting for their own submission.)
5% of the funds are automatically assigned as platform fee.
5% of the funds are automatically assigned as a prize proposer fee. (This rewards the person for taking the initiative to post a prize that gained funding and was won. Currently, the filtration method of deciding which prizes are posted is that admins review them in part to avoid a duplication of similar prizes and in part to ensure prizes that are posted have a clear end-state defined.)
In other words, available rewards = 90% of the prize pool minus transfer costs.
If funders vote for a prize to be refunded, there is no platform fee.
The winners receive an amount of the available rewards that is directly proportional to the percentage of the votes they received.
ie: If you receive 20% of the votes, you will receive 20% of the available rewards.
(With this solution, you do not need KYC. If an unverified user funds 51% of the prize and votes for themselves, then they would only receive only half of their money back minus fees assuming all other votes are used. If they are a verified user, then they can be voted off of the platform. If they are an unverified user, then they would lose more than half of their funds.)
Admins can allocate unused voting power.
(This way, if only half of the people vote, then those who do vote won't receive 2x voting power relative to how much they funded the prize. In order for directly proportional funding to work, all the votes must be allocated to someone. This creates more work for the admin but solves a sort of do-ocracy vs negligence attack.)
Admins can revoke the option to refund a prize at any time during the submission or voting stages. If this occurs, the votes that were going to the "refund" option then become "unused" votes.
(This is to protect contestants from funders colluding to ask for their money back even though the project was completed well.)
The default for a vote that is unused by both the admins and the funders is for that vote to be allocated to the refund option. If the refund option has been revoked and there are any unused votes left when the voting deadline occurs, then those votes are discarded. (This is to protect funders from admin negligence. This may lead to issues wherein the admin simply decides to revoke the refund option then does nothing else, resulting in the same “do-ocracy vs negligence” attack previously described.)
Funders may allocate any percentage of their voting power to any available option.
If that funder adds more funding in later, then that new voting power is automatically distributed in proportions matching their previous votes. (ie: Someone funds $100 into a prize and votes 50% on option 1 and 50% on option 2. If they add in another $20, then half of the voting power of that $20 goes to option 1 and half goes to option 2 automatically.)
No one may see where votes are being allocated except for admins until the voting deadline is reached, at which point the votes will be revealed.
(This is to prevent someone making fake accounts and upvoting a submission to make it seem popular and thereby influencing other votes.)
Funders cannot see which contestant made which submission until the voting deadline is reached, though admins can see this.
(This is to ensure that submissions are judged based on their merit and not based on who submitted them.)
Retrospective stage to be described at another time and is not needed to win this prize.
This can be done with just eth. In the future, we may have live updates of the price conversions to USD and then allow multiple tokens which convert to $1.00 USD equivalent=1 vote.
We can also do this with fiat if we make an easy interface for people to see the votes and the results.