Merge pull request #98 from bugout-dev/crawl_events_as_individual_function

Move _crawl_events from watch_contract.
async-crawl-events v0.5.1
Andrey Dolgolev 2022-09-20 20:36:29 +03:00 zatwierdzone przez GitHub
commit d8c2c371b1
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
3 zmienionych plików z 53 dodań i 36 usunięć

Wyświetl plik

@ -3,7 +3,7 @@ import datetime
import json
import logging
import time
from typing import Any, Callable, Iterable, List, Optional, Tuple
from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple
from eth_abi.codec import ABICodec
from eth_typing.evm import ChecksumAddress
@ -127,6 +127,47 @@ def _fetch_events_chunk(
return all_events
def _crawl_events(
web3: Web3,
event_abi: Any,
from_block: int,
to_block: int,
batch_size: int,
contract_address: ChecksumAddress,
batch_size_update_threshold: int = 1000,
max_blocks_batch: int = 10000,
min_blocks_batch: int = 100,
) -> Tuple[List[Dict[str, Any]], int]:
"""
Crawls events from the given block range.
reduces the batch_size if response is failing.
increases the batch_size if response is successful.
"""
events = []
current_from_block = from_block
while current_from_block <= to_block:
current_to_block = min(current_from_block + batch_size, to_block)
try:
events_chunk = _fetch_events_chunk(
web3,
event_abi,
current_from_block,
current_to_block,
[contract_address],
)
events.extend(events_chunk)
current_from_block = current_to_block + 1
if len(events) <= batch_size_update_threshold:
batch_size = min(batch_size * 2, max_blocks_batch)
except Exception as e:
if batch_size <= min_blocks_batch:
raise e
time.sleep(0.1)
batch_size = max(batch_size // 2, min_blocks_batch)
return events, batch_size
class EventScanner:
def __init__(
self,

Wyświetl plik

@ -1 +1 @@
MOONWORM_VERSION = "0.5.0"
MOONWORM_VERSION = "0.5.1"

Wyświetl plik

@ -24,7 +24,7 @@ from .crawler.function_call_crawler import (
FunctionCallCrawlerState,
Web3StateProvider,
)
from .crawler.log_scanner import _fetch_events_chunk
from .crawler.log_scanner import _crawl_events, _fetch_events_chunk
class MockState(FunctionCallCrawlerState):
@ -113,38 +113,6 @@ def watch_contract(
None. Results are printed to stdout and, if an outfile has been provided, also to the file.
"""
def _crawl_events(
event_abi, from_block: int, to_block: int, batch_size: int
) -> Tuple[List[Dict[str, Any]], int]:
"""
Crawls events from the given block range.
reduces the batch_size if response is failing.
increases the batch_size if response is successful.
"""
events = []
current_from_block = from_block
while current_from_block <= to_block:
current_to_block = min(current_from_block + batch_size, to_block)
try:
events_chunk = _fetch_events_chunk(
web3,
event_abi,
current_from_block,
current_to_block,
[contract_address],
)
events.extend(events_chunk)
current_from_block = current_to_block + 1
if len(events) <= batch_size_update_threshold:
batch_size = min(batch_size * 2, max_blocks_batch)
except Exception as e:
if batch_size <= min_blocks_batch:
raise e
time.sleep(0.1)
batch_size = max(batch_size // 2, min_blocks_batch)
return events, batch_size
current_batch_size = min_blocks_batch
state = MockState()
crawler = FunctionCallCrawler(
@ -194,7 +162,15 @@ def watch_contract(
for event_abi in event_abis:
all_events, new_batch_size = _crawl_events(
event_abi, current_block, until_block, current_batch_size
web3,
event_abi,
current_block,
until_block,
current_batch_size,
contract_address,
batch_size_update_threshold,
max_blocks_batch,
min_blocks_batch,
)
if only_events: