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.

cryptogirlHODL commented 6 years ago

I just want to add in the current dual-token model, one of the strongest features is the fact that unlike with ETH, in NEO stakeholders do not diminish their stake on using the network. This was cited as one of the important reasons why some ICO's decided to choose for NEO rather than Ethereum.

Additionally, like Edgegasm pointed out, by utilizing a lock-up period (x amount of blocks), it solidifies the NEO token as a governance token which may be an important aspect to consider from a regulatory point of view. It also incentivizes people to get their NEO off of exchanges, as due to this system exchanges can no longer keep paying out GAS. This should further help decentralization.

What remains an important decision to make is how to handle the GAS of those NEO tokens which are not being locked down for governance rights & GAS generation. Since GAS is slowly released over time, this begs the question of whether the release is put 'on hold' or whether the unclaimed GAS gets lost due to the NEO token not being 'staked'.

EdgeDLT commented 6 years ago

Since GAS is slowly released over time, this begs the question of whether the release is put 'on hold' or whether the unclaimed GAS gets lost due to the NEO token not being 'staked'.

Or potentially we could even say that unclaimed GAS released by an unstaked NEO between each voting period could be added to the syscall GAS pool ready for redistribution. Lots of ways to do it.

BehindYou27 commented 6 years ago

@Edgegasm

I see it like you.

Released gas stays the same.

Voting-Gas is only shared with voters.

Sent with GitHawk

EdgeDLT commented 6 years ago

@BehindYou27 I think that's a fair way to do it, my only concern is that until adoption picks up and we have lots of GAS being used, it might not be enough GAS to sufficiently incentivize voting.

BehindYou27 commented 6 years ago

@Edgegasm

True, might be low-but the lower the participation, the more gas will go to the fewer voters.

I think because we still have a lot enthusiasts that would vote either way.

But how does this solve the blackhole-issue?

As I see it, even a dead wallet could have an active voting going on, receiving system fees and acting as a Black Hole.

The bottom line should be: The supply does not change. Due to human error, the supply will naturally reduce. The idea from inflation was, that the natural decay can be stopped, therefore the amount would stay identical. Right now, the system is being abused by governments by devaluing the currencies in order to reduce their debt. A deflationary model is not perfect as well. It rewards holding, not spending. Therefore people don’t want to spend their token but we want people to use it.

I hope that you agree that the supply should ideally not change.

That begs the question: How could the natural decay be stopped? There are basically two options:

  1. A central identity can gain access to wallets and retrieve lost tokens.

  2. Lost token are automatically added to the overall supply. (Inflation)

No. 1 is not an option for a immutable database. A tool like this could destroy the integrity and make a trustless system rely on the trust of the central identity.

No 2. is very difficult to manage: How high should the inflation be? It should be as high as the deflation, keeping the supply stable.

The difficulty lies in the central question: How can the deflation be registered?

It can’t. You have to rely on wallet movement. If the wallet has no movement for x amount of time, the access to the token is probably lost. The probability rises with the time x.

The inflation could be determined that in case a wallet has a 99% probability of being lost, the token (Gas + Neo), that are inside the wallet, will be added to a pool and people that vote, will get these token payed out. Neo would have to be raffled (because whole Neo and that stuff). In case that a wallet registers movement, even though the token were predicted to be lost, the amount is internally registered to the total supply. If an other wallet has tokens that are lost with a high probability, these lost tokens are subtracted from the floating supply until less than 100 Million token are in active circulation. Then more token are added to the pool.

This way we keep a stable supply and we won’t have an active inflation.

If I missed something, please let me know.

Edit:

I’ve just read that you want the voting be time-locked. How do you want to keep the CN’s in power if a mayority of votes get send back at a certain amount of time?

The only solution would be if CN’s can’t lose control during the voting period.

For example all 5 000 000 blocks a voting period is active. During that period, all nodes that were active during block 5 000 000 remain active the next 50 000 blocks. (10 Days)

During that time, new CNs can be voted in. At block 5 050 001, the newly voted CNs are elected.

Otherwise we are running the risk that we won’t have any votes on the nodes.

EdgeDLT commented 6 years ago

As I see it, even a dead wallet could have an active voting going on, receiving system fees and acting as a Black Hole.

Voting contracts are unique and exist only for the voting period.

Let's say you have a wallet with 10 NEO. You send them to the voting contract, and then lose your private key. The voting contract registers your votes, distributes your GAS and returns your NEO at the end of the voting period. The 10 NEO is now back at your address, but you can't access it (no private key). Because you can't submit your NEO to the next voting contract, you don't receive GAS.

The GAS supply doesn't increase from inflation, and it doesn't decrease from new GAS being distributed to a black hole.

cryptogirlHODL commented 6 years ago

A blackhole situation can be avoided by making the 'staking' process an active one that requires occasional repeating. For example, it could be required to lock-up the NEO for (for example) 30 days in order to get voting rights/GAS distribution for that period. After this period ends, the 'staked' NEO gets unstaked and will need to be staked again.

If a black hole should ever occur then at most these can only 'stake' for one period (should this miraculously happen), after which the address will be unable to stake again since it is a black hole. As such, after the lock-down period ends, all black hole issues are solved.

This change does require a periodical action from NEO hodlers in order to keep 'staking' their NEO, but I see this as a positive thing as it means only active participants can vote.

BehindYou27 commented 6 years ago

Hint: Small edit in previous comment. The issue of time locked voting.

But this would only work with Neo that are being staked.

Other addresses are lost (forever).

The good thing is, that transaction fees can only end up in the wallet during the vote.

