chia-blockchain 2.5.7rc3__py3-none-any.whl → 2.5.8rc1__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_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 +59 -30
- 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 +225 -62
- 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 +109 -25
- chia/_tests/core/mempool/test_mempool.py +29 -37
- 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 +963 -839
- 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 +8 -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 +43 -47
- 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 +4 -6
- 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 +14 -14
- 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 +372 -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 +16 -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 +42 -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 +12 -7
- 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 +238 -224
- chia/full_node/full_node_api.py +193 -150
- chia/full_node/full_node_rpc_api.py +53 -31
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- 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 +34 -13
- 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 +16 -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 +3 -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 +22 -8
- 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 +120 -105
- 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.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
- 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.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import ClassVar
|
|
5
|
+
|
|
6
|
+
from typing_extensions import Protocol
|
|
7
|
+
|
|
8
|
+
from chia.protocols.introducer_protocol import RequestPeersIntroducer
|
|
9
|
+
from chia.protocols.outbound_message import Message
|
|
10
|
+
from chia.server.api_protocol import ApiMetadata, ApiProtocol
|
|
11
|
+
from chia.server.ws_connection import WSChiaConnection
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class IntroducerApiStub(ApiProtocol, Protocol):
|
|
15
|
+
"""Non-functional API stub for IntroducerAPI
|
|
16
|
+
|
|
17
|
+
This is a protocol definition only - methods are not implemented and should
|
|
18
|
+
never be called. Use the actual IntroducerAPI implementation at runtime.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
log: logging.Logger
|
|
22
|
+
metadata: ClassVar[ApiMetadata] = ApiMetadata()
|
|
23
|
+
|
|
24
|
+
def ready(self) -> bool:
|
|
25
|
+
"""Check if the introducer is ready."""
|
|
26
|
+
...
|
|
27
|
+
|
|
28
|
+
@metadata.request(peer_required=True)
|
|
29
|
+
async def request_peers_introducer(
|
|
30
|
+
self,
|
|
31
|
+
request: RequestPeersIntroducer,
|
|
32
|
+
peer: WSChiaConnection,
|
|
33
|
+
) -> Message | None:
|
|
34
|
+
"""Handle request for peers from a node."""
|
|
35
|
+
...
|
chia/apis/solver_stub.py
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import ClassVar
|
|
5
|
+
|
|
6
|
+
from typing_extensions import Protocol
|
|
7
|
+
|
|
8
|
+
from chia.protocols.outbound_message import Message
|
|
9
|
+
from chia.protocols.solver_protocol import SolverInfo
|
|
10
|
+
from chia.server.api_protocol import ApiMetadata, ApiProtocol
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class SolverApiStub(ApiProtocol, Protocol):
|
|
14
|
+
"""Non-functional API stub for SolverAPI
|
|
15
|
+
|
|
16
|
+
This is a protocol definition only - methods are not implemented and should
|
|
17
|
+
never be called. Use the actual SolverAPI implementation at runtime.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
log: logging.Logger
|
|
21
|
+
metadata: ClassVar[ApiMetadata] = ApiMetadata()
|
|
22
|
+
|
|
23
|
+
def ready(self) -> bool:
|
|
24
|
+
"""Check if the solver is ready."""
|
|
25
|
+
...
|
|
26
|
+
|
|
27
|
+
@metadata.request(peer_required=False)
|
|
28
|
+
async def solve(self, request: SolverInfo) -> Message | None:
|
|
29
|
+
"""Handle solver request."""
|
|
30
|
+
...
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from chia.apis.farmer_stub import FarmerApiStub
|
|
4
|
+
from chia.apis.full_node_stub import FullNodeApiStub
|
|
5
|
+
from chia.apis.harvester_stub import HarvesterApiStub
|
|
6
|
+
from chia.apis.introducer_stub import IntroducerApiStub
|
|
7
|
+
from chia.apis.solver_stub import SolverApiStub
|
|
8
|
+
from chia.apis.timelord_stub import TimelordApiStub
|
|
9
|
+
from chia.apis.wallet_stub import WalletNodeApiStub
|
|
10
|
+
from chia.protocols.outbound_message import NodeType
|
|
11
|
+
from chia.server.api_protocol import ApiMetadata
|
|
12
|
+
|
|
13
|
+
StubMetadataRegistry: dict[NodeType, ApiMetadata] = {
|
|
14
|
+
NodeType.FULL_NODE: FullNodeApiStub.metadata,
|
|
15
|
+
NodeType.WALLET: WalletNodeApiStub.metadata,
|
|
16
|
+
NodeType.INTRODUCER: IntroducerApiStub.metadata,
|
|
17
|
+
NodeType.TIMELORD: TimelordApiStub.metadata,
|
|
18
|
+
NodeType.FARMER: FarmerApiStub.metadata,
|
|
19
|
+
NodeType.HARVESTER: HarvesterApiStub.metadata,
|
|
20
|
+
NodeType.SOLVER: SolverApiStub.metadata,
|
|
21
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import ClassVar
|
|
5
|
+
|
|
6
|
+
from typing_extensions import Protocol
|
|
7
|
+
|
|
8
|
+
from chia.protocols.timelord_protocol import NewPeakTimelord, NewUnfinishedBlockTimelord, RequestCompactProofOfTime
|
|
9
|
+
from chia.server.api_protocol import ApiMetadata, ApiProtocol
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class TimelordApiStub(ApiProtocol, Protocol):
|
|
13
|
+
"""Non-functional API stub for TimelordAPI
|
|
14
|
+
|
|
15
|
+
This is a protocol definition only - methods are not implemented and should
|
|
16
|
+
never be called. Use the actual TimelordAPI implementation at runtime.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
log: logging.Logger
|
|
20
|
+
metadata: ClassVar[ApiMetadata] = ApiMetadata()
|
|
21
|
+
|
|
22
|
+
def ready(self) -> bool:
|
|
23
|
+
"""Check if the timelord is ready."""
|
|
24
|
+
...
|
|
25
|
+
|
|
26
|
+
@metadata.request()
|
|
27
|
+
async def new_peak_timelord(self, new_peak: NewPeakTimelord) -> None:
|
|
28
|
+
"""Handle new peak from full node."""
|
|
29
|
+
...
|
|
30
|
+
|
|
31
|
+
@metadata.request()
|
|
32
|
+
async def new_unfinished_block_timelord(self, new_unfinished_block: NewUnfinishedBlockTimelord) -> None:
|
|
33
|
+
"""Handle new unfinished block from full node."""
|
|
34
|
+
...
|
|
35
|
+
|
|
36
|
+
@metadata.request()
|
|
37
|
+
async def request_compact_proof_of_time(self, vdf_info: RequestCompactProofOfTime) -> None:
|
|
38
|
+
"""Handle request for compact proof of time."""
|
|
39
|
+
...
|
chia/apis/wallet_stub.py
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import ClassVar
|
|
5
|
+
|
|
6
|
+
from chia_rs import RespondToPhUpdates
|
|
7
|
+
from typing_extensions import Protocol
|
|
8
|
+
|
|
9
|
+
from chia.protocols import full_node_protocol, introducer_protocol, wallet_protocol
|
|
10
|
+
from chia.protocols.wallet_protocol import (
|
|
11
|
+
CoinStateUpdate,
|
|
12
|
+
RejectAdditionsRequest,
|
|
13
|
+
RejectBlockHeaders,
|
|
14
|
+
RejectHeaderBlocks,
|
|
15
|
+
RejectHeaderRequest,
|
|
16
|
+
RejectPuzzleSolution,
|
|
17
|
+
RejectRemovalsRequest,
|
|
18
|
+
RespondAdditions,
|
|
19
|
+
RespondBlockHeader,
|
|
20
|
+
RespondBlockHeaders,
|
|
21
|
+
RespondChildren,
|
|
22
|
+
RespondHeaderBlocks,
|
|
23
|
+
RespondPuzzleSolution,
|
|
24
|
+
RespondRemovals,
|
|
25
|
+
RespondSESInfo,
|
|
26
|
+
RespondToCoinUpdates,
|
|
27
|
+
TransactionAck,
|
|
28
|
+
)
|
|
29
|
+
from chia.server.api_protocol import ApiMetadata, ApiProtocol
|
|
30
|
+
from chia.server.ws_connection import WSChiaConnection
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class WalletNodeApiStub(ApiProtocol, Protocol):
|
|
34
|
+
"""Non-functional API stub for WalletNodeAPI
|
|
35
|
+
|
|
36
|
+
This is a protocol definition only - methods are not implemented and should
|
|
37
|
+
never be called. Use the actual WalletNodeAPI implementation at runtime.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
log: logging.Logger
|
|
41
|
+
metadata: ClassVar[ApiMetadata] = ApiMetadata()
|
|
42
|
+
|
|
43
|
+
def ready(self) -> bool:
|
|
44
|
+
"""Check if the wallet is ready."""
|
|
45
|
+
...
|
|
46
|
+
|
|
47
|
+
@metadata.request(peer_required=True)
|
|
48
|
+
async def respond_removals(self, response: RespondRemovals, peer: WSChiaConnection) -> None:
|
|
49
|
+
"""Handle removals response from full node."""
|
|
50
|
+
...
|
|
51
|
+
|
|
52
|
+
async def reject_removals_request(self, response: RejectRemovalsRequest, peer: WSChiaConnection) -> None:
|
|
53
|
+
"""Handle reject removals request from full node."""
|
|
54
|
+
...
|
|
55
|
+
|
|
56
|
+
@metadata.request()
|
|
57
|
+
async def reject_additions_request(self, response: RejectAdditionsRequest) -> None:
|
|
58
|
+
"""Handle reject additions request from full node."""
|
|
59
|
+
...
|
|
60
|
+
|
|
61
|
+
@metadata.request(peer_required=True, execute_task=True)
|
|
62
|
+
async def new_peak_wallet(self, peak: wallet_protocol.NewPeakWallet, peer: WSChiaConnection) -> None:
|
|
63
|
+
"""Handle new peak from full node."""
|
|
64
|
+
...
|
|
65
|
+
|
|
66
|
+
@metadata.request()
|
|
67
|
+
async def reject_header_request(self, response: RejectHeaderRequest) -> None:
|
|
68
|
+
"""Handle reject header request from full node."""
|
|
69
|
+
...
|
|
70
|
+
|
|
71
|
+
@metadata.request()
|
|
72
|
+
async def respond_block_header(self, response: RespondBlockHeader) -> None:
|
|
73
|
+
"""Handle block header response from full node."""
|
|
74
|
+
...
|
|
75
|
+
|
|
76
|
+
@metadata.request(peer_required=True)
|
|
77
|
+
async def respond_additions(self, response: RespondAdditions, peer: WSChiaConnection) -> None:
|
|
78
|
+
"""Handle additions response from full node."""
|
|
79
|
+
...
|
|
80
|
+
|
|
81
|
+
@metadata.request()
|
|
82
|
+
async def respond_proof_of_weight(self, response: full_node_protocol.RespondProofOfWeight) -> None:
|
|
83
|
+
"""Handle proof of weight response from full node."""
|
|
84
|
+
...
|
|
85
|
+
|
|
86
|
+
@metadata.request(peer_required=True)
|
|
87
|
+
async def transaction_ack(self, ack: TransactionAck, peer: WSChiaConnection) -> None:
|
|
88
|
+
"""Handle transaction acknowledgment from full node."""
|
|
89
|
+
...
|
|
90
|
+
|
|
91
|
+
@metadata.request(peer_required=True)
|
|
92
|
+
async def respond_peers_introducer(
|
|
93
|
+
self, request: introducer_protocol.RespondPeersIntroducer, peer: WSChiaConnection
|
|
94
|
+
) -> None:
|
|
95
|
+
"""Handle peers response from introducer."""
|
|
96
|
+
...
|
|
97
|
+
|
|
98
|
+
@metadata.request(peer_required=True)
|
|
99
|
+
async def respond_peers(self, request: full_node_protocol.RespondPeers, peer: WSChiaConnection) -> None:
|
|
100
|
+
"""Handle peers response from full node."""
|
|
101
|
+
...
|
|
102
|
+
|
|
103
|
+
@metadata.request()
|
|
104
|
+
async def respond_puzzle_solution(self, request: RespondPuzzleSolution) -> None:
|
|
105
|
+
"""Handle puzzle solution response from full node."""
|
|
106
|
+
...
|
|
107
|
+
|
|
108
|
+
@metadata.request()
|
|
109
|
+
async def reject_puzzle_solution(self, request: RejectPuzzleSolution) -> None:
|
|
110
|
+
"""Handle reject puzzle solution from full node."""
|
|
111
|
+
...
|
|
112
|
+
|
|
113
|
+
@metadata.request()
|
|
114
|
+
async def respond_header_blocks(self, request: RespondHeaderBlocks) -> None:
|
|
115
|
+
"""Handle header blocks response from full node."""
|
|
116
|
+
...
|
|
117
|
+
|
|
118
|
+
@metadata.request()
|
|
119
|
+
async def respond_block_headers(self, request: RespondBlockHeaders) -> None:
|
|
120
|
+
"""Handle block headers response from full node."""
|
|
121
|
+
...
|
|
122
|
+
|
|
123
|
+
@metadata.request()
|
|
124
|
+
async def reject_header_blocks(self, request: RejectHeaderBlocks) -> None:
|
|
125
|
+
"""Handle reject header blocks from full node."""
|
|
126
|
+
...
|
|
127
|
+
|
|
128
|
+
@metadata.request()
|
|
129
|
+
async def reject_block_headers(self, request: RejectBlockHeaders) -> None:
|
|
130
|
+
"""Handle reject block headers from full node."""
|
|
131
|
+
...
|
|
132
|
+
|
|
133
|
+
@metadata.request(peer_required=True, execute_task=True)
|
|
134
|
+
async def coin_state_update(self, request: CoinStateUpdate, peer: WSChiaConnection) -> None:
|
|
135
|
+
"""Handle coin state update from full node."""
|
|
136
|
+
...
|
|
137
|
+
|
|
138
|
+
@metadata.request() # type: ignore[type-var]
|
|
139
|
+
async def respond_to_ph_updates(self, request: RespondToPhUpdates) -> None:
|
|
140
|
+
"""Handle puzzle hash updates response from full node."""
|
|
141
|
+
...
|
|
142
|
+
|
|
143
|
+
@metadata.request()
|
|
144
|
+
async def respond_to_coin_updates(self, request: RespondToCoinUpdates) -> None:
|
|
145
|
+
"""Handle coin updates response from full node."""
|
|
146
|
+
...
|
|
147
|
+
|
|
148
|
+
@metadata.request()
|
|
149
|
+
async def respond_children(self, request: RespondChildren) -> None:
|
|
150
|
+
"""Handle children response from full node."""
|
|
151
|
+
...
|
|
152
|
+
|
|
153
|
+
@metadata.request()
|
|
154
|
+
async def respond_ses_hashes(self, request: RespondSESInfo) -> None:
|
|
155
|
+
"""Handle SES hashes response from full node."""
|
|
156
|
+
...
|
|
157
|
+
|
|
158
|
+
@metadata.request()
|
|
159
|
+
async def respond_blocks(self, request: full_node_protocol.RespondBlocks) -> None:
|
|
160
|
+
"""Handle blocks response from full node."""
|
|
161
|
+
...
|
chia/cmds/beta.py
CHANGED
|
@@ -3,7 +3,6 @@ from __future__ import annotations
|
|
|
3
3
|
import zipfile
|
|
4
4
|
from datetime import datetime
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Optional
|
|
7
6
|
|
|
8
7
|
import click
|
|
9
8
|
|
|
@@ -37,7 +36,7 @@ def beta_cmd() -> None:
|
|
|
37
36
|
@click.option("-p", "--path", help="The beta mode root path", type=str, required=False)
|
|
38
37
|
@click.option("-i", "--interval", help="System metrics will be logged based on this interval", type=int, required=False)
|
|
39
38
|
@click.pass_context
|
|
40
|
-
def configure(ctx: click.Context, path:
|
|
39
|
+
def configure(ctx: click.Context, path: str | None, interval: int | None) -> None:
|
|
41
40
|
root_path = ChiaCliContext.set_default(ctx).root_path
|
|
42
41
|
with lock_and_load_config(root_path, "config.yaml") as config:
|
|
43
42
|
if "beta" not in config:
|
|
@@ -79,7 +78,7 @@ def configure(ctx: click.Context, path: Optional[str], interval: Optional[int])
|
|
|
79
78
|
)
|
|
80
79
|
@click.option("-p", "--path", help="The beta mode root path", type=str, required=False)
|
|
81
80
|
@click.pass_context
|
|
82
|
-
def enable_cmd(ctx: click.Context, force: bool, path:
|
|
81
|
+
def enable_cmd(ctx: click.Context, force: bool, path: str | None) -> None:
|
|
83
82
|
root_path = ChiaCliContext.set_default(ctx).root_path
|
|
84
83
|
with lock_and_load_config(root_path, "config.yaml") as config:
|
|
85
84
|
if config.get("beta", {}).get("enabled", False):
|
|
@@ -92,7 +91,7 @@ def enable_cmd(ctx: click.Context, force: bool, path: Optional[str]) -> None:
|
|
|
92
91
|
current_path = config.get("beta", {}).get("path")
|
|
93
92
|
current_path = None if current_path is None else Path(current_path)
|
|
94
93
|
|
|
95
|
-
path_to_use:
|
|
94
|
+
path_to_use: Path | None = None if path is None else Path(path)
|
|
96
95
|
if path_to_use is None:
|
|
97
96
|
path_to_use = current_path
|
|
98
97
|
|
chia/cmds/beta_funcs.py
CHANGED
|
@@ -2,8 +2,9 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
4
|
import sys
|
|
5
|
+
from collections.abc import Callable
|
|
5
6
|
from pathlib import Path
|
|
6
|
-
from typing import Any
|
|
7
|
+
from typing import Any
|
|
7
8
|
|
|
8
9
|
import click
|
|
9
10
|
|
|
@@ -36,7 +37,7 @@ def prompt_beta_warning() -> bool:
|
|
|
36
37
|
|
|
37
38
|
|
|
38
39
|
def prompt_for_beta_path(default_path: Path) -> Path:
|
|
39
|
-
path:
|
|
40
|
+
path: Path | None = None
|
|
40
41
|
for _ in range(3):
|
|
41
42
|
user_input = input(
|
|
42
43
|
"\nEnter a directory where the beta test logs can be stored or press enter to use the default "
|
|
@@ -65,7 +66,7 @@ def prompt_for_beta_path(default_path: Path) -> Path:
|
|
|
65
66
|
|
|
66
67
|
|
|
67
68
|
def prompt_for_metrics_log_interval(default_interval: int) -> int:
|
|
68
|
-
interval:
|
|
69
|
+
interval: int | None = None
|
|
69
70
|
for _ in range(3):
|
|
70
71
|
user_input = input(
|
|
71
72
|
"\nEnter a number of seconds as interval in which analytics getting logged, press enter to use the default "
|
chia/cmds/check_wallet_db.py
CHANGED
|
@@ -6,7 +6,7 @@ from collections import defaultdict
|
|
|
6
6
|
from collections.abc import Iterable
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
from sqlite3 import Row
|
|
9
|
-
from typing import Any
|
|
9
|
+
from typing import Any
|
|
10
10
|
|
|
11
11
|
from chia.util.collection import find_duplicates
|
|
12
12
|
from chia.util.db_synchronous import db_synchronous_on
|
|
@@ -208,7 +208,7 @@ class WalletDBReader:
|
|
|
208
208
|
db_wrapper: DBWrapper2 # TODO: Remove db_wrapper member
|
|
209
209
|
# TODO: make this a dataclass and make this an instance attribute instead of a mutable classvar
|
|
210
210
|
config = {"db_readers": 1} # noqa: RUF012
|
|
211
|
-
sql_log_path:
|
|
211
|
+
sql_log_path: Path | None = None
|
|
212
212
|
verbose = False
|
|
213
213
|
|
|
214
214
|
async def get_all_wallets(self) -> list[Wallet]:
|
|
@@ -258,7 +258,7 @@ class WalletDBReader:
|
|
|
258
258
|
except Exception as e:
|
|
259
259
|
errors.append(f"Exception while trying to access wallet {main_wallet_id} from users_wallets: {e}")
|
|
260
260
|
|
|
261
|
-
max_id:
|
|
261
|
+
max_id: int | None = None
|
|
262
262
|
max_id_row = await execute_fetchone(reader, "SELECT MAX(id) FROM users_wallets")
|
|
263
263
|
if max_id_row is None:
|
|
264
264
|
errors.append("Error fetching max wallet ID from table users_wallets. No wallets ?!?")
|
|
@@ -397,7 +397,7 @@ class WalletDBReader:
|
|
|
397
397
|
return len(errors)
|
|
398
398
|
|
|
399
399
|
|
|
400
|
-
async def scan(root_path: Path, db_path:
|
|
400
|
+
async def scan(root_path: Path, db_path: str | None = None, *, verbose: bool = False) -> None:
|
|
401
401
|
if db_path is None:
|
|
402
402
|
wallet_db_path = root_path / "wallet" / "db"
|
|
403
403
|
wallet_db_paths = list(wallet_db_path.glob("blockchain_wallet_*.sqlite"))
|
chia/cmds/chia.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from io import TextIOWrapper
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
import click
|
|
7
6
|
|
|
@@ -60,7 +59,7 @@ def cli(
|
|
|
60
59
|
ctx: click.Context,
|
|
61
60
|
root_path: str,
|
|
62
61
|
keys_root_path: str,
|
|
63
|
-
passphrase_file:
|
|
62
|
+
passphrase_file: TextIOWrapper | None = None,
|
|
64
63
|
) -> None:
|
|
65
64
|
from pathlib import Path
|
|
66
65
|
|
chia/cmds/cmd_classes.py
CHANGED
|
@@ -5,14 +5,12 @@ import collections
|
|
|
5
5
|
import dataclasses
|
|
6
6
|
import inspect
|
|
7
7
|
import pathlib
|
|
8
|
+
from collections.abc import Callable
|
|
8
9
|
from dataclasses import MISSING, dataclass, field, fields
|
|
9
10
|
from typing import (
|
|
10
11
|
Any,
|
|
11
|
-
Callable,
|
|
12
12
|
ClassVar,
|
|
13
|
-
Optional,
|
|
14
13
|
Protocol,
|
|
15
|
-
Union,
|
|
16
14
|
final,
|
|
17
15
|
get_args,
|
|
18
16
|
get_origin,
|
|
@@ -40,7 +38,7 @@ class AsyncChiaCommand(Protocol):
|
|
|
40
38
|
async def run(self) -> None: ...
|
|
41
39
|
|
|
42
40
|
|
|
43
|
-
ChiaCommand =
|
|
41
|
+
ChiaCommand = SyncChiaCommand | AsyncChiaCommand
|
|
44
42
|
|
|
45
43
|
|
|
46
44
|
def option(*param_decls: str, **kwargs: Any) -> Any:
|
|
@@ -62,11 +60,11 @@ class ChiaCliContext:
|
|
|
62
60
|
|
|
63
61
|
root_path: pathlib.Path = DEFAULT_ROOT_PATH
|
|
64
62
|
keys_root_path: pathlib.Path = DEFAULT_KEYS_ROOT_PATH
|
|
65
|
-
expected_prefix:
|
|
66
|
-
rpc_port:
|
|
67
|
-
keys_fingerprint:
|
|
68
|
-
keys_filename:
|
|
69
|
-
expected_address_prefix:
|
|
63
|
+
expected_prefix: str | None = None
|
|
64
|
+
rpc_port: int | None = None
|
|
65
|
+
keys_fingerprint: int | None = None
|
|
66
|
+
keys_filename: str | None = None
|
|
67
|
+
expected_address_prefix: str | None = None
|
|
70
68
|
|
|
71
69
|
@classmethod
|
|
72
70
|
def set_default(cls, ctx: click.Context) -> ChiaCliContext:
|
|
@@ -82,7 +80,7 @@ class ChiaCliContext:
|
|
|
82
80
|
class HexString(click.ParamType):
|
|
83
81
|
name = "hexstring"
|
|
84
82
|
|
|
85
|
-
def convert(self, value: str, param:
|
|
83
|
+
def convert(self, value: str, param: click.Parameter | None, ctx: click.Context | None) -> bytes:
|
|
86
84
|
if isinstance(value, bytes): # This if is due to some poor handling on click's part
|
|
87
85
|
return value
|
|
88
86
|
try:
|
|
@@ -94,7 +92,7 @@ class HexString(click.ParamType):
|
|
|
94
92
|
class HexString32(click.ParamType):
|
|
95
93
|
name = "hexstring32"
|
|
96
94
|
|
|
97
|
-
def convert(self, value: str, param:
|
|
95
|
+
def convert(self, value: str, param: click.Parameter | None, ctx: click.Context | None) -> bytes32:
|
|
98
96
|
if isinstance(value, bytes32): # This if is due to some poor handling on click's part
|
|
99
97
|
return value
|
|
100
98
|
try:
|
|
@@ -255,7 +253,7 @@ def _convert_class_to_function(cls: type[ChiaCommand]) -> SyncCmd:
|
|
|
255
253
|
@dataclass_transform(frozen_default=True)
|
|
256
254
|
def chia_command(
|
|
257
255
|
*,
|
|
258
|
-
group:
|
|
256
|
+
group: click.Group | None = None,
|
|
259
257
|
name: str,
|
|
260
258
|
short_help: str,
|
|
261
259
|
help: str,
|
|
@@ -294,7 +292,7 @@ class Metadata:
|
|
|
294
292
|
|
|
295
293
|
|
|
296
294
|
def get_chia_command_metadata(cls: type[ChiaCommand]) -> Metadata:
|
|
297
|
-
metadata:
|
|
295
|
+
metadata: Metadata | None = getattr(cls, _chia_command_metadata_attribute, None)
|
|
298
296
|
if metadata is None:
|
|
299
297
|
raise Exception(f"Class is not a chia command: {cls}")
|
|
300
298
|
|
chia/cmds/cmd_helpers.py
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from collections.abc import AsyncIterator, Coroutine, Sequence
|
|
3
|
+
from collections.abc import AsyncIterator, Callable, Coroutine, Sequence
|
|
4
4
|
from contextlib import asynccontextmanager
|
|
5
5
|
from dataclasses import dataclass, field
|
|
6
6
|
from functools import cached_property
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import Any,
|
|
8
|
+
from typing import Any, TypeVar
|
|
9
9
|
|
|
10
10
|
from chia_rs.sized_bytes import bytes32
|
|
11
11
|
from chia_rs.sized_ints import uint64
|
|
@@ -29,8 +29,8 @@ class WalletClientInfo:
|
|
|
29
29
|
@command_helper
|
|
30
30
|
class NeedsWalletRPC:
|
|
31
31
|
context: ChiaCliContext = field(default_factory=ChiaCliContext)
|
|
32
|
-
client_info:
|
|
33
|
-
wallet_rpc_port:
|
|
32
|
+
client_info: WalletClientInfo | None = None
|
|
33
|
+
wallet_rpc_port: int | None = option(
|
|
34
34
|
"-wp",
|
|
35
35
|
"--wallet-rpc_port",
|
|
36
36
|
help=(
|
|
@@ -39,7 +39,7 @@ class NeedsWalletRPC:
|
|
|
39
39
|
type=int,
|
|
40
40
|
default=None,
|
|
41
41
|
)
|
|
42
|
-
fingerprint:
|
|
42
|
+
fingerprint: int | None = option(
|
|
43
43
|
"-f",
|
|
44
44
|
"--fingerprint",
|
|
45
45
|
help="Fingerprint of the wallet to use",
|
|
@@ -78,7 +78,7 @@ class TransactionsIn:
|
|
|
78
78
|
|
|
79
79
|
@command_helper
|
|
80
80
|
class TransactionsOut:
|
|
81
|
-
transaction_file_out:
|
|
81
|
+
transaction_file_out: str | None = option(
|
|
82
82
|
"--transaction-file-out",
|
|
83
83
|
type=str,
|
|
84
84
|
default=None,
|
|
@@ -138,7 +138,7 @@ class NeedsCoinSelectionConfig:
|
|
|
138
138
|
|
|
139
139
|
@command_helper
|
|
140
140
|
class NeedsTXConfig(NeedsCoinSelectionConfig):
|
|
141
|
-
reuse:
|
|
141
|
+
reuse: bool | None = option(
|
|
142
142
|
"--reuse/--new-address",
|
|
143
143
|
"--reuse-puzhash/--generate-new-puzhash",
|
|
144
144
|
help="Reuse existing address for the change.",
|
|
@@ -189,7 +189,7 @@ class TransactionEndpoint:
|
|
|
189
189
|
push: bool = option(
|
|
190
190
|
"--push/--no-push", help="Push the transaction to the network", type=bool, is_flag=True, default=True
|
|
191
191
|
)
|
|
192
|
-
valid_at:
|
|
192
|
+
valid_at: int | None = option(
|
|
193
193
|
"--valid-at",
|
|
194
194
|
help="UNIX timestamp at which the associated transactions become valid",
|
|
195
195
|
type=int,
|
|
@@ -197,7 +197,7 @@ class TransactionEndpoint:
|
|
|
197
197
|
default=None,
|
|
198
198
|
hidden=True,
|
|
199
199
|
)
|
|
200
|
-
expires_at:
|
|
200
|
+
expires_at: int | None = option(
|
|
201
201
|
"--expires-at",
|
|
202
202
|
help="UNIX timestamp at which the associated transactions expire",
|
|
203
203
|
type=int,
|
|
@@ -223,14 +223,14 @@ class TransactionEndpoint:
|
|
|
223
223
|
|
|
224
224
|
@dataclass(frozen=True)
|
|
225
225
|
class TransactionEndpointWithTimelocks(TransactionEndpoint):
|
|
226
|
-
valid_at:
|
|
226
|
+
valid_at: int | None = option(
|
|
227
227
|
"--valid-at",
|
|
228
228
|
help="UNIX timestamp at which the associated transactions become valid",
|
|
229
229
|
type=int,
|
|
230
230
|
required=False,
|
|
231
231
|
default=None,
|
|
232
232
|
)
|
|
233
|
-
expires_at:
|
|
233
|
+
expires_at: int | None = option(
|
|
234
234
|
"--expires-at",
|
|
235
235
|
help="UNIX timestamp at which the associated transactions expire",
|
|
236
236
|
type=int,
|
chia/cmds/cmds_util.py
CHANGED
|
@@ -4,10 +4,10 @@ import contextlib
|
|
|
4
4
|
import dataclasses
|
|
5
5
|
import logging
|
|
6
6
|
import traceback
|
|
7
|
-
from collections.abc import AsyncIterator
|
|
7
|
+
from collections.abc import AsyncIterator, Callable
|
|
8
8
|
from contextlib import asynccontextmanager
|
|
9
9
|
from pathlib import Path
|
|
10
|
-
from typing import Any,
|
|
10
|
+
from typing import Any, TypeVar
|
|
11
11
|
|
|
12
12
|
import click
|
|
13
13
|
from aiohttp import ClientConnectorCertificateError, ClientConnectorError
|
|
@@ -98,7 +98,7 @@ async def validate_client_connection(
|
|
|
98
98
|
async def get_any_service_client(
|
|
99
99
|
client_type: type[_T_RpcClient],
|
|
100
100
|
root_path: Path,
|
|
101
|
-
rpc_port:
|
|
101
|
+
rpc_port: int | None = None,
|
|
102
102
|
consume_errors: bool = True,
|
|
103
103
|
use_ssl: bool = True,
|
|
104
104
|
) -> AsyncIterator[tuple[_T_RpcClient, dict[str, Any]]]:
|
|
@@ -154,9 +154,9 @@ async def get_any_service_client(
|
|
|
154
154
|
print(f"Exception from '{node_type}' {e}:\n{traceback.format_exc()}")
|
|
155
155
|
|
|
156
156
|
|
|
157
|
-
async def get_wallet(root_path: Path, wallet_client: WalletRpcClient, fingerprint:
|
|
157
|
+
async def get_wallet(root_path: Path, wallet_client: WalletRpcClient, fingerprint: int | None) -> int:
|
|
158
158
|
selected_fingerprint: int
|
|
159
|
-
keychain_proxy:
|
|
159
|
+
keychain_proxy: KeychainProxy | None = None
|
|
160
160
|
all_keys: list[KeyData] = []
|
|
161
161
|
|
|
162
162
|
try:
|
|
@@ -176,8 +176,8 @@ async def get_wallet(root_path: Path, wallet_client: WalletRpcClient, fingerprin
|
|
|
176
176
|
# if only a single key is available, select it automatically
|
|
177
177
|
selected_fingerprint = fingerprints[0]
|
|
178
178
|
else:
|
|
179
|
-
logged_in_fingerprint:
|
|
180
|
-
logged_in_key:
|
|
179
|
+
logged_in_fingerprint: int | None = (await wallet_client.get_logged_in_fingerprint()).fingerprint
|
|
180
|
+
logged_in_key: KeyData | None = None
|
|
181
181
|
if logged_in_fingerprint is not None:
|
|
182
182
|
logged_in_key = next((key for key in all_keys if key.fingerprint == logged_in_fingerprint), None)
|
|
183
183
|
current_sync_status: str = ""
|
|
@@ -251,8 +251,8 @@ async def get_wallet(root_path: Path, wallet_client: WalletRpcClient, fingerprin
|
|
|
251
251
|
@asynccontextmanager
|
|
252
252
|
async def get_wallet_client(
|
|
253
253
|
root_path: Path,
|
|
254
|
-
wallet_rpc_port:
|
|
255
|
-
fingerprint:
|
|
254
|
+
wallet_rpc_port: int | None = None,
|
|
255
|
+
fingerprint: int | None = None,
|
|
256
256
|
consume_errors: bool = True,
|
|
257
257
|
) -> AsyncIterator[tuple[WalletRpcClient, int, dict[str, Any]]]:
|
|
258
258
|
async with get_any_service_client(WalletRpcClient, root_path, wallet_rpc_port, consume_errors) as (
|
|
@@ -321,7 +321,7 @@ def tx_config_args(func: Callable[..., None]) -> Callable[..., None]:
|
|
|
321
321
|
)(coin_selection_args(func))
|
|
322
322
|
|
|
323
323
|
|
|
324
|
-
def timelock_args(enable:
|
|
324
|
+
def timelock_args(enable: bool | None = None) -> Callable[[Callable[..., None]], Callable[..., None]]:
|
|
325
325
|
def _timelock_args(func: Callable[..., None]) -> Callable[..., None]:
|
|
326
326
|
def _convert_timelock_args_to_cvt(*args: Any, **kwargs: Any) -> None:
|
|
327
327
|
func(
|
|
@@ -361,11 +361,11 @@ class TransactionBundle(Streamable):
|
|
|
361
361
|
|
|
362
362
|
|
|
363
363
|
def tx_out_cmd(
|
|
364
|
-
enable_timelock_args:
|
|
364
|
+
enable_timelock_args: bool | None = None,
|
|
365
365
|
) -> Callable[[Callable[..., list[TransactionRecord]]], Callable[..., None]]:
|
|
366
366
|
def _tx_out_cmd(func: Callable[..., list[TransactionRecord]]) -> Callable[..., None]:
|
|
367
367
|
@timelock_args(enable=enable_timelock_args)
|
|
368
|
-
def original_cmd(transaction_file_out:
|
|
368
|
+
def original_cmd(transaction_file_out: str | None = None, **kwargs: Any) -> None:
|
|
369
369
|
txs: list[TransactionRecord] = func(**kwargs)
|
|
370
370
|
if transaction_file_out is not None:
|
|
371
371
|
print(f"Writing transactions to file {transaction_file_out}:")
|
|
@@ -391,8 +391,8 @@ def tx_out_cmd(
|
|
|
391
391
|
class CMDCoinSelectionConfigLoader:
|
|
392
392
|
min_coin_amount: CliAmount = cli_amount_none
|
|
393
393
|
max_coin_amount: CliAmount = cli_amount_none
|
|
394
|
-
excluded_coin_amounts:
|
|
395
|
-
excluded_coin_ids:
|
|
394
|
+
excluded_coin_amounts: list[CliAmount] | None = None
|
|
395
|
+
excluded_coin_ids: list[bytes32] | None = None
|
|
396
396
|
|
|
397
397
|
def to_coin_selection_config(self, mojo_per_unit: int) -> CoinSelectionConfig:
|
|
398
398
|
return CoinSelectionConfigLoader(
|
|
@@ -409,7 +409,7 @@ class CMDCoinSelectionConfigLoader:
|
|
|
409
409
|
|
|
410
410
|
@dataclasses.dataclass(frozen=True)
|
|
411
411
|
class CMDTXConfigLoader(CMDCoinSelectionConfigLoader):
|
|
412
|
-
reuse_puzhash:
|
|
412
|
+
reuse_puzhash: bool | None = None
|
|
413
413
|
|
|
414
414
|
def to_tx_config(self, mojo_per_unit: int, config: dict[str, Any], fingerprint: int) -> TXConfig:
|
|
415
415
|
cs_config = self.to_coin_selection_config(mojo_per_unit)
|