neo-project / neo

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

Make NEO divisible #2118

Closed Tommo-L closed 3 years ago

Tommo-L commented 3 years ago

Reason Even though NEO is NEP17 standard, but it can't be used in many defi projects directly, like swap, cex. It's inconvenienced for many projects and we create a wrapper NEO again at last.

diskooooo commented 3 years ago

Already discussed in-depth in https://github.com/neo-project/neo/issues/319:

Current proposal is to make NEO divisible, something that in practice means increasing the supply of the basic unit and will have huge impacts on the network. The current supply has already shown to be good for distribution of governance power. It preserves all advantages of existing system.

Additional to that making NEO divisible will make voting systems complex, this proposal keep the voting unit.

Projects experiencing inconvenience should: 1) Start to support the TTF Token Taxonomy (https://github.com/InterWorkAlliance/TokenTaxonomyFramework/blob/master/token-taxonomy.md) which clearly supports indivisible tokens, or 2) Choose to use GAS instead, or 3) Create a wrapper anyways as they are used to do now

Exactly how will NEO differ from GAS if NEO is made indivisible? IMO it can have deep repercussions for the ecosystem and it could render GAS useless.

EdgeDLT commented 3 years ago

As @diskooooo mentioned, this idea has been floated and rejected before. It influences scarcity, complicates GAS distribution, and makes the two-token use case (reason for GAS to exist) pretty questionable. Why not delete GAS, make NEO divisible to 18 places, and call it ETH instead?

No one tries to buy a cheeseburger with BRK-A or Apple stock. In the same manner, I don't see why it matters that the NEO token is not natively granular enough for some third party applications. Its primary role is for use in governance, so that is what it should be designed for. If a project wants more granularity, they can either encourage use of GAS, or they can use NEO and handle divisibility on their own end (all CEXs and DEXs that trade NEO already do this just fine).

gaoyuan121 commented 3 years ago

I dont consider governance token and the indivisibility as two mutually exclusive concepts. Most of the circulating governance tokens are divisible, I dont think that significantly weakens the scarcity of those tokens. The traditional perception of stock's indivisibility does not necessarily apply to governance tokens.

If we believe in a decentralized future, the liquidity and finance functionality are inevitably moving onchain. While wrapped tokens can work in some extent, a native divisible token can be more seamlessly integrated into those onchain infrastructures.
From a practical point of view, maintaining both NEO and some version of "nNEO" simply creates more cognitive cost and operational frictions for users without sophisticated knowledge of the mechanism.

In terms of democratization of NEO token and practical usability, divisibility has a clear advantage, and I think the precision issue of NEO for GAS distribution is nothing insolvable.

Anyways, I am just providing some counter argument since the comments is tilted.

EdgeDLT commented 3 years ago

Thanks for providing some balance! I don't think there is anything exclusive about them either, but NEO was made indivisible. I don't see how making it divisible now is functionally any different to multiplying the supply tenfold for each new point of precision. Isn't it essentially a stock split, with all the potential good or bad repercussions that can't be easily predicted?

From a practical point of view, maintaining both NEO and some version of "nNEO" simply creates more cognitive cost and operational frictions for users without sophisticated knowledge of the mechanism.

On the same premise, why are we using a complicated two-token system? NEO and GAS should therefore be merged for practical usability, reduced cognitive cost, and reduced friction for new users. Also, one market cap, not two 😜

i359 commented 3 years ago

Divisible NEO is a wise choice in the long run.

lock9 commented 3 years ago

My 2 cents:

Conclusion: I wish it were divisible, but I don't know how this may affect prices or community involvement. At the end of the day, I see a wrapped divisible Neo supporting both Neo 2 and Neo 3 versions.

vncoelho commented 3 years ago

As @lock9 emphasized, I agree with his points. I believe it is reaching the time to make it divisible.

devhawk commented 3 years ago

It seems pretty late in the shipping cycle to be having this conversation

lock9 commented 3 years ago

Wait, this is not for Preview 4, is it? Please don't change this for preview 4 😂

gaoyuan121 commented 3 years ago

It seems pretty late in the shipping cycle to be having this conversation it is quite late tho..

superboyiii commented 3 years ago

Wait, this is not for Preview 4, is it? Please don't change this for preview 4 😂

Preview4 will not wait for this.

erikzhang commented 3 years ago

In my eyes there is no difference between divisible and indivisible. The only difference is the number of decimal places. And I think difi contracts must support all kind of decimals. 0, 2, 8, 12, or whatever, they all should be supported.

lock9 commented 3 years ago

In my eyes there is no difference between divisible and indivisible. The only difference is the number of decimal places. And I think difi contracts must support all kind of decimals. 0, 2, 8, 12, or whatever, they all should be supported.

I think that this is the central issue: precision. Neo currently has 0 precision. This is bad, especially for DeFi. A simple example:

However, I have a bad idea, listen up: What if we create a 'change'/'coin'/'decimal' NEP17 token, that the user could only have a balance of 0 to 0.999999999, and it is automatically converted to Neo if it reaches a balance of 1 >= ? This would have very little impact on the current implementation because current functionalities won't be affected.

Example:

0 precision is very bad for DeFi, but wrappers are common in DeFi, so I'm not opposed to that solution. The more expensive Neo gets, the more important it is for us to have access to 'fragmented Neo'.

EdgeDLT commented 3 years ago

And I think difi contracts must support all kind of decimals. 0, 2, 8, 12, or whatever, they all should be supported.

Maybe someone can explain why indivisible NEO (now that it is NEP-5/17) is a problem for developers. If you create a wallet, explorer, or something on-chain like a DeFi app, you need to be able to deal with indivisible tokens anyway. That goes for higher divisibility too, a few apps in the ecosystem noticeably freaked out when pnWETH was deployed and suddenly 18 decimals existed.

Something that I don't understand: Why does a contract need to record your NEO balance as 1 after you deposit one NEO? Why can't it register <10000000> and let you fragment the balance however you want whilst you are trading with other users in its storage? At the end of the day, I would think precision only really needs to be respected on deposit/withdrawal from the contract.

You have U$100, you want to buy Neo. At U$17, you can only spend U$85, for 5 Neos

In practice, I spend $100, and can only withdraw 5 of them until I buy the remainder of the sixth. This is how it works essentially anywhere you can buy NEO today.

A reminder that NEO is fundamentally the governance token of the Neo network, and its application as a financial asset is secondary. I think there really needs to be better justification for messing with it, its an uncomfortable precedent even if it did prove to be ultimately meaningless.

What are the actual tangible benefits of making NEO more divisible, and how much divisibility is required to achieve them?

lock9 commented 3 years ago

Maybe someone can explain why indivisible NEO (now that it is NEP-5/17) is a problem for developers.

It is because the math is much harder. Need U$100 worth of a divisible token? EZ, take the value you have and divide it by the price. Try to do the math, on paper, for Neo. You will see the issue.

It is much harder to 'match' a swap operation when you have a token with low precision.

In practice, I spend $100 and can only withdraw 5 of them until I buy the remainder of the sixth. This is how it works essentially anywhere you can buy NEO today.

But don't you see an issue there? You wanted U$100 and ended with U$85. And this is for a Neo at U$17. What if Neo is U$1.000? It will basically be locked out from many Defi operations because you would have to operate with U$1.000, U$2.000, U$3.000, etc.

All exchanges use a divisible Neo. Everybody is using divisible Neo, except for us. 😂

Tommo-L commented 3 years ago

Maybe someone can explain why indivisible NEO (now that it is NEP-5/17) is a problem for developers.

It's not a problem, but not friendly for developers, applications, and users. The higher the price of NEO, the more serious this problem becomes. The main reason is that NEO, as the governance token itself, also need to have a good liquidity, better circulation in users, exchanges, and various applications, and benefit our ecology.

On the other hand, NEO became divisible and does not bring any trouble to governance.

erikzhang commented 3 years ago

Something that I don't understand: Why does a contract need to record your NEO balance as 1 after you deposit one NEO? Why can't it register <10000000> and let you fragment the balance however you want whilst you are trading with other users in its storage? At the end of the day, I would think precision only really needs to be respected on deposit/withdrawal from the contract.

Agree.

EdgeDLT commented 3 years ago

It is much harder to 'match' a swap operation when you have a token with low precision.

Your Swap platform might need to deal with 0 decimal assets, or 4, not just the typical 8. If you want to support all standard tokens, you are going to need normalize divisibility before dealing with balances. This is a natural problem for DeFi apps to account for, it's not a reason to change the NEO token.

But don't you see an issue there? You wanted U$100 and ended with U$85. And this is for a Neo at U$17.

I wanted and ended with $100 worth, even if I could only withdraw $85 of it. The remainder is still my balance in the contract, I can save up for the next NEO or trade the dust for something else. This is a typical experience on Switcheo for example, I don't think there's anything wrong with it.

All exchanges use a divisible Neo. Everybody is using divisible Neo, except for us.

You trade a virtual balance, whether on a CEX or a DEX. It's meaningless outside of withdrawal and deposit. No one is using actual divisible NEO because NEO is not divisible. A 2-of-2 multisig with 1 NEO balance is effectively 0.5 NEO each, no? We don't need to touch the token's physical properties in order to achieve these things.

Assuming NEO is indivisible and increasingly expensive, how many people are willing to buy and hold them, let alone vote for governance? Unless we don't care about NEO's price, or it shouldn't have a price.

Actually I think there is a strength here. It is a guarantee that every vote on the platform has a stake behind it relative to the current value.

Should also keep in mind that stake pools are a proven approach for splitting ownership if price really becomes so prohibitive. Comparatively, fractional shares are offered by plenty of brokers to help investors acquire smaller amounts.

Tommo-L commented 3 years ago

Either using register <10000000> for 1 NEO or Fractional Shares, doesn't this make NEO divisible at the application level by an indirect way? Instead, why not make NEO divisible at the protocol level directly? Reduces a lot of application layer troubles. We see more benefits than disadvantages.

erikzhang commented 3 years ago

You need to support any kind of assets, right? I don't think it's a problem.

vncoelho commented 3 years ago

In fact, @EdgeDLT comment related to handling the decimal is good. I was biased by the UTXO NEO which need wrapping most of the time.

In this sense, NEO 3 Nep5 can be handled easier by most of the applications.

In this sense, perhaps it will not be a barrier anymore. However, I do not still see much drawbacks in making it divisible, perhaps there may be more benefits.

EdgeDLT commented 3 years ago

It is important to recognize that divisibility, like supply, is the closest thing to a "physical property" for a digital asset. It is certainly possible that there are benefits to making it divisible, but the act of changing this fundamental component will have consequences.

The community (overall, though not exclusively) rejected the idea of divisible NEO for this reason last time. The impact of the change cannot be predicted. Maybe nothing happens. Maybe you piss off a few thousand NEO holders and they fork your hard work. Who can say? The point is, there needs to be a damn good reason to mess with it because otherwise there is absolutely no benefit to taking such a risk.

Contracts on Neo3 do not have a NEO token problem. They may have a divisibility handling problem. Frankly that's not really a problem because it is easily corrected by the free market. If your contract cannot deal with the fact that standard-compliant tokens come in different shapes and sizes, it will be replaced by someone else's app that can.

So far this discussion doesn't really have anything to do with the NEO token. I'm open to hearing about any protocol or governance level benefits to divisible NEO which may be enough to merit the change, but so far none have been proposed.

lock9 commented 3 years ago

I understand the arguments, I just don't agree 😂 As a developer and business manager, I think that it is naive to think that 'if the user doesn't do this now, he will come back do to this later'. I think this is quite far from reality, so in other terms: if the user is only able to buy $85 at the moment he is doing his 'shopping', there is a very high chance he will not come back any time soon to buy the additional U$15. And this is just a small example. If prices go up, this issue is going to become even more noticiable. @Tommo-L has the practical experience and he is exposing his pains as a developer. We can either help him or leave as is. Both decisions are 'fine' for me.

But anyway, I can live with an indivisible Neo. It is 'fine'. image

EdgeDLT commented 3 years ago

I think this is quite far from reality, so in other terms: if the user is only able to buy $85 at the moment he is doing his 'shopping', there is a very high chance he will not come back any time soon to buy the additional U$15.

Honestly I think this example is the only thing far from reality. Where have you ever tried to buy NEO and had this experience? Go to any exchange where you can purchase NEO with $100 and you will walk away owning $~100 of NEO. Whether you can withdraw the last $15 to an external wallet is irrelevant, your purchase is one-time and complete no matter where you shop.

(Actually, I know of one exception 😋 anycoindirect.eu will only sell you whole numbers!)

@Tommo-L has the practical experience and he is exposing his pains as a developer. We can either help him or leave as is.

I'm all for looking for ways to remove pains for developers, but do you really believe this is the appropriate solution to this particular pain? What about the next popular indivisible token that an app wants to support? Are we just going to ask every token on the network to update itself and conform to 8 decimals? Maybe we should change NEP-17 so that only 8 decimals is standard and then no developer ever needs to concern themselves with the complexity at all. It's not a realistic expectation, right?

Can we forget the token for a minute and think about a long-term solution to this problem? Maybe we can offer a safe, standardized procedure for normalizing divisibility or something? To me it seems preferable to Russian roulette and a fundamentally unsolved problem.

lock9 commented 3 years ago

@EdgeDLT I have this experience every time I want to withdraw Neo from an exchange. I have the feeling that I lose money every time because there is always a small part of it that cannot be withdrawn. When I withdraw Ether, I can withdraw everything. In our U$100 situation. I just buy the change in Ether, and I don't wait for the next month. Neo is not alone, it has competitors, and if a person can't buy product A, they will just buy the similar product B.

I also ran into this issue when I tried to develop a business model, but it didn't work 'out of the box' because I can't charge a fee on top of Neo holdings. We can't charge a 'commission' on Neo transactions because you can't divide it. I'm telling you, for developers, this sucks hard. I'm 92% fine with keeping it this way because it is possible to circumvent the problem using a wrapped token.

We need more precision on the Neo token to enable more use cases (commission, fees, etc.).
I heard about this guy once that made millions stealing the third digit of bank accounts. Just imagine this, the guy made millions with a fraction of cents (search for 'salami slicing' or 'penny shaving'). For me, this is a clear example of why precision is important. I could even say that the lack of precision is causing Neo to 'lose' millions in trading volume.

Rtribbey commented 3 years ago

If it becomes too expensive later the community could vote to split the Neo token to 1billion coins at 10 to 1.

This is what polkadot did at least.

Excuse errors and brevity as the message was Sent from my iPhone.

On Dec 9, 2020, at 6:48 AM, Edge notifications@github.com wrote:

 It is important to recognize that divisibility, like supply, is the closest thing to a "physical property" for a digital asset. It is certainly possible that there are benefits to making it divisible, but the act of changing this fundamental component will have consequences.

The community (overall, though not exclusively) rejected the idea of divisible NEO for this reason last time. The impact of the change cannot be predicted. Maybe nothing happens. Maybe you piss off a few thousand NEO holders and they fork your hard work. Who can say? The point is, there needs to be a damn good reason to mess with it because otherwise there is absolutely no benefit to taking such a risk.

Contracts on Neo3 do not have a NEO token problem. They may have a divisibility handling problem. Frankly that's not really a problem because it is easily corrected by the free market. If your contract cannot deal with the fact that standard-compliant tokens come in different shapes and sizes, it will be replaced by someone else's app that can.

So far this discussion doesn't really have anything to do with the NEO token. I'm open to hearing about any protocol or governance level benefits to divisible NEO which may be enough to merit the change, but so far none have been proposed.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.

EdgeDLT commented 3 years ago

I don't mind a community vote to increase unit supply through divisibility (with good reason), it's a much more appropriate mechanism for such a change.

@lock9 A stock broker doesn't charge their commission in the stock, they use a currency, USD. ETH is both the share and the currency on the Ethereum network, so it can take that shortcut and I agree, it's direct and user/developer friendly.

The heart of the argument here is that NEO being a currency opens up new applications. So we make that change through divisibility, and now we have a network with a native currency which is also a share, which then emits a secondary native currency which is not a share but you can use to pay for operations and fees. We are now Ethereum but with unnecessary extra steps.

The two-token model doesn't make sense with two currencies. How do you deal with GAS in this scenario?

lock9 commented 3 years ago

Hello @EdgeDLT , Before I move on to your question, I want to show you this: image

As you can see in the image, the ENS business model charges U$5 per year for a domain. This business model is not possible using Neo. How many business models are we missing because of this?

Regarding the Neo being a currency, I think that this is an important discussion. I think Neo is a currency. Maybe it wasn't meant to be this way, but in practice, it is.

Regarding GAS, I think it is ok to have 2 tokens. They are used for different things. Neo is like a share: it is worth some money and give you voting rights. Gas is the money itself.

*I disagree with increasing the total supply because it doesn't fix the problem and only reduces it temporarily.

One more note: We use blockchain to tokenize everything and divide it into smaller parts. We need to tokenize Neo :joy:

diskooooo commented 3 years ago

Before I move on to your question, I want to show you this: image

As you can see in the image, the ENS business model charges U$5 per year for a domain. This business model is not possible using Neo. How many business models are we missing because of this?

Eh, use GAS, the utility token made for these kind of things? You don't pay for a domain with a BRK-A share either. If you want to, for some silly reason I couldn't possibly think of, do that anyway; you sell your BRK-A for USD and use a fraction of your earnings to buy a domain.

If one insists to use the share, use a wrapper - problem solved.

Regarding the Neo being a currency, I think that this is an important discussion. I think Neo is a currency. Maybe it wasn't meant to be this way, but in practice, it is.

Because (third party) projects, all this time, wrongfully utilised NEO instead of using GAS. NEO is a share, a vote / stake in the network, giving people (weighted) governance capabilities. Let's not confuse things for what they really are - this was the design philosophy from the start.

Regarding GAS, I think it is ok to have 2 tokens. They are used for different things. Neo is like a share: it is worth some money and give you voting rights. Gas is the money itself.

Exactly, this is what it is, and it also contradicts your statements above :)

*I disagree with increasing the total supply because it doesn't fix the problem and only reduces it temporarily.

One more note: We use blockchain to tokenize everything and divide it into smaller parts. We need to tokenize Neo 😂

Why does the Token Taxonomy Framework (TTF) standard include support for indivisible tokens then?

lock9 commented 3 years ago

Eh, use GAS, the utility token made for these kinds of things? You don't pay for a domain with a BRK-A share either. If you want to, for some silly reason I couldn't possibly think of, do that anyway; you sell your BRK-A for USD and use a fraction of your earnings to buy a domain. If one insists on using the share, use a wrapper - problem solved. Because (third party) projects, all this time, wrongfully utilised NEO instead of using GAS. NEO is a share, a vote / stake in the network, giving people (weighted) governance capabilities. Let's not confuse things for what they really are - this was the design philosophy from the start.

I agree that we can use a wrapper, and I even agree that projects used Neo instead of Gas, but we can't just 'blame the customer for using it wrong'.

Exactly, this is what it is, and it also contradicts your statements above :)

I don't understand. Why does it contradict my statements? In any case, I can live with a wrapped Neo, but I want to enforce that indivisible Neo is bad for developers. Ok, we can have that business model using GAS, but we can't have that business model using Neo. Actually, I can affirm to you that no fiat-pegged business model will ever work with Neo. This is bad, isn't it? Looks bad to me.

Why does the Token Taxonomy Framework (TTF) standard include support for indivisible tokens then?

I have no idea, but I don't think this means much. They have it because there are indivisible tokens, but this doesn't make indivisible Neo better