diff --git a/src/common/exceptions.py b/src/common/exceptions.py index e633bf8f..434aef03 100644 --- a/src/common/exceptions.py +++ b/src/common/exceptions.py @@ -8,10 +8,7 @@ def __init__(self, *args, **kwargs): # type: ignore class NotEnoughOracleApprovalsError(ValueError): - def __init__( # type: ignore - self, num_votes: int, threshold: int, failed_endpoints: list[str], *args, **kwargs - ): + def __init__(self, num_votes: int, threshold: int, *args, **kwargs): # type: ignore super().__init__(NOT_ENOUGH_ORACLE_APPROVALS, *args, **kwargs) self.num_votes = num_votes self.threshold = threshold - self.failed_endpoints = failed_endpoints diff --git a/src/exits/tasks.py b/src/exits/tasks.py index 0578ef4c..bcba1b27 100644 --- a/src/exits/tasks.py +++ b/src/exits/tasks.py @@ -140,15 +140,12 @@ async def _update_exit_signatures( try: # send approval request to oracles oracles_approval = await send_signature_rotation_requests(oracles, oracles_request) - logger.info('Fetched updated signature for validators: count=%d', len(validators)) break except NotEnoughOracleApprovalsError as e: logger.error( - 'Failed to fetch oracle approvals. Received %d out of %d, ' - 'the oracles with endpoints %s have failed to respond.', + 'Not enough votes for exit signature update: %d. Threshold is %d', e.num_votes, e.threshold, - ', '.join(e.failed_endpoints), ) approvals_time = time.time() - approval_start_time await asyncio.sleep(approvals_min_interval - approvals_time) diff --git a/src/exits/utils.py b/src/exits/utils.py index c215467d..e0ae70af 100644 --- a/src/exits/utils.py +++ b/src/exits/utils.py @@ -10,7 +10,6 @@ from sw_utils.decorators import retry_aiohttp_errors from web3 import Web3 -from src.common.exceptions import NotEnoughOracleApprovalsError from src.common.typings import OracleApproval, Oracles, OraclesApproval from src.common.utils import format_error, process_oracles_approvals, warning_verbose from src.config.settings import ( @@ -50,11 +49,21 @@ async def send_signature_rotation_requests( failed_endpoints.extend(replicas) continue approvals[address] = response - try: - return process_oracles_approvals(approvals, oracles.validators_threshold) - except NotEnoughOracleApprovalsError as e: - e.failed_endpoints = failed_endpoints - raise + + logger.info( + 'Fetched oracle approvals for signature update: validators count = %d. ' + 'Received: %d out of %d.', + len(request.public_keys), + len(approvals), + len(oracles.endpoints), + ) + + if failed_endpoints: + logger.error( + 'The oracles with endpoints %s have failed to respond.', ', '.join(failed_endpoints) + ) + + return process_oracles_approvals(approvals, oracles.validators_threshold) # pylint: disable=duplicate-code diff --git a/src/validators/tasks.py b/src/validators/tasks.py index 2a0118f9..8dc0f318 100644 --- a/src/validators/tasks.py +++ b/src/validators/tasks.py @@ -132,19 +132,12 @@ async def register_validators( try: oracles_approval = await send_approval_requests(oracles, oracles_request) - logger.info( - 'Fetched oracles approval for validators: deadline=%d, start index=%d', - oracles_request.deadline, - oracles_request.validator_index, - ) break except NotEnoughOracleApprovalsError as e: logger.error( - 'Failed to fetch oracle approvals. Received %d out of %d, ' - 'the oracles with endpoints %s have failed to respond.', + 'Not enough votes for validator registration: %d. Threshold is %d', e.num_votes, e.threshold, - ', '.join(e.failed_endpoints), ) approvals_time = time.time() - approval_start_time await asyncio.sleep(approvals_min_interval - approvals_time) diff --git a/src/validators/utils.py b/src/validators/utils.py index df82d03a..5ae2416d 100644 --- a/src/validators/utils.py +++ b/src/validators/utils.py @@ -19,7 +19,6 @@ from web3 import Web3 from src.common.contracts import validators_registry_contract -from src.common.exceptions import NotEnoughOracleApprovalsError from src.common.typings import OracleApproval, Oracles, OraclesApproval from src.common.utils import format_error, process_oracles_approvals, warning_verbose from src.config.settings import DEFAULT_RETRY_TIME, ORACLES_VALIDATORS_TIMEOUT, settings @@ -75,11 +74,21 @@ async def send_approval_requests(oracles: Oracles, request: ApprovalRequest) -> approvals[address] = result - try: - return process_oracles_approvals(approvals, oracles.validators_threshold) - except NotEnoughOracleApprovalsError as e: - e.failed_endpoints = failed_endpoints - raise + logger.info( + 'Fetched oracle approvals for validator registration: ' + 'deadline=%d, start index=%d. Received %d out of %d.', + request.deadline, + request.validator_index, + len(approvals), + len(oracles.endpoints), + ) + + if failed_endpoints: + logger.error( + 'The oracles with endpoints %s have failed to respond.', ', '.join(failed_endpoints) + ) + + return process_oracles_approvals(approvals, oracles.validators_threshold) # pylint: disable=duplicate-code