They can’t be retrieved once the wallet is lost, therefore lowering the supply.

This will definitely slower the amount that tokens are lost in a given timeframe, but it won’t stop a decay of tokens forever.

EdgeDLT commented 6 years ago

I'm not really following you here, you've lost me a little. Votes aren't time-locked, the contract is.

Timeline example, ignore the super arbitrary block timings:

CNG = Consensus Node Group.

etc. In each voting period, users are required to submit to the new voting contract. As a result, 'black hole' addresses only receive GAS for a single voting period. Supply will always diminish a small amount due to human error, but it's unlikely to make much of a difference, even over a huge number of years.

ghost commented 6 years ago

In the case of airdrops such as ONT, wouldn't that require everyone to pull their NEO out of the voting in order to receive the airdrop?

EdgeDLT commented 6 years ago

If we use consistent voting periods, we should know which blocks will be voting periods well in advance.

Anyone doing an airdrop will simply need to take their snapshot at any block height outside of the voting periods. In these timeframes, no one will have NEO submitted to a contract or locked in a contract, so the snapshot will be accurate.

cryptogirlHODL commented 6 years ago

In the case of airdrops such as ONT, wouldn't that require everyone to pull their NEO out of the voting in order to receive the airdrop?

Possibly - I don't have the technical knowhow to know. I suppose it depends on how the voting mechanism is implemented too.

Regardless, one has to wonder whether airdrops should stand in the way of progress. Perhaps there exists another way to distribute rather than on 'Amount of NEO currently in a wallet'. MasterContract Token airdropped to addresses that held NEP-5 tokens in the past, but which had none at the time of the snapshot. In other words: other models of airdropping can be found.

With smart contracts getting cheaper, I am not sure we even want the traditional model of passive airdrops, convenient as they may be for lazy hodlers. Just look at Ethereum's spam-airdrops - do we really need a similar situation on NEO?

BehindYou27 commented 6 years ago

Ahh, got it.

I expected that the tokens were locked during the whole consensus.

Just to make sure I understand it correctly:

Between block 5000 and 10000, Neo are locked. This is the period that prevents exchanges to participate. The Gas that is distributed then can only be from the CNG1 voting process, because it’s unknown how much gas will be redistributed/in the pool from block 10k-20k. The gas will be sent to the wallet from which the voting happened.

I hope that you don’t constantly facepalm yourself in case I ask questions with obvious answers.

Yeah, but I thought that Eric was talking about this exact case with only minimal loss of tokens. We don’t know how long this project will run so to make it for eternity, we would have to create a tool that balances out the human error.

I personally don’t think we need it but in case we have to (because upgrades in the future will be nearly impossible), this would be the way I’d calculate the needed gas to keep the supply stable.

cryptogirlHODL commented 6 years ago

If we use consistent voting periods, we should know which blocks will be voting periods well in advance.

Why use static voting periods at all? Why not make it a dynamic process? The way I envision it is that I lock down my NEO on august 1st in order to vote for the next X days/weeks. Then you, for whatever reason, do the same a week later. My lock-down-voting period now ends one week earlier than yours.

Static voting periods and dates just makes things rigid, while dynamic voting allows more freedom and flexibility.

It does mean that there are no predefined dates that are suitable for airdrops, though. I just don't think we should consider airdrops too much in this decision making as the importance of governance far exceeds being able to easily airdrop-spam every NEO address out there.

kokahunter commented 6 years ago

Users are required to lock their NEO into a contract to vote.

No matter what voting mechanism may be in place in the future I don't like the idea of locking NEO into a contract. That would mean the stakeholder has to send his own NEO to a contract and loosing the control of his investment (even if it is for a short period of time).

To own NEO --> Means owning a share of the NEO blockchain. A signed voting-transaction should be sufficient for voting - without sending NEO to another address.

There could be core functionality that tracks if NEO has been used for voting, to control the GAS distribution.

cryptogirlHODL commented 6 years ago

No matter what voting mechanism may be in place in the future I don't like the idea of locking NEO into a contract.

Anything you do on the NEO blockchain happens through a smart contract. Hence, anything you do with a NEO token happens through a smart contract. The length of time that it spends inside the smart contract, is defined in the smart contract.

As long as the smart contract is solid, you will not lose control of your investment. It is similar to how you do not lose control of your tokens when you operate on a DEX.

EdgeDLT commented 6 years ago

@BehindYou27

You are correct yes.

Keep in mind that we can always make changes in X many years if we are noticing issues with supply. We shouldn't rush to implement measures now before understanding their repercussions. Design for now and the foreseeable future, and re-assess at a later date. Upgrades will definitely not be impossible; as long as the community is on-board with any changes, nodes will update to incorporate the revisions. This is how we update, unlike other networks that fork.

@cryptogirlHODL

It's possible we could use a dynamic system instead, but this does add complexity. This will require more discussion with the Foundation and their goals. One other advantage of the dynamic system is that we'll have less loaded blocks during the start/end of voting periods.

@kokahunter

No matter what voting mechanism may be in place in the future I don't like the idea of locking NEO into a contract. That would mean the stakeholder has to send his own NEO to a contract and loosing the control of his investment (even if it is for a short period of time).

This is actually really important for the concept. By requiring locked up NEO, you:

Only those dedicated to managing the network should be incentivized to hold NEO tokens. Requiring them to be locked up to gain GAS distribution is a great way to incentivize people to vote, and it provides GAS with use as a utility token. Anyone that wants to invest but not participate in management can simply invest in GAS.

BehindYou27 commented 6 years ago

Does this mean no airdrops

