Skip to content

Reserve redemption assets#726

Open
evgeny-stakewise wants to merge 6 commits into
v5-releasefrom
reserve-redemption-assets-4
Open

Reserve redemption assets#726
evgeny-stakewise wants to merge 6 commits into
v5-releasefrom
reserve-redemption-assets-4

Conversation

@evgeny-stakewise
Copy link
Copy Markdown
Contributor

No description provided.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the operator’s staking flows to reserve assets required for OsToken redemptions so that vault withdrawable balances are not spent on validator registration/funding or meta-vault sub-vault deposits before redemption obligations are covered.

Changes:

  • Validators: subtract per-operator-vault redemption assets from withdrawable assets when computing stakeable balance.
  • Meta vaults: subtract per-meta-vault redemption assets before depositing funds down to sub vaults.
  • Both paths now pull a chain head and query redemption-asset computations from src/redemptions/tasks.py.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
src/validators/tasks.py Computes stakeable assets as withdrawable minus redemption-reserved assets.
src/meta_vault/tasks.py Reserves redemption assets before depositing meta vault withdrawable assets to sub vaults.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/validators/tasks.py
Comment on lines +270 to +273
# Reserve operator's vault redemption assets so that withdrawable assets are spent
# on redemptions first, then on validator registrations / fundings.
redemption_assets = await get_redemption_assets(chain_head)
vault_assets = Wei(max(0, vault_assets - redemption_assets))
Comment thread src/meta_vault/tasks.py Outdated
Comment on lines +56 to +58
chain_head = await get_chain_latest_head()
vault_to_redemption_assets = await get_vault_to_redemption_assets_distributed(chain_head)

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.

Comment thread src/redemptions/tests/test_tasks.py
Comment thread src/validators/tasks.py
Comment on lines +272 to +273
redemption_assets = await get_redemption_assets(chain_head)
vault_assets = Wei(max(0, vault_assets - redemption_assets))
Comment thread src/commands/internal/process_redeemer.py
Comment thread src/validators/tasks.py

# Reserve operator's vault redemption assets so that withdrawable assets are spent
# on redemptions first, then on validator registrations / fundings.
redemption_assets = await get_redemption_assets(chain_head)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good point from Claude:
inconsistent block reads (validators/tasks.py:57,272)
get_redemption_assets reads at the line-57 latest head while
get_withdrawable_assets reads at default EL latest — slightly different
states → transient over/under-reservation. Recommend pinning both to the same
block.

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.

3 participants