Skip to content

Commit f7f1925

Browse files
authored
Merge pull request #302 from blockjoe/develop
Fallback to `web3.eth.getLogs` when calling to nodes without `eth_newFilter`
2 parents b1acfa3 + db59018 commit f7f1925

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

ethereumetl/jobs/export_origin_job.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ def __init__(
4343
self.receipt_log_mapper = EthReceiptLogMapper()
4444
self.marketplace_listing_mapper = OriginMarketplaceListingMapper()
4545
self.shop_listing_mapper = OriginShopProductMapper()
46+
self._supports_eth_newFilter = True
4647

4748

4849
def _start(self):
@@ -100,8 +101,18 @@ def _export_batch(self, block_number_batch):
100101
'fromBlock': batch['from_block'],
101102
'toBlock': batch['to_block']
102103
}
103-
event_filter = self.web3.eth.filter(filter_params)
104-
events = event_filter.get_all_entries()
104+
if self._supports_eth_newFilter:
105+
try:
106+
event_filter = self.web3.eth.filter(filter_params)
107+
events = event_filter.get_all_entries()
108+
except ValueError as e:
109+
if str(e) == "{'code': -32000, 'message': 'the method is currently not implemented: eth_newFilter'}":
110+
self._supports_eth_newFilter = False
111+
events = self.web3.eth.getLogs(filter_params)
112+
else:
113+
raise(e)
114+
else:
115+
events = self.web3.eth.getLogs(filter_params)
105116
for event in events:
106117
log = self.receipt_log_mapper.web3_dict_to_receipt_log(event)
107118
listing, shop_products = self.event_extractor.extract_event_from_log(log, batch['contract_version'])
@@ -112,9 +123,10 @@ def _export_batch(self, block_number_batch):
112123
item = self.shop_listing_mapper.product_to_dict(product)
113124
self.shop_product_exporter.export_item(item)
114125

115-
self.web3.eth.uninstallFilter(event_filter.filter_id)
126+
if self._supports_eth_newFilter:
127+
self.web3.eth.uninstallFilter(event_filter.filter_id)
116128

117129
def _end(self):
118130
self.batch_work_executor.shutdown()
119131
self.marketplace_listing_exporter.close()
120-
self.shop_product_exporter.close()
132+
self.shop_product_exporter.close()

ethereumetl/jobs/export_token_transfers_job.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ def __init__(
5151
self.receipt_log_mapper = EthReceiptLogMapper()
5252
self.token_transfer_mapper = EthTokenTransferMapper()
5353
self.token_transfer_extractor = EthTokenTransferExtractor()
54+
self._supports_eth_newFilter = True
5455

5556
def _start(self):
5657
self.item_exporter.open()
@@ -74,15 +75,23 @@ def _export_batch(self, block_number_batch):
7475
if self.tokens is not None and len(self.tokens) > 0:
7576
filter_params['address'] = self.tokens
7677

77-
event_filter = self.web3.eth.filter(filter_params)
78-
events = event_filter.get_all_entries()
78+
try:
79+
event_filter = self.web3.eth.filter(filter_params)
80+
events = event_filter.get_all_entries()
81+
except ValueError as e:
82+
if str(e) == "{'code': -32000, 'message': 'the method is currently not implemented: eth_newFilter'}":
83+
self._supports_eth_newFilter = False
84+
events = self.web3.eth.getLogs(filter_params)
85+
else:
86+
raise(e)
7987
for event in events:
8088
log = self.receipt_log_mapper.web3_dict_to_receipt_log(event)
8189
token_transfer = self.token_transfer_extractor.extract_transfer_from_log(log)
8290
if token_transfer is not None:
8391
self.item_exporter.export_item(self.token_transfer_mapper.token_transfer_to_dict(token_transfer))
8492

85-
self.web3.eth.uninstallFilter(event_filter.filter_id)
93+
if self._supports_eth_newFilter:
94+
self.web3.eth.uninstallFilter(event_filter.filter_id)
8695

8796
def _end(self):
8897
self.batch_work_executor.shutdown()

0 commit comments

Comments
 (0)