Yes. This would destroy constant airdrops. Good thing we have a token called Gas that would just lie in the wallet, we could get stuff dropped there.

A signed voting transaction

This is not sufficient in order to prevent exchanges from voting. Tokens have to be locked in oder to prevent big institutions to gain control.

kokahunter commented 6 years ago

@cryptogirlHODL

In my understanding a smart contract on NEO blockchain is deployed and has an own address. So by sending "my" NEO to any smart contract I loose the control until the contract allows me to withdraw my NEO again. For reference see the lock contract: http://docs.neo.org/en-us/sc/tutorial/Lock.html

A different story is if the NEO stays in my address just beeing locked (marked for voting). So during the voting those NEO cannot be send to another address or used for anything else. That should be handled internally like e.g. claiming gas.

I think people don't want to send NEO to any contract for voting. It just feels "not good" to move investments to smart contract and withdraw them later. My opinion.

@Edgegasm @BehindYou27 By locking NEO without actually sending them that should work.

Big institutions will always have the power to buy great amounts of NEO and reach great voting power. I don't think we can do much about this.

Thanks for your answers.

EdgeDLT commented 6 years ago

Big institutions will always have the power to buy great amounts of NEO and reach great voting power. I don't think we can do much about this.

This isn't much of a concern. Anyone with a large financial attachment to the network has the right to a say. What is a concern is entities that are holding someone else's tokens (such as exchanges) who could then potentially use them to influence the network. That's why we have the time-lock, which is what we need the contracts for.

Anyway, it's something we'll need to discuss and decide on as a community. If the existing community of holders don't want to have to lock up their tokens, then we shall attempt to find another solution.

BehindYou27 commented 6 years ago

@Edgegasm

I like this idea of locked tokens in the wallet. It should be visible for voters what tokens they really have.

I don’t know if and how this could be done, but it might help with adoption. People like to see their belongings.

They shouldn’t be worried that the contract could gain access of their token. It could be a bad contract. But if the token stays at the wallet it’s not locked-at least I’m not enough of an expert to know how to lock it. I think without using a contact it could only be software wise not blockchain wise locked. If it’s only software wise locked, there will be a way around it. You could use an other wallet for example.

EdgeDLT commented 6 years ago

Agreed. Everything should be very visible. Wallets can have a feature that pulls the contract hash after votes are sent and displays it for that specific user, for example.

I'm assuming the contract can also be automatically generated by the network. If the code works once, it will work always. It only needs to:

If coded to work for one instance, it should theoretically work for every instance.

kokahunter commented 6 years ago

I do support locking NEO for the said reasons. And I think it should be handled differently so that we don't need to send NEO to another address/smart contract.

edit: This has to be implemented in neo core like the gas claim with a special vote transaction. But don't know if this would be possible.

EdgeDLT commented 6 years ago

I'm not sure if such a function can be made that locks tokens without a contract, but maybe one of the devs has some thoughts.

As long as the special transaction remains time-locked, we avoid most issues. Though in essence, it would just be a core contract either way as it would presumably still be going through NeoVM to gain this functionality.

diskooooo commented 6 years ago

@kokahunter, I agree with your concerns. @Edgegasm, please read https://github.com/neo-project/neo/issues/285#issuecomment-404104753.

toghrulmaharram commented 6 years ago

Time-locked transactions are possible without a need for a separate smart contract with a new transaction type. A TxOut could be added to the voting transaction to be sent back to the owner's address along with a 8 byte block index blob to specify the locktime settings of the transaction.

I do not like the idea "time-locked" voting for the following reasons:

  1. Does nothing to supress the plutocracy.
  2. Decreases the NEO circulation for a given period of time potentially severely impeding the traffic of some smart contracts on the platform (notably DEXs; decreasing the liquidity and therefore forcing more users to switch to centralized exchanges which decreases the overall voter turnout and negatively affects the long-term user count of the DEXs).
  3. Rigid vs fluid. In a rigid voting model, time-locking prevents snap elections from happening due to the fact that this could consistently jeopardize the traffic on the network. In a fluid voting model, time-locking consistently decreases the circulating NEO and adds unneeded complexing to the voting mechanism.
erikzhang commented 6 years ago

@diskooooo I also think that we should not send neo to another address/contract to lock it. We should find another way.

EdgeDLT commented 6 years ago

@toghrulmaharramov

I think the general consensus amongst the community is that financial stakes should be respected. We need to avoid plutocracy via token distribution. Decreased liquidity of NEO helps recreate scarcity that is lost through making NEO divisible. Fluid/dynamic voting may indeed be the better approach though. I wouldn't say it necessarily increases complexity, at least as far as the end users are concerned. It would mean that consensus nodes would more frequently move between active or candidate status though. Not sure if that would have any technical drawbacks.

@erikzhang

If we can create a special voting transaction that uses a time-lock, we might be able to get the best of both worlds. All the perks of time-locked contracts, but without requiring users to move NEO outside their wallets. This would be ideal if it's possible. It shouldn't be overly complicated to use those transactions to calculate votes or distribute GAS either.

toghrulmaharram commented 6 years ago

@Edgegasm Financial stakes should be respected, but not allowed to fully overtake the decision-making ability of the small users (which 1 NEO = 1 Vote does). Decreased liquidity will decrease the number of users for DEXs and other NEO-based dApps and will have a negative long-term effect on the voter turnout. Dynamic voting will force the nodes to track all the votes at any given time and will lead to a constantly changing Consensus Node list.

EdgeDLT commented 6 years ago

Financial stakes should be respected, but not allowed to fully overtake the decision-making ability of the small users

