kopia lustrzana https://github.com/bugout-dev/moonstream
Blast and Blast Sepolia crawling support
rodzic
49b49153ac
commit
784ff2a740
|
@ -26,6 +26,8 @@ from .settings import (
|
||||||
MOONSTREAM_NODE_ARBITRUM_SEPOLIA_A_EXTERNAL_URI,
|
MOONSTREAM_NODE_ARBITRUM_SEPOLIA_A_EXTERNAL_URI,
|
||||||
MOONSTREAM_NODE_AVALANCHE_A_EXTERNAL_URI,
|
MOONSTREAM_NODE_AVALANCHE_A_EXTERNAL_URI,
|
||||||
MOONSTREAM_NODE_AVALANCHE_FUJI_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_ETHEREUM_A_EXTERNAL_URI,
|
||||||
MOONSTREAM_NODE_MUMBAI_A_EXTERNAL_URI,
|
MOONSTREAM_NODE_MUMBAI_A_EXTERNAL_URI,
|
||||||
MOONSTREAM_NODE_POLYGON_A_EXTERNAL_URI,
|
MOONSTREAM_NODE_POLYGON_A_EXTERNAL_URI,
|
||||||
|
@ -82,6 +84,10 @@ def connect(
|
||||||
web3_uri = MOONSTREAM_NODE_AVALANCHE_A_EXTERNAL_URI
|
web3_uri = MOONSTREAM_NODE_AVALANCHE_A_EXTERNAL_URI
|
||||||
elif blockchain_type == AvailableBlockchainType.AVALANCHE_FUJI:
|
elif blockchain_type == AvailableBlockchainType.AVALANCHE_FUJI:
|
||||||
web3_uri = MOONSTREAM_NODE_AVALANCHE_FUJI_A_EXTERNAL_URI
|
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:
|
else:
|
||||||
raise Exception("Wrong blockchain type provided for web3 URI")
|
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:
|
if blockchain_type == AvailableBlockchainType.XDAI:
|
||||||
block_obj.author = block.author
|
block_obj.author = block.author
|
||||||
if (
|
elif (
|
||||||
blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_TESTNET
|
blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_TESTNET
|
||||||
or blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_SEPOLIA
|
or blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_SEPOLIA
|
||||||
or blockchain_type == AvailableBlockchainType.ZKSYNC_ERA
|
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
|
if block.get("l1BatchTimestamp") is not None
|
||||||
else None
|
else None
|
||||||
)
|
)
|
||||||
if (
|
elif (
|
||||||
blockchain_type == AvailableBlockchainType.ARBITRUM_NOVA
|
blockchain_type == AvailableBlockchainType.ARBITRUM_NOVA
|
||||||
or blockchain_type == AvailableBlockchainType.ARBITRUM_SEPOLIA
|
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_count = hex_to_int(block.get("sendCount"))
|
||||||
block_obj.send_root = block.get("sendRoot", "")
|
block_obj.send_root = block.get("sendRoot", "")
|
||||||
block_obj.mix_hash = block.get("mixHash", "")
|
block_obj.mix_hash = block.get("mixHash", "")
|
||||||
|
elif (
|
||||||
if (
|
|
||||||
blockchain_type == AvailableBlockchainType.XAI
|
blockchain_type == AvailableBlockchainType.XAI
|
||||||
or blockchain_type == AvailableBlockchainType.XAI_SEPOLIA
|
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_count = hex_to_int(block.get("sendCount"))
|
||||||
block_obj.send_root = block.get("sendRoot", "")
|
block_obj.send_root = block.get("sendRoot", "")
|
||||||
block_obj.mix_hash = block.get("mixHash", "")
|
block_obj.mix_hash = block.get("mixHash", "")
|
||||||
|
elif (
|
||||||
if (
|
|
||||||
blockchain_type == AvailableBlockchainType.AVALANCHE
|
blockchain_type == AvailableBlockchainType.AVALANCHE
|
||||||
or blockchain_type == AvailableBlockchainType.AVALANCHE_FUJI
|
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.block_gas_cost = block.get("blockGasCost")
|
||||||
block_obj.ext_data_gas_used = block.get("extDataGasUsed", "")
|
block_obj.ext_data_gas_used = block.get("extDataGasUsed", "")
|
||||||
block_obj.ext_data_hash = block.get("extDataHash", "")
|
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)
|
db_session.add(block_obj)
|
||||||
|
|
||||||
|
|
|
@ -152,6 +152,10 @@ def continuous_crawler(
|
||||||
network = Network.avalanche
|
network = Network.avalanche
|
||||||
elif blockchain_type == AvailableBlockchainType.AVALANCHE_FUJI:
|
elif blockchain_type == AvailableBlockchainType.AVALANCHE_FUJI:
|
||||||
network = Network.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:
|
else:
|
||||||
raise ValueError(f"Unknown blockchain type: {blockchain_type}")
|
raise ValueError(f"Unknown blockchain type: {blockchain_type}")
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,8 @@ class SubscriptionTypes(Enum):
|
||||||
XAI_SEPOLIA_BLOCKCHAIN = "xai_sepolia_smartcontract"
|
XAI_SEPOLIA_BLOCKCHAIN = "xai_sepolia_smartcontract"
|
||||||
AVALANCHE_BLOCKCHAIN = "avalanche_smartcontract"
|
AVALANCHE_BLOCKCHAIN = "avalanche_smartcontract"
|
||||||
AVALANCHE_FUJI_BLOCKCHAIN = "avalanche_fuji_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:
|
def abi_input_signature(input_abi: Dict[str, Any]) -> str:
|
||||||
|
@ -166,6 +168,10 @@ def blockchain_type_to_subscription_type(
|
||||||
return SubscriptionTypes.AVALANCHE_BLOCKCHAIN
|
return SubscriptionTypes.AVALANCHE_BLOCKCHAIN
|
||||||
elif blockchain_type == AvailableBlockchainType.AVALANCHE_FUJI:
|
elif blockchain_type == AvailableBlockchainType.AVALANCHE_FUJI:
|
||||||
return SubscriptionTypes.AVALANCHE_FUJI_BLOCKCHAIN
|
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:
|
else:
|
||||||
raise ValueError(f"Unknown blockchain type: {blockchain_type}")
|
raise ValueError(f"Unknown blockchain type: {blockchain_type}")
|
||||||
|
|
||||||
|
|
|
@ -72,6 +72,8 @@ def function_call_crawler(
|
||||||
network = Network.zksync_era_testnet
|
network = Network.zksync_era_testnet
|
||||||
elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA:
|
elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA:
|
||||||
network = Network.zksync_era
|
network = Network.zksync_era
|
||||||
|
elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_SEPOLIA:
|
||||||
|
network = Network.zksync_era_sepolia
|
||||||
elif blockchain_type == AvailableBlockchainType.ARBITRUM_NOVA:
|
elif blockchain_type == AvailableBlockchainType.ARBITRUM_NOVA:
|
||||||
network = Network.arbitrum_nova
|
network = Network.arbitrum_nova
|
||||||
elif blockchain_type == AvailableBlockchainType.ARBITRUM_SEPOLIA:
|
elif blockchain_type == AvailableBlockchainType.ARBITRUM_SEPOLIA:
|
||||||
|
@ -80,6 +82,14 @@ def function_call_crawler(
|
||||||
network = Network.xai
|
network = Network.xai
|
||||||
elif blockchain_type == AvailableBlockchainType.XAI_SEPOLIA:
|
elif blockchain_type == AvailableBlockchainType.XAI_SEPOLIA:
|
||||||
network = Network.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:
|
else:
|
||||||
raise ValueError(f"Unknown blockchain type: {blockchain_type}")
|
raise ValueError(f"Unknown blockchain type: {blockchain_type}")
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,8 @@ def historical_crawler(
|
||||||
network = Network.zksync_era_testnet
|
network = Network.zksync_era_testnet
|
||||||
elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA:
|
elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA:
|
||||||
network = Network.zksync_era
|
network = Network.zksync_era
|
||||||
|
elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_SEPOLIA:
|
||||||
|
network = Network.zksync_era_sepolia
|
||||||
elif blockchain_type == AvailableBlockchainType.ARBITRUM_NOVA:
|
elif blockchain_type == AvailableBlockchainType.ARBITRUM_NOVA:
|
||||||
network = Network.arbitrum_nova
|
network = Network.arbitrum_nova
|
||||||
elif blockchain_type == AvailableBlockchainType.ARBITRUM_SEPOLIA:
|
elif blockchain_type == AvailableBlockchainType.ARBITRUM_SEPOLIA:
|
||||||
|
@ -74,6 +76,14 @@ def historical_crawler(
|
||||||
network = Network.xai
|
network = Network.xai
|
||||||
elif blockchain_type == AvailableBlockchainType.XAI_SEPOLIA:
|
elif blockchain_type == AvailableBlockchainType.XAI_SEPOLIA:
|
||||||
network = Network.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:
|
else:
|
||||||
raise Exception("Unsupported blockchain type provided")
|
raise Exception("Unsupported blockchain type provided")
|
||||||
|
|
||||||
|
|
|
@ -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_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 = 4
|
||||||
MOONSTREAM_CRAWL_WORKERS_RAW = os.environ.get("MOONSTREAM_CRAWL_WORKERS")
|
MOONSTREAM_CRAWL_WORKERS_RAW = os.environ.get("MOONSTREAM_CRAWL_WORKERS")
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -62,6 +62,8 @@ subscription_id_by_blockchain = {
|
||||||
"xai_sepolia": "xai_sepolia_smartcontract",
|
"xai_sepolia": "xai_sepolia_smartcontract",
|
||||||
"avalanche": "avalanche_smartcontract",
|
"avalanche": "avalanche_smartcontract",
|
||||||
"avalanche_fuji": "avalanche_fuji_smartcontract",
|
"avalanche_fuji": "avalanche_fuji_smartcontract",
|
||||||
|
"blast": "blast_smartcontract",
|
||||||
|
"blast_sepolia": "blast_sepolia_smartcontract",
|
||||||
}
|
}
|
||||||
|
|
||||||
blockchain_by_subscription_id = {
|
blockchain_by_subscription_id = {
|
||||||
|
@ -79,6 +81,8 @@ blockchain_by_subscription_id = {
|
||||||
"xai_sepolia_blockchain": "xai_sepolia",
|
"xai_sepolia_blockchain": "xai_sepolia",
|
||||||
"avalanche_blockchain": "avalanche",
|
"avalanche_blockchain": "avalanche",
|
||||||
"avalanche_fuji_blockchain": "avalanche_fuji",
|
"avalanche_fuji_blockchain": "avalanche_fuji",
|
||||||
|
"blast_blockchain": "blast",
|
||||||
|
"blast_sepolia_blockchain": "blast_sepolia",
|
||||||
"ethereum_smartcontract": "ethereum",
|
"ethereum_smartcontract": "ethereum",
|
||||||
"polygon_smartcontract": "polygon",
|
"polygon_smartcontract": "polygon",
|
||||||
"mumbai_smartcontract": "mumbai",
|
"mumbai_smartcontract": "mumbai",
|
||||||
|
@ -93,6 +97,8 @@ blockchain_by_subscription_id = {
|
||||||
"xai_sepolia_smartcontract": "xai_sepolia",
|
"xai_sepolia_smartcontract": "xai_sepolia",
|
||||||
"avalanche_smartcontract": "avalanche",
|
"avalanche_smartcontract": "avalanche",
|
||||||
"avalanche_fuji_smartcontract": "avalanche_fuji",
|
"avalanche_fuji_smartcontract": "avalanche_fuji",
|
||||||
|
"blast_smartcontract": "blast",
|
||||||
|
"blast_sepolia_smartcontract": "blast_sepolia",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,3 +11,6 @@ ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-tqdm.*]
|
[mypy-tqdm.*]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-moonworm.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
|
@ -33,6 +33,8 @@ export MOONSTREAM_NODE_XAI_A_EXTERNAL_URI="https://<connection_path_uri_to_node>
|
||||||
export MOONSTREAM_NODE_XAI_SEPOLIA_A_EXTERNAL_URI="https://<connection_path_uri_to_node>"
|
export MOONSTREAM_NODE_XAI_SEPOLIA_A_EXTERNAL_URI="https://<connection_path_uri_to_node>"
|
||||||
export MOONSTREAM_NODE_AVALANCHE_A_EXTERNAL_URI="https://<connection_path_uri_to_node>"
|
export MOONSTREAM_NODE_AVALANCHE_A_EXTERNAL_URI="https://<connection_path_uri_to_node>"
|
||||||
export MOONSTREAM_NODE_AVALANCHE_FUJI_A_EXTERNAL_URI="https://<connection_path_uri_to_node>"
|
export MOONSTREAM_NODE_AVALANCHE_FUJI_A_EXTERNAL_URI="https://<connection_path_uri_to_node>"
|
||||||
|
export MOONSTREAM_NODE_BLAST_A_EXTERNAL_URI="https://<connection_path_uri_to_node>"
|
||||||
|
export MOONSTREAM_NODE_BLAST_SEPOLIA_A_EXTERNAL_URI="https://<connection_path_uri_to_node>"
|
||||||
|
|
||||||
# AWS environment variables
|
# AWS environment variables
|
||||||
export MOONSTREAM_S3_SMARTCONTRACTS_BUCKET="<AWS_S3_bucket_for_smart_contracts>"
|
export MOONSTREAM_S3_SMARTCONTRACTS_BUCKET="<AWS_S3_bucket_for_smart_contracts>"
|
||||||
|
|
|
@ -37,7 +37,7 @@ setup(
|
||||||
"bugout>=0.2.13",
|
"bugout>=0.2.13",
|
||||||
"chardet",
|
"chardet",
|
||||||
"fastapi",
|
"fastapi",
|
||||||
"moonstreamdb>=0.3.11",
|
"moonstreamdb>=0.3.12",
|
||||||
"moonstream>=0.1.1",
|
"moonstream>=0.1.1",
|
||||||
"moonworm[moonstream]>=0.6.2",
|
"moonworm[moonstream]>=0.6.2",
|
||||||
"humbug",
|
"humbug",
|
||||||
|
|
Ładowanie…
Reference in New Issue