diff --git a/crawlers/mooncrawl/mooncrawl/blockchain.py b/crawlers/mooncrawl/mooncrawl/blockchain.py index e5e97564..2f2bd95a 100644 --- a/crawlers/mooncrawl/mooncrawl/blockchain.py +++ b/crawlers/mooncrawl/mooncrawl/blockchain.py @@ -26,6 +26,8 @@ from .settings import ( MOONSTREAM_NODE_ARBITRUM_SEPOLIA_A_EXTERNAL_URI, MOONSTREAM_NODE_AVALANCHE_A_EXTERNAL_URI, MOONSTREAM_NODE_AVALANCHE_FUJI_A_EXTERNAL_URI, + MOONSTREAM_NODE_BLAST_A_EXTERNAL_URI, + MOONSTREAM_NODE_BLAST_SEPOLIA_A_EXTERNAL_URI, MOONSTREAM_NODE_ETHEREUM_A_EXTERNAL_URI, MOONSTREAM_NODE_MUMBAI_A_EXTERNAL_URI, MOONSTREAM_NODE_POLYGON_A_EXTERNAL_URI, @@ -82,6 +84,10 @@ def connect( web3_uri = MOONSTREAM_NODE_AVALANCHE_A_EXTERNAL_URI elif blockchain_type == AvailableBlockchainType.AVALANCHE_FUJI: web3_uri = MOONSTREAM_NODE_AVALANCHE_FUJI_A_EXTERNAL_URI + elif blockchain_type == AvailableBlockchainType.BLAST: + web3_uri = MOONSTREAM_NODE_BLAST_A_EXTERNAL_URI + elif blockchain_type == AvailableBlockchainType.BLAST_SEPOLIA: + web3_uri = MOONSTREAM_NODE_BLAST_SEPOLIA_A_EXTERNAL_URI else: raise Exception("Wrong blockchain type provided for web3 URI") @@ -146,7 +152,7 @@ def add_block(db_session, block: Any, blockchain_type: AvailableBlockchainType) ) if blockchain_type == AvailableBlockchainType.XDAI: block_obj.author = block.author - if ( + elif ( blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_TESTNET or blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_SEPOLIA or blockchain_type == AvailableBlockchainType.ZKSYNC_ERA @@ -163,7 +169,7 @@ def add_block(db_session, block: Any, blockchain_type: AvailableBlockchainType) if block.get("l1BatchTimestamp") is not None else None ) - if ( + elif ( blockchain_type == AvailableBlockchainType.ARBITRUM_NOVA or blockchain_type == AvailableBlockchainType.ARBITRUM_SEPOLIA ): @@ -172,8 +178,7 @@ def add_block(db_session, block: Any, blockchain_type: AvailableBlockchainType) block_obj.send_count = hex_to_int(block.get("sendCount")) block_obj.send_root = block.get("sendRoot", "") block_obj.mix_hash = block.get("mixHash", "") - - if ( + elif ( blockchain_type == AvailableBlockchainType.XAI or blockchain_type == AvailableBlockchainType.XAI_SEPOLIA ): @@ -182,8 +187,7 @@ def add_block(db_session, block: Any, blockchain_type: AvailableBlockchainType) block_obj.send_count = hex_to_int(block.get("sendCount")) block_obj.send_root = block.get("sendRoot", "") block_obj.mix_hash = block.get("mixHash", "") - - if ( + elif ( blockchain_type == AvailableBlockchainType.AVALANCHE or blockchain_type == AvailableBlockchainType.AVALANCHE_FUJI ): @@ -192,6 +196,13 @@ def add_block(db_session, block: Any, blockchain_type: AvailableBlockchainType) block_obj.block_gas_cost = block.get("blockGasCost") block_obj.ext_data_gas_used = block.get("extDataGasUsed", "") block_obj.ext_data_hash = block.get("extDataHash", "") + elif ( + blockchain_type == AvailableBlockchainType.BLAST + or blockchain_type == AvailableBlockchainType.BLAST_SEPOLIA + ): + block_obj.sha3_uncles = block.get("sha3Uncles", "") + block_obj.mix_hash = block.get("mixHash", "") + block_obj.withdrawals_root = block.get("withdrawalsRoot", "") db_session.add(block_obj) diff --git a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/continuous_crawler.py b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/continuous_crawler.py index 823e6dda..990200a8 100644 --- a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/continuous_crawler.py +++ b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/continuous_crawler.py @@ -152,6 +152,10 @@ def continuous_crawler( network = Network.avalanche elif blockchain_type == AvailableBlockchainType.AVALANCHE_FUJI: network = Network.avalanche_fuji + elif blockchain_type == AvailableBlockchainType.BLAST: + network = Network.blast + elif blockchain_type == AvailableBlockchainType.BLAST_SEPOLIA: + network = Network.blast_sepolia else: raise ValueError(f"Unknown blockchain type: {blockchain_type}") diff --git a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/crawler.py b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/crawler.py index 6bb1efd8..e90910f1 100644 --- a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/crawler.py +++ b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/crawler.py @@ -44,6 +44,8 @@ class SubscriptionTypes(Enum): XAI_SEPOLIA_BLOCKCHAIN = "xai_sepolia_smartcontract" AVALANCHE_BLOCKCHAIN = "avalanche_smartcontract" AVALANCHE_FUJI_BLOCKCHAIN = "avalanche_fuji_smartcontract" + BLAST_BLOCKCHAIN = "blast_smartcontract" + BLAST_SEPOLIA_BLOCKCHAIN = "blast_sepolia_smartcontract" def abi_input_signature(input_abi: Dict[str, Any]) -> str: @@ -166,6 +168,10 @@ def blockchain_type_to_subscription_type( return SubscriptionTypes.AVALANCHE_BLOCKCHAIN elif blockchain_type == AvailableBlockchainType.AVALANCHE_FUJI: return SubscriptionTypes.AVALANCHE_FUJI_BLOCKCHAIN + elif blockchain_type == AvailableBlockchainType.BLAST: + return SubscriptionTypes.BLAST_BLOCKCHAIN + elif blockchain_type == AvailableBlockchainType.BLAST_SEPOLIA: + return SubscriptionTypes.BLAST_SEPOLIA_BLOCKCHAIN else: raise ValueError(f"Unknown blockchain type: {blockchain_type}") diff --git a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/function_call_crawler.py b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/function_call_crawler.py index 3ef05095..44834fdf 100644 --- a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/function_call_crawler.py +++ b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/function_call_crawler.py @@ -72,6 +72,8 @@ def function_call_crawler( network = Network.zksync_era_testnet elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA: network = Network.zksync_era + elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_SEPOLIA: + network = Network.zksync_era_sepolia elif blockchain_type == AvailableBlockchainType.ARBITRUM_NOVA: network = Network.arbitrum_nova elif blockchain_type == AvailableBlockchainType.ARBITRUM_SEPOLIA: @@ -80,6 +82,14 @@ def function_call_crawler( network = Network.xai elif blockchain_type == AvailableBlockchainType.XAI_SEPOLIA: network = Network.xai_sepolia + elif blockchain_type == AvailableBlockchainType.AVALANCHE: + network = Network.avalanche + elif blockchain_type == AvailableBlockchainType.AVALANCHE_FUJI: + network = Network.avalanche_fuji + elif blockchain_type == AvailableBlockchainType.BLAST: + network = Network.blast + elif blockchain_type == AvailableBlockchainType.BLAST_SEPOLIA: + network = Network.blast_sepolia else: raise ValueError(f"Unknown blockchain type: {blockchain_type}") diff --git a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/historical_crawler.py b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/historical_crawler.py index 1fa3aa90..6761616f 100644 --- a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/historical_crawler.py +++ b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/historical_crawler.py @@ -66,6 +66,8 @@ def historical_crawler( network = Network.zksync_era_testnet elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA: network = Network.zksync_era + elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_SEPOLIA: + network = Network.zksync_era_sepolia elif blockchain_type == AvailableBlockchainType.ARBITRUM_NOVA: network = Network.arbitrum_nova elif blockchain_type == AvailableBlockchainType.ARBITRUM_SEPOLIA: @@ -74,6 +76,14 @@ def historical_crawler( network = Network.xai elif blockchain_type == AvailableBlockchainType.XAI_SEPOLIA: network = Network.xai_sepolia + elif blockchain_type == AvailableBlockchainType.AVALANCHE: + network = Network.avalanche + elif blockchain_type == AvailableBlockchainType.AVALANCHE_FUJI: + network = Network.avalanche_fuji + elif blockchain_type == AvailableBlockchainType.BLAST: + network = Network.blast + elif blockchain_type == AvailableBlockchainType.BLAST_SEPOLIA: + network = Network.blast_sepolia else: raise Exception("Unsupported blockchain type provided") diff --git a/crawlers/mooncrawl/mooncrawl/settings.py b/crawlers/mooncrawl/mooncrawl/settings.py index 9c479fcf..99d604ff 100644 --- a/crawlers/mooncrawl/mooncrawl/settings.py +++ b/crawlers/mooncrawl/mooncrawl/settings.py @@ -160,6 +160,20 @@ if MOONSTREAM_NODE_AVALANCHE_FUJI_A_EXTERNAL_URI == "": "MOONSTREAM_NODE_AVALANCHE_FUJI_A_EXTERNAL_URI env variable is not set" ) +MOONSTREAM_NODE_BLAST_A_EXTERNAL_URI = os.environ.get( + "MOONSTREAM_NODE_BLAST_A_EXTERNAL_URI", "" +) +if MOONSTREAM_NODE_BLAST_A_EXTERNAL_URI == "": + raise Exception("MOONSTREAM_NODE_BLAST_A_EXTERNAL_URI env variable is not set") + +MOONSTREAM_NODE_BLAST_SEPOLIA_A_EXTERNAL_URI = os.environ.get( + "MOONSTREAM_NODE_BLAST_SEPOLIA_A_EXTERNAL_URI", "" +) +if MOONSTREAM_NODE_BLAST_SEPOLIA_A_EXTERNAL_URI == "": + raise Exception( + "MOONSTREAM_NODE_BLAST_SEPOLIA_A_EXTERNAL_URI env variable is not set" + ) + MOONSTREAM_CRAWL_WORKERS = 4 MOONSTREAM_CRAWL_WORKERS_RAW = os.environ.get("MOONSTREAM_CRAWL_WORKERS") try: diff --git a/crawlers/mooncrawl/mooncrawl/stats_worker/dashboard.py b/crawlers/mooncrawl/mooncrawl/stats_worker/dashboard.py index 459f7653..74ca3375 100644 --- a/crawlers/mooncrawl/mooncrawl/stats_worker/dashboard.py +++ b/crawlers/mooncrawl/mooncrawl/stats_worker/dashboard.py @@ -62,6 +62,8 @@ subscription_id_by_blockchain = { "xai_sepolia": "xai_sepolia_smartcontract", "avalanche": "avalanche_smartcontract", "avalanche_fuji": "avalanche_fuji_smartcontract", + "blast": "blast_smartcontract", + "blast_sepolia": "blast_sepolia_smartcontract", } blockchain_by_subscription_id = { @@ -79,6 +81,8 @@ blockchain_by_subscription_id = { "xai_sepolia_blockchain": "xai_sepolia", "avalanche_blockchain": "avalanche", "avalanche_fuji_blockchain": "avalanche_fuji", + "blast_blockchain": "blast", + "blast_sepolia_blockchain": "blast_sepolia", "ethereum_smartcontract": "ethereum", "polygon_smartcontract": "polygon", "mumbai_smartcontract": "mumbai", @@ -93,6 +97,8 @@ blockchain_by_subscription_id = { "xai_sepolia_smartcontract": "xai_sepolia", "avalanche_smartcontract": "avalanche", "avalanche_fuji_smartcontract": "avalanche_fuji", + "blast_smartcontract": "blast", + "blast_sepolia_smartcontract": "blast_sepolia", } diff --git a/crawlers/mooncrawl/mypy.ini b/crawlers/mooncrawl/mypy.ini index 45381262..0a92316e 100644 --- a/crawlers/mooncrawl/mypy.ini +++ b/crawlers/mooncrawl/mypy.ini @@ -11,3 +11,6 @@ ignore_missing_imports = True [mypy-tqdm.*] ignore_missing_imports = True + +[mypy-moonworm.*] +ignore_missing_imports = True diff --git a/crawlers/mooncrawl/sample.env b/crawlers/mooncrawl/sample.env index 9819b89f..a6972921 100644 --- a/crawlers/mooncrawl/sample.env +++ b/crawlers/mooncrawl/sample.env @@ -33,6 +33,8 @@ export MOONSTREAM_NODE_XAI_A_EXTERNAL_URI="https:// export MOONSTREAM_NODE_XAI_SEPOLIA_A_EXTERNAL_URI="https://" export MOONSTREAM_NODE_AVALANCHE_A_EXTERNAL_URI="https://" export MOONSTREAM_NODE_AVALANCHE_FUJI_A_EXTERNAL_URI="https://" +export MOONSTREAM_NODE_BLAST_A_EXTERNAL_URI="https://" +export MOONSTREAM_NODE_BLAST_SEPOLIA_A_EXTERNAL_URI="https://" # AWS environment variables export MOONSTREAM_S3_SMARTCONTRACTS_BUCKET="" diff --git a/crawlers/mooncrawl/setup.py b/crawlers/mooncrawl/setup.py index ce99baa9..0e9e5b8b 100644 --- a/crawlers/mooncrawl/setup.py +++ b/crawlers/mooncrawl/setup.py @@ -37,7 +37,7 @@ setup( "bugout>=0.2.13", "chardet", "fastapi", - "moonstreamdb>=0.3.11", + "moonstreamdb>=0.3.12", "moonstream>=0.1.1", "moonworm[moonstream]>=0.6.2", "humbug",