Skip to content

program: Use saturating math for reserve accounting#721

Open
joncinque wants to merge 1 commit into
solana-program:mainfrom
joncinque:saturating
Open

program: Use saturating math for reserve accounting#721
joncinque wants to merge 1 commit into
solana-program:mainfrom
joncinque:saturating

Conversation

@joncinque
Copy link
Copy Markdown
Contributor

Problem

The program currently uses checked math on the reserve stake account to figure out how many lamports are part of the pool.

If rent is lowered, and then a new stake pool is created, and then rent is increased again, the checked math will fail since the reserve may not have enough lamports for the new rent-exempt amount.

Summary of changes

As a simple fix, use saturating math.

This change means that the total amount of lamports managed by the pool can be slightly incorrect if rent is increased, but there will only be a small impact on accounting, that doesn't materially impact pool token valuation.

All other stakes will be covered by adjusting delegations during a rent increase event, so this is the only case that can return an error.

#### Problem

The program currently uses checked math on the reserve stake account to
figure out how many lamports are part of the pool.

If rent is lowered, and then a new stake pool is created, and then rent
is increased again, the checked math will fail since the reserve may not
have enough lamports for the new rent-exempt amount.

#### Summary of changes

As a simple fix, use saturating math.

This change means that the total amount of lamports managed by the pool
can be slightly incorrect if rent is increased, but there will only be a
small impact on accounting, that doesn't materially impact pool token
valuation.

All other stakes will be covered by adjusting delegations during a rent
increase event, so this is the only case that can return an error.
@joncinque joncinque requested a review from 2501babe May 27, 2026 17:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant