Skip to content

V5 release - #810

Open
cyc60 wants to merge 77 commits into
masterfrom
v5-release
Open

V5 release#810
cyc60 wants to merge 77 commits into
masterfrom
v5-release

Conversation

@cyc60

@cyc60 cyc60 commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Do not squash!

evgeny-stakewise and others added 30 commits February 9, 2026 18:38
* Add sub vaults registry

* Fix test, refactor encoder

* Refactor encoders

* Cache sub_vaults_registry
* Add update redeemable positions command

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Cleanup

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update api client

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Check arbitrum balance, add min shares arg

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Check boosted shares via subgraph

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add vault proportions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add logs

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Small refactoring

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add API rate limits

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update comment

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename var

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix typo

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes #2

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes #3

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add merkle root

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add progress bar

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Simplify boosted filters

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fetch oseth from graph

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add OsTokenConverter

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Install multiproof

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rm OS_TOKEN_VAULT_CONTROLLER_CONTRACT_ADDRESS

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add integration test for update_redeemable_positions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add integration test for update_redeemable_positions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename package

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix IPFS mock

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Move log

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Copilot fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add arbitrum config

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add min_minted_shares filter

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update sortings

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Copilot fix

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update redeemer contract

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rm leaves sort

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update ABIs

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Skip debank for hoodi

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Unify API_SUPPORTED_CHAINS

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update command params

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add debank to API

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename vault shares

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename redeemable positions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Use multicall to fetch arb balances

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add positions sorting

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename vault shares

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename positions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Refactor graph_get_allocators (#658)

---------

Signed-off-by: cyc60 <avsysoev60@gmail.com>
Co-authored-by: Dmitri Tsumak <tsumak.dmitri@gmail.com>
Co-authored-by: evgeny-stakewise <123374581+evgeny-stakewise@users.noreply.github.com>
* Add update redeemable positions command

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Cleanup

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update api client

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Check arbitrum balance, add min shares arg

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Check boosted shares via subgraph

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add vault proportions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add logs

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Small refactoring

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add API rate limits

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update comment

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename var

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix typo

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes #2

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes #3

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add merkle root

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add progress bar

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Simplify boosted filters

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fetch oseth from graph

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add OsTokenConverter

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Install multiproof

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rm OS_TOKEN_VAULT_CONTROLLER_CONTRACT_ADDRESS

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add integration test for update_redeemable_positions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add integration test for update_redeemable_positions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename package

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix IPFS mock

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Move log

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Copilot fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add withdrawals to cover redemption assets

* Review fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add arbitrum config

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add min_minted_shares filter

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update sortings

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Copilot fix

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add tests

* Update redeemer contract

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rm leaves sort

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update ABIs

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Skip debank for hoodi

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Unify API_SUPPORTED_CHAINS

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Pass block number everywhere

* Update command params

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add debank to API

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename vault shares

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename redeemable positions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Use multicall to fetch arb balances

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add positions sorting

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename vault shares

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename redeemable position -> os token position, cleanup after merge

* Moved get_os_token_position_leaf_hash to method

* Fix sub vaults registry

* Rename sub_vaults_registry -> sub_vaults_registry_contract

---------

Signed-off-by: cyc60 <avsysoev60@gmail.com>
Co-authored-by: cyc60 <avsysoev60@gmail.com>
Co-authored-by: Dmitri Tsumak <tsumak.dmitri@gmail.com>
* Bump sw-utils v0.12.10

* Import from sw-utils
* Rename OsTokenPosition.amount to leaf_shares

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

---------

Signed-off-by: cyc60 <avsysoev60@gmail.com>
Signed-off-by: cyc60 <avsysoev60@gmail.com>

# Conflicts:
#	src/main.py
Signed-off-by: cyc60 <avsysoev60@gmail.com>
* Add update redeemable positions command

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Cleanup

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update api client

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Check arbitrum balance, add min shares arg

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Check boosted shares via subgraph

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add vault proportions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add logs

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Small refactoring

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add API rate limits

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update comment

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename var

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix typo

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes #2

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes #3

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add merkle root

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add progress bar

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Simplify boosted filters

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fetch oseth from graph

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add OsTokenConverter

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Install multiproof

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add process-redeemer command

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rm OS_TOKEN_VAULT_CONTROLLER_CONTRACT_ADDRESS

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add integration test for update_redeemable_positions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add integration test for update_redeemable_positions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename package

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Metavault handling

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add proofs

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix IPFS mock

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Move log

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Copilot fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add withdrawals to cover redemption assets

* Add tests

* Unify is_meta_vault

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Unify redeemable positions fetch

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix contract calls

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Check empty merkle root

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Skip empty positions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Refactoring

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add interval option

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Remove unused options

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Split OsTokenPosition.redeemable_shares into available_shares and shares_to_redeem

* Update tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Use sw utils

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix redeemable_assets filter

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Extract fetch_harvest_params_by_vault from select_positions

* Refactoring

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add get_multiple_harvest_params

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix nonce

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Refactor

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Refactor get_multiple_harvest_params

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Single _try_redeem_meta_vault call

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Refactoring

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Handle zero nonce

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes #1

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add min-queued-assets option

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rm double comparison

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Use IPFS ordering for positions

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Use OsTokenRedeemer multicall

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix needed assets for meta vaults

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Handle nested metavaults (#685)

* Handle nested metavaults

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Copilot fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update except

Signed-off-by: cyc60 <avsysoev60@gmail.com>

---------

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename unprocessed_shares

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename deficit

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix test

Signed-off-by: cyc60 <avsysoev60@gmail.com>

---------

Signed-off-by: cyc60 <avsysoev60@gmail.com>
Co-authored-by: Dmitri Tsumak <tsumak.dmitri@gmail.com>
Co-authored-by: Evgeny Gusarov <evgeny@stakewise.io>
Signed-off-by: cyc60 <avsysoev60@gmail.com>
Signed-off-by: cyc60 <avsysoev60@gmail.com>
* Update-redeemable-positions: startup checks and remove no_confirm

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Use finalized block

Signed-off-by: cyc60 <avsysoev60@gmail.com>

---------

Signed-off-by: cyc60 <avsysoev60@gmail.com>
)

* Update-redeemable-positions: Filter vaults with v1 Os Token config

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Fix tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

---------

Signed-off-by: cyc60 <avsysoev60@gmail.com>
* Fix trivy scan, process-redeemer desc, unity

* Remove unify python3.10 pin, set vulture python3.12

* Pin unify to python3.12

* Set trivy db repo, default python3.12 for pre-commit
* Harvest meta vaults during process-redeemer

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Refresh harvest_params after meta vault harvest

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add help for --skip-harvest

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Recheck current_withdrawable

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Add test for --skip-harvest

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Rename is_meta_vault_state_update_required

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Use single iteration for process-redeemer

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Use multicall for state update

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Small fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Copilot fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Update tests

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Call process_exit_queue after redeem

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Wait for block sync before get_withdrawable_assets

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Skip deposit to sub vaults

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Review fixes

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Stop on ClaimDelayNotPassedException

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Pin block for graph_get_vaults

Signed-off-by: cyc60 <avsysoev60@gmail.com>

* Use chunks for batch_update_vault_state

Signed-off-by: cyc60 <avsysoev60@gmail.com>

---------

Signed-off-by: cyc60 <avsysoev60@gmail.com>
evgeny-stakewise and others added 30 commits June 12, 2026 12:10
…tup (#760)

* Add execution node and wallet balance checks to process-redeemer startup

* Patch startup checks in process-redeemer tests
* Skip reverting positions instead of aborting redemption round

* Update test for skip-on-failure redemption behavior
# Conflicts:
#	poetry.lock
#	src/meta_vault/tests/test_tasks.py
#	src/reward_splitter/tasks.py
* Restore update_vaults_state with batched multicall

* Bump sw-utils v0.13.2

* Fix mypy

* Exclude git deps from pip-audit requirements

* Ignore pyo3 false positive in Trivy scan

* Log vaults being state-updated in update_vaults_state

* Improved loggign
Signed-off-by: cyc60 <avsysoev60@gmail.com>
# Conflicts:
#	src/common/contracts.py
#	src/withdrawals/tasks.py
* Handle contract custom errors in redemptions

* Handle generic exceptions in redemptions execution

* Include error details in redemptions error logs
Signed-off-by: cyc60 <avsysoev60@gmail.com>

# Conflicts:
#	poetry.lock
#	src/config/settings.py
#	src/main.py
#	src/validators/execution.py
* Remove Arbitrum support from redemptions

* Simplify API supported chains lookup
* Save redeemable positions to local file

* Use get_current_timestamp for positions file name
* Cap redemptions by live osToken positions and lazily assign budget

* Refresh osToken converter after harvest and haircut withdrawable cap

* Address review nits in redeemer loop

* Revert redeem loop changes

* Cap aggregated redemption targets by live osToken positions

* Cap assigned shares by live positions instead of leaf shares

* Unify live shares naming

* Simplify comments
* Subtract shares redeemed after the snapshot when building redeemable positions

* Add unmatched boosted shares to kept shares across vaults

* Harden window-redeemed-shares nonce and dust checks

* Trim verbose comments

* Revert "Harden window-redeemed-shares nonce and dust checks"

This reverts commit 0aafd7b.

* Revert "Subtract shares redeemed after the snapshot when building redeemable positions"

This reverts commit eff0d59.

* Flatten guard clause in _reduce_boosted_amount

* Move vault position lookup into Allocator
* Cap redeem loop by owner's live osToken position

* Inline live shares check into redeem_positions
* Track boosted shares on vault position instead of reducing minted shares

* Rename shares vars for redeemable naming consistency

* Store residual boosted shares on Allocator
* Unify merkle leaf encoding in PositionsMerkleTree

* Share IPFS positions codec via OsTokenPosition.from_dict
* Move kept shares and vault split into Allocator

* Drop allocators left without vault positions before kept shares lookup

* Yield VaultSlice objects instead of tuples
* Drop dead assets_to_redeem assignment in redeem_positions

* Add APIClient.for_network

* Use itertools.batched and replace() in fetch_positions

* Inline redemption assets chain and drop defaultdict return

* Drop unused block_number param and document redeem_positions skips

* Share make_position and make_tree test factories

* Rename ApiClient build method

Signed-off-by: cyc60 <avsysoev60@gmail.com>

---------

Signed-off-by: cyc60 <avsysoev60@gmail.com>
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