diff --git a/crawlers/mooncrawl/mooncrawl/blockchain.py b/crawlers/mooncrawl/mooncrawl/blockchain.py index e6656fd2..983c4f23 100644 --- a/crawlers/mooncrawl/mooncrawl/blockchain.py +++ b/crawlers/mooncrawl/mooncrawl/blockchain.py @@ -27,6 +27,7 @@ from .settings import ( MOONSTREAM_POLYGON_WEB3_PROVIDER_URI, MOONSTREAM_WYRM_WEB3_PROVIDER_URI, MOONSTREAM_XDAI_WEB3_PROVIDER_URI, + MOONSTREAM_ZKSYNC_ERA_TESTNET_WEB3_PROVIDER_URI, NB_ACCESS_ID_HEADER, NB_DATA_SOURCE_HEADER, WEB3_CLIENT_REQUEST_TIMEOUT_SECONDS, @@ -70,6 +71,8 @@ def connect( web3_uri = MOONSTREAM_XDAI_WEB3_PROVIDER_URI elif blockchain_type == AvailableBlockchainType.WYRM: web3_uri = MOONSTREAM_WYRM_WEB3_PROVIDER_URI + elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_TESTNET: + web3_uri = MOONSTREAM_ZKSYNC_ERA_TESTNET_WEB3_PROVIDER_URI else: raise Exception("Wrong blockchain type provided for web3 URI") @@ -123,6 +126,11 @@ def add_block(db_session, block: Any, blockchain_type: AvailableBlockchainType) ) if blockchain_type == AvailableBlockchainType.XDAI: block_obj.author = block.author + if blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_TESTNET: + block_obj.mix_hash = block.get("mixHash", "") + block_obj.sha3_uncles = block.get("sha3Uncles", "") + block_obj.l1_batch_number = block.get("l1BatchNumber", None) + block_obj.l1_batch_timestamp = block.get("l1BatchTimestamp", None) db_session.add(block_obj) @@ -152,6 +160,9 @@ def add_block_transactions( transaction_type=int(tx["type"], 0) if tx.get("type") is not None else None, value=tx.value, ) + if blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_TESTNET: + tx_obj.l1_batch_number = tx.get("l1BatchNumber", None) + tx_obj.l1_batch_tx_index = tx.get("l1BatchTxIndex", None) db_session.add(tx_obj) diff --git a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/continuous_crawler.py b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/continuous_crawler.py index fa8249b6..3ab46897 100644 --- a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/continuous_crawler.py +++ b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/continuous_crawler.py @@ -130,6 +130,8 @@ def continuous_crawler( network = Network.xdai elif blockchain_type == AvailableBlockchainType.WYRM: network = Network.wyrm + elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_TESTNET: + network = Network.zksync_era_testnet 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 de52d52e..0c7dfd54 100644 --- a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/crawler.py +++ b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/crawler.py @@ -35,6 +35,7 @@ class SubscriptionTypes(Enum): MUMBAI_BLOCKCHAIN = "mumbai_smartcontract" XDAI_BLOCKCHAIN = "xdai_smartcontract" WYRM_BLOCKCHAIN = "wyrm_smartcontract" + ZKSYNC_ERA_TESTNET_BLOCKCHAIN = "zksync_era_testnet_smartcontract" def abi_input_signature(input_abi: Dict[str, Any]) -> str: @@ -139,6 +140,8 @@ def blockchain_type_to_subscription_type( return SubscriptionTypes.XDAI_BLOCKCHAIN elif blockchain_type == AvailableBlockchainType.WYRM: return SubscriptionTypes.WYRM_BLOCKCHAIN + elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_TESTNET: + return SubscriptionTypes.ZKSYNC_ERA_TESTNET_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 98e93b17..7bc27bd7 100644 --- a/crawlers/mooncrawl/mooncrawl/moonworm_crawler/function_call_crawler.py +++ b/crawlers/mooncrawl/mooncrawl/moonworm_crawler/function_call_crawler.py @@ -68,6 +68,8 @@ def function_call_crawler( network = Network.xdai elif blockchain_type == AvailableBlockchainType.WYRM: network = Network.wyrm + elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_TESTNET: + network = Network.zksync_era_testnet else: raise ValueError(f"Unknown blockchain type: {blockchain_type}") diff --git a/crawlers/mooncrawl/mooncrawl/settings.py b/crawlers/mooncrawl/mooncrawl/settings.py index d9a24f70..b0d36b89 100644 --- a/crawlers/mooncrawl/mooncrawl/settings.py +++ b/crawlers/mooncrawl/mooncrawl/settings.py @@ -114,6 +114,14 @@ MOONSTREAM_WYRM_WEB3_PROVIDER_URI = os.environ.get( if MOONSTREAM_WYRM_WEB3_PROVIDER_URI == "": raise Exception("MOONSTREAM_WYRM_WEB3_PROVIDER_URI env variable is not set") +MOONSTREAM_ZKSYNC_ERA_TESTNET_WEB3_PROVIDER_URI = os.environ.get( + "MOONSTREAM_ZKSYNC_ERA_TESTNET_WEB3_PROVIDER_URI", "" +) +if MOONSTREAM_ZKSYNC_ERA_TESTNET_WEB3_PROVIDER_URI == "": + raise Exception( + "MOONSTREAM_ZKSYNC_ERA_TESTNET_WEB3_PROVIDER_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 71cc3320..2a223bdd 100644 --- a/crawlers/mooncrawl/mooncrawl/stats_worker/dashboard.py +++ b/crawlers/mooncrawl/mooncrawl/stats_worker/dashboard.py @@ -48,6 +48,7 @@ subscription_id_by_blockchain = { "mumbai": "mumbai_smartcontract", "xdai": "xdai_smartcontract", "wyrm": "wyrm_smartcontract", + "zksync_era_testnet": "zksync_era_testnet_smartcontract", } blockchain_by_subscription_id = { @@ -56,11 +57,13 @@ blockchain_by_subscription_id = { "mumbai_blockchain": "mumbai", "xdai_blockchain": "xdai", "wyrm_blockchain": "wyrm", + "zksync_era_testnet_blockchain": "zksync_era_testnet", "ethereum_smartcontract": "ethereum", "polygon_smartcontract": "polygon", "mumbai_smartcontract": "mumbai", "xdai_smartcontract": "xdai", "wyrm_smartcontract": "wyrm", + "zksync_era_testnet_smartcontract": "zksync_era_testnet", } diff --git a/crawlers/mooncrawl/sample.env b/crawlers/mooncrawl/sample.env index f1b863a0..57e91f94 100644 --- a/crawlers/mooncrawl/sample.env +++ b/crawlers/mooncrawl/sample.env @@ -25,6 +25,7 @@ export MOONSTREAM_POLYGON_WEB3_PROVIDER_URI="https://=0.2.8", "chardet", "fastapi", - "moonstreamdb>=0.3.3", + "moonstreamdb>=0.3.4", "moonstream>=0.1.1", "moonstream-entity>=0.0.5", "moonworm[moonstream]>=0.6.2",