This is a token distribution problem more than anything else. Either way, we can use methods that allow for a balancing factor whilst still using the time-lock approach for its other benefits.

Decreased liquidity will decrease the number of users for DEXs and other NEO-based dApps and will have a negative long-term effect on the voter turnout.

Liquidity of NEO during voting periods will always be affected. Also, NEO is the governance token. We should not be trying to incentivize the creation/use of NEO-based dApps. That's just asking to diminish GAS use cases. If such dApps are developed, they must be developed with the understanding that NEO is scarce. Time-locked will have a long-term affect on NEO's scarcity, but that's something the community will want if we opt for divisible NEO. I don't see why it would affect voter turnout. I'd argue the opposite is true; NEO holders want their GAS.

Dynamic voting will force the nodes to track all the votes at any given time and will lead to a constantly changing Consensus Node list.

Indeed. Upsides and downsides to both the static & dynamic approaches. The best solution may lie somewhere in the middle. I don't think this is reason enough to abandon what is arguably the most realistic solution to other issues, such as the diminished value/use for GAS, encouragement of active participation or potential vote impact of centralized exchanges.

mijoka commented 6 years ago

Time-Locked voting contracts seem like a solution which counters the centralized exchanges possibilities to participate in voting. This is not a small thing: in case of the majority or a very large number of NEO tokens are in the hands of just a handful of owners (such as exchanges with the possibility to vote) the power structure quickly becomes extremely skewed (just look at EOS). I'm not sure though if this helps with price stability. Of course during lock periods prices are stable because no one can sell but what happens between them? Might be massive volatility because repressed trading comes back online. Usually price stability is a result of large and consistent volume (e.g. with FX pairs such as EURUSD).

However, what comes to the discussion about making NEO divisible I'm somewhat stunned to be honest. I'm assuming the idea is to try even the distribution of NEO tokens? But at what risk, possible cost and uncertainty about will the end result be exactly the opposite! Or is there any other purpose this divisibility would possibly serve? The current economic model is widely considered to be a rock solid, and I personally consider it as a masterpiece since it seems to nail it down from every aspect game theory wise. The model hasn't been tested in practice obviously yet but the theoretical foundation is there and it is steady.

Now, by making NEO divisible we open the door to a path of which consequences have not been thought out properly or so it seems to me based on the conversation I'm seeing. I'm afraid believing in that time-locked voting contracts will hold the current structure in place is unsophisticated thinking because divisible NEO means:

1) that there are going to be a lot of owners having only fractions of NEO. X amount of them are not interested in locking their tokens for Y amount of time because the amount of GAS they would be able to collect is so small that they won't bother, or for some other reasons they simple won't do it. The realistic assumption is that an average/small NEO holder won't be locking tokens for a tiny compensation in GAS in the future

2) due to the fact above, there will be market for dapps and many others who will not only offer but also make it more convenient/cheaper for users to pay with NEO than GAS. Why? Because it is possible and also profitable: accumulating NEO makes it possible for them to use it to gather some GAS and voting power on NEO at the same time. As time goes on, successful dapp companies/other service providers will become very large owners of NEO. Not necessarily a bad thing per se, but certainly this will not be towards token decentralization but the exact opposite than what was tried to achieve with divisible NEO

3) due to the fact above, instead of a well defined dual-token economic model we now have actually a three-token model: NEO being a governance and utility token, and GAS being a reduced utility token. Then, people start to wonder why should we use GAS when we can use NEO for the utility (and I vision with better terms than GAS)? And there you have it at the end, a one-token model. Maybe this will play out well who knows but the fact is this path needs to be researched thoroughly before implementation since it might bring up some unintended or destructive consequences to NEO as a whole.

So the real $100B question is: Why on earth take the risk and introduce a second, competing utility token next to GAS? Because that is what is going to happen with almost 100% certainty when making NEO divisible. The current model is a home run from NEO ecosystem perspective.

Emotions cause us to react. Logic dictates that we stay disciplined. Let's not do any hasty decisions at this point of the game. We deserve that for ourselves.

EdgeDLT commented 6 years ago

@mijoka

Divisible NEO is intended for both accessibility, and to allow users to pull smaller quantities away from exchanges. Even if someone only owns a tiny fraction of NEO, the GAS generated over a long period of time is still going to see the same % return on investment as someone with 1000 NEO. That tiny quantity of GAS still has increasing value. GAS payouts are proportional, ROI is the same.

As for your second point, I disagree entirely. dApps created to accept NEO are decentivized because most of their business is locked up. In addition, people aren't going to want to spend the token that gives them a say in consensus and free GAS. They would just spend the GAS instead. With this model, most NEO-based dApps are going to be hard pressed to find success. There's just little to no market for them, and no desire for users to pay their NEO.

toghrulmaharram commented 6 years ago

This is a token distribution problem more than anything else. Either way, we can use methods that allow for a balancing factor whilst still using the time-lock approach for its other benefits.

Only the voting mechanism can somewhat balance the influence of the users and the time-locked voting doesn't do that.

Liquidity of NEO during voting periods will always be affected. Also, NEO is the governance token. We should not be trying to incentivize the creation of NEO-based dApps. That's just asking to diminish GAS use cases. Time-locked will have a long-term effect on NEO's scarcity, but that's something the community will want if we opt for divisible NEO. I don't see why it would affect voter turnout. I'd argue the opposite is true; NEO holders want their GAS.

