Skip to content

Commit e89b97c

Browse files
Rework naming
1 parent f35f76b commit e89b97c

3 files changed

Lines changed: 27 additions & 24 deletions

File tree

src/meta_vault/tasks.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
graph_get_vaults,
3131
)
3232
from src.meta_vault.typings import ContractCall, SubVaultExitRequest, Vault
33-
from src.redemptions.tasks import get_redemption_reservations
33+
from src.redemptions.tasks import get_vault_to_redemption_assets_distributed
3434

3535
logger = logging.getLogger(__name__)
3636

@@ -54,7 +54,7 @@ async def process_block(self, interrupt_handler: InterruptHandler) -> None:
5454
return
5555

5656
chain_head = await get_chain_latest_head()
57-
meta_vault_reservations = await get_redemption_reservations(chain_head)
57+
vault_to_redemption_assets = await get_vault_to_redemption_assets_distributed(chain_head)
5858

5959
for vault in self.vaults:
6060
# Refresh the meta vaults map to include updates
@@ -67,7 +67,7 @@ async def process_block(self, interrupt_handler: InterruptHandler) -> None:
6767
await process_meta_vault_tree(
6868
vault=vault,
6969
meta_vaults_map=meta_vaults_map,
70-
meta_vault_reservations=meta_vault_reservations,
70+
vault_to_redemption_assets=vault_to_redemption_assets,
7171
)
7272
except Exception:
7373
logger.exception('Failed to process meta vault tree for vault %s', vault)
@@ -76,7 +76,7 @@ async def process_block(self, interrupt_handler: InterruptHandler) -> None:
7676
async def process_meta_vault_tree(
7777
vault: ChecksumAddress,
7878
meta_vaults_map: dict[ChecksumAddress, Vault],
79-
meta_vault_reservations: defaultdict[ChecksumAddress, Wei],
79+
vault_to_redemption_assets: defaultdict[ChecksumAddress, Wei],
8080
) -> None:
8181
"""
8282
Process a single meta vault tree: update state and deposit to sub vaults.
@@ -116,7 +116,7 @@ async def process_meta_vault_tree(
116116
for meta_vault_address in reversed(meta_vault_addresses):
117117
await process_deposit_to_sub_vaults(
118118
meta_vault_address=meta_vault_address,
119-
redemption_reservation=meta_vault_reservations[meta_vault_address],
119+
redemption_assets=vault_to_redemption_assets[meta_vault_address],
120120
)
121121

122122

@@ -404,15 +404,15 @@ async def is_meta_vault_rewards_nonce_outdated(
404404

405405
async def process_deposit_to_sub_vaults(
406406
meta_vault_address: ChecksumAddress,
407-
redemption_reservation: Wei = Wei(0),
407+
redemption_assets: Wei = Wei(0),
408408
) -> None:
409409
meta_vault_contract = MetaVaultContract(
410410
address=meta_vault_address,
411411
)
412412
withdrawable_assets = await meta_vault_contract.withdrawable_assets()
413413

414414
# Reserve redemption assets so they are not pushed down to sub vaults.
415-
withdrawable_assets = Wei(max(0, withdrawable_assets - redemption_reservation))
415+
withdrawable_assets = Wei(max(0, withdrawable_assets - redemption_assets))
416416

417417
if settings.network in GNO_NETWORKS:
418418
withdrawable_assets = convert_to_mgno(withdrawable_assets)

src/redemptions/tasks.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,43 +28,47 @@ async def get_redemption_assets(chain_head: ChainHead) -> Wei:
2828
Get redemption assets for operator's vault.
2929
For Gno networks return value in GNO-Wei.
3030
"""
31-
post_distribute = await get_redemption_reservations(chain_head)
32-
return post_distribute[settings.vault]
31+
vault_to_redemption_assets = await get_vault_to_redemption_assets_distributed(chain_head)
32+
return vault_to_redemption_assets[settings.vault]
3333

3434

35-
async def get_redemption_reservations(
35+
async def get_vault_to_redemption_assets_distributed(
3636
chain_head: ChainHead,
3737
) -> defaultdict[ChecksumAddress, Wei]:
3838
"""
39-
Get per-vault redemption reservations after distributing meta vault assets
40-
to sub-vaults. Contains only non-meta vaults.
39+
Get per-vault redemption assets after distributing meta vault assets
40+
across their entire sub-vault tree. Contains leaf vaults, root meta vaults,
41+
and all intermediary meta sub-vaults.
4142
4243
For Gno networks values are in GNO-Wei.
4344
"""
44-
# The contract increments nonce during setRedeemablePositions,
45-
# but uses nonce - 1 for leaf hash computation during redemption.
4645
nonce = await os_token_redeemer_contract.nonce(chain_head.block_number)
4746
if nonce == 0:
48-
logger.info('Zero nonce for redemption. Skipping redemption assets.')
47+
logger.debug('Zero nonce for redemption. Skipping redemption assets.')
4948
return defaultdict(lambda: Wei(0))
5049

5150
protocol_config = await get_protocol_config()
5251

53-
pre_distribute = await get_vault_to_redemption_assets(
52+
# The contract increments the nonce at the end of setRedeemablePositions,
53+
# so use the previous nonce for leaf hash computation.
54+
vault_to_redemption_assets = await get_vault_to_redemption_assets_direct(
5455
chain_head=chain_head, tree_nonce=nonce - 1, protocol_config=protocol_config
5556
)
5657
return await distribute_meta_vault_redemption_assets(
57-
vault_to_redemption_assets=pre_distribute,
58+
vault_to_redemption_assets=vault_to_redemption_assets,
5859
block_number=chain_head.block_number,
5960
)
6061

6162

62-
async def get_vault_to_redemption_assets(
63+
async def get_vault_to_redemption_assets_direct(
6364
chain_head: ChainHead, tree_nonce: int, protocol_config: ProtocolConfig
6465
) -> defaultdict[ChecksumAddress, Wei]:
6566
"""
66-
Get redemption assets per vault.
67-
For Gno networks return value in GNO-Wei.
67+
Get redemption assets per vault, based only on assets directly assigned
68+
to each vault in the IPFS redeemable positions file. Meta vault assets are
69+
not yet distributed across their sub-vault tree.
70+
71+
For Gno networks return value is in GNO-Wei.
6872
"""
6973
ticket = await os_token_redeemer_contract.get_exit_queue_cumulative_tickets(
7074
block_number=chain_head.block_number

src/validators/tasks.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
VALIDATORS_FUNDING_BATCH_SIZE,
2121
settings,
2222
)
23-
from src.redemptions.tasks import get_redemption_reservations
23+
from src.redemptions.tasks import get_redemption_assets
2424
from src.validators.consensus import fetch_compounding_validators_balances
2525
from src.validators.database import NetworkValidatorCrud
2626
from src.validators.exceptions import EmptyRelayerResponseException, FundingException
@@ -267,9 +267,8 @@ async def get_vault_assets(harvest_params: HarvestParams | None, chain_head: Cha
267267

268268
# Reserve operator's vault redemption assets so that withdrawable assets are spent
269269
# on redemptions first, then on validator registrations / fundings.
270-
post_distribute = await get_redemption_reservations(chain_head)
271-
reservation = post_distribute[settings.vault]
272-
vault_assets = Wei(max(0, vault_assets - reservation))
270+
redemption_assets = await get_redemption_assets(chain_head)
271+
vault_assets = Wei(max(0, vault_assets - redemption_assets))
273272

274273
if settings.network in GNO_NETWORKS:
275274
# apply GNO -> mGNO exchange rate

0 commit comments

Comments
 (0)