Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/commands/consolidate.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
from src.validators.consolidation_manager import ConsolidationManager
from src.validators.exceptions import ConsolidationError
from src.validators.oracles import poll_consolidation_signature
from src.validators.register_validators import submit_consolidate_validators
from src.validators.register_validators import tx_consolidate_validators
from src.validators.relayer import RelayerClient
from src.validators.typings import ConsolidationKeys

Expand Down Expand Up @@ -393,7 +393,7 @@ async def process(
target_source_public_keys
)

tx_hash = await submit_consolidate_validators(
tx_hash = await tx_consolidate_validators(
validators=encoded_validators,
oracle_signatures=oracle_signatures,
tx_fee=Wei(consolidation_request_fee * consolidations_count),
Expand Down
8 changes: 4 additions & 4 deletions src/validators/consensus.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@
logger = logging.getLogger(__name__)


async def fetch_compounding_validators_balances() -> dict[HexStr, Gwei]:
async def fetch_funding_validators_balances() -> dict[HexStr, Gwei]:
"""
Retrieves the actual balances of compounding validators in the vault.
Also includes balances from pending deposits
Retrieves the consensus balances of vault validators eligible for funding.
Includes balances from pending deposits
that have not yet been processed by the consensus node.
"""
vault_public_keys = {key.public_key for key in VaultValidatorCrud().get_vault_validators()}
vault_public_keys = {v.public_key for v in VaultValidatorCrud().get_vault_validators()}
non_finalized_public_keys = await get_latest_vault_v2_validator_public_keys(settings.vault)
vault_public_keys.update(non_finalized_public_keys)
if not vault_public_keys:
Expand Down
6 changes: 3 additions & 3 deletions src/validators/register_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@


# pylint: disable=too-many-arguments,too-many-locals
async def register_validators(
async def tx_register_validators(
approval: OraclesApproval,
validators: Sequence[Validator],
harvest_params: HarvestParams | None,
Expand Down Expand Up @@ -111,7 +111,7 @@ async def register_validators(
return tx_hash


async def fund_validators(
async def tx_fund_validators(
validators: list[Validator],
validators_manager_signature: HexStr,
harvest_params: HarvestParams | None,
Expand Down Expand Up @@ -155,7 +155,7 @@ async def fund_validators(
return tx_hash


async def submit_consolidate_validators(
async def tx_consolidate_validators(
validators: bytes,
oracle_signatures: bytes | None,
tx_fee: Wei,
Expand Down
1 change: 1 addition & 0 deletions src/validators/signing/tests/test_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ async def test_local(
fork=fork,
)

@pytest.mark.usefixtures('fake_settings')
@pytest.mark.parametrize(
['_mocked_oracle_committee'],
[
Expand Down
27 changes: 16 additions & 11 deletions src/validators/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,17 @@
VALIDATORS_FUNDING_BATCH_SIZE,
settings,
)
from src.validators.consensus import fetch_compounding_validators_balances
from src.validators.consensus import fetch_funding_validators_balances
from src.validators.database import NetworkValidatorCrud
from src.validators.exceptions import EmptyRelayerResponseException, FundingException
from src.validators.execution import get_withdrawable_assets
from src.validators.keystores.base import BaseKeystore
from src.validators.metrics import update_unused_validator_keys_metric
from src.validators.oracles import poll_validation_approval
from src.validators.register_validators import fund_validators, register_validators
from src.validators.register_validators import (
tx_fund_validators,
tx_register_validators,
)
from src.validators.relayer import RelayerClient
from src.validators.typings import NetworkValidator, Validator
from src.validators.utils import get_validators_for_registration
Expand Down Expand Up @@ -99,9 +102,9 @@ async def process_funding(
Returns the remaining vault assets if funding is successful.
Raises FundingException on failure.
"""
compounding_validators_balances = await fetch_compounding_validators_balances()
validators_balances = await fetch_funding_validators_balances()
funding_amounts = _get_funding_amounts(
compounding_validators_balances=compounding_validators_balances,
validators_balances=validators_balances,
vault_assets=vault_assets,
)

Expand All @@ -115,7 +118,7 @@ async def process_funding(
list(funding_amounts.items()), VALIDATORS_FUNDING_BATCH_SIZE
):
try:
tx_hash = await fund_compounding_validators(
tx_hash = await fund_validators_chunk(
validator_fundings=validator_fundings_chunk,
harvest_params=harvest_params,
relayer=self.relayer,
Expand All @@ -132,13 +135,15 @@ async def process_funding(
return vault_assets


async def fund_compounding_validators(
async def fund_validators_chunk(
validator_fundings: Sequence[tuple[HexStr, Gwei]],
harvest_params: HarvestParams | None,
relayer: RelayerClient | None = None,
) -> HexStr | None:
"""
Funds vault compounding validators with the specified amount.
Funds vault validators with the specified amount.
Makes single transaction for a chunk of validators.
Returns transaction hash if funding is successful, None otherwise.
"""
logger.info('Started funding of %d validator(s)', len(validator_fundings))
validators_manager_signature = HexStr('0x')
Expand All @@ -165,7 +170,7 @@ async def fund_compounding_validators(
)
pub_keys.append(public_key)

tx_hash = await fund_validators(
tx_hash = await tx_fund_validators(
harvest_params=harvest_params,
validators=validators,
validators_manager_signature=validators_manager_signature,
Expand Down Expand Up @@ -244,7 +249,7 @@ async def register_new_validators(
validators_registry_root=validators_registry_root,
validators_manager_signature=validators_manager_signature,
)
tx_hash = await register_validators(
tx_hash = await tx_register_validators(
approval=oracles_approval,
validators=validators,
harvest_params=harvest_params,
Expand Down Expand Up @@ -318,12 +323,12 @@ def _get_deposits_amounts(vault_assets: Gwei, validator_type: ValidatorType) ->


def _get_funding_amounts(
compounding_validators_balances: dict[HexStr, Gwei], vault_assets: Gwei
validators_balances: dict[HexStr, Gwei], vault_assets: Gwei
) -> dict[HexStr, Gwei]:
result = {}
# Order validators by balance descending to fund those with the highest balance first
for public_key, balance in sorted(
compounding_validators_balances.items(), key=lambda item: item[1], reverse=True
validators_balances.items(), key=lambda item: item[1], reverse=True
):
# Fund as much as possible to reach max balance
remaining_capacity = settings.max_validator_balance_gwei - balance
Expand Down
Loading
Loading