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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Any
|
|
3
|
+
from typing import Any
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
6
|
|
|
@@ -8,19 +8,19 @@ from chia.wallet.util.address_type import AddressType, ensure_valid_address, is_
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
@pytest.mark.parametrize("prefix", [None])
|
|
11
|
-
def test_xch_hrp_for_default_config(config_with_address_prefix:
|
|
11
|
+
def test_xch_hrp_for_default_config(config_with_address_prefix: dict[str, Any]) -> None:
|
|
12
12
|
config = config_with_address_prefix
|
|
13
13
|
assert AddressType.XCH.hrp(config) == "xch"
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
@pytest.mark.parametrize("prefix", ["txch"])
|
|
17
|
-
def test_txch_hrp_for_testnet(config_with_address_prefix:
|
|
17
|
+
def test_txch_hrp_for_testnet(config_with_address_prefix: dict[str, Any]) -> None:
|
|
18
18
|
config = config_with_address_prefix
|
|
19
19
|
assert AddressType.XCH.hrp(config) == "txch"
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
@pytest.mark.parametrize("prefix", [None])
|
|
23
|
-
def test_is_valid_address_xch(config_with_address_prefix:
|
|
23
|
+
def test_is_valid_address_xch(config_with_address_prefix: dict[str, Any]) -> None:
|
|
24
24
|
config = config_with_address_prefix
|
|
25
25
|
valid = is_valid_address(
|
|
26
26
|
"xch1mnr0ygu7lvmk3nfgzmncfk39fwu0dv933yrcv97nd6pmrt7fzmhs8taffd", allowed_types={AddressType.XCH}, config=config
|
|
@@ -29,7 +29,7 @@ def test_is_valid_address_xch(config_with_address_prefix: Dict[str, Any]) -> Non
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
@pytest.mark.parametrize("prefix", ["txch"])
|
|
32
|
-
def test_is_valid_address_txch(config_with_address_prefix:
|
|
32
|
+
def test_is_valid_address_txch(config_with_address_prefix: dict[str, Any]) -> None:
|
|
33
33
|
config = config_with_address_prefix
|
|
34
34
|
# TXCH address validation requires a config
|
|
35
35
|
valid = is_valid_address(
|
|
@@ -41,7 +41,7 @@ def test_is_valid_address_txch(config_with_address_prefix: Dict[str, Any]) -> No
|
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
@pytest.mark.parametrize("prefix", [None])
|
|
44
|
-
def test_is_valid_address_xch_bad_address(config_with_address_prefix:
|
|
44
|
+
def test_is_valid_address_xch_bad_address(config_with_address_prefix: dict[str, Any]) -> None:
|
|
45
45
|
config = config_with_address_prefix
|
|
46
46
|
valid = is_valid_address(
|
|
47
47
|
"xch1mnr0ygu7lvmk3nfgzmncfk39fwu0dv933yrcv97nd6pmrt7fzmhs8xxxxx", allowed_types={AddressType.XCH}, config=config
|
|
@@ -50,7 +50,7 @@ def test_is_valid_address_xch_bad_address(config_with_address_prefix: Dict[str,
|
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
@pytest.mark.parametrize("prefix", [None])
|
|
53
|
-
def test_is_valid_address_nft(config_with_address_prefix:
|
|
53
|
+
def test_is_valid_address_nft(config_with_address_prefix: dict[str, Any]) -> None:
|
|
54
54
|
config = config_with_address_prefix
|
|
55
55
|
valid = is_valid_address(
|
|
56
56
|
"nft1mx2nkvml2eekjtqwdmxvmf3js8g083hpszzhkhtwvhcss8efqzhqtza773", allowed_types={AddressType.NFT}, config=config
|
|
@@ -59,7 +59,7 @@ def test_is_valid_address_nft(config_with_address_prefix: Dict[str, Any]) -> Non
|
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
@pytest.mark.parametrize("prefix", ["txch"])
|
|
62
|
-
def test_is_valid_address_nft_with_testnet(config_with_address_prefix:
|
|
62
|
+
def test_is_valid_address_nft_with_testnet(config_with_address_prefix: dict[str, Any]) -> None:
|
|
63
63
|
config = config_with_address_prefix
|
|
64
64
|
valid = is_valid_address(
|
|
65
65
|
"nft1mx2nkvml2eekjtqwdmxvmf3js8g083hpszzhkhtwvhcss8efqzhqtza773", allowed_types={AddressType.NFT}, config=config
|
|
@@ -68,7 +68,7 @@ def test_is_valid_address_nft_with_testnet(config_with_address_prefix: Dict[str,
|
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
@pytest.mark.parametrize("prefix", [None])
|
|
71
|
-
def test_is_valid_address_nft_bad_address(config_with_address_prefix:
|
|
71
|
+
def test_is_valid_address_nft_bad_address(config_with_address_prefix: dict[str, Any]) -> None:
|
|
72
72
|
config = config_with_address_prefix
|
|
73
73
|
valid = is_valid_address(
|
|
74
74
|
"nft1mx2nkvml2eekjtqwdmxvmf3js8g083hpszzhkhtwvhcss8efqzhqtxxxxx", allowed_types={AddressType.NFT}, config=config
|
|
@@ -77,7 +77,7 @@ def test_is_valid_address_nft_bad_address(config_with_address_prefix: Dict[str,
|
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
@pytest.mark.parametrize("prefix", [None])
|
|
80
|
-
def test_is_valid_address_did(config_with_address_prefix:
|
|
80
|
+
def test_is_valid_address_did(config_with_address_prefix: dict[str, Any]) -> None:
|
|
81
81
|
config = config_with_address_prefix
|
|
82
82
|
valid = is_valid_address(
|
|
83
83
|
"did:chia:14jxdtqcyp3gk8ka0678eq8mmtnktgpmp2vuqq3vtsl2e5qr7fyrsr9gsr7",
|
|
@@ -88,7 +88,7 @@ def test_is_valid_address_did(config_with_address_prefix: Dict[str, Any]) -> Non
|
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
@pytest.mark.parametrize("prefix", ["txch"])
|
|
91
|
-
def test_is_valid_address_did_with_testnet(config_with_address_prefix:
|
|
91
|
+
def test_is_valid_address_did_with_testnet(config_with_address_prefix: dict[str, Any]) -> None:
|
|
92
92
|
config = config_with_address_prefix
|
|
93
93
|
valid = is_valid_address(
|
|
94
94
|
"did:chia:14jxdtqcyp3gk8ka0678eq8mmtnktgpmp2vuqq3vtsl2e5qr7fyrsr9gsr7",
|
|
@@ -99,7 +99,7 @@ def test_is_valid_address_did_with_testnet(config_with_address_prefix: Dict[str,
|
|
|
99
99
|
|
|
100
100
|
|
|
101
101
|
@pytest.mark.parametrize("prefix", [None])
|
|
102
|
-
def test_is_valid_address_did_bad_address(config_with_address_prefix:
|
|
102
|
+
def test_is_valid_address_did_bad_address(config_with_address_prefix: dict[str, Any]) -> None:
|
|
103
103
|
config = config_with_address_prefix
|
|
104
104
|
valid = is_valid_address(
|
|
105
105
|
"did:chia:14jxdtqcyp3gk8ka0678eq8mmtnktgpmp2vuqq3vtsl2e5qr7fyrsrxxxxx",
|
|
@@ -110,7 +110,7 @@ def test_is_valid_address_did_bad_address(config_with_address_prefix: Dict[str,
|
|
|
110
110
|
|
|
111
111
|
|
|
112
112
|
@pytest.mark.parametrize("prefix", [None])
|
|
113
|
-
def test_ensure_valid_address_xch(config_with_address_prefix:
|
|
113
|
+
def test_ensure_valid_address_xch(config_with_address_prefix: dict[str, Any]) -> None:
|
|
114
114
|
config = config_with_address_prefix
|
|
115
115
|
address = ensure_valid_address(
|
|
116
116
|
"xch1mnr0ygu7lvmk3nfgzmncfk39fwu0dv933yrcv97nd6pmrt7fzmhs8taffd", allowed_types={AddressType.XCH}, config=config
|
|
@@ -119,7 +119,7 @@ def test_ensure_valid_address_xch(config_with_address_prefix: Dict[str, Any]) ->
|
|
|
119
119
|
|
|
120
120
|
|
|
121
121
|
@pytest.mark.parametrize("prefix", ["txch"])
|
|
122
|
-
def test_ensure_valid_address_txch(config_with_address_prefix:
|
|
122
|
+
def test_ensure_valid_address_txch(config_with_address_prefix: dict[str, Any]) -> None:
|
|
123
123
|
config = config_with_address_prefix
|
|
124
124
|
address = ensure_valid_address(
|
|
125
125
|
"txch1mnr0ygu7lvmk3nfgzmncfk39fwu0dv933yrcv97nd6pmrt7fzmhs2v6lg7",
|
|
@@ -130,7 +130,7 @@ def test_ensure_valid_address_txch(config_with_address_prefix: Dict[str, Any]) -
|
|
|
130
130
|
|
|
131
131
|
|
|
132
132
|
@pytest.mark.parametrize("prefix", [None])
|
|
133
|
-
def test_ensure_valid_address_xch_bad_address(config_with_address_prefix:
|
|
133
|
+
def test_ensure_valid_address_xch_bad_address(config_with_address_prefix: dict[str, Any]) -> None:
|
|
134
134
|
config = config_with_address_prefix
|
|
135
135
|
with pytest.raises(ValueError):
|
|
136
136
|
ensure_valid_address(
|
|
@@ -141,7 +141,7 @@ def test_ensure_valid_address_xch_bad_address(config_with_address_prefix: Dict[s
|
|
|
141
141
|
|
|
142
142
|
|
|
143
143
|
@pytest.mark.parametrize("prefix", [None])
|
|
144
|
-
def test_ensure_valid_address_nft(config_with_address_prefix:
|
|
144
|
+
def test_ensure_valid_address_nft(config_with_address_prefix: dict[str, Any]) -> None:
|
|
145
145
|
config = config_with_address_prefix
|
|
146
146
|
address = ensure_valid_address(
|
|
147
147
|
"nft1mx2nkvml2eekjtqwdmxvmf3js8g083hpszzhkhtwvhcss8efqzhqtza773", allowed_types={AddressType.NFT}, config=config
|
|
@@ -150,7 +150,7 @@ def test_ensure_valid_address_nft(config_with_address_prefix: Dict[str, Any]) ->
|
|
|
150
150
|
|
|
151
151
|
|
|
152
152
|
@pytest.mark.parametrize("prefix", [None])
|
|
153
|
-
def test_ensure_valid_address_nft_bad_address(config_with_address_prefix:
|
|
153
|
+
def test_ensure_valid_address_nft_bad_address(config_with_address_prefix: dict[str, Any]) -> None:
|
|
154
154
|
config = config_with_address_prefix
|
|
155
155
|
with pytest.raises(ValueError):
|
|
156
156
|
ensure_valid_address(
|
|
@@ -161,7 +161,7 @@ def test_ensure_valid_address_nft_bad_address(config_with_address_prefix: Dict[s
|
|
|
161
161
|
|
|
162
162
|
|
|
163
163
|
@pytest.mark.parametrize("prefix", [None])
|
|
164
|
-
def test_ensure_valid_address_did(config_with_address_prefix:
|
|
164
|
+
def test_ensure_valid_address_did(config_with_address_prefix: dict[str, Any]) -> None:
|
|
165
165
|
config = config_with_address_prefix
|
|
166
166
|
address = ensure_valid_address(
|
|
167
167
|
"did:chia:14jxdtqcyp3gk8ka0678eq8mmtnktgpmp2vuqq3vtsl2e5qr7fyrsr9gsr7",
|
|
@@ -172,7 +172,7 @@ def test_ensure_valid_address_did(config_with_address_prefix: Dict[str, Any]) ->
|
|
|
172
172
|
|
|
173
173
|
|
|
174
174
|
@pytest.mark.parametrize("prefix", [None])
|
|
175
|
-
def test_ensure_valid_address_did_bad_address(config_with_address_prefix:
|
|
175
|
+
def test_ensure_valid_address_did_bad_address(config_with_address_prefix: dict[str, Any]) -> None:
|
|
176
176
|
config = config_with_address_prefix
|
|
177
177
|
with pytest.raises(ValueError):
|
|
178
178
|
ensure_valid_address(
|
|
@@ -183,7 +183,7 @@ def test_ensure_valid_address_did_bad_address(config_with_address_prefix: Dict[s
|
|
|
183
183
|
|
|
184
184
|
|
|
185
185
|
@pytest.mark.parametrize("prefix", [None])
|
|
186
|
-
def test_ensure_valid_address_bad_length(config_with_address_prefix:
|
|
186
|
+
def test_ensure_valid_address_bad_length(config_with_address_prefix: dict[str, Any]) -> None:
|
|
187
187
|
config = config_with_address_prefix
|
|
188
188
|
with pytest.raises(ValueError):
|
|
189
189
|
ensure_valid_address("xch1qqqqqqqqqqqqqqqqwygzk5", allowed_types={AddressType.XCH}, config=config)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
|
-
from typing import
|
|
4
|
+
from typing import Optional
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
7
|
|
|
@@ -78,14 +78,14 @@ def test_nested_serialization() -> None:
|
|
|
78
78
|
@dataclasses.dataclass(frozen=True)
|
|
79
79
|
class Compound(Streamable):
|
|
80
80
|
optional: Optional[BasicCLVMStreamable]
|
|
81
|
-
list:
|
|
81
|
+
list: list[BasicCLVMStreamable]
|
|
82
82
|
|
|
83
83
|
|
|
84
84
|
@clvm_streamable
|
|
85
85
|
@dataclasses.dataclass(frozen=True)
|
|
86
86
|
class CompoundCLVM(Streamable):
|
|
87
87
|
optional: Optional[BasicCLVMStreamable]
|
|
88
|
-
list:
|
|
88
|
+
list: list[BasicCLVMStreamable]
|
|
89
89
|
|
|
90
90
|
|
|
91
91
|
def test_compound_type_serialization() -> None:
|
|
@@ -153,7 +153,7 @@ def test_compound_type_serialization() -> None:
|
|
|
153
153
|
@clvm_streamable
|
|
154
154
|
@dataclasses.dataclass(frozen=True)
|
|
155
155
|
class DoesntWork(Streamable):
|
|
156
|
-
tuples_are_not_supported:
|
|
156
|
+
tuples_are_not_supported: tuple[str]
|
|
157
157
|
|
|
158
158
|
|
|
159
159
|
@clvm_streamable
|
|
@@ -190,7 +190,7 @@ def test_translation_layer() -> None:
|
|
|
190
190
|
]
|
|
191
191
|
)
|
|
192
192
|
|
|
193
|
-
coin = Coin(bytes32
|
|
193
|
+
coin = Coin(bytes32.zeros, bytes32.zeros, uint64(0))
|
|
194
194
|
spend = Spend(
|
|
195
195
|
coin,
|
|
196
196
|
Program.to("puzzle"),
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import io
|
|
4
|
+
import textwrap
|
|
5
|
+
from dataclasses import dataclass, replace
|
|
6
|
+
from decimal import Decimal
|
|
7
|
+
from typing import Any
|
|
8
|
+
from unittest.mock import patch
|
|
9
|
+
|
|
10
|
+
import pytest
|
|
11
|
+
|
|
12
|
+
from chia._tests.cmds.test_cmd_framework import check_click_parsing
|
|
13
|
+
from chia._tests.environments.wallet import STANDARD_TX_ENDPOINT_ARGS, WalletStateTransition, WalletTestFramework
|
|
14
|
+
from chia.cmds.cmd_helpers import NeedsCoinSelectionConfig, NeedsWalletRPC, WalletClientInfo
|
|
15
|
+
from chia.cmds.coins import CombineCMD, ListCMD, SplitCMD
|
|
16
|
+
from chia.cmds.param_types import CliAmount, cli_amount_none
|
|
17
|
+
from chia.rpc.wallet_request_types import GetSyncStatusResponse
|
|
18
|
+
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
19
|
+
from chia.util.ints import uint64
|
|
20
|
+
from chia.wallet.cat_wallet.cat_wallet import CATWallet
|
|
21
|
+
|
|
22
|
+
ONE_TRILLION = 1_000_000_000_000
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclass
|
|
26
|
+
class ValueAndArgs:
|
|
27
|
+
value: Any
|
|
28
|
+
args: list[str]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@pytest.mark.parametrize(
|
|
32
|
+
"id",
|
|
33
|
+
[ValueAndArgs(1, []), ValueAndArgs(123, ["--id", "123"])],
|
|
34
|
+
)
|
|
35
|
+
@pytest.mark.parametrize(
|
|
36
|
+
"show_unconfirmed",
|
|
37
|
+
[ValueAndArgs(False, []), ValueAndArgs(True, ["--show-unconfirmed"])],
|
|
38
|
+
)
|
|
39
|
+
@pytest.mark.parametrize(
|
|
40
|
+
"paginate",
|
|
41
|
+
[ValueAndArgs(None, []), ValueAndArgs(True, ["--paginate"]), ValueAndArgs(False, ["--no-paginate"])],
|
|
42
|
+
)
|
|
43
|
+
def test_list_parsing(id: ValueAndArgs, show_unconfirmed: ValueAndArgs, paginate: ValueAndArgs) -> None:
|
|
44
|
+
check_click_parsing(
|
|
45
|
+
ListCMD(
|
|
46
|
+
rpc_info=NeedsWalletRPC(client_info=None, wallet_rpc_port=None, fingerprint=None),
|
|
47
|
+
coin_selection_config=NeedsCoinSelectionConfig(
|
|
48
|
+
min_coin_amount=cli_amount_none,
|
|
49
|
+
max_coin_amount=cli_amount_none,
|
|
50
|
+
coins_to_exclude=(),
|
|
51
|
+
amounts_to_exclude=(),
|
|
52
|
+
),
|
|
53
|
+
id=id.value,
|
|
54
|
+
show_unconfirmed=show_unconfirmed.value,
|
|
55
|
+
paginate=paginate.value,
|
|
56
|
+
),
|
|
57
|
+
*id.args,
|
|
58
|
+
*show_unconfirmed.args,
|
|
59
|
+
*paginate.args,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@pytest.mark.parametrize(
|
|
64
|
+
"wallet_environments",
|
|
65
|
+
[
|
|
66
|
+
{
|
|
67
|
+
"num_environments": 1,
|
|
68
|
+
"blocks_needed": [3], # 6 coins to test pagination
|
|
69
|
+
"reuse_puzhash": True, # irrelevent
|
|
70
|
+
"trusted": True, # irrelevent
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
indirect=True,
|
|
74
|
+
)
|
|
75
|
+
@pytest.mark.limit_consensus_modes(reason="irrelevant")
|
|
76
|
+
@pytest.mark.anyio
|
|
77
|
+
async def test_list(wallet_environments: WalletTestFramework, capsys: pytest.CaptureFixture[str]) -> None:
|
|
78
|
+
env = wallet_environments.environments[0]
|
|
79
|
+
env.wallet_aliases = {
|
|
80
|
+
"xch": 1,
|
|
81
|
+
"cat": 2,
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
client_info = WalletClientInfo(
|
|
85
|
+
env.rpc_client,
|
|
86
|
+
env.wallet_state_manager.root_pubkey.get_fingerprint(),
|
|
87
|
+
env.wallet_state_manager.config,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
wallet_coins = [cr.coin for cr in (await env.wallet_state_manager.coin_store.get_coin_records()).records]
|
|
91
|
+
|
|
92
|
+
base_command = ListCMD(
|
|
93
|
+
rpc_info=NeedsWalletRPC(client_info=client_info),
|
|
94
|
+
coin_selection_config=NeedsCoinSelectionConfig(
|
|
95
|
+
min_coin_amount=cli_amount_none,
|
|
96
|
+
max_coin_amount=cli_amount_none,
|
|
97
|
+
coins_to_exclude=(),
|
|
98
|
+
amounts_to_exclude=(),
|
|
99
|
+
),
|
|
100
|
+
id=env.wallet_aliases["xch"],
|
|
101
|
+
show_unconfirmed=True,
|
|
102
|
+
paginate=None,
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
# Test an error real quick
|
|
106
|
+
await replace(base_command, id=50).run()
|
|
107
|
+
output = (capsys.readouterr()).out
|
|
108
|
+
assert "Wallet id: 50 not found" in output
|
|
109
|
+
|
|
110
|
+
await base_command.run()
|
|
111
|
+
|
|
112
|
+
output = capsys.readouterr().out
|
|
113
|
+
assert (
|
|
114
|
+
textwrap.dedent(
|
|
115
|
+
f"""\
|
|
116
|
+
There are a total of {len(wallet_coins)} coins in wallet {env.wallet_aliases['xch']}.
|
|
117
|
+
{len(wallet_coins)} confirmed coins.
|
|
118
|
+
0 unconfirmed additions.
|
|
119
|
+
0 unconfirmed removals.
|
|
120
|
+
Confirmed coins:
|
|
121
|
+
"""
|
|
122
|
+
)
|
|
123
|
+
in output
|
|
124
|
+
)
|
|
125
|
+
for coin in wallet_coins:
|
|
126
|
+
assert coin.name().hex() in output
|
|
127
|
+
assert str(coin.amount) in output # make sure we're always showing mojos as that's the only source of truth
|
|
128
|
+
|
|
129
|
+
# Test pagination
|
|
130
|
+
with patch("sys.stdin", new=io.StringIO("c\n")):
|
|
131
|
+
await replace(base_command, paginate=True).run()
|
|
132
|
+
|
|
133
|
+
output = capsys.readouterr().out
|
|
134
|
+
assert (
|
|
135
|
+
textwrap.dedent(
|
|
136
|
+
f"""\
|
|
137
|
+
There are a total of {len(wallet_coins)} coins in wallet {env.wallet_aliases['xch']}.
|
|
138
|
+
{len(wallet_coins)} confirmed coins.
|
|
139
|
+
0 unconfirmed additions.
|
|
140
|
+
0 unconfirmed removals.
|
|
141
|
+
Confirmed coins:
|
|
142
|
+
"""
|
|
143
|
+
)
|
|
144
|
+
in output
|
|
145
|
+
)
|
|
146
|
+
for coin in wallet_coins:
|
|
147
|
+
assert coin.name().hex() in output
|
|
148
|
+
|
|
149
|
+
with patch("sys.stdin", new=io.StringIO("q\n")):
|
|
150
|
+
await replace(base_command, paginate=True).run()
|
|
151
|
+
|
|
152
|
+
output = capsys.readouterr().out
|
|
153
|
+
assert (
|
|
154
|
+
textwrap.dedent(
|
|
155
|
+
f"""\
|
|
156
|
+
There are a total of {len(wallet_coins)} coins in wallet {env.wallet_aliases['xch']}.
|
|
157
|
+
{len(wallet_coins)} confirmed coins.
|
|
158
|
+
0 unconfirmed additions.
|
|
159
|
+
0 unconfirmed removals.
|
|
160
|
+
Confirmed coins:
|
|
161
|
+
"""
|
|
162
|
+
)
|
|
163
|
+
in output
|
|
164
|
+
)
|
|
165
|
+
count = 0
|
|
166
|
+
for coin in wallet_coins:
|
|
167
|
+
count += 1 if coin.name().hex() in output else 0
|
|
168
|
+
assert count == 5
|
|
169
|
+
|
|
170
|
+
# Create a cat wallet
|
|
171
|
+
CAT_AMOUNT = uint64(50)
|
|
172
|
+
async with env.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
173
|
+
await CATWallet.create_new_cat_wallet(
|
|
174
|
+
env.wallet_state_manager,
|
|
175
|
+
env.xch_wallet,
|
|
176
|
+
{"identifier": "genesis_by_id"},
|
|
177
|
+
CAT_AMOUNT,
|
|
178
|
+
action_scope,
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
# Test showing unconfirmed
|
|
182
|
+
# Currently:
|
|
183
|
+
# - 1 XCH coin is pending
|
|
184
|
+
# - 1 change will be created
|
|
185
|
+
# - 1 CAT ephemeral coin happened (1 removal & 1 addition)
|
|
186
|
+
# - 1 CAT coin is waiting to be created
|
|
187
|
+
coin_used_in_tx = next(
|
|
188
|
+
c for tx in action_scope.side_effects.transactions for c in tx.removals if c.amount != CAT_AMOUNT
|
|
189
|
+
)
|
|
190
|
+
change_coin = next(
|
|
191
|
+
c for tx in action_scope.side_effects.transactions for c in tx.additions if c.amount != CAT_AMOUNT
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
await replace(base_command, show_unconfirmed=True).run()
|
|
195
|
+
|
|
196
|
+
output = capsys.readouterr().out
|
|
197
|
+
assert (
|
|
198
|
+
textwrap.dedent(
|
|
199
|
+
f"""\
|
|
200
|
+
There are a total of {len(wallet_coins)} coins in wallet {env.wallet_aliases['xch']}.
|
|
201
|
+
{len(wallet_coins) - 1} confirmed coins.
|
|
202
|
+
1 unconfirmed additions.
|
|
203
|
+
1 unconfirmed removals.
|
|
204
|
+
Confirmed coins:
|
|
205
|
+
"""
|
|
206
|
+
)
|
|
207
|
+
in output
|
|
208
|
+
)
|
|
209
|
+
assert coin_used_in_tx.name().hex() in output
|
|
210
|
+
assert change_coin.name().hex() in output
|
|
211
|
+
|
|
212
|
+
await wallet_environments.process_pending_states(
|
|
213
|
+
[
|
|
214
|
+
WalletStateTransition(
|
|
215
|
+
# no need to test this, it is tested elsewhere
|
|
216
|
+
pre_block_balance_updates={
|
|
217
|
+
"xch": {"set_remainder": True},
|
|
218
|
+
"cat": {"init": True, "set_remainder": True},
|
|
219
|
+
},
|
|
220
|
+
post_block_balance_updates={
|
|
221
|
+
"xch": {"set_remainder": True},
|
|
222
|
+
"cat": {"set_remainder": True},
|
|
223
|
+
},
|
|
224
|
+
)
|
|
225
|
+
]
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
# Test CAT display
|
|
229
|
+
all_removals = {c for tx in action_scope.side_effects.transactions for c in tx.removals}
|
|
230
|
+
cat_coin = next(
|
|
231
|
+
c
|
|
232
|
+
for tx in action_scope.side_effects.transactions
|
|
233
|
+
for c in tx.additions
|
|
234
|
+
if c.amount == CAT_AMOUNT and c not in all_removals
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
await replace(base_command, id=env.wallet_aliases["cat"]).run()
|
|
238
|
+
|
|
239
|
+
output = capsys.readouterr().out
|
|
240
|
+
assert (
|
|
241
|
+
textwrap.dedent(
|
|
242
|
+
f"""\
|
|
243
|
+
There are a total of 1 coins in wallet {env.wallet_aliases['cat']}.
|
|
244
|
+
1 confirmed coins.
|
|
245
|
+
0 unconfirmed additions.
|
|
246
|
+
0 unconfirmed removals.
|
|
247
|
+
Confirmed coins:
|
|
248
|
+
"""
|
|
249
|
+
)
|
|
250
|
+
in output
|
|
251
|
+
)
|
|
252
|
+
assert cat_coin.name().hex() in output
|
|
253
|
+
assert str(CAT_AMOUNT) in output
|
|
254
|
+
|
|
255
|
+
# Test a not synced error
|
|
256
|
+
assert base_command.rpc_info.client_info is not None
|
|
257
|
+
|
|
258
|
+
async def not_synced() -> GetSyncStatusResponse:
|
|
259
|
+
return GetSyncStatusResponse(False, False)
|
|
260
|
+
|
|
261
|
+
base_command.rpc_info.client_info.client.get_sync_status = not_synced # type: ignore[method-assign]
|
|
262
|
+
await base_command.run()
|
|
263
|
+
output = (capsys.readouterr()).out
|
|
264
|
+
assert "Wallet not synced. Please wait." in output
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
@pytest.mark.parametrize(
|
|
268
|
+
"id",
|
|
269
|
+
[ValueAndArgs(1, []), ValueAndArgs(123, ["--id", "123"])],
|
|
270
|
+
)
|
|
271
|
+
@pytest.mark.parametrize(
|
|
272
|
+
"target_amount",
|
|
273
|
+
[ValueAndArgs(None, []), ValueAndArgs(CliAmount(amount=Decimal("0.01"), mojos=False), ["--target-amount", "0.01"])],
|
|
274
|
+
)
|
|
275
|
+
@pytest.mark.parametrize(
|
|
276
|
+
"number_of_coins",
|
|
277
|
+
[ValueAndArgs(500, []), ValueAndArgs(1, ["--number-of-coins", "1"])],
|
|
278
|
+
)
|
|
279
|
+
@pytest.mark.parametrize(
|
|
280
|
+
"input_coins",
|
|
281
|
+
[
|
|
282
|
+
ValueAndArgs((), []),
|
|
283
|
+
ValueAndArgs((bytes32([0] * 32),), ["--input-coin", bytes32([0] * 32).hex()]),
|
|
284
|
+
ValueAndArgs(
|
|
285
|
+
(bytes32([0] * 32), bytes32([1] * 32)),
|
|
286
|
+
["--input-coin", bytes32([0] * 32).hex(), "--input-coin", bytes32([1] * 32).hex()],
|
|
287
|
+
),
|
|
288
|
+
],
|
|
289
|
+
)
|
|
290
|
+
@pytest.mark.parametrize(
|
|
291
|
+
"largest_first",
|
|
292
|
+
[ValueAndArgs(False, []), ValueAndArgs(True, ["--largest-first"])],
|
|
293
|
+
)
|
|
294
|
+
def test_combine_parsing(
|
|
295
|
+
id: ValueAndArgs,
|
|
296
|
+
target_amount: ValueAndArgs,
|
|
297
|
+
number_of_coins: ValueAndArgs,
|
|
298
|
+
input_coins: ValueAndArgs,
|
|
299
|
+
largest_first: ValueAndArgs,
|
|
300
|
+
) -> None:
|
|
301
|
+
check_click_parsing(
|
|
302
|
+
CombineCMD(
|
|
303
|
+
**STANDARD_TX_ENDPOINT_ARGS,
|
|
304
|
+
id=id.value,
|
|
305
|
+
target_amount=target_amount.value,
|
|
306
|
+
number_of_coins=number_of_coins.value,
|
|
307
|
+
input_coins=input_coins.value,
|
|
308
|
+
largest_first=largest_first.value,
|
|
309
|
+
),
|
|
310
|
+
*id.args,
|
|
311
|
+
*target_amount.args,
|
|
312
|
+
*number_of_coins.args,
|
|
313
|
+
*input_coins.args,
|
|
314
|
+
*largest_first.args,
|
|
315
|
+
)
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
@pytest.mark.parametrize(
|
|
319
|
+
"id",
|
|
320
|
+
[ValueAndArgs(1, []), ValueAndArgs(123, ["--id", "123"])],
|
|
321
|
+
)
|
|
322
|
+
@pytest.mark.parametrize(
|
|
323
|
+
"number_of_coins",
|
|
324
|
+
[ValueAndArgs(1, ["--number-of-coins", "1"])],
|
|
325
|
+
)
|
|
326
|
+
@pytest.mark.parametrize(
|
|
327
|
+
"amount_per_coin",
|
|
328
|
+
[ValueAndArgs(CliAmount(amount=Decimal("0.01"), mojos=False), ["--amount-per-coin", "0.01"])],
|
|
329
|
+
)
|
|
330
|
+
@pytest.mark.parametrize(
|
|
331
|
+
"target_coin_id",
|
|
332
|
+
[
|
|
333
|
+
ValueAndArgs(bytes32([0] * 32), ["--target-coin-id", bytes32([0] * 32).hex()]),
|
|
334
|
+
],
|
|
335
|
+
)
|
|
336
|
+
def test_split_parsing(
|
|
337
|
+
id: ValueAndArgs,
|
|
338
|
+
number_of_coins: ValueAndArgs,
|
|
339
|
+
amount_per_coin: ValueAndArgs,
|
|
340
|
+
target_coin_id: ValueAndArgs,
|
|
341
|
+
) -> None:
|
|
342
|
+
check_click_parsing(
|
|
343
|
+
SplitCMD(
|
|
344
|
+
**STANDARD_TX_ENDPOINT_ARGS,
|
|
345
|
+
id=id.value,
|
|
346
|
+
number_of_coins=number_of_coins.value,
|
|
347
|
+
amount_per_coin=amount_per_coin.value,
|
|
348
|
+
target_coin_id=target_coin_id.value,
|
|
349
|
+
),
|
|
350
|
+
*id.args,
|
|
351
|
+
*number_of_coins.args,
|
|
352
|
+
*amount_per_coin.args,
|
|
353
|
+
*target_coin_id.args,
|
|
354
|
+
)
|