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/config.py
CHANGED
|
@@ -10,20 +10,19 @@ import sys
|
|
|
10
10
|
import tempfile
|
|
11
11
|
import time
|
|
12
12
|
import traceback
|
|
13
|
-
from collections.abc import Iterator
|
|
13
|
+
from collections.abc import Callable, Iterator
|
|
14
14
|
from pathlib import Path
|
|
15
|
-
from typing import Any,
|
|
15
|
+
from typing import Any, Literal, cast
|
|
16
16
|
|
|
17
17
|
import importlib_resources
|
|
18
18
|
import yaml
|
|
19
|
-
from typing_extensions import Literal
|
|
20
19
|
|
|
21
20
|
from chia.util.lock import Lockfile
|
|
22
21
|
|
|
23
22
|
log = logging.getLogger(__name__)
|
|
24
23
|
|
|
25
24
|
|
|
26
|
-
def initial_config_file(filename:
|
|
25
|
+
def initial_config_file(filename: str | Path) -> str:
|
|
27
26
|
initial_config_path = importlib_resources.files(__name__.rpartition(".")[0]).joinpath(f"initial-{filename}")
|
|
28
27
|
contents: str = initial_config_path.read_text(encoding="utf-8")
|
|
29
28
|
return contents
|
|
@@ -43,7 +42,7 @@ def create_default_chia_config(root_path: Path, filenames: list[str] = ["config.
|
|
|
43
42
|
shutil.move(str(tmp_path), str(path))
|
|
44
43
|
|
|
45
44
|
|
|
46
|
-
def config_path_for_filename(root_path: Path, filename:
|
|
45
|
+
def config_path_for_filename(root_path: Path, filename: str | Path) -> Path:
|
|
47
46
|
path_filename = Path(filename)
|
|
48
47
|
if path_filename.is_absolute():
|
|
49
48
|
return path_filename
|
|
@@ -51,7 +50,7 @@ def config_path_for_filename(root_path: Path, filename: Union[str, Path]) -> Pat
|
|
|
51
50
|
|
|
52
51
|
|
|
53
52
|
@contextlib.contextmanager
|
|
54
|
-
def lock_config(root_path: Path, filename:
|
|
53
|
+
def lock_config(root_path: Path, filename: str | Path) -> Iterator[None]:
|
|
55
54
|
# TODO: This is presently used in some tests to lock the saving of the
|
|
56
55
|
# configuration file without having loaded it right there. This usage
|
|
57
56
|
# should probably be removed and this function made private.
|
|
@@ -63,7 +62,7 @@ def lock_config(root_path: Path, filename: Union[str, Path]) -> Iterator[None]:
|
|
|
63
62
|
@contextlib.contextmanager
|
|
64
63
|
def lock_and_load_config(
|
|
65
64
|
root_path: Path,
|
|
66
|
-
filename:
|
|
65
|
+
filename: str | Path,
|
|
67
66
|
fill_missing_services: bool = False,
|
|
68
67
|
) -> Iterator[dict[str, Any]]:
|
|
69
68
|
with lock_config(root_path=root_path, filename=filename):
|
|
@@ -76,7 +75,7 @@ def lock_and_load_config(
|
|
|
76
75
|
yield config
|
|
77
76
|
|
|
78
77
|
|
|
79
|
-
def save_config(root_path: Path, filename:
|
|
78
|
+
def save_config(root_path: Path, filename: str | Path, config_data: Any) -> None:
|
|
80
79
|
# This must be called under an acquired config lock
|
|
81
80
|
path: Path = config_path_for_filename(root_path, filename)
|
|
82
81
|
with tempfile.TemporaryDirectory(dir=path.parent) as tmp_dir:
|
|
@@ -91,8 +90,8 @@ def save_config(root_path: Path, filename: Union[str, Path], config_data: Any) -
|
|
|
91
90
|
|
|
92
91
|
def load_config(
|
|
93
92
|
root_path: Path,
|
|
94
|
-
filename:
|
|
95
|
-
sub_config:
|
|
93
|
+
filename: str | Path,
|
|
94
|
+
sub_config: str | None = None,
|
|
96
95
|
exit_on_error: bool = True,
|
|
97
96
|
fill_missing_services: bool = False,
|
|
98
97
|
) -> dict[str, Any]:
|
|
@@ -108,8 +107,8 @@ def load_config(
|
|
|
108
107
|
|
|
109
108
|
def _load_config_maybe_locked(
|
|
110
109
|
root_path: Path,
|
|
111
|
-
filename:
|
|
112
|
-
sub_config:
|
|
110
|
+
filename: str | Path,
|
|
111
|
+
sub_config: str | None = None,
|
|
113
112
|
exit_on_error: bool = True,
|
|
114
113
|
acquire_lock: bool = True,
|
|
115
114
|
fill_missing_services: bool = False,
|
|
@@ -154,7 +153,7 @@ def _load_config_maybe_locked(
|
|
|
154
153
|
def load_config_cli(
|
|
155
154
|
root_path: Path,
|
|
156
155
|
filename: str,
|
|
157
|
-
sub_config:
|
|
156
|
+
sub_config: str | None = None,
|
|
158
157
|
fill_missing_services: bool = False,
|
|
159
158
|
) -> dict[str, Any]:
|
|
160
159
|
"""
|
|
@@ -215,7 +214,7 @@ def add_property(d: dict[str, Any], partial_key: str, value: Any) -> None:
|
|
|
215
214
|
d[key_1][key_2] = value
|
|
216
215
|
|
|
217
216
|
|
|
218
|
-
def str2bool(v:
|
|
217
|
+
def str2bool(v: str | bool) -> bool:
|
|
219
218
|
# Source from https://stackoverflow.com/questions/15008758/parsing-boolean-values-with-argparse
|
|
220
219
|
if isinstance(v, bool):
|
|
221
220
|
return v
|
|
@@ -254,7 +253,7 @@ def traverse_dict(d: dict[str, Any], key_path: str) -> Any:
|
|
|
254
253
|
|
|
255
254
|
|
|
256
255
|
method_strings = Literal["default", "python_default", "fork", "forkserver", "spawn"]
|
|
257
|
-
method_values =
|
|
256
|
+
method_values = Literal["fork", "forkserver", "spawn"] | None
|
|
258
257
|
start_methods: dict[method_strings, method_values] = {
|
|
259
258
|
"default": None,
|
|
260
259
|
"python_default": None,
|
|
@@ -289,7 +288,7 @@ def process_config_start_method(
|
|
|
289
288
|
return processed_method
|
|
290
289
|
|
|
291
290
|
|
|
292
|
-
def override_config(config: dict[str, Any], config_overrides:
|
|
291
|
+
def override_config(config: dict[str, Any], config_overrides: dict[str, Any] | None) -> dict[str, Any]:
|
|
293
292
|
new_config = copy.deepcopy(config)
|
|
294
293
|
if config_overrides is None:
|
|
295
294
|
return new_config
|
chia/util/db_wrapper.py
CHANGED
|
@@ -12,7 +12,7 @@ from collections.abc import AsyncIterator, Iterable
|
|
|
12
12
|
from dataclasses import dataclass, field
|
|
13
13
|
from datetime import datetime
|
|
14
14
|
from pathlib import Path
|
|
15
|
-
from typing import Any,
|
|
15
|
+
from typing import Any, TextIO
|
|
16
16
|
|
|
17
17
|
import aiosqlite
|
|
18
18
|
import anyio
|
|
@@ -32,7 +32,7 @@ class DBWrapperError(Exception):
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class ForeignKeyError(DBWrapperError):
|
|
35
|
-
def __init__(self, violations: Iterable[
|
|
35
|
+
def __init__(self, violations: Iterable[aiosqlite.Row | tuple[str, object, str, object]]) -> None:
|
|
36
36
|
self.violations: list[dict[str, object]] = []
|
|
37
37
|
|
|
38
38
|
for violation in violations:
|
|
@@ -67,8 +67,8 @@ def generate_in_memory_db_uri() -> str:
|
|
|
67
67
|
|
|
68
68
|
|
|
69
69
|
async def execute_fetchone(
|
|
70
|
-
c: aiosqlite.Connection, sql: str, parameters:
|
|
71
|
-
) ->
|
|
70
|
+
c: aiosqlite.Connection, sql: str, parameters: Iterable[Any] | None = None
|
|
71
|
+
) -> sqlite3.Row | None:
|
|
72
72
|
rows = await c.execute_fetchall(sql, parameters)
|
|
73
73
|
for row in rows:
|
|
74
74
|
return row
|
|
@@ -76,10 +76,10 @@ async def execute_fetchone(
|
|
|
76
76
|
|
|
77
77
|
|
|
78
78
|
async def _create_connection(
|
|
79
|
-
database:
|
|
79
|
+
database: str | Path,
|
|
80
80
|
uri: bool = False,
|
|
81
|
-
log_file:
|
|
82
|
-
name:
|
|
81
|
+
log_file: TextIO | None = None,
|
|
82
|
+
name: str | None = None,
|
|
83
83
|
) -> aiosqlite.Connection:
|
|
84
84
|
# To avoid https://github.com/python/cpython/issues/118172
|
|
85
85
|
connection = await aiosqlite.connect(database=database, uri=uri, cached_statements=0)
|
|
@@ -92,10 +92,10 @@ async def _create_connection(
|
|
|
92
92
|
|
|
93
93
|
@contextlib.asynccontextmanager
|
|
94
94
|
async def manage_connection(
|
|
95
|
-
database:
|
|
95
|
+
database: str | Path,
|
|
96
96
|
uri: bool = False,
|
|
97
|
-
log_file:
|
|
98
|
-
name:
|
|
97
|
+
log_file: TextIO | None = None,
|
|
98
|
+
name: str | None = None,
|
|
99
99
|
) -> AsyncIterator[aiosqlite.Connection]:
|
|
100
100
|
connection: aiosqlite.Connection
|
|
101
101
|
connection = await _create_connection(database=database, uri=uri, log_file=log_file, name=name)
|
|
@@ -107,7 +107,7 @@ async def manage_connection(
|
|
|
107
107
|
await connection.close()
|
|
108
108
|
|
|
109
109
|
|
|
110
|
-
def sql_trace_callback(req: str, file: TextIO, name:
|
|
110
|
+
def sql_trace_callback(req: str, file: TextIO, name: str | None = None) -> None:
|
|
111
111
|
timestamp = datetime.now().strftime("%H:%M:%S.%f")
|
|
112
112
|
if name is not None:
|
|
113
113
|
line = f"{timestamp} {name} {req}\n"
|
|
@@ -120,10 +120,9 @@ def get_host_parameter_limit() -> int:
|
|
|
120
120
|
# NOTE: This does not account for dynamically adjusted limits since it makes a
|
|
121
121
|
# separate db and connection. If aiosqlite adds support we should use it.
|
|
122
122
|
if sys.version_info >= (3, 11):
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
host_parameter_limit = connection.getlimit(limit_number)
|
|
123
|
+
with contextlib.closing(sqlite3.connect(":memory:")) as connection:
|
|
124
|
+
limit_number = sqlite3.SQLITE_LIMIT_VARIABLE_NUMBER
|
|
125
|
+
host_parameter_limit = connection.getlimit(limit_number)
|
|
127
126
|
# guessing based on defaults, seems you can't query
|
|
128
127
|
|
|
129
128
|
# https://www.sqlite.org/changes.html#version_3_32_0
|
|
@@ -140,13 +139,13 @@ def get_host_parameter_limit() -> int:
|
|
|
140
139
|
class DBWrapper2:
|
|
141
140
|
_write_connection: aiosqlite.Connection
|
|
142
141
|
db_version: int = 1
|
|
143
|
-
_log_file:
|
|
142
|
+
_log_file: TextIO | None = None
|
|
144
143
|
host_parameter_limit: int = get_host_parameter_limit()
|
|
145
144
|
_lock: asyncio.Lock = field(default_factory=asyncio.Lock)
|
|
146
145
|
_read_connections: asyncio.Queue[aiosqlite.Connection] = field(default_factory=asyncio.Queue)
|
|
147
146
|
_num_read_connections: int = 0
|
|
148
147
|
_in_use: dict[asyncio.Task[object], aiosqlite.Connection] = field(default_factory=dict)
|
|
149
|
-
_current_writer:
|
|
148
|
+
_current_writer: asyncio.Task[object] | None = None
|
|
150
149
|
_savepoint_name: int = 0
|
|
151
150
|
|
|
152
151
|
async def add_connection(self, c: aiosqlite.Connection) -> None:
|
|
@@ -160,16 +159,16 @@ class DBWrapper2:
|
|
|
160
159
|
@contextlib.asynccontextmanager
|
|
161
160
|
async def managed(
|
|
162
161
|
cls,
|
|
163
|
-
database:
|
|
162
|
+
database: str | Path,
|
|
164
163
|
*,
|
|
165
164
|
db_version: int = 1,
|
|
166
165
|
uri: bool = False,
|
|
167
166
|
reader_count: int = 4,
|
|
168
|
-
log_path:
|
|
167
|
+
log_path: Path | None = None,
|
|
169
168
|
journal_mode: str = "WAL",
|
|
170
|
-
synchronous:
|
|
171
|
-
foreign_keys:
|
|
172
|
-
row_factory:
|
|
169
|
+
synchronous: str | None = None,
|
|
170
|
+
foreign_keys: bool | None = None,
|
|
171
|
+
row_factory: type[aiosqlite.Row] | None = None,
|
|
173
172
|
) -> AsyncIterator[DBWrapper2]:
|
|
174
173
|
if foreign_keys is None:
|
|
175
174
|
foreign_keys = False
|
|
@@ -217,16 +216,16 @@ class DBWrapper2:
|
|
|
217
216
|
@classmethod
|
|
218
217
|
async def create(
|
|
219
218
|
cls,
|
|
220
|
-
database:
|
|
219
|
+
database: str | Path,
|
|
221
220
|
*,
|
|
222
221
|
db_version: int = 1,
|
|
223
222
|
uri: bool = False,
|
|
224
223
|
reader_count: int = 4,
|
|
225
|
-
log_path:
|
|
224
|
+
log_path: Path | None = None,
|
|
226
225
|
journal_mode: str = "WAL",
|
|
227
|
-
synchronous:
|
|
226
|
+
synchronous: str | None = None,
|
|
228
227
|
foreign_keys: bool = False,
|
|
229
|
-
row_factory:
|
|
228
|
+
row_factory: type[aiosqlite.Row] | None = None,
|
|
230
229
|
) -> DBWrapper2:
|
|
231
230
|
# WARNING: please use .managed() instead
|
|
232
231
|
if log_path is None:
|
|
@@ -290,7 +289,7 @@ class DBWrapper2:
|
|
|
290
289
|
@contextlib.asynccontextmanager
|
|
291
290
|
async def writer(
|
|
292
291
|
self,
|
|
293
|
-
foreign_key_enforcement_enabled:
|
|
292
|
+
foreign_key_enforcement_enabled: bool | None = None,
|
|
294
293
|
) -> AsyncIterator[aiosqlite.Connection]:
|
|
295
294
|
"""
|
|
296
295
|
Initiates a new, possibly nested, transaction. If this task is already
|
chia/util/default_root.py
CHANGED
|
@@ -4,7 +4,6 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import os
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
from typing import Optional
|
|
8
7
|
|
|
9
8
|
DEFAULT_ROOT_PATH = Path(os.path.expanduser(os.getenv("CHIA_ROOT", "~/.chia/mainnet"))).resolve()
|
|
10
9
|
|
|
@@ -13,7 +12,7 @@ DEFAULT_KEYS_ROOT_PATH = Path(os.path.expanduser(os.getenv("CHIA_KEYS_ROOT", "~/
|
|
|
13
12
|
SIMULATOR_ROOT_PATH = Path(os.path.expanduser(os.getenv("CHIA_SIMULATOR_ROOT", "~/.chia/simulator"))).resolve()
|
|
14
13
|
|
|
15
14
|
|
|
16
|
-
def resolve_root_path(*, override:
|
|
15
|
+
def resolve_root_path(*, override: Path | None) -> Path:
|
|
17
16
|
candidates = [
|
|
18
17
|
override,
|
|
19
18
|
os.environ.get("CHIA_ROOT"),
|
chia/util/errors.py
CHANGED
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from enum import Enum
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
from typing import Any
|
|
7
|
+
from typing import Any
|
|
8
8
|
|
|
9
9
|
from click import ClickException
|
|
10
10
|
|
|
@@ -227,11 +227,11 @@ class ProtocolError(Exception):
|
|
|
227
227
|
|
|
228
228
|
|
|
229
229
|
class ApiError(Exception):
|
|
230
|
-
def __init__(self, code: Err, message: str, data:
|
|
230
|
+
def __init__(self, code: Err, message: str, data: bytes | None = None):
|
|
231
231
|
super().__init__(f"{code.name}: {message}")
|
|
232
232
|
self.code: Err = code
|
|
233
233
|
self.message: str = message
|
|
234
|
-
self.data:
|
|
234
|
+
self.data: bytes | None = data
|
|
235
235
|
|
|
236
236
|
|
|
237
237
|
##
|
chia/util/file_keyring.py
CHANGED
|
@@ -12,7 +12,7 @@ from dataclasses import asdict, dataclass, field
|
|
|
12
12
|
from hashlib import pbkdf2_hmac
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
from secrets import token_bytes
|
|
15
|
-
from typing import Any,
|
|
15
|
+
from typing import Any, cast
|
|
16
16
|
|
|
17
17
|
import yaml
|
|
18
18
|
from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305 # pyright: reportMissingModuleSource=false
|
|
@@ -106,9 +106,9 @@ class FileKeyringContent:
|
|
|
106
106
|
# Encrypted and base64 encoded keyring data.
|
|
107
107
|
# - The data with CHECKBYTES_VALUE prepended is encrypted using ChaCha20Poly1305.
|
|
108
108
|
# - The symmetric key is derived from the master passphrase using PBKDF2.
|
|
109
|
-
data:
|
|
109
|
+
data: str | None = None
|
|
110
110
|
# An optional passphrase hint
|
|
111
|
-
passphrase_hint:
|
|
111
|
+
passphrase_hint: str | None = None
|
|
112
112
|
|
|
113
113
|
def __post_init__(self) -> None:
|
|
114
114
|
self.salt = convert_byte_type(bytes, self.salt)
|
|
@@ -165,16 +165,16 @@ class FileKeyringContent:
|
|
|
165
165
|
@dataclass(frozen=True)
|
|
166
166
|
class Key:
|
|
167
167
|
secret: bytes
|
|
168
|
-
metadata:
|
|
168
|
+
metadata: dict[str, Any] | None = None
|
|
169
169
|
|
|
170
170
|
@classmethod
|
|
171
|
-
def parse(cls, data: str, metadata:
|
|
171
|
+
def parse(cls, data: str, metadata: dict[str, Any] | None) -> Key:
|
|
172
172
|
return cls(
|
|
173
173
|
bytes.fromhex(data),
|
|
174
174
|
metadata,
|
|
175
175
|
)
|
|
176
176
|
|
|
177
|
-
def to_data(self) ->
|
|
177
|
+
def to_data(self) -> str | dict[str, Any]:
|
|
178
178
|
return self.secret.hex()
|
|
179
179
|
|
|
180
180
|
|
|
@@ -231,7 +231,7 @@ class FileKeyring(FileSystemEventHandler):
|
|
|
231
231
|
needs_load_keyring: bool = False
|
|
232
232
|
# Cache of the decrypted YAML contained in keyring.data
|
|
233
233
|
cached_data_dict: DecryptedKeyringData = field(default_factory=default_file_keyring_data)
|
|
234
|
-
keyring_last_mod_time:
|
|
234
|
+
keyring_last_mod_time: float | None = None
|
|
235
235
|
# Key/value pairs to set on the outer payload on the next write
|
|
236
236
|
file_content_properties_for_next_write: dict[str, Any] = field(default_factory=dict)
|
|
237
237
|
|
|
@@ -284,7 +284,7 @@ class FileKeyring(FileSystemEventHandler):
|
|
|
284
284
|
self.keyring_observer.stop()
|
|
285
285
|
self.keyring_observer.join()
|
|
286
286
|
|
|
287
|
-
def on_modified(self, event:
|
|
287
|
+
def on_modified(self, event: FileSystemEvent | DirModifiedEvent) -> None:
|
|
288
288
|
self.check_if_keyring_file_modified()
|
|
289
289
|
|
|
290
290
|
def check_if_keyring_file_modified(self) -> None:
|
|
@@ -316,7 +316,7 @@ class FileKeyring(FileSystemEventHandler):
|
|
|
316
316
|
"""
|
|
317
317
|
return self.cached_data_dict.labels
|
|
318
318
|
|
|
319
|
-
def get_key(self, service: str, user: str) ->
|
|
319
|
+
def get_key(self, service: str, user: str) -> Key | None:
|
|
320
320
|
"""
|
|
321
321
|
Returns the passphrase named by the 'user' parameter from the cached
|
|
322
322
|
keyring data (does not force a read from disk)
|
|
@@ -350,7 +350,7 @@ class FileKeyring(FileSystemEventHandler):
|
|
|
350
350
|
keys.pop(service)
|
|
351
351
|
self.write_keyring()
|
|
352
352
|
|
|
353
|
-
def get_label(self, fingerprint: int) ->
|
|
353
|
+
def get_label(self, fingerprint: int) -> str | None:
|
|
354
354
|
"""
|
|
355
355
|
Returns the label for the given fingerprint or None if there is no label assigned.
|
|
356
356
|
"""
|
|
@@ -405,7 +405,7 @@ class FileKeyring(FileSystemEventHandler):
|
|
|
405
405
|
except Exception:
|
|
406
406
|
return False
|
|
407
407
|
|
|
408
|
-
def load_keyring(self, passphrase:
|
|
408
|
+
def load_keyring(self, passphrase: str | None = None) -> None:
|
|
409
409
|
from chia.util.keyring_wrapper import obtain_current_passphrase
|
|
410
410
|
|
|
411
411
|
with self.load_keyring_lock:
|
|
@@ -450,18 +450,18 @@ class FileKeyring(FileSystemEventHandler):
|
|
|
450
450
|
# Restore the correct content if we failed to write the updated cache, let it re-raise if loading also fails
|
|
451
451
|
self.cached_file_content = FileKeyringContent.create_from_path(self.keyring_path)
|
|
452
452
|
|
|
453
|
-
def get_passphrase_hint(self) ->
|
|
453
|
+
def get_passphrase_hint(self) -> str | None:
|
|
454
454
|
"""
|
|
455
455
|
Return the passphrase hint (if set). The hint data may not yet be written to the keyring, so we
|
|
456
456
|
return the hint data either from the staging dict (file_content_properties_for_next_write), or
|
|
457
457
|
from cached_file_content (loaded from the keyring)
|
|
458
458
|
"""
|
|
459
|
-
passphrase_hint:
|
|
459
|
+
passphrase_hint: str | None = self.file_content_properties_for_next_write.get("passphrase_hint", None)
|
|
460
460
|
if passphrase_hint is None:
|
|
461
461
|
passphrase_hint = self.cached_file_content.passphrase_hint
|
|
462
462
|
return passphrase_hint
|
|
463
463
|
|
|
464
|
-
def set_passphrase_hint(self, passphrase_hint:
|
|
464
|
+
def set_passphrase_hint(self, passphrase_hint: str | None) -> None:
|
|
465
465
|
"""
|
|
466
466
|
Store the new passphrase hint in the staging dict (file_content_properties_for_next_write) to
|
|
467
467
|
be written-out on the next write to the keyring.
|
chia/util/files.py
CHANGED
|
@@ -7,10 +7,9 @@ import logging
|
|
|
7
7
|
import os
|
|
8
8
|
import shutil
|
|
9
9
|
from pathlib import Path
|
|
10
|
-
from typing import
|
|
10
|
+
from typing import Literal
|
|
11
11
|
|
|
12
12
|
from aiofiles import tempfile
|
|
13
|
-
from typing_extensions import Literal
|
|
14
13
|
|
|
15
14
|
log = logging.getLogger(__name__)
|
|
16
15
|
|
|
@@ -63,7 +62,7 @@ async def move_file_async(src: Path, dst: Path, *, reattempts: int = 6, reattemp
|
|
|
63
62
|
|
|
64
63
|
|
|
65
64
|
async def write_file_async(
|
|
66
|
-
file_path: Path, data:
|
|
65
|
+
file_path: Path, data: str | bytes, *, file_mode: int = 0o600, dir_mode: int = 0o700
|
|
67
66
|
) -> None:
|
|
68
67
|
"""
|
|
69
68
|
Writes the provided data to a temporary file and then moves it to the final destination.
|
chia/util/hash.py
CHANGED
|
@@ -3,24 +3,24 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from hashlib import sha256
|
|
6
|
-
from typing import Literal, SupportsBytes,
|
|
6
|
+
from typing import Literal, SupportsBytes, cast, overload
|
|
7
7
|
|
|
8
8
|
from chia_rs.sized_bytes import bytes32
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
@overload
|
|
12
|
-
def std_hash(b:
|
|
12
|
+
def std_hash(b: bytes | SupportsBytes) -> bytes32: ...
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
@overload
|
|
16
|
-
def std_hash(b:
|
|
16
|
+
def std_hash(b: bytes | SupportsBytes, skip_bytes_conversion: Literal[False]) -> bytes32: ...
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
@overload
|
|
20
20
|
def std_hash(b: bytes, skip_bytes_conversion: Literal[True]) -> bytes32: ...
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
def std_hash(b:
|
|
23
|
+
def std_hash(b: bytes | SupportsBytes, skip_bytes_conversion: bool = False) -> bytes32:
|
|
24
24
|
"""
|
|
25
25
|
The standard hash used in many places.
|
|
26
26
|
"""
|
chia/util/initial-config.yaml
CHANGED
|
@@ -20,7 +20,7 @@ network_overrides: &network_overrides
|
|
|
20
20
|
GENESIS_PRE_FARM_FARMER_PUZZLE_HASH: "3d8765d3a597ec1d99663f6c9816d915b9f68613ac94009884c4addaefcce6af"
|
|
21
21
|
testnet0:
|
|
22
22
|
MIN_PLOT_SIZE_V1: 18
|
|
23
|
-
|
|
23
|
+
PLOT_SIZE_V2: 18
|
|
24
24
|
GENESIS_CHALLENGE: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
|
|
25
25
|
GENESIS_PRE_FARM_POOL_PUZZLE_HASH: "d23da14695a188ae5708dd152263c4db883eb27edeb936178d4d988b8f3ce5fc"
|
|
26
26
|
GENESIS_PRE_FARM_FARMER_PUZZLE_HASH: "3d8765d3a597ec1d99663f6c9816d915b9f68613ac94009884c4addaefcce6af"
|
|
@@ -34,11 +34,11 @@ network_overrides: &network_overrides
|
|
|
34
34
|
GENESIS_PRE_FARM_POOL_PUZZLE_HASH: 3ef7c233fc0785f3c0cae5992c1d35e7c955ca37a423571c1607ba392a9d12f7
|
|
35
35
|
MEMPOOL_BLOCK_BUFFER: 10
|
|
36
36
|
MIN_PLOT_SIZE_V1: 18
|
|
37
|
-
MIN_PLOT_SIZE_V2: 20
|
|
38
37
|
NETWORK_TYPE: 1
|
|
39
38
|
SUB_SLOT_ITERS_STARTING: 67108864
|
|
40
39
|
# Forks activated from the beginning on this network
|
|
41
40
|
HARD_FORK_HEIGHT: 0
|
|
41
|
+
SOFT_FORK8_HEIGHT: 3680000
|
|
42
42
|
PLOT_FILTER_128_HEIGHT: 6029568
|
|
43
43
|
PLOT_FILTER_64_HEIGHT: 11075328
|
|
44
44
|
PLOT_FILTER_32_HEIGHT: 16121088
|
|
@@ -51,10 +51,9 @@ network_overrides: &network_overrides
|
|
|
51
51
|
GENESIS_PRE_FARM_FARMER_PUZZLE_HASH: 08296fc227decd043aee855741444538e4cc9a31772c4d1a9e6242d1e777e42a
|
|
52
52
|
GENESIS_PRE_FARM_POOL_PUZZLE_HASH: 08296fc227decd043aee855741444538e4cc9a31772c4d1a9e6242d1e777e42a
|
|
53
53
|
MEMPOOL_BLOCK_BUFFER: 10
|
|
54
|
-
MIN_PLOT_SIZE_V1: 18
|
|
55
|
-
MIN_PLOT_SIZE_V2: 20
|
|
56
54
|
NETWORK_TYPE: 1
|
|
57
55
|
SUB_SLOT_ITERS_STARTING: 67108864
|
|
56
|
+
HARD_FORK_HEIGHT: 3693395
|
|
58
57
|
config:
|
|
59
58
|
mainnet:
|
|
60
59
|
address_prefix: "xch"
|
|
@@ -657,7 +656,7 @@ solver:
|
|
|
657
656
|
selected_network: *selected_network
|
|
658
657
|
|
|
659
658
|
# Number of threads for solver operations
|
|
660
|
-
num_threads:
|
|
659
|
+
num_threads: 1
|
|
661
660
|
|
|
662
661
|
# RPC server configuration
|
|
663
662
|
rpc_port: 8667
|
chia/util/inline_executor.py
CHANGED
chia/util/ip_address.py
CHANGED
|
@@ -2,12 +2,11 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from ipaddress import IPv4Address, IPv6Address, ip_address
|
|
5
|
-
from typing import Union
|
|
6
5
|
|
|
7
6
|
|
|
8
7
|
@dataclass(frozen=True)
|
|
9
8
|
class IPAddress:
|
|
10
|
-
_inner:
|
|
9
|
+
_inner: IPv4Address | IPv6Address
|
|
11
10
|
|
|
12
11
|
@classmethod
|
|
13
12
|
def create(cls, ip: str) -> IPAddress:
|