neo-project / neo

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

Approval Voting & Time-Locked NEO Voting Contracts #313

Closed EdgeDLT closed 3 years ago

EdgeDLT commented 6 years ago

A proposal by cryptogirlHODL and myself for an improved voting system. It solves many of the issues currently in discussion, including the value proposition of GAS if NEO is made divisible, and helps avoid random voting. It also incentivizes voting, reduces the power of centralized exchanges over election and results in a simple, intuitive process for the end users.

This is accomplished using time-locked voting contracts and an approval voting system.

Motivation

The currently proposed voting system is flawed, as outlined here. The simplest solution is to set 1 NEO equal to 1 Vote, but this introduces a new issue; centralized exchanges with large quantities of NEO have the potential to vote with the tokens of their users, affecting NEO's ability to become/remain decentralized.

Specification

A user sends their NEO to the voting contract. 1 NEO = 1 vote. Let their total voting power be x, and n be their preferred number of candidates. Each node will receive x/n votes. Fractions can be kept or discarded.

Each voting period can be set to a duration or a specific number of blocks. Votes are counted at the end of the voting period, and can easily be differentiated from other NEO.

Rationale

We should allow NEO users to spread their votes across any number of nodes. This can be achieved using an approval voting system, where the voter selects all candidates they approve of. An informed decision can easily be made by referencing a candidate node datasheet. This system is intuitive and requires little effort from the token holder, reducing voter apathy and providing many benefits including accurate representation for minority candidates, easy to understand results, and fair, decentralized compromise on elected nodes.

1 NEO 1 Vote provides holders with an economic incentive to vote for nodes that will uphold the honesty of the network.

Users are required to lock their NEO into a contract to vote. For an exchange, this would cause severe liquidity problems in the case of users attempting to withdraw funds.

Time-locked voting contracts have two secondary benefits. Firstly, NEO's price will gain stability as tokens are locked for the purpose of voting. This also temporarily lowers supply which will in turn increase demand. Secondly, it provides a value proposition for GAS as NEO is made divisible. Divisible NEO could theoretically be used by system fees/dApps, which makes the two-token model questionable. As users will be locking NEO into contracts, they will require GAS to continue using the network. As a result, NEO remains an investor/governance token, and GAS retains value as the utility token.

All NEO receive generated GAS as per the current system, but any GAS pooled by system fees is distributed at the end of the voting period proportionally only to NEO locked for voting. This is one of several possible approaches.

Approval voting leads to the fairest compromise between selected nodes, and discourages random voting. It's quick & easy for the token holder, and gives the network a reason to use GAS for utility rather than divisible NEO.

Specific vote values/percentages can be used to determine the consensus node threshold. A secondary threshold could be used to form a network of backup candidates in the case of consensus failure.

EdgeDLT commented 6 years ago

@mijoka @DocBenjamin

If you'd like a place to discuss the divisibility of NEO (or the two-token system itself), it would be better to open a new issue for it. This issue is for the discussion of a time-lock mechanic & the approval voting system.

cryptogirlHODL commented 6 years ago

@erikzhang Would be curious to hear your opinion on the time-locked mechanic discussed here. Do you see this as a viable option?

ThomasLobker commented 6 years ago

In my opinion locking is very unnecessary and not appealing at all. It also disrespects the vote of people with potentially a high share, but who need to remain liquid. We should not try to restrict the voting process by trying to exclude exchange, because then we are not truly decentralizing. Every share should be entitled to get a vote, no matter if you are ugly, rich, where you live or if you are an exchange.

I propose a very simple strategy:

This is actually a very light system. It's very easy to keep track of votes. Each NEO address will have a number of candidates that is voted on, multiplied by the amount of NEO in that address, divided by the amount of votes for that address. This can be recalculated on a ContractTransaction involving that NEO address. It's a fair and reliable system that doesn't require locking, staking or other tricks.

Partially cross-posted this comment here.

EdgeDLT commented 6 years ago

@ThomasLobker

We should not try to restrict the voting process by trying to exclude exchange, because then we are not truly decentralizing

I'm not following your logic here. If we allow exchanges to vote with their users tokens, we invite plutocracy. (EDIT: It's actually worse than this, because the tokens aren't even owned by the exchange. They can interfere with consensus without anything at stake for themselves).

Time-locking is mainly a solution to re-create scarcity lost from divisible NEO, and to reduce voting power of exchanges. The system you have proposed doesn't help us with this. If NEO is made divisible, GAS's value proposition will be almost entirely eroded. If NEO is not made divisible, your suggestion is good, but it doesn't help us reduce voting power of exchanges.

If an exchange owns their own tokens, they are free to vote. But we should not idly permit them to vote with the tokens of others. We can't prevent it entirely, but we can reduce the influence.

ThomasLobker commented 6 years ago

I'm not following your logic here. If we allow exchanges to vote with their users tokens, we invite plutocracy. (EDIT: It's actually worse than this, because the tokens aren't even owned by the exchange. They can interfere with consensus without anything at stake for themselves).

Ownership is debatable. In my opinion you cannot "own" the assets, only the private keys. Besides, maybe I'm also holding tokens for someone else. How are you dealing with that? And what other stakeholders do you want to silence?

If an exchange is holding 1,000,000 NEO then that is their stake and their responsibility. We should respect their vote too. They have a right to protect the assets that they are responsible for. If they are a bad actor, then that's between the exchange and their users. I know that not everybody understands this. But really, we should not create an ecosystem where we are trying to exclude certain stakeholders from voting.

EdgeDLT commented 6 years ago

That's a fair perspective. I suppose any custodian could argue that they have a necessity to protect the assets they are holding.

cryptogirlHODL commented 6 years ago

I agree that no stakeholders should be 'silenced', but in the case of exchanges it is debatable whether they are actual stakeholders in the network since while they hold the private keys that hold the NEO, they are holding it for their customers. Their customers are the (legal?) owners and should be the legitimate stakeholders in the NEO ecosystem, not the exchange which is acting as the 'middle-man'.

By implementing a time-lock mechanism to voting we do not excluse any actual stakeholder in the NEO ecosystem. If an exchange (or other entity) wants to be a stakeholder in NEO they should do so through their own NEO tokens, and not through those who belong to their customers.

penlite commented 6 years ago

Given that this is now a discussion and no longer an enhancement, should this still be on NEO 3.0 Milestone given some fair discussion about what it is we want to achieve? @Edgegasm did you have a follow up comment?

EdgeDLT commented 6 years ago

@penlite The time-locking proposal was created as a solution to re-create scarcity in the event of divisible NEO. Without scarcity, the requirement for GAS becomes questionable.

It seems that the general consensus is that NEO will remain indivisible, though a final decision on this point needs to be made. If that proves to be the case, time-locking will not be necessary.

As for the approval voting part of this proposal, it will be tested alongside Schulze STV as part of #317 testing.