diff --git a/mypy.ini b/mypy.ini index 8dd59a99a2..ec9389612d 100644 --- a/mypy.ini +++ b/mypy.ini @@ -17,7 +17,7 @@ no_implicit_reexport = True strict_equality = True # list created by: venv/bin/mypy | sed -n 's/.py:.*//p' | sort | uniq | tr '/' '.' | tr '\n' ',' -[mypy-benchmarks.block_ref,benchmarks.block_store,benchmarks.coin_store,benchmarks.utils,build_scripts.installer-version,chia.clvm.spend_sim,chia.cmds.configure,chia.cmds.db,chia.cmds.db_upgrade_func,chia.cmds.farm_funcs,chia.cmds.init,chia.cmds.init_funcs,chia.cmds.keys,chia.cmds.keys_funcs,chia.cmds.passphrase,chia.cmds.passphrase_funcs,chia.cmds.plotnft,chia.cmds.plotnft_funcs,chia.cmds.plots,chia.cmds.plotters,chia.cmds.show,chia.cmds.start_funcs,chia.cmds.wallet,chia.cmds.wallet_funcs,chia.consensus.block_body_validation,chia.consensus.blockchain,chia.consensus.blockchain_interface,chia.consensus.block_creation,chia.consensus.block_header_validation,chia.consensus.block_record,chia.consensus.block_root_validation,chia.consensus.coinbase,chia.consensus.constants,chia.consensus.difficulty_adjustment,chia.consensus.get_block_challenge,chia.consensus.multiprocess_validation,chia.consensus.pos_quality,chia.consensus.vdf_info_computation,chia.daemon.client,chia.daemon.keychain_proxy,chia.daemon.keychain_server,chia.daemon.server,chia.farmer.farmer,chia.farmer.farmer_api,chia.full_node.block_height_map,chia.full_node.block_store,chia.full_node.bundle_tools,chia.full_node.coin_store,chia.full_node.full_node,chia.full_node.full_node_api,chia.full_node.full_node_store,chia.full_node.generator,chia.full_node.hint_store,chia.full_node.lock_queue,chia.full_node.mempool,chia.full_node.mempool_check_conditions,chia.full_node.mempool_manager,chia.full_node.pending_tx_cache,chia.full_node.sync_store,chia.full_node.weight_proof,chia.harvester.harvester,chia.harvester.harvester_api,chia.introducer.introducer,chia.introducer.introducer_api,chia.plotters.bladebit,chia.plotters.chiapos,chia.plotters.install_plotter,chia.plotters.madmax,chia.plotters.plotters,chia.plotters.plotters_util,chia.plotting.check_plots,chia.plotting.create_plots,chia.plotting.manager,chia.plotting.util,chia.pools.pool_config,chia.pools.pool_puzzles,chia.pools.pool_wallet,chia.pools.pool_wallet_info,chia.protocols.pool_protocol,chia.rpc.crawler_rpc_api,chia.rpc.farmer_rpc_api,chia.rpc.farmer_rpc_client,chia.rpc.full_node_rpc_api,chia.rpc.full_node_rpc_client,chia.rpc.harvester_rpc_api,chia.rpc.harvester_rpc_client,chia.rpc.rpc_client,chia.rpc.rpc_server,chia.rpc.timelord_rpc_api,chia.rpc.util,chia.rpc.wallet_rpc_api,chia.rpc.wallet_rpc_client,chia.seeder.crawler,chia.seeder.crawler_api,chia.seeder.crawl_store,chia.seeder.dns_server,chia.seeder.peer_record,chia.seeder.start_crawler,chia.server.address_manager,chia.server.address_manager_store,chia.server.connection_utils,chia.server.introducer_peers,chia.server.node_discovery,chia.server.peer_store_resolver,chia.server.rate_limits,chia.server.reconnect_task,chia.server.server,chia.server.ssl_context,chia.server.start_farmer,chia.server.start_full_node,chia.server.start_harvester,chia.server.start_introducer,chia.server.start_service,chia.server.start_timelord,chia.server.start_wallet,chia.server.upnp,chia.server.ws_connection,chia.simulator.full_node_simulator,chia.simulator.start_simulator,chia.ssl.create_ssl,chia.timelord.iters_from_block,chia.timelord.timelord,chia.timelord.timelord_api,chia.timelord.timelord_launcher,chia.timelord.timelord_state,chia.types.announcement,chia.types.blockchain_format.classgroup,chia.types.blockchain_format.coin,chia.types.blockchain_format.program,chia.types.blockchain_format.proof_of_space,chia.types.blockchain_format.tree_hash,chia.types.blockchain_format.vdf,chia.types.full_block,chia.types.header_block,chia.types.mempool_item,chia.types.name_puzzle_condition,chia.types.peer_info,chia.types.spend_bundle,chia.types.transaction_queue_entry,chia.types.unfinished_block,chia.types.unfinished_header_block,chia.util.api_decorators,chia.util.block_cache,chia.util.byte_types,chia.util.cached_bls,chia.util.check_fork_next_block,chia.util.chia_logging,chia.util.config,chia.util.db_wrapper,chia.util.dump_keyring,chia.util.file_keyring,chia.util.files,chia.util.hash,chia.util.ints,chia.util.json_util,chia.util.keychain,chia.util.keyring_wrapper,chia.util.log_exceptions,chia.util.lru_cache,chia.util.make_test_constants,chia.util.merkle_set,chia.util.network,chia.util.partial_func,chia.util.pip_import,chia.util.profiler,chia.util.safe_cancel_task,chia.util.service_groups,chia.util.ssl_check,chia.util.streamable,chia.util.struct_stream,chia.util.type_checking,chia.util.validate_alert,chia.wallet.block_record,chia.wallet.cat_wallet.cat_utils,chia.wallet.cat_wallet.cat_wallet,chia.wallet.cat_wallet.lineage_store,chia.wallet.chialisp,chia.wallet.did_wallet.did_wallet,chia.wallet.did_wallet.did_wallet_puzzles,chia.wallet.key_val_store,chia.wallet.lineage_proof,chia.wallet.payment,chia.wallet.puzzles.genesis_checkers,chia.wallet.puzzles.load_clvm,chia.wallet.puzzles.p2_conditions,chia.wallet.puzzles.p2_delegated_conditions,chia.wallet.puzzles.p2_delegated_puzzle,chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle,chia.wallet.puzzles.p2_m_of_n_delegate_direct,chia.wallet.puzzles.p2_puzzle_hash,chia.wallet.puzzles.prefarm.spend_prefarm,chia.wallet.puzzles.puzzle_utils,chia.wallet.puzzles.rom_bootstrap_generator,chia.wallet.puzzles.singleton_top_layer,chia.wallet.puzzles.tails,chia.wallet.rl_wallet.rl_wallet,chia.wallet.rl_wallet.rl_wallet_puzzles,chia.wallet.secret_key_store,chia.wallet.settings.user_settings,chia.wallet.trade_manager,chia.wallet.trade_record,chia.wallet.trading.offer,chia.wallet.trading.trade_store,chia.wallet.transaction_record,chia.wallet.util.debug_spend_bundle,chia.wallet.util.new_peak_queue,chia.wallet.util.peer_request_cache,chia.wallet.util.wallet_sync_utils,chia.wallet.wallet,chia.wallet.wallet_action_store,chia.wallet.wallet_blockchain,chia.wallet.wallet_coin_store,chia.wallet.wallet_interested_store,chia.wallet.wallet_node,chia.wallet.wallet_node_api,chia.wallet.wallet_pool_store,chia.wallet.wallet_puzzle_store,chia.wallet.wallet_state_manager,chia.wallet.wallet_sync_store,chia.wallet.wallet_transaction_store,chia.wallet.wallet_user_store,chia.wallet.wallet_weight_proof_handler,installhelper,tests.blockchain.blockchain_test_utils,tests.blockchain.test_blockchain,tests.blockchain.test_blockchain_transactions,tests.block_tools,tests.build-init-files,tests.build-workflows,tests.clvm.coin_store,tests.clvm.test_chialisp_deserialization,tests.clvm.test_clvm_compilation,tests.clvm.test_program,tests.clvm.test_puzzle_compression,tests.clvm.test_puzzles,tests.clvm.test_serialized_program,tests.clvm.test_singletons,tests.clvm.test_spend_sim,tests.conftest,tests.connection_utils,tests.core.cmds.test_keys,tests.core.consensus.test_pot_iterations,tests.core.custom_types.test_coin,tests.core.custom_types.test_proof_of_space,tests.core.custom_types.test_spend_bundle,tests.core.daemon.test_daemon,tests.core.full_node.full_sync.test_full_sync,tests.core.full_node.stores.test_block_store,tests.core.full_node.stores.test_coin_store,tests.core.full_node.stores.test_full_node_store,tests.core.full_node.stores.test_hint_store,tests.core.full_node.stores.test_sync_store,tests.core.full_node.test_address_manager,tests.core.full_node.test_block_height_map,tests.core.full_node.test_conditions,tests.core.full_node.test_full_node,tests.core.full_node.test_mempool,tests.core.full_node.test_mempool_performance,tests.core.full_node.test_node_load,tests.core.full_node.test_peer_store_resolver,tests.core.full_node.test_performance,tests.core.full_node.test_transactions,tests.core.make_block_generator,tests.core.node_height,tests.core.server.test_dos,tests.core.server.test_rate_limits,tests.core.ssl.test_ssl,tests.core.test_cost_calculation,tests.core.test_crawler_rpc,tests.core.test_daemon_rpc,tests.core.test_db_conversion,tests.core.test_farmer_harvester_rpc,tests.core.test_filter,tests.core.test_full_node_rpc,tests.core.test_merkle_set,tests.core.test_setproctitle,tests.core.util.test_cached_bls,tests.core.util.test_config,tests.core.util.test_file_keyring_synchronization,tests.core.util.test_files,tests.core.util.test_keychain,tests.core.util.test_keyring_wrapper,tests.core.util.test_lru_cache,tests.core.util.test_significant_bits,tests.core.util.test_streamable,tests.core.util.test_type_checking,tests.farmer_harvester.test_farmer_harvester,tests.generator.test_compression,tests.generator.test_generator_types,tests.generator.test_list_to_batches,tests.generator.test_rom,tests.generator.test_scan,tests.plotting.test_plot_manager,tests.pools.test_pool_cmdline,tests.pools.test_pool_config,tests.pools.test_pool_puzzles_lifecycle,tests.pools.test_pool_rpc,tests.pools.test_wallet_pool_store,tests.setup_nodes,tests.simulation.test_simulation,tests.time_out_assert,tests.tools.test_full_sync,tests.tools.test_run_block,tests.util.alert_server,tests.util.benchmark_cost,tests.util.blockchain,tests.util.build_network_protocol_files,tests.util.db_connection,tests.util.generator_tools_testing,tests.util.keyring,tests.util.key_tool,tests.util.misc,tests.util.network,tests.util.rpc,tests.util.test_full_block_utils,tests.util.test_lock_queue,tests.util.test_network_protocol_files,tests.util.test_struct_stream,tests.wallet.cat_wallet.test_cat_lifecycle,tests.wallet.cat_wallet.test_cat_wallet,tests.wallet.cat_wallet.test_offer_lifecycle,tests.wallet.cat_wallet.test_trades,tests.wallet.did_wallet.test_did,tests.wallet.did_wallet.test_did_rpc,tests.wallet.rl_wallet.test_rl_rpc,tests.wallet.rl_wallet.test_rl_wallet,tests.wallet.rpc.test_wallet_rpc,tests.wallet.simple_sync.test_simple_sync_protocol,tests.wallet.sync.test_wallet_sync,tests.wallet.test_bech32m,tests.wallet.test_chialisp,tests.wallet.test_puzzle_store,tests.wallet.test_singleton,tests.wallet.test_singleton_lifecycle,tests.wallet.test_singleton_lifecycle_fast,tests.wallet.test_taproot,tests.wallet.test_wallet,tests.wallet.test_wallet_blockchain,tests.wallet.test_wallet_interested_store,tests.wallet.test_wallet_key_val_store,tests.wallet.test_wallet_user_store,tests.wallet_tools,tests.weight_proof.test_weight_proof,tools.analyze-chain,tools.run_block,tools.test_full_sync] +[mypy-benchmarks.block_ref,benchmarks.block_store,benchmarks.coin_store,benchmarks.utils,build_scripts.installer-version,chia.clvm.spend_sim,chia.cmds.configure,chia.cmds.db,chia.cmds.db_upgrade_func,chia.cmds.farm_funcs,chia.cmds.init,chia.cmds.init_funcs,chia.cmds.keys,chia.cmds.keys_funcs,chia.cmds.passphrase,chia.cmds.passphrase_funcs,chia.cmds.plotnft,chia.cmds.plotnft_funcs,chia.cmds.plots,chia.cmds.plotters,chia.cmds.show,chia.cmds.start_funcs,chia.cmds.wallet,chia.cmds.wallet_funcs,chia.consensus.block_body_validation,chia.consensus.blockchain,chia.consensus.blockchain_interface,chia.consensus.block_creation,chia.consensus.block_header_validation,chia.consensus.block_record,chia.consensus.block_root_validation,chia.consensus.coinbase,chia.consensus.constants,chia.consensus.difficulty_adjustment,chia.consensus.get_block_challenge,chia.consensus.multiprocess_validation,chia.consensus.pos_quality,chia.consensus.vdf_info_computation,chia.daemon.client,chia.daemon.keychain_proxy,chia.daemon.keychain_server,chia.daemon.server,chia.farmer.farmer,chia.farmer.farmer_api,chia.full_node.block_height_map,chia.full_node.block_store,chia.full_node.bundle_tools,chia.full_node.coin_store,chia.full_node.full_node,chia.full_node.full_node_api,chia.full_node.full_node_store,chia.full_node.generator,chia.full_node.hint_store,chia.full_node.lock_queue,chia.full_node.mempool,chia.full_node.mempool_check_conditions,chia.full_node.mempool_manager,chia.full_node.pending_tx_cache,chia.full_node.sync_store,chia.full_node.weight_proof,chia.harvester.harvester,chia.harvester.harvester_api,chia.introducer.introducer,chia.introducer.introducer_api,chia.plotters.bladebit,chia.plotters.chiapos,chia.plotters.install_plotter,chia.plotters.madmax,chia.plotters.plotters,chia.plotters.plotters_util,chia.plotting.check_plots,chia.plotting.create_plots,chia.plotting.manager,chia.plotting.util,chia.pools.pool_config,chia.pools.pool_puzzles,chia.pools.pool_wallet,chia.pools.pool_wallet_info,chia.protocols.pool_protocol,chia.rpc.crawler_rpc_api,chia.rpc.farmer_rpc_api,chia.rpc.farmer_rpc_client,chia.rpc.full_node_rpc_api,chia.rpc.full_node_rpc_client,chia.rpc.harvester_rpc_api,chia.rpc.harvester_rpc_client,chia.rpc.rpc_client,chia.rpc.rpc_server,chia.rpc.timelord_rpc_api,chia.rpc.util,chia.rpc.wallet_rpc_api,chia.rpc.wallet_rpc_client,chia.seeder.crawler,chia.seeder.crawler_api,chia.seeder.crawl_store,chia.seeder.dns_server,chia.seeder.peer_record,chia.seeder.start_crawler,chia.server.address_manager,chia.server.address_manager_store,chia.server.connection_utils,chia.server.introducer_peers,chia.server.node_discovery,chia.server.peer_store_resolver,chia.server.rate_limits,chia.server.reconnect_task,chia.server.server,chia.server.ssl_context,chia.server.start_farmer,chia.server.start_full_node,chia.server.start_harvester,chia.server.start_introducer,chia.server.start_service,chia.server.start_timelord,chia.server.start_wallet,chia.server.upnp,chia.server.ws_connection,chia.simulator.full_node_simulator,chia.simulator.start_simulator,chia.ssl.create_ssl,chia.timelord.iters_from_block,chia.timelord.timelord,chia.timelord.timelord_api,chia.timelord.timelord_launcher,chia.timelord.timelord_state,chia.types.announcement,chia.types.blockchain_format.classgroup,chia.types.blockchain_format.coin,chia.types.blockchain_format.program,chia.types.blockchain_format.proof_of_space,chia.types.blockchain_format.tree_hash,chia.types.blockchain_format.vdf,chia.types.full_block,chia.types.header_block,chia.types.mempool_item,chia.types.name_puzzle_condition,chia.types.peer_info,chia.types.spend_bundle,chia.types.transaction_queue_entry,chia.types.unfinished_block,chia.types.unfinished_header_block,chia.util.api_decorators,chia.util.block_cache,chia.util.byte_types,chia.util.cached_bls,chia.util.check_fork_next_block,chia.util.chia_logging,chia.util.config,chia.util.db_wrapper,chia.util.dump_keyring,chia.util.file_keyring,chia.util.files,chia.util.hash,chia.util.ints,chia.util.json_util,chia.util.keychain,chia.util.keyring_wrapper,chia.util.log_exceptions,chia.util.lru_cache,chia.util.make_test_constants,chia.util.merkle_set,chia.util.network,chia.util.partial_func,chia.util.pip_import,chia.util.profiler,chia.util.safe_cancel_task,chia.util.service_groups,chia.util.ssl_check,chia.util.streamable,chia.util.struct_stream,chia.util.type_checking,chia.util.validate_alert,chia.wallet.block_record,chia.wallet.cat_wallet.cat_utils,chia.wallet.cat_wallet.cat_wallet,chia.wallet.cat_wallet.lineage_store,chia.wallet.chialisp,chia.wallet.did_wallet.did_wallet,chia.wallet.did_wallet.did_wallet_puzzles,chia.wallet.key_val_store,chia.wallet.lineage_proof,chia.wallet.payment,chia.wallet.puzzles.genesis_checkers,chia.wallet.puzzles.load_clvm,chia.wallet.puzzles.p2_conditions,chia.wallet.puzzles.p2_delegated_conditions,chia.wallet.puzzles.p2_delegated_puzzle,chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle,chia.wallet.puzzles.p2_m_of_n_delegate_direct,chia.wallet.puzzles.p2_puzzle_hash,chia.wallet.puzzles.prefarm.spend_prefarm,chia.wallet.puzzles.puzzle_utils,chia.wallet.puzzles.rom_bootstrap_generator,chia.wallet.puzzles.singleton_top_layer,chia.wallet.puzzles.tails,chia.wallet.rl_wallet.rl_wallet,chia.wallet.rl_wallet.rl_wallet_puzzles,chia.wallet.secret_key_store,chia.wallet.settings.user_settings,chia.wallet.trade_manager,chia.wallet.trade_record,chia.wallet.trading.offer,chia.wallet.trading.trade_store,chia.wallet.transaction_record,chia.wallet.util.debug_spend_bundle,chia.wallet.util.new_peak_queue,chia.wallet.util.peer_request_cache,chia.wallet.util.wallet_sync_utils,chia.wallet.wallet,chia.wallet.wallet_action_store,chia.wallet.wallet_blockchain,chia.wallet.wallet_coin_store,chia.wallet.wallet_interested_store,chia.wallet.wallet_node,chia.wallet.wallet_node_api,chia.wallet.wallet_pool_store,chia.wallet.wallet_puzzle_store,chia.wallet.wallet_state_manager,chia.wallet.wallet_sync_store,chia.wallet.wallet_transaction_store,chia.wallet.wallet_user_store,chia.wallet.wallet_weight_proof_handler,installhelper,tests.blockchain.blockchain_test_utils,tests.blockchain.test_blockchain,tests.blockchain.test_blockchain_transactions,tests.block_tools,tests.build-init-files,tests.build-workflows,tests.clvm.coin_store,tests.clvm.test_chialisp_deserialization,tests.clvm.test_clvm_compilation,tests.clvm.test_program,tests.clvm.test_puzzle_compression,tests.clvm.test_puzzles,tests.clvm.test_serialized_program,tests.clvm.test_singletons,tests.clvm.test_spend_sim,tests.conftest,tests.connection_utils,tests.core.cmds.test_keys,tests.core.consensus.test_pot_iterations,tests.core.custom_types.test_coin,tests.core.custom_types.test_proof_of_space,tests.core.custom_types.test_spend_bundle,tests.core.daemon.test_daemon,tests.core.full_node.full_sync.test_full_sync,tests.core.full_node.stores.test_block_store,tests.core.full_node.stores.test_coin_store,tests.core.full_node.stores.test_full_node_store,tests.core.full_node.stores.test_hint_store,tests.core.full_node.stores.test_sync_store,tests.core.full_node.test_address_manager,tests.core.full_node.test_block_height_map,tests.core.full_node.test_conditions,tests.core.full_node.test_full_node,tests.core.full_node.test_mempool,tests.core.full_node.test_mempool_performance,tests.core.full_node.test_node_load,tests.core.full_node.test_peer_store_resolver,tests.core.full_node.test_performance,tests.core.full_node.test_transactions,tests.core.make_block_generator,tests.core.node_height,tests.core.server.test_dos,tests.core.server.test_rate_limits,tests.core.ssl.test_ssl,tests.core.test_cost_calculation,tests.core.test_crawler_rpc,tests.core.test_daemon_rpc,tests.core.test_db_conversion,tests.core.test_farmer_harvester_rpc,tests.core.test_filter,tests.core.test_full_node_rpc,tests.core.test_merkle_set,tests.core.test_setproctitle,tests.core.util.test_cached_bls,tests.core.util.test_config,tests.core.util.test_file_keyring_synchronization,tests.core.util.test_files,tests.core.util.test_keychain,tests.core.util.test_keyring_wrapper,tests.core.util.test_lru_cache,tests.core.util.test_significant_bits,tests.core.util.test_streamable,tests.core.util.test_type_checking,tests.farmer_harvester.test_farmer_harvester,tests.generator.test_compression,tests.generator.test_generator_types,tests.generator.test_list_to_batches,tests.generator.test_rom,tests.generator.test_scan,tests.plotting.test_plot_manager,tests.pools.test_pool_cmdline,tests.pools.test_pool_config,tests.pools.test_pool_puzzles_lifecycle,tests.pools.test_pool_rpc,tests.pools.test_wallet_pool_store,tests.setup_nodes,tests.setup_services,tests.simulation.test_simulation,tests.time_out_assert,tests.tools.test_full_sync,tests.tools.test_run_block,tests.util.alert_server,tests.util.benchmark_cost,tests.util.blockchain,tests.util.build_network_protocol_files,tests.util.db_connection,tests.util.generator_tools_testing,tests.util.keyring,tests.util.key_tool,tests.util.misc,tests.util.network,tests.util.rpc,tests.util.test_full_block_utils,tests.util.test_lock_queue,tests.util.test_network_protocol_files,tests.util.test_struct_stream,tests.wallet.cat_wallet.test_cat_lifecycle,tests.wallet.cat_wallet.test_cat_wallet,tests.wallet.cat_wallet.test_offer_lifecycle,tests.wallet.cat_wallet.test_trades,tests.wallet.did_wallet.test_did,tests.wallet.did_wallet.test_did_rpc,tests.wallet.rl_wallet.test_rl_rpc,tests.wallet.rl_wallet.test_rl_wallet,tests.wallet.rpc.test_wallet_rpc,tests.wallet.simple_sync.test_simple_sync_protocol,tests.wallet.sync.test_wallet_sync,tests.wallet.test_bech32m,tests.wallet.test_chialisp,tests.wallet.test_puzzle_store,tests.wallet.test_singleton,tests.wallet.test_singleton_lifecycle,tests.wallet.test_singleton_lifecycle_fast,tests.wallet.test_taproot,tests.wallet.test_wallet,tests.wallet.test_wallet_blockchain,tests.wallet.test_wallet_interested_store,tests.wallet.test_wallet_key_val_store,tests.wallet.test_wallet_user_store,tests.wallet_tools,tests.weight_proof.test_weight_proof,tools.analyze-chain,tools.run_block,tools.test_full_sync] disallow_any_generics = False disallow_subclassing_any = False disallow_untyped_calls = False diff --git a/tests/blockchain/test_blockchain_transactions.py b/tests/blockchain/test_blockchain_transactions.py index 895d5d2b12..1d0c830ac0 100644 --- a/tests/blockchain/test_blockchain_transactions.py +++ b/tests/blockchain/test_blockchain_transactions.py @@ -1,7 +1,6 @@ import logging import pytest -import pytest_asyncio from clvm.casts import int_to_bytes from chia.protocols import full_node_protocol, wallet_protocol @@ -13,7 +12,7 @@ from chia.util.errors import ConsensusError, Err from chia.util.ints import uint64 from tests.blockchain.blockchain_test_utils import _validate_and_add_block from tests.wallet_tools import WalletTool -from tests.setup_nodes import setup_two_nodes, test_constants +from tests.setup_nodes import test_constants from tests.util.generator_tools_testing import run_and_get_removals_and_additions BURN_PUZZLE_HASH = b"0" * 32 @@ -24,12 +23,6 @@ WALLET_A_PUZZLE_HASHES = [WALLET_A.get_new_puzzlehash() for _ in range(5)] log = logging.getLogger(__name__) -@pytest_asyncio.fixture(scope="function") -async def two_nodes(db_version, self_hostname): - async for _ in setup_two_nodes(test_constants, db_version=db_version, self_hostname=self_hostname): - yield _ - - class TestBlockchainTransactions: @pytest.mark.asyncio async def test_basic_blockchain_tx(self, two_nodes, bt): diff --git a/tests/conftest.py b/tests/conftest.py index eb1c32d6ca..6a0ee5f4d0 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -5,6 +5,8 @@ import pytest import pytest_asyncio import tempfile +from tests.setup_nodes import setup_node_and_wallet, setup_n_nodes, setup_two_nodes + # Set spawn after stdlib imports, but before other imports multiprocessing.set_start_method("spawn") @@ -141,3 +143,33 @@ if os.getenv("_PYTEST_RAISE", "0") != "0": @pytest.hookimpl(tryfirst=True) def pytest_internalerror(excinfo): raise excinfo.value + + +@pytest_asyncio.fixture(scope="function") +async def wallet_node(self_hostname): + async for _ in setup_node_and_wallet(test_constants, self_hostname): + yield _ + + +@pytest_asyncio.fixture(scope="function") +async def two_nodes(db_version, self_hostname): + async for _ in setup_two_nodes(test_constants, db_version=db_version, self_hostname=self_hostname): + yield _ + + +@pytest_asyncio.fixture(scope="function") +async def three_nodes(db_version, self_hostname): + async for _ in setup_n_nodes(test_constants, 3, db_version=db_version, self_hostname=self_hostname): + yield _ + + +@pytest_asyncio.fixture(scope="function") +async def four_nodes(db_version, self_hostname): + async for _ in setup_n_nodes(test_constants, 4, db_version=db_version, self_hostname=self_hostname): + yield _ + + +@pytest_asyncio.fixture(scope="function") +async def five_nodes(db_version, self_hostname): + async for _ in setup_n_nodes(test_constants, 5, db_version=db_version, self_hostname=self_hostname): + yield _ diff --git a/tests/core/full_node/full_sync/test_full_sync.py b/tests/core/full_node/full_sync/test_full_sync.py index e13b1489cd..0444f827a1 100644 --- a/tests/core/full_node/full_sync/test_full_sync.py +++ b/tests/core/full_node/full_sync/test_full_sync.py @@ -5,7 +5,6 @@ import time from typing import List import pytest -import pytest_asyncio from chia.full_node.weight_proof import _validate_sub_epoch_summaries from chia.protocols import full_node_protocol @@ -15,37 +14,13 @@ from chia.types.peer_info import PeerInfo from chia.util.hash import std_hash from chia.util.ints import uint16 from tests.core.node_height import node_height_exactly, node_height_between -from tests.setup_nodes import setup_n_nodes, setup_two_nodes, test_constants +from tests.setup_nodes import test_constants from tests.time_out_assert import time_out_assert log = logging.getLogger(__name__) -@pytest_asyncio.fixture(scope="function") -async def two_nodes(db_version, self_hostname): - async for _ in setup_two_nodes(test_constants, db_version=db_version, self_hostname=self_hostname): - yield _ - - -@pytest_asyncio.fixture(scope="function") -async def three_nodes(db_version, self_hostname): - async for _ in setup_n_nodes(test_constants, 3, db_version=db_version, self_hostname=self_hostname): - yield _ - - -@pytest_asyncio.fixture(scope="function") -async def four_nodes(db_version, self_hostname): - async for _ in setup_n_nodes(test_constants, 4, db_version=db_version, self_hostname=self_hostname): - yield _ - - -@pytest_asyncio.fixture(scope="function") -async def five_nodes(db_version, self_hostname): - async for _ in setup_n_nodes(test_constants, 5, db_version=db_version, self_hostname=self_hostname): - yield _ - - class TestFullSync: @pytest.mark.asyncio async def test_long_sync_from_zero(self, five_nodes, default_400_blocks, bt, self_hostname): diff --git a/tests/core/full_node/test_node_load.py b/tests/core/full_node/test_node_load.py index 94e500e187..bcbd7de412 100644 --- a/tests/core/full_node/test_node_load.py +++ b/tests/core/full_node/test_node_load.py @@ -1,22 +1,14 @@ import time import pytest -import pytest_asyncio from chia.protocols import full_node_protocol from chia.types.peer_info import PeerInfo from chia.util.ints import uint16 from tests.connection_utils import connect_and_get_peer -from tests.setup_nodes import setup_two_nodes, test_constants from tests.time_out_assert import time_out_assert -@pytest_asyncio.fixture(scope="function") -async def two_nodes(db_version, self_hostname): - async for _ in setup_two_nodes(test_constants, db_version=db_version, self_hostname=self_hostname): - yield _ - - class TestNodeLoad: @pytest.mark.asyncio async def test_blocks_load(self, bt, two_nodes, self_hostname): diff --git a/tests/setup_nodes.py b/tests/setup_nodes.py index 6fc0233043..e1de55f010 100644 --- a/tests/setup_nodes.py +++ b/tests/setup_nodes.py @@ -1,26 +1,24 @@ import logging import asyncio -import signal -import sqlite3 from secrets import token_bytes -from typing import Dict, List, Optional, AsyncGenerator +from typing import Dict, List from chia.consensus.constants import ConsensusConstants -from chia.daemon.server import WebSocketServer, create_server_for_daemon, daemon_launch_lock_path, singleton from chia.full_node.full_node_api import FullNodeAPI -from chia.server.start_farmer import service_kwargs_for_farmer -from chia.server.start_full_node import service_kwargs_for_full_node -from chia.server.start_harvester import service_kwargs_for_harvester -from chia.server.start_introducer import service_kwargs_for_introducer from chia.server.start_service import Service -from chia.server.start_timelord import service_kwargs_for_timelord from chia.server.start_wallet import service_kwargs_for_wallet -from chia.simulator.start_simulator import service_kwargs_for_full_node_simulator -from chia.timelord.timelord_launcher import kill_processes, spawn_process -from chia.types.peer_info import PeerInfo -from chia.util.bech32m import encode_puzzle_hash from tests.block_tools import create_block_tools_async, test_constants, BlockTools +from tests.setup_services import ( + setup_full_node, + setup_harvester, + setup_farmer, + setup_introducer, + setup_vdf_clients, + setup_timelord, + setup_vdf_client, + setup_daemon, +) from tests.util.keyring import TempKeyring from tests.util.socket import find_available_listen_port from chia.util.hash import std_hash @@ -49,93 +47,6 @@ async def _teardown_nodes(node_aiters: List) -> None: pass -async def setup_daemon(btools: BlockTools) -> AsyncGenerator[WebSocketServer, None]: - root_path = btools.root_path - config = btools.config - assert "daemon_port" in config - lockfile = singleton(daemon_launch_lock_path(root_path)) - crt_path = root_path / config["daemon_ssl"]["private_crt"] - key_path = root_path / config["daemon_ssl"]["private_key"] - ca_crt_path = root_path / config["private_ssl_ca"]["crt"] - ca_key_path = root_path / config["private_ssl_ca"]["key"] - assert lockfile is not None - create_server_for_daemon(btools.root_path) - ws_server = WebSocketServer(root_path, ca_crt_path, ca_key_path, crt_path, key_path) - await ws_server.start() - - yield ws_server - - await ws_server.stop() - - -async def setup_full_node( - consensus_constants: ConsensusConstants, - db_name, - self_hostname: str, - port, - rpc_port, - local_bt: BlockTools, - introducer_port=None, - simulator=False, - send_uncompact_interval=0, - sanitize_weight_proof_only=False, - connect_to_daemon=False, - db_version=1, -): - db_path = local_bt.root_path / f"{db_name}" - if db_path.exists(): - db_path.unlink() - - if db_version > 1: - with sqlite3.connect(db_path) as connection: - connection.execute("CREATE TABLE database_version(version int)") - connection.execute("INSERT INTO database_version VALUES (?)", (db_version,)) - connection.commit() - - if connect_to_daemon: - assert local_bt.config["daemon_port"] is not None - config = local_bt.config["full_node"] - - config["database_path"] = db_name - config["send_uncompact_interval"] = send_uncompact_interval - config["target_uncompact_proofs"] = 30 - config["peer_connect_interval"] = 50 - config["sanitize_weight_proof_only"] = sanitize_weight_proof_only - if introducer_port is not None: - config["introducer_peer"]["host"] = self_hostname - config["introducer_peer"]["port"] = introducer_port - else: - config["introducer_peer"] = None - config["dns_servers"] = [] - config["port"] = port - config["rpc_port"] = rpc_port - overrides = config["network_overrides"]["constants"][config["selected_network"]] - updated_constants = consensus_constants.replace_str_to_bytes(**overrides) - if simulator: - kwargs = service_kwargs_for_full_node_simulator(local_bt.root_path, config, local_bt) - else: - kwargs = service_kwargs_for_full_node(local_bt.root_path, config, updated_constants) - - kwargs.update( - parse_cli_args=False, - connect_to_daemon=connect_to_daemon, - service_name_prefix="test_", - ) - - service = Service(**kwargs, handle_signals=False) - - await service.start() - - yield service._api - - service.stop() - await service.wait_closed() - if db_path.exists(): - db_path.unlink() - - -# Note: convert these setup functions to fixtures, or push it one layer up, -# keeping these usable independently? async def setup_wallet_node( self_hostname: str, port, @@ -206,164 +117,6 @@ async def setup_wallet_node( keychain.delete_all_keys() -async def setup_harvester( - b_tools: BlockTools, - self_hostname: str, - port, - rpc_port, - farmer_port, - consensus_constants: ConsensusConstants, - start_service: bool = True, -): - - config = b_tools.config["harvester"] - config["port"] = port - config["rpc_port"] = rpc_port - kwargs = service_kwargs_for_harvester(b_tools.root_path, config, consensus_constants) - kwargs.update( - server_listen_ports=[port], - advertised_port=port, - connect_peers=[PeerInfo(self_hostname, farmer_port)], - parse_cli_args=False, - connect_to_daemon=False, - service_name_prefix="test_", - ) - - service = Service(**kwargs, handle_signals=False) - - if start_service: - await service.start() - - yield service - - service.stop() - await service.wait_closed() - - -async def setup_farmer( - b_tools: BlockTools, - self_hostname: str, - port, - rpc_port, - consensus_constants: ConsensusConstants, - full_node_port: Optional[uint16] = None, - start_service: bool = True, -): - config = b_tools.config["farmer"] - config_pool = b_tools.config["pool"] - - config["xch_target_address"] = encode_puzzle_hash(b_tools.farmer_ph, "xch") - config["pool_public_keys"] = [bytes(pk).hex() for pk in b_tools.pool_pubkeys] - config["port"] = port - config["rpc_port"] = rpc_port - config_pool["xch_target_address"] = encode_puzzle_hash(b_tools.pool_ph, "xch") - - if full_node_port: - config["full_node_peer"]["host"] = self_hostname - config["full_node_peer"]["port"] = full_node_port - else: - del config["full_node_peer"] - - kwargs = service_kwargs_for_farmer( - b_tools.root_path, config, config_pool, consensus_constants, b_tools.local_keychain - ) - kwargs.update( - parse_cli_args=False, - connect_to_daemon=False, - service_name_prefix="test_", - ) - - service = Service(**kwargs, handle_signals=False) - - if start_service: - await service.start() - - yield service - - service.stop() - await service.wait_closed() - - -async def setup_introducer(bt: BlockTools, port): - kwargs = service_kwargs_for_introducer( - bt.root_path, - bt.config["introducer"], - ) - kwargs.update( - advertised_port=port, - parse_cli_args=False, - connect_to_daemon=False, - service_name_prefix="test_", - ) - - service = Service(**kwargs, handle_signals=False) - - await service.start() - - yield service._api, service._node.server - - service.stop() - await service.wait_closed() - - -async def setup_vdf_client(bt: BlockTools, self_hostname: str, port): - vdf_task_1 = asyncio.create_task(spawn_process(self_hostname, port, 1, bt.config.get("prefer_ipv6"))) - - def stop(): - asyncio.create_task(kill_processes()) - - asyncio.get_running_loop().add_signal_handler(signal.SIGTERM, stop) - asyncio.get_running_loop().add_signal_handler(signal.SIGINT, stop) - - yield vdf_task_1 - await kill_processes() - - -async def setup_vdf_clients(bt: BlockTools, self_hostname: str, port): - vdf_task_1 = asyncio.create_task(spawn_process(self_hostname, port, 1, bt.config.get("prefer_ipv6"))) - vdf_task_2 = asyncio.create_task(spawn_process(self_hostname, port, 2, bt.config.get("prefer_ipv6"))) - vdf_task_3 = asyncio.create_task(spawn_process(self_hostname, port, 3, bt.config.get("prefer_ipv6"))) - - def stop(): - asyncio.create_task(kill_processes()) - - asyncio.get_running_loop().add_signal_handler(signal.SIGTERM, stop) - asyncio.get_running_loop().add_signal_handler(signal.SIGINT, stop) - - yield vdf_task_1, vdf_task_2, vdf_task_3 - - await kill_processes() - - -async def setup_timelord( - port, full_node_port, rpc_port, vdf_port, sanitizer, consensus_constants: ConsensusConstants, b_tools: BlockTools -): - config = b_tools.config["timelord"] - config["port"] = port - config["full_node_peer"]["port"] = full_node_port - config["bluebox_mode"] = sanitizer - config["fast_algorithm"] = False - config["vdf_server"]["port"] = vdf_port - config["start_rpc_server"] = True - config["rpc_port"] = rpc_port - - kwargs = service_kwargs_for_timelord(b_tools.root_path, config, consensus_constants) - kwargs.update( - parse_cli_args=False, - connect_to_daemon=False, - service_name_prefix="test_", - ) - - service = Service(**kwargs, handle_signals=False) - - await service.start() - - yield service._api, service._node.server - - service.stop() - await service.wait_closed() - - async def setup_two_nodes(consensus_constants: ConsensusConstants, db_version: int, self_hostname: str): """ Setup and teardown of two full nodes, with blockchains and separate DBs. diff --git a/tests/setup_services.py b/tests/setup_services.py new file mode 100644 index 0000000000..2043ab26c1 --- /dev/null +++ b/tests/setup_services.py @@ -0,0 +1,341 @@ +import asyncio +import logging +import signal +import sqlite3 +from secrets import token_bytes +from typing import AsyncGenerator, Optional + +from chia.consensus.constants import ConsensusConstants +from chia.daemon.server import WebSocketServer, create_server_for_daemon, daemon_launch_lock_path, singleton +from chia.server.start_farmer import service_kwargs_for_farmer +from chia.server.start_full_node import service_kwargs_for_full_node +from chia.server.start_harvester import service_kwargs_for_harvester +from chia.server.start_introducer import service_kwargs_for_introducer +from chia.server.start_service import Service +from chia.server.start_timelord import service_kwargs_for_timelord +from chia.server.start_wallet import service_kwargs_for_wallet +from chia.simulator.start_simulator import service_kwargs_for_full_node_simulator +from chia.timelord.timelord_launcher import kill_processes, spawn_process +from chia.types.peer_info import PeerInfo +from chia.util.bech32m import encode_puzzle_hash +from chia.util.ints import uint16 +from chia.util.keychain import bytes_to_mnemonic +from tests.block_tools import BlockTools +from tests.util.keyring import TempKeyring + +log = logging.getLogger(__name__) + + +async def setup_daemon(btools: BlockTools) -> AsyncGenerator[WebSocketServer, None]: + root_path = btools.root_path + config = btools.config + assert "daemon_port" in config + lockfile = singleton(daemon_launch_lock_path(root_path)) + crt_path = root_path / config["daemon_ssl"]["private_crt"] + key_path = root_path / config["daemon_ssl"]["private_key"] + ca_crt_path = root_path / config["private_ssl_ca"]["crt"] + ca_key_path = root_path / config["private_ssl_ca"]["key"] + assert lockfile is not None + create_server_for_daemon(btools.root_path) + ws_server = WebSocketServer(root_path, ca_crt_path, ca_key_path, crt_path, key_path) + await ws_server.start() + + yield ws_server + + await ws_server.stop() + + +async def setup_full_node( + consensus_constants: ConsensusConstants, + db_name, + self_hostname: str, + port, + rpc_port, + local_bt: BlockTools, + introducer_port=None, + simulator=False, + send_uncompact_interval=0, + sanitize_weight_proof_only=False, + connect_to_daemon=False, + db_version=1, +): + db_path = local_bt.root_path / f"{db_name}" + if db_path.exists(): + db_path.unlink() + + if db_version > 1: + with sqlite3.connect(db_path) as connection: + connection.execute("CREATE TABLE database_version(version int)") + connection.execute("INSERT INTO database_version VALUES (?)", (db_version,)) + connection.commit() + + if connect_to_daemon: + assert local_bt.config["daemon_port"] is not None + config = local_bt.config["full_node"] + + config["database_path"] = db_name + config["send_uncompact_interval"] = send_uncompact_interval + config["target_uncompact_proofs"] = 30 + config["peer_connect_interval"] = 50 + config["sanitize_weight_proof_only"] = sanitize_weight_proof_only + if introducer_port is not None: + config["introducer_peer"]["host"] = self_hostname + config["introducer_peer"]["port"] = introducer_port + else: + config["introducer_peer"] = None + config["dns_servers"] = [] + config["port"] = port + config["rpc_port"] = rpc_port + overrides = config["network_overrides"]["constants"][config["selected_network"]] + updated_constants = consensus_constants.replace_str_to_bytes(**overrides) + if simulator: + kwargs = service_kwargs_for_full_node_simulator(local_bt.root_path, config, local_bt) + else: + kwargs = service_kwargs_for_full_node(local_bt.root_path, config, updated_constants) + + kwargs.update( + parse_cli_args=False, + connect_to_daemon=connect_to_daemon, + service_name_prefix="test_", + ) + + service = Service(**kwargs, handle_signals=False) + + await service.start() + + yield service._api + + service.stop() + await service.wait_closed() + if db_path.exists(): + db_path.unlink() + + +# Note: convert these setup functions to fixtures, or push it one layer up, +# keeping these usable independently? +async def setup_wallet_node( + self_hostname: str, + port, + rpc_port, + consensus_constants: ConsensusConstants, + local_bt: BlockTools, + full_node_port=None, + introducer_port=None, + key_seed=None, + starting_height=None, + initial_num_public_keys=5, +): + with TempKeyring(populate=True) as keychain: + config = local_bt.config["wallet"] + config["port"] = port + config["rpc_port"] = rpc_port + if starting_height is not None: + config["starting_height"] = starting_height + config["initial_num_public_keys"] = initial_num_public_keys + + entropy = token_bytes(32) + if key_seed is None: + key_seed = entropy + keychain.add_private_key(bytes_to_mnemonic(key_seed), "") + first_pk = keychain.get_first_public_key() + assert first_pk is not None + db_path_key_suffix = str(first_pk.get_fingerprint()) + db_name = f"test-wallet-db-{port}-KEY.sqlite" + db_path_replaced: str = db_name.replace("KEY", db_path_key_suffix) + db_path = local_bt.root_path / db_path_replaced + + if db_path.exists(): + db_path.unlink() + config["database_path"] = str(db_name) + config["testing"] = True + + config["introducer_peer"]["host"] = self_hostname + if introducer_port is not None: + config["introducer_peer"]["port"] = introducer_port + config["peer_connect_interval"] = 10 + else: + config["introducer_peer"] = None + + if full_node_port is not None: + config["full_node_peer"] = {} + config["full_node_peer"]["host"] = self_hostname + config["full_node_peer"]["port"] = full_node_port + else: + del config["full_node_peer"] + + kwargs = service_kwargs_for_wallet(local_bt.root_path, config, consensus_constants, keychain) + kwargs.update( + parse_cli_args=False, + connect_to_daemon=False, + service_name_prefix="test_", + ) + + service = Service(**kwargs, handle_signals=False) + + await service.start() + + yield service._node, service._node.server + + service.stop() + await service.wait_closed() + if db_path.exists(): + db_path.unlink() + keychain.delete_all_keys() + + +async def setup_harvester( + b_tools: BlockTools, + self_hostname: str, + port, + rpc_port, + farmer_port, + consensus_constants: ConsensusConstants, + start_service: bool = True, +): + + config = b_tools.config["harvester"] + config["port"] = port + config["rpc_port"] = rpc_port + kwargs = service_kwargs_for_harvester(b_tools.root_path, config, consensus_constants) + kwargs.update( + server_listen_ports=[port], + advertised_port=port, + connect_peers=[PeerInfo(self_hostname, farmer_port)], + parse_cli_args=False, + connect_to_daemon=False, + service_name_prefix="test_", + ) + + service = Service(**kwargs, handle_signals=False) + + if start_service: + await service.start() + + yield service + + service.stop() + await service.wait_closed() + + +async def setup_farmer( + b_tools: BlockTools, + self_hostname: str, + port, + rpc_port, + consensus_constants: ConsensusConstants, + full_node_port: Optional[uint16] = None, + start_service: bool = True, +): + config = b_tools.config["farmer"] + config_pool = b_tools.config["pool"] + + config["xch_target_address"] = encode_puzzle_hash(b_tools.farmer_ph, "xch") + config["pool_public_keys"] = [bytes(pk).hex() for pk in b_tools.pool_pubkeys] + config["port"] = port + config["rpc_port"] = rpc_port + config_pool["xch_target_address"] = encode_puzzle_hash(b_tools.pool_ph, "xch") + + if full_node_port: + config["full_node_peer"]["host"] = self_hostname + config["full_node_peer"]["port"] = full_node_port + else: + del config["full_node_peer"] + + kwargs = service_kwargs_for_farmer( + b_tools.root_path, config, config_pool, consensus_constants, b_tools.local_keychain + ) + kwargs.update( + parse_cli_args=False, + connect_to_daemon=False, + service_name_prefix="test_", + ) + + service = Service(**kwargs, handle_signals=False) + + if start_service: + await service.start() + + yield service + + service.stop() + await service.wait_closed() + + +async def setup_introducer(bt: BlockTools, port): + kwargs = service_kwargs_for_introducer( + bt.root_path, + bt.config["introducer"], + ) + kwargs.update( + advertised_port=port, + parse_cli_args=False, + connect_to_daemon=False, + service_name_prefix="test_", + ) + + service = Service(**kwargs, handle_signals=False) + + await service.start() + + yield service._api, service._node.server + + service.stop() + await service.wait_closed() + + +async def setup_vdf_client(bt: BlockTools, self_hostname: str, port): + vdf_task_1 = asyncio.create_task(spawn_process(self_hostname, port, 1, bt.config.get("prefer_ipv6"))) + + def stop(): + asyncio.create_task(kill_processes()) + + asyncio.get_running_loop().add_signal_handler(signal.SIGTERM, stop) + asyncio.get_running_loop().add_signal_handler(signal.SIGINT, stop) + + yield vdf_task_1 + await kill_processes() + + +async def setup_vdf_clients(bt: BlockTools, self_hostname: str, port): + vdf_task_1 = asyncio.create_task(spawn_process(self_hostname, port, 1, bt.config.get("prefer_ipv6"))) + vdf_task_2 = asyncio.create_task(spawn_process(self_hostname, port, 2, bt.config.get("prefer_ipv6"))) + vdf_task_3 = asyncio.create_task(spawn_process(self_hostname, port, 3, bt.config.get("prefer_ipv6"))) + + def stop(): + asyncio.create_task(kill_processes()) + + asyncio.get_running_loop().add_signal_handler(signal.SIGTERM, stop) + asyncio.get_running_loop().add_signal_handler(signal.SIGINT, stop) + + yield vdf_task_1, vdf_task_2, vdf_task_3 + + await kill_processes() + + +async def setup_timelord( + port, full_node_port, rpc_port, vdf_port, sanitizer, consensus_constants: ConsensusConstants, b_tools: BlockTools +): + config = b_tools.config["timelord"] + config["port"] = port + config["full_node_peer"]["port"] = full_node_port + config["bluebox_mode"] = sanitizer + config["fast_algorithm"] = False + config["vdf_server"]["port"] = vdf_port + config["start_rpc_server"] = True + config["rpc_port"] = rpc_port + + kwargs = service_kwargs_for_timelord(b_tools.root_path, config, consensus_constants) + kwargs.update( + parse_cli_args=False, + connect_to_daemon=False, + service_name_prefix="test_", + ) + + service = Service(**kwargs, handle_signals=False) + + await service.start() + + yield service._api, service._node.server + + service.stop() + await service.wait_closed()