neo-project / neo

NEO Smart Economy
MIT License
3.47k stars 1.02k forks source link

Vote pledging mechanism #2598

Open EdgeDLT opened 2 years ago

EdgeDLT commented 2 years ago

I’d like to open a discussion about a possible enhancement to Neo’s governance protocol.

Currently there is no incentive for a voter to choose a node outside the top 21 council members. Doing so would sacrifice GAS rewards. This makes it very difficult for a new node to enter the council if they do not control enough NEO to reach the top 21 alone. As more NEO migrates and is used to vote for existing nodes for a share of the rewards, this hurdle only becomes higher.

Theoretically, it should be possible for an independent node without sufficient self-funding to still earn a sufficient share of the NEO token holder’s vote and join the council. This could be achieved through various off-chain means, such as campaigning. In practice, there is a coordination problem.

Such a node would need to convince the entire necessary share of the voter base to all change their vote simultaneously, else those that switch to the new candidate would lose rewards, while the voters who remained would receive the increase.

Even if all the voters would actually prefer the new candidate over the previous council member, choosing NOT to switch is always more profitable if the changeover cannot be perfectly coordinated. I imagine that the less coordinated the switch, the more it is disincentivized.

I think we can do better than this and solve the problem using a pledge mechanism.

The way I envision it working is that rather than casting a vote for a new candidate, a NEO account can also choose to pledge their future vote to the candidate while still remaining an active, rewarded voter of the original council node they chose.

When a given candidate has more pledges than the 21st node has active votes, the pledges come into effect and become the new active votes. Thus, the switch can happen immediately on the new epoch and voters do not have to lose out on GAS in order to support an alternate candidate.

Open to hear any thoughts, problems I have missed, or alternate ideas that could make Neo governance more accessible.

mdellagi77 commented 2 years ago

I love your proposal and I second your analysis that the current way voting works is not incentivising voting outside of the Top 21 nodes. Instead of voting for a node you would like to be in the council and until that happens you are not receiving any benefits, your proposal is making a new entry into the council much more likely. (See Ghostmarket right now)

The only small problem I see is that the current voting system likes you to regularly check in if you have lost rewards because you are not voting for someone in the Top 21 anymore. But with the pledged voting mechanism the is less likely as you would automatically switch to a node that is outside the Top 21.

Having an active and a pledged vote is like having 1.5 votes. An active and a passive one. And this could change voting dynamic and participation.

But overall I like it al lot better!

neocactus3 commented 2 years ago

Thank you Edge for starting this conversation. I've been concerned about the current governance mechanism that seems to make it fairly improbable for a smaller node to break into the top 21. I like your idea of pledged votes. Maybe pledges could reset every 7 days or something to prevent voting passivity on the chain.

diskooooo commented 2 years ago

Thanks Edge, we've voiced these concerns before :) A pledge mechanism is a great idea and suffice it to say I'm much in favour of this change.

steven1227 commented 2 years ago

This sounds interesting. So, each Neo address can pledge 1 additional candidate? That means the ranking will be calculated by: current votes + pledged votes.

EdgeDLT commented 2 years ago

That means the ranking will be calculated by: current votes + pledged votes.

Yes, I suppose that's true. If node 21 has 1M active votes and node 22 has 500k, we would expect 22 to need an additional 500k+ pledges to cause the switch. Though in practice, we would probably not see many active votes outside the top 21 nodes due to loss of rewards.

diskooooo commented 2 years ago

Though in practice, we would probably not see many active votes outside the top 21 nodes due to loss of rewards.

In the current mechanism yes... but not when a pledging mechanism would be implemented, right?

Qiao-Jin commented 2 years ago

I suggest that this "future vote" can take effect in committee members voting but is not rewarded, which means that it will not be taken into committee voter rewarding logic. Otherwise rewarding logic would be much more complex...

doubiliu commented 2 years ago

I think such a function may be dangerous to governance, because some nodes may eliminate the governors who rely on real holdings of neo through some low-cost method.

doubiliu commented 2 years ago

I even have a more radical idea. We should ban voting through contracts in core.

vang1ong7ang commented 2 years ago

@EdgeDLT I love your proposal and actually something like approve voting, preferential voting or multiple voting may be a better solution. such election mechanism is well researched.

