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
chia/cmds/beta.py
CHANGED
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import zipfile
|
|
4
4
|
from datetime import datetime
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import Optional
|
|
7
7
|
|
|
8
8
|
import click
|
|
9
9
|
|
|
@@ -19,6 +19,7 @@ from chia.cmds.beta_funcs import (
|
|
|
19
19
|
validate_beta_path,
|
|
20
20
|
validate_metrics_log_interval,
|
|
21
21
|
)
|
|
22
|
+
from chia.cmds.cmd_classes import ChiaCliContext
|
|
22
23
|
from chia.util.beta_metrics import metrics_log_interval_default
|
|
23
24
|
from chia.util.config import lock_and_load_config, save_config
|
|
24
25
|
|
|
@@ -37,7 +38,7 @@ def beta_cmd() -> None:
|
|
|
37
38
|
@click.option("-i", "--interval", help="System metrics will be logged based on this interval", type=int, required=False)
|
|
38
39
|
@click.pass_context
|
|
39
40
|
def configure(ctx: click.Context, path: Optional[str], interval: Optional[int]) -> None:
|
|
40
|
-
root_path = ctx.
|
|
41
|
+
root_path = ChiaCliContext.set_default(ctx).root_path
|
|
41
42
|
with lock_and_load_config(root_path, "config.yaml") as config:
|
|
42
43
|
if "beta" not in config:
|
|
43
44
|
raise click.ClickException("beta test mode is not enabled, enable it first with `chia beta enable`")
|
|
@@ -79,7 +80,7 @@ def configure(ctx: click.Context, path: Optional[str], interval: Optional[int])
|
|
|
79
80
|
@click.option("-p", "--path", help="The beta mode root path", type=str, required=False)
|
|
80
81
|
@click.pass_context
|
|
81
82
|
def enable_cmd(ctx: click.Context, force: bool, path: Optional[str]) -> None:
|
|
82
|
-
root_path = ctx.
|
|
83
|
+
root_path = ChiaCliContext.set_default(ctx).root_path
|
|
83
84
|
with lock_and_load_config(root_path, "config.yaml") as config:
|
|
84
85
|
if config.get("beta", {}).get("enabled", False):
|
|
85
86
|
raise click.ClickException("beta test mode is already enabled")
|
|
@@ -107,7 +108,7 @@ def enable_cmd(ctx: click.Context, force: bool, path: Optional[str]) -> None:
|
|
|
107
108
|
@beta_cmd.command("disable", help="Disable beta test mode")
|
|
108
109
|
@click.pass_context
|
|
109
110
|
def disable_cmd(ctx: click.Context) -> None:
|
|
110
|
-
root_path = ctx.
|
|
111
|
+
root_path = ChiaCliContext.set_default(ctx).root_path
|
|
111
112
|
with lock_and_load_config(root_path, "config.yaml") as config:
|
|
112
113
|
if not config.get("beta", {}).get("enabled", False):
|
|
113
114
|
raise click.ClickException("beta test mode is not enabled")
|
|
@@ -121,7 +122,7 @@ def disable_cmd(ctx: click.Context) -> None:
|
|
|
121
122
|
@beta_cmd.command("prepare_submission", help="Prepare the collected log data for submission")
|
|
122
123
|
@click.pass_context
|
|
123
124
|
def prepare_submission_cmd(ctx: click.Context) -> None:
|
|
124
|
-
with lock_and_load_config(ctx.
|
|
125
|
+
with lock_and_load_config(ChiaCliContext.set_default(ctx).root_path, "config.yaml") as config:
|
|
125
126
|
beta_root_path = config.get("beta", {}).get("path", None)
|
|
126
127
|
if beta_root_path is None:
|
|
127
128
|
raise click.ClickException("beta test mode not enabled. Run `chia beta enable` first.")
|
|
@@ -150,7 +151,7 @@ def prepare_submission_cmd(ctx: click.Context) -> None:
|
|
|
150
151
|
prepare_result / f"submission_{prepare_result.name}__{datetime.now().strftime('%m_%d_%Y__%H_%M_%S')}.zip"
|
|
151
152
|
)
|
|
152
153
|
|
|
153
|
-
def add_files(paths:
|
|
154
|
+
def add_files(paths: list[Path]) -> int:
|
|
154
155
|
added = 0
|
|
155
156
|
for path in paths:
|
|
156
157
|
if path.name.startswith("."):
|
|
@@ -173,7 +174,7 @@ def prepare_submission_cmd(ctx: click.Context) -> None:
|
|
|
173
174
|
@beta_cmd.command("status", help="Show the current beta configuration")
|
|
174
175
|
@click.pass_context
|
|
175
176
|
def status(ctx: click.Context) -> None:
|
|
176
|
-
with lock_and_load_config(ctx.
|
|
177
|
+
with lock_and_load_config(ChiaCliContext.set_default(ctx).root_path, "config.yaml") as config:
|
|
177
178
|
beta_config = config.get("beta")
|
|
178
179
|
if beta_config is None:
|
|
179
180
|
raise click.ClickException("beta test mode is not enabled, enable it first with `chia beta enable`")
|
chia/cmds/beta_funcs.py
CHANGED
|
@@ -3,9 +3,11 @@ from __future__ import annotations
|
|
|
3
3
|
import os
|
|
4
4
|
import sys
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Any, Callable,
|
|
6
|
+
from typing import Any, Callable, Optional
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
import click
|
|
9
|
+
|
|
10
|
+
from chia.cmds.cmds_util import format_bytes, validate_directory_writable
|
|
9
11
|
from chia.util.beta_metrics import metrics_log_interval_max, metrics_log_interval_min
|
|
10
12
|
from chia.util.chia_logging import get_beta_logging_config
|
|
11
13
|
from chia.util.errors import InvalidPathError
|
|
@@ -15,7 +17,7 @@ def default_beta_root_path() -> Path:
|
|
|
15
17
|
return Path(os.path.expanduser(os.getenv("CHIA_BETA_ROOT", "~/chia-beta-test"))).resolve()
|
|
16
18
|
|
|
17
19
|
|
|
18
|
-
def warn_if_beta_enabled(config:
|
|
20
|
+
def warn_if_beta_enabled(config: dict[str, Any]) -> None:
|
|
19
21
|
if config.get("beta", {}).get("enabled", False):
|
|
20
22
|
print("\nWARNING: beta test mode is enabled. Run `chia beta disable` if this is unintentional.\n")
|
|
21
23
|
|
|
@@ -25,11 +27,12 @@ def prompt_beta_warning() -> bool:
|
|
|
25
27
|
# The `/ 5` is just a rough estimation for `gzip` being used by the log rotation in beta mode. It was like
|
|
26
28
|
# 7-10x compressed in example tests with 2MB files.
|
|
27
29
|
min_space = format_bytes(int(logging_config["log_maxfilesrotation"] * logging_config["log_maxbytesrotation"] / 5))
|
|
28
|
-
|
|
30
|
+
message = (
|
|
29
31
|
f"\nWARNING: Enabling the beta test mode increases disk writes and may lead to {min_space} of "
|
|
30
32
|
"extra logfiles getting stored on your disk. This should only be done if you are part of the beta test "
|
|
31
33
|
"program.\n\nDo you really want to enable the beta test mode?"
|
|
32
34
|
)
|
|
35
|
+
return click.confirm(message, default=None)
|
|
33
36
|
|
|
34
37
|
|
|
35
38
|
def prompt_for_beta_path(default_path: Path) -> Path:
|
|
@@ -37,11 +40,12 @@ def prompt_for_beta_path(default_path: Path) -> Path:
|
|
|
37
40
|
for _ in range(3):
|
|
38
41
|
user_input = input(
|
|
39
42
|
"\nEnter a directory where the beta test logs can be stored or press enter to use the default "
|
|
40
|
-
f"[{
|
|
43
|
+
f"[{default_path!s}]:"
|
|
41
44
|
)
|
|
42
45
|
test_path = Path(user_input) if user_input else default_path
|
|
43
|
-
if not test_path.is_dir() and
|
|
44
|
-
f"\nDirectory {str(test_path)!r} doesn't exist.\n\nDo you want to create it?"
|
|
46
|
+
if not test_path.is_dir() and click.confirm(
|
|
47
|
+
f"\nDirectory {str(test_path)!r} doesn't exist.\n\nDo you want to create it?",
|
|
48
|
+
default=None,
|
|
45
49
|
):
|
|
46
50
|
test_path.mkdir(parents=True)
|
|
47
51
|
|
|
@@ -65,7 +69,7 @@ def prompt_for_metrics_log_interval(default_interval: int) -> int:
|
|
|
65
69
|
for _ in range(3):
|
|
66
70
|
user_input = input(
|
|
67
71
|
"\nEnter a number of seconds as interval in which analytics getting logged, press enter to use the default "
|
|
68
|
-
f"[{
|
|
72
|
+
f"[{default_interval!s}]:"
|
|
69
73
|
)
|
|
70
74
|
test_interval = int(user_input) if user_input else default_interval
|
|
71
75
|
|
|
@@ -84,7 +88,7 @@ def prompt_for_metrics_log_interval(default_interval: int) -> int:
|
|
|
84
88
|
return interval
|
|
85
89
|
|
|
86
90
|
|
|
87
|
-
def update_beta_config(enabled: bool, path: Path, metrics_log_interval: int, config:
|
|
91
|
+
def update_beta_config(enabled: bool, path: Path, metrics_log_interval: int, config: dict[str, Any]) -> None:
|
|
88
92
|
if "beta" not in config:
|
|
89
93
|
config["beta"] = {}
|
|
90
94
|
|
|
@@ -121,9 +125,9 @@ def prepare_chia_blockchain_log(path: Path) -> None:
|
|
|
121
125
|
print(f" - {path.name}")
|
|
122
126
|
|
|
123
127
|
|
|
124
|
-
def prepare_logs(prepare_path: Path, prepare_callback: Callable[[Path], None]) ->
|
|
128
|
+
def prepare_logs(prepare_path: Path, prepare_callback: Callable[[Path], None]) -> list[Path]:
|
|
125
129
|
result = [path for path in prepare_path.iterdir()] if prepare_path.exists() else []
|
|
126
|
-
if len(result):
|
|
130
|
+
if len(result) > 0:
|
|
127
131
|
print(f"\nPreparing {prepare_path.name!r} logs:")
|
|
128
132
|
for log in result:
|
|
129
133
|
if log.name.startswith("."):
|
chia/cmds/check_wallet_db.py
CHANGED
|
@@ -3,14 +3,15 @@ from __future__ import annotations
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import sys
|
|
5
5
|
from collections import defaultdict
|
|
6
|
+
from collections.abc import Iterable
|
|
6
7
|
from pathlib import Path
|
|
7
8
|
from sqlite3 import Row
|
|
8
|
-
from typing import Any,
|
|
9
|
+
from typing import Any, Optional
|
|
9
10
|
|
|
10
11
|
from chia.util.collection import find_duplicates
|
|
11
12
|
from chia.util.db_synchronous import db_synchronous_on
|
|
12
13
|
from chia.util.db_wrapper import DBWrapper2, execute_fetchone
|
|
13
|
-
from chia.util.pprint import print_compact_ranges
|
|
14
|
+
from chia.wallet.util.pprint import print_compact_ranges
|
|
14
15
|
from chia.wallet.util.wallet_types import WalletType
|
|
15
16
|
|
|
16
17
|
# TODO: Check for missing paired wallets (eg. No DID wallet for an NFT)
|
|
@@ -48,18 +49,18 @@ def _validate_args_addresses_used(wallet_id: int, last_index: int, last_hardened
|
|
|
48
49
|
raise ValueError(f"Invalid argument: noncontiguous derivation_index at {last_index} wallet_id={wallet_id}")
|
|
49
50
|
|
|
50
51
|
|
|
51
|
-
def check_addresses_used_contiguous(derivation_paths:
|
|
52
|
+
def check_addresses_used_contiguous(derivation_paths: list[DerivationPath]) -> list[str]:
|
|
52
53
|
"""
|
|
53
54
|
The used column for addresses in the derivation_paths table should be a
|
|
54
55
|
zero or greater run of 1's, followed by a zero or greater run of 0's.
|
|
55
56
|
There should be no used derivations after seeing a used derivation.
|
|
56
57
|
"""
|
|
57
|
-
errors:
|
|
58
|
+
errors: list[str] = []
|
|
58
59
|
|
|
59
60
|
for wallet_id, dps in dp_by_wallet_id(derivation_paths).items():
|
|
60
61
|
saw_unused = False
|
|
61
|
-
bad_used_values:
|
|
62
|
-
ordering_errors:
|
|
62
|
+
bad_used_values: set[int] = set()
|
|
63
|
+
ordering_errors: list[str] = []
|
|
63
64
|
# last_index = None
|
|
64
65
|
# last_hardened = None
|
|
65
66
|
for dp in dps:
|
|
@@ -89,7 +90,7 @@ def check_addresses_used_contiguous(derivation_paths: List[DerivationPath]) -> L
|
|
|
89
90
|
return errors
|
|
90
91
|
|
|
91
92
|
|
|
92
|
-
def check_for_gaps(array:
|
|
93
|
+
def check_for_gaps(array: list[int], start: int, end: int, *, data_type_plural: str = "Elements") -> list[str]:
|
|
93
94
|
"""
|
|
94
95
|
Check for compact sequence:
|
|
95
96
|
Check that every value from start to end is present in array, and no more.
|
|
@@ -100,7 +101,7 @@ def check_for_gaps(array: List[int], start: int, end: int, *, data_type_plural:
|
|
|
100
101
|
|
|
101
102
|
if start > end:
|
|
102
103
|
raise ValueError(f"{__name__} called with incorrect arguments: start={start} end={end} (start > end)")
|
|
103
|
-
errors:
|
|
104
|
+
errors: list[str] = []
|
|
104
105
|
|
|
105
106
|
if start == end and len(array) == 1:
|
|
106
107
|
return errors
|
|
@@ -123,7 +124,7 @@ def check_for_gaps(array: List[int], start: int, end: int, *, data_type_plural:
|
|
|
123
124
|
|
|
124
125
|
|
|
125
126
|
class FromDB:
|
|
126
|
-
def __init__(self, row: Iterable[Any], fields:
|
|
127
|
+
def __init__(self, row: Iterable[Any], fields: list[str]) -> None:
|
|
127
128
|
self.fields = fields
|
|
128
129
|
for field, value in zip(fields, row):
|
|
129
130
|
setattr(self, field, value)
|
|
@@ -144,7 +145,7 @@ def wallet_type_name(
|
|
|
144
145
|
return f"INVALID_WALLET_TYPE ({wallet_type})"
|
|
145
146
|
|
|
146
147
|
|
|
147
|
-
def _cwr(row: Row) ->
|
|
148
|
+
def _cwr(row: Row) -> list[Any]:
|
|
148
149
|
r = []
|
|
149
150
|
for i, v in enumerate(row):
|
|
150
151
|
if i == 2:
|
|
@@ -175,7 +176,7 @@ class Wallet(FromDB):
|
|
|
175
176
|
data: str
|
|
176
177
|
|
|
177
178
|
|
|
178
|
-
def dp_by_wallet_id(derivation_paths:
|
|
179
|
+
def dp_by_wallet_id(derivation_paths: list[DerivationPath]) -> dict[int, list[DerivationPath]]:
|
|
179
180
|
d = defaultdict(list)
|
|
180
181
|
for derivation_path in derivation_paths:
|
|
181
182
|
d[derivation_path.wallet_id].append(derivation_path)
|
|
@@ -184,7 +185,7 @@ def dp_by_wallet_id(derivation_paths: List[DerivationPath]) -> Dict[int, List[De
|
|
|
184
185
|
return d
|
|
185
186
|
|
|
186
187
|
|
|
187
|
-
def derivation_indices_by_wallet_id(derivation_paths:
|
|
188
|
+
def derivation_indices_by_wallet_id(derivation_paths: list[DerivationPath]) -> dict[int, list[int]]:
|
|
188
189
|
d = dp_by_wallet_id(derivation_paths)
|
|
189
190
|
di = {}
|
|
190
191
|
for k, v in d.items():
|
|
@@ -192,7 +193,7 @@ def derivation_indices_by_wallet_id(derivation_paths: List[DerivationPath]) -> D
|
|
|
192
193
|
return di
|
|
193
194
|
|
|
194
195
|
|
|
195
|
-
def print_min_max_derivation_for_wallets(derivation_paths:
|
|
196
|
+
def print_min_max_derivation_for_wallets(derivation_paths: list[DerivationPath]) -> None:
|
|
196
197
|
d = derivation_indices_by_wallet_id(derivation_paths)
|
|
197
198
|
print("Min, Max, Count of derivations for each wallet:")
|
|
198
199
|
for wallet_id, derivation_index_list in d.items():
|
|
@@ -205,11 +206,12 @@ def print_min_max_derivation_for_wallets(derivation_paths: List[DerivationPath])
|
|
|
205
206
|
|
|
206
207
|
class WalletDBReader:
|
|
207
208
|
db_wrapper: DBWrapper2 # TODO: Remove db_wrapper member
|
|
208
|
-
|
|
209
|
+
# TODO: make this a dataclass and make this an instance attribute instead of a mutable classvar
|
|
210
|
+
config = {"db_readers": 1} # noqa: RUF012
|
|
209
211
|
sql_log_path: Optional[Path] = None
|
|
210
212
|
verbose = False
|
|
211
213
|
|
|
212
|
-
async def get_all_wallets(self) ->
|
|
214
|
+
async def get_all_wallets(self) -> list[Wallet]:
|
|
213
215
|
wallet_fields = ["id", "name", "wallet_type", "data"]
|
|
214
216
|
async with self.db_wrapper.reader_no_transaction() as reader:
|
|
215
217
|
# TODO: if table doesn't exist
|
|
@@ -217,7 +219,7 @@ class WalletDBReader:
|
|
|
217
219
|
rows = await cursor.fetchall()
|
|
218
220
|
return [Wallet(r, wallet_fields) for r in rows]
|
|
219
221
|
|
|
220
|
-
async def get_derivation_paths(self) ->
|
|
222
|
+
async def get_derivation_paths(self) -> list[DerivationPath]:
|
|
221
223
|
fields = ["derivation_index", "pubkey", "puzzle_hash", "wallet_type", "wallet_id", "used", "hardened"]
|
|
222
224
|
async with self.db_wrapper.reader_no_transaction() as reader:
|
|
223
225
|
# TODO: if table doesn't exist
|
|
@@ -225,7 +227,7 @@ class WalletDBReader:
|
|
|
225
227
|
rows = await cursor.fetchall()
|
|
226
228
|
return [DerivationPath(row, fields) for row in rows]
|
|
227
229
|
|
|
228
|
-
async def show_tables(self) ->
|
|
230
|
+
async def show_tables(self) -> list[str]:
|
|
229
231
|
async with self.db_wrapper.reader_no_transaction() as reader:
|
|
230
232
|
cursor = await reader.execute("""SELECT name FROM sqlite_master WHERE type='table';""")
|
|
231
233
|
print("\nWallet DB Tables:")
|
|
@@ -237,7 +239,7 @@ class WalletDBReader:
|
|
|
237
239
|
print()
|
|
238
240
|
return []
|
|
239
241
|
|
|
240
|
-
async def check_wallets(self) ->
|
|
242
|
+
async def check_wallets(self) -> list[str]:
|
|
241
243
|
# id, name, wallet_type, data
|
|
242
244
|
# TODO: Move this SQL up a level
|
|
243
245
|
async with self.db_wrapper.reader_no_transaction() as reader:
|
|
@@ -282,8 +284,8 @@ class WalletDBReader:
|
|
|
282
284
|
return errors
|
|
283
285
|
|
|
284
286
|
def check_wallets_missing_derivations(
|
|
285
|
-
self, wallets:
|
|
286
|
-
) ->
|
|
287
|
+
self, wallets: list[Wallet], derivation_paths: list[DerivationPath]
|
|
288
|
+
) -> list[str]:
|
|
287
289
|
p = []
|
|
288
290
|
d = derivation_indices_by_wallet_id(derivation_paths) # TODO: calc this once, pass in
|
|
289
291
|
for w in wallets:
|
|
@@ -293,7 +295,7 @@ class WalletDBReader:
|
|
|
293
295
|
return [f"Wallet IDs with no derivations that require them: {p}"]
|
|
294
296
|
return []
|
|
295
297
|
|
|
296
|
-
def check_derivations_are_compact(self, wallets:
|
|
298
|
+
def check_derivations_are_compact(self, wallets: list[Wallet], derivation_paths: list[DerivationPath]) -> list[str]:
|
|
297
299
|
errors = []
|
|
298
300
|
"""
|
|
299
301
|
Gaps in derivation index
|
|
@@ -318,8 +320,8 @@ class WalletDBReader:
|
|
|
318
320
|
return errors
|
|
319
321
|
|
|
320
322
|
def check_unexpected_derivation_entries(
|
|
321
|
-
self, wallets:
|
|
322
|
-
) ->
|
|
323
|
+
self, wallets: list[Wallet], derivation_paths: list[DerivationPath]
|
|
324
|
+
) -> list[str]:
|
|
323
325
|
"""
|
|
324
326
|
Check for unexpected derivation path entries
|
|
325
327
|
|
|
@@ -340,7 +342,7 @@ class WalletDBReader:
|
|
|
340
342
|
if d.wallet_id not in wallet_id_to_type:
|
|
341
343
|
missing_wallet_ids.append(d.wallet_id)
|
|
342
344
|
elif d.wallet_type != wallet_id_to_type[d.wallet_id]:
|
|
343
|
-
wrong_type[
|
|
345
|
+
wrong_type[d.hardened, d.wallet_id, d.wallet_type, wallet_id_to_type[d.wallet_id]].append(
|
|
344
346
|
d.derivation_index
|
|
345
347
|
)
|
|
346
348
|
|
|
@@ -395,9 +397,9 @@ class WalletDBReader:
|
|
|
395
397
|
return len(errors)
|
|
396
398
|
|
|
397
399
|
|
|
398
|
-
async def scan(root_path:
|
|
400
|
+
async def scan(root_path: Path, db_path: Optional[str] = None, *, verbose: bool = False) -> None:
|
|
399
401
|
if db_path is None:
|
|
400
|
-
wallet_db_path =
|
|
402
|
+
wallet_db_path = root_path / "wallet" / "db"
|
|
401
403
|
wallet_db_paths = list(wallet_db_path.glob("blockchain_wallet_*.sqlite"))
|
|
402
404
|
else:
|
|
403
405
|
wallet_db_paths = [Path(db_path)]
|
|
@@ -415,4 +417,4 @@ async def scan(root_path: str, db_path: Optional[str] = None, *, verbose: bool =
|
|
|
415
417
|
|
|
416
418
|
if __name__ == "__main__":
|
|
417
419
|
loop = asyncio.get_event_loop()
|
|
418
|
-
loop.run_until_complete(scan(
|
|
420
|
+
loop.run_until_complete(scan(Path(), sys.argv[1]))
|
chia/cmds/chia.py
CHANGED
|
@@ -7,6 +7,7 @@ import click
|
|
|
7
7
|
|
|
8
8
|
from chia import __version__
|
|
9
9
|
from chia.cmds.beta import beta_cmd
|
|
10
|
+
from chia.cmds.cmd_classes import ChiaCliContext
|
|
10
11
|
from chia.cmds.completion import completion
|
|
11
12
|
from chia.cmds.configure import configure_cmd
|
|
12
13
|
from chia.cmds.dao import dao_cmd
|
|
@@ -27,12 +28,15 @@ from chia.cmds.show import show_cmd
|
|
|
27
28
|
from chia.cmds.start import start_cmd
|
|
28
29
|
from chia.cmds.stop import stop_cmd
|
|
29
30
|
from chia.cmds.wallet import wallet_cmd
|
|
30
|
-
from chia.util.default_root import DEFAULT_KEYS_ROOT_PATH,
|
|
31
|
+
from chia.util.default_root import DEFAULT_KEYS_ROOT_PATH, resolve_root_path
|
|
31
32
|
from chia.util.errors import KeychainCurrentPassphraseIsInvalid
|
|
32
33
|
from chia.util.keychain import Keychain, set_keys_root_path
|
|
33
34
|
from chia.util.ssl_check import check_ssl
|
|
34
35
|
|
|
35
|
-
CONTEXT_SETTINGS =
|
|
36
|
+
CONTEXT_SETTINGS = {
|
|
37
|
+
"help_option_names": ["-h", "--help"],
|
|
38
|
+
"show_default": True,
|
|
39
|
+
}
|
|
36
40
|
|
|
37
41
|
|
|
38
42
|
@click.group(
|
|
@@ -40,7 +44,13 @@ CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"])
|
|
|
40
44
|
epilog="Try 'chia start node', 'chia netspace -d 192', or 'chia show -s'",
|
|
41
45
|
context_settings=CONTEXT_SETTINGS,
|
|
42
46
|
)
|
|
43
|
-
@click.option(
|
|
47
|
+
@click.option(
|
|
48
|
+
"--root-path",
|
|
49
|
+
default=resolve_root_path(override=None),
|
|
50
|
+
help="Config file root",
|
|
51
|
+
type=click.Path(),
|
|
52
|
+
show_default=True,
|
|
53
|
+
)
|
|
44
54
|
@click.option(
|
|
45
55
|
"--keys-root-path", default=DEFAULT_KEYS_ROOT_PATH, help="Keyring file root", type=click.Path(), show_default=True
|
|
46
56
|
)
|
|
@@ -54,8 +64,8 @@ def cli(
|
|
|
54
64
|
) -> None:
|
|
55
65
|
from pathlib import Path
|
|
56
66
|
|
|
57
|
-
|
|
58
|
-
|
|
67
|
+
context = ChiaCliContext.set_default(ctx=ctx)
|
|
68
|
+
context.root_path = Path(root_path)
|
|
59
69
|
|
|
60
70
|
# keys_root_path and passphrase_file will be None if the passphrase options have been
|
|
61
71
|
# scrubbed from the CLI options
|
|
@@ -107,7 +117,7 @@ def run_daemon_cmd(ctx: click.Context, wait_for_unlock: bool) -> None:
|
|
|
107
117
|
|
|
108
118
|
wait_for_unlock = wait_for_unlock and Keychain.is_keyring_locked()
|
|
109
119
|
|
|
110
|
-
asyncio.run(async_run_daemon(ctx.
|
|
120
|
+
asyncio.run(async_run_daemon(ChiaCliContext.set_default(ctx).root_path, wait_for_unlock=wait_for_unlock))
|
|
111
121
|
|
|
112
122
|
|
|
113
123
|
cli.add_command(keys_cmd)
|
|
@@ -134,9 +144,7 @@ cli.add_command(dev_cmd)
|
|
|
134
144
|
|
|
135
145
|
|
|
136
146
|
def main() -> None:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
cli() # pylint: disable=no-value-for-parameter
|
|
147
|
+
cli()
|
|
140
148
|
|
|
141
149
|
|
|
142
150
|
if __name__ == "__main__":
|