neo-project / neo

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

Incentives for the user / developer to release storage #278

Closed igormcoelho closed 3 years ago

igormcoelho commented 6 years ago

In System Fees (http://docs.neo.org/en-us/sc/systemfees.html), Storage.Delete operation has 0.1 GAS cost. That does not incentive Storage reduction. It should be free (or user must even profit with it!). Is there any negative aspect on executing Storage.Delete that must be avoided?

The same should be applied to Storage.Put when used space is reduced (It should cost only over the increased space in KB). Is there ANY negative impact associated to it?

vncoelho commented 6 years ago

People could just delete the storage of others SC free... :dagger: Sounds bad... Ehauehauea Just kidding. You have been always talking about that. Since it is hard to reward that cases, I think that, at least, it should be free.

erikzhang commented 6 years ago

The pricing structure will be adjusted in NEO 3.0, please wait for the new white paper.

shargon commented 6 years ago

I like this idea, a lot of projects don't remove unuseful data

mwherman2000 commented 6 years ago

@everyone You need to realize that physical blockchain storage (blocks and Txs) for "deleted" NEO storage is never freed up, correct?

The transactions that stored the original values and subsequent updates into NEO storage cannot be deleted ... it's a blockchain.

In fact, deleting storage takes up more physical space not less and, in effect, can create another free/cheaper way to store "dumb data" on the NEO blockchain.

Similarly, writing less data for a specific key uses more storage - not less.

I recommend that this issue should be closed.

igormcoelho commented 6 years ago

@mwherman2000 there two ways of storing information: in the blockchain hash data or in Storage space. While blockchain data won't need to be carried out forever, the Storage needs to... so in my opinion (and Ethereum design agrees with that), Storage cleaning must be VERY incentived.

By the way, the blockchain space won't even increase in this case, because if a given function call is performed, it won't be bigger just because it has a Storage.Delete inside (that have been registered already in AVM opcode). So, in my opinion, that should be seriously considered, as soon as possible, and I hope to see that in Neo 3.0 :)

mwherman2000 commented 6 years ago

There is no long lived/replicated Storage Space in the NEO architecture. The only long lived Storage Space is for Blocks of Tx of Opcodes.

Get Outlook for Androidhttps://aka.ms/ghei36