The liquidity of the NEO will only be affected if we choose the voting mechanism that does affect the liquidity. Otherwise, nothing will be affected. On top of that, people seem to forget that only 10% of the overall GAS supply has been issued by now, so it will take a while before we get enough GAS to support the required liquidity. GAS-use can only be incentivized after the majority of the supply is issued.

I don't think this is reason enough to abandon what is arguably the most realistic solution to other issues, such as the diminished value/use for GAS, encouragement of active participation or potential vote impact of centralized exchanges.

This exactly the reason to abandon the solution. Without an efficient structure for both blockchain and vote confirmation, the nodes are going to lag and therefore the network is going to see a reduced tps. Node performance should have a higher priority than the voting mechanism either way.

EdgeDLT commented 6 years ago

@toghrulmaharramov

Only the voting mechanism can somewhat balance the influence of the users and the time-locked voting doesn't do that.

Time-locked voting only means limiting the movement of NEO during voting periods (and preventing votes being changed after the lock). We can use any number of mechanisms to actually count the votes.

The liquidity of the NEO will only be affected if we choose the voting mechanism that does affect the liquidity. Otherwise, nothing will be affected.

Without time-locking, I'm completely opposed to divisible NEO.

so it will take a while before we get enough GAS to support the required liquidity. GAS-use can only be incentivized after the majority of the supply is issued.

It'll take a while for adoption too. Only a tiny amount of the current GAS is being used, we've got lots of room to spare. In addition, GAS is being recycled anyway. The volume will keep moving, I don't see us having liquidity issues with GAS any time soon.

Without an efficient structure for both blockchain and vote confirmation, the nodes are going to lag and therefore the network is going to see a reduced tps

What wouldn't be efficient about this process that would negatively impact node performance?

If we use static vote periods, the nodes will experience more stress at particular block heights. If we use a dynamic system, we're unlikely to see the same effects but then CNs will be rotating more frequently (something ONT doesn't seem to be worried about despite doing this on a much larger scale?)

@BehindYou27

I like indivisible NEO as much as the next guy, but we need to look for ways to increase decentralization wherever possible.

toghrulmaharram commented 6 years ago

Time-locked voting only means limiting the movement of NEO during voting periods. We can use any number of mechanisms to actually count the votes.

The is no need for time-locked voting if we use Canesin's PoW Voting, my Representative Voting or other alternative voting mechanisms.

It'll take a while for adoption too. Only a tiny amount of the current GAS is being used, we've got lots of room to spare. In addition, GAS is being recycled anyway. The volume will keep moving, I don't see us having liquidity issues with GAS any time soon.

There is not even close enough GAS to provide us with liquidity at the current moment. GAS recycling has nothing to do with the current circulating supply. Recycling just redistributes the currently available GAS. Adoption already exists. Switcheo had exceeded 2m$ daily volumes on multiple occasions, which would have required roughly 200,000 GAS available to the limited number of DEX users. I think it is unreasonable to think that there would not have been a liquidity problem if the smart contract did not allow for NEO-based pairs.

toghrulmaharram commented 6 years ago

What wouldn't be efficient about this process that would negatively impact vode performance?

Dynamic voting would require the nodes to constantly track all the NEO that has been voted with to make sure that none have been double-voted with to dynamically adjust the current vote results.

EdgeDLT commented 6 years ago

The is no need for time-locked voting if we use Canesin's PoW Voting, my Representative Voting

As I understand them, neither of these assist in creating scarcity with divisible NEO, and they both diminish stakeholder power quite heavily. Are they designed under the assumption that NEO remains indivisible?

Your representative voting doesn't prevent exchange influence over elections either, at least as I understand it. In addition, you remove the agency of voters by narrowing their choices of representatives to a random pool. Users should always be able to pick their own candidates. If I want to vote for node X, I want to be able to vote for node X. With representative voting, I need to have my wallet address put me in a vote pool that happens to contain representative Y, who then assures me he will vote for node X if elected. This might balance vote weights better, but it's far from an elegant solution as it is right now, unless I'm misunderstanding things.

I'm not sure about the inner workings of @canesin PoW and how that influences scarcity or exchanges, though I've seen how it helps prevent using multiple wallets to vote. Would appreciate an explanation from him.

Also from most community members that I've spoken to so far, the general thought is that if you have a large financial stake in the network, you should be entitled to a large say in consensus. The only entities with enough tokens to unfairly influence consensus right now are the NEO Foundation & exchanges. We'll be dependent on the Foundation distributing their tokens no matter what, but exchange influence must be limited somehow.

Switcheo had exceeded 2m$ daily volumes on multiple occasions, which would have required roughly 200,000 GAS available to the limited number of DEX users.

Based on current GAS prices, sure. If GAS was being used instead of NEO, the price would not be as low as it is now. This is what happens when NEO is being used for utility instead of locked for governance. Even indivisible NEO is eating into GAS's use cases because of the current low prices, hah.

mijoka commented 6 years ago

@Edgegasm

If the reason for divisible NEO are only to offer easier accessibility and withdrawing from exchanges then these are not sufficient reasons at all to change the current model.

dApps created to accept NEO are decentivized because most of their business is locked up

What do you mean by this? Why & how would their business be locked up if all they do is offering different payment solutions (NEO & GAS) to people? This sounds like a former Soviet Union type of thing: "We will lock you up if you start offering NEO as a payment option. Use GAS and you'll be fine". If people think NEO should be a viable payment option then they could vote such consensus nodes.