but i feel like current impl of neo governance is a trade off between efficiency and performance and ...

single vote is quite easy to impl and easy to understand.

and because of the single vote mechanism, the protocol probably has no choice other than incentive the top21 voters. i guess the purpose of incentive the top21 voters is to avoid vote split. imagine if vote is splited among hundred of candidates, probably someone got less than 0.1% vote can be elected.

vang1ong7ang commented 2 years ago

in addition, imo, node election is to elect honest node more than intelligent node.

as a result, if the elected node is a bad guy, its supporters will change their vote to someone else honest. otherwise it is not so harmful to elect such node.

or maybe governance mechanism can be even improved in 'layer 2' (smart contract layer) something like miner pool or voter pool to aggregate the choice but distribute the rewards.

doubiliu commented 2 years ago

In my understanding,'one person, one vote' is the ideal situation described by Satoshi , which is also the direction that various chains are working hard. But from a realistic point of view, this seems to be a utopia. Currently,it is possible that multiple investors with strength power compete with each other, thus forming a balanced situation. At this time, if a new mechanism is introduced, some investors can participate in this competition at a relatively low cost, but instead It destroys this balance. In addition, from the perspective of democracy, we actually hope that each voter can truly and objectively fulfill his voting rights, but this way of disguised sales of proxy rights is in the opposite direction, so I think we should at least increase this difficulty in implementing behavior rather than rewarding.So I agree with the design of @Qiao-Jin. Accept vote through the contract, but do not give any rewards, and let these lazy holder bear the corresponding governance risks

vang1ong7ang commented 2 years ago

@doubiliu

  1. follow your logic, would you like to ban binance address or revoke all rewards to binance while binance is currently the biggest voter.
  2. neo, as a smart contract platform, it is ridiculous to ban smart contract everywhere or treat smart contract as second class citizens

while imo, delegated users is not lazy users. delegating to someone trusted and professional is sometimes better than randomly voting to someone i never know

doubiliu commented 2 years ago

How do you prove that the delegated person is trustworthy, just because we have generated a whitelist? Now I don’t know whether the selected people are trustworthy, but I know they are rich and powerful, and their qualifications are relatively more credible, because they are the survivors of the current free market game.

Or we can do this, directly in core or build a delegation framework, but we do not provide any so-called recommendations or guidance, and then allow any project party to submit its own election list or incentive sharing ratio. This directly puts everyone on the same starting line , Allowing any project party to market (or 传销)

vang1ong7ang commented 2 years ago

man, never introduce a mess to solve a mess.

actually i don't understand your bias against smart contracts.

doubiliu commented 2 years ago

One possible reason is that for more important issues such as the governance or economic model, we should be more cautious and take into account the interests of multiple parties. If the latecomer wants to modify the rules recognized by the forerunner and share the benefits in the forerunner’s benefit cake, then it should first show his value.

doubiliu commented 2 years ago

Of course I’m just a proposal, it’s always good to discuss issues in many ways.

vang1ong7ang commented 2 years ago

imo neo governance is not something optimal but a suitable trade off.

satoshi never said one person, one vote and the classic way is one coin, one vote, which means, every NEO should be treat equally whomever it is held. (one person, one vote comes from here)

doubiliu commented 2 years ago

Yes.'one coin, one vote'. Clerical error :)

doubiliu commented 2 years ago

I very much agree with this idea of equality, so I added another idea. We directly build a fair platform, and it is of a public welfare nature, and cannot be evil. Then let anyone participate in this matter freely, relying solely on their marketing ability, to convince voters. Binance can give their share ratio and strategy, and Huobi can also give their ratio and strategy. Everyone is on the same starting line. This is not 'never introduce a mess to solve a mess.'

doubiliu commented 2 years ago

After deeply discussion with @vang1ong7ang , I was persuaded. I believe it is a good thing to have such a contract to complete aggregate governance. And 'neoburger' may be a good implementation. Of course, we also need to monitor the proxy strategy.It should be more transparent, democratic and decentralized. After all, it has a big power.

Elean0rZ commented 2 years ago

I really like the spirit behind this idea. I'm not a developer, so I'm probably missing some technical nuance here, but might there be a simpler solution built into the "epoch" system that already exists?

