diff --git a/moonworm/cli.py b/moonworm/cli.py index e5d6546..dfc6739 100644 --- a/moonworm/cli.py +++ b/moonworm/cli.py @@ -1,9 +1,10 @@ import argparse import json import os -from multiprocessing.sharedctypes import Value from pathlib import Path from shutil import copyfile +from types import MappingProxyType +from typing import Any from web3.main import Web3 from web3.middleware import geth_poa_middleware @@ -11,8 +12,7 @@ from moonworm.crawler.ethereum_state_provider import Web3StateProvider from moonworm.watch import watch_contract -from .contracts import CU, ERC20, ERC721, CULands -from .crawler.utils import Network +from .contracts import CU, ERC20, ERC721 from .deployment import find_deployment_block from .generators.basic import ( generate_contract_cli_content, @@ -154,6 +154,9 @@ def handle_watch(args: argparse.Namespace) -> None: if args.db: if args.network is None: raise ValueError("Please specify --network") + + from .crawler.networks import Network + network = Network.__members__[args.network] from .crawler.moonstream_ethereum_state_provider import ( @@ -180,7 +183,6 @@ def handle_watch(args: argparse.Namespace) -> None: state_provider.clear_db_session() else: - watch_contract( web3=web3, state_provider=Web3StateProvider(web3), @@ -215,6 +217,14 @@ def generate_argument_parser() -> argparse.ArgumentParser: """ Generates the command-line argument parser for the "moonworm" command. """ + networks: MappingProxyType[Any, Any] = MappingProxyType({}) + try: + from .crawler.networks import Network + + networks = Network.__members__ + except Exception: + pass + parser = argparse.ArgumentParser(description="Moonworm: Manage your smart contract") parser.add_argument( "-v", @@ -256,7 +266,7 @@ def generate_argument_parser() -> argparse.ArgumentParser: watch_parser.add_argument( "--network", - choices=Network.__members__, + choices=networks, default=None, help="Network name that represents models from db. If --db is set, required", ) diff --git a/moonworm/crawler/example.py b/moonworm/crawler/example.py index 7479bcb..72fdfa2 100644 --- a/moonworm/crawler/example.py +++ b/moonworm/crawler/example.py @@ -43,7 +43,6 @@ ] def run(): - if len(sys.argv) < 2: print("Usage: eventscanner.py http://your-node-url") sys.exit(1) diff --git a/moonworm/crawler/log_scanner.py b/moonworm/crawler/log_scanner.py index 27b8a29..7982770 100644 --- a/moonworm/crawler/log_scanner.py +++ b/moonworm/crawler/log_scanner.py @@ -303,7 +303,6 @@ def get_block_when(block_num): all_processed = [] for event_type in self.events: - # Callable that takes care of the underlying web3 call def _fetch_events(_start_block, _end_block): return _fetch_events_chunk( @@ -385,7 +384,6 @@ def scan( all_processed = [] while current_block <= end_block: - self.state.start_chunk(current_block, chunk_size) # Print some diagnostics to logs to try to fiddle with real world JSON-RPC API performance diff --git a/moonworm/crawler/moonstream_ethereum_state_provider.py b/moonworm/crawler/moonstream_ethereum_state_provider.py index 3600c03..620c047 100644 --- a/moonworm/crawler/moonstream_ethereum_state_provider.py +++ b/moonworm/crawler/moonstream_ethereum_state_provider.py @@ -4,26 +4,15 @@ from eth_typing.evm import ChecksumAddress from hexbytes.main import HexBytes from sqlalchemy.orm import Session -from sqlalchemy.sql.base import NO_ARG from web3 import Web3 from .ethereum_state_provider import EthereumStateProvider -from .networks import ( - MODELS, - EthereumLabel, - EthereumTransaction, - MumbaiLabel, - MumbaiTransaction, - PolygonLabel, - PolygonTransaction, - XDaiTransaction, - yield_db_session_ctx, -) -from .utils import Network +from .networks import MODELS, Network, tx_raw_types logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) + # TODO(yhtiyar) When getting block from db, filter it by `to` address, it will be faster # also get blocks in bunch class MoonstreamEthereumStateProvider(EthereumStateProvider): @@ -81,9 +70,7 @@ def get_last_block_number(self) -> int: @staticmethod def _transform_to_w3_tx( - tx_raw: Union[ - EthereumTransaction, MumbaiTransaction, PolygonTransaction, XDaiTransaction - ], + tx_raw: tx_raw_types, ) -> Dict[str, Any]: tx = { "blockNumber": tx_raw.block_number, diff --git a/moonworm/crawler/networks.py b/moonworm/crawler/networks.py index 16a7bb8..0c85ebd 100644 --- a/moonworm/crawler/networks.py +++ b/moonworm/crawler/networks.py @@ -2,50 +2,15 @@ try: from moonstreamdb.db import yield_db_session_ctx - from moonstreamdb.models import ( - Base, + from moonstreamdb.models import ( # state/moonstream_event_state dependency maybe removed in the future EthereumBlock, EthereumLabel, - EthereumTransaction, - MumbaiBlock, - MumbaiLabel, - MumbaiTransaction, - PolygonBlock, - PolygonLabel, - PolygonTransaction, - XDaiBlock, - XDaiLabel, - XDaiTransaction, ) + from moonstreamdb.networks import MODELS, Network, tx_raw_types + except ImportError: print("this feature requires moonstreamdb which is not installed") print("to enable, run: `pip install moonworm[moonstream]`") raise ImportError( "moonstreamdb not installed, to install, run: `pip install moonworm[moonstream]`" ) - - -from .utils import Network - -MODELS: Dict[Network, Dict[str, Base]] = { - Network.ethereum: { - "blocks": EthereumBlock, - "labels": EthereumLabel, - "transactions": EthereumTransaction, - }, - Network.mumbai: { - "blocks": MumbaiBlock, - "labels": MumbaiLabel, - "transactions": MumbaiTransaction, - }, - Network.polygon: { - "blocks": PolygonBlock, - "labels": PolygonLabel, - "transactions": PolygonTransaction, - }, - Network.xdai: { - "blocks": XDaiBlock, - "labels": XDaiLabel, - "transactions": XDaiTransaction, - }, -} diff --git a/moonworm/crawler/state/moonstream_event_state.py b/moonworm/crawler/state/moonstream_event_state.py index fbdcc28..4577f58 100644 --- a/moonworm/crawler/state/moonstream_event_state.py +++ b/moonworm/crawler/state/moonstream_event_state.py @@ -1,7 +1,7 @@ -from moonstreamdb.models import EthereumBlock, EthereumLabel from sqlalchemy.orm import Query, Session from web3 import Web3 +from ..networks import EthereumBlock, EthereumLabel from .event_scanner_state import EventScannerState BLOCK_TIMESTAMP_CACHE = {} diff --git a/moonworm/crawler/utils.py b/moonworm/crawler/utils.py deleted file mode 100644 index 2fb7557..0000000 --- a/moonworm/crawler/utils.py +++ /dev/null @@ -1,8 +0,0 @@ -from enum import Enum - - -class Network(Enum): - ethereum = "ethereum" - polygon = "polygon" - mumbai = "mumbai" - xdai = "xdai" diff --git a/moonworm/generators/basic.py b/moonworm/generators/basic.py index 2e8611c..1cfec03 100644 --- a/moonworm/generators/basic.py +++ b/moonworm/generators/basic.py @@ -341,7 +341,6 @@ def generate_contract_constructor_function( def generate_contract_function(func_object: Dict[str, Any]) -> cst.FunctionDef: - default_param_name = "arg" default_counter = 1 func_params = [] diff --git a/moonworm/generators/brownie.py b/moonworm/generators/brownie.py index 3d179ae..b05be9e 100644 --- a/moonworm/generators/brownie.py +++ b/moonworm/generators/brownie.py @@ -235,7 +235,6 @@ def generate_brownie_contract_function( f"return self.contract.{func_raw_name}({','.join(param_names)})" ) else: - func_params.append( cst.Param( name=cst.Name(value="block_number"), diff --git a/moonworm/tests/test_tester_provider.py b/moonworm/tests/test_tester_provider.py index 4552030..5d8bbf7 100644 --- a/moonworm/tests/test_tester_provider.py +++ b/moonworm/tests/test_tester_provider.py @@ -52,7 +52,6 @@ def check_eth_send( send_value, tx_receipt, ): - assert receiver_current_balance == receiver_previous_balance + send_value assert ( sender_current_balance @@ -60,7 +59,6 @@ def check_eth_send( ) def test_submit_transaction(self) -> None: - sender = Web3.toChecksumAddress(PK_ADDRESS) self.web3.eth.send_transaction receiver = Web3.toChecksumAddress(self.web3.eth.accounts[1]) @@ -95,7 +93,6 @@ def test_submit_transaction(self) -> None: ) def test_submit_signed_transaction(self) -> None: - sender = Web3.toChecksumAddress(PK_ADDRESS) self.web3.eth.send_transaction receiver = Web3.toChecksumAddress(self.web3.eth.accounts[1]) diff --git a/moonworm/version.py b/moonworm/version.py index d568ee0..af16777 100644 --- a/moonworm/version.py +++ b/moonworm/version.py @@ -1 +1 @@ -MOONWORM_VERSION = "0.6.0" +MOONWORM_VERSION = "0.6.2" diff --git a/moonworm/web3_util.py b/moonworm/web3_util.py index 3494923..f777da2 100644 --- a/moonworm/web3_util.py +++ b/moonworm/web3_util.py @@ -53,7 +53,6 @@ def get_nonce(web3: Web3, address: ChecksumAddress) -> Nonce: def submit_transaction( web3: Web3, transaction: Union[TxParams, Any], signer_private_key: str ) -> HexBytes: - """ Signs and submits json transaction to blockchain from the name of signer """