chia-blockchain 2.5.0rc1__py3-none-any.whl → 2.5.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/README.md +1 -1
- chia/_tests/blockchain/blockchain_test_utils.py +24 -26
- chia/_tests/blockchain/test_augmented_chain.py +6 -8
- chia/_tests/blockchain/test_blockchain.py +409 -307
- chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
- chia/_tests/blockchain/test_build_chains.py +11 -13
- chia/_tests/blockchain/test_get_block_generator.py +8 -8
- chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
- chia/_tests/build-init-files.py +3 -4
- chia/_tests/build-job-matrix.py +9 -9
- chia/_tests/check_sql_statements.py +2 -3
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +7 -5
- chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
- chia/_tests/clvm/test_condition_codes.py +2 -2
- chia/_tests/clvm/test_curry_and_treehash.py +2 -4
- chia/_tests/clvm/test_message_conditions.py +184 -0
- chia/_tests/clvm/test_puzzle_compression.py +1 -2
- chia/_tests/clvm/test_puzzle_drivers.py +3 -3
- chia/_tests/clvm/test_puzzles.py +13 -18
- chia/_tests/clvm/test_singletons.py +17 -17
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +42 -45
- chia/_tests/cmds/conftest.py +2 -2
- chia/_tests/cmds/test_click_types.py +21 -16
- chia/_tests/cmds/test_cmd_framework.py +255 -35
- chia/_tests/cmds/test_cmds_util.py +2 -2
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_dev_gh.py +131 -0
- chia/_tests/cmds/test_farm_cmd.py +1 -2
- chia/_tests/cmds/test_show.py +6 -6
- chia/_tests/cmds/test_tx_config_args.py +2 -1
- chia/_tests/cmds/wallet/test_dao.py +23 -23
- chia/_tests/cmds/wallet/test_did.py +29 -29
- chia/_tests/cmds/wallet/test_nft.py +24 -23
- chia/_tests/cmds/wallet/test_notifications.py +8 -8
- chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
- chia/_tests/cmds/wallet/test_vcs.py +97 -73
- chia/_tests/cmds/wallet/test_wallet.py +74 -75
- chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
- chia/_tests/conftest.py +153 -38
- chia/_tests/connection_utils.py +7 -6
- chia/_tests/core/cmds/test_beta.py +3 -3
- chia/_tests/core/cmds/test_keys.py +6 -6
- chia/_tests/core/cmds/test_wallet.py +3 -3
- chia/_tests/core/consensus/test_block_creation.py +3 -5
- chia/_tests/core/custom_types/test_coin.py +1 -3
- chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
- chia/_tests/core/daemon/test_daemon.py +58 -58
- chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
- chia/_tests/core/data_layer/conftest.py +4 -3
- chia/_tests/core/data_layer/test_data_cli.py +1 -2
- chia/_tests/core/data_layer/test_data_layer.py +5 -5
- chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
- chia/_tests/core/data_layer/test_data_rpc.py +75 -93
- chia/_tests/core/data_layer/test_data_store.py +38 -37
- chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
- chia/_tests/core/data_layer/util.py +11 -10
- chia/_tests/core/farmer/test_farmer_api.py +6 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
- chia/_tests/core/full_node/ram_db.py +2 -2
- chia/_tests/core/full_node/stores/test_block_store.py +113 -11
- chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
- chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
- chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
- chia/_tests/core/full_node/test_address_manager.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +1 -1
- chia/_tests/core/full_node/test_conditions.py +10 -12
- chia/_tests/core/full_node/test_full_node.py +2077 -1822
- chia/_tests/core/full_node/test_generator_tools.py +4 -4
- chia/_tests/core/full_node/test_hint_management.py +2 -2
- chia/_tests/core/full_node/test_performance.py +2 -5
- chia/_tests/core/full_node/test_subscriptions.py +4 -4
- chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
- chia/_tests/core/make_block_generator.py +5 -7
- chia/_tests/core/mempool/test_mempool.py +205 -208
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
- chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
- chia/_tests/core/mempool/test_mempool_manager.py +109 -80
- chia/_tests/core/mempool/test_mempool_performance.py +3 -4
- chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
- chia/_tests/core/server/flood.py +6 -4
- chia/_tests/core/server/serve.py +10 -7
- chia/_tests/core/server/test_api_protocol.py +21 -0
- chia/_tests/core/server/test_capabilities.py +3 -5
- chia/_tests/core/server/test_dos.py +15 -16
- chia/_tests/core/server/test_loop.py +14 -10
- chia/_tests/core/server/test_node_discovery.py +1 -2
- chia/_tests/core/server/test_rate_limits.py +156 -44
- chia/_tests/core/server/test_server.py +8 -7
- chia/_tests/core/services/test_services.py +59 -37
- chia/_tests/core/ssl/test_ssl.py +5 -3
- chia/_tests/core/test_cost_calculation.py +5 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_db_conversion.py +5 -4
- chia/_tests/core/test_db_validation.py +6 -5
- chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
- chia/_tests/core/test_filter.py +3 -5
- chia/_tests/core/test_full_node_rpc.py +64 -90
- chia/_tests/core/test_merkle_set.py +10 -10
- chia/_tests/core/test_program.py +2 -4
- chia/_tests/core/test_rpc_util.py +1 -2
- chia/_tests/core/test_seeder.py +124 -12
- chia/_tests/core/util/test_block_cache.py +5 -5
- chia/_tests/core/util/test_cached_bls.py +3 -3
- chia/_tests/core/util/test_config.py +13 -13
- chia/_tests/core/util/test_files.py +2 -2
- chia/_tests/core/util/test_jsonify.py +9 -9
- chia/_tests/core/util/test_keychain.py +13 -5
- chia/_tests/core/util/test_keyring_wrapper.py +6 -5
- chia/_tests/core/util/test_log_exceptions.py +3 -3
- chia/_tests/core/util/test_streamable.py +38 -38
- chia/_tests/db/test_db_wrapper.py +13 -12
- chia/_tests/environments/common.py +2 -2
- chia/_tests/environments/full_node.py +2 -2
- chia/_tests/environments/wallet.py +109 -48
- chia/_tests/farmer_harvester/test_farmer.py +35 -35
- chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
- chia/_tests/generator/test_compression.py +13 -30
- chia/_tests/generator/test_generator_types.py +3 -3
- chia/_tests/generator/test_rom.py +7 -9
- chia/_tests/plot_sync/test_delta.py +2 -3
- chia/_tests/plot_sync/test_plot_sync.py +25 -24
- chia/_tests/plot_sync/test_receiver.py +9 -9
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +27 -26
- chia/_tests/plot_sync/util.py +2 -1
- chia/_tests/plotting/test_plot_manager.py +54 -11
- chia/_tests/plotting/util.py +2 -3
- chia/_tests/pools/test_pool_cli_parsing.py +128 -0
- chia/_tests/pools/test_pool_cmdline.py +993 -15
- chia/_tests/pools/test_pool_config.py +3 -5
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
- chia/_tests/pools/test_pool_rpc.py +203 -90
- chia/_tests/pools/test_pool_wallet.py +12 -8
- chia/_tests/pools/test_wallet_pool_store.py +3 -3
- chia/_tests/process_junit.py +16 -17
- chia/_tests/rpc/test_rpc_client.py +59 -2
- chia/_tests/rpc/test_rpc_server.py +183 -0
- chia/_tests/simulation/test_simulation.py +5 -5
- chia/_tests/simulation/test_simulator.py +8 -10
- chia/_tests/simulation/test_start_simulator.py +5 -4
- chia/_tests/timelord/test_new_peak.py +19 -19
- chia/_tests/tools/test_run_block.py +1 -2
- chia/_tests/tools/test_virtual_project.py +591 -0
- chia/_tests/util/benchmark_cost.py +9 -9
- chia/_tests/util/benchmarks.py +1 -2
- chia/_tests/util/blockchain.py +12 -11
- chia/_tests/util/blockchain_mock.py +15 -15
- chia/_tests/util/build_network_protocol_files.py +12 -12
- chia/_tests/util/db_connection.py +3 -2
- chia/_tests/util/full_sync.py +14 -6
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/generator_tools_testing.py +5 -7
- chia/_tests/util/get_name_puzzle_conditions.py +52 -0
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +59 -106
- chia/_tests/util/network_protocol_data.py +7 -9
- chia/_tests/util/protocol_messages_json.py +112 -111
- chia/_tests/util/rpc.py +3 -0
- chia/_tests/util/run_block.py +16 -16
- chia/_tests/util/setup_nodes.py +25 -23
- chia/{clvm → _tests/util}/spend_sim.py +59 -55
- chia/_tests/util/split_managers.py +12 -9
- chia/_tests/util/temp_file.py +1 -1
- chia/_tests/util/test_action_scope.py +2 -1
- chia/_tests/util/test_async_pool.py +8 -8
- chia/_tests/util/test_build_job_matrix.py +2 -3
- chia/_tests/util/test_condition_tools.py +4 -6
- chia/_tests/util/test_config.py +5 -5
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +19 -11
- chia/_tests/util/test_limited_semaphore.py +4 -3
- chia/_tests/util/test_logging_filter.py +2 -3
- chia/_tests/util/test_misc.py +29 -28
- chia/_tests/util/test_network.py +32 -31
- chia/_tests/util/test_network_protocol_files.py +2 -3
- chia/_tests/util/test_network_protocol_json.py +1 -0
- chia/_tests/util/test_network_protocol_test.py +18 -19
- chia/_tests/util/test_paginator.py +3 -4
- chia/_tests/util/test_pprint.py +1 -1
- chia/_tests/util/test_priority_mutex.py +18 -17
- chia/_tests/util/test_recursive_replace.py +2 -2
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/test_timing.py +1 -1
- chia/_tests/util/test_trusted_peer.py +2 -2
- chia/_tests/util/time_out_assert.py +43 -6
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
- chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
- chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
- chia/_tests/wallet/conftest.py +135 -74
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
- chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
- chia/_tests/wallet/did_wallet/test_did.py +1277 -474
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
- chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
- chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
- chia/_tests/wallet/test_address_type.py +20 -20
- chia/_tests/wallet/test_clvm_streamable.py +5 -5
- chia/_tests/wallet/test_coin_management.py +354 -0
- chia/_tests/wallet/test_coin_selection.py +34 -35
- chia/_tests/wallet/test_conditions.py +28 -16
- chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
- chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
- chia/_tests/wallet/test_nft_store.py +1 -2
- chia/_tests/wallet/test_notifications.py +2 -2
- chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
- chia/_tests/wallet/test_puzzle_store.py +2 -3
- chia/_tests/wallet/test_sign_coin_spends.py +3 -3
- chia/_tests/wallet/test_signer_protocol.py +33 -34
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
- chia/_tests/wallet/test_taproot.py +1 -1
- chia/_tests/wallet/test_transaction_store.py +23 -19
- chia/_tests/wallet/test_util.py +36 -32
- chia/_tests/wallet/test_wallet.py +37 -37
- chia/_tests/wallet/test_wallet_action_scope.py +8 -8
- chia/_tests/wallet/test_wallet_blockchain.py +4 -6
- chia/_tests/wallet/test_wallet_coin_store.py +34 -34
- chia/_tests/wallet/test_wallet_node.py +69 -72
- chia/_tests/wallet/test_wallet_retry.py +3 -3
- chia/_tests/wallet/test_wallet_state_manager.py +12 -5
- chia/_tests/wallet/test_wallet_trade_store.py +2 -2
- chia/_tests/wallet/test_wallet_utils.py +5 -4
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
- chia/_tests/wallet/wallet_block_tools.py +27 -27
- chia/_tests/weight_proof/test_weight_proof.py +30 -30
- chia/apis.py +19 -0
- chia/cmds/beta.py +8 -7
- chia/cmds/beta_funcs.py +15 -11
- chia/cmds/check_wallet_db.py +29 -27
- chia/cmds/chia.py +17 -9
- chia/cmds/cmd_classes.py +87 -79
- chia/cmds/cmd_helpers.py +242 -0
- chia/cmds/cmds_util.py +56 -66
- chia/cmds/coin_funcs.py +168 -153
- chia/cmds/coins.py +156 -194
- chia/cmds/configure.py +4 -3
- chia/cmds/dao.py +89 -33
- chia/cmds/dao_funcs.py +55 -33
- chia/cmds/data.py +7 -6
- chia/cmds/data_funcs.py +26 -21
- chia/cmds/db.py +4 -3
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev.py +2 -0
- chia/cmds/farm.py +18 -5
- chia/cmds/farm_funcs.py +17 -24
- chia/cmds/gh.py +275 -0
- chia/cmds/init.py +4 -11
- chia/cmds/init_funcs.py +9 -9
- chia/cmds/installers.py +5 -3
- chia/cmds/keys.py +56 -39
- chia/cmds/keys_funcs.py +30 -31
- chia/cmds/netspace.py +6 -3
- chia/cmds/netspace_funcs.py +3 -2
- chia/cmds/param_types.py +16 -6
- chia/cmds/passphrase.py +8 -7
- chia/cmds/passphrase_funcs.py +7 -61
- chia/cmds/peer.py +2 -1
- chia/cmds/peer_funcs.py +5 -5
- chia/cmds/plotnft.py +207 -153
- chia/cmds/plotnft_funcs.py +205 -174
- chia/cmds/plots.py +14 -6
- chia/cmds/plotters.py +2 -1
- chia/cmds/rpc.py +48 -28
- chia/cmds/show.py +2 -1
- chia/cmds/show_funcs.py +7 -6
- chia/cmds/signer.py +50 -58
- chia/cmds/sim.py +22 -14
- chia/cmds/sim_funcs.py +11 -11
- chia/cmds/start.py +3 -3
- chia/cmds/start_funcs.py +9 -12
- chia/cmds/stop.py +4 -3
- chia/cmds/units.py +1 -3
- chia/cmds/wallet.py +252 -96
- chia/cmds/wallet_funcs.py +217 -143
- chia/consensus/block_body_validation.py +133 -86
- chia/consensus/block_creation.py +42 -21
- chia/consensus/block_header_validation.py +32 -37
- chia/consensus/block_record.py +1 -2
- chia/consensus/blockchain.py +167 -180
- chia/consensus/blockchain_interface.py +10 -10
- chia/consensus/constants.py +2 -2
- chia/consensus/default_constants.py +3 -4
- chia/consensus/difficulty_adjustment.py +5 -5
- chia/consensus/find_fork_point.py +5 -5
- chia/consensus/full_block_to_block_record.py +4 -4
- chia/consensus/get_block_challenge.py +2 -2
- chia/consensus/get_block_generator.py +4 -3
- chia/consensus/multiprocess_validation.py +207 -304
- chia/consensus/vdf_info_computation.py +3 -3
- chia/daemon/client.py +46 -27
- chia/daemon/keychain_proxy.py +10 -9
- chia/daemon/keychain_server.py +18 -18
- chia/daemon/server.py +103 -113
- chia/daemon/windows_signal.py +2 -2
- chia/data_layer/data_layer.py +64 -76
- chia/data_layer/data_layer_api.py +8 -0
- chia/data_layer/data_layer_errors.py +3 -3
- chia/data_layer/data_layer_server.py +2 -2
- chia/data_layer/data_layer_util.py +71 -71
- chia/data_layer/data_layer_wallet.py +63 -67
- chia/data_layer/data_store.py +72 -72
- chia/data_layer/dl_wallet_store.py +10 -10
- chia/data_layer/download_data.py +5 -5
- chia/data_layer/s3_plugin_service.py +9 -9
- chia/data_layer/util/benchmark.py +0 -1
- chia/data_layer/util/plugin.py +2 -3
- chia/farmer/farmer.py +46 -43
- chia/farmer/farmer_api.py +27 -21
- chia/full_node/block_height_map.py +6 -6
- chia/full_node/block_store.py +41 -35
- chia/full_node/coin_store.py +42 -41
- chia/full_node/fee_estimate.py +2 -2
- chia/full_node/fee_estimation.py +1 -2
- chia/full_node/fee_history.py +5 -6
- chia/full_node/fee_tracker.py +24 -24
- chia/full_node/full_node.py +574 -300
- chia/full_node/full_node_api.py +181 -130
- chia/full_node/full_node_store.py +43 -43
- chia/full_node/hint_management.py +4 -4
- chia/full_node/hint_store.py +9 -10
- chia/full_node/mempool.py +25 -19
- chia/full_node/mempool_check_conditions.py +11 -42
- chia/full_node/mempool_manager.py +48 -53
- chia/full_node/pending_tx_cache.py +9 -9
- chia/full_node/subscriptions.py +23 -24
- chia/full_node/sync_store.py +8 -7
- chia/full_node/tx_processing_queue.py +3 -3
- chia/full_node/util/__init__.py +0 -0
- chia/full_node/weight_proof.py +79 -78
- chia/harvester/harvester.py +9 -8
- chia/harvester/harvester_api.py +19 -13
- chia/introducer/introducer.py +7 -5
- chia/introducer/introducer_api.py +9 -3
- chia/legacy/keyring.py +6 -5
- chia/plot_sync/delta.py +8 -8
- chia/plot_sync/receiver.py +12 -11
- chia/plot_sync/sender.py +15 -12
- chia/plotters/bladebit.py +12 -12
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +8 -8
- chia/plotters/plotters.py +6 -6
- chia/plotters/plotters_util.py +6 -4
- chia/plotting/cache.py +8 -7
- chia/plotting/check_plots.py +8 -8
- chia/plotting/create_plots.py +6 -6
- chia/plotting/manager.py +22 -22
- chia/plotting/util.py +31 -19
- chia/pools/pool_config.py +7 -7
- chia/pools/pool_puzzles.py +16 -16
- chia/pools/pool_wallet.py +64 -57
- chia/pools/pool_wallet_info.py +3 -3
- chia/protocols/full_node_protocol.py +3 -3
- chia/protocols/harvester_protocol.py +12 -12
- chia/protocols/introducer_protocol.py +1 -2
- chia/protocols/protocol_message_types.py +4 -4
- chia/protocols/protocol_state_machine.py +2 -2
- chia/protocols/protocol_timing.py +1 -0
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +2 -2
- chia/protocols/wallet_protocol.py +33 -33
- chia/rpc/crawler_rpc_api.py +12 -7
- chia/rpc/data_layer_rpc_api.py +49 -44
- chia/rpc/data_layer_rpc_client.py +41 -41
- chia/rpc/data_layer_rpc_util.py +7 -11
- chia/rpc/farmer_rpc_api.py +32 -27
- chia/rpc/farmer_rpc_client.py +14 -14
- chia/rpc/full_node_rpc_api.py +53 -48
- chia/rpc/full_node_rpc_client.py +30 -30
- chia/rpc/harvester_rpc_api.py +16 -11
- chia/rpc/harvester_rpc_client.py +6 -6
- chia/rpc/rpc_client.py +34 -14
- chia/rpc/rpc_server.py +117 -43
- chia/rpc/timelord_rpc_api.py +9 -4
- chia/rpc/util.py +11 -211
- chia/rpc/wallet_request_types.py +276 -60
- chia/rpc/wallet_rpc_api.py +563 -399
- chia/rpc/wallet_rpc_client.py +220 -250
- chia/seeder/crawl_store.py +6 -8
- chia/seeder/crawler.py +23 -36
- chia/seeder/crawler_api.py +28 -22
- chia/seeder/dns_server.py +99 -50
- chia/seeder/start_crawler.py +13 -9
- chia/server/address_manager.py +19 -19
- chia/server/address_manager_store.py +17 -17
- chia/server/api_protocol.py +106 -1
- chia/server/capabilities.py +3 -3
- chia/server/chia_policy.py +17 -16
- chia/server/introducer_peers.py +3 -3
- chia/server/node_discovery.py +34 -38
- chia/server/rate_limit_numbers.py +26 -16
- chia/server/rate_limits.py +67 -27
- chia/server/server.py +52 -31
- chia/server/signal_handlers.py +6 -3
- chia/server/ssl_context.py +5 -5
- chia/server/start_data_layer.py +37 -23
- chia/server/start_farmer.py +28 -16
- chia/server/start_full_node.py +29 -23
- chia/server/start_harvester.py +28 -15
- chia/server/start_introducer.py +27 -15
- chia/server/start_service.py +17 -29
- chia/server/start_timelord.py +25 -18
- chia/server/start_wallet.py +22 -18
- chia/server/upnp.py +4 -3
- chia/server/ws_connection.py +68 -54
- chia/simulator/add_blocks_in_batches.py +54 -0
- chia/simulator/block_tools.py +65 -64
- chia/simulator/full_node_simulator.py +66 -74
- chia/simulator/setup_services.py +10 -9
- chia/simulator/simulator_full_node_rpc_api.py +12 -14
- chia/simulator/simulator_full_node_rpc_client.py +3 -5
- chia/simulator/simulator_test_tools.py +8 -7
- chia/simulator/socket.py +1 -4
- chia/simulator/ssl_certs.py +5 -5
- chia/simulator/ssl_certs_1.py +2 -4
- chia/simulator/ssl_certs_10.py +2 -4
- chia/simulator/ssl_certs_2.py +2 -4
- chia/simulator/ssl_certs_3.py +2 -4
- chia/simulator/ssl_certs_4.py +2 -4
- chia/simulator/ssl_certs_5.py +2 -4
- chia/simulator/ssl_certs_6.py +2 -4
- chia/simulator/ssl_certs_7.py +2 -4
- chia/simulator/ssl_certs_8.py +2 -4
- chia/simulator/ssl_certs_9.py +2 -4
- chia/simulator/start_simulator.py +14 -6
- chia/simulator/wallet_tools.py +21 -20
- chia/ssl/create_ssl.py +11 -11
- chia/timelord/iters_from_block.py +2 -2
- chia/timelord/timelord.py +57 -33
- chia/timelord/timelord_api.py +12 -6
- chia/timelord/timelord_launcher.py +10 -8
- chia/timelord/timelord_state.py +5 -5
- chia/types/block_protocol.py +2 -2
- chia/types/blockchain_format/coin.py +3 -3
- chia/types/blockchain_format/program.py +17 -18
- chia/types/blockchain_format/tree_hash.py +9 -9
- chia/types/coin_spend.py +8 -8
- chia/types/condition_with_args.py +1 -2
- chia/types/eligible_coin_spends.py +16 -15
- chia/types/generator_types.py +1 -2
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +7 -7
- chia/types/mempool_submission_status.py +2 -2
- chia/types/peer_info.py +1 -1
- chia/types/spend_bundle.py +1 -2
- chia/types/transaction_queue_entry.py +2 -2
- chia/types/unfinished_header_block.py +2 -2
- chia/types/validation_state.py +14 -0
- chia/types/weight_proof.py +5 -6
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +6 -4
- chia/util/augmented_chain.py +13 -9
- chia/util/batches.py +5 -2
- chia/util/bech32m.py +14 -11
- chia/util/beta_metrics.py +5 -4
- chia/util/block_cache.py +5 -5
- chia/util/byte_types.py +2 -0
- chia/util/check_fork_next_block.py +3 -2
- chia/util/chia_logging.py +41 -21
- chia/util/collection.py +3 -3
- chia/util/condition_tools.py +18 -18
- chia/util/config.py +26 -25
- chia/util/cpu.py +2 -0
- chia/util/db_synchronous.py +2 -0
- chia/util/db_version.py +2 -0
- chia/util/db_wrapper.py +13 -10
- chia/util/default_root.py +17 -0
- chia/util/dump_keyring.py +6 -6
- chia/util/errors.py +5 -3
- chia/util/file_keyring.py +22 -33
- chia/util/files.py +2 -0
- chia/util/full_block_utils.py +31 -7
- chia/util/generator_tools.py +18 -8
- chia/util/hash.py +3 -1
- chia/util/initial-config.yaml +19 -0
- chia/util/inline_executor.py +2 -0
- chia/util/ip_address.py +39 -0
- chia/util/json_util.py +0 -4
- chia/util/keychain.py +27 -24
- chia/util/keyring_wrapper.py +65 -4
- chia/util/limited_semaphore.py +3 -1
- chia/util/lock.py +4 -2
- chia/util/log_exceptions.py +5 -2
- chia/util/logging.py +3 -1
- chia/util/lru_cache.py +2 -0
- chia/util/math.py +4 -4
- chia/util/network.py +15 -73
- chia/util/paginator.py +3 -1
- chia/util/path.py +2 -0
- chia/util/permissions.py +3 -2
- chia/util/prev_transaction_block.py +1 -3
- chia/util/priority_mutex.py +6 -3
- chia/util/profiler.py +7 -4
- chia/util/recursive_replace.py +2 -0
- chia/util/safe_cancel_task.py +2 -0
- chia/util/service_groups.py +2 -2
- chia/util/setproctitle.py +2 -0
- chia/util/significant_bits.py +2 -0
- chia/util/ssl_check.py +11 -11
- chia/util/streamable.py +44 -56
- chia/util/task_referencer.py +59 -0
- chia/util/task_timing.py +22 -18
- chia/util/timing.py +4 -1
- chia/util/vdf_prover.py +2 -3
- chia/util/virtual_project_analysis.py +540 -0
- chia/util/ws_message.py +6 -6
- chia/wallet/cat_wallet/cat_info.py +3 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
- chia/wallet/cat_wallet/cat_utils.py +5 -4
- chia/wallet/cat_wallet/cat_wallet.py +56 -70
- chia/wallet/cat_wallet/dao_cat_info.py +3 -3
- chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
- chia/wallet/cat_wallet/lineage_store.py +2 -2
- chia/wallet/coin_selection.py +15 -15
- chia/wallet/conditions.py +257 -71
- chia/wallet/dao_wallet/dao_info.py +4 -4
- chia/wallet/dao_wallet/dao_utils.py +43 -42
- chia/wallet/dao_wallet/dao_wallet.py +66 -68
- chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
- chia/wallet/derive_keys.py +11 -11
- chia/wallet/did_wallet/did_info.py +3 -3
- chia/wallet/did_wallet/did_wallet.py +56 -47
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/nft_info.py +4 -4
- chia/wallet/nft_wallet/nft_puzzles.py +16 -16
- chia/wallet/nft_wallet/nft_wallet.py +90 -89
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
- chia/wallet/nft_wallet/uncurry_nft.py +2 -2
- chia/wallet/notification_manager.py +5 -5
- chia/wallet/notification_store.py +6 -6
- chia/wallet/outer_puzzles.py +2 -2
- chia/wallet/payment.py +4 -5
- chia/wallet/puzzle_drivers.py +4 -4
- chia/wallet/puzzles/clawback/drivers.py +5 -5
- chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
- chia/wallet/puzzles/load_clvm.py +2 -3
- chia/wallet/puzzles/p2_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
- chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
- chia/wallet/puzzles/puzzle_utils.py +7 -7
- chia/wallet/puzzles/singleton_top_layer.py +6 -5
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
- chia/wallet/puzzles/tails.py +34 -30
- chia/wallet/signer_protocol.py +7 -8
- chia/wallet/singleton.py +4 -4
- chia/wallet/trade_manager.py +155 -141
- chia/wallet/trade_record.py +5 -5
- chia/wallet/trading/offer.py +100 -101
- chia/wallet/trading/trade_store.py +14 -14
- chia/wallet/transaction_record.py +31 -16
- chia/wallet/util/address_type.py +4 -4
- chia/wallet/util/blind_signer_tl.py +8 -12
- chia/wallet/util/clvm_streamable.py +15 -15
- chia/wallet/util/compute_hints.py +5 -5
- chia/wallet/util/compute_memos.py +4 -6
- chia/wallet/util/curry_and_treehash.py +3 -2
- chia/wallet/util/debug_spend_bundle.py +6 -8
- chia/wallet/util/merkle_tree.py +10 -10
- chia/wallet/util/merkle_utils.py +10 -10
- chia/wallet/util/new_peak_queue.py +3 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/{util → wallet/util}/pprint.py +2 -3
- chia/wallet/util/puzzle_compression.py +3 -4
- chia/wallet/util/puzzle_decorator.py +10 -10
- chia/wallet/util/query_filter.py +9 -10
- chia/wallet/util/tx_config.py +12 -12
- chia/wallet/util/wallet_sync_utils.py +24 -21
- chia/wallet/util/wallet_types.py +9 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
- chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
- chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
- chia/wallet/vc_wallet/vc_drivers.py +16 -16
- chia/wallet/vc_wallet/vc_store.py +9 -9
- chia/wallet/vc_wallet/vc_wallet.py +35 -35
- chia/wallet/wallet.py +54 -54
- chia/wallet/wallet_action_scope.py +14 -13
- chia/wallet/wallet_blockchain.py +10 -10
- chia/wallet/wallet_coin_record.py +2 -2
- chia/wallet/wallet_coin_store.py +10 -10
- chia/wallet/wallet_info.py +1 -2
- chia/wallet/wallet_interested_store.py +5 -5
- chia/wallet/wallet_nft_store.py +6 -6
- chia/wallet/wallet_node.py +72 -76
- chia/wallet/wallet_node_api.py +33 -27
- chia/wallet/wallet_pool_store.py +1 -2
- chia/wallet/wallet_protocol.py +15 -15
- chia/wallet/wallet_puzzle_store.py +35 -4
- chia/wallet/wallet_retry_store.py +2 -2
- chia/wallet/wallet_singleton_store.py +10 -9
- chia/wallet/wallet_spend_bundle.py +4 -20
- chia/wallet/wallet_state_manager.py +223 -224
- chia/wallet/wallet_transaction_store.py +44 -18
- chia/wallet/wallet_user_store.py +2 -2
- chia/wallet/wallet_weight_proof_handler.py +2 -2
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/WHEEL +1 -1
- mozilla-ca/cacert.pem +32 -87
- chia/_tests/cmds/wallet/test_coins.py +0 -195
- chia/consensus/block_root_validation.py +0 -46
- chia/util/api_decorators.py +0 -89
- chia_blockchain-2.5.0rc1.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
chia/_tests/core/server/flood.py
CHANGED
|
@@ -9,6 +9,7 @@ import sys
|
|
|
9
9
|
import time
|
|
10
10
|
|
|
11
11
|
from chia._tests.util.misc import create_logger
|
|
12
|
+
from chia.util.task_referencer import create_referenced_task
|
|
12
13
|
|
|
13
14
|
# TODO: CAMPid 0945094189459712842390t591
|
|
14
15
|
IP = "127.0.0.1"
|
|
@@ -28,7 +29,7 @@ async def tcp_echo_client(task_counter: str, logger: logging.Logger) -> None:
|
|
|
28
29
|
writer = None
|
|
29
30
|
try:
|
|
30
31
|
logger.info(f"Opening connection: {label}")
|
|
31
|
-
|
|
32
|
+
_reader, writer = await asyncio.open_connection(IP, PORT)
|
|
32
33
|
total_open_connections += 1
|
|
33
34
|
logger.info(f"Opened connection: {label} (total: {total_open_connections})")
|
|
34
35
|
assert writer is not None
|
|
@@ -56,12 +57,13 @@ async def main() -> None:
|
|
|
56
57
|
out_path = shutdown_path.with_suffix(".out")
|
|
57
58
|
|
|
58
59
|
async def dun() -> None:
|
|
59
|
-
|
|
60
|
+
# TODO: switch to event driven code
|
|
61
|
+
while shutdown_path.exists(): # noqa: ASYNC110
|
|
60
62
|
await asyncio.sleep(0.25)
|
|
61
63
|
|
|
62
64
|
task.cancel()
|
|
63
65
|
|
|
64
|
-
file_task =
|
|
66
|
+
file_task = create_referenced_task(dun())
|
|
65
67
|
|
|
66
68
|
with out_path.open(mode="w") as file:
|
|
67
69
|
logger = create_logger(file=file)
|
|
@@ -69,7 +71,7 @@ async def main() -> None:
|
|
|
69
71
|
async def f() -> None:
|
|
70
72
|
await asyncio.gather(*[tcp_echo_client(task_counter=f"{i}", logger=logger) for i in range(0, NUM_CLIENTS)])
|
|
71
73
|
|
|
72
|
-
task =
|
|
74
|
+
task = create_referenced_task(f())
|
|
73
75
|
try:
|
|
74
76
|
await task
|
|
75
77
|
except asyncio.CancelledError:
|
chia/_tests/core/server/serve.py
CHANGED
|
@@ -9,11 +9,12 @@ import logging.config
|
|
|
9
9
|
import pathlib
|
|
10
10
|
import sys
|
|
11
11
|
import threading
|
|
12
|
-
from typing import
|
|
12
|
+
from typing import Optional, final, overload
|
|
13
13
|
|
|
14
14
|
from chia._tests.util.misc import create_logger
|
|
15
15
|
from chia.server.chia_policy import ChiaPolicy
|
|
16
16
|
from chia.server.start_service import async_run
|
|
17
|
+
from chia.util.task_referencer import create_referenced_task
|
|
17
18
|
|
|
18
19
|
if sys.platform == "win32":
|
|
19
20
|
import _winapi
|
|
@@ -48,7 +49,7 @@ async def async_main(
|
|
|
48
49
|
shutdown_path: pathlib.Path,
|
|
49
50
|
ip: str = "127.0.0.1",
|
|
50
51
|
port: int = 8444,
|
|
51
|
-
port_holder: Optional[
|
|
52
|
+
port_holder: Optional[list[int]] = None,
|
|
52
53
|
) -> None: ...
|
|
53
54
|
|
|
54
55
|
|
|
@@ -59,7 +60,7 @@ async def async_main(
|
|
|
59
60
|
thread_end_event: threading.Event,
|
|
60
61
|
ip: str = "127.0.0.1",
|
|
61
62
|
port: int = 8444,
|
|
62
|
-
port_holder: Optional[
|
|
63
|
+
port_holder: Optional[list[int]] = None,
|
|
63
64
|
) -> None: ...
|
|
64
65
|
|
|
65
66
|
|
|
@@ -70,7 +71,7 @@ async def async_main(
|
|
|
70
71
|
thread_end_event: Optional[threading.Event] = None,
|
|
71
72
|
ip: str = "127.0.0.1",
|
|
72
73
|
port: int = 8444,
|
|
73
|
-
port_holder: Optional[
|
|
74
|
+
port_holder: Optional[list[int]] = None,
|
|
74
75
|
) -> None:
|
|
75
76
|
with out_path.open(mode="w") as file:
|
|
76
77
|
logger = create_logger(file=file)
|
|
@@ -80,12 +81,13 @@ async def async_main(
|
|
|
80
81
|
thread_end_event = threading.Event()
|
|
81
82
|
|
|
82
83
|
async def dun() -> None:
|
|
83
|
-
|
|
84
|
+
# TODO: switch to event driven code
|
|
85
|
+
while shutdown_path.exists(): # noqa: ASYNC110
|
|
84
86
|
await asyncio.sleep(0.25)
|
|
85
87
|
|
|
86
88
|
thread_end_event.set()
|
|
87
89
|
|
|
88
|
-
file_task =
|
|
90
|
+
file_task = create_referenced_task(dun())
|
|
89
91
|
|
|
90
92
|
loop = asyncio.get_event_loop()
|
|
91
93
|
server = await loop.create_server(functools.partial(EchoServer, logger=logger), ip, port)
|
|
@@ -97,7 +99,8 @@ async def async_main(
|
|
|
97
99
|
|
|
98
100
|
try:
|
|
99
101
|
try:
|
|
100
|
-
|
|
102
|
+
# TODO: switch to event driven code
|
|
103
|
+
while not thread_end_event.is_set(): # noqa: ASYNC110
|
|
101
104
|
await asyncio.sleep(0.1)
|
|
102
105
|
finally:
|
|
103
106
|
# the test checks explicitly for this
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from chia.protocols.full_node_protocol import RequestTransaction
|
|
6
|
+
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
7
|
+
from chia.server.api_protocol import ApiMetadata
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def test_api_protocol_raises_for_repeat_request_registration() -> None:
|
|
11
|
+
metadata = ApiMetadata()
|
|
12
|
+
|
|
13
|
+
@metadata.request(request_type=ProtocolMessageTypes.handshake)
|
|
14
|
+
async def f(self: object, request: RequestTransaction) -> None: ...
|
|
15
|
+
|
|
16
|
+
async def g(self: object, request: RequestTransaction) -> None: ...
|
|
17
|
+
|
|
18
|
+
decorator = metadata.request(request_type=ProtocolMessageTypes.handshake)
|
|
19
|
+
|
|
20
|
+
with pytest.raises(Exception, match="request type already registered"):
|
|
21
|
+
decorator(g)
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import List, Tuple
|
|
4
|
-
|
|
5
3
|
import pytest
|
|
6
4
|
|
|
7
5
|
from chia.protocols.shared_protocol import Capability
|
|
@@ -53,13 +51,13 @@ from chia.util.ints import uint16
|
|
|
53
51
|
ids=lambda value: "disabled" if value else "enabled",
|
|
54
52
|
)
|
|
55
53
|
def test_known_active_capabilities_filter(
|
|
56
|
-
values:
|
|
57
|
-
expected:
|
|
54
|
+
values: list[tuple[uint16, str]],
|
|
55
|
+
expected: list[Capability],
|
|
58
56
|
duplicated: bool,
|
|
59
57
|
disabled: bool,
|
|
60
58
|
) -> None:
|
|
61
59
|
if duplicated:
|
|
62
|
-
values
|
|
60
|
+
values *= 2
|
|
63
61
|
|
|
64
62
|
if disabled:
|
|
65
63
|
values = [(value, "0") for value, state in values]
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
# flake8: noqa: F811, F401
|
|
2
1
|
from __future__ import annotations
|
|
3
2
|
|
|
4
3
|
import asyncio
|
|
5
4
|
import logging
|
|
6
5
|
import time
|
|
7
|
-
from typing import
|
|
6
|
+
from typing import Optional
|
|
8
7
|
|
|
9
8
|
import pytest
|
|
10
9
|
from aiohttp import ClientSession, ClientTimeout, WSCloseCode, WSMessage, WSMsgType, WSServerHandshakeError
|
|
@@ -45,15 +44,15 @@ async def get_block_path(full_node: FullNodeAPI):
|
|
|
45
44
|
|
|
46
45
|
|
|
47
46
|
class FakeRateLimiter:
|
|
48
|
-
def process_msg_and_check(self, msg, capa, capb):
|
|
49
|
-
return
|
|
47
|
+
def process_msg_and_check(self, msg, capa, capb) -> Optional[str]:
|
|
48
|
+
return None
|
|
50
49
|
|
|
51
50
|
|
|
52
51
|
class TestDos:
|
|
53
52
|
@pytest.mark.anyio
|
|
54
53
|
async def test_banned_host_can_not_connect(
|
|
55
54
|
self,
|
|
56
|
-
setup_two_nodes_fixture:
|
|
55
|
+
setup_two_nodes_fixture: tuple[list[FullNodeSimulator], list[tuple[WalletNode, ChiaServer]], BlockTools],
|
|
57
56
|
self_hostname: str,
|
|
58
57
|
monkeypatch: pytest.MonkeyPatch,
|
|
59
58
|
) -> None:
|
|
@@ -77,7 +76,7 @@ class TestDos:
|
|
|
77
76
|
@pytest.mark.anyio
|
|
78
77
|
async def test_large_message_disconnect_and_ban(
|
|
79
78
|
self,
|
|
80
|
-
setup_two_nodes_fixture:
|
|
79
|
+
setup_two_nodes_fixture: tuple[list[FullNodeSimulator], list[tuple[WalletNode, ChiaServer]], BlockTools],
|
|
81
80
|
self_hostname: str,
|
|
82
81
|
monkeypatch: pytest.MonkeyPatch,
|
|
83
82
|
) -> None:
|
|
@@ -112,7 +111,7 @@ class TestDos:
|
|
|
112
111
|
@pytest.mark.anyio
|
|
113
112
|
async def test_bad_handshake_and_ban(
|
|
114
113
|
self,
|
|
115
|
-
setup_two_nodes_fixture:
|
|
114
|
+
setup_two_nodes_fixture: tuple[list[FullNodeSimulator], list[tuple[WalletNode, ChiaServer]], BlockTools],
|
|
116
115
|
self_hostname: str,
|
|
117
116
|
monkeypatch: pytest.MonkeyPatch,
|
|
118
117
|
) -> None:
|
|
@@ -176,7 +175,7 @@ class TestDos:
|
|
|
176
175
|
@pytest.mark.anyio
|
|
177
176
|
async def test_spam_tx(self, setup_two_nodes_fixture, self_hostname):
|
|
178
177
|
nodes, _, _ = setup_two_nodes_fixture
|
|
179
|
-
|
|
178
|
+
_full_node_1, full_node_2 = nodes
|
|
180
179
|
server_1 = nodes[0].full_node.server
|
|
181
180
|
server_2 = nodes[1].full_node.server
|
|
182
181
|
|
|
@@ -184,8 +183,8 @@ class TestDos:
|
|
|
184
183
|
|
|
185
184
|
assert len(server_1.all_connections) == 1
|
|
186
185
|
|
|
187
|
-
ws_con: WSChiaConnection =
|
|
188
|
-
ws_con_2: WSChiaConnection =
|
|
186
|
+
ws_con: WSChiaConnection = next(iter(server_1.all_connections.values()))
|
|
187
|
+
ws_con_2: WSChiaConnection = next(iter(server_2.all_connections.values()))
|
|
189
188
|
|
|
190
189
|
ws_con.peer_info = PeerInfo("1.2.3.4", ws_con.peer_info.port)
|
|
191
190
|
ws_con_2.peer_info = PeerInfo("1.2.3.4", ws_con_2.peer_info.port)
|
|
@@ -231,7 +230,7 @@ class TestDos:
|
|
|
231
230
|
@pytest.mark.anyio
|
|
232
231
|
async def test_spam_message_non_tx(self, setup_two_nodes_fixture, self_hostname):
|
|
233
232
|
nodes, _, _ = setup_two_nodes_fixture
|
|
234
|
-
|
|
233
|
+
_full_node_1, full_node_2 = nodes
|
|
235
234
|
server_1 = nodes[0].full_node.server
|
|
236
235
|
server_2 = nodes[1].full_node.server
|
|
237
236
|
|
|
@@ -239,8 +238,8 @@ class TestDos:
|
|
|
239
238
|
|
|
240
239
|
assert len(server_1.all_connections) == 1
|
|
241
240
|
|
|
242
|
-
ws_con: WSChiaConnection =
|
|
243
|
-
ws_con_2: WSChiaConnection =
|
|
241
|
+
ws_con: WSChiaConnection = next(iter(server_1.all_connections.values()))
|
|
242
|
+
ws_con_2: WSChiaConnection = next(iter(server_2.all_connections.values()))
|
|
244
243
|
|
|
245
244
|
ws_con.peer_info = PeerInfo("1.2.3.4", ws_con.peer_info.port)
|
|
246
245
|
ws_con_2.peer_info = PeerInfo("1.2.3.4", ws_con_2.peer_info.port)
|
|
@@ -280,7 +279,7 @@ class TestDos:
|
|
|
280
279
|
@pytest.mark.anyio
|
|
281
280
|
async def test_spam_message_too_large(self, setup_two_nodes_fixture, self_hostname):
|
|
282
281
|
nodes, _, _ = setup_two_nodes_fixture
|
|
283
|
-
|
|
282
|
+
_full_node_1, full_node_2 = nodes
|
|
284
283
|
server_1 = nodes[0].full_node.server
|
|
285
284
|
server_2 = nodes[1].full_node.server
|
|
286
285
|
|
|
@@ -288,8 +287,8 @@ class TestDos:
|
|
|
288
287
|
|
|
289
288
|
assert len(server_1.all_connections) == 1
|
|
290
289
|
|
|
291
|
-
ws_con: WSChiaConnection =
|
|
292
|
-
ws_con_2: WSChiaConnection =
|
|
290
|
+
ws_con: WSChiaConnection = next(iter(server_1.all_connections.values()))
|
|
291
|
+
ws_con_2: WSChiaConnection = next(iter(server_2.all_connections.values()))
|
|
293
292
|
|
|
294
293
|
ws_con.peer_info = PeerInfo("1.2.3.4", ws_con.peer_info.port)
|
|
295
294
|
ws_con_2.peer_info = PeerInfo("1.2.3.4", ws_con_2.peer_info.port)
|
|
@@ -8,8 +8,9 @@ import random
|
|
|
8
8
|
import subprocess
|
|
9
9
|
import sys
|
|
10
10
|
import threading
|
|
11
|
+
from collections.abc import AsyncIterator
|
|
11
12
|
from dataclasses import dataclass, field
|
|
12
|
-
from typing import
|
|
13
|
+
from typing import Optional
|
|
13
14
|
|
|
14
15
|
import anyio
|
|
15
16
|
import pytest
|
|
@@ -17,6 +18,7 @@ import pytest
|
|
|
17
18
|
from chia._tests.core.server import serve
|
|
18
19
|
from chia._tests.util.misc import create_logger
|
|
19
20
|
from chia.server import chia_policy
|
|
21
|
+
from chia.util.task_referencer import create_referenced_task
|
|
20
22
|
from chia.util.timing import adjusted_timeout
|
|
21
23
|
|
|
22
24
|
here = pathlib.Path(__file__).parent
|
|
@@ -57,8 +59,8 @@ class Client:
|
|
|
57
59
|
|
|
58
60
|
@classmethod
|
|
59
61
|
@contextlib.asynccontextmanager
|
|
60
|
-
async def open_several(cls, count: int, ip: str, port: int) -> AsyncIterator[
|
|
61
|
-
clients:
|
|
62
|
+
async def open_several(cls, count: int, ip: str, port: int) -> AsyncIterator[list[Client]]:
|
|
63
|
+
clients: list[Client] = await asyncio.gather(*(cls.open(ip=ip, port=port) for _ in range(count)))
|
|
62
64
|
try:
|
|
63
65
|
yield [*clients]
|
|
64
66
|
finally:
|
|
@@ -98,7 +100,7 @@ class ServeInThread:
|
|
|
98
100
|
server_task: Optional[asyncio.Task[None]] = None
|
|
99
101
|
thread: Optional[threading.Thread] = None
|
|
100
102
|
thread_end_event: threading.Event = field(default_factory=threading.Event)
|
|
101
|
-
port_holder:
|
|
103
|
+
port_holder: list[int] = field(default_factory=list)
|
|
102
104
|
|
|
103
105
|
def start(self) -> None:
|
|
104
106
|
self.original_connection_limit = chia_policy.global_max_concurrent_connections
|
|
@@ -122,7 +124,7 @@ class ServeInThread:
|
|
|
122
124
|
asyncio.set_event_loop_policy(original_event_loop_policy)
|
|
123
125
|
|
|
124
126
|
async def main(self) -> None:
|
|
125
|
-
self.server_task =
|
|
127
|
+
self.server_task = create_referenced_task(
|
|
126
128
|
serve.async_main(
|
|
127
129
|
out_path=self.out_path,
|
|
128
130
|
ip=self.ip,
|
|
@@ -161,7 +163,8 @@ async def test_loop(tmp_path: pathlib.Path) -> None:
|
|
|
161
163
|
flood_file.touch()
|
|
162
164
|
|
|
163
165
|
logger.info(" ==== launching serve.py")
|
|
164
|
-
|
|
166
|
+
# TODO: is there some reason not to use an async process here?
|
|
167
|
+
with subprocess.Popen( # noqa: ASYNC220
|
|
165
168
|
[sys.executable, "-m", "chia._tests.core.server.serve", os.fspath(serve_file)],
|
|
166
169
|
):
|
|
167
170
|
logger.info(" ==== serve.py running")
|
|
@@ -169,7 +172,8 @@ async def test_loop(tmp_path: pathlib.Path) -> None:
|
|
|
169
172
|
await asyncio.sleep(adjusted_timeout(5))
|
|
170
173
|
|
|
171
174
|
logger.info(" ==== launching flood.py")
|
|
172
|
-
|
|
175
|
+
# TODO: is there some reason not to use an async process here?
|
|
176
|
+
with subprocess.Popen( # noqa: ASYNC220
|
|
173
177
|
[sys.executable, "-m", "chia._tests.core.server.flood", os.fspath(flood_file)],
|
|
174
178
|
):
|
|
175
179
|
logger.info(" ==== flood.py running")
|
|
@@ -189,7 +193,7 @@ async def test_loop(tmp_path: pathlib.Path) -> None:
|
|
|
189
193
|
try:
|
|
190
194
|
logger.info(" ==== attempting a single new connection")
|
|
191
195
|
with anyio.fail_after(delay=adjusted_timeout(1)):
|
|
192
|
-
|
|
196
|
+
_reader, writer = await asyncio.open_connection(IP, PORT)
|
|
193
197
|
logger.info(" ==== connection succeeded")
|
|
194
198
|
post_connection_succeeded = True
|
|
195
199
|
except (TimeoutError, ConnectionRefusedError) as e:
|
|
@@ -214,10 +218,10 @@ async def test_loop(tmp_path: pathlib.Path) -> None:
|
|
|
214
218
|
|
|
215
219
|
over = []
|
|
216
220
|
connection_limit = 25
|
|
217
|
-
accept_loop_count_over:
|
|
221
|
+
accept_loop_count_over: list[int] = []
|
|
218
222
|
server_output_lines = serve_output.splitlines()
|
|
219
223
|
found_shutdown = False
|
|
220
|
-
shutdown_lines:
|
|
224
|
+
shutdown_lines: list[str] = []
|
|
221
225
|
for line in server_output_lines:
|
|
222
226
|
if not found_shutdown:
|
|
223
227
|
if not line.casefold().endswith("shutting down"):
|
|
@@ -2,7 +2,6 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from logging import Logger
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import Tuple
|
|
6
5
|
|
|
7
6
|
import pytest
|
|
8
7
|
|
|
@@ -15,7 +14,7 @@ from chia.util.default_root import SIMULATOR_ROOT_PATH
|
|
|
15
14
|
|
|
16
15
|
@pytest.mark.anyio
|
|
17
16
|
async def test_enable_private_networks(
|
|
18
|
-
two_nodes:
|
|
17
|
+
two_nodes: tuple[FullNodeAPI, FullNodeAPI, ChiaServer, ChiaServer, BlockTools],
|
|
19
18
|
) -> None:
|
|
20
19
|
chia_server = two_nodes[2]
|
|
21
20
|
|