Skip to content

Commit cddf02a

Browse files
Add dvt relayer endpoint check
1 parent e704d69 commit cddf02a

File tree

2 files changed

+49
-11
lines changed

2 files changed

+49
-11
lines changed

src/common/startup_check.py

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
from src.config.settings import settings
2323
from src.validators.execution import check_deposit_data_root, get_withdrawable_assets
2424
from src.validators.keystores.local import LocalKeystore
25-
from src.validators.typings import ValidatorsRegistrationMode
25+
from src.validators.relayer import DvtRelayerClient
26+
from src.validators.typings import RelayerTypes, ValidatorsRegistrationMode
2627
from src.validators.utils import load_deposit_data
2728

2829
logger = logging.getLogger(__name__)
@@ -228,16 +229,9 @@ async def startup_checks() -> None:
228229
await check_hot_wallet_balance()
229230

230231
logger.info('Checking connection to ipfs nodes...')
231-
healthy_ipfs_endpoint = []
232-
for endpoint in settings.ipfs_fetch_endpoints:
233-
client = IpfsFetchClient([endpoint])
234-
try:
235-
await client.fetch_json(IPFS_HASH_EXAMPLE)
236-
except Exception as e:
237-
logger.warning("Can't connect to ipfs node %s: %s", endpoint, e)
238-
else:
239-
healthy_ipfs_endpoint.append(endpoint)
240-
logger.info('Connected to ipfs nodes at %s.', ', '.join(healthy_ipfs_endpoint))
232+
healthy_ipfs_endpoints = await _check_healthy_ipfs_endpoints()
233+
234+
logger.info('Connected to ipfs nodes at %s.', ', '.join(healthy_ipfs_endpoints))
241235

242236
logger.info('Checking connection to oracles set...')
243237
healthy_oracles = await collect_healthy_oracles()
@@ -261,6 +255,13 @@ async def startup_checks() -> None:
261255

262256
await _check_validators_manager()
263257

258+
if (
259+
settings.validators_registration_mode == ValidatorsRegistrationMode.API
260+
and settings.relayer_type == RelayerTypes.DVT
261+
):
262+
logger.info('Checking DVT Relayer endpoint %s...', settings.relayer_endpoint)
263+
await _check_dvt_relayer_endpoint()
264+
264265

265266
async def _check_consensus_nodes_network() -> None:
266267
"""
@@ -311,6 +312,21 @@ async def _aiohttp_fetch(session: ClientSession, url: str) -> str:
311312
return url
312313

313314

315+
async def _check_healthy_ipfs_endpoints() -> list[str]:
316+
healthy_ipfs_endpoints = []
317+
318+
for endpoint in settings.ipfs_fetch_endpoints:
319+
client = IpfsFetchClient([endpoint])
320+
try:
321+
await client.fetch_json(IPFS_HASH_EXAMPLE)
322+
except Exception as e:
323+
logger.warning("Can't connect to ipfs node %s: %s", endpoint, e)
324+
else:
325+
healthy_ipfs_endpoints.append(endpoint)
326+
327+
return healthy_ipfs_endpoints
328+
329+
314330
async def _check_validators_manager() -> None:
315331
if settings.validators_registration_mode == ValidatorsRegistrationMode.AUTO:
316332
if await vault_contract.version() > 1:
@@ -331,3 +347,14 @@ async def _check_events_logs() -> None:
331347
raise ValueError(
332348
"Can't find oracle config. Please, ensure that EL client didn't prune event logs."
333349
)
350+
351+
352+
async def _check_dvt_relayer_endpoint() -> None:
353+
info = await DvtRelayerClient().get_info()
354+
355+
relayer_network = info['network']
356+
if relayer_network != settings.network:
357+
raise ValueError(
358+
f'Relayer network "{relayer_network}" does not match '
359+
f'Operator network "{settings.network}"'
360+
)

src/validators/relayer.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,17 @@ async def get_validators(
5959

6060

6161
class DvtRelayerClient:
62+
async def get_info(self) -> dict:
63+
url = urljoin(settings.relayer_endpoint, 'info')
64+
async with aiohttp.ClientSession(
65+
timeout=ClientTimeout(settings.relayer_timeout)
66+
) as session:
67+
resp = await session.get(url)
68+
if 400 <= resp.status < 500:
69+
logger.debug('Relayer response: %s', await resp.read())
70+
resp.raise_for_status()
71+
return await resp.json()
72+
6273
async def get_validators(self, public_keys: list[HexStr]) -> dict:
6374
url = urljoin(settings.relayer_endpoint, 'validators')
6475
jsn = {'public_keys': public_keys}

0 commit comments

Comments
 (0)