33from typing import List , Set
44
55from eth_typing .bls import BLSPubkey
6+ from grpc ._channel import _InactiveRpcError # type: ignore
67from loguru import logger
8+ from requests import HTTPError
79from web3 import Web3
810from web3 .types import Wei
911
@@ -140,7 +142,18 @@ def process(self) -> None:
140142 return
141143
142144 # fetch new pool validators
143- public_keys : Set [BLSPubkey ] = get_pool_validator_public_keys (self .pool )
145+ for _ in range (5 ):
146+ try :
147+ public_keys : Set [BLSPubkey ] = get_pool_validator_public_keys (self .pool )
148+ break
149+ except HTTPError :
150+ logger .warning (
151+ "Failed to fetch validators' public keys, trying again..."
152+ )
153+ time .sleep (5 )
154+ else :
155+ public_keys = get_pool_validator_public_keys (self .pool )
156+
144157 inactive_public_keys : Set [BLSPubkey ] = set ()
145158
146159 # calculate epoch to fetch balance at
@@ -150,9 +163,20 @@ def process(self) -> None:
150163 )
151164
152165 # filter out inactive validators
153- response = self .validator_stub .MultipleValidatorStatus (
154- MultipleValidatorStatusRequest (public_keys = public_keys )
155- )
166+ for _ in range (5 ):
167+ try :
168+ response = self .validator_stub .MultipleValidatorStatus (
169+ MultipleValidatorStatusRequest (public_keys = public_keys )
170+ )
171+ break
172+ except _InactiveRpcError :
173+ logger .warning ("Failed to fetch validators' statuses, trying again..." )
174+ time .sleep (5 )
175+ else :
176+ response = self .validator_stub .MultipleValidatorStatus (
177+ MultipleValidatorStatusRequest (public_keys = public_keys )
178+ )
179+
156180 for i , public_key in enumerate (response .public_keys ):
157181 status_response = response .statuses [i ]
158182 if (
@@ -183,7 +207,18 @@ def process(self) -> None:
183207 epoch = epoch , public_keys = active_public_keys
184208 )
185209 while True :
186- response = self .beacon_chain_stub .ListValidatorBalances (request )
210+ for _ in range (5 ):
211+ try :
212+ response = self .beacon_chain_stub .ListValidatorBalances (request )
213+ break
214+ except _InactiveRpcError :
215+ logger .warning (
216+ "Failed to fetch validators' balances, trying again..."
217+ )
218+ time .sleep (5 )
219+ else :
220+ response = self .beacon_chain_stub .ListValidatorBalances (request )
221+
187222 for balance_response in response .balances :
188223 total_balances += int (Web3 .toWei (balance_response .balance , "gwei" ))
189224
0 commit comments