Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
A simple guide to quadratic voting (tally.xyz)
83 points by bpierre on Aug 3, 2022 | hide | past | favorite | 55 comments


If you wanna try out QV with some friends: https://quadraticvote.co/

Also, shameless self plug for this toy I made that lets you compare first-past-the-post, quadratic, ranked choice, approval and about 2 dozen other voting systems:

https://votevote.page/

Basically the voters and the candidates are colors. How much a voter prefers a candidate is a factor of their RGB distances (sorta)


Also some cool new features in the dev deployment of it:

https://dev--votevote.netlify.app/

I've been meaning to finish polishing it for a month now, but it's been hard to find the time. You know how it goes. Lots more voting systems and cool features are in the works though


Very nice! I am working on a very similar project ( https://www.elzear.de/posts/2021-01-10-polls , https://rank-votes.vercel.app) but I had never seen your work, thanks for sharing!


Oh cool. I only knew of 2 or 3 similar projects before starting this project, but since then I've come across dozens of other ones. I'll add to my list. Some day I'll add a webring of similar projects on my site

Mine is currently lacking in Condorcet methods. The original prototype of it had a few more condorcet methods in it, but the core reason I wanted to rebuild it was to make heavy use of cacheing. E.g. no reason why both STAR and Borda should have to make the same calculation twice. Or why all these head to head methods need to produce the same exact matrix. So I have this "SuperElection" class that tries to break things down as much as possible

I think this did in fact help my performance but it's also made everything so... interconnected. Definitely been a good learning journey. But I might just re-implement kemeny-young and some others in a less efficient way and worry about optimizing them later


The point, I guess, is that the vote counting function is sublinear, ie. f(x+y) <= f(x) + f(y), ie. allocating many credits to one place gives you less total voting power than allocating the same number of credits over many places. But why the square root function in particular?


Because the derivative of a quadratic is linear, meaning meaning you spend votes proportionally to the strength of your preference (indifference at the margin).


Sadly there is a showstopper.

Quadratic voting can be bypassed if whales can make a large amount of identities. The lack of strong identity and Sybil attacks is the biggest unsolved problem in distributed systems of the free-to-join class.


Q̶u̶a̶d̶r̶a̶t̶i̶c̶ voting can be bypassed if whales can make a large amount of identities. This has nothing to do with quadratic or not. As long as the voting system satisfies the non dictatorship property of Arrows theorem they are vulnerable to Sybil.


I think what OP meant is that if you have an organisation with 100 votes or 100 organisations with 1 vote there's no difference in linear, but there's a huge difference in quadratic.


Yes but that's the point of the system, more individuals voting for something means more. Like any voting system, it doesn't work if one person can impersonate other people.


In my experience with writing quadratic voting contracts in Solidity, the exponent of 2 is mandatory because there's no way to calculate an nth root in Solidity.

Writing that out though, I realize that the root could be calculated by the client and simply verified on chain.

One token, one vote is an exponent of 1, it should be up to the voters to decide the exponent used based on the issue in order to choose the degree money influences decision making.


False. You can very much implement the n-th root. Details depend on the number format chosen (fixed vs floating point emulation). The most obvious method is binary search. You calculate the n-th power for some number and see if it is larger or smaller then then the number you want the root from and narrow it down.

Equivalents of the doom trick using integer division and instead of >>1 (which is ÷2) of the exponents + a few newton iterations would also do the trick in floating point format


Apparently it is possible. [1] I guess I missed that when I was trying before.

[1] https://ethereum.stackexchange.com/questions/38468/calculate...


qv measures degree of preferences, instead of direction of preferences.

qv is robust under various non-ideal behavior (in large groups)

qv does not suffer from cyclic collective preferences (voting paradox)

qv does not suffer from discursive dilemma and doctrinal paradox.

qv counteracts majority rule problem. A small minority can get their voice heard if the intensity of their desire is strong.


> In 2019, the Colorado State House of Representatives used quadratic voting as a way to determine which appropriations bills to prioritize funding first.

I think this is the best use case for this voting structure: given a set of options to choose from at the same time, you're able to rank these democratically in a way that embodies all the benefits described in the article


And to think, people in the U.S are fuming about the Electoral College. Wait till they find out about QV.

Imagine getting involved in some shitcoin project where a guy with a hundredth of your investment has a tenth of your voting power


Isn’t the electoral college worse. Someone living in some sparsely populated midwestern state has more than 100x the voting impact as someone from an urban area even though they may contribute very little to the economy and probably receive a lot of welfare and subsidies. I’ve been fuming.


A vote in Wyoming is worth 3.6x a vote in California due to the electoral college makeup. This is just raw voting power though, not the "impact" you're likely describing.

Votes in battleground states will always have more impact, but that has less to do with the electoral college makeup and more to do with the fact that we group the votes geographically and allocate them all to the same person. If/when Texas becomes purple, the impact of a vote there will be greater than one from a tiny deep red state, despite the fact that voters have less voting power.


The bigoted, classist, and emotional language in your statement undermine your argument.

Edit: Rewording my comment for clarity and to remove passive aggressive phrasing.


Imagine a tiny geographical area that punches above its weight (economically-speaking). Its people pay a ton in taxes, take very little from the government, but they also have disproportionately large voting power.

While this setup is blatantly undemocratic, it could be hard to argue that their voting power should be reduced when they're contributing more to the pot than they're taking out. A bullshit justification to someone who actually values democracy, but this logic isn't entirely insane. Indeed, this scenario is reality in some places on earth.

America, as we all know, is nothing like this.

The smaller states take more than they give. There is no excuse to not make their votes count the same as everyone else's.


What's stopping someone from just buying one token from each of 100 addresses, then having 10x the voting power they're meant to?


What you are describing is called a sybil attack. Gitcoin is an example of a project that implements quadratic voting, and here is a blog post about how they mitigate sybil attacks and other forms of attack: https://gitcoin.co/blog/deterring-adversarial-behavior-at-sc...


I don't mean to be argumentative, but this is far worse than a Sibyl attack.

In a Sibyl attack, an attacker can spend N resources to carry the weight of N people, gaining proportionate influence where proportionate influence is disallowed.

In this attack, the attacker can spend N resources to carry the weight of N^2 people.

That is, they can vote as the square root of the pool. If there's a million tokens in the pool, they only need a thousand to achieve dominance, unless someone else uses the same trick simultaneously.

This is the kind of thing that's so bad that it's hard to imagine someone didn't design this with the explicit purpose of exploiting it themselves down the line.

I'm not sure why you suggest quadric voting fixes this, as it actually makes this radically worse.

You seem to be reciting PR without understanding the underlying math.


> If there's a million tokens in the pool, they only need a thousand to achieve dominance, unless someone else uses the same trick simultaneously.

I'm probably misunderstanding something, mind explaining like I'm five?


If you have 10,000* tokens (* changed for easy square rooting), you can give 1 candidate 100 votes. Suppose you split your tokens over 100 accounts with 100 tokens each (100 × 100 = 10,000 - so your total number of tokens hasn't changed). If each of these accounts votes fully for the candidate, the candidate gets more votes. Specifically, each account is worth 10 votes if cast fully for one candidate, so 10 votes × 100 accounts = 1,000 votes.

And indeed, if you split your tokens over even more accounts, each token gains even more voting power. If split over 10,000 accounts, you control 10,000 votes - instead of the 100 votes you had with 1 account.

Basically, with QV, those with tokens can do tricks to gain quadratically as much power as they are supposed to have.


Yes, this is obvious.

I still can't see how the cheater with the 1000*1 votes has "achieved dominance"?

> If each of these accounts votes fully for the candidate

Quadratic voting kind of discourages that: the marginal vote has more utility given to another candidate. Non-cheaters will tend to spread around their votes.


Yes the new world order is crypto contracts running things, oh wait we need to convene a council so humans can review potential threats before they are allowed to transact with the contract.


I assume your votes are weighted by the number of tokens


> Because quadratic voting considers not just how many credits were allocated to each option but also where those credits came from when calculating votes, it can be particularly vulnerable to Sybil attacks.

I've always wondered how DAOs solved the Sybil problem, speculating that governance was no more meaningful or binding than a Twitter poll without a solution.

I see they just didn't.


Sometimes I wonder if I could have been very rich very early by just building things while ignoring any part of said thing that seems to be a major, unsolvable problem.

The requirement for stuff to actually work most of the time seems to be somewhat imaginary.


The answer in many cases is likely yes. That's what fake it 'till you make is, really.

Obviously sometimes it fails, and in some cases more spectacularly than others, such as with Theranos. But how many founders of companies with strategies that could kindly be called "Theranos adjacent" made of with lots of money? My guess is enough that knowing the real number would make all of us very sad and mad.


I've built a DAO tool that requires passport verification and allows voting on binding proposals with quadratic voting. Each proposal defines a series of transactions to execute on chain.

https://democratic.capital


Does it accept a passport from any country? How are they verified? Couldn't counterfeit passports slip through? How do you make sure a passport is used only once? Doesn't this make you a target to a state level attack?


Stripe Identity is used to verify passports, it supports 33 countries (mostly NA and EU) right now. A salted hash of the country code and passport number is published on chain which allows only one instance per passport.

As far as a state level attack, it's possible. A complete solution to Sybil resistance is not simple.

The passport verification service is at https://coinpassport.net if you would like more information.


How does it deal with people who have multiple passports? Or renew their passports when they expire? I have two valid passports right now, with different numbers, issued by the same country.

Stripe Identity seems to very explicitly not be intended to guarantee any form of uniqueness.


How does the program verify passports?


Stripe Identity


For people asking about Sybil attacks and how do organizations prevent someone from pretending to be many users, this is still an unsolved problem. One project that's working on it which has gotten a lot of support is Proof of Humanity:

https://www.proofofhumanity.id/


I've seen far more scathing condescension and fury at Proof of Humanity than support.

Anywhere you'd point me for passionate pro-PoH takes?


Can you point me at the anti-PoH takes? I'd like to strongly agree with something today.


I haven't seen fury over Proof of Humanity. Maybe you're thinking of Sama's Worldcoin which is trying to scan the eyeballs of everyone on Earth to generate unique Ids? It was met with a lot of criticism over privacy and how it's being funded (much of the created new currency will go to its VC backers and Sam).

Proof of Humanity is definitely still an experiment, but has a much more open and less authoritarian design. Of all of the "proof of personhood" projects it has the most traction, especially within in the Ethereum community where its founder, Vitalik Buterin, has written a lot about it, including in his recent post on Soulbound:

https://vitalik.eth.limo/general/2022/01/26/soulbound.html


my personal favorite is "proof-of-Apple" [1]

[1]: https://news.ycombinator.com/item?id=31751203


What happens when I get a group of my friends to team up and challenge the "validity" of someone's id?


Alternatively, you can build a DAO on http://democratic.capital which uses passport verification as Sybil resistance.


which uses passport verification as Sybil resistance where the threat model is individual actors. Still vulnerable to nation states.


Yes, how much do you trust the 33 countries supported by Stripe Identity?

Sybil resistance is not easy to solve absolutely, it's all about degrees.


I got as far as it using a cryptocurrency and then noped right out.


These are interesting variations on the concept.

However, as Jonah Goldberg is fond of saying, "Complexity is a subsidy."

When it comes to an official voting process, let simplicity drive us to hard-copy ballots filled out in person as much as possible.


> Although QV is at its heart an intuitive process, many of us may be unfamiliar with what “quadratic” functions are. Having to speak about something we learned in algebra class as part of a voting process can risk being distracting from the actual vote.

"Something we learned in algebra class"? Seems like a weird thing to say, everyone who understands cryptocurrencies should find this trivial to understand, surely this isn't a real problem.


The percentage of the population that actually understands cryptocurrencies is extremely small.

If you try to explain to my father what QV is by talking about cryptocurrency, you've lost before you even started. Same goes for much of algebra, in fact.


I suspect even the percentage of the portion of the population that owns cryptocurrencies that understands cryptocurrencies is very low.


I wouldn't be surprised if understanding and owning cryptocurrencies were negatively correlated.


>Quadratic voting (or QV) requires more complex calculations than regular rank choice voting

>The counted votes are the square root of the “credits” allocated to each choice.

Complex ... ok ...


I mean the trick isn't to compute the square root, it's to understand what effect doing so has on the overall voting system, right?


Should just call it "smurf voting."




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: