moonstream/moonstreamdb/moonstreamdb/blockchain.py

245 wiersze
7.6 KiB
Python
Czysty Zwykły widok Historia

2023-07-12 11:23:00 +00:00
from enum import Enum
from typing import Type, Union
from .models import (
EthereumBlock,
EthereumLabel,
EthereumTransaction,
2022-08-09 12:51:49 +00:00
MumbaiBlock,
MumbaiLabel,
MumbaiTransaction,
2023-07-12 11:23:00 +00:00
PolygonBlock,
PolygonLabel,
PolygonTransaction,
2023-03-06 15:58:25 +00:00
WyrmBlock,
WyrmLabel,
2023-03-07 15:19:01 +00:00
WyrmTransaction,
2023-07-12 11:23:00 +00:00
XDaiBlock,
XDaiLabel,
XDaiTransaction,
ZkSyncEraTestnetBlock,
ZkSyncEraTestnetLabel,
ZkSyncEraTestnetTransaction,
2023-08-29 00:45:54 +00:00
ZkSyncEraBlock,
ZkSyncEraLabel,
ZkSyncEraTransaction,
2024-01-30 13:57:13 +00:00
ArbitrumNovaBlock,
ArbitrumNovaTransaction,
ArbitrumNovaLabel,
2024-02-20 12:57:29 +00:00
ArbitrumSepoliaBlock,
ArbitrumSepoliaTransaction,
ArbitrumSepoliaLabel,
2024-02-21 01:27:06 +00:00
XaiBlock,
XaiLabel,
XaiTransaction,
2024-03-13 22:43:38 +00:00
XaiSepoliaBlock,
XaiSepoliaLabel,
XaiSepoliaTransaction,
)
class AvailableBlockchainType(Enum):
ETHEREUM = "ethereum"
POLYGON = "polygon"
2022-08-09 12:51:49 +00:00
MUMBAI = "mumbai"
XDAI = "xdai"
2023-03-06 15:58:25 +00:00
WYRM = "wyrm"
2023-07-12 11:23:00 +00:00
ZKSYNC_ERA_TESTNET = "zksync_era_testnet"
2023-08-29 00:45:54 +00:00
ZKSYNC_ERA = "zksync_era"
2024-01-30 13:57:13 +00:00
ARBITRUM_NOVA = "arbitrum_nova"
2024-02-20 12:57:29 +00:00
ARBITRUM_SEPOLIA = "arbitrum_sepolia"
2024-02-21 01:27:06 +00:00
XAI = "xai"
2024-03-13 22:49:34 +00:00
XAI_SEPOLIA = "xai_sepolia"
def get_block_model(
blockchain_type: AvailableBlockchainType,
2023-07-12 11:23:00 +00:00
) -> Type[
Union[
EthereumBlock,
PolygonBlock,
MumbaiBlock,
XDaiBlock,
WyrmBlock,
ZkSyncEraTestnetBlock,
2023-08-29 00:45:54 +00:00
ZkSyncEraBlock,
2024-01-30 13:57:13 +00:00
ArbitrumNovaBlock,
2024-02-20 12:57:29 +00:00
ArbitrumSepoliaBlock,
2024-02-21 01:27:06 +00:00
XaiBlock,
2024-03-13 22:43:38 +00:00
XaiSepoliaBlock,
2023-07-12 11:23:00 +00:00
]
]:
"""
2024-03-13 22:43:38 +00:00
Depends on provided blockchain type: Ethereum, Polygon, Mumbai, XDai, Wyrm, ZkSyncEra, ZkSyncEraTestnet, ArbitrumNova, ArbitrumSepolia, Xai, XaiSepolia
2022-08-09 12:51:49 +00:00
set proper blocks model.
"""
2023-03-07 15:19:01 +00:00
block_model: Type[
2023-07-12 11:23:00 +00:00
Union[
EthereumBlock,
PolygonBlock,
MumbaiBlock,
XDaiBlock,
WyrmBlock,
ZkSyncEraTestnetBlock,
2023-08-29 00:45:54 +00:00
ZkSyncEraBlock,
2024-01-30 13:57:13 +00:00
ArbitrumNovaBlock,
2024-02-20 12:57:29 +00:00
ArbitrumSepoliaBlock,
2024-02-21 01:27:06 +00:00
XaiBlock,
2024-03-13 22:43:38 +00:00
XaiSepoliaBlock,
2023-07-12 11:23:00 +00:00
]
2023-03-07 15:19:01 +00:00
]
if blockchain_type == AvailableBlockchainType.ETHEREUM:
block_model = EthereumBlock
elif blockchain_type == AvailableBlockchainType.POLYGON:
block_model = PolygonBlock
2022-08-09 12:51:49 +00:00
elif blockchain_type == AvailableBlockchainType.MUMBAI:
block_model = MumbaiBlock
elif blockchain_type == AvailableBlockchainType.XDAI:
block_model = XDaiBlock
2023-03-06 15:58:25 +00:00
elif blockchain_type == AvailableBlockchainType.WYRM:
block_model = WyrmBlock
2023-07-12 11:23:00 +00:00
elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_TESTNET:
block_model = ZkSyncEraTestnetBlock
2023-08-29 00:45:54 +00:00
elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA:
block_model = ZkSyncEraBlock
2024-01-30 13:57:13 +00:00
elif blockchain_type == AvailableBlockchainType.ARBITRUM_NOVA:
block_model = ArbitrumNovaBlock
2024-02-20 12:57:29 +00:00
elif blockchain_type == AvailableBlockchainType.ARBITRUM_SEPOLIA:
block_model = ArbitrumSepoliaBlock
2024-02-21 01:27:06 +00:00
elif blockchain_type == AvailableBlockchainType.XAI:
block_model = XaiBlock
2024-03-13 22:43:38 +00:00
elif blockchain_type == AvailableBlockchainType.XAI_SEPOLIA:
block_model = XaiSepoliaBlock
else:
raise Exception("Unsupported blockchain type provided")
return block_model
def get_label_model(
blockchain_type: AvailableBlockchainType,
2023-07-12 11:23:00 +00:00
) -> Type[
Union[
EthereumLabel,
PolygonLabel,
MumbaiLabel,
XDaiLabel,
WyrmLabel,
ZkSyncEraTestnetLabel,
2023-08-29 00:45:54 +00:00
ZkSyncEraLabel,
2024-01-30 13:57:13 +00:00
ArbitrumNovaLabel,
2024-02-20 12:57:29 +00:00
ArbitrumSepoliaLabel,
2024-02-21 01:27:06 +00:00
XaiLabel,
2024-03-13 22:43:38 +00:00
XaiSepoliaLabel,
2023-07-12 11:23:00 +00:00
]
]:
"""
2024-03-13 22:43:38 +00:00
Depends on provided blockchain type: Ethereum, Polygon, Mumbai, XDai, Wyrm, ZkSyncEra, ZkSyncEraTestnet, ArbitrumNova, ArbitrumSepolia, Xai, XaiSepolia
2022-08-09 12:51:49 +00:00
set proper block label model.
"""
2023-03-07 15:19:01 +00:00
label_model: Type[
2023-07-12 11:23:00 +00:00
Union[
EthereumLabel,
PolygonLabel,
MumbaiLabel,
XDaiLabel,
WyrmLabel,
ZkSyncEraTestnetLabel,
2023-08-29 00:45:54 +00:00
ZkSyncEraLabel,
2024-01-30 13:57:13 +00:00
ArbitrumNovaLabel,
2024-02-20 12:57:29 +00:00
ArbitrumSepoliaLabel,
2024-02-21 01:27:06 +00:00
XaiLabel,
2024-03-13 22:43:38 +00:00
XaiSepoliaLabel,
2023-07-12 11:23:00 +00:00
]
2023-03-07 15:19:01 +00:00
]
if blockchain_type == AvailableBlockchainType.ETHEREUM:
label_model = EthereumLabel
elif blockchain_type == AvailableBlockchainType.POLYGON:
label_model = PolygonLabel
2022-08-09 12:51:49 +00:00
elif blockchain_type == AvailableBlockchainType.MUMBAI:
label_model = MumbaiLabel
elif blockchain_type == AvailableBlockchainType.XDAI:
label_model = XDaiLabel
2023-03-06 15:58:25 +00:00
elif blockchain_type == AvailableBlockchainType.WYRM:
label_model = WyrmLabel
2023-07-12 11:23:00 +00:00
elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_TESTNET:
label_model = ZkSyncEraTestnetLabel
2023-08-29 00:45:54 +00:00
elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA:
label_model = ZkSyncEraLabel
2024-01-30 13:57:13 +00:00
elif blockchain_type == AvailableBlockchainType.ARBITRUM_NOVA:
label_model = ArbitrumNovaLabel
2024-02-20 12:57:29 +00:00
elif blockchain_type == AvailableBlockchainType.ARBITRUM_SEPOLIA:
label_model = ArbitrumSepoliaLabel
2024-02-21 01:27:06 +00:00
elif blockchain_type == AvailableBlockchainType.XAI:
label_model = XaiLabel
2024-03-13 22:43:38 +00:00
elif blockchain_type == AvailableBlockchainType.XAI_SEPOLIA:
label_model = XaiSepoliaLabel
else:
raise Exception("Unsupported blockchain type provided")
return label_model
def get_transaction_model(
blockchain_type: AvailableBlockchainType,
2022-08-09 12:51:49 +00:00
) -> Type[
2023-03-07 15:19:01 +00:00
Union[
EthereumTransaction,
PolygonTransaction,
MumbaiTransaction,
XDaiTransaction,
WyrmTransaction,
2023-07-12 11:23:00 +00:00
ZkSyncEraTestnetTransaction,
2023-08-29 00:45:54 +00:00
ZkSyncEraTransaction,
2024-01-30 13:57:13 +00:00
ArbitrumNovaTransaction,
2024-02-20 12:57:29 +00:00
ArbitrumSepoliaTransaction,
2024-02-21 01:27:06 +00:00
XaiTransaction,
2024-03-13 22:43:38 +00:00
XaiSepoliaTransaction,
2023-03-07 15:19:01 +00:00
]
2022-08-09 12:51:49 +00:00
]:
"""
2024-03-13 22:43:38 +00:00
Depends on provided blockchain type: Ethereum, Polygon, Mumbai, XDai, Wyrm, ZkSyncEra, ZkSyncEraTestnet, ArbitrumNova, ArbitrumSepolia, Xai, XaiSepolia
2022-08-09 12:51:49 +00:00
set proper block transactions model.
"""
transaction_model: Type[
2022-08-09 12:51:49 +00:00
Union[
2023-03-07 15:19:01 +00:00
EthereumTransaction,
PolygonTransaction,
MumbaiTransaction,
XDaiTransaction,
WyrmTransaction,
2023-07-12 11:23:00 +00:00
ZkSyncEraTestnetTransaction,
2023-08-29 00:45:54 +00:00
ZkSyncEraTransaction,
2024-01-30 13:57:13 +00:00
ArbitrumNovaTransaction,
2024-02-20 12:57:29 +00:00
ArbitrumSepoliaTransaction,
2024-02-21 01:27:06 +00:00
XaiTransaction,
2024-03-13 22:43:38 +00:00
XaiSepoliaTransaction,
2022-08-09 12:51:49 +00:00
]
]
if blockchain_type == AvailableBlockchainType.ETHEREUM:
transaction_model = EthereumTransaction
elif blockchain_type == AvailableBlockchainType.POLYGON:
transaction_model = PolygonTransaction
2022-08-09 12:51:49 +00:00
elif blockchain_type == AvailableBlockchainType.MUMBAI:
transaction_model = MumbaiTransaction
elif blockchain_type == AvailableBlockchainType.XDAI:
transaction_model = XDaiTransaction
2023-03-06 15:58:25 +00:00
elif blockchain_type == AvailableBlockchainType.WYRM:
transaction_model = WyrmTransaction
2023-07-12 11:23:00 +00:00
elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA_TESTNET:
transaction_model = ZkSyncEraTestnetTransaction
2023-08-29 00:45:54 +00:00
elif blockchain_type == AvailableBlockchainType.ZKSYNC_ERA:
transaction_model = ZkSyncEraTransaction
2024-01-30 13:57:13 +00:00
elif blockchain_type == AvailableBlockchainType.ARBITRUM_NOVA:
transaction_model = ArbitrumNovaTransaction
2024-02-20 12:57:29 +00:00
elif blockchain_type == AvailableBlockchainType.ARBITRUM_SEPOLIA:
transaction_model = ArbitrumSepoliaTransaction
2024-02-21 01:27:06 +00:00
elif blockchain_type == AvailableBlockchainType.XAI:
transaction_model = XaiTransaction
2024-03-13 22:43:38 +00:00
elif blockchain_type == AvailableBlockchainType.XAI_SEPOLIA:
transaction_model = XaiSepoliaTransaction
else:
raise Exception("Unsupported blockchain type provided")
return transaction_model