Also, I think it's a bit naive to think people would automatically use GAS instead of NEO because of future dividend possibilities + voting power. If dapp creators create such tempting payment terms (which they will, just look at current credit offerings anywhere) that paying with NEO is cheaper during that moment (i.e. if you exclude potential future GAS dividends meaning the opportunity costs from the equation ) then many many people will choose NEO. That's just the way it is. Look at people's desire to buy things on credit vs saving/investing, they want things now and here. So anyone saying that an average person won't buy with NEO if it's cheaper is just cheating himself. I understand how ROI works and we are both investors/speculators but we are talking about average population here. The markets would eventually decide how this will play out.

All I'm saying is that by making NEO divisible we are opening the door to such chain of future events which are very hard to imagine at this stage. To take a huge risk and do this only for the sake of accessibility sounds pretty insane to me I have to say. The current system is easy to understand and well crafted, from every angle.

EdgeDLT commented 6 years ago

What do you mean by this? Why & how would their business be locked up if all they do is offering different payment solutions (NEO & GAS) to people?

I'm talking about service fees, not payment choices. If people want to pay with their NEO, they can pay with their NEO. But if service fees (like system calls) are created, they should be incentivized to use GAS, the utility token.

If most NEO holders are locking their NEO for votes/dividends, dApp creators have a reason to use GAS for service fees instead of NEO; simply because most NEO won't be actively traded outside of specific periods. The point of all of this is to solidify NEO as a governance token, and GAS as a utility token.

The current system is easy to understand and well crafted, from every angle.

The current system is flawed. NEO, despite being indivisible, is being used for utility instead of GAS. We have no incentives to use GAS, and the current voting system encourages plutocratic collusion.

Whatever solution we go with, we absolutely must ensure that NEO & GAS have clearly defined uses with incentives for each. Without that, the two-token model is pointless.

toghrulmaharram commented 6 years ago

As I understand them, neither of these assist in creating scarcity with divisible NEO, and they both diminish stakeholder power quite heavily. Are they designed under the assumption that NEO remains indivisible?

Whether with divisible NEO or not, both of the voting mechanism proposals should be completely functional. I don't understand the reasoning behind the introduction of NEO divisibility unless we are abandoning GAS.

Your representative voting doesn't prevent exchange influence over elections either, at least as I understand it. In addition, you remove the agency of voters by narrowing their choices of representatives to a random pool. Users should always be able to pick their own candidates. If I want to vote for node X, I want to be able to vote for node X. With representative voting, I need to have my wallet address put me in a voting pool that happens to contain representative Y, who then assures me he will vote for node X if elected. This might balance vote weights better, but it's far from an elegant solution as it is right now, unless I'm misunderstanding things.

It does prevent exchange influence because it would require the exchanges to split their hot wallets among 2/3 of the voter pools to have a say at the final result of the Consensus Node elections, but at that point, the amount of NEO in each pool will not be enough to be the decisive factor. This is a compromise that my design choice is willing to take to decrease the inequality and make the space use more efficient.

Also from most community members that I've spoken to so far, the general thought is that if you have a large financial stake in the network, you should be entitled to a large say in consensus. The only entities with enough tokens to unfairly influence consensus right now are the NEO Foundation & exchanges. We'll be dependent on the Foundation distributing their tokens no matter what, but exchange influence must be limited somehow.

I am under the impression that this issue is quite divisive with the dev community being roughly split into half-and-half. Additionally, we base it on the assumptions that there will be no major bagholder cartels, combining their wealth to influence the outcome.

Based on current GAS prices, sure. If GAS was being used instead of NEO, the price would not be as low as it is now. This is what happens when NEO is being used for utility instead of locked for governance. Even indivisible NEO is eating into GAS's use cases because of the current low prices, hah.

I think that it is quite arrogant to assume that the price of GAS will ever exceed the price of NEO. NEO will realistically always exceed the price of GAS as long as NEO remains the token to generate the profits (a.k.a. GAS) for its holder.

EdgeDLT commented 6 years ago

Whether with divisible NEO or not, both of the voting mechanism proposals should be completely functional. I don't understand the reasoning behind the introduction of NEO divisibility unless we are abandoning GAS.

Isn't user accessibility, removal of fractions from exchanges and assistance in decentralization reason enough? Although I do wonder if we could use a precision of 1 or 2, rather than copying GAS's 8. It would be a more balanced way to do it.

It does prevent exchange influence because it would require the exchanges to split their hot wallets among 2/3 of the voter pools to have a say at the final result of the Consensus Node elections, but at that point, the amount of NEO in each pool will not be enough to be the decisive factor.

The decisive factor isn't the only consideration though. Sure, exchanges might not be able to elect all 2/3 alone, but they can elect enough to cause delays or other issues. This method will also suffer from increased random voting of candidates, which gives any cartel a better shot at disrupting consensus.

I am under the impression that this issue is quite divisive with the dev community being roughly split into half-and-half.

I've found the non-developer community to be a little bit less divided. Either way, it would be useful if we could poll a large number of NEO holders. Not much point developing a system that doesn't represent the overall community.

I think that it is quite arrogant to assume that the price of GAS will ever exceed the price of NEO

GAS doesn't need to exceed the price of NEO. Any increase to the price of GAS will see a proportional reduction in the amount of GAS needed to process a specific volume.

The 24h trade volume of GAS is $5.8m. That means up to 533,954 GAS is being traded at current prices. We have 10M in circulation already. I really can't see any liquidity issues occurring in the future, and supply is always increasing. If trade volume spikes, the price is not going to stay at $10.

toghrulmaharram commented 6 years ago

Isn't user accessibility, removal of fractions from exchanges and assistance in decentralization reason enough? Although I do wonder if we could use a precision of 1 or 2, rather than copying GAS's 8. It would be a more balanced way to do it.

