Collusion Resistant Voting: iDPOS — implicit Delegated Proof of Stake
Here’s a new take on DPOS voting that could lead to a more accountable, collusion resistant and user friendly chain. I call it implicit Delegated Proof of Stake.
Over the last few years I’ve become convinced of the many issues with voting. EOS certainly improves upon most voting systems but it’s still a system that makes it kind of difficult to vote someone out… Just like in the realm of politics.
This got me thinking. What if instead of voting for a block producer, we vote against block producers?
In the US, Congress has extremely low approval ratings but they are almost all reelected every time. What if the voters could explicitly vote out a bad actor instead of the false choice between two candidates?
The idea here is that as long as things are working and the BPs are behaving well then there’s no reason for average users to think about voting.
To make it work the system needs a few changes beyond just the ability to vote against…
Here are the Changes to Make this Work
1 — Find a large group (let’s say 50) of honest, freedom loving, geographically diverse, competent BPs and make them the initial BPs. We’re starting with top quality BPs. edit: Or of course just take the top 50 BPs using EOS’s current voting method but cut them off there or some other sufficiently decentralized amount.
2 — The voting FOR BPs stops. By virtue of using the network, each token holder is then implicitly delegating their stake to these 50 BPs. Their consent/vote/delegation is implied until such a time that they explicitly withdraw their delegation. In other words, vote against one or more BPs.
3 — BPs are voted out when a certain percentage of all tokens are voted explicitly against them. (say 30% the approximate current voter turn out) It’s not a relative vote where if you get fewer against votes you win. It’s a threshold of total votes. Each BP stands alone. edit: You won’t necessarily stay in if you’re just the lesser of two evils.
4 — BPs can, by majority vote, also remove a fellow BP for bad behavior. They may even be required to based on the BP agreement. (edit: This is optional and could be set to unanimous vote)
5 — Each BP is paid the same amount no matter the number of BPs or votes. This way they won’t vote out BPs to increase their own pay.
6 — If a BP is removed the remaining BPs vote in a new BP. If that BP turns out to act badly, then the BP who nominated the new, offending BP also loses their place. Previously voted out BPs can’t be renominated. The BP that initiates the removal of a BP can not also nominate that BP’s replacement.
edit: For #6 instead of having BPs appoint the next BP, when a BP is voted out there is an automatic run-off election for that seat. For the seat to be filled there needs to be a minimum level of voter participation and a minimum vote threshold and that must be maintained for a minimum amount of time. During the election, the highest voted BP candidate produces blocks as an interim BP. This position will obviously change throughout the election process but it will ensure that there are always enough BPs and it will ensure that the highest voted BP is actually capable of producing blocks. The BP that was just voted out can be voted back in but its term as interim BP will not receive rewards.
There are many details and variations that could go along with this, but that’s the main idea.
What does this do?
This removes the incentive to collude via voting a large stake because one whale can’t vote themselves in.
It increases the incentive for voters to act because the threshold is low enough to actually make your vote count for stopping abuse and it’s less work. Instead of researching or randomly picking 30+ producers it’s much easier to research the one who is currently accused of wrongdoing.
It aligns BP incentives for decentralization they are now competing for how honest and transparent they can be.
There are two ways to remove a bad BP. That’s an improvement.
Removing a BP can’t be blocked by whales unless they have 71% of tokens.
Colluding to become a BP becomes much harder because you first have to get a BP removed and then you have to collude with current BPs for them to appoint you and they would be risking a lot to vouch for you. All the incentives align against this.
It also makes vote buying more difficult.
I’m just now developing this idea so there may be more to come. That being said the main risk I can think of is that of a false report of BP collusion that gains enough traction in the community that an innocent BP could be voted out without due process. That’s a risk I think everyone could probably live with. However, there could be some way to mitigate it for example having arbitrators or agencies involved as a final approval.
For example, the threshold could be 20% of votes with arbitrator investigation and approval that they did in fact break their BP agreement OR 40% of votes will override.
note: One other variation is that the BP pay could be reduced based on how many votes they get against them but the pay of other BPs remains the same. This could be another mechanism of voter control over BPs. Even if they’re not voted out their income could be reduced. I’m not a big fan of this approach, however.
Thoughts? Comment below.
[update] Some clarifications:
- There would be 21 active BPs and the rest would be back up. However, they would swap places at regular intervals to allow for down-time etc. So on average each BP would be active for the same amount of time.
- There’s no stratification of BP’s you’re either in the 50 or you’re not. The number of downvotes only matters when it reaches the threshold.
- The threshold would have to be exceeded for 30 days before a BP is kicked out allowing them time to defend themselves.
- Limit it to 5 BPs per legal jurisdiction. Probably not enforceable but would be nice :)