From 05265e230eb9c4c1ded64c35a57ec00db5352a8c Mon Sep 17 00:00:00 2001 From: akrpv Date: Mon, 28 Feb 2022 16:39:12 +0300 Subject: [PATCH] Added check for block timestamp --- web3/providers/rpc.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/web3/providers/rpc.py b/web3/providers/rpc.py index 820808385b..ed444e685a 100644 --- a/web3/providers/rpc.py +++ b/web3/providers/rpc.py @@ -9,6 +9,7 @@ from requests import ( RequestException, ) +from datetime import datetime from typing import ( Any, Dict, @@ -64,6 +65,7 @@ def __init__( randomize: Optional[bool] = False, request_kwargs: Optional[Any] = None, session: Optional[Any] = None, + block_timeout_sec: Optional[int] = None, ) -> None: if isinstance(providers, str): providers = [ @@ -72,6 +74,7 @@ def __init__( self.randomize = randomize self.providers = providers self._request_kwargs = request_kwargs or {} + self.block_timeout_sec = block_timeout_sec if session: cache_session(self.providers[0], session) @@ -104,6 +107,23 @@ def make_request(self, method: RPCEndpoint, params: Any) -> RPCResponse: "Making request HTTP. URI: %s, Method: %s", provider_uri, method ) try: + if self.block_timeout_sec: + request_data_for_block = self.encode_rpc_request( + "eth_getBlockByNumber", ("latest", False) + ) + raw_response = make_post_request( + provider_uri, + request_data_for_block, + **self.get_request_kwargs() + ) + response = self.decode_rpc_response(raw_response) + last_block_timestamp = int( + response.get("result").get("timestamp"), base=16 + ) + now_timestamp = datetime.now().timestamp() + if now_timestamp - last_block_timestamp > self.block_timeout_sec: + continue + raw_response = make_post_request( provider_uri, request_data, **self.get_request_kwargs() )