From: Michael Herman (Parallelspace) Sent: Saturday, June 23, 2018 7:34:00 PM To: neo-project/neo; neo-project/neo Cc: Mention Subject: Re: [neo-project/neo] Storage.Delete must be free (#278)

It's irrelevant if it's only a facade.

Get Outlook for Androidhttps://aka.ms/ghei36


From: Igor Machado Coelho notifications@github.com Sent: Saturday, June 23, 2018 5:37:49 PM To: neo-project/neo Cc: Michael Herman (Parallelspace); Mention Subject: Re: [neo-project/neo] Storage.Delete must be free (#278)

@mwherman2000https://github.com/mwherman2000 there two ways of storing information: in the blockchain hash data or in Storage space. While blockchain data won't need to be carried out forever, the Storage needs to... so in my opinion (and Ethereum design agrees with that), Storage cleaning must be VERY incentived.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/neo-project/neo/issues/278#issuecomment-399712296, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AF0a6CmAisSRSpCzvel6vUeJ25fMsRwKks5t_rUtgaJpZM4U0MqP.

mwherman2000 commented 6 years ago

It's irrelevant if it's only a facade.

Get Outlook for Androidhttps://aka.ms/ghei36


From: Igor Machado Coelho notifications@github.com Sent: Saturday, June 23, 2018 5:37:49 PM To: neo-project/neo Cc: Michael Herman (Parallelspace); Mention Subject: Re: [neo-project/neo] Storage.Delete must be free (#278)

@mwherman2000https://github.com/mwherman2000 there two ways of storing information: in the blockchain hash data or in Storage space. While blockchain data won't need to be carried out forever, the Storage needs to... so in my opinion (and Ethereum design agrees with that), Storage cleaning must be VERY incentived.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/neo-project/neo/issues/278#issuecomment-399712296, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AF0a6CmAisSRSpCzvel6vUeJ25fMsRwKks5t_rUtgaJpZM4U0MqP.

erikzhang commented 6 years ago

See #286

lllwvlvwlll commented 6 years ago

Delete should really only be incentivized where it is performant. Conventionally, It is more efficient to clean storage only when it is needed due to the compute requirements and quality impacts associated with making changes.

Introducing free codes also has the risk of opening us to compute exploitation.

vncoelho commented 6 years ago

@lllwvlvwlll, Tyler the great, nice very gud. Nice insights.

We like to clean everything! aheuahueahueaea Exploitation of it would be hard because the transaction would fail (Fault,Break), yes (accessing something that does not exist anymore for example)?

Transactions with only deletes would probably enter in the limited quota of free transactions, perhaps, some greedy heuristic could postpone these free/delete-only transactions if the free block part is already full.

igormcoelho commented 6 years ago

@lllwvlvwlll Tyler, perhaps it's better to discuss in the other thread... this idea conflicts/adds up with all the others related to the new pricing model.

igormcoelho commented 5 years ago

Now we are back to Neo 3 roadmap, this is an important change. Another option is to get money back from delete too... an even bigger incentive!

Useful for: https://github.com/neo-project/neo/issues/824

shargon commented 5 years ago

Nothing should be free, but i agree that could be cheaper

igormcoelho commented 5 years ago

It should be more than free... negative is better :joy: its a favor done to the network.

ioannistsil commented 5 years ago

It should be more than free... negative is better its a favor done to the network.

awesome idea :)

lock9 commented 5 years ago

@shargon how can we incentivize the user to release space? We either incentive the user to release space (good way) or "punish" them for using it 'irresponsible'? I don't think the second option is doable

lock9 commented 5 years ago

@neo-project/core we need to decide about this.

I think that it can be free if we release more than 'x' bytes. or pay back the user, to create an incentive. Maybe return part of the gas to cover the costs of the current running transaction (not sure if neo-vm is compatible with this).

If we "payback" the user, if we insert "2 keys with both using 1024 bytes", the first TX would cost 2 gas, but the "update" would cost 1 gas only (if we have 50% payback).

We really want to incentive users to release space, we need to think about a good solution here, it has huge long term impacts.

igormcoelho commented 5 years ago

Payback is nice and compatible, we just need to put a negative price per released byte. Ideally for me, sending assets to someone that already has assets, or sending all assets to anotger account, should be free, or nearly free (from sysfee perspective, but still paid from netfee perspective). Only slight byte differences in bigint representation would matter, but if reducing is much cheaper than adding, we can achieve this behavior (perhaps Delete = -2 * Put)... but these negative impacts should only affect other Storage paid stuff, not other operations, as these things may become dangerous too, and could create eternal loops xD Put Delete 1000 loops Put Delete 1000 loops...

lock9 commented 5 years ago

@igormcoelho agreed. So you think paypack is feasible? In the same transaction only?

shargon commented 5 years ago

My proposed design:

lock9 commented 5 years ago

@shargon should we allow a negative number in the gas consumption? I think it is the only way to make this "correctly". What do you think?

shargon commented 5 years ago

Negative means 0, no reward. You will pay less if you remove some entries.

lock9 commented 5 years ago

@shargon I mean during execution, the final result I understand cannot be negative

lock9 commented 5 years ago

Hi @neo-project/core, may I assign this issue to me?

shargon commented 5 years ago

If you want, is good for me

lock9 commented 5 years ago

Thanks. I spoke with @igormcoelho he let me do it too. Thanks

igormcoelho commented 5 years ago

No need for my approval man.. go for it! :muscle:

mwherman2000 commented 3 years ago

Purely for the historical record, here's a link to the article I wrote about storing #DumbData for free on the NEO Blockchain in June, 2018. I have no idea if this still works on the current version of NEO: Blockchain #DumbData: Best way to safely store secure, immutable, auditable, historized, permanent data on a blockchain

Here's a link to a NEO Blockchain DumbData example (from the end of the above article).

Best regards, Michael Herman Self-Sovereign Blockchain Architect Trusted Digital Web Hyperonomy Digital Identity Lab Parallelspace Corporation