Rent Reduction #399
Replies: 4 comments 14 replies
-
|
It's not completely clear to me if STATE_GROWTH_THRESHOLD is a rate of growth or an absolute amount of state. I think both are relevant, so I think any rent changes should take both into account Said in english, if the amount of state isn't close to being an issue, the growth rate of state in a given epoch isn't as concerning as if the amount of state is already high. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
why is this a prerequisite? all of the solutions with this constraint are gameable. i don't see a reason not to discuss more intrusive options. the viable ones i see are
no. it's disqualifying. anything that requires touching every account is disqualifying i'm generally in favor or making the minimum viable changes to the protocol under any circumstances. as i see it today those are
we can save a controller for when the latter becomes tedious and/or we are actually confident in the mechanical performance of the underlying infrastructure. it is almost certainly the right thing to do, it almost certainly not the right time to do it |
Beta Was this translation helpful? Give feedback.
-
|
In the current state, I do not understand why any of this is needed. As a developer, I want the minimum viable safe solution possible that can solve developer pain without introducing additional complexity. I've heard multiple core engineers claim confidence that rent, specifically If the confidence in a decrease being safe is high and it can help us learn what a decrease in rent would do to potentially modeling account address and state growth, why would we not go down that path?
Perfect. Let's ship it. |
Beta Was this translation helpful? Give feedback.

Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
What is the fastest, safest, and most effective solution to Solana's high state allocation costs? That's the question this discussion will be focused on.
First, I want to address the status of the current Dynamic Rent and Compression SIMDs. These were intended to solve a broader category of state related problems, including but not limited to the high rent price. Considering the complexity of and controversy surrounding these proposals, a solution focused more specifically on rent reduction will likely be faster and safer to ship.
Non-disruptive rent increase
Before discussing specific solutions, a prerequisite to satisfy the safety requirement is allowing non-disruptive rent increases. Because it's impossible to know exactly what the state demand curve will be ahead of time (or how that demand curve may change), there needs to be an option to increase rent if excessive state growth occurs, without causing significant disruption to the network or the users.
There are two current proposals addressing this:
Track the.min_balancevalue at the time of an account's creation in the account metadata. Post-execution balance checks use this value instead of the global constantThe downside is that this requires modifying the account structure -- non-trivial but not necessarily disqualifying.Recovery mechanism
With a solution in place for rent increases, the next problem is when and how to increase rent.
min_balancerequirement for new accounts until growth drops back below the threshold.Both of these proposals include a 10x reduction in the
min_balancerequirement; they differ only in how they detect and respond to excessive state growth. There are many different ways to implement and configure the controller but the core form is very simple:f(x)can be any non-decreasing function, but should be selected such that it provides reasonable updates within the given accumulator range. The output is interpreted as the percentage change from the parent rent to the new rent. For example, iff(x) = 10^-10 x + 1thenf(-1B) = 0.9, f(0) = 1, f(+1B) = 1.1. In this case, the percent change increases linearly from -10% to +10% in this range.A benefit of the controller approach is that it exposes much more tangible knobs than the status quo:
STATE_GROWTH_THRESHOLD: the safe growth threshold that, when exceeded, activates the controller. As the client implementations are optimized this value can be increased, allowing for more rent reduction.ACC_MIN, ACC_MAX: accumulator bounds.abs(ACC_MIN)can be intuitively understood as the maximum amount of "slack" allowed. For example, ifACC_MIN = -1Bthen there can be up to 1GB of above target state growth before the controller is engaged.ACC_MAXon the other hand can be interpreted as the maximum growth "debt" that must be repaid with below target growth before rent prices can be reduced again.RENT_MIN, RENT_MAX: bounds on the minimum balance requirement for new account allocations. Thebank.rentvalue will converge towardsRENT_MINduring normal conditions and grow up toRENT_MAXwhen the growth threshold is exceeded. This allows for future safe rent reductions by dropping theRENT_MINvalue.f(x): the update function can be modified in various ways, e.g. more aggressive rent increases when the threshold is exceeded.Being the one who submitted SIMD-0389, it's probably no surprise that the supervisory controller is my preferred approach, but please respond with any criticisms, alternatives, etc. that come to mind.
Beta Was this translation helpful? Give feedback.
All reactions