Reserve redemption assets#726
Conversation
There was a problem hiding this comment.
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.
| # 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)) |
| chain_head = await get_chain_latest_head() | ||
| vault_to_redemption_assets = await get_vault_to_redemption_assets_distributed(chain_head) | ||
|
|
| redemption_assets = await get_redemption_assets(chain_head) | ||
| vault_assets = Wei(max(0, vault_assets - redemption_assets)) |
|
|
||
| # 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) |
There was a problem hiding this comment.
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.
No description provided.