neo-project / neo

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

NEO3 Governance Mechanism #1446

Closed erikzhang closed 4 years ago

erikzhang commented 4 years ago

Abstract

Currently, NEO has many issues to vote on. For example, you need to select consensus nodes, oracle nodes, and NeoFS IR nodes. You also need to determine network policies, fees, and GAS circulation. A large number of on-chain voting will increase the burden on the network and even seriously affect the performance of the neo network. In addition, it is questionable whether ordinary users have the professional ability to make decisions on various issues. In this case, a referendum on all matters is unrealistic. I propose a mechanism where all neo holders vote on-chain and elect a governance committee. The committee then makes all other decisions.

Governance Committee

The number of members in the governance committee is fixed, tentatively set to 10. If there is no vote, the members of the governance committee are the default members designated in the genesis block. After the neo3 mainnet is launched, neo holders can vote for members of the committee, with 1-neo-1-vote. The 10 people with the most votes will form the governance committee. Voting can take place at any time and votes are counted in each block. If users do not participate in the voting of the governance committee, they will not be able to get GAS incentives.

Decision-making process

The decision-making process of the governance committee is divided into two steps: first, vote on the proposal off-chain, and then send the approved proposal to the chain. A proposal requires the signatures of more than 2/3 of the members to be approved. Off-chain voting has greatly reduced the burden on the neo network. In addition, the approved proposal is accompanied by the committee's signature and needs to be sent to the chain to take effect, which ensures the transparency and fairness of the decision to the greatest extent.

The Governance Committee will make decisions on two types of affairs. The first type is the designation of functional nodes, such as consensus nodes, oracle nodes, and NeoFS IR nodes. The second type is parameter settings, such as network policies, fees, and GAS circulation.

======================Updated in 2020-03-11======================

Consider that consensus nodes have a special power: they can reject a proposal by rejecting the transaction. This power should be granted directly by the NEO holders. Therefore, consensus nodes should also be directly selected by the NEO holders. However, if both roles (committee and consensus nodes) are selected by the NEO holders at the same time, this will increase the burden on the NEO holders.

Therefore, I propose an amendment. NEO holders vote for 21 members for committee, and the 7 members with the highest votes automatically become consensus nodes.

In this way, the committee has the right to propose and the consensus nodes has the veto right. Both roles are chosen by NEO holders. And the voting mode is very simplified, it will not increase the burden on users.

doubiliu commented 4 years ago

A very interesting idea.Somewhat similar to the Chinese People's Congress system.Incentives for committee members can be viewed as salary for performing management work.Indeed, a simple majority obeying a minority strategy may have a majority tyranny.

EdgeDLT commented 4 years ago

I understand the goals here but I think there may still be a transparency problem. NEO holders may be the ones electing the members of the committee, but there's no guarantee that the final proposal is a reflection of their faith. Having a small number deciding off-chain in this way is just a little too "behind closed doors," and there's no veto for NEO holders on what they come forward with.

Could we improve your solution by requiring potential delegates to propose a manifesto, with their desired consensus/oracle/IR nodes and network policy settings? NEO holders could then vote on-chain for their preferred candidate in the same way as proposed, and you can take the most approved manifestos and have the delegates reach the 2/3 compromise.

By requiring the final proposal to fall within the bounds of the manifestos as voted on by NEO holders, I think it would help ensure that the final decision was a good reflection of the votes. There may be situations where the final proposal needs to fall outside the bounds of the original proposals, in these cases I think it would be good to have the ability for NEO holders to veto. It would be up to the delegates responsible for the final proposal to justify the differences to the satisfaction of the voters.

Tommo-L commented 4 years ago

I think the committee has too much power without watcher and I suggest that it can be split into two groups. One for making the proposal, another for making a decision. Both are voted by neo holders.

image

igormcoelho commented 4 years ago

Interesting discussion.. typically, the strategic decisions are made by community debates,but no "official" workflow exists for that. Regarding pricing, I think that CN can decide on that, based on the proposal they submit before voting period (limiting costs up and down). CN represent Neo holders also to select oracle nodes (and count), neofs nodes...because all of the protocol depends on the blockchain, and if CN are not good, nothing will work anyway. Neo holders should also decide CN count.

ioannistsil commented 4 years ago

