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
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import sys
|
|
4
|
+
from collections.abc import AsyncIterator, Iterable
|
|
4
5
|
from contextlib import asynccontextmanager
|
|
5
6
|
from dataclasses import dataclass, field
|
|
6
7
|
from pathlib import Path
|
|
7
|
-
from typing import Any,
|
|
8
|
+
from typing import Any, Optional, Union, cast
|
|
8
9
|
|
|
9
10
|
from chia_rs import Coin, G2Element
|
|
10
11
|
|
|
@@ -19,7 +20,7 @@ from chia.rpc.data_layer_rpc_client import DataLayerRpcClient
|
|
|
19
20
|
from chia.rpc.farmer_rpc_client import FarmerRpcClient
|
|
20
21
|
from chia.rpc.full_node_rpc_client import FullNodeRpcClient
|
|
21
22
|
from chia.rpc.rpc_client import RpcClient
|
|
22
|
-
from chia.rpc.wallet_request_types import SendTransactionMultiResponse
|
|
23
|
+
from chia.rpc.wallet_request_types import GetSyncStatusResponse, SendTransactionMultiResponse
|
|
23
24
|
from chia.rpc.wallet_rpc_client import WalletRpcClient
|
|
24
25
|
from chia.simulator.simulator_full_node_rpc_client import SimulatorFullNodeRpcClient
|
|
25
26
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
@@ -40,25 +41,25 @@ from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
|
|
40
41
|
# Any functions that are the same for every command being tested should be below.
|
|
41
42
|
# Functions that are specific to a command should be in the test file for that command.
|
|
42
43
|
|
|
43
|
-
logType =
|
|
44
|
+
logType = dict[str, Optional[list[tuple[Any, ...]]]]
|
|
44
45
|
|
|
45
46
|
|
|
46
47
|
@dataclass
|
|
47
48
|
class TestRpcClient:
|
|
48
|
-
client_type:
|
|
49
|
+
client_type: type[RpcClient]
|
|
49
50
|
rpc_port: Optional[uint16] = None
|
|
50
51
|
root_path: Optional[Path] = None
|
|
51
|
-
config: Optional[
|
|
52
|
+
config: Optional[dict[str, Any]] = None
|
|
52
53
|
create_called: bool = field(init=False, default=False)
|
|
53
|
-
rpc_log:
|
|
54
|
+
rpc_log: dict[str, list[tuple[Any, ...]]] = field(init=False, default_factory=dict)
|
|
54
55
|
|
|
55
|
-
async def create(self, _: str, rpc_port: uint16, root_path: Path, config:
|
|
56
|
+
async def create(self, _: str, rpc_port: uint16, root_path: Path, config: dict[str, Any]) -> None:
|
|
56
57
|
self.rpc_port = rpc_port
|
|
57
58
|
self.root_path = root_path
|
|
58
59
|
self.config = config
|
|
59
60
|
self.create_called = True
|
|
60
61
|
|
|
61
|
-
def add_to_log(self, method_name: str, args:
|
|
62
|
+
def add_to_log(self, method_name: str, args: tuple[Any, ...]) -> None:
|
|
62
63
|
if method_name not in self.rpc_log:
|
|
63
64
|
self.rpc_log[method_name] = []
|
|
64
65
|
self.rpc_log[method_name].append(args)
|
|
@@ -73,24 +74,20 @@ class TestRpcClient:
|
|
|
73
74
|
|
|
74
75
|
@dataclass
|
|
75
76
|
class TestFarmerRpcClient(TestRpcClient):
|
|
76
|
-
client_type:
|
|
77
|
+
client_type: type[FarmerRpcClient] = field(init=False, default=FarmerRpcClient)
|
|
77
78
|
|
|
78
79
|
|
|
79
80
|
@dataclass
|
|
80
81
|
class TestWalletRpcClient(TestRpcClient):
|
|
81
|
-
client_type:
|
|
82
|
+
client_type: type[WalletRpcClient] = field(init=False, default=WalletRpcClient)
|
|
82
83
|
fingerprint: int = field(init=False, default=0)
|
|
83
84
|
wallet_index: int = field(init=False, default=0)
|
|
84
85
|
|
|
85
|
-
async def get_sync_status(self) ->
|
|
86
|
+
async def get_sync_status(self) -> GetSyncStatusResponse:
|
|
86
87
|
self.add_to_log("get_sync_status", ())
|
|
87
|
-
return False
|
|
88
|
+
return GetSyncStatusResponse(synced=True, syncing=False)
|
|
88
89
|
|
|
89
|
-
async def
|
|
90
|
-
self.add_to_log("get_synced", ())
|
|
91
|
-
return True
|
|
92
|
-
|
|
93
|
-
async def get_wallets(self, wallet_type: Optional[WalletType] = None) -> List[Dict[str, Union[str, int]]]:
|
|
90
|
+
async def get_wallets(self, wallet_type: Optional[WalletType] = None) -> list[dict[str, Union[str, int]]]:
|
|
94
91
|
self.add_to_log("get_wallets", (wallet_type,))
|
|
95
92
|
# we cant start with zero because ints cant have a leading zero
|
|
96
93
|
if wallet_type is not None:
|
|
@@ -135,21 +132,21 @@ class TestWalletRpcClient(TestRpcClient):
|
|
|
135
132
|
self.add_to_log("get_cat_name", (wallet_id,))
|
|
136
133
|
return "test" + str(wallet_id)
|
|
137
134
|
|
|
138
|
-
async def sign_message_by_address(self, address: str, message: str) ->
|
|
135
|
+
async def sign_message_by_address(self, address: str, message: str) -> tuple[str, str, str]:
|
|
139
136
|
self.add_to_log("sign_message_by_address", (address, message))
|
|
140
137
|
pubkey = bytes([3] * 48).hex()
|
|
141
138
|
signature = bytes([6] * 576).hex()
|
|
142
139
|
signing_mode = SigningMode.CHIP_0002.value
|
|
143
140
|
return pubkey, signature, signing_mode
|
|
144
141
|
|
|
145
|
-
async def sign_message_by_id(self, id: str, message: str) ->
|
|
142
|
+
async def sign_message_by_id(self, id: str, message: str) -> tuple[str, str, str]:
|
|
146
143
|
self.add_to_log("sign_message_by_id", (id, message))
|
|
147
144
|
pubkey = bytes([4] * 48).hex()
|
|
148
145
|
signature = bytes([7] * 576).hex()
|
|
149
146
|
signing_mode = SigningMode.CHIP_0002.value
|
|
150
147
|
return pubkey, signature, signing_mode
|
|
151
148
|
|
|
152
|
-
async def cat_asset_id_to_name(self, asset_id: bytes32) -> Optional[
|
|
149
|
+
async def cat_asset_id_to_name(self, asset_id: bytes32) -> Optional[tuple[Optional[uint32], str]]:
|
|
153
150
|
"""
|
|
154
151
|
if bytes32([1] * 32), return (uint32(2), "test1"), if bytes32([1] * 32), return (uint32(3), "test2")
|
|
155
152
|
"""
|
|
@@ -161,7 +158,7 @@ class TestWalletRpcClient(TestRpcClient):
|
|
|
161
158
|
else:
|
|
162
159
|
return None
|
|
163
160
|
|
|
164
|
-
async def get_nft_info(self, coin_id: str, latest: bool = True) ->
|
|
161
|
+
async def get_nft_info(self, coin_id: str, latest: bool = True) -> dict[str, Any]:
|
|
165
162
|
self.add_to_log("get_nft_info", (coin_id, latest))
|
|
166
163
|
coin_id_bytes = bytes32.fromhex(coin_id)
|
|
167
164
|
nft_info = NFTInfo(
|
|
@@ -190,9 +187,9 @@ class TestWalletRpcClient(TestRpcClient):
|
|
|
190
187
|
|
|
191
188
|
async def nft_calculate_royalties(
|
|
192
189
|
self,
|
|
193
|
-
royalty_assets_dict:
|
|
194
|
-
fungible_asset_dict:
|
|
195
|
-
) ->
|
|
190
|
+
royalty_assets_dict: dict[Any, tuple[Any, uint16]],
|
|
191
|
+
fungible_asset_dict: dict[Any, uint64],
|
|
192
|
+
) -> dict[Any, list[dict[str, Any]]]:
|
|
196
193
|
self.add_to_log("nft_calculate_royalties", (royalty_assets_dict, fungible_asset_dict))
|
|
197
194
|
return NFTWallet.royalty_calculation(
|
|
198
195
|
royalty_assets_dict=royalty_assets_dict,
|
|
@@ -203,7 +200,7 @@ class TestWalletRpcClient(TestRpcClient):
|
|
|
203
200
|
self,
|
|
204
201
|
wallet_id: int,
|
|
205
202
|
coin_selection_config: CoinSelectionConfig,
|
|
206
|
-
) ->
|
|
203
|
+
) -> tuple[list[CoinRecord], list[CoinRecord], list[Coin]]:
|
|
207
204
|
"""
|
|
208
205
|
We return a tuple containing: (confirmed records, unconfirmed removals, unconfirmed additions)
|
|
209
206
|
"""
|
|
@@ -250,9 +247,9 @@ class TestWalletRpcClient(TestRpcClient):
|
|
|
250
247
|
async def send_transaction_multi(
|
|
251
248
|
self,
|
|
252
249
|
wallet_id: int,
|
|
253
|
-
additions:
|
|
250
|
+
additions: list[dict[str, object]],
|
|
254
251
|
tx_config: TXConfig,
|
|
255
|
-
coins: Optional[
|
|
252
|
+
coins: Optional[list[Coin]] = None,
|
|
256
253
|
fee: uint64 = uint64(0),
|
|
257
254
|
push: bool = True,
|
|
258
255
|
timelock_info: ConditionValidTimes = ConditionValidTimes(),
|
|
@@ -287,17 +284,17 @@ class TestWalletRpcClient(TestRpcClient):
|
|
|
287
284
|
|
|
288
285
|
@dataclass
|
|
289
286
|
class TestFullNodeRpcClient(TestRpcClient):
|
|
290
|
-
client_type:
|
|
287
|
+
client_type: type[FullNodeRpcClient] = field(init=False, default=FullNodeRpcClient)
|
|
291
288
|
|
|
292
289
|
async def get_fee_estimate(
|
|
293
290
|
self,
|
|
294
|
-
target_times: Optional[
|
|
291
|
+
target_times: Optional[list[int]],
|
|
295
292
|
cost: Optional[int],
|
|
296
|
-
) ->
|
|
293
|
+
) -> dict[str, Any]:
|
|
297
294
|
return {}
|
|
298
295
|
|
|
299
|
-
async def get_blockchain_state(self) ->
|
|
300
|
-
response:
|
|
296
|
+
async def get_blockchain_state(self) -> dict[str, Any]:
|
|
297
|
+
response: dict[str, Any] = {
|
|
301
298
|
"peak": cast(BlockRecord, create_test_block_record()),
|
|
302
299
|
"genesis_challenge_initialized": True,
|
|
303
300
|
"sync": {
|
|
@@ -335,12 +332,12 @@ class TestFullNodeRpcClient(TestRpcClient):
|
|
|
335
332
|
|
|
336
333
|
@dataclass
|
|
337
334
|
class TestDataLayerRpcClient(TestRpcClient):
|
|
338
|
-
client_type:
|
|
335
|
+
client_type: type[DataLayerRpcClient] = field(init=False, default=DataLayerRpcClient)
|
|
339
336
|
|
|
340
337
|
|
|
341
338
|
@dataclass
|
|
342
339
|
class TestSimulatorFullNodeRpcClient(TestRpcClient):
|
|
343
|
-
client_type:
|
|
340
|
+
client_type: type[SimulatorFullNodeRpcClient] = field(init=False, default=SimulatorFullNodeRpcClient)
|
|
344
341
|
|
|
345
342
|
|
|
346
343
|
@dataclass
|
|
@@ -358,7 +355,7 @@ class TestRpcClients:
|
|
|
358
355
|
default_factory=TestSimulatorFullNodeRpcClient
|
|
359
356
|
)
|
|
360
357
|
|
|
361
|
-
def get_client(self, client_type:
|
|
358
|
+
def get_client(self, client_type: type[_T_RpcClient]) -> _T_RpcClient:
|
|
362
359
|
if client_type == FarmerRpcClient:
|
|
363
360
|
return cast(FarmerRpcClient, self.farmer_rpc_client) # type: ignore[return-value]
|
|
364
361
|
elif client_type == WalletRpcClient:
|
|
@@ -383,12 +380,12 @@ def create_service_and_wallet_client_generators(test_rpc_clients: TestRpcClients
|
|
|
383
380
|
|
|
384
381
|
@asynccontextmanager
|
|
385
382
|
async def test_get_any_service_client(
|
|
386
|
-
client_type:
|
|
383
|
+
client_type: type[_T_RpcClient],
|
|
384
|
+
root_path: Path,
|
|
387
385
|
rpc_port: Optional[int] = None,
|
|
388
|
-
root_path: Optional[Path] = None,
|
|
389
386
|
consume_errors: bool = True,
|
|
390
387
|
use_ssl: bool = True,
|
|
391
|
-
) -> AsyncIterator[
|
|
388
|
+
) -> AsyncIterator[tuple[_T_RpcClient, dict[str, Any]]]:
|
|
392
389
|
if root_path is None:
|
|
393
390
|
root_path = default_root
|
|
394
391
|
|
|
@@ -412,11 +409,11 @@ def create_service_and_wallet_client_generators(test_rpc_clients: TestRpcClients
|
|
|
412
409
|
|
|
413
410
|
@asynccontextmanager
|
|
414
411
|
async def test_get_wallet_client(
|
|
412
|
+
root_path: Path = default_root,
|
|
415
413
|
wallet_rpc_port: Optional[int] = None,
|
|
416
414
|
fingerprint: Optional[int] = None,
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
async with test_get_any_service_client(WalletRpcClient, wallet_rpc_port, root_path) as (wallet_client, config):
|
|
415
|
+
) -> AsyncIterator[tuple[WalletRpcClient, int, dict[str, Any]]]:
|
|
416
|
+
async with test_get_any_service_client(WalletRpcClient, root_path, wallet_rpc_port) as (wallet_client, config):
|
|
420
417
|
wallet_client.fingerprint = fingerprint # type: ignore
|
|
421
418
|
assert fingerprint is not None
|
|
422
419
|
yield wallet_client, fingerprint, config
|
|
@@ -434,7 +431,7 @@ def create_service_and_wallet_client_generators(test_rpc_clients: TestRpcClients
|
|
|
434
431
|
chia.cmds.wallet_funcs.cli_confirm = cli_confirm # type: ignore[attr-defined]
|
|
435
432
|
|
|
436
433
|
|
|
437
|
-
def run_cli_command(capsys: object, chia_root: Path, command_list:
|
|
434
|
+
def run_cli_command(capsys: object, chia_root: Path, command_list: list[str]) -> str:
|
|
438
435
|
"""
|
|
439
436
|
This is just an easy way to run the chia CLI with the given command list.
|
|
440
437
|
"""
|
|
@@ -442,8 +439,8 @@ def run_cli_command(capsys: object, chia_root: Path, command_list: List[str]) ->
|
|
|
442
439
|
exited_cleanly = True
|
|
443
440
|
argv_temp = sys.argv
|
|
444
441
|
try:
|
|
445
|
-
sys.argv = ["chia", "--root-path", str(chia_root)
|
|
446
|
-
chia_cli()
|
|
442
|
+
sys.argv = ["chia", "--root-path", str(chia_root), *command_list]
|
|
443
|
+
chia_cli()
|
|
447
444
|
except SystemExit as e:
|
|
448
445
|
if e.code != 0:
|
|
449
446
|
exited_cleanly = False
|
|
@@ -463,7 +460,7 @@ def cli_assert_shortcut(output: str, strings_to_assert: Iterable[str]) -> None:
|
|
|
463
460
|
|
|
464
461
|
|
|
465
462
|
def run_cli_command_and_assert(
|
|
466
|
-
capsys: object, chia_root: Path, command_list:
|
|
463
|
+
capsys: object, chia_root: Path, command_list: list[str], strings_to_assert: Iterable[str]
|
|
467
464
|
) -> None:
|
|
468
465
|
"""
|
|
469
466
|
Runs the command and asserts that all the strings in strings_to_assert are in the output
|
chia/_tests/cmds/conftest.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import tempfile
|
|
4
|
+
from collections.abc import Iterator
|
|
4
5
|
from pathlib import Path
|
|
5
|
-
from typing import Iterator, Tuple
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
8
|
|
|
@@ -11,7 +11,7 @@ from chia.util.config import create_default_chia_config
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
@pytest.fixture(scope="module") # every file has its own config generated, just to be safe
|
|
14
|
-
def get_test_cli_clients() -> Iterator[
|
|
14
|
+
def get_test_cli_clients() -> Iterator[tuple[TestRpcClients, Path]]:
|
|
15
15
|
# we cant use the normal config fixture because it only supports function scope.
|
|
16
16
|
with tempfile.TemporaryDirectory() as tmp_path:
|
|
17
17
|
root_path: Path = Path(tmp_path) / "chia_root"
|
|
@@ -2,11 +2,12 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from decimal import Decimal
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import Any, cast
|
|
6
5
|
|
|
6
|
+
import click
|
|
7
7
|
import pytest
|
|
8
|
-
from click import BadParameter
|
|
8
|
+
from click import BadParameter
|
|
9
9
|
|
|
10
|
+
from chia.cmds.cmd_classes import ChiaCliContext
|
|
10
11
|
from chia.cmds.param_types import (
|
|
11
12
|
AddressParamType,
|
|
12
13
|
AmountParamType,
|
|
@@ -37,11 +38,9 @@ overflow_decimal_str = "18446744.073709551616"
|
|
|
37
38
|
overflow_decimal = Decimal(overflow_decimal_str)
|
|
38
39
|
|
|
39
40
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def __init__(self, obj: dict[Any, Any]):
|
|
44
|
-
self.obj = obj
|
|
41
|
+
@click.command()
|
|
42
|
+
def a_command_for_testing() -> None:
|
|
43
|
+
pass # pragma: no cover
|
|
45
44
|
|
|
46
45
|
|
|
47
46
|
def test_click_tx_fee_type() -> None:
|
|
@@ -67,7 +66,7 @@ def test_click_tx_fee_type() -> None:
|
|
|
67
66
|
TransactionFeeParamType().convert(overflow_decimal_str, None, None)
|
|
68
67
|
# Test Type Failures
|
|
69
68
|
with pytest.raises(BadParameter):
|
|
70
|
-
TransactionFeeParamType().convert(
|
|
69
|
+
TransactionFeeParamType().convert(0.01, None, None)
|
|
71
70
|
|
|
72
71
|
|
|
73
72
|
def test_click_amount_type() -> None:
|
|
@@ -115,7 +114,11 @@ def test_click_amount_type() -> None:
|
|
|
115
114
|
|
|
116
115
|
|
|
117
116
|
def test_click_address_type() -> None:
|
|
118
|
-
context =
|
|
117
|
+
context = click.Context(command=a_command_for_testing)
|
|
118
|
+
chia_context = ChiaCliContext.set_default(context)
|
|
119
|
+
# this makes us not have to use a config file
|
|
120
|
+
chia_context.expected_prefix = "xch"
|
|
121
|
+
|
|
119
122
|
std_cli_address = CliAddress(burn_ph, burn_address, AddressType.XCH)
|
|
120
123
|
nft_cli_address = CliAddress(burn_ph, burn_nft_addr, AddressType.DID)
|
|
121
124
|
# Test CliAddress (Generally is not used)
|
|
@@ -133,13 +136,13 @@ def test_click_address_type() -> None:
|
|
|
133
136
|
# check error handling
|
|
134
137
|
with pytest.raises(BadParameter):
|
|
135
138
|
AddressParamType().convert("test", None, None)
|
|
136
|
-
with pytest.raises(
|
|
139
|
+
with pytest.raises(click.BadParameter):
|
|
137
140
|
AddressParamType().convert(burn_address_txch, None, context)
|
|
138
141
|
with pytest.raises(BadParameter):
|
|
139
142
|
AddressParamType().convert(burn_bad_prefix, None, None)
|
|
140
143
|
# Test Type Failures
|
|
141
144
|
with pytest.raises(BadParameter):
|
|
142
|
-
AddressParamType().convert(
|
|
145
|
+
AddressParamType().convert(0.01, None, None)
|
|
143
146
|
|
|
144
147
|
# check class error handling
|
|
145
148
|
with pytest.raises(ValueError):
|
|
@@ -149,13 +152,15 @@ def test_click_address_type() -> None:
|
|
|
149
152
|
|
|
150
153
|
|
|
151
154
|
def test_click_address_type_config(root_path_populated_with_config: Path) -> None:
|
|
155
|
+
context = click.Context(command=a_command_for_testing)
|
|
156
|
+
chia_context = ChiaCliContext.set_default(context)
|
|
152
157
|
# set a root path in context.
|
|
153
|
-
|
|
158
|
+
chia_context.root_path = root_path_populated_with_config
|
|
154
159
|
# run test that should pass
|
|
155
160
|
assert AddressParamType().convert(burn_address, None, context) == CliAddress(burn_ph, burn_address, AddressType.XCH)
|
|
156
|
-
assert context.
|
|
161
|
+
assert ChiaCliContext.set_default(context).expected_prefix == "xch" # validate that the prefix was set correctly
|
|
157
162
|
# use txch address
|
|
158
|
-
with pytest.raises(
|
|
163
|
+
with pytest.raises(click.BadParameter):
|
|
159
164
|
AddressParamType().convert(burn_address_txch, None, context)
|
|
160
165
|
|
|
161
166
|
|
|
@@ -170,7 +175,7 @@ def test_click_bytes32_type() -> None:
|
|
|
170
175
|
Bytes32ParamType().convert("test", None, None)
|
|
171
176
|
# Test Type Failures
|
|
172
177
|
with pytest.raises(BadParameter):
|
|
173
|
-
Bytes32ParamType().convert(
|
|
178
|
+
Bytes32ParamType().convert(0.01, None, None)
|
|
174
179
|
|
|
175
180
|
|
|
176
181
|
def test_click_uint64_type() -> None:
|
|
@@ -192,4 +197,4 @@ def test_click_uint64_type() -> None:
|
|
|
192
197
|
Uint64ParamType().convert(str(overflow_ammt), None, None)
|
|
193
198
|
# Test Type Failures
|
|
194
199
|
with pytest.raises(BadParameter):
|
|
195
|
-
Uint64ParamType().convert(
|
|
200
|
+
Uint64ParamType().convert(0.01, None, None)
|