I think removal of fractions from exchanges is the only realistic issue for now.

The decisive factor isn't the only consideration though. Sure, exchanges might not be able to elect all 2/3 alone, but they can elect enough to cause delays or other issues.

How exactly though? They can decrease the number of voting NEO by not voting and that is it.

This method will also suffer from increased random voting of candidates, which gives any cartel a better shot at disrupting consensus.

This method will suffer from as much random voting as any other proposed method. Timelocked voting does nothing to circumvent that either.

I've found the non-developer community to be a little bit less divided. Either way, it would be useful if we could poll a large number of NEO holders. Not much point developing a system that doesn't represent the overall community.

As I have said previously, while the user feedback is important, the technical aspects should be decided amongst the developers.

GAS doesn't need to exceed the price of NEO. Any increase to the price of GAS will see a proportional reduction in the amount of GAS needed to process a specific volume.

The 24h trade volume of GAS is $5.8m. That means up to 533,954 GAS is being traded at current prices. We have 10M in circulation already. I really can't see any liquidity issues occurring in the future, and supply is always increasing. If trade volume spikes, the price is not going to stay at $10

Most of the circulating supply does not circulate on a daily basis. You are assuming that the current circulating supply will suffice only based on the current DEX volumes, however, with introduction of NEX and Aphellion, the daily volumes will drastically increase.

mijoka commented 6 years ago

@Edgegasm

The current system is flawed. NEO, despite being indivisible, is being used for utility instead of GAS. We have no incentives to use GAS, and the current voting system encourages plutocratic collusion.

I'm having a hard time to follow your thinking here. Yes of course the incentives to use GAS is very limited at the moment because the network is not yet fully up-and-running. This will happen once asset and contract creations and therefore fees will happen sometime in the future. How does making NEO divisible help here with anything? People speculate with NEO and it is being used as a pair in exchanges with quite a bit of volume so do you think we should lock up NEO and drive that volume to GAS?

Whatever solution we go with, we absolutely must ensure that NEO & GAS have clearly defined uses with incentives for each. Without that, the two-token model is pointless.

I couldn't agree more. Which exactly is why I'm wondering why would anyone want to make NEO token more like GAS, i.e. divisible. The current model is not pointless. Might be at the moment but not when going forward.

EdgeDLT commented 6 years ago

I think removal of fractions from exchanges is the only realistic issue for now.

It would be incredibly myopic to design a new system without considering how the ecosystem would look after a price increase.

How exactly though? They can decrease the number of voting NEO by not voting and that is it.

2/3 of nodes are required to decide consensus for yourself, but only 1/3 are required to resist consensus by forcing constant view changes. Considering the voter apathy caused by an approach like this, it's hard to believe this method would not be fragile to manipulation by exchanges in some capacity.

This method will suffer from as much random voting as any other proposed method. Timelocked voting does nothing to circumvent that either.

Time-locking has nothing to do with the voting method, it's the mechanism I'm using to address other issues such as divisible NEO's damage to GAS's value proposition.

My proposed voting method is satisfaction approval voting, which is much more user friendly than the other approaches. You look at a list of candidates, decide which ones you like, and note them all as approved. Your vote is split between the candidates so that it accurately represents your financial stake. Done. Barely any time required to become informed, and no need to trust another layer of representatives, and a very simple, intuitive system that represents all token holders well.

As I have said previously, while the user feedback is important, the technical aspects should be decided amongst the developers.

My qualms with your thoughts here aside, if the developer feedback is split 50/50 and the community is leaning in one direction, the choice is clear.

Most of the circulating supply does not circulate on a daily basis. You are assuming that the current circulating supply will suffice only based on the current DEX volumes, however, with introduction of NEX and Aphellion, the daily volumes will drastically increase.

And you are assuming the price will not change as volumes drastically increase. Perhaps it would be prudent to build a model of GAS price against trade volumes so that we can measure our future expectations.

EDIT: Apologies for the close issue miss-click!

toghrulmaharram commented 6 years ago

It would be incredibly myopic to design a new system without considering how the ecosystem would look after a price increase.

Assuming that the price will ever increase drastically enough (x30-40), which is a questionable assumption either way.

2/3 of nodes are required to decide consensus for yourself, but only 1/3 are required to resist consensus by forcing constant view changes. Considering the voter apathy caused by an approach like this, it's hard to believe this method would not be fragile to manipulation by exchanges in some capacity

No, the Representative voting does not require 66% of all the NEO to be voted with to make the election results valid. Threshold voting is a better solution to circumvent the voter apathy and preserve the stability of the platform no matter what.

Time-locking has nothing to do with the voting method, it's the mechanism I'm using to address other issues such as divisible NEO's damage to GAS's value proposition.

Incorrect. Time-locking is the design choice which can only work with a select number of election mechanisms and therefore should be considered to be part of the overall implementation.

My proposed voting method is satisfaction approval voting, which is much more user friendly than the other approaches. You look at a list of candidates, decide which ones you like, and note them all as approved. Your vote is split between the candidates so that it accurately represents your financial stake. Done. Barely any time required to become informed, and no need to trust another layer of representatives, and a very simple, intuitive system that represents all token holders well.

Satisfaction approval voting does nothing to defeat random voting. User is still able to vote for random candidates. If we exclude the vote distribution per NEO, SAV resembles the current voting implementation.

My qualms with your thoughts here aside, if the developer feedback is split 50/50 and the community is leaning in one direction, the choice is clear.

Community consensus could be quite misleading because the majority does not have the understanding to elect the technically superior proposal.