i don't like the idea of governance committee. they could buy votes and we go back to squard 1 your should keep vote decentralized as much is possible also i dont like the idea everybody should vote i will try to explain in democracy many rule over few because they are many imagive everybody vote sun is "green" this could be correct because many vote sun is green , so i propose voter should pass a test to be eligible to vote.

deanragnarok commented 4 years ago

I may be in the minority, but I actually really like this idea and have pondered a similar system in the past. I think one of the things we need to consider is that the average NEO holder doesn't have the knowledge to make informed voting decisions - nor do they care to. Most people are too busy just trying to survive day to day to also worry about making decisions on blockchain proposals.

However, people often do know who they trust and share similar values with to represent them in that decision making.

Perhaps I am wrong, but sometimes I think we are so far into the weeds and care about this stuff so much, we assume everyone else will too.

A few things I would consider:

I acknowledge that the system as proposed is not perfect, but I would rather have a smaller pool of informed people who really care making decisions about the platform, than a large pool of people who aren't and don't. If there is enough members of the Governance Committee, I feel it could still be decentralised enough to prevent concentration of power, knowing also that NEO holders are also able to remove anyone who they feel isn't representing the best interests of the chain.

erikzhang commented 4 years ago

because all of the protocol depends on the blockchain, and if CN are not good, nothing will work anyway.

I'm trying to separate the different roles in the blockchain. In fact, the committee is likely to appoint itself as a consensus node. But logically, they are two different roles.

erikzhang commented 4 years ago

Perhaps there should be some kind of weighting that takes into account the number of unique wallets that have voted for an individual, not just the number of NEO. For example, if 5000 people vote for Person A with a sum total of 100,000 NEO, and one large wallet votes for Person B with 100,000 NEO, Person A should be the nominee as they represent more holders.

But the large wallet can send his neo to different addresses. We have no way to detect in the system whether different addresses belong to the same wallet.

ioannistsil commented 4 years ago

Perhaps there should be some kind of weighting that takes into account the number of unique wallets that have voted for an individual, not just the number of NEO. For example, if 5000 people vote for Person A with a sum total of 100,000 NEO, and one large wallet votes for Person B with 100,000 NEO, Person A should be the nominee as they represent more holders.

But the large wallet can send his neo to different addresses. We have no way to detect in the system whether different addresses belong to the same wallet.

HI erik as i mentioned above , those people who can vote they should pass every quarter some kind of skill test to be eligible to vote. read some "Plato" and u will understand what i mean

doubiliu commented 4 years ago

A voter who passes the test means an elite vote.It would be a good proposal if we could have a test to determine whether voters are elite.But it is very difficult to implement this test method on the chain.Even in reality, in some countries with indirect elections, it is difficult to do this, and it may eventually be reduced to a monetary politics.

I think before we discuss this, we should first determine the probability that this committee system can correctly express the views of voters.I did a calculation with my colleague a few days ago:

We assume that there are three voters, ABC, from whom any individual is elected to represent the committee, and the probability that the elected member has P is consistent with the voter's opinion. In the end, for a person in ABC, the probability of his opinion can be correct publishing is more than ten percent. Of course, my calculations are rough. My colleagues wrote some programs, and the final estimate was about 30 percent.

EdgeDLT commented 4 years ago

We should just allow candidates for the governance committee to specify their preferences before gathering votes. For example, maybe one candidate prefers low tx fee and inflation, another candidate has strong preferences for certain consensus nodes etc. It could be optional, with these things being specified during registration as a delegate.

I think this is a good enough start in helping make sure that the committee has produced a result that is consistent with the votes.

ioannistsil commented 4 years ago

A voter who passes the test means an elite vote.It would be a good proposal if we could have a test to determine whether voters are elite.But it is very difficult to implement this test method on the chain.Even in reality, in some countries with indirect elections, it is difficult to do this, and it may eventually be reduced to a monetary politics.

I think before we discuss this, we should first determine the probability that this committee system can correctly express the views of voters.I did a calculation with my colleague a few days ago:

We assume that there are three voters, ABC, from whom any individual is elected to represent the committee, and the probability that the elected member has P is consistent with the voter's opinion. In the end, for a person in ABC, the probability of his opinion can be correct publishing is more than ten percent. Of course, my calculations are rough. My colleagues wrote some programs, and the final estimate was about 30 percent.

