chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.6.0rc2__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/__init__.py +8 -4
- chia/_tests/blockchain/blockchain_test_utils.py +6 -8
- chia/_tests/blockchain/test_augmented_chain.py +4 -4
- chia/_tests/blockchain/test_blockchain.py +165 -190
- chia/_tests/blockchain/test_blockchain_transactions.py +5 -2
- chia/_tests/blockchain/test_build_chains.py +2 -4
- chia/_tests/blockchain/test_get_block_generator.py +2 -3
- chia/_tests/clvm/coin_store.py +4 -7
- chia/_tests/clvm/test_clvm_step.py +4 -4
- chia/_tests/clvm/test_puzzle_compression.py +2 -1
- chia/_tests/clvm/test_puzzle_drivers.py +2 -2
- chia/_tests/clvm/test_singletons.py +2 -4
- chia/_tests/clvm/test_spend_sim.py +2 -2
- chia/_tests/cmds/cmd_test_utils.py +27 -45
- chia/_tests/cmds/test_cmd_framework.py +6 -6
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_show.py +4 -4
- chia/_tests/cmds/test_tx_config_args.py +1 -2
- chia/_tests/cmds/testing_classes.py +4 -5
- chia/_tests/cmds/wallet/test_did.py +24 -27
- chia/_tests/cmds/wallet/test_nft.py +12 -10
- chia/_tests/cmds/wallet/test_vcs.py +11 -12
- chia/_tests/cmds/wallet/test_wallet.py +134 -89
- chia/_tests/conftest.py +66 -31
- chia/_tests/connection_utils.py +2 -2
- chia/_tests/core/cmds/test_beta.py +4 -4
- chia/_tests/core/cmds/test_keys.py +2 -3
- chia/_tests/core/cmds/test_wallet.py +15 -15
- chia/_tests/core/consensus/test_pot_iterations.py +19 -73
- chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
- chia/_tests/core/daemon/test_daemon.py +11 -11
- chia/_tests/core/data_layer/conftest.py +2 -2
- chia/_tests/core/data_layer/test_data_rpc.py +28 -14
- chia/_tests/core/data_layer/test_data_store.py +10 -10
- chia/_tests/core/data_layer/util.py +11 -11
- chia/_tests/core/farmer/test_farmer_api.py +2 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
- chia/_tests/core/full_node/stores/test_block_store.py +5 -4
- chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
- chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +3 -4
- chia/_tests/core/full_node/test_conditions.py +21 -23
- chia/_tests/core/full_node/test_full_node.py +273 -70
- chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
- chia/_tests/core/full_node/test_hint_management.py +2 -4
- chia/_tests/core/full_node/test_performance.py +0 -1
- chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
- chia/_tests/core/full_node/test_transactions.py +1 -2
- chia/_tests/core/full_node/test_tx_processing_queue.py +198 -30
- chia/_tests/core/mempool/test_mempool.py +54 -50
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
- chia/_tests/core/mempool/test_mempool_manager.py +988 -854
- chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
- chia/_tests/core/server/serve.py +7 -7
- chia/_tests/core/server/test_dos.py +1 -2
- chia/_tests/core/server/test_event_loop.py +12 -4
- chia/_tests/core/server/test_loop.py +7 -8
- chia/_tests/core/server/test_rate_limits.py +9 -8
- chia/_tests/core/server/test_server.py +61 -1
- chia/_tests/core/services/test_services.py +2 -2
- chia/_tests/core/ssl/test_ssl.py +2 -2
- chia/_tests/core/test_cost_calculation.py +2 -6
- chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
- chia/_tests/core/test_filter.py +0 -1
- chia/_tests/core/test_full_node_rpc.py +2 -2
- chia/_tests/core/test_merkle_set.py +1 -2
- chia/_tests/core/test_seeder.py +4 -4
- chia/_tests/core/util/test_config.py +4 -4
- chia/_tests/core/util/test_jsonify.py +2 -2
- chia/_tests/core/util/test_keychain.py +3 -3
- chia/_tests/core/util/test_lockfile.py +2 -1
- chia/_tests/core/util/test_log_exceptions.py +1 -2
- chia/_tests/core/util/test_streamable.py +17 -17
- chia/_tests/db/test_db_wrapper.py +3 -2
- chia/_tests/environments/wallet.py +14 -14
- chia/_tests/ether.py +4 -3
- chia/_tests/farmer_harvester/test_farmer.py +41 -24
- chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
- chia/_tests/harvester/test_harvester_api.py +11 -4
- chia/_tests/plot_sync/test_plot_sync.py +13 -11
- chia/_tests/plot_sync/test_receiver.py +11 -10
- chia/_tests/plot_sync/test_sync_simulated.py +2 -2
- chia/_tests/plot_sync/util.py +1 -2
- chia/_tests/plotting/test_plot_manager.py +7 -6
- chia/_tests/plotting/test_prover.py +30 -38
- chia/_tests/pools/test_pool_cmdline.py +4 -6
- chia/_tests/pools/test_pool_rpc.py +203 -61
- chia/_tests/pools/test_pool_wallet.py +3 -3
- chia/_tests/pools/test_wallet_pool_store.py +1 -4
- chia/_tests/process_junit.py +2 -2
- chia/_tests/rpc/test_rpc_client.py +4 -4
- chia/_tests/rpc/test_rpc_server.py +3 -3
- chia/_tests/simulation/test_simulation.py +12 -25
- chia/_tests/solver/test_solver_service.py +13 -4
- chia/_tests/testconfig.py +2 -2
- chia/_tests/timelord/test_new_peak.py +22 -11
- chia/_tests/tools/test_run_block.py +0 -2
- chia/_tests/tools/test_virtual_project.py +2 -1
- chia/_tests/util/benchmarks.py +1 -0
- chia/_tests/util/blockchain.py +38 -36
- chia/_tests/util/blockchain_mock.py +11 -11
- chia/_tests/util/build_network_protocol_files.py +2 -1
- chia/_tests/util/coin_store.py +2 -1
- chia/_tests/util/config.py +1 -1
- chia/_tests/util/db_connection.py +2 -3
- chia/_tests/util/full_sync.py +9 -11
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/get_name_puzzle_conditions.py +2 -0
- chia/_tests/util/misc.py +24 -24
- chia/_tests/util/network_protocol_data.py +20 -3
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +292 -3
- chia/_tests/util/setup_nodes.py +62 -47
- chia/_tests/util/spend_sim.py +57 -57
- chia/_tests/util/test_async_pool.py +2 -3
- chia/_tests/util/test_chia_version.py +1 -3
- chia/_tests/util/test_config.py +3 -3
- chia/_tests/util/test_full_block_utils.py +6 -3
- chia/_tests/util/test_limited_semaphore.py +1 -2
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_network.py +1 -2
- chia/_tests/util/test_priority_mutex.py +3 -3
- chia/_tests/util/test_recursive_replace.py +5 -6
- chia/_tests/util/test_replace_str_to_bytes.py +9 -10
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/time_out_assert.py +2 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
- chia/_tests/wallet/conftest.py +6 -6
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
- chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
- chia/_tests/wallet/did_wallet/test_did.py +16 -6
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
- chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
- chia/_tests/wallet/sync/test_wallet_sync.py +63 -60
- chia/_tests/wallet/test_clvm_streamable.py +2 -3
- chia/_tests/wallet/test_coin_management.py +2 -2
- chia/_tests/wallet/test_conditions.py +45 -51
- chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
- chia/_tests/wallet/test_new_wallet_protocol.py +17 -17
- chia/_tests/wallet/test_notifications.py +14 -14
- chia/_tests/wallet/test_signer_protocol.py +5 -5
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
- chia/_tests/wallet/test_transaction_store.py +20 -20
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +380 -228
- chia/_tests/wallet/test_wallet_action_scope.py +4 -4
- chia/_tests/wallet/test_wallet_blockchain.py +12 -12
- chia/_tests/wallet/test_wallet_coin_store.py +3 -4
- chia/_tests/wallet/test_wallet_node.py +16 -15
- chia/_tests/wallet/test_wallet_test_framework.py +2 -1
- chia/_tests/wallet/test_wallet_utils.py +2 -3
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
- chia/_tests/wallet/wallet_block_tools.py +12 -11
- chia/_tests/weight_proof/config.py +1 -0
- chia/_tests/weight_proof/test_weight_proof.py +5 -4
- chia/apis/__init__.py +21 -0
- chia/apis/farmer_stub.py +102 -0
- chia/apis/full_node_stub.py +374 -0
- chia/apis/harvester_stub.py +57 -0
- chia/apis/introducer_stub.py +35 -0
- chia/apis/solver_stub.py +30 -0
- chia/apis/stub_protocol_registry.py +21 -0
- chia/apis/timelord_stub.py +39 -0
- chia/apis/wallet_stub.py +161 -0
- chia/cmds/beta.py +3 -4
- chia/cmds/beta_funcs.py +4 -3
- chia/cmds/check_wallet_db.py +4 -4
- chia/cmds/chia.py +1 -2
- chia/cmds/cmd_classes.py +11 -13
- chia/cmds/cmd_helpers.py +11 -11
- chia/cmds/cmds_util.py +15 -15
- chia/cmds/coin_funcs.py +6 -7
- chia/cmds/coins.py +2 -3
- chia/cmds/configure.py +1 -2
- chia/cmds/data.py +42 -42
- chia/cmds/data_funcs.py +81 -81
- chia/cmds/db.py +4 -5
- 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/data.py +4 -4
- chia/cmds/dev/gh.py +5 -5
- chia/cmds/dev/installers.py +2 -3
- chia/cmds/dev/mempool.py +3 -4
- chia/cmds/dev/mempool_funcs.py +4 -4
- chia/cmds/dev/sim.py +8 -8
- chia/cmds/dump_keyring.py +3 -3
- chia/cmds/farm.py +6 -8
- chia/cmds/farm_funcs.py +25 -24
- chia/cmds/init_funcs.py +4 -4
- chia/cmds/keys.py +16 -18
- chia/cmds/keys_funcs.py +36 -36
- chia/cmds/netspace.py +1 -3
- chia/cmds/netspace_funcs.py +1 -2
- chia/cmds/options.py +3 -2
- chia/cmds/param_types.py +17 -16
- chia/cmds/passphrase.py +6 -7
- chia/cmds/passphrase_funcs.py +11 -13
- chia/cmds/peer.py +1 -3
- chia/cmds/peer_funcs.py +3 -3
- chia/cmds/plotnft.py +6 -7
- chia/cmds/plotnft_funcs.py +37 -26
- chia/cmds/rpc.py +3 -3
- chia/cmds/show.py +3 -5
- chia/cmds/show_funcs.py +9 -9
- chia/cmds/sim_funcs.py +25 -26
- chia/cmds/solver.py +1 -3
- chia/cmds/solver_funcs.py +1 -2
- chia/cmds/start_funcs.py +2 -2
- chia/cmds/wallet.py +76 -81
- chia/cmds/wallet_funcs.py +206 -177
- chia/consensus/augmented_chain.py +6 -6
- chia/consensus/block_body_validation.py +19 -15
- chia/consensus/block_creation.py +25 -21
- chia/consensus/block_header_validation.py +27 -13
- chia/consensus/block_height_map.py +3 -6
- chia/consensus/block_height_map_protocol.py +2 -2
- chia/consensus/block_record.py +2 -4
- chia/consensus/blockchain.py +58 -40
- chia/consensus/blockchain_interface.py +7 -7
- chia/consensus/coin_store_protocol.py +5 -6
- chia/consensus/condition_tools.py +4 -4
- chia/consensus/cost_calculator.py +2 -3
- chia/consensus/default_constants.py +19 -13
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +3 -5
- chia/consensus/find_fork_point.py +2 -4
- chia/consensus/full_block_to_block_record.py +11 -13
- chia/consensus/generator_tools.py +2 -3
- chia/consensus/get_block_challenge.py +50 -26
- chia/consensus/get_block_generator.py +2 -3
- chia/consensus/make_sub_epoch_summary.py +8 -7
- chia/consensus/multiprocess_validation.py +31 -20
- chia/consensus/pos_quality.py +6 -23
- chia/consensus/pot_iterations.py +17 -44
- chia/consensus/signage_point.py +4 -5
- chia/consensus/vdf_info_computation.py +2 -4
- chia/daemon/client.py +8 -8
- chia/daemon/keychain_proxy.py +31 -37
- chia/daemon/server.py +32 -33
- chia/daemon/windows_signal.py +4 -3
- chia/data_layer/data_layer.py +86 -77
- chia/data_layer/data_layer_rpc_api.py +9 -9
- chia/data_layer/data_layer_rpc_client.py +13 -15
- chia/data_layer/data_layer_server.py +3 -3
- chia/data_layer/data_layer_util.py +14 -14
- chia/data_layer/data_layer_wallet.py +94 -101
- chia/data_layer/data_store.py +50 -50
- chia/data_layer/dl_wallet_store.py +9 -12
- chia/data_layer/download_data.py +8 -9
- chia/data_layer/s3_plugin_service.py +5 -9
- chia/data_layer/start_data_layer.py +5 -5
- chia/farmer/farmer.py +31 -31
- chia/farmer/farmer_api.py +45 -33
- chia/farmer/farmer_rpc_api.py +5 -4
- chia/farmer/farmer_rpc_client.py +6 -6
- chia/farmer/start_farmer.py +6 -6
- chia/full_node/block_store.py +13 -16
- chia/full_node/check_fork_next_block.py +1 -2
- chia/full_node/coin_store.py +15 -16
- chia/full_node/eligible_coin_spends.py +3 -3
- chia/full_node/fee_estimate_store.py +2 -3
- chia/full_node/fee_tracker.py +1 -2
- chia/full_node/full_block_utils.py +4 -4
- chia/full_node/full_node.py +239 -223
- chia/full_node/full_node_api.py +197 -152
- chia/full_node/full_node_rpc_api.py +34 -32
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- chia/full_node/hard_fork_utils.py +44 -0
- chia/full_node/hint_management.py +2 -2
- chia/full_node/mempool.py +17 -19
- chia/full_node/mempool_manager.py +89 -42
- chia/full_node/pending_tx_cache.py +2 -3
- chia/full_node/start_full_node.py +5 -5
- chia/full_node/sync_store.py +3 -4
- chia/full_node/tx_processing_queue.py +120 -36
- chia/full_node/weight_proof.py +61 -48
- chia/harvester/harvester.py +25 -24
- chia/harvester/harvester_api.py +61 -38
- chia/harvester/harvester_rpc_api.py +10 -10
- chia/harvester/start_harvester.py +4 -4
- chia/introducer/introducer.py +3 -3
- chia/introducer/introducer_api.py +6 -4
- chia/introducer/start_introducer.py +4 -4
- chia/legacy/keyring.py +3 -3
- chia/plot_sync/delta.py +1 -2
- chia/plot_sync/receiver.py +20 -17
- chia/plot_sync/sender.py +15 -10
- chia/plotters/bladebit.py +7 -7
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +4 -4
- chia/plotters/plotters.py +4 -4
- chia/plotters/plotters_util.py +3 -3
- chia/plotting/cache.py +20 -14
- chia/plotting/check_plots.py +26 -35
- chia/plotting/create_plots.py +22 -23
- chia/plotting/manager.py +21 -14
- chia/plotting/prover.py +59 -42
- chia/plotting/util.py +16 -16
- chia/pools/pool_config.py +2 -1
- chia/pools/pool_puzzles.py +11 -12
- chia/pools/pool_wallet.py +34 -57
- chia/pools/pool_wallet_info.py +39 -10
- chia/protocols/farmer_protocol.py +8 -9
- chia/protocols/fee_estimate.py +3 -4
- chia/protocols/full_node_protocol.py +3 -4
- chia/protocols/harvester_protocol.py +27 -15
- chia/protocols/outbound_message.py +3 -3
- chia/protocols/pool_protocol.py +8 -9
- chia/protocols/shared_protocol.py +1 -2
- chia/protocols/solver_protocol.py +9 -2
- chia/protocols/timelord_protocol.py +4 -7
- chia/protocols/wallet_protocol.py +11 -12
- chia/rpc/rpc_client.py +9 -9
- chia/rpc/rpc_server.py +17 -17
- chia/rpc/util.py +2 -2
- chia/seeder/crawler.py +8 -8
- chia/seeder/crawler_api.py +21 -27
- chia/seeder/crawler_rpc_api.py +2 -2
- chia/seeder/dns_server.py +21 -21
- chia/seeder/start_crawler.py +4 -4
- chia/server/address_manager.py +15 -16
- chia/server/api_protocol.py +11 -11
- chia/server/chia_policy.py +46 -26
- chia/server/introducer_peers.py +2 -3
- chia/server/node_discovery.py +19 -19
- chia/server/rate_limit_numbers.py +4 -5
- chia/server/rate_limits.py +4 -4
- chia/server/resolve_peer_info.py +4 -4
- chia/server/server.py +49 -52
- chia/server/signal_handlers.py +6 -6
- chia/server/start_service.py +17 -17
- chia/server/upnp.py +4 -6
- chia/server/ws_connection.py +52 -37
- chia/simulator/add_blocks_in_batches.py +1 -3
- chia/simulator/block_tools.py +312 -200
- chia/simulator/full_node_simulator.py +56 -35
- chia/simulator/keyring.py +2 -3
- chia/simulator/setup_services.py +15 -15
- chia/simulator/simulator_full_node_rpc_api.py +1 -2
- chia/simulator/simulator_full_node_rpc_client.py +1 -2
- chia/simulator/simulator_protocol.py +1 -2
- chia/simulator/simulator_test_tools.py +3 -3
- chia/simulator/start_simulator.py +7 -7
- chia/simulator/wallet_tools.py +10 -10
- chia/solver/solver.py +10 -10
- chia/solver/solver_api.py +10 -8
- chia/solver/solver_rpc_api.py +2 -2
- chia/solver/start_solver.py +4 -4
- chia/ssl/cacert.pem +148 -90
- chia/ssl/chia_ca.crt +14 -10
- chia/ssl/chia_ca_old.crt +19 -0
- chia/ssl/create_ssl.py +4 -4
- chia/ssl/renewedselfsignedca.conf +4 -0
- chia/ssl/ssl_check.py +1 -2
- chia/timelord/iters_from_block.py +1 -4
- chia/timelord/start_timelord.py +4 -4
- chia/timelord/timelord.py +44 -40
- chia/timelord/timelord_api.py +6 -4
- chia/timelord/timelord_launcher.py +2 -2
- chia/timelord/timelord_rpc_api.py +2 -2
- chia/timelord/timelord_state.py +11 -12
- chia/types/block_protocol.py +1 -3
- chia/types/blockchain_format/coin.py +1 -3
- chia/types/blockchain_format/program.py +11 -8
- chia/types/blockchain_format/proof_of_space.py +123 -76
- chia/types/blockchain_format/tree_hash.py +3 -3
- chia/types/blockchain_format/vdf.py +1 -2
- chia/types/coin_spend.py +3 -3
- chia/types/mempool_item.py +5 -5
- chia/types/mempool_submission_status.py +2 -3
- chia/types/peer_info.py +1 -2
- chia/types/unfinished_header_block.py +3 -4
- chia/types/validation_state.py +1 -2
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +5 -5
- chia/util/bech32m.py +1 -2
- chia/util/beta_metrics.py +2 -2
- chia/util/block_cache.py +4 -4
- chia/util/chia_logging.py +2 -2
- chia/util/chia_version.py +1 -2
- chia/util/config.py +15 -16
- chia/util/db_wrapper.py +26 -27
- chia/util/default_root.py +1 -2
- chia/util/errors.py +3 -3
- chia/util/file_keyring.py +14 -14
- chia/util/files.py +2 -3
- chia/util/hash.py +4 -4
- chia/util/initial-config.yaml +4 -5
- chia/util/inline_executor.py +2 -1
- chia/util/ip_address.py +1 -2
- chia/util/keychain.py +25 -27
- chia/util/keyring_wrapper.py +18 -19
- chia/util/lock.py +3 -4
- chia/util/log_exceptions.py +1 -2
- chia/util/lru_cache.py +2 -2
- chia/util/network.py +6 -6
- chia/util/path.py +2 -3
- chia/util/priority_mutex.py +2 -2
- chia/util/profiler.py +1 -2
- chia/util/safe_cancel_task.py +1 -2
- chia/util/streamable.py +24 -10
- chia/util/task_referencer.py +1 -1
- chia/util/timing.py +3 -3
- chia/util/virtual_project_analysis.py +6 -5
- chia/util/ws_message.py +2 -2
- chia/wallet/cat_wallet/cat_info.py +3 -4
- chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
- chia/wallet/cat_wallet/cat_utils.py +3 -4
- chia/wallet/cat_wallet/cat_wallet.py +61 -83
- chia/wallet/cat_wallet/lineage_store.py +3 -4
- chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
- chia/wallet/coin_selection.py +9 -10
- chia/wallet/conditions.py +142 -106
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
- chia/wallet/derivation_record.py +1 -2
- chia/wallet/derive_keys.py +2 -4
- chia/wallet/did_wallet/did_info.py +10 -11
- chia/wallet/did_wallet/did_wallet.py +36 -82
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
- chia/wallet/driver_protocol.py +5 -7
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
- chia/wallet/nft_wallet/nft_info.py +8 -9
- chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
- chia/wallet/nft_wallet/nft_wallet.py +79 -116
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
- chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
- chia/wallet/nft_wallet/uncurry_nft.py +10 -11
- chia/wallet/notification_manager.py +3 -3
- chia/wallet/notification_store.py +44 -61
- chia/wallet/outer_puzzles.py +6 -7
- chia/wallet/puzzle_drivers.py +34 -6
- chia/wallet/puzzles/clawback/drivers.py +6 -6
- chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
- chia/wallet/puzzles/load_clvm.py +1 -1
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
- chia/wallet/puzzles/singleton_top_layer.py +2 -3
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
- chia/wallet/puzzles/tails.py +3 -3
- chia/wallet/singleton.py +5 -7
- chia/wallet/singleton_record.py +3 -3
- chia/wallet/start_wallet.py +5 -5
- chia/wallet/trade_manager.py +37 -58
- chia/wallet/trade_record.py +4 -4
- chia/wallet/trading/offer.py +59 -46
- chia/wallet/trading/trade_store.py +8 -9
- chia/wallet/transaction_record.py +8 -8
- chia/wallet/uncurried_puzzle.py +1 -2
- chia/wallet/util/clvm_streamable.py +12 -12
- chia/wallet/util/compute_hints.py +4 -5
- chia/wallet/util/curry_and_treehash.py +1 -2
- chia/wallet/util/merkle_tree.py +2 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/wallet/util/signing.py +85 -0
- chia/wallet/util/tx_config.py +15 -6
- chia/wallet/util/wallet_sync_utils.py +14 -16
- chia/wallet/util/wallet_types.py +2 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
- chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
- chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
- chia/wallet/vc_wallet/vc_drivers.py +27 -27
- chia/wallet/vc_wallet/vc_store.py +5 -6
- chia/wallet/vc_wallet/vc_wallet.py +33 -61
- chia/wallet/wallet.py +50 -78
- chia/wallet/wallet_action_scope.py +11 -11
- chia/wallet/wallet_blockchain.py +12 -12
- chia/wallet/wallet_coin_record.py +12 -6
- chia/wallet/wallet_coin_store.py +24 -25
- chia/wallet/wallet_interested_store.py +3 -5
- chia/wallet/wallet_nft_store.py +10 -11
- chia/wallet/wallet_node.py +53 -61
- chia/wallet/wallet_node_api.py +5 -3
- chia/wallet/wallet_protocol.py +23 -23
- chia/wallet/wallet_puzzle_store.py +15 -18
- chia/wallet/wallet_request_types.py +778 -114
- chia/wallet/wallet_retry_store.py +1 -3
- chia/wallet/wallet_rpc_api.py +572 -909
- chia/wallet/wallet_rpc_client.py +87 -279
- chia/wallet/wallet_singleton_store.py +3 -4
- chia/wallet/wallet_state_manager.py +332 -106
- chia/wallet/wallet_transaction_store.py +11 -14
- chia/wallet/wallet_user_store.py +4 -6
- chia/wallet/wallet_weight_proof_handler.py +4 -4
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
- chia/apis.py +0 -21
- chia/consensus/check_time_locks.py +0 -57
- chia/data_layer/puzzles/__init__.py +0 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
- chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
- chia/types/coin_record.py +0 -44
- chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
chia/util/keychain.py
CHANGED
|
@@ -8,7 +8,7 @@ from collections.abc import Iterator
|
|
|
8
8
|
from dataclasses import dataclass
|
|
9
9
|
from hashlib import pbkdf2_hmac
|
|
10
10
|
from pathlib import Path
|
|
11
|
-
from typing import Any, Literal,
|
|
11
|
+
from typing import Any, Literal, overload
|
|
12
12
|
|
|
13
13
|
import importlib_resources
|
|
14
14
|
from bitstring import BitArray # pyright: reportMissingImports=false
|
|
@@ -231,8 +231,8 @@ class KeyDataSecrets(Streamable):
|
|
|
231
231
|
class KeyData(Streamable):
|
|
232
232
|
fingerprint: uint32
|
|
233
233
|
public_key: G1Element
|
|
234
|
-
label:
|
|
235
|
-
secrets:
|
|
234
|
+
label: str | None
|
|
235
|
+
secrets: KeyDataSecrets | None
|
|
236
236
|
|
|
237
237
|
def __post_init__(self) -> None:
|
|
238
238
|
# This is redundant if `from_*` methods are used but its to make sure there can't be an `KeyData` instance with
|
|
@@ -243,7 +243,7 @@ class KeyData(Streamable):
|
|
|
243
243
|
raise KeychainKeyDataMismatch("fingerprint")
|
|
244
244
|
|
|
245
245
|
@classmethod
|
|
246
|
-
def from_mnemonic(cls, mnemonic: str, label:
|
|
246
|
+
def from_mnemonic(cls, mnemonic: str, label: str | None = None) -> KeyData:
|
|
247
247
|
private_key = AugSchemeMPL.key_gen(mnemonic_to_seed(mnemonic))
|
|
248
248
|
return cls(
|
|
249
249
|
fingerprint=uint32(private_key.get_g1().get_fingerprint()),
|
|
@@ -253,11 +253,11 @@ class KeyData(Streamable):
|
|
|
253
253
|
)
|
|
254
254
|
|
|
255
255
|
@classmethod
|
|
256
|
-
def from_entropy(cls, entropy: bytes, label:
|
|
256
|
+
def from_entropy(cls, entropy: bytes, label: str | None = None) -> KeyData:
|
|
257
257
|
return cls.from_mnemonic(bytes_to_mnemonic(entropy), label)
|
|
258
258
|
|
|
259
259
|
@classmethod
|
|
260
|
-
def generate(cls, label:
|
|
260
|
+
def generate(cls, label: str | None = None) -> KeyData:
|
|
261
261
|
return cls.from_mnemonic(generate_mnemonic(), label)
|
|
262
262
|
|
|
263
263
|
@property
|
|
@@ -295,11 +295,11 @@ class Keychain:
|
|
|
295
295
|
list of all keys.
|
|
296
296
|
"""
|
|
297
297
|
|
|
298
|
-
def __init__(self, user:
|
|
298
|
+
def __init__(self, user: str | None = None, service: str | None = None):
|
|
299
299
|
self.user = user if user is not None else default_keychain_user()
|
|
300
300
|
self.service = service if service is not None else default_keychain_service()
|
|
301
301
|
|
|
302
|
-
keyring_wrapper:
|
|
302
|
+
keyring_wrapper: KeyringWrapper | None = KeyringWrapper.get_shared_instance()
|
|
303
303
|
|
|
304
304
|
if keyring_wrapper is None:
|
|
305
305
|
raise KeychainNotSet("KeyringWrapper not set")
|
|
@@ -347,25 +347,23 @@ class Keychain:
|
|
|
347
347
|
def add_key(self, mnemonic_or_pk: str) -> PrivateKey: ...
|
|
348
348
|
|
|
349
349
|
@overload
|
|
350
|
-
def add_key(self, mnemonic_or_pk: str, label:
|
|
350
|
+
def add_key(self, mnemonic_or_pk: str, label: str | None) -> PrivateKey: ...
|
|
351
351
|
|
|
352
352
|
@overload
|
|
353
|
-
def add_key(self, mnemonic_or_pk: str, label:
|
|
353
|
+
def add_key(self, mnemonic_or_pk: str, label: str | None, private: Literal[True]) -> PrivateKey: ...
|
|
354
354
|
|
|
355
355
|
@overload
|
|
356
|
-
def add_key(self, mnemonic_or_pk: str, label:
|
|
356
|
+
def add_key(self, mnemonic_or_pk: str, label: str | None, private: Literal[False]) -> G1Element: ...
|
|
357
357
|
|
|
358
358
|
@overload
|
|
359
|
-
def add_key(self, mnemonic_or_pk: str, label:
|
|
359
|
+
def add_key(self, mnemonic_or_pk: str, label: str | None, private: bool) -> PrivateKey | G1Element: ...
|
|
360
360
|
|
|
361
|
-
def add_key(
|
|
362
|
-
self, mnemonic_or_pk: str, label: Optional[str] = None, private: bool = True
|
|
363
|
-
) -> Union[PrivateKey, G1Element]:
|
|
361
|
+
def add_key(self, mnemonic_or_pk: str, label: str | None = None, private: bool = True) -> PrivateKey | G1Element:
|
|
364
362
|
"""
|
|
365
363
|
Adds a key to the keychain. The keychain itself will store the public key, and the entropy bytes (if given),
|
|
366
364
|
but not the passphrase.
|
|
367
365
|
"""
|
|
368
|
-
key:
|
|
366
|
+
key: PrivateKey | G1Element
|
|
369
367
|
if private:
|
|
370
368
|
seed = mnemonic_to_seed(mnemonic_or_pk)
|
|
371
369
|
entropy = bytes_from_mnemonic(mnemonic_or_pk)
|
|
@@ -436,7 +434,7 @@ class Keychain:
|
|
|
436
434
|
pass
|
|
437
435
|
return None
|
|
438
436
|
|
|
439
|
-
def get_first_private_key(self) ->
|
|
437
|
+
def get_first_private_key(self) -> tuple[PrivateKey, bytes] | None:
|
|
440
438
|
"""
|
|
441
439
|
Returns the first key in the keychain that has one of the passed in passphrases.
|
|
442
440
|
"""
|
|
@@ -444,7 +442,7 @@ class Keychain:
|
|
|
444
442
|
return key_data.private_key, key_data.entropy
|
|
445
443
|
return None
|
|
446
444
|
|
|
447
|
-
def get_private_key_by_fingerprint(self, fingerprint: int) ->
|
|
445
|
+
def get_private_key_by_fingerprint(self, fingerprint: int) -> tuple[PrivateKey, bytes] | None:
|
|
448
446
|
"""
|
|
449
447
|
Return first private key which have the given public key fingerprint.
|
|
450
448
|
"""
|
|
@@ -492,7 +490,7 @@ class Keychain:
|
|
|
492
490
|
|
|
493
491
|
return all_keys
|
|
494
492
|
|
|
495
|
-
def get_first_public_key(self) ->
|
|
493
|
+
def get_first_public_key(self) -> G1Element | None:
|
|
496
494
|
"""
|
|
497
495
|
Returns the first public key.
|
|
498
496
|
"""
|
|
@@ -578,7 +576,7 @@ class Keychain:
|
|
|
578
576
|
return passphrase_requirements().get("min_length", 0) # type: ignore[no-any-return]
|
|
579
577
|
|
|
580
578
|
@staticmethod
|
|
581
|
-
def passphrase_meets_requirements(passphrase:
|
|
579
|
+
def passphrase_meets_requirements(passphrase: str | None) -> bool:
|
|
582
580
|
"""
|
|
583
581
|
Returns whether the provided passphrase satisfies the passphrase requirements.
|
|
584
582
|
"""
|
|
@@ -617,7 +615,7 @@ class Keychain:
|
|
|
617
615
|
return KeyringWrapper.get_shared_instance().has_cached_master_passphrase()
|
|
618
616
|
|
|
619
617
|
@staticmethod
|
|
620
|
-
def get_cached_master_passphrase() ->
|
|
618
|
+
def get_cached_master_passphrase() -> str | None:
|
|
621
619
|
"""
|
|
622
620
|
Returns the cached master passphrase
|
|
623
621
|
"""
|
|
@@ -625,7 +623,7 @@ class Keychain:
|
|
|
625
623
|
return passphrase
|
|
626
624
|
|
|
627
625
|
@staticmethod
|
|
628
|
-
def set_cached_master_passphrase(passphrase:
|
|
626
|
+
def set_cached_master_passphrase(passphrase: str | None) -> None:
|
|
629
627
|
"""
|
|
630
628
|
Caches the provided master passphrase
|
|
631
629
|
"""
|
|
@@ -633,10 +631,10 @@ class Keychain:
|
|
|
633
631
|
|
|
634
632
|
@staticmethod
|
|
635
633
|
def set_master_passphrase(
|
|
636
|
-
current_passphrase:
|
|
634
|
+
current_passphrase: str | None,
|
|
637
635
|
new_passphrase: str,
|
|
638
636
|
*,
|
|
639
|
-
passphrase_hint:
|
|
637
|
+
passphrase_hint: str | None = None,
|
|
640
638
|
save_passphrase: bool = False,
|
|
641
639
|
) -> None:
|
|
642
640
|
"""
|
|
@@ -651,7 +649,7 @@ class Keychain:
|
|
|
651
649
|
)
|
|
652
650
|
|
|
653
651
|
@staticmethod
|
|
654
|
-
def remove_master_passphrase(current_passphrase:
|
|
652
|
+
def remove_master_passphrase(current_passphrase: str | None) -> None:
|
|
655
653
|
"""
|
|
656
654
|
Removes the user-provided master passphrase, and replaces it with the default
|
|
657
655
|
master passphrase. The keyring contents will remain encrypted, but to the
|
|
@@ -660,14 +658,14 @@ class Keychain:
|
|
|
660
658
|
KeyringWrapper.get_shared_instance().remove_master_passphrase(current_passphrase)
|
|
661
659
|
|
|
662
660
|
@staticmethod
|
|
663
|
-
def get_master_passphrase_hint() ->
|
|
661
|
+
def get_master_passphrase_hint() -> str | None:
|
|
664
662
|
"""
|
|
665
663
|
Returns the passphrase hint from the keyring
|
|
666
664
|
"""
|
|
667
665
|
return KeyringWrapper.get_shared_instance().get_master_passphrase_hint()
|
|
668
666
|
|
|
669
667
|
@staticmethod
|
|
670
|
-
def set_master_passphrase_hint(current_passphrase: str, passphrase_hint:
|
|
668
|
+
def set_master_passphrase_hint(current_passphrase: str, passphrase_hint: str | None) -> None:
|
|
671
669
|
"""
|
|
672
670
|
Convenience method for setting/removing the passphrase hint. Requires the current
|
|
673
671
|
passphrase, as the passphrase hint is written as part of a passphrase update.
|
chia/util/keyring_wrapper.py
CHANGED
|
@@ -7,13 +7,12 @@ import time
|
|
|
7
7
|
from getpass import getpass
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
from sys import platform
|
|
10
|
-
from typing import ClassVar,
|
|
10
|
+
from typing import ClassVar, Literal, overload
|
|
11
11
|
|
|
12
12
|
import colorama
|
|
13
13
|
from keyring.backends.macOS import Keyring as MacKeyring
|
|
14
14
|
from keyring.backends.Windows import WinVaultKeyring as WinKeyring
|
|
15
15
|
from keyring.errors import KeyringError, PasswordDeleteError
|
|
16
|
-
from typing_extensions import Literal
|
|
17
16
|
|
|
18
17
|
from chia.util.default_root import DEFAULT_KEYS_ROOT_PATH
|
|
19
18
|
from chia.util.errors import KeychainMaxUnlockAttempts
|
|
@@ -30,10 +29,10 @@ MASTER_PASSPHRASE_SERVICE_NAME = "Chia Passphrase" # noqa: S105
|
|
|
30
29
|
MASTER_PASSPHRASE_USER_NAME = "Chia Passphrase" # noqa: S105
|
|
31
30
|
|
|
32
31
|
|
|
33
|
-
OSPassphraseStore =
|
|
32
|
+
OSPassphraseStore = MacKeyring | WinKeyring
|
|
34
33
|
|
|
35
34
|
|
|
36
|
-
def get_os_passphrase_store() ->
|
|
35
|
+
def get_os_passphrase_store() -> OSPassphraseStore | None:
|
|
37
36
|
if platform == "darwin":
|
|
38
37
|
return MacKeyring() # type: ignore[no-untyped-call]
|
|
39
38
|
elif platform == "win32" or platform == "cygwin":
|
|
@@ -126,13 +125,13 @@ class KeyringWrapper:
|
|
|
126
125
|
"""
|
|
127
126
|
|
|
128
127
|
# Static members
|
|
129
|
-
__shared_instance: ClassVar[
|
|
128
|
+
__shared_instance: ClassVar[KeyringWrapper | None] = None
|
|
130
129
|
__keys_root_path: ClassVar[Path] = DEFAULT_KEYS_ROOT_PATH
|
|
131
130
|
|
|
132
131
|
# Instance members
|
|
133
132
|
keys_root_path: Path
|
|
134
133
|
keyring: FileKeyring
|
|
135
|
-
cached_passphrase:
|
|
134
|
+
cached_passphrase: str | None = None
|
|
136
135
|
cached_passphrase_is_validated: bool = False
|
|
137
136
|
|
|
138
137
|
def __init__(self, keys_root_path: Path = DEFAULT_KEYS_ROOT_PATH):
|
|
@@ -156,7 +155,7 @@ class KeyringWrapper:
|
|
|
156
155
|
"""
|
|
157
156
|
from chia.util.keychain import supports_os_passphrase_storage
|
|
158
157
|
|
|
159
|
-
passphrase:
|
|
158
|
+
passphrase: str | None = None
|
|
160
159
|
|
|
161
160
|
if supports_os_passphrase_storage():
|
|
162
161
|
passphrase = self.get_master_passphrase_from_credential_store()
|
|
@@ -183,10 +182,10 @@ class KeyringWrapper:
|
|
|
183
182
|
|
|
184
183
|
@overload
|
|
185
184
|
@staticmethod
|
|
186
|
-
def get_shared_instance(create_if_necessary: bool) ->
|
|
185
|
+
def get_shared_instance(create_if_necessary: bool) -> KeyringWrapper | None: ...
|
|
187
186
|
|
|
188
187
|
@staticmethod
|
|
189
|
-
def get_shared_instance(create_if_necessary: bool = True) ->
|
|
188
|
+
def get_shared_instance(create_if_necessary: bool = True) -> KeyringWrapper | None:
|
|
190
189
|
if not KeyringWrapper.__shared_instance and create_if_necessary:
|
|
191
190
|
KeyringWrapper.__shared_instance = KeyringWrapper(keys_root_path=KeyringWrapper.__keys_root_path)
|
|
192
191
|
|
|
@@ -204,14 +203,14 @@ class KeyringWrapper:
|
|
|
204
203
|
|
|
205
204
|
# Master passphrase support
|
|
206
205
|
|
|
207
|
-
def get_cached_master_passphrase(self) -> tuple[
|
|
206
|
+
def get_cached_master_passphrase(self) -> tuple[str | None, bool]:
|
|
208
207
|
"""
|
|
209
208
|
Returns a tuple including the currently cached passphrase and a bool
|
|
210
209
|
indicating whether the passphrase has been previously validated.
|
|
211
210
|
"""
|
|
212
211
|
return self.cached_passphrase, self.cached_passphrase_is_validated
|
|
213
212
|
|
|
214
|
-
def set_cached_master_passphrase(self, passphrase:
|
|
213
|
+
def set_cached_master_passphrase(self, passphrase: str | None, validated: bool = False) -> None:
|
|
215
214
|
"""
|
|
216
215
|
Cache the provided passphrase and optionally indicate whether the passphrase
|
|
217
216
|
has been validated.
|
|
@@ -235,11 +234,11 @@ class KeyringWrapper:
|
|
|
235
234
|
|
|
236
235
|
def set_master_passphrase(
|
|
237
236
|
self,
|
|
238
|
-
current_passphrase:
|
|
237
|
+
current_passphrase: str | None,
|
|
239
238
|
new_passphrase: str,
|
|
240
239
|
*,
|
|
241
240
|
write_to_keyring: bool = True,
|
|
242
|
-
passphrase_hint:
|
|
241
|
+
passphrase_hint: str | None = None,
|
|
243
242
|
save_passphrase: bool = False,
|
|
244
243
|
) -> None:
|
|
245
244
|
"""
|
|
@@ -272,7 +271,7 @@ class KeyringWrapper:
|
|
|
272
271
|
else:
|
|
273
272
|
self.remove_master_passphrase_from_credential_store()
|
|
274
273
|
|
|
275
|
-
def remove_master_passphrase(self, current_passphrase:
|
|
274
|
+
def remove_master_passphrase(self, current_passphrase: str | None) -> None:
|
|
276
275
|
"""
|
|
277
276
|
Remove the user-specific master passphrase. We still keep the keyring contents encrypted
|
|
278
277
|
using the default passphrase.
|
|
@@ -280,7 +279,7 @@ class KeyringWrapper:
|
|
|
280
279
|
self.set_master_passphrase(current_passphrase, DEFAULT_PASSPHRASE_IF_NO_MASTER_PASSPHRASE)
|
|
281
280
|
|
|
282
281
|
def save_master_passphrase_to_credential_store(self, passphrase: str) -> None:
|
|
283
|
-
passphrase_store:
|
|
282
|
+
passphrase_store: OSPassphraseStore | None = get_os_passphrase_store()
|
|
284
283
|
if passphrase_store is not None:
|
|
285
284
|
try:
|
|
286
285
|
passphrase_store.set_password(
|
|
@@ -293,7 +292,7 @@ class KeyringWrapper:
|
|
|
293
292
|
raise
|
|
294
293
|
|
|
295
294
|
def remove_master_passphrase_from_credential_store(self) -> None:
|
|
296
|
-
passphrase_store:
|
|
295
|
+
passphrase_store: OSPassphraseStore | None = get_os_passphrase_store()
|
|
297
296
|
if passphrase_store is not None:
|
|
298
297
|
try:
|
|
299
298
|
passphrase_store.delete_password(
|
|
@@ -310,8 +309,8 @@ class KeyringWrapper:
|
|
|
310
309
|
if not warn_if_macos_errSecInteractionNotAllowed(e):
|
|
311
310
|
raise
|
|
312
311
|
|
|
313
|
-
def get_master_passphrase_from_credential_store(self) ->
|
|
314
|
-
passphrase_store:
|
|
312
|
+
def get_master_passphrase_from_credential_store(self) -> str | None:
|
|
313
|
+
passphrase_store: OSPassphraseStore | None = get_os_passphrase_store()
|
|
315
314
|
if passphrase_store is not None:
|
|
316
315
|
try:
|
|
317
316
|
return passphrase_store.get_password( # type: ignore[no-any-return]
|
|
@@ -323,5 +322,5 @@ class KeyringWrapper:
|
|
|
323
322
|
raise
|
|
324
323
|
return None
|
|
325
324
|
|
|
326
|
-
def get_master_passphrase_hint(self) ->
|
|
325
|
+
def get_master_passphrase_hint(self) -> str | None:
|
|
327
326
|
return self.keyring.get_passphrase_hint()
|
chia/util/lock.py
CHANGED
|
@@ -5,7 +5,6 @@ from __future__ import annotations
|
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from types import TracebackType
|
|
8
|
-
from typing import Optional
|
|
9
8
|
|
|
10
9
|
from filelock import BaseFileLock, FileLock, Timeout
|
|
11
10
|
from typing_extensions import final
|
|
@@ -33,9 +32,9 @@ class Lockfile:
|
|
|
33
32
|
|
|
34
33
|
def __exit__(
|
|
35
34
|
self,
|
|
36
|
-
exc_type:
|
|
37
|
-
exc:
|
|
38
|
-
traceback:
|
|
35
|
+
exc_type: type[BaseException] | None,
|
|
36
|
+
exc: BaseException | None,
|
|
37
|
+
traceback: TracebackType | None,
|
|
39
38
|
) -> None:
|
|
40
39
|
self.release()
|
|
41
40
|
|
chia/util/log_exceptions.py
CHANGED
|
@@ -6,7 +6,6 @@ import logging
|
|
|
6
6
|
import traceback
|
|
7
7
|
from collections.abc import Iterator
|
|
8
8
|
from contextlib import contextmanager
|
|
9
|
-
from typing import Union
|
|
10
9
|
|
|
11
10
|
|
|
12
11
|
@contextmanager
|
|
@@ -17,7 +16,7 @@ def log_exceptions(
|
|
|
17
16
|
message: str = "Caught exception",
|
|
18
17
|
level: int = logging.ERROR,
|
|
19
18
|
show_traceback: bool = True,
|
|
20
|
-
exceptions_to_process:
|
|
19
|
+
exceptions_to_process: type[BaseException] | tuple[type[BaseException], ...] = Exception,
|
|
21
20
|
) -> Iterator[None]:
|
|
22
21
|
try:
|
|
23
22
|
yield
|
chia/util/lru_cache.py
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from collections import OrderedDict
|
|
6
|
-
from typing import Generic,
|
|
6
|
+
from typing import Generic, TypeVar
|
|
7
7
|
|
|
8
8
|
K = TypeVar("K")
|
|
9
9
|
V = TypeVar("V")
|
|
@@ -14,7 +14,7 @@ class LRUCache(Generic[K, V]):
|
|
|
14
14
|
self.cache: OrderedDict[K, V] = OrderedDict()
|
|
15
15
|
self.capacity = capacity
|
|
16
16
|
|
|
17
|
-
def get(self, key: K) ->
|
|
17
|
+
def get(self, key: K) -> V | None:
|
|
18
18
|
if key not in self.cache:
|
|
19
19
|
return None
|
|
20
20
|
else:
|
chia/util/network.py
CHANGED
|
@@ -8,7 +8,7 @@ import ssl
|
|
|
8
8
|
from collections.abc import Iterable
|
|
9
9
|
from dataclasses import dataclass
|
|
10
10
|
from ipaddress import IPv4Network, IPv6Network, ip_address
|
|
11
|
-
from typing import Any, Literal
|
|
11
|
+
from typing import Any, Literal
|
|
12
12
|
from urllib.parse import urlsplit
|
|
13
13
|
|
|
14
14
|
from aiohttp import web
|
|
@@ -36,8 +36,8 @@ class WebServer:
|
|
|
36
36
|
hostname: str
|
|
37
37
|
listen_port: uint16
|
|
38
38
|
scheme: Literal["http", "https"]
|
|
39
|
-
_ssl_context:
|
|
40
|
-
_close_task:
|
|
39
|
+
_ssl_context: ssl.SSLContext | None = None
|
|
40
|
+
_close_task: asyncio.Task[None] | None = None
|
|
41
41
|
_prefer_ipv6: bool = False
|
|
42
42
|
|
|
43
43
|
@classmethod
|
|
@@ -47,7 +47,7 @@ class WebServer:
|
|
|
47
47
|
port: uint16,
|
|
48
48
|
routes: Iterable[web.RouteDef] = (),
|
|
49
49
|
max_request_body_size: int = 1024**2, # Default `client_max_size` from web.Application
|
|
50
|
-
ssl_context:
|
|
50
|
+
ssl_context: ssl.SSLContext | None = None,
|
|
51
51
|
keepalive_timeout: int = 75, # Default from aiohttp.web
|
|
52
52
|
shutdown_timeout: int = 60, # Default `shutdown_timeout` from aiohttp.web_runner.BaseRunner
|
|
53
53
|
prefer_ipv6: bool = False,
|
|
@@ -115,7 +115,7 @@ class WebServer:
|
|
|
115
115
|
await self._close_task
|
|
116
116
|
|
|
117
117
|
|
|
118
|
-
def is_in_network(peer_host: str, networks: Iterable[
|
|
118
|
+
def is_in_network(peer_host: str, networks: Iterable[IPv4Network | IPv6Network]) -> bool:
|
|
119
119
|
try:
|
|
120
120
|
peer_host_ip = ip_address(peer_host)
|
|
121
121
|
return any(peer_host_ip in network for network in networks)
|
|
@@ -155,7 +155,7 @@ async def resolve(host: str, *, prefer_ipv6: bool = False) -> IPAddress:
|
|
|
155
155
|
except ValueError:
|
|
156
156
|
pass
|
|
157
157
|
addrset: list[
|
|
158
|
-
tuple[socket.AddressFamily, socket.SocketKind, int, str,
|
|
158
|
+
tuple[socket.AddressFamily, socket.SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]
|
|
159
159
|
] = await asyncio.get_event_loop().getaddrinfo(host, None)
|
|
160
160
|
# The list returned by getaddrinfo is never empty, an exception is thrown or data is returned.
|
|
161
161
|
ips_v4 = []
|
chia/util/path.py
CHANGED
|
@@ -4,10 +4,9 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import os
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
from typing import Union
|
|
8
7
|
|
|
9
8
|
|
|
10
|
-
def path_from_root(root: Path, path_str:
|
|
9
|
+
def path_from_root(root: Path, path_str: str | Path) -> Path:
|
|
11
10
|
"""
|
|
12
11
|
If path is relative, prepend root
|
|
13
12
|
If path is absolute, return it directly.
|
|
@@ -19,7 +18,7 @@ def path_from_root(root: Path, path_str: Union[str, Path]) -> Path:
|
|
|
19
18
|
return path.resolve()
|
|
20
19
|
|
|
21
20
|
|
|
22
|
-
def make_path_relative(path_str:
|
|
21
|
+
def make_path_relative(path_str: str | Path, root: Path) -> Path:
|
|
23
22
|
"""
|
|
24
23
|
Try to make the given path relative, given the default root.
|
|
25
24
|
"""
|
chia/util/priority_mutex.py
CHANGED
|
@@ -9,7 +9,7 @@ import dataclasses
|
|
|
9
9
|
import logging
|
|
10
10
|
from collections.abc import AsyncIterator
|
|
11
11
|
from enum import IntEnum
|
|
12
|
-
from typing import Generic,
|
|
12
|
+
from typing import Generic, TypeVar
|
|
13
13
|
|
|
14
14
|
from typing_extensions import final
|
|
15
15
|
|
|
@@ -49,7 +49,7 @@ class PriorityMutex(Generic[_T_Priority]):
|
|
|
49
49
|
"""
|
|
50
50
|
|
|
51
51
|
_deques: dict[_T_Priority, collections.deque[_Element]]
|
|
52
|
-
_active:
|
|
52
|
+
_active: _Element | None = None
|
|
53
53
|
|
|
54
54
|
@classmethod
|
|
55
55
|
def create(cls, priority_type: type[_T_Priority]) -> PriorityMutex[_T_Priority]:
|
chia/util/profiler.py
CHANGED
|
@@ -10,7 +10,6 @@ import tracemalloc
|
|
|
10
10
|
from collections.abc import AsyncIterator
|
|
11
11
|
from contextlib import asynccontextmanager
|
|
12
12
|
from datetime import datetime
|
|
13
|
-
from typing import Optional
|
|
14
13
|
|
|
15
14
|
from chia.util.path import path_from_root
|
|
16
15
|
|
|
@@ -184,7 +183,7 @@ async def mem_profile_task(root_path: pathlib.Path, service: str, log: logging.L
|
|
|
184
183
|
|
|
185
184
|
|
|
186
185
|
@asynccontextmanager
|
|
187
|
-
async def enable_profiler(profile: bool) -> AsyncIterator[
|
|
186
|
+
async def enable_profiler(profile: bool) -> AsyncIterator[cProfile.Profile | None]:
|
|
188
187
|
if not profile:
|
|
189
188
|
yield None
|
|
190
189
|
return
|
chia/util/safe_cancel_task.py
CHANGED
|
@@ -4,10 +4,9 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
6
|
import logging
|
|
7
|
-
from typing import Optional
|
|
8
7
|
|
|
9
8
|
|
|
10
|
-
def cancel_task_safe(task:
|
|
9
|
+
def cancel_task_safe(task: asyncio.Task[None] | None, log: logging.Logger | None = None) -> None:
|
|
11
10
|
if task is not None:
|
|
12
11
|
try:
|
|
13
12
|
task.cancel()
|
chia/util/streamable.py
CHANGED
|
@@ -8,13 +8,25 @@ import io
|
|
|
8
8
|
import os
|
|
9
9
|
import pprint
|
|
10
10
|
import traceback
|
|
11
|
-
from collections.abc import Collection
|
|
11
|
+
from collections.abc import Callable, Collection
|
|
12
12
|
from enum import Enum, EnumMeta
|
|
13
|
-
from
|
|
13
|
+
from types import UnionType
|
|
14
|
+
from typing import (
|
|
15
|
+
TYPE_CHECKING,
|
|
16
|
+
Any,
|
|
17
|
+
BinaryIO,
|
|
18
|
+
ClassVar,
|
|
19
|
+
Literal,
|
|
20
|
+
TypeVar,
|
|
21
|
+
Union,
|
|
22
|
+
get_args,
|
|
23
|
+
get_origin,
|
|
24
|
+
get_type_hints,
|
|
25
|
+
)
|
|
14
26
|
|
|
15
27
|
from chia_rs.sized_bytes import bytes32
|
|
16
28
|
from chia_rs.sized_ints import uint16, uint32, uint64
|
|
17
|
-
from typing_extensions import
|
|
29
|
+
from typing_extensions import Self
|
|
18
30
|
|
|
19
31
|
from chia.util.byte_types import hexstr_to_bytes
|
|
20
32
|
from chia.util.hash import std_hash
|
|
@@ -120,7 +132,7 @@ def is_type_SpecificOptional(f_type: object) -> bool:
|
|
|
120
132
|
"""
|
|
121
133
|
Returns true for types such as Optional[T], but not Optional, or T.
|
|
122
134
|
"""
|
|
123
|
-
return get_origin(f_type)
|
|
135
|
+
return get_origin(f_type) in {Union, UnionType} and get_args(f_type)[1]() is None
|
|
124
136
|
|
|
125
137
|
|
|
126
138
|
def is_type_Tuple(f_type: object) -> bool:
|
|
@@ -211,7 +223,7 @@ def streamable_from_dict(klass: type[_T_Streamable], item: Any) -> _T_Streamable
|
|
|
211
223
|
|
|
212
224
|
|
|
213
225
|
def function_to_convert_one_item(
|
|
214
|
-
f_type: type[Any], json_parser:
|
|
226
|
+
f_type: type[Any], json_parser: Callable[[object, type[object]], Streamable] | None = None
|
|
215
227
|
) -> ConvertFunctionType:
|
|
216
228
|
if is_type_SpecificOptional(f_type):
|
|
217
229
|
convert_inner_func = function_to_convert_one_item(get_args(f_type)[0], json_parser)
|
|
@@ -287,13 +299,15 @@ def function_to_post_init_process_one_item(f_type: type[object]) -> ConvertFunct
|
|
|
287
299
|
|
|
288
300
|
|
|
289
301
|
def recurse_jsonify(
|
|
290
|
-
d: Any, next_recursion_step:
|
|
302
|
+
d: Any, next_recursion_step: Callable[[Any, Any], Any] | None = None, **next_recursion_env: Any
|
|
291
303
|
) -> Any:
|
|
292
304
|
"""
|
|
293
305
|
Makes bytes objects into strings with 0x, and makes large ints into strings.
|
|
294
306
|
"""
|
|
295
307
|
if next_recursion_step is None:
|
|
296
308
|
next_recursion_step = recurse_jsonify
|
|
309
|
+
if getattr(d, "json_serialization_override", None) is not None:
|
|
310
|
+
return d.json_serialization_override(d)
|
|
297
311
|
if dataclasses.is_dataclass(d):
|
|
298
312
|
new_dict = {}
|
|
299
313
|
for field in dataclasses.fields(d):
|
|
@@ -324,7 +338,7 @@ def recurse_jsonify(
|
|
|
324
338
|
elif d is None or type(d) is str:
|
|
325
339
|
return d
|
|
326
340
|
elif hasattr(d, "to_json_dict"):
|
|
327
|
-
ret:
|
|
341
|
+
ret: list[Any] | dict[str, Any] | str | int | None = d.to_json_dict()
|
|
328
342
|
return ret
|
|
329
343
|
raise UnsupportedType(f"failed to jsonify {d} (type: {type(d)})")
|
|
330
344
|
|
|
@@ -350,7 +364,7 @@ def write_uint32(f: BinaryIO, value: uint32, byteorder: Literal["little", "big"]
|
|
|
350
364
|
f.write(value.to_bytes(4, byteorder))
|
|
351
365
|
|
|
352
366
|
|
|
353
|
-
def parse_optional(f: BinaryIO, parse_inner_type_f: ParseFunctionType) ->
|
|
367
|
+
def parse_optional(f: BinaryIO, parse_inner_type_f: ParseFunctionType) -> object | None:
|
|
354
368
|
is_present_bytes = f.read(1)
|
|
355
369
|
assert is_present_bytes is not None and len(is_present_bytes) == 1 # Checks for EOF
|
|
356
370
|
if is_present_bytes == bytes([0]):
|
|
@@ -654,12 +668,12 @@ class Streamable:
|
|
|
654
668
|
def parse(cls, f: BinaryIO) -> Self:
|
|
655
669
|
# Create the object without calling __init__() to avoid unnecessary post-init checks in strictdataclass
|
|
656
670
|
obj: Self = object.__new__(cls)
|
|
657
|
-
for field in cls.
|
|
671
|
+
for field in cls.streamable_fields():
|
|
658
672
|
object.__setattr__(obj, field.name, field.parse_function(f))
|
|
659
673
|
return obj
|
|
660
674
|
|
|
661
675
|
def stream(self, f: BinaryIO) -> None:
|
|
662
|
-
for field in self.
|
|
676
|
+
for field in self.streamable_fields():
|
|
663
677
|
field.stream_function(getattr(self, field.name), f)
|
|
664
678
|
|
|
665
679
|
def get_hash(self) -> bytes32:
|
chia/util/task_referencer.py
CHANGED
|
@@ -36,7 +36,7 @@ class _TaskReferencer:
|
|
|
36
36
|
self,
|
|
37
37
|
coroutine: typing.Coroutine[object, object, T],
|
|
38
38
|
*,
|
|
39
|
-
name:
|
|
39
|
+
name: str | None = None,
|
|
40
40
|
known_unreferenced: bool = False,
|
|
41
41
|
) -> asyncio.Task[T]:
|
|
42
42
|
task = asyncio.create_task(coro=coroutine, name=name) # noqa: TID251
|
chia/util/timing.py
CHANGED
|
@@ -5,8 +5,8 @@ from __future__ import annotations
|
|
|
5
5
|
import os
|
|
6
6
|
import sys
|
|
7
7
|
import time
|
|
8
|
-
from collections.abc import Iterator
|
|
9
|
-
from typing import
|
|
8
|
+
from collections.abc import Callable, Iterator
|
|
9
|
+
from typing import overload
|
|
10
10
|
|
|
11
11
|
system_delays = {
|
|
12
12
|
# based on data from https://github.com/Chia-Network/chia-blockchain/pull/13724
|
|
@@ -42,7 +42,7 @@ def adjusted_timeout(timeout: float) -> float: ...
|
|
|
42
42
|
def adjusted_timeout(timeout: None) -> None: ...
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
def adjusted_timeout(timeout:
|
|
45
|
+
def adjusted_timeout(timeout: float | None) -> float | None:
|
|
46
46
|
if timeout is None:
|
|
47
47
|
return None
|
|
48
48
|
|
|
@@ -7,9 +7,10 @@ import json
|
|
|
7
7
|
import os
|
|
8
8
|
import re
|
|
9
9
|
import sys
|
|
10
|
+
from collections.abc import Callable
|
|
10
11
|
from dataclasses import dataclass, field
|
|
11
12
|
from pathlib import Path
|
|
12
|
-
from typing import Any,
|
|
13
|
+
from typing import Any, Literal
|
|
13
14
|
|
|
14
15
|
import click
|
|
15
16
|
import yaml
|
|
@@ -90,7 +91,7 @@ def build_dependency_graph(dir_params: DirectoryParameters) -> dict[Path, list[P
|
|
|
90
91
|
|
|
91
92
|
|
|
92
93
|
def build_virtual_dependency_graph(
|
|
93
|
-
dir_params: DirectoryParameters, *, existing_graph:
|
|
94
|
+
dir_params: DirectoryParameters, *, existing_graph: dict[Path, list[Path]] | None = None
|
|
94
95
|
) -> dict[str, list[str]]:
|
|
95
96
|
if existing_graph is None:
|
|
96
97
|
graph = build_dependency_graph(dir_params)
|
|
@@ -230,7 +231,7 @@ def find_cycles(
|
|
|
230
231
|
return path_accumulator
|
|
231
232
|
|
|
232
233
|
|
|
233
|
-
def print_graph(graph:
|
|
234
|
+
def print_graph(graph: dict[str, list[str]] | dict[Path, list[Path]]) -> None:
|
|
234
235
|
print(json.dumps({str(k): list(str(v) for v in vs) for k, vs in graph.items()}, indent=4))
|
|
235
236
|
|
|
236
237
|
|
|
@@ -288,7 +289,7 @@ class Package:
|
|
|
288
289
|
is_file: Literal[False] = False
|
|
289
290
|
|
|
290
291
|
|
|
291
|
-
FileOrPackage =
|
|
292
|
+
FileOrPackage = File | Package
|
|
292
293
|
|
|
293
294
|
|
|
294
295
|
def parse_file_or_package(identifier: str) -> FileOrPackage:
|
|
@@ -335,7 +336,7 @@ def config(func: Callable[..., None]) -> Callable[..., None]:
|
|
|
335
336
|
default=None,
|
|
336
337
|
help="Path to the YAML configuration file.",
|
|
337
338
|
)
|
|
338
|
-
def inner(config_path:
|
|
339
|
+
def inner(config_path: str | None, *args: Any, **kwargs: Any) -> None:
|
|
339
340
|
exclude_paths = []
|
|
340
341
|
ignore_cycles_in: list[str] = []
|
|
341
342
|
ignore_specific_files: list[str] = []
|