And you are assuming the price will not change as volumes drastically increase. Perhaps it would be prudent to build a model of GAS price against trade volumes so that we can measure our future expectations.

The volume does not have to increase drastically to cause liquidity shortages. With introduction of new DEXs, the overall volume will inevitably increase. Apart from that, the price of GAS directly depends on the price of NEO which more or less will directly depend on the price of Bitcoin for the foreseeable future. DEXs are just an example, with airdrops, ICOs and other essential platform functionality being under threat if we don't incentivize the use of NEO for now.

EdgeDLT commented 6 years ago

No, the Representative voting does not require 66% of all the NEO to be voted with to make the election results valid. Threshold voting is a better solution to circumvent the voter apathy and preserve the stability of the platform no matter what.

I'm not talking about the amount of NEO that needs to be voted with, I'm talking about the effects of voting in a specific fraction of CNs. Voter apathy + whales = heavily whale-influenced nodes being elected. The more complicated and more removed you make the electoral process, the less people will bother to be involved. This just gives more power to colluders.

Incorrect. Time-locking is the design choice which can only work with a select number of election mechanisms and therefore should be considered to be part of the overall implementation.

That's fair. It would work with representative voting, for example.

Satisfaction approval voting does nothing to defeat random voting. User is still able to vote for random candidates. If we exclude the vote distribution per NEO, SAV resembles the current voting implementation.

The point is making it easier for a vote to be informed. The closer they can get to that, the less likely for random voting to be an issue. In addition, randomly voting for nodes you don't care about in this system only needlessly dilutes your vote. Instead, you could just give all your voting power to one node that you actually care about.

This method will absolutely lower the incidence of random voting.

By the way, there is also a re-weighted approval voting approach that you might find more to your own personal preferences. It allows us to reweigh approval between rounds. So if a few large holders collude to elect specific nodes, those votes won't influence approval rates for the other rounds. Sure, they'll get a few nodes no matter what, but they will not get enough to affect consensus. Similar result to representative voting, but less complicated and less trust.

Community consensus could be quite misleading because the majority does not have the understanding to elect the technically superior proposal.

There comes a time where you need to draw a line between technical possibilities and user preferences. This is one of those cases.

Apart from that, the price of GAS directly depends on the price of NEO which more or less will directly depend on the price of Bitcoin for the foreseeable future.

If GAS is properly adopted as a utility token, the demand for it will give it value separate from NEO. This will of course influence NEO's price. It's not logical to suggest NEO will dictate GAS prices, but GAS prices cannot affect NEO.

mijoka commented 6 years ago

@Edgegasm

The current system is flawed

The current dual-token model is not flawed in any way. This is what makes the whole NEO so functional in the first place. It would be great to hear something from Erik why exactly should we have a divisible NEO, this simply goes beyond my understanding.

What comes to a separate thing i.e. voting then yes, there is no good, practical or even theoretical model in place (at least that I'm aware of). This of course is a major issue. Bringing in some outside expertise such as IOHK and setting up some formalized process with them in order to create a well-researched and peer-reviewed voting mechanism (this is what they currently do e.g. with ZenCash) is one option instead of trying to do everything "in-house". But I'm sure NEO team know what they are doing and they know to look what everyone else in the crypto space is doing.

You have created a wonderful proposal for the voting and I'm sure we all appreciate that very much. This is exactly what the community should do. It is great to see NEO team seem to take these proposals seriously. Now at this brainstorming stage we need other proposals and then all of those need to be investigated thoroughly and see how to solve this issue in the best possible manner.

erikzhang commented 6 years ago

It would be great to hear something from Erik why exactly should we have a divisible NEO, this simply goes beyond my understanding.

neo was designed to be indivisible in order to distribute sys_fee more easily. Considering that we have a transaction that generates a 1 gas sys_fee, it can be divided into 100 million parts to all neo holders, each neo being able to get 10-8 gas. This is the technical reason why NEO is indivisible. If we were to use the decimal part of gas as a sys_fee, then indivisible neo would be useless. We have to think of other distribution schemes.

TomRazouxSchultz commented 6 years ago

neo was designed to be indivisible in order to distribute sys_fee more easily. Considering that we have a transaction that generates a 1 gas sys_fee, it can be divided into 100 million parts to all neo holders, each neo being able to get 10-8 gas. This is the technical reason why NEO is indivisible. If we were to use the decimal part of gas as a sys_fee, then indivisible neo would be useless. We have to think of other distribution schemes.

Wouldn’t making NEO divisible only make this problem worse? I.e. someone with 0.1 neo would get 10e-9 gas. This cannot be the reason to make NEO divisible right?

The best solution would be to make GAS have more decimal places, e.g. up to 18. Then a 0.01 gas system fee would lead to 10e-10 gas payout for every NEO without issues. Or do I think too simply here?

mijoka commented 6 years ago

@erikzhang

Ok so if I understand this correctly, and please correct if I've misunderstood something which is absolutely possible, the sole reason for making NEO divisible is a technical one. So, at the moment we can have system fees in GAS only in increments of one (i.e. 1 GAS, 2 GAS etc.) which we are then able to divide and distribute equally among 100 million neo since the minimum unit of GAS is 0.00000001.

Now, if we we have a fee of 0.8 GAS we can't divide this equally among 100 million neo because this would require that we have 9 decimals in GAS instead of 8 which we have now. Each neo should get 0.000000008 GAS which is not currently feasible from technical perspective.

So, instead of making NEO divisible why wouldn't we add the number of decimals to GAS? To me this sounds like a too simple solution which is why I think I might have missed something completely..