hello , I didn't mean elite but people who are sophisticated and worthy to vote , those people are hard to manipulate as simple people are easy to manipulate u can see that every day

ioannistsil commented 4 years ago

Perhaps there should be some kind of weighting that takes into account the number of unique wallets that have voted for an individual, not just the number of NEO. For example, if 5000 people vote for Person A with a sum total of 100,000 NEO, and one large wallet votes for Person B with 100,000 NEO, Person A should be the nominee as they represent more holders.

But the large wallet can send his neo to different addresses. We have no way to detect in the system whether different addresses belong to the same wallet.

what about people who vote need to lock their NEO for x days before voting take place.

deanragnarok commented 4 years ago

Perhaps there should be some kind of weighting that takes into account the number of unique wallets that have voted for an individual, not just the number of NEO. For example, if 5000 people vote for Person A with a sum total of 100,000 NEO, and one large wallet votes for Person B with 100,000 NEO, Person A should be the nominee as they represent more holders.

But the large wallet can send his neo to different addresses. We have no way to detect in the system whether different addresses belong to the same wallet.

We could perhaps use NeoID to overcome this issue, and require voting wallets to have some kind of verified identity. We don't need to know who they are for the purposes of voting, just that they are an unique person.

Again, I recognise there are issues with this - there are good reasons for people to have more than one wallet and not wanting to attach ID to all of them. There is also an issue of what identifying property would be required and what is considered "verified." Further, NeoID has not been finalised. However, if we're talking about electing people into a position of power, it could be problematic if people can have disproportionate influence from the shadows. I think it is at least worth consideration.

Tommo-L commented 4 years ago

Should we consider the incentives for committes? Should we consider the incentives for consensus nodes/oracle nodes?

erikzhang commented 4 years ago

I think there should be incentives. But it is not necessary to decide immediately. We can advance the governance mechanism first.

shargon commented 4 years ago

I like this proposal, but i have two questions

EdgeDLT commented 4 years ago
  • How can we prevent that an exchange use the neo that he own, and vote for himself?

If we lock NEO while it is being used to vote, we limit the ability for an exchange to vote since it will affect the exchange's liquidity. Aside from that, it's been argued in the past that exchanges have a right to vote so that they can fulfil their responsibility as custodian for those coins.

I think the only thing we can do is encourage the adoption of non-custodial exchanges, fortunately Neo has very good ones.

gaoyuan121 commented 4 years ago

i think the delegated committee mechanism is an elegant way to systemize the governance scheme for Neo. It is efficient, executable, and tested in the more traditional organizations.

On the macro side, the governance scheme should be carefully studied along with some other grand topics that has been discussed recently:

  1. the fundamental economic model: inflationary or deflationary nature of NEO and GAS, fee structure (static or dynamic).
  2. motivation or incentives for different parties in the ecosystem with the new governance scheme: committee, nodes (consensus, ID, FS and etc. ), eco projects (infrastructures, dApps), and holders. Or in other words, how to redistribute the inflation or "transfers" to properly motivate different parties. Some random thoughts: some other projects like EOS adopted a "supernode" scheme, basically supernode= node + committee, votes are weighted based on stakes. It seems quite intuitive and easy to execute, any good bits we can draw from that scheme?

On the micro side, a detailed scheme to clarify the election process, scope of responsibility, decision making process should be proposed:

  1. proposal of candidates
  2. election process
  3. scope of responsibilities / term of service / "impeachment" process
  4. decision making process: proposal -> discussion -> vote -> implementation
gaoyuan121 commented 4 years ago

a few interesting pieces presenting an alternative approach applying liquid democracy:

Vitalik piece about futarchy: https://blog.ethereum.org/2014/08/21/introduction-futarchy/ Arthur Breitman piece about futarchy (Tezos Founder): https://medium.com/tezos/towards-futarchy-in-tezos-54a7b8926967 A summary piece: https://medium.com/alpineintel/on-governance-futarchy-6a6fa2c012b

igormcoelho commented 4 years ago

I'm trying to separate the different roles in the blockchain. In fact, the committee is likely to appoint itself as a consensus node. But logically, they are two different roles.

