chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__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.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.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.0rc2.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
|
@@ -4,7 +4,7 @@ import asyncio
|
|
|
4
4
|
import random
|
|
5
5
|
import re
|
|
6
6
|
from dataclasses import dataclass
|
|
7
|
-
from typing import
|
|
7
|
+
from typing import Optional
|
|
8
8
|
|
|
9
9
|
import anyio
|
|
10
10
|
import pytest
|
|
@@ -110,7 +110,7 @@ async def test_worker_id_counts() -> None:
|
|
|
110
110
|
worker_async_callable=worker,
|
|
111
111
|
target_worker_count=1,
|
|
112
112
|
):
|
|
113
|
-
results:
|
|
113
|
+
results: list[int] = []
|
|
114
114
|
|
|
115
115
|
with anyio.fail_after(adjusted_timeout(10)):
|
|
116
116
|
for _ in expected_results:
|
|
@@ -194,7 +194,7 @@ async def test_simple_queue_example() -> None:
|
|
|
194
194
|
for input in inputs:
|
|
195
195
|
await work_queue.put(input)
|
|
196
196
|
|
|
197
|
-
results:
|
|
197
|
+
results: list[int] = []
|
|
198
198
|
|
|
199
199
|
with anyio.fail_after(adjusted_timeout(10)):
|
|
200
200
|
for _ in inputs:
|
|
@@ -228,7 +228,7 @@ async def test_simple_queue_example_using_queued() -> None:
|
|
|
228
228
|
for job in jobs:
|
|
229
229
|
await work_queue.put(job)
|
|
230
230
|
|
|
231
|
-
results:
|
|
231
|
+
results: list[int] = []
|
|
232
232
|
|
|
233
233
|
with anyio.fail_after(adjusted_timeout(10)):
|
|
234
234
|
for _ in expected_results:
|
|
@@ -266,7 +266,7 @@ async def test_queued_pre_cancel() -> None:
|
|
|
266
266
|
|
|
267
267
|
await work_queue.put(job)
|
|
268
268
|
|
|
269
|
-
results:
|
|
269
|
+
results: list[int] = []
|
|
270
270
|
|
|
271
271
|
with anyio.fail_after(adjusted_timeout(10)):
|
|
272
272
|
for _ in expected_results:
|
|
@@ -304,7 +304,7 @@ async def test_queued_active_cancel() -> None:
|
|
|
304
304
|
for job in jobs:
|
|
305
305
|
await work_queue.put(job)
|
|
306
306
|
|
|
307
|
-
results:
|
|
307
|
+
results: list[int] = []
|
|
308
308
|
with anyio.fail_after(adjusted_timeout(10)):
|
|
309
309
|
for job in jobs:
|
|
310
310
|
await job.started.wait()
|
|
@@ -346,7 +346,7 @@ async def test_queued_raises() -> None:
|
|
|
346
346
|
for job in jobs:
|
|
347
347
|
await work_queue.put(job)
|
|
348
348
|
|
|
349
|
-
results:
|
|
349
|
+
results: list[int] = []
|
|
350
350
|
|
|
351
351
|
with anyio.fail_after(adjusted_timeout(10)):
|
|
352
352
|
for _ in expected_results:
|
|
@@ -355,7 +355,7 @@ async def test_queued_raises() -> None:
|
|
|
355
355
|
raising_jobs = [job for job in jobs if job.input in raises]
|
|
356
356
|
expected_exceptions = [(Exception, (job.input,)) for job in raising_jobs]
|
|
357
357
|
|
|
358
|
-
exceptions:
|
|
358
|
+
exceptions: list[tuple[type[BaseException], tuple[int]]] = []
|
|
359
359
|
for job in raising_jobs:
|
|
360
360
|
exception = job.exception
|
|
361
361
|
assert isinstance(exception, BaseException)
|
|
@@ -4,14 +4,13 @@ import json
|
|
|
4
4
|
import pathlib
|
|
5
5
|
import subprocess
|
|
6
6
|
import sys
|
|
7
|
-
from typing import Dict, List
|
|
8
7
|
|
|
9
8
|
import chia._tests
|
|
10
9
|
|
|
11
10
|
build_job_matrix_path = pathlib.Path(chia._tests.__file__).with_name("build-job-matrix.py")
|
|
12
11
|
|
|
13
12
|
|
|
14
|
-
def run(args:
|
|
13
|
+
def run(args: list[str]) -> str:
|
|
15
14
|
completed_process = subprocess.run(
|
|
16
15
|
[sys.executable, build_job_matrix_path, *args],
|
|
17
16
|
check=True,
|
|
@@ -22,7 +21,7 @@ def run(args: List[str]) -> str:
|
|
|
22
21
|
|
|
23
22
|
|
|
24
23
|
def test() -> None:
|
|
25
|
-
timeouts:
|
|
24
|
+
timeouts: dict[int, dict[str, int]] = {}
|
|
26
25
|
|
|
27
26
|
multipliers = [1, 2, 3]
|
|
28
27
|
|
|
@@ -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
|
from chia_rs import G1Element
|
|
7
5
|
from clvm.casts import int_to_bytes
|
|
@@ -29,8 +27,8 @@ TEST_COIN = Coin(H1, H2, uint64(123))
|
|
|
29
27
|
|
|
30
28
|
def mk_agg_sig_conditions(
|
|
31
29
|
opcode: ConditionOpcode,
|
|
32
|
-
agg_sig_data:
|
|
33
|
-
agg_sig_unsafe_data:
|
|
30
|
+
agg_sig_data: list[tuple[G1Element, bytes]],
|
|
31
|
+
agg_sig_unsafe_data: list[tuple[G1Element, bytes]] = [],
|
|
34
32
|
) -> SpendBundleConditions:
|
|
35
33
|
spend = SpendConditions(
|
|
36
34
|
coin_id=TEST_COIN.name(),
|
|
@@ -53,7 +51,7 @@ def mk_agg_sig_conditions(
|
|
|
53
51
|
agg_sig_puzzle_amount=agg_sig_data if opcode == ConditionOpcode.AGG_SIG_PUZZLE_AMOUNT else [],
|
|
54
52
|
flags=0,
|
|
55
53
|
)
|
|
56
|
-
return SpendBundleConditions([spend], 0, 0, 0, None, None, agg_sig_unsafe_data, 0, 0, 0, False)
|
|
54
|
+
return SpendBundleConditions([spend], 0, 0, 0, None, None, agg_sig_unsafe_data, 0, 0, 0, False, 0, 0)
|
|
57
55
|
|
|
58
56
|
|
|
59
57
|
@pytest.mark.parametrize(
|
|
@@ -100,7 +98,7 @@ def test_pkm_pairs_vs_for_conditions_dict(opcode: ConditionOpcode) -> None:
|
|
|
100
98
|
|
|
101
99
|
class TestPkmPairs:
|
|
102
100
|
def test_empty_list(self) -> None:
|
|
103
|
-
conds = SpendBundleConditions([], 0, 0, 0, None, None, [], 0, 0, 0, False)
|
|
101
|
+
conds = SpendBundleConditions([], 0, 0, 0, None, None, [], 0, 0, 0, False, 0, 0)
|
|
104
102
|
pks, msgs = pkm_pairs(conds, b"foobar")
|
|
105
103
|
assert pks == []
|
|
106
104
|
assert msgs == []
|
chia/_tests/util/test_config.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Any,
|
|
4
|
+
from typing import Any, Optional
|
|
5
5
|
|
|
6
6
|
from chia._tests.util.misc import DataCase, Marks, datacases
|
|
7
7
|
from chia.server.outbound_message import NodeType
|
|
@@ -13,9 +13,9 @@ from chia.util.ints import uint16
|
|
|
13
13
|
@dataclass
|
|
14
14
|
class GetUnresolvedPeerInfosCase(DataCase):
|
|
15
15
|
description: str
|
|
16
|
-
service_config:
|
|
16
|
+
service_config: dict[str, Any]
|
|
17
17
|
requested_node_type: NodeType
|
|
18
|
-
expected_peer_infos:
|
|
18
|
+
expected_peer_infos: set[UnresolvedPeerInfo]
|
|
19
19
|
marks: Marks = ()
|
|
20
20
|
|
|
21
21
|
@property
|
|
@@ -154,9 +154,9 @@ def test_get_unresolved_peer_infos(case: GetUnresolvedPeerInfosCase) -> None:
|
|
|
154
154
|
@dataclass
|
|
155
155
|
class SetPeerInfoCase(DataCase):
|
|
156
156
|
description: str
|
|
157
|
-
service_config:
|
|
157
|
+
service_config: dict[str, Any]
|
|
158
158
|
requested_node_type: NodeType
|
|
159
|
-
expected_service_config:
|
|
159
|
+
expected_service_config: dict[str, Any]
|
|
160
160
|
peer_host: Optional[str] = None
|
|
161
161
|
peer_port: Optional[int] = None
|
|
162
162
|
marks: Marks = ()
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import random
|
|
4
|
-
from
|
|
4
|
+
from collections.abc import Generator, Iterator
|
|
5
|
+
from typing import Optional
|
|
5
6
|
|
|
6
7
|
import pytest
|
|
7
8
|
from chia_rs import G1Element, G2Element
|
|
@@ -23,15 +24,20 @@ from chia.types.blockchain_format.vdf import VDFInfo, VDFProof
|
|
|
23
24
|
from chia.types.end_of_slot_bundle import EndOfSubSlotBundle
|
|
24
25
|
from chia.types.full_block import FullBlock
|
|
25
26
|
from chia.types.header_block import HeaderBlock
|
|
26
|
-
from chia.util.full_block_utils import
|
|
27
|
+
from chia.util.full_block_utils import (
|
|
28
|
+
block_info_from_block,
|
|
29
|
+
generator_from_block,
|
|
30
|
+
get_height_and_tx_status_from_block,
|
|
31
|
+
header_block_from_block,
|
|
32
|
+
)
|
|
27
33
|
from chia.util.generator_tools import get_block_header
|
|
28
34
|
from chia.util.ints import uint8, uint32, uint64, uint128
|
|
29
35
|
|
|
30
|
-
test_g2s:
|
|
31
|
-
test_g1s:
|
|
32
|
-
test_hashes:
|
|
33
|
-
test_vdfs:
|
|
34
|
-
test_vdf_proofs:
|
|
36
|
+
test_g2s: list[G2Element] = [rand_g2() for _ in range(10)]
|
|
37
|
+
test_g1s: list[G1Element] = [rand_g1() for _ in range(10)]
|
|
38
|
+
test_hashes: list[bytes32] = [rand_hash() for _ in range(100)]
|
|
39
|
+
test_vdfs: list[VDFInfo] = [rand_vdf() for _ in range(100)]
|
|
40
|
+
test_vdf_proofs: list[VDFProof] = [rand_vdf_proof() for _ in range(100)]
|
|
35
41
|
|
|
36
42
|
|
|
37
43
|
def g2() -> G2Element:
|
|
@@ -200,12 +206,12 @@ def get_end_of_sub_slot() -> Generator[EndOfSubSlotBundle, None, None]:
|
|
|
200
206
|
)
|
|
201
207
|
|
|
202
208
|
|
|
203
|
-
def get_finished_sub_slots() -> Generator[
|
|
209
|
+
def get_finished_sub_slots() -> Generator[list[EndOfSubSlotBundle], None, None]:
|
|
204
210
|
yield []
|
|
205
211
|
yield [s for s in get_end_of_sub_slot()]
|
|
206
212
|
|
|
207
213
|
|
|
208
|
-
def get_ref_list() -> Generator[
|
|
214
|
+
def get_ref_list() -> Generator[list[uint32], None, None]:
|
|
209
215
|
yield []
|
|
210
216
|
yield [uint32(1), uint32(2), uint32(3), uint32(4)]
|
|
211
217
|
yield [uint32(256)]
|
|
@@ -244,7 +250,6 @@ def get_full_blocks() -> Iterator[FullBlock]:
|
|
|
244
250
|
|
|
245
251
|
|
|
246
252
|
@pytest.mark.anyio
|
|
247
|
-
@pytest.mark.skip("This test is expensive and has already convinced us the parser works")
|
|
248
253
|
async def test_parser():
|
|
249
254
|
# loop over every combination of Optionals being set and not set
|
|
250
255
|
# along with random values for the FullBlock fields. Ensure
|
|
@@ -252,6 +257,9 @@ async def test_parser():
|
|
|
252
257
|
# correctly
|
|
253
258
|
for block in get_full_blocks():
|
|
254
259
|
block_bytes = bytes(block)
|
|
260
|
+
height, is_tx_block = get_height_and_tx_status_from_block(block_bytes)
|
|
261
|
+
assert height == block.height
|
|
262
|
+
assert is_tx_block == (block.transactions_info is not None)
|
|
255
263
|
gen = generator_from_block(block_bytes)
|
|
256
264
|
assert gen == bytes(block.transactions_generator)
|
|
257
265
|
bi = block_info_from_block(block_bytes)
|
|
@@ -266,6 +274,6 @@ async def test_parser():
|
|
|
266
274
|
@pytest.mark.skip("This test is expensive and has already convinced us the parser works")
|
|
267
275
|
async def test_header_block():
|
|
268
276
|
for block in get_full_blocks():
|
|
269
|
-
hb: HeaderBlock = get_block_header(block
|
|
277
|
+
hb: HeaderBlock = get_block_header(block)
|
|
270
278
|
hb_bytes = header_block_from_block(memoryview(bytes(block)))
|
|
271
279
|
assert HeaderBlock.from_bytes(hb_bytes) == hb
|
|
@@ -6,6 +6,7 @@ from typing import Optional
|
|
|
6
6
|
import pytest
|
|
7
7
|
|
|
8
8
|
from chia.util.limited_semaphore import LimitedSemaphore, LimitedSemaphoreFullError
|
|
9
|
+
from chia.util.task_referencer import create_referenced_task
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
@pytest.mark.anyio
|
|
@@ -27,8 +28,8 @@ async def test_stuff() -> None:
|
|
|
27
28
|
waiting_events = [asyncio.Event() for _ in range(waiting_limit)]
|
|
28
29
|
failed_events = [asyncio.Event() for _ in range(beyond_limit)]
|
|
29
30
|
|
|
30
|
-
entered_tasks = [
|
|
31
|
-
waiting_tasks = [
|
|
31
|
+
entered_tasks = [create_referenced_task(acquire(entered_event=event)) for event in entered_events]
|
|
32
|
+
waiting_tasks = [create_referenced_task(acquire(entered_event=event)) for event in waiting_events]
|
|
32
33
|
|
|
33
34
|
await asyncio.gather(*(event.wait() for event in entered_events))
|
|
34
35
|
assert all(event.is_set() for event in entered_events)
|
|
@@ -36,7 +37,7 @@ async def test_stuff() -> None:
|
|
|
36
37
|
|
|
37
38
|
assert semaphore._available_count == 0
|
|
38
39
|
|
|
39
|
-
failure_tasks = [
|
|
40
|
+
failure_tasks = [create_referenced_task(acquire()) for _ in range(beyond_limit)]
|
|
40
41
|
|
|
41
42
|
failure_results = await asyncio.gather(*failure_tasks, return_exceptions=True)
|
|
42
43
|
assert [str(error) for error in failure_results] == [str(LimitedSemaphoreFullError())] * beyond_limit
|
|
@@ -2,7 +2,6 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
4
|
import time
|
|
5
|
-
from re import split
|
|
6
5
|
from time import sleep
|
|
7
6
|
|
|
8
7
|
import pytest
|
|
@@ -27,7 +26,7 @@ def test_logging_filter(caplog: pytest.LogCaptureFixture) -> None:
|
|
|
27
26
|
sleep(min(0.0, now - last_time))
|
|
28
27
|
last_time = now
|
|
29
28
|
|
|
30
|
-
assert len(split("\n"
|
|
29
|
+
assert len(caplog.text.split("\n")) <= ((num_logs * sleep_secs) / log_interval_secs) + 1
|
|
31
30
|
|
|
32
31
|
|
|
33
32
|
def test_dont_filter_non_matches(caplog: pytest.LogCaptureFixture) -> None:
|
|
@@ -40,4 +39,4 @@ def test_dont_filter_non_matches(caplog: pytest.LogCaptureFixture) -> None:
|
|
|
40
39
|
with caplog.at_level(logging.WARNING):
|
|
41
40
|
log.warning(f"Don't Filter this log message {n}")
|
|
42
41
|
|
|
43
|
-
assert len(split("\n"
|
|
42
|
+
assert len(caplog.text.split("\n")) == num_log_statements
|
chia/_tests/util/test_misc.py
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import contextlib
|
|
4
|
-
from
|
|
4
|
+
from collections.abc import AsyncIterator, Iterator
|
|
5
|
+
from typing import Optional, TypeVar
|
|
5
6
|
|
|
6
7
|
import aiohttp
|
|
7
8
|
import anyio
|
|
@@ -89,7 +90,7 @@ def test_validate_directory_writable(tmp_path) -> None:
|
|
|
89
90
|
|
|
90
91
|
def test_empty_lists() -> None:
|
|
91
92
|
# An empty list should return an empty iterator and skip the loop's body.
|
|
92
|
-
empty:
|
|
93
|
+
empty: list[int] = []
|
|
93
94
|
with pytest.raises(StopIteration):
|
|
94
95
|
next(to_batches(empty, 1))
|
|
95
96
|
|
|
@@ -129,14 +130,14 @@ def test_invalid_input_type() -> None:
|
|
|
129
130
|
|
|
130
131
|
|
|
131
132
|
@contextlib.contextmanager
|
|
132
|
-
def sync_manager(y:
|
|
133
|
+
def sync_manager(y: list[str]) -> Iterator[None]:
|
|
133
134
|
y.append("entered")
|
|
134
135
|
yield
|
|
135
136
|
y.append("exited")
|
|
136
137
|
|
|
137
138
|
|
|
138
139
|
def test_split_manager_class_works() -> None:
|
|
139
|
-
x:
|
|
140
|
+
x: list[str] = []
|
|
140
141
|
|
|
141
142
|
split = SplitManager(manager=sync_manager(y=x), object=None)
|
|
142
143
|
assert x == []
|
|
@@ -149,7 +150,7 @@ def test_split_manager_class_works() -> None:
|
|
|
149
150
|
|
|
150
151
|
|
|
151
152
|
def test_split_manager_function_exits_if_needed() -> None:
|
|
152
|
-
x:
|
|
153
|
+
x: list[str] = []
|
|
153
154
|
|
|
154
155
|
with split_manager(manager=sync_manager(y=x), object=None) as split:
|
|
155
156
|
assert x == []
|
|
@@ -161,7 +162,7 @@ def test_split_manager_function_exits_if_needed() -> None:
|
|
|
161
162
|
|
|
162
163
|
|
|
163
164
|
def test_split_manager_function_skips_if_not_needed() -> None:
|
|
164
|
-
x:
|
|
165
|
+
x: list[str] = []
|
|
165
166
|
|
|
166
167
|
with split_manager(manager=sync_manager(y=x), object=None) as split:
|
|
167
168
|
assert x == []
|
|
@@ -176,7 +177,7 @@ def test_split_manager_function_skips_if_not_needed() -> None:
|
|
|
176
177
|
|
|
177
178
|
|
|
178
179
|
def test_split_manager_raises_on_second_entry() -> None:
|
|
179
|
-
x:
|
|
180
|
+
x: list[str] = []
|
|
180
181
|
|
|
181
182
|
split = SplitManager(manager=sync_manager(y=x), object=None)
|
|
182
183
|
split.enter()
|
|
@@ -186,7 +187,7 @@ def test_split_manager_raises_on_second_entry() -> None:
|
|
|
186
187
|
|
|
187
188
|
|
|
188
189
|
def test_split_manager_raises_on_second_entry_after_exiting() -> None:
|
|
189
|
-
x:
|
|
190
|
+
x: list[str] = []
|
|
190
191
|
|
|
191
192
|
split = SplitManager(manager=sync_manager(y=x), object=None)
|
|
192
193
|
split.enter()
|
|
@@ -197,7 +198,7 @@ def test_split_manager_raises_on_second_entry_after_exiting() -> None:
|
|
|
197
198
|
|
|
198
199
|
|
|
199
200
|
def test_split_manager_raises_on_second_exit() -> None:
|
|
200
|
-
x:
|
|
201
|
+
x: list[str] = []
|
|
201
202
|
|
|
202
203
|
split = SplitManager(manager=sync_manager(y=x), object=None)
|
|
203
204
|
split.enter()
|
|
@@ -208,7 +209,7 @@ def test_split_manager_raises_on_second_exit() -> None:
|
|
|
208
209
|
|
|
209
210
|
|
|
210
211
|
def test_split_manager_raises_on_exit_without_entry() -> None:
|
|
211
|
-
x:
|
|
212
|
+
x: list[str] = []
|
|
212
213
|
|
|
213
214
|
split = SplitManager(manager=sync_manager(y=x), object=None)
|
|
214
215
|
|
|
@@ -217,7 +218,7 @@ def test_split_manager_raises_on_exit_without_entry() -> None:
|
|
|
217
218
|
|
|
218
219
|
|
|
219
220
|
@contextlib.asynccontextmanager
|
|
220
|
-
async def async_manager(y:
|
|
221
|
+
async def async_manager(y: list[str]) -> AsyncIterator[None]:
|
|
221
222
|
y.append("entered")
|
|
222
223
|
yield
|
|
223
224
|
y.append("exited")
|
|
@@ -225,7 +226,7 @@ async def async_manager(y: List[str]) -> AsyncIterator[None]:
|
|
|
225
226
|
|
|
226
227
|
@pytest.mark.anyio
|
|
227
228
|
async def test_split_async_manager_class_works() -> None:
|
|
228
|
-
x:
|
|
229
|
+
x: list[str] = []
|
|
229
230
|
|
|
230
231
|
split = SplitAsyncManager(manager=async_manager(y=x), object=None)
|
|
231
232
|
assert x == []
|
|
@@ -239,7 +240,7 @@ async def test_split_async_manager_class_works() -> None:
|
|
|
239
240
|
|
|
240
241
|
@pytest.mark.anyio
|
|
241
242
|
async def test_split_async_manager_function_exits_if_needed() -> None:
|
|
242
|
-
x:
|
|
243
|
+
x: list[str] = []
|
|
243
244
|
|
|
244
245
|
async with split_async_manager(manager=async_manager(y=x), object=None) as split:
|
|
245
246
|
assert x == []
|
|
@@ -252,7 +253,7 @@ async def test_split_async_manager_function_exits_if_needed() -> None:
|
|
|
252
253
|
|
|
253
254
|
@pytest.mark.anyio
|
|
254
255
|
async def test_split_async_manager_function_skips_if_not_needed() -> None:
|
|
255
|
-
x:
|
|
256
|
+
x: list[str] = []
|
|
256
257
|
|
|
257
258
|
async with split_async_manager(manager=async_manager(y=x), object=None) as split:
|
|
258
259
|
assert x == []
|
|
@@ -268,7 +269,7 @@ async def test_split_async_manager_function_skips_if_not_needed() -> None:
|
|
|
268
269
|
|
|
269
270
|
@pytest.mark.anyio
|
|
270
271
|
async def test_split_async_manager_raises_on_second_entry() -> None:
|
|
271
|
-
x:
|
|
272
|
+
x: list[str] = []
|
|
272
273
|
|
|
273
274
|
split = SplitAsyncManager(manager=async_manager(y=x), object=None)
|
|
274
275
|
await split.enter()
|
|
@@ -279,7 +280,7 @@ async def test_split_async_manager_raises_on_second_entry() -> None:
|
|
|
279
280
|
|
|
280
281
|
@pytest.mark.anyio
|
|
281
282
|
async def test_split_async_manager_raises_on_second_entry_after_exiting() -> None:
|
|
282
|
-
x:
|
|
283
|
+
x: list[str] = []
|
|
283
284
|
|
|
284
285
|
split = SplitAsyncManager(manager=async_manager(y=x), object=None)
|
|
285
286
|
await split.enter()
|
|
@@ -291,7 +292,7 @@ async def test_split_async_manager_raises_on_second_entry_after_exiting() -> Non
|
|
|
291
292
|
|
|
292
293
|
@pytest.mark.anyio
|
|
293
294
|
async def test_split_async_manager_raises_on_second_exit() -> None:
|
|
294
|
-
x:
|
|
295
|
+
x: list[str] = []
|
|
295
296
|
|
|
296
297
|
split = SplitAsyncManager(manager=async_manager(y=x), object=None)
|
|
297
298
|
await split.enter()
|
|
@@ -303,7 +304,7 @@ async def test_split_async_manager_raises_on_second_exit() -> None:
|
|
|
303
304
|
|
|
304
305
|
@pytest.mark.anyio
|
|
305
306
|
async def test_split_async_manager_raises_on_exit_without_entry() -> None:
|
|
306
|
-
x:
|
|
307
|
+
x: list[str] = []
|
|
307
308
|
|
|
308
309
|
split = SplitAsyncManager(manager=async_manager(y=x), object=None)
|
|
309
310
|
|
|
@@ -365,7 +366,7 @@ async def test_valued_event_wait_blocks_when_not_set() -> None:
|
|
|
365
366
|
|
|
366
367
|
@pytest.mark.anyio
|
|
367
368
|
async def test_valued_event_multiple_waits_all_get_values() -> None:
|
|
368
|
-
results:
|
|
369
|
+
results: list[int] = []
|
|
369
370
|
valued_event = ValuedEvent[int]()
|
|
370
371
|
value = 37
|
|
371
372
|
task_count = 10
|
|
@@ -430,15 +431,15 @@ async def test_recording_web_server_specified_response(
|
|
|
430
431
|
(42, uint64, False),
|
|
431
432
|
(uint64(42), uint64, True),
|
|
432
433
|
("42", int, False),
|
|
433
|
-
([4, 2],
|
|
434
|
-
([4, "2"],
|
|
435
|
-
((4, 2),
|
|
436
|
-
((4, "2"),
|
|
437
|
-
((4, 2),
|
|
438
|
-
((4, "2"),
|
|
439
|
-
([(4, Program.to([2]))],
|
|
440
|
-
([(4, "2")],
|
|
434
|
+
([4, 2], list[int], True),
|
|
435
|
+
([4, "2"], list[int], False),
|
|
436
|
+
((4, 2), tuple[int, int], True),
|
|
437
|
+
((4, "2"), tuple[int, int], False),
|
|
438
|
+
((4, 2), tuple[int, ...], True),
|
|
439
|
+
((4, "2"), tuple[int, ...], False),
|
|
440
|
+
([(4, Program.to([2]))], list[tuple[int, Program]], True),
|
|
441
|
+
([(4, "2")], tuple[int, str], False),
|
|
441
442
|
],
|
|
442
443
|
)
|
|
443
|
-
def test_satisfies_hint(obj: T, type_hint:
|
|
444
|
+
def test_satisfies_hint(obj: T, type_hint: type[T], expected_result: bool) -> None:
|
|
444
445
|
assert satisfies_hint(obj, type_hint) == expected_result
|
chia/_tests/util/test_network.py
CHANGED
|
@@ -3,42 +3,43 @@ from __future__ import annotations
|
|
|
3
3
|
import os
|
|
4
4
|
import sys
|
|
5
5
|
from ipaddress import IPv4Address, IPv6Address
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import Union
|
|
7
7
|
|
|
8
8
|
import pytest
|
|
9
9
|
|
|
10
|
-
from chia.util.
|
|
10
|
+
from chia.util.ip_address import IPAddress
|
|
11
|
+
from chia.util.network import resolve
|
|
11
12
|
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
@pytest.mark.anyio
|
|
15
|
+
async def test_resolve4() -> None:
|
|
16
|
+
# Run these tests forcing IPv4 resolution
|
|
17
|
+
prefer_ipv6 = False
|
|
18
|
+
assert await resolve("127.0.0.1", prefer_ipv6=prefer_ipv6) == IPAddress.create("127.0.0.1")
|
|
19
|
+
assert await resolve("10.11.12.13", prefer_ipv6=prefer_ipv6) == IPAddress.create("10.11.12.13")
|
|
20
|
+
assert await resolve("localhost", prefer_ipv6=prefer_ipv6) == IPAddress.create("127.0.0.1")
|
|
21
|
+
example = await resolve("example.net", prefer_ipv6=prefer_ipv6)
|
|
22
|
+
assert example.is_v4
|
|
23
|
+
assert not example.is_private
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
)
|
|
25
|
+
|
|
26
|
+
@pytest.mark.anyio
|
|
27
|
+
@pytest.mark.skipif(
|
|
28
|
+
condition=("GITHUB_ACTIONS" in os.environ) and (sys.platform in {"darwin", "win32"}),
|
|
29
|
+
reason="macOS and Windows runners in GitHub Actions do not seem to support IPv6",
|
|
30
|
+
)
|
|
31
|
+
async def test_resolve6() -> None:
|
|
32
|
+
# Run these tests forcing IPv6 resolution
|
|
33
|
+
prefer_ipv6 = True
|
|
34
|
+
assert await resolve("::1", prefer_ipv6=prefer_ipv6) == IPAddress.create("::1")
|
|
35
|
+
assert await resolve("2000:1000::1234:abcd", prefer_ipv6=prefer_ipv6) == IPAddress.create("2000:1000::1234:abcd")
|
|
36
|
+
# ip6-localhost is not always available, and localhost is IPv4 only
|
|
37
|
+
# on some systems. Just test neither here.
|
|
38
|
+
# assert await resolve("ip6-localhost", prefer_ipv6=prefer_ipv6) == IPAddress.create("::1")
|
|
39
|
+
# assert await resolve("localhost", prefer_ipv6=prefer_ipv6) == IPAddress.create("::1")
|
|
40
|
+
example = await resolve("example.net", prefer_ipv6=prefer_ipv6)
|
|
41
|
+
assert example.is_v6
|
|
42
|
+
assert not example.is_private
|
|
42
43
|
|
|
43
44
|
|
|
44
45
|
@pytest.mark.parametrize(
|
|
@@ -51,7 +52,7 @@ class TestNetwork:
|
|
|
51
52
|
("93.184.216.34", IPv4Address),
|
|
52
53
|
],
|
|
53
54
|
)
|
|
54
|
-
def test_ip_address(address_string: str, expected_inner:
|
|
55
|
+
def test_ip_address(address_string: str, expected_inner: type[Union[IPv4Address, IPv6Address]]) -> None:
|
|
55
56
|
inner = expected_inner(address_string)
|
|
56
57
|
ip = IPAddress.create(address_string)
|
|
57
58
|
# Helpers
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
+
# ruff: noqa: F405
|
|
1
2
|
# this file is generated by build_network_protocol_files.py
|
|
2
3
|
|
|
3
4
|
from __future__ import annotations
|
|
4
5
|
|
|
5
6
|
from pathlib import Path
|
|
6
|
-
from typing import Tuple
|
|
7
7
|
|
|
8
8
|
from chia._tests.util.build_network_protocol_files import get_network_protocol_filename
|
|
9
9
|
from chia._tests.util.network_protocol_data import * # noqa: F403
|
|
10
10
|
from chia._tests.util.protocol_messages_json import * # noqa: F403
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
def parse_blob(input_bytes: bytes) ->
|
|
13
|
+
def parse_blob(input_bytes: bytes) -> tuple[bytes, bytes]:
|
|
14
14
|
size_bytes = input_bytes[:4]
|
|
15
15
|
input_bytes = input_bytes[4:]
|
|
16
16
|
size = int.from_bytes(size_bytes, "big")
|
|
@@ -20,7 +20,6 @@ def parse_blob(input_bytes: bytes) -> Tuple[bytes, bytes]:
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
def test_protocol_bytes() -> None:
|
|
23
|
-
|
|
24
23
|
filename: Path = get_network_protocol_filename()
|
|
25
24
|
assert filename.exists()
|
|
26
25
|
with open(filename, "rb") as f:
|