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/daemon/client.py
CHANGED
|
@@ -3,14 +3,16 @@ from __future__ import annotations
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import json
|
|
5
5
|
import ssl
|
|
6
|
+
from collections.abc import AsyncIterator
|
|
6
7
|
from contextlib import asynccontextmanager
|
|
7
8
|
from pathlib import Path
|
|
8
|
-
from typing import Any,
|
|
9
|
+
from typing import Any, Optional
|
|
9
10
|
|
|
10
11
|
import aiohttp
|
|
11
12
|
|
|
12
13
|
from chia.util.ints import uint32
|
|
13
14
|
from chia.util.json_util import dict_to_json_str
|
|
15
|
+
from chia.util.task_referencer import create_referenced_task
|
|
14
16
|
from chia.util.ws_message import WsRpcMessage, create_payload_dict
|
|
15
17
|
|
|
16
18
|
|
|
@@ -23,32 +25,42 @@ class DaemonProxy:
|
|
|
23
25
|
max_message_size: int = 50 * 1000 * 1000,
|
|
24
26
|
):
|
|
25
27
|
self._uri = uri
|
|
26
|
-
self._request_dict:
|
|
27
|
-
self.response_dict:
|
|
28
|
+
self._request_dict: dict[str, asyncio.Event] = {}
|
|
29
|
+
self.response_dict: dict[str, WsRpcMessage] = {}
|
|
28
30
|
self.ssl_context = ssl_context
|
|
29
31
|
self.heartbeat = heartbeat
|
|
30
32
|
self.client_session: Optional[aiohttp.ClientSession] = None
|
|
31
33
|
self.websocket: Optional[aiohttp.ClientWebSocketResponse] = None
|
|
32
34
|
self.max_message_size = max_message_size
|
|
33
35
|
|
|
34
|
-
def format_request(self, command: str, data:
|
|
36
|
+
def format_request(self, command: str, data: dict[str, Any]) -> WsRpcMessage:
|
|
35
37
|
request = create_payload_dict(command, data, "client", "daemon")
|
|
36
38
|
return request
|
|
37
39
|
|
|
38
|
-
async def start(self) -> None:
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
40
|
+
async def start(self, wait_for_start: bool = False) -> None:
|
|
41
|
+
self.client_session = aiohttp.ClientSession()
|
|
42
|
+
|
|
43
|
+
connect_backoff = 2
|
|
44
|
+
while (self.websocket is None or self.websocket.closed) and connect_backoff <= 60:
|
|
45
|
+
try:
|
|
46
|
+
self.websocket = await self.client_session.ws_connect(
|
|
47
|
+
self._uri,
|
|
48
|
+
autoclose=True,
|
|
49
|
+
autoping=True,
|
|
50
|
+
heartbeat=self.heartbeat,
|
|
51
|
+
ssl=self.ssl_context if self.ssl_context is not None else True,
|
|
52
|
+
max_msg_size=self.max_message_size,
|
|
53
|
+
)
|
|
54
|
+
break
|
|
55
|
+
except aiohttp.ClientError:
|
|
56
|
+
if not wait_for_start:
|
|
57
|
+
break
|
|
58
|
+
await asyncio.sleep(connect_backoff)
|
|
59
|
+
connect_backoff *= 2
|
|
60
|
+
|
|
61
|
+
if self.websocket is None or self.websocket.closed:
|
|
50
62
|
await self.close()
|
|
51
|
-
raise
|
|
63
|
+
raise Exception("Failed to connect to daemon")
|
|
52
64
|
|
|
53
65
|
async def listener_task() -> None:
|
|
54
66
|
try:
|
|
@@ -56,7 +68,7 @@ class DaemonProxy:
|
|
|
56
68
|
finally:
|
|
57
69
|
await self.close()
|
|
58
70
|
|
|
59
|
-
|
|
71
|
+
create_referenced_task(listener_task(), known_unreferenced=True)
|
|
60
72
|
await asyncio.sleep(1)
|
|
61
73
|
|
|
62
74
|
async def listener(self) -> None:
|
|
@@ -80,7 +92,7 @@ class DaemonProxy:
|
|
|
80
92
|
string = dict_to_json_str(request)
|
|
81
93
|
if self.websocket is None or self.websocket.closed:
|
|
82
94
|
raise Exception("Websocket is not connected")
|
|
83
|
-
|
|
95
|
+
create_referenced_task(self.websocket.send_str(string), known_unreferenced=True)
|
|
84
96
|
try:
|
|
85
97
|
await asyncio.wait_for(self._request_dict[request_id].wait(), timeout=30)
|
|
86
98
|
self._request_dict.pop(request_id)
|
|
@@ -92,13 +104,13 @@ class DaemonProxy:
|
|
|
92
104
|
raise Exception(f"No response from daemon for request_id: {request_id}")
|
|
93
105
|
|
|
94
106
|
async def get_version(self) -> WsRpcMessage:
|
|
95
|
-
data:
|
|
107
|
+
data: dict[str, Any] = {}
|
|
96
108
|
request = self.format_request("get_version", data)
|
|
97
109
|
response = await self._get(request)
|
|
98
110
|
return response
|
|
99
111
|
|
|
100
112
|
async def get_network_info(self) -> WsRpcMessage:
|
|
101
|
-
data:
|
|
113
|
+
data: dict[str, Any] = {}
|
|
102
114
|
request = self.format_request("get_network_info", data)
|
|
103
115
|
response = await self._get(request)
|
|
104
116
|
return response
|
|
@@ -124,7 +136,7 @@ class DaemonProxy:
|
|
|
124
136
|
return False
|
|
125
137
|
|
|
126
138
|
async def is_keyring_locked(self) -> bool:
|
|
127
|
-
data:
|
|
139
|
+
data: dict[str, Any] = {}
|
|
128
140
|
request = self.format_request("is_keyring_locked", data)
|
|
129
141
|
response = await self._get(request)
|
|
130
142
|
if "is_keyring_locked" in response["data"]:
|
|
@@ -152,7 +164,7 @@ class DaemonProxy:
|
|
|
152
164
|
request = self.format_request("exit", {})
|
|
153
165
|
return await self._get(request)
|
|
154
166
|
|
|
155
|
-
async def get_keys_for_plotting(self, fingerprints: Optional[
|
|
167
|
+
async def get_keys_for_plotting(self, fingerprints: Optional[list[uint32]] = None) -> WsRpcMessage:
|
|
156
168
|
data = {"fingerprints": fingerprints} if fingerprints else {}
|
|
157
169
|
request = self.format_request("get_keys_for_plotting", data)
|
|
158
170
|
response = await self._get(request)
|
|
@@ -160,7 +172,12 @@ class DaemonProxy:
|
|
|
160
172
|
|
|
161
173
|
|
|
162
174
|
async def connect_to_daemon(
|
|
163
|
-
self_hostname: str,
|
|
175
|
+
self_hostname: str,
|
|
176
|
+
daemon_port: int,
|
|
177
|
+
max_message_size: int,
|
|
178
|
+
ssl_context: ssl.SSLContext,
|
|
179
|
+
heartbeat: int,
|
|
180
|
+
wait_for_start: bool = False,
|
|
164
181
|
) -> DaemonProxy:
|
|
165
182
|
"""
|
|
166
183
|
Connect to the local daemon.
|
|
@@ -172,12 +189,13 @@ async def connect_to_daemon(
|
|
|
172
189
|
max_message_size=max_message_size,
|
|
173
190
|
heartbeat=heartbeat,
|
|
174
191
|
)
|
|
175
|
-
|
|
192
|
+
|
|
193
|
+
await client.start(wait_for_start=wait_for_start)
|
|
176
194
|
return client
|
|
177
195
|
|
|
178
196
|
|
|
179
197
|
async def connect_to_daemon_and_validate(
|
|
180
|
-
root_path: Path, config:
|
|
198
|
+
root_path: Path, config: dict[str, Any], quiet: bool = False, wait_for_start: bool = False
|
|
181
199
|
) -> Optional[DaemonProxy]:
|
|
182
200
|
"""
|
|
183
201
|
Connect to the local daemon and do a ping to ensure that something is really
|
|
@@ -199,6 +217,7 @@ async def connect_to_daemon_and_validate(
|
|
|
199
217
|
max_message_size=daemon_max_message_size,
|
|
200
218
|
ssl_context=ssl_context,
|
|
201
219
|
heartbeat=daemon_heartbeat,
|
|
220
|
+
wait_for_start=wait_for_start,
|
|
202
221
|
)
|
|
203
222
|
r = await connection.ping()
|
|
204
223
|
|
|
@@ -213,7 +232,7 @@ async def connect_to_daemon_and_validate(
|
|
|
213
232
|
|
|
214
233
|
@asynccontextmanager
|
|
215
234
|
async def acquire_connection_to_daemon(
|
|
216
|
-
root_path: Path, config:
|
|
235
|
+
root_path: Path, config: dict[str, Any], quiet: bool = False
|
|
217
236
|
) -> AsyncIterator[Optional[DaemonProxy]]:
|
|
218
237
|
"""
|
|
219
238
|
Asynchronous context manager which attempts to create a connection to the daemon.
|
chia/daemon/keychain_proxy.py
CHANGED
|
@@ -5,7 +5,7 @@ import logging
|
|
|
5
5
|
import ssl
|
|
6
6
|
import traceback
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import Any,
|
|
8
|
+
from typing import Any, Literal, Optional, Union, overload
|
|
9
9
|
|
|
10
10
|
from aiohttp import ClientConnectorError, ClientSession
|
|
11
11
|
from chia_rs import AugSchemeMPL, G1Element, PrivateKey
|
|
@@ -31,6 +31,7 @@ from chia.util.errors import (
|
|
|
31
31
|
KeychainProxyConnectionTimeout,
|
|
32
32
|
)
|
|
33
33
|
from chia.util.keychain import Keychain, KeyData, bytes_to_mnemonic, mnemonic_to_seed
|
|
34
|
+
from chia.util.task_referencer import create_referenced_task
|
|
34
35
|
from chia.util.ws_message import WsRpcMessage
|
|
35
36
|
|
|
36
37
|
|
|
@@ -71,7 +72,7 @@ class KeychainProxy(DaemonProxy):
|
|
|
71
72
|
"""
|
|
72
73
|
return self.keychain is not None
|
|
73
74
|
|
|
74
|
-
def format_request(self, command: str, data:
|
|
75
|
+
def format_request(self, command: str, data: dict[str, Any]) -> WsRpcMessage:
|
|
75
76
|
"""
|
|
76
77
|
Overrides DaemonProxy.format_request() to add keychain-specific RPC params
|
|
77
78
|
"""
|
|
@@ -98,8 +99,8 @@ class KeychainProxy(DaemonProxy):
|
|
|
98
99
|
except asyncio.TimeoutError:
|
|
99
100
|
raise KeychainProxyConnectionTimeout()
|
|
100
101
|
|
|
101
|
-
async def start(self) -> None:
|
|
102
|
-
self.keychain_connection_task =
|
|
102
|
+
async def start(self, wait_for_start: bool = False) -> None:
|
|
103
|
+
self.keychain_connection_task = create_referenced_task(self.connect_to_keychain())
|
|
103
104
|
await self.connection_established.wait() # wait until connection is established.
|
|
104
105
|
|
|
105
106
|
async def connect_to_keychain(self) -> None:
|
|
@@ -141,7 +142,7 @@ class KeychainProxy(DaemonProxy):
|
|
|
141
142
|
if self.keychain_connection_task is not None:
|
|
142
143
|
await self.keychain_connection_task
|
|
143
144
|
|
|
144
|
-
async def get_response_for_request(self, request_name: str, data:
|
|
145
|
+
async def get_response_for_request(self, request_name: str, data: dict[str, Any]) -> tuple[WsRpcMessage, bool]:
|
|
145
146
|
request = self.format_request(request_name, data)
|
|
146
147
|
response = await self._get(request)
|
|
147
148
|
success = response["data"].get("success", False)
|
|
@@ -252,11 +253,11 @@ class KeychainProxy(DaemonProxy):
|
|
|
252
253
|
if not success:
|
|
253
254
|
self.handle_error(response)
|
|
254
255
|
|
|
255
|
-
async def get_all_private_keys(self) ->
|
|
256
|
+
async def get_all_private_keys(self) -> list[tuple[PrivateKey, bytes]]:
|
|
256
257
|
"""
|
|
257
258
|
Forwards to Keychain.get_all_private_keys()
|
|
258
259
|
"""
|
|
259
|
-
keys:
|
|
260
|
+
keys: list[tuple[PrivateKey, bytes]] = []
|
|
260
261
|
if self.use_local_keychain():
|
|
261
262
|
keys = self.keychain.get_all_private_keys()
|
|
262
263
|
else:
|
|
@@ -415,11 +416,11 @@ class KeychainProxy(DaemonProxy):
|
|
|
415
416
|
self.handle_error(response)
|
|
416
417
|
return key_data
|
|
417
418
|
|
|
418
|
-
async def get_keys(self, include_secrets: bool = False) ->
|
|
419
|
+
async def get_keys(self, include_secrets: bool = False) -> list[KeyData]:
|
|
419
420
|
"""
|
|
420
421
|
Returns all KeyData
|
|
421
422
|
"""
|
|
422
|
-
keys:
|
|
423
|
+
keys: list[KeyData] = []
|
|
423
424
|
if self.use_local_keychain():
|
|
424
425
|
keys = self.keychain.get_keys(include_secrets)
|
|
425
426
|
else:
|
chia/daemon/keychain_server.py
CHANGED
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
from dataclasses import dataclass, field
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Any
|
|
6
|
+
from typing import Any
|
|
7
7
|
|
|
8
8
|
from chia_rs import PrivateKey
|
|
9
9
|
|
|
@@ -65,7 +65,7 @@ class GetKeyRequest(Streamable):
|
|
|
65
65
|
@streamable
|
|
66
66
|
@dataclass(frozen=True)
|
|
67
67
|
class GetKeysResponse(Streamable):
|
|
68
|
-
keys:
|
|
68
|
+
keys: list[KeyData]
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
@streamable
|
|
@@ -91,7 +91,7 @@ class GetPublicKeyRequest(Streamable):
|
|
|
91
91
|
class GetPublicKeyResponse(Streamable):
|
|
92
92
|
key: KeyData
|
|
93
93
|
|
|
94
|
-
def to_json_dict(self) ->
|
|
94
|
+
def to_json_dict(self) -> dict[str, Any]:
|
|
95
95
|
# Ensure that only approved keys are returned
|
|
96
96
|
approved_keys = ["fingerprint", "public_key", "label"]
|
|
97
97
|
key_dict = self.key.to_json_dict()
|
|
@@ -108,9 +108,9 @@ class GetPublicKeysRequest(Streamable):
|
|
|
108
108
|
@streamable
|
|
109
109
|
@dataclass(frozen=True)
|
|
110
110
|
class GetPublicKeysResponse(Streamable):
|
|
111
|
-
keys:
|
|
111
|
+
keys: list[KeyData]
|
|
112
112
|
|
|
113
|
-
def to_json_dict(self) ->
|
|
113
|
+
def to_json_dict(self) -> dict[str, Any]:
|
|
114
114
|
# Ensure that only approved keys are returned
|
|
115
115
|
approved_keys = ["fingerprint", "public_key", "label"]
|
|
116
116
|
return {
|
|
@@ -149,9 +149,9 @@ class KeychainServer:
|
|
|
149
149
|
"""
|
|
150
150
|
|
|
151
151
|
_default_keychain: Keychain = field(default_factory=Keychain)
|
|
152
|
-
_alt_keychains:
|
|
152
|
+
_alt_keychains: dict[str, Keychain] = field(default_factory=dict)
|
|
153
153
|
|
|
154
|
-
def get_keychain_for_request(self, request:
|
|
154
|
+
def get_keychain_for_request(self, request: dict[str, Any]) -> Keychain:
|
|
155
155
|
"""
|
|
156
156
|
Keychain instances can have user and service strings associated with them.
|
|
157
157
|
The keychain backends ultimately point to the same data stores, but the user
|
|
@@ -171,7 +171,7 @@ class KeychainServer:
|
|
|
171
171
|
self._alt_keychains[key] = keychain
|
|
172
172
|
return keychain
|
|
173
173
|
|
|
174
|
-
async def handle_command(self, command: str, data:
|
|
174
|
+
async def handle_command(self, command: str, data: dict[str, Any]) -> dict[str, Any]:
|
|
175
175
|
try:
|
|
176
176
|
if command == "add_private_key":
|
|
177
177
|
data["private"] = True
|
|
@@ -208,7 +208,7 @@ class KeychainServer:
|
|
|
208
208
|
log.exception(e)
|
|
209
209
|
return {"success": False, "error": str(e), "command": command}
|
|
210
210
|
|
|
211
|
-
async def add_key(self, request:
|
|
211
|
+
async def add_key(self, request: dict[str, Any]) -> dict[str, Any]:
|
|
212
212
|
if self.get_keychain_for_request(request).is_keyring_locked():
|
|
213
213
|
return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
|
|
214
214
|
|
|
@@ -245,7 +245,7 @@ class KeychainServer:
|
|
|
245
245
|
|
|
246
246
|
return {"success": True, "fingerprint": fingerprint}
|
|
247
247
|
|
|
248
|
-
async def check_keys(self, request:
|
|
248
|
+
async def check_keys(self, request: dict[str, Any]) -> dict[str, Any]:
|
|
249
249
|
if self.get_keychain_for_request(request).is_keyring_locked():
|
|
250
250
|
return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
|
|
251
251
|
|
|
@@ -261,7 +261,7 @@ class KeychainServer:
|
|
|
261
261
|
|
|
262
262
|
return {"success": True}
|
|
263
263
|
|
|
264
|
-
async def delete_all_keys(self, request:
|
|
264
|
+
async def delete_all_keys(self, request: dict[str, Any]) -> dict[str, Any]:
|
|
265
265
|
if self.get_keychain_for_request(request).is_keyring_locked():
|
|
266
266
|
return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
|
|
267
267
|
|
|
@@ -269,7 +269,7 @@ class KeychainServer:
|
|
|
269
269
|
|
|
270
270
|
return {"success": True}
|
|
271
271
|
|
|
272
|
-
async def delete_key_by_fingerprint(self, request:
|
|
272
|
+
async def delete_key_by_fingerprint(self, request: dict[str, Any]) -> dict[str, Any]:
|
|
273
273
|
if self.get_keychain_for_request(request).is_keyring_locked():
|
|
274
274
|
return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
|
|
275
275
|
|
|
@@ -285,7 +285,7 @@ class KeychainServer:
|
|
|
285
285
|
|
|
286
286
|
return {"success": True}
|
|
287
287
|
|
|
288
|
-
async def run_request(self, request_dict:
|
|
288
|
+
async def run_request(self, request_dict: dict[str, Any], request_type: type[Any]) -> dict[str, Any]:
|
|
289
289
|
keychain = self.get_keychain_for_request(request_dict)
|
|
290
290
|
if keychain.is_keyring_locked():
|
|
291
291
|
return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
|
|
@@ -314,8 +314,8 @@ class KeychainServer:
|
|
|
314
314
|
"error_details": {"message": str(e)},
|
|
315
315
|
}
|
|
316
316
|
|
|
317
|
-
async def get_all_private_keys(self, request:
|
|
318
|
-
all_keys:
|
|
317
|
+
async def get_all_private_keys(self, request: dict[str, Any]) -> dict[str, Any]:
|
|
318
|
+
all_keys: list[dict[str, Any]] = []
|
|
319
319
|
if self.get_keychain_for_request(request).is_keyring_locked():
|
|
320
320
|
return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
|
|
321
321
|
|
|
@@ -325,8 +325,8 @@ class KeychainServer:
|
|
|
325
325
|
|
|
326
326
|
return {"success": True, "private_keys": all_keys}
|
|
327
327
|
|
|
328
|
-
async def get_first_private_key(self, request:
|
|
329
|
-
key:
|
|
328
|
+
async def get_first_private_key(self, request: dict[str, Any]) -> dict[str, Any]:
|
|
329
|
+
key: dict[str, Any] = {}
|
|
330
330
|
if self.get_keychain_for_request(request).is_keyring_locked():
|
|
331
331
|
return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
|
|
332
332
|
|
|
@@ -340,7 +340,7 @@ class KeychainServer:
|
|
|
340
340
|
|
|
341
341
|
return {"success": True, "private_key": key}
|
|
342
342
|
|
|
343
|
-
async def get_key_for_fingerprint(self, request:
|
|
343
|
+
async def get_key_for_fingerprint(self, request: dict[str, Any]) -> dict[str, Any]:
|
|
344
344
|
keychain = self.get_keychain_for_request(request)
|
|
345
345
|
if keychain.is_keyring_locked():
|
|
346
346
|
return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
|