Skip to content

Commit 8f6ff72

Browse files
committed
Add proposal for adjusting rent
1 parent 8d86fb9 commit 8f6ff72

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
---
2+
simd: '0488'
3+
title: Rent-Adjusted Stake Delegations
4+
authors:
5+
- Jon C (Anza)
6+
category: Standard
7+
type: Core
8+
status: Review
9+
created: 2026-03-06
10+
feature: (fill in with feature key and github tracking issues once accepted)
11+
---
12+
13+
## Summary
14+
15+
A new calculation is proposed to adjust stake delegation amounts during the
16+
partitioned rewards payout system of
17+
[SIMD-118](https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0118-partitioned-epoch-reward-distribution.md),
18+
based on the Rent sysvar parameters at the beginning of that epoch.
19+
20+
## Motivation
21+
22+
If
23+
[SIMD-0438 (Rent Increase)](https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0438-rent-increase-safeguard.md)
24+
is enabled after any of the Rent decreases described in
25+
[SIMD-0437](https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0437-incremental-rent-reduction.md),
26+
a stake account created with lower Rent may have an inflated delegation amount,
27+
consisting of the delta between the previous (decreased) minimum balance and the
28+
new (increased) minimum balance.
29+
30+
Although the potential divergence is on the order of 1/1000 of a SOL per stake
31+
account, an incorrect delegation amount gives validators an artificially higher
32+
stake weight, reflecting stake that is not backed by lamports in a stake
33+
account.
34+
35+
## Detailed Design
36+
37+
During the partitioned epoch rewards calculation outlined in
38+
[SIMD-118](https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0118-partitioned-epoch-reward-distribution.md),
39+
a stake's updated delegation MUST be calculated with the following formula:
40+
41+
```
42+
max(min(delegation + stake_rewards, lamports + stake_rewards - rent_exempt_reserve), 0)
43+
```
44+
45+
Where:
46+
* `delegation`: the account's pre-reward delegated lamport amount
47+
* `stake_rewards`: the account's calculated stake reward lamport amount for the
48+
past epoch
49+
* `lamports`: the account's pre-reward lamports
50+
* `rent_exempt_reserve`: the minimum lamport balance required for the stake
51+
account
52+
53+
During distribution, the `delegation.stake` field (offset `[156,164)`) in the
54+
stake account's data MUST be set to the new delegation amount, expressed as a
55+
little-endian unsigned 64-bit integer.
56+
57+
If the new delegation amount is 0, then `delegation.deactivation_epoch` (offset
58+
`[172,180)`) MUST be set to the rewarded epoch, expressed as a little-endian
59+
unsigned 64-bit integer.
60+
61+
If the stake account does not have enough lamports to meet the minimum balance,
62+
no other change is required. The account will continue to exist as any other
63+
account that does not meet minimum balance requirements as described in
64+
[SIMD-0392](https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0392-relax-minimum-balance-check.md).
65+
66+
The stake weight for the delegated vote account MUST take into account the new
67+
calculation.
68+
69+
New entries in the Stake History sysvar MUST take into account the adjusted
70+
delegation amounts.
71+
72+
During the implementation of block revenue distribution in
73+
[SIMD-0123](https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0123-block-revenue-distribution.md),
74+
block rewards MUST be used to cover the new required minimum balance, so
75+
the formula becomes:
76+
77+
```
78+
max(min(delegation + stake_rewards, lamports + stake_rewards + block_rewards - rent_exempt_reserve), 0)
79+
```
80+
81+
Where `block_rewards` represents the block rewards earned by the stake account
82+
in that epoch. All other variables are the same as before.
83+
84+
## Alternatives Considered
85+
86+
We could fix the minimum balance for stake accounts to the current minimum
87+
balance for 200 bytes. This approach breaks any existing on-chain programs or
88+
tooling that use the Rent sysvar to calculate the minimum balance of a stake
89+
account.
90+
91+
We could explicitly tie this logic to
92+
[SIMD-0438](https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0438-rent-increase-safeguard.md)
93+
or any future proposal to increase rent. That approach would complicate a rent
94+
increase feature, and complicate any attempt for dynamic rent in the future.
95+
96+
This proposal even works if Rent changes dynamically during an epoch, since
97+
delegation amounts will always be correct when new stake weights are calculated.
98+
99+
## Impact
100+
101+
The biggest impact is that a delegation MAY decrease between epochs. Protocols
102+
MUST relax assumptions that delegation amounts only increase or stay the same.
103+
104+
Protocols MUST allow for stake accounts to become inactive as a result of reward
105+
distribution, without an explicit call to `Deactivate` or `DeactivateDelinquent`.
106+
107+
## Security Considerations
108+
109+
Nothing to note in particular.
110+
111+
In general, reward calculation and distribution is a complicated part of the
112+
protocol, and this change introduces more complexity to the calculation portion.

0 commit comments

Comments
 (0)