kopia lustrzana https://github.com/bugout-dev/moonstream
				
				
				
			Add web3 state provider for v3.
							rodzic
							
								
									2715090354
								
							
						
					
					
						commit
						05bd67a350
					
				| 
						 | 
				
			
			@ -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,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue