Skip to content

Commit d5b1e8c

Browse files
committed
v0.2.4 Making sure new get logs batch requests are not split neither stuck in infinite retry loops.
1 parent 31af8ea commit d5b1e8c

File tree

3 files changed

+13
-9
lines changed

3 files changed

+13
-9
lines changed

IceCreamSwapWeb3/BatchRetryMiddleware.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ def request_wrapper(method, params):
4646
for method, params in requests_info
4747
]
4848

49-
no_splitting = len(requests_info) == 2 and requests_info[0][0] == "eth_getLogs" and requests_info[1][0] == "eth_getBlockByNumber"
49+
if (
50+
(len(requests_info) == 2 and requests_info[0][0] == "eth_getLogs" and requests_info[1][0] == "eth_getBlockByNumber") or
51+
(len(requests_info) == 3 and requests_info[0][0] == "eth_getBlockByNumber" and requests_info[1][0] == "eth_getLogs" and requests_info[2][0] == "eth_getBlockByNumber")
52+
):
53+
# not retrying or splitting when this request comes from our get_logs wrapper
54+
return make_batch_request(requests_info)
5055

5156
try:
5257
response = make_batch_request(requests_info)
@@ -78,17 +83,12 @@ def request_wrapper(method, params):
7883

7984
print(f"{len(requests_retry)}/{len(requests_info)} requests in batch failed, retrying. Example response: {response[request_indexes[0][0]]}")
8085

81-
if len(requests_retry) != len(requests_info) and not no_splitting: # if some requests succeeded, retry failed requests
86+
if len(requests_retry) != len(requests_info): # if some requests succeeded, retry failed requests
8287
response_new = middleware(requests_retry)
8388
for old_idx, new_idx in request_indexes:
8489
response[old_idx] = response_new[new_idx]
8590
return response
8691

87-
if no_splitting:
88-
# retry request. This being recursive is not optimal, but should be ok
89-
sleep(0.1)
90-
return middleware(requests_info)
91-
9292
assert len(requests_info) > 1
9393
middle = len(requests_info) // 2
9494
sleep(0.1)

IceCreamSwapWeb3/EthAdvanced.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,11 @@ def get_logs(
239239

240240
# getting logs for a single block, which is not at the chain head. No drama
241241
if num_blocks == 1:
242-
return self.get_logs_inner(filter_params, no_retry=no_retry)
242+
block_hash = self._get_block(from_block)["hash"].to_0x_hex()
243+
single_hash_filter = {**filter_params, "blockHash": block_hash}
244+
del single_hash_filter["fromBlock"]
245+
del single_hash_filter["toBlock"]
246+
return self.get_logs_inner(single_hash_filter, no_retry=no_retry)
243247

244248
# if we already know that the filter range is too large, split it
245249
if num_blocks > filter_block_range:

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from setuptools import setup, find_packages
22

3-
VERSION = '0.2.3'
3+
VERSION = '0.2.4'
44
DESCRIPTION = 'IceCreamSwap Web3.py wrapper'
55
LONG_DESCRIPTION = 'IceCreamSwap Web3.py wrapper with automatic retries, multicall and other advanced functionality'
66

0 commit comments

Comments
 (0)