In defence of RAM rental markets
RAM is a scarce resource. We can have only a limited amount of it. It’s also essential, dapps built on EOS need it. The most important question is: How to allocate RAM efficiently, so that those who use it for something productive will have the most of it?
Our current model for RAM market is very inefficient. By inefficiency I mean that most of the RAM is held by speculators, not by users and dapp devs who actually need it. Only something like 1-2% of owned RAM is in use. Some of the free RAM is held by developers who know that they will need it in the future, but I think we can say that more than 90% is now in the hands of speculators and hoarders.
This is pretty big failure. We need better model for RAM markets that will incentivize getting RAM only when you need it. That’s why rental market would be much better option.
When you need to pay rent, you don’t acquire the resource just for the sake of having it. You will just lose your money over time and get nothing in return. That would be good in this case, because it would create an incentive not to hoard RAM but to get it only when you actually need it. And when you don’t need it anymore, you will get rid of it so others can use it.
But rental markets have one big problem: what happens when you don’t pay your rent? Usually, like in the real estate, when somebody doesn’t pay their rent they are kicked out. But that’s not a good idea in EOS because there might be something important data stored on the RAM that an account is using. Destroying the data might have big consequences.
So we need a big incentive to pay the rent. There are a couple of ways that I’ve been thinking.
- Require a bond: Users lock up tokens that will be used to pay the rent if it’s not done voluntarily. To create a better incentive to lock enough tokens, the rent could be based on the size of the bond. The more tokens are locked, the cheaper is the rent.
- Freeze the account: If the rent is not paid, the account will be frozen.
These can be combined. When somebody gets RAM, they are required to set a bond for rent of one year. If they don’t pay the rent, it will be deducted from the bond. When there is six months worth of rent left in the bond, the account will be frozen and it can’t be used until the bond is supplied with tokens that make its worth of one year rent again.
This will create pretty good incentive for account holders to make sure the rent is paid on time, or at least only a few months late. There can be cases where somebody just forgets that they have an account, find it later and notice the whole bond has been used for rent. In this case, the account could go into debt. The debt needs to be paid if the owner wants to unfreeze the account.
How to implement this model? We could combine it with the current model quite easily. Just keep the original Bancor algorithm that is used to buy and and sell RAM, and add paying rent on top of it. If an account has, let’s say, more than 10kb of RAM, it needs to pay rent. This makes basic accounts cheap. Normal users don’t need to care about paying rent.
I don’t think the rent need to be even very high in order to make buying RAM a lot more cheaper than it’s now. Even a small rent would force RAM speculators to think how much it makes sense to hoard RAM and for how long.
The goal should be to make the RAM market more efficient. It would be great to reverse the current allocation so that users and developers would have 90% and speculators 10% of the RAM.
Any comments? I’ve been trying to think think about this from all perspectives and it seems to me this should work. Incentives are pretty well aligned and they can be adjusted by changing rent and trading fees. Can anybody come up with a scenario that would create unwanted results?
I think this could be good short term solution that can be quickly implemented. For the long term, Greymass has proposed a solution that might be even better. But it requires complete redesign of the system so I don’t see it happening anytime soon.