Thanks for the clarification @erikzhang , I think it's a good idea. I just think we should enforce that the proposal is to have institutions as committee members, not people, and the intention of having them to share responsibility of running nodes. It makes a whole world difference. Example: if we say person X (comittee member) is managing a node, we know its a very weak trust point, but if its a company, with values involved, its a whole different story. People can easily collude to break the system and take profits, but companies cannot, specially if they are big ones. So, I'd put my vote on a public entity, but never on a person. Finally, I'd also love to see voters being able to increase and decrease comittee size, slowly but possible. I agree with minimum 7 or 10, but maximum can grow, maybe from 3 to 3, respecting bft security logic. Finally (2), 😆 , I'd also love to see some CN space dedicated to guest p2p nodes, as we've been defending on a dbft3 with multiple proposals, so every p2p node stable enough and with high stakes on gas can help consensus process and earn some gas. This makes investment possibilities for everyone on Neo network, being it voted or not,as long as node is stable and some gas is locked.

EdgeDLT commented 4 years ago

I just think we should enforce that the proposal is to have institutions as committee members, not people

For me it is the opposite. I would rather vote for a person that I trust to be a committee representative instead of a faceless organization.

I agree that it is likely better to have such institutions physically running consensus nodes since they are able to provide better hardware and security to the network, but I would not trust them as committee members.

shargon commented 4 years ago
igormcoelho commented 4 years ago

For me it is the opposite. I would rather vote for a person that I trust to be a committee representative instead of a faceless organization.

Don't get me wrong @EdgeDLT, I would vote for you... but only you :wink: But really, think about, committee is formed by Person1, Person2, Person3 ... who are also managing CN, NeoFS node, Oracle node... At some point, Person1 is sick, or on vacation, who is managing nodes? Who is taking decisions? But ok, he/she hired someone to do it... so in the end, to do such big management, how can a single person do the job? it's likely that this person represents a company, in the very least. The way I see it, the proposed committee is not just to take decisions, but to manage stuff, a lot of stuff, this requires time and a team. I don't think a single person can do all this.

igormcoelho commented 4 years ago

What it's the difference between vote for a committee and vote for a CN?

@shargon, it looks like to me that each member can run a CN, but it's not a 100% rule... so it could be that one member runs 90% of nodes, and some members run no nodes, if they agree to. I also don't know about fees... as it depends on the "size" and "complexity" of these member operations.

vncoelho commented 4 years ago

I have been thinking about this proposal for some couple of days. I am now seeing this as an extra layer. In fact, it would not change much in the first steps.

In fact, it looks like we are changing the voting from "vote to ensure a trustable network" to "vote to ensure a well managed network", something like that.

Perhaps, I need to think a little bit more and discuss off-chain to have more insights.

belane commented 4 years ago

I like the idea of governance committee. In neo3 there will be several roles and being realistic, most users will not have time or interest in choosing each option. This way of delegating facilitates the election process and also opens up new possibilities for delegation.

Users can trust an entity/candidate who is highly reputed for his honesty and not exclusively for his technical level, and he will choose the best technical option that guarantees his level of trust.

There are some things that are not totally clear to me;

EdgeDLT commented 4 years ago

@igormcoelho If we are assuming that most committee candidates are also going to be running nodes, then I would agree, but I don't think that is necessarily the case.

In fact I think it may be better to have no crossover at all between committee members and CN operation. It gives way too much power over the network. They should set the policies and select the best node operators, not do it all themselves.

JohndeVadoss commented 4 years ago

I concur with @EdgeDLT IMHO there should not be any overlap between committee members and CN operation. I also think that a bicameral committee might be worth considering.

igormcoelho commented 4 years ago

@EdgeDLT to avoid getting too deep in debates wheater individual or institution is the committee members, I have a proposal to make:

A proposal requires the signatures of more than 2/3 of the members to be approved.

Could @erikzhang consider changing the word signatures to a smart contract authorization/verification? This makes a difference, because any member can run its own deciding process, being it completely offchain (and just sending a single signature), or being a multi-sig with multiple deciding individuals, or even a more elaborated contract (just like a regular assembly) with regular elections, etc, etc, all just managed in the blockchain for that specific "member". This way, a "member" can be either a person or a decentralized organization. We can just collect 2/3 of these "member witnesses" to get an approval done.

erikzhang commented 4 years ago

What it's the difference between vote for a committee and vote for a CN?

In the new mechanism, you can only vote for one candidate, unless you spread NEO into different addresses. This makes each NEO weight the same.