@EdgeDLT 's proposal, if I understand it correctly, allows pledged votes to accumulate until there are enough, at which point they become "real" votes. Aside from the technical aspects, the downside I see with this is that it would probably be used as an insurance policy by voters, rather than as a tool of democratic expression. That is, I might vote for node 21 because it has the best reward ratio, but also pledge my vote to node 22, knowing that, if 21 ever fell out of the top 21, it would most likely be replaced by 22--so I'd be safe. In other words, I voted for 22 not because I actually value its proposal and specifically want it to be in the top 21, but because I want to maximize my profits. Essentially, this just becomes a tool that allows me to more safely vote for a low-vote node, rather than forcing me into the game theory trade-off of a "safe" high-vote node vs. a riskier, but potentially higher profit, low-vote node. It also makes it almost inevitable that 22 will overtake 21 eventually as pledged votes accumulate. This seems like exactly the kind of purely financially motivated, non-merit-based incentive for change that we're trying to avoid.

I think there has to be a little more skin in the game for voters, rather than just the win-win scenario that this would produce. We want them to actually want change, not just vote for it because there's no reason not to. One possible option would be for pledges to only last for a set period--an epoch or two, say--rather than until there were enough. This would then be like the campaign period in a real-life election (well, at least in places that don't campaign 365 days a year like the US). This would encourage nodes or activists to focus their marketing/campaigning efforts rather than subjecting the community to constant low-level promotion, and at the end of the campaign period, there would either be enough pledged votes to enter the top 21, or there wouldn't. Unsuccessful pledged votes could either revert back to the current vote (so, no penalty, but also no "perpetual insurance" incentive), or else if you really wanted to turn the screws you could increase the stakes by actually resolving the pledges regardless of outcome; i.e., if you pledge your vote for the new node, you actually vote for the new node even if it's not in the top 21 at the end of the campaign (so, an active disincentive against speculative voting). In any case, the goal is to remove the incentive for "insurance" voting mentioned above, while still providing a longer safe-window during which a new node can seek to gain enough votes.

Crucially, there would need to be a way of publicly displaying the votes pledged for the next epoch (or next X number of epochs). This would signal the level of support, motivate voters who are on the fence, and provide context for the new node to pursue its marketing efforts as it tries to gain a spot in the top 21. I'm also assuming that anyone who doesn't actively pledge a different vote would be counted as pledging their current vote.

I think this approach would be a fair compromise. In the hypothetical scenario where a node was misbehaving and there was a strong common-good reason for voting them out, I think it would be relatively easy to get enough votes together during such a campaign period to remove the bad actor. Conversely, if it were just a case of a new node making a pitch even though all the nodes in the top 21 were already doing a good job, then I think it's perfectly fair to not make it overtly easy for the new node--like, if they can put together a good enough pitch during the campaign period to get voters to pledge to them, great; but if not, then there isn't any intrinsic reason why we'd want to encourage change just for change's sake.

Because it isn't based on dynamic contingencies ("IF the total number of pledged votes for node 22 exceeds the number of actual votes for node 21, THEN the pledged votes become real"), this would be more like just allowing vote "queuing", and continuing to resolve the votes at the end of the relevant epoch as is already done. Maybe I'm wrong, but I'm guessing that would be simpler to build into the current system than the "indeterminately pending" model originally proposed.

Anyway, this turned into a bit of a ramble, and I may well be missing some technical detail that renders the whole thing moot, but those are my two cents.

NwKdOnTheBlockchain commented 2 years ago

I like the idea of pledging a vote! (smaller) Nodes should have a fair chance to reach top 21. It's also good to talk about our governance and keeps ideas coming in!

On the other hand I feel Elan0rz and we should prevent this vote on 21 and pledge 22 scenario (for profit only)... Besides that I think you need some skin in the game! If you want to run a CN, or as a community wan't that node elected, you should give in on some of your GAS rewards and show everyone you support it!

Maybe we can pledge outside the governance mechanism? Like a forum, poll, on github, or a tool that collects pledges like kickstarter, for example: 500k pledges and we will notify everyone by email/tweet/message or whatever so everyone can switch their vote.