Following the Fall of Humanity, I got to thinking about an alternative approach that might work better.
The upgrade is simple: make every vote a proposal of its own, block dependent proposals until dependencies have been resolved.
- Human42 has applied to the registry via proposal "Join42", but a rich user with 500k tokens - let's call him Rich - doesn't like that balance of power. Rich votes to kick Human42 during the veto period.
- Rather than apply immediately, this veto is turned into another proposal: "Proposal to Veto Human42 with the full force of Rich". For the sake of brevity, let's call this proposal "KickBan42". This also has 5 days to execute.
- Let's assume Human42 notices this 2 days later. He can either collect 500k of yes votes if the veto process allows for yes votes, or, he can initiate a challenge of Kickban42 - let's call it CancelBan42 - and ask others to chime in on the validity of this challenge. In other words, he has ground zero from which to start the dispute process, and the tokens with the most potential to do damage to this challenge (Rich's tokens) are already locked in the Kickban42 proposal, making it impossible for Rich to Sybil the tokens out, or to distribute them to his friends or something else nefarious.
- Human42 can now lobby with friends and community members to vote for CancelBan42, and if Rich wants to counter-vote this challenge he needs to do some lobbying of his own. This brings more parties into the fray which expose the two parties and their intent, and end up fairly resolving the dispute because they take away power from a single individual.
- Once the CancelBan42 challenge is resolved, the Kickban42 can be resolved, and only then can Join42 be resolved. So the dependencies of a proposal need to resolve before that proposal. This dramatically slows down the process in times of dispute, but I would argue that this is good as it gives more people more time to produce evidence and provide arguments for and against certain votes.
Following the above, this also means the challenge itself is challengable - so someone else can also challenge CancelBan42 with proposal "CancelCancelBan42". Human42 can, for example, identify this person as Rich's sockpuppet -let's call him SockRich - and once proven as fake or puppeted, the membership of this member itself can be challenged, further blocking even these two proposals until resolved. We are now at around a month's time of staggered proposals, one depending on the other, but it's a linear graph and it's very, very clear what needs to happen for the entire situation to be 100% resolved. In any case, this has the added benefit of pulling in more and more of the community because the tokens at stake become ever scarcer.
There are additional mechanics required to prevent Rich from voting with his 500k locked tokens for the "CancelCancelBan42" proposal, something like, if a user has any "Vote of no confidence" type proposals attached to them, they cannot vote on anything proposal that touches their address at any level of the dependency graph, but this can be worked out and isn't as complicated as it sounds.
Now, granted, this just fixes the "rogue whale" problem that we've seen in Humanity. Many of the following open problems still remain:
Private verification. Linking tweets (ergo, public identities) to addresses reveals a very, very nice history about most humans in Humanity right now. Coupled with most mobile dapp browsers' failure to clear cache this is a wonderful honeypot of data.
Fake accounts for easy Sybiling - it is trivial to obtain aged, real-looking social media accounts.
Pay to Win - should outsiders who are not yet in the registry be able to vote? Why / why not? Letting them vote exposes you to manipulation by Rich in the example above where he'll simply create a blank address, buy a bunch of tokens, and have things his way. Not letting them vote makes it a closed circle which, once taken over by a corrupt set of Riches, is hard to get into.
... and the other typical DAO problems.
If I find time I'll build the above alternative, but I don't want to work on something someone else is already planning so please let me know if you've started something like this and maybe we can team up.