How will be rewarded this committee.

I think the committee needs very little incentive. We can think about it and decide later.

If the committee choose himself for a CN, he will be rewarded twice?

CN's rewards are currently very small.

If the committee is limited to 10, does this limit the number of consensus/oracles nodes to 10?

No.

Off-chain process would require interaction from the committee outside the blockchain and I think this would reduce trust.

I don't think you can prevent them from off-chain interaction, even if you put all the processes on the chain.

We may need locking or coin age.

NEO can participate in voting only after it is locked.

vang1ong7ang commented 4 years ago

As we mentioned in the our proposal of governance https://github.com/neo-project/neo/issues/1437

The following metrics can be used to evaluate the solution of governance layer to know which solution is better. It is better to choose a solution with higher pareto efficiency and lower cost.

  • pareto efficiency
  • cost of computing, storage and network resources

On decision making phase, every NEO holder can vote for its choice. Voting is public and visible on the blockchain. Delegated voting is allowed.

Maybe liquid democracy can be introduced to the governance mechanism, and it will provide better pareto efficiency. And about the cost, as a reference, Implement Liquid Democracy on Ethereum: A Fast Algorithm for Realtime Self-tally Voting System, which proposed an algorithm even for real-time voting:

The on-chain complexity for processing each voting massage is O(log n), where n is the number of voters.

erikzhang commented 4 years ago

@neo-project/everyone I have updated the proposal. Please review it again.

shargon commented 4 years ago

Therefore, I propose an amendment. NEO holders vote for 21 members for committee, and the 7 members with the highest votes automatically become consensus nodes.

This is good for me, I think that it's better and simpler for the users.

Tommo-L commented 4 years ago

This is good for me, I think that it's better and simpler for the users.

Agree

JohndeVadoss commented 4 years ago

Yes. Simpler and clean. +1.

EdgeDLT commented 4 years ago

Therefore, I propose an amendment. NEO holders vote for 21 members for committee, and the 7 members with the highest votes automatically become consensus nodes.

Should they automatically become a consensus node, or gain the right to select a consensus node (including having the option to run it themselves?)

I think this is an important distinction to make. There is still the potential for confusion here; are NEO holders being expected to vote for the best committee members, or the best consensus nodes operators? There will be crossover in those roles in some cases, but they are not necessarily going to be the same entities.

In this case, it doesn't seem as simple as proposed. We would still be requiring NEO holders to select both committee members and consensus nodes, except we may also need them to juggle votes away from their preferred committee candidates in order to move better CN operators to the top 7.

If each of the top 7 are able to delegate to a CN candidate, I think we avoid this issue as we can expect those members not suited to run nodes will select strong CNs. If the NEO holders have a problem with a particular CN, they can vote against the committee member and the process remains intuitive.

Tommo-L commented 4 years ago

Maintaining consensus nodes, I think, is the most important task for the committee.

So when people vote, they actually know about it(Voting committee is also actually selecting consensus nodes).

Therefore, for me, it is acceptable to vote for the first seven as consensus operators.

Tommo-L commented 4 years ago

Maybe we should open a new issue to discuss the incentive model.

Q1. How to incentive the committees? Q2. How to incentive the CNs? Q3: Should we merge system fee and network fee? Q4: Should we burn system fee?

Tommo-L commented 4 years ago

If it's not being adjusted, @doubiliu will help do it.

erikzhang commented 4 years ago

I'm working on it.

doubiliu commented 4 years ago

Expecting

CarsonRoscoe commented 4 years ago

it is questionable whether ordinary users have the professional ability to make decisions on various issues.

Whether we are voting on topics, voting for committee members, or voting on consensus nodes themselves, I do believe we will run into this problem. Perhaps only 5-25% of the user base feels they are even qualified to make a informed decision.

I think the STEEM dPoS system handled this problem very well by allowing voting by proxy. The idea is, I might not have the technical knowledge to make decisions, nor may I have the time to keep up with what is going on in the ecosystem, however I might trust EdgeDLT to make decisions, therefore I will proxy my vote to him.

If he has 1000 NEO, and I have 1000 NEO, his votes are now weighed at 2000 NEO and I cannot cast my own vote until I turn off the proxy. I believe having a system similar to this would let a higher amount of the ecosystem have their votes counted towards topics/committee members/consensus nodes themselves.