From 05bd67a350d2059f31f5595993c1741204f0e87f Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 14 Jun 2024 17:36:08 +0300 Subject: [PATCH] Add web3 state provider for v3. --- .../moonworm_crawler/continuous_crawler.py | 20 ++++++++++++------- .../moonworm_crawler/function_call_crawler.py | 5 +++-- .../moonworm_crawler/historical_crawler.py | 19 +++++++++--------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/continuous_crawler.py b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/continuous_crawler.py index 7c7f6bba..01f70f7f 100644 --- a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/continuous_crawler.py +++ b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/continuous_crawler.py @@ -12,6 +12,7 @@ from moonstreamtypes.networks import blockchain_type_to_network_type from moonworm.crawler.moonstream_ethereum_state_provider import ( # type: ignore MoonstreamEthereumStateProvider, ) +from moonworm.crawler.ethereum_state_provider import Web3StateProvider from sqlalchemy.orm.session import Session from web3 import Web3 @@ -106,6 +107,7 @@ def continuous_crawler( new_jobs_refetch_interval: float = 120, web3_uri: Optional[str] = None, max_insert_batch: int = 10000, + version: int = 2, ): crawler_type = "continuous" assert ( @@ -130,11 +132,15 @@ def continuous_crawler( except Exception as e: raise Exception(e) - ethereum_state_provider = MoonstreamEthereumStateProvider( - web3, - network, # type: ignore - db_session, - ) + evm_state_provider = Web3StateProvider(web3) + + if version == 2: + + evm_state_provider = MoonstreamEthereumStateProvider( + web3, + network, # type: ignore + db_session, + ) heartbeat_template = { "status": "crawling", @@ -207,7 +213,7 @@ def continuous_crawler( ) all_function_calls = _crawl_functions( blockchain_type, - ethereum_state_provider, + evm_state_provider, function_call_crawl_jobs, start_block, end_block, @@ -269,7 +275,7 @@ def continuous_crawler( function_call_crawl_jobs ) heartbeat_template["function_call metrics"] = ( - ethereum_state_provider.metrics + evm_state_provider.metrics ) heartbeat( crawler_type=crawler_type, diff --git a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/function_call_crawler.py b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/function_call_crawler.py index a80cdffb..43f99cec 100644 --- a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/function_call_crawler.py +++ b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/function_call_crawler.py @@ -1,5 +1,5 @@ import logging -from typing import List +from typing import List, Union from moonstreamdb.blockchain import AvailableBlockchainType from moonstreamtypes.blockchain import AvailableBlockchainType @@ -11,6 +11,7 @@ from moonworm.crawler.function_call_crawler import ( # type: ignore from moonworm.crawler.moonstream_ethereum_state_provider import ( # type: ignore MoonstreamEthereumStateProvider, ) +from moonworm.crawler.ethereum_state_provider import Web3StateProvider from moonworm.watch import MockState # type: ignore from sqlalchemy.orm import Session from web3 import Web3 @@ -23,7 +24,7 @@ logger = logging.getLogger(__name__) def _crawl_functions( blockchain_type: AvailableBlockchainType, - ethereum_state_provider: MoonstreamEthereumStateProvider, + ethereum_state_provider: Union[MoonstreamEthereumStateProvider, Web3StateProvider], jobs: List[FunctionCallCrawlJob], from_block: int, to_block: int, diff --git a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/historical_crawler.py b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/historical_crawler.py index 40e208ba..1bf931f2 100644 --- a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/historical_crawler.py +++ b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/historical_crawler.py @@ -11,6 +11,7 @@ from moonworm.crawler.moonstream_ethereum_state_provider import ( # type: ignor MoonstreamEthereumStateProvider, Network, ) +from moonworm.crawler.ethereum_state_provider import Web3StateProvider from sqlalchemy.orm.session import Session from web3 import Web3 @@ -60,15 +61,15 @@ def historical_crawler( except Exception as e: raise Exception(e) - if version != 2: - ## Function call crawler is not supported in version 3 - network = Network("ethereum") + evm_state_provider = Web3StateProvider(web3) - ethereum_state_provider = MoonstreamEthereumStateProvider( - web3, - network, # type: ignore - db_session, - ) + if version == 2: + ### Moonstream state provider use the V2 db to get the block + evm_state_provider = MoonstreamEthereumStateProvider( + web3, + network, # type: ignore + db_session, + ) logger.info(f"Starting historical event crawler start_block={start_block}") @@ -139,7 +140,7 @@ def historical_crawler( ) all_function_calls = _crawl_functions( blockchain_type, - ethereum_state_provider, + evm_state_provider, function_call_crawl_jobs, batch_end_block, start_block,