iost-official / go-iost

Official Go implementation of the IOST blockchain
https://developers.iost.io/
GNU Lesser General Public License v3.0
565 stars 113 forks source link

Limit vote per wallet to percentage of circulation #1117

Open jerkyrs opened 4 years ago

jerkyrs commented 4 years ago

To avoid massive exchange wallet the protocol should really restrict votes beyond 0.1-1% of the current circulating supply. An exchange wallet can easily consume large proportions of rewards to the ecosystem without ever having to tie up users funds (due to reserves of others). The purpose of voting/staking should be to tie a given users IOST to the network. We can consider an Exchange as a bank, they can lend out your money to others (stake/vote it) while still providing access to funds if needed even without you knowing. For staking to work users should have there own wallet and it should be staked on the network directly from the users wallet.

For example if there is currently 21 billion circulating having a 0.1% threshold would restrict a given wallet to only being able to vote 21 million. The reality is we already have wallets which have votes in excess of 200 million IOST.

There should be a restriction in total vote per wallet to a set maximum to try to mitigate exchanges ability to control a network.

ccding commented 4 years ago

Does this matter? One can register 1000 wallets and each votes 21 million.

jerkyrs commented 4 years ago

One could but would be a lot more difficult to achieve and manage generally. The influence of a single large wallet on a PoS chain with pre-mined coins that are mainly on exchange is in itself a security issue for a network. If a network was bootstrapped with a minimal amount of tokens and new tokens were only created by issuance then the issue probably would never occur. Two exchanges on IOST hold ~>8 billion of approximately 13.5 billion circulation (minus the foundation from total circulating supply)

They could easily consume >70% of the network vote entirely with 2 commands , the ability for exchanges to take over the top 30 producers either single handed or together should be a concern for any PoS blockchain in the same position. Technically all one needs is 2/3 of 17 in the BP committee (12/17) to validate a fraudulent transaction.

The proposal is an attempt to make this more difficult by restricting the actions from a single wallet to only be able to vote a maximum amount of circulating supply, ideally this restriction would have been in place from the beginning (0.1% would be ideal ~ 21 million)

The only way to truly decentralize and secure the network is to have users hold there own tokens and vote directly on chain increasing the amount of producers so the committee becomes more random, having large exchange wallets is a risk to any PoS network similar to how banks holding savers funds was a risk to the financial system when they use them how they felt fit (why Bitcoin was created but we seem to have forgotten this).

Unless Exchanges are actually going to let you vote for other producers the problem will continue with centralization as they are making that decision for the user (like a bank investing your funds without asking you where you want them invested but also being able to control the asset you invested in).

Open to other suggestions but the protocol should at least attempt to restrict such activities that create centralization of power.

ccding commented 4 years ago

I am with you in terms of your intention. However, I don't think your proposal works. It takes a developer less than a few hours to generate 1000 wallets and move tokens around and vote, which shouldn't be considered as "a lot more difficult".

jerkyrs commented 4 years ago

It is true a developer could easily do this but an exchange (or just massive wallet holder) who wants to protect their wallets by cold storage (currently supported by IOST) and via hardware wallet (coldlar) it would be significantly more difficult.

One might argue a maximum vote per candidate would also produce more fair rotation, however technically once you get ~> 200 million (at time of writing) you are effectively in every round so having 500 million only gets you more election reward. Having 1 person control 2 nodes of 200 million is better then 1 node at 500 million. Maybe it would be better to have forced rotation out , so you are in, but you are not in every 1, maximum 1 in 2 (so a producer could never be back to back in a round).

There are many things to improve the protocol , the not in every round is actually probably much better then maximum vote for a candidate. Maximum vote for a wallet still is good because it forces large wallets to be split up.

octalmage commented 4 years ago

What about taking it the other way? Limiting the number of votes a node can have? Tezos does this!