chia-blockchain 2.5.0rc1__py3-none-any.whl → 2.5.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/README.md +1 -1
- chia/_tests/blockchain/blockchain_test_utils.py +24 -26
- chia/_tests/blockchain/test_augmented_chain.py +6 -8
- chia/_tests/blockchain/test_blockchain.py +409 -307
- chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
- chia/_tests/blockchain/test_build_chains.py +11 -13
- chia/_tests/blockchain/test_get_block_generator.py +8 -8
- chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
- chia/_tests/build-init-files.py +3 -4
- chia/_tests/build-job-matrix.py +9 -9
- chia/_tests/check_sql_statements.py +2 -3
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +7 -5
- chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
- chia/_tests/clvm/test_condition_codes.py +2 -2
- chia/_tests/clvm/test_curry_and_treehash.py +2 -4
- chia/_tests/clvm/test_message_conditions.py +184 -0
- chia/_tests/clvm/test_puzzle_compression.py +1 -2
- chia/_tests/clvm/test_puzzle_drivers.py +3 -3
- chia/_tests/clvm/test_puzzles.py +13 -18
- chia/_tests/clvm/test_singletons.py +17 -17
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +42 -45
- chia/_tests/cmds/conftest.py +2 -2
- chia/_tests/cmds/test_click_types.py +21 -16
- chia/_tests/cmds/test_cmd_framework.py +255 -35
- chia/_tests/cmds/test_cmds_util.py +2 -2
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_dev_gh.py +131 -0
- chia/_tests/cmds/test_farm_cmd.py +1 -2
- chia/_tests/cmds/test_show.py +6 -6
- chia/_tests/cmds/test_tx_config_args.py +2 -1
- chia/_tests/cmds/wallet/test_dao.py +23 -23
- chia/_tests/cmds/wallet/test_did.py +29 -29
- chia/_tests/cmds/wallet/test_nft.py +24 -23
- chia/_tests/cmds/wallet/test_notifications.py +8 -8
- chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
- chia/_tests/cmds/wallet/test_vcs.py +97 -73
- chia/_tests/cmds/wallet/test_wallet.py +74 -75
- chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
- chia/_tests/conftest.py +153 -38
- chia/_tests/connection_utils.py +7 -6
- chia/_tests/core/cmds/test_beta.py +3 -3
- chia/_tests/core/cmds/test_keys.py +6 -6
- chia/_tests/core/cmds/test_wallet.py +3 -3
- chia/_tests/core/consensus/test_block_creation.py +3 -5
- chia/_tests/core/custom_types/test_coin.py +1 -3
- chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
- chia/_tests/core/daemon/test_daemon.py +58 -58
- chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
- chia/_tests/core/data_layer/conftest.py +4 -3
- chia/_tests/core/data_layer/test_data_cli.py +1 -2
- chia/_tests/core/data_layer/test_data_layer.py +5 -5
- chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
- chia/_tests/core/data_layer/test_data_rpc.py +75 -93
- chia/_tests/core/data_layer/test_data_store.py +38 -37
- chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
- chia/_tests/core/data_layer/util.py +11 -10
- chia/_tests/core/farmer/test_farmer_api.py +6 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
- chia/_tests/core/full_node/ram_db.py +2 -2
- chia/_tests/core/full_node/stores/test_block_store.py +113 -11
- chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
- chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
- chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
- chia/_tests/core/full_node/test_address_manager.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +1 -1
- chia/_tests/core/full_node/test_conditions.py +10 -12
- chia/_tests/core/full_node/test_full_node.py +2077 -1822
- chia/_tests/core/full_node/test_generator_tools.py +4 -4
- chia/_tests/core/full_node/test_hint_management.py +2 -2
- chia/_tests/core/full_node/test_performance.py +2 -5
- chia/_tests/core/full_node/test_subscriptions.py +4 -4
- chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
- chia/_tests/core/make_block_generator.py +5 -7
- chia/_tests/core/mempool/test_mempool.py +205 -208
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
- chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
- chia/_tests/core/mempool/test_mempool_manager.py +109 -80
- chia/_tests/core/mempool/test_mempool_performance.py +3 -4
- chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
- chia/_tests/core/server/flood.py +6 -4
- chia/_tests/core/server/serve.py +10 -7
- chia/_tests/core/server/test_api_protocol.py +21 -0
- chia/_tests/core/server/test_capabilities.py +3 -5
- chia/_tests/core/server/test_dos.py +15 -16
- chia/_tests/core/server/test_loop.py +14 -10
- chia/_tests/core/server/test_node_discovery.py +1 -2
- chia/_tests/core/server/test_rate_limits.py +156 -44
- chia/_tests/core/server/test_server.py +8 -7
- chia/_tests/core/services/test_services.py +59 -37
- chia/_tests/core/ssl/test_ssl.py +5 -3
- chia/_tests/core/test_cost_calculation.py +5 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_db_conversion.py +5 -4
- chia/_tests/core/test_db_validation.py +6 -5
- chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
- chia/_tests/core/test_filter.py +3 -5
- chia/_tests/core/test_full_node_rpc.py +64 -90
- chia/_tests/core/test_merkle_set.py +10 -10
- chia/_tests/core/test_program.py +2 -4
- chia/_tests/core/test_rpc_util.py +1 -2
- chia/_tests/core/test_seeder.py +124 -12
- chia/_tests/core/util/test_block_cache.py +5 -5
- chia/_tests/core/util/test_cached_bls.py +3 -3
- chia/_tests/core/util/test_config.py +13 -13
- chia/_tests/core/util/test_files.py +2 -2
- chia/_tests/core/util/test_jsonify.py +9 -9
- chia/_tests/core/util/test_keychain.py +13 -5
- chia/_tests/core/util/test_keyring_wrapper.py +6 -5
- chia/_tests/core/util/test_log_exceptions.py +3 -3
- chia/_tests/core/util/test_streamable.py +38 -38
- chia/_tests/db/test_db_wrapper.py +13 -12
- chia/_tests/environments/common.py +2 -2
- chia/_tests/environments/full_node.py +2 -2
- chia/_tests/environments/wallet.py +109 -48
- chia/_tests/farmer_harvester/test_farmer.py +35 -35
- chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
- chia/_tests/generator/test_compression.py +13 -30
- chia/_tests/generator/test_generator_types.py +3 -3
- chia/_tests/generator/test_rom.py +7 -9
- chia/_tests/plot_sync/test_delta.py +2 -3
- chia/_tests/plot_sync/test_plot_sync.py +25 -24
- chia/_tests/plot_sync/test_receiver.py +9 -9
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +27 -26
- chia/_tests/plot_sync/util.py +2 -1
- chia/_tests/plotting/test_plot_manager.py +54 -11
- chia/_tests/plotting/util.py +2 -3
- chia/_tests/pools/test_pool_cli_parsing.py +128 -0
- chia/_tests/pools/test_pool_cmdline.py +993 -15
- chia/_tests/pools/test_pool_config.py +3 -5
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
- chia/_tests/pools/test_pool_rpc.py +203 -90
- chia/_tests/pools/test_pool_wallet.py +12 -8
- chia/_tests/pools/test_wallet_pool_store.py +3 -3
- chia/_tests/process_junit.py +16 -17
- chia/_tests/rpc/test_rpc_client.py +59 -2
- chia/_tests/rpc/test_rpc_server.py +183 -0
- chia/_tests/simulation/test_simulation.py +5 -5
- chia/_tests/simulation/test_simulator.py +8 -10
- chia/_tests/simulation/test_start_simulator.py +5 -4
- chia/_tests/timelord/test_new_peak.py +19 -19
- chia/_tests/tools/test_run_block.py +1 -2
- chia/_tests/tools/test_virtual_project.py +591 -0
- chia/_tests/util/benchmark_cost.py +9 -9
- chia/_tests/util/benchmarks.py +1 -2
- chia/_tests/util/blockchain.py +12 -11
- chia/_tests/util/blockchain_mock.py +15 -15
- chia/_tests/util/build_network_protocol_files.py +12 -12
- chia/_tests/util/db_connection.py +3 -2
- chia/_tests/util/full_sync.py +14 -6
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/generator_tools_testing.py +5 -7
- chia/_tests/util/get_name_puzzle_conditions.py +52 -0
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +59 -106
- chia/_tests/util/network_protocol_data.py +7 -9
- chia/_tests/util/protocol_messages_json.py +112 -111
- chia/_tests/util/rpc.py +3 -0
- chia/_tests/util/run_block.py +16 -16
- chia/_tests/util/setup_nodes.py +25 -23
- chia/{clvm → _tests/util}/spend_sim.py +59 -55
- chia/_tests/util/split_managers.py +12 -9
- chia/_tests/util/temp_file.py +1 -1
- chia/_tests/util/test_action_scope.py +2 -1
- chia/_tests/util/test_async_pool.py +8 -8
- chia/_tests/util/test_build_job_matrix.py +2 -3
- chia/_tests/util/test_condition_tools.py +4 -6
- chia/_tests/util/test_config.py +5 -5
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +19 -11
- chia/_tests/util/test_limited_semaphore.py +4 -3
- chia/_tests/util/test_logging_filter.py +2 -3
- chia/_tests/util/test_misc.py +29 -28
- chia/_tests/util/test_network.py +32 -31
- chia/_tests/util/test_network_protocol_files.py +2 -3
- chia/_tests/util/test_network_protocol_json.py +1 -0
- chia/_tests/util/test_network_protocol_test.py +18 -19
- chia/_tests/util/test_paginator.py +3 -4
- chia/_tests/util/test_pprint.py +1 -1
- chia/_tests/util/test_priority_mutex.py +18 -17
- chia/_tests/util/test_recursive_replace.py +2 -2
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/test_timing.py +1 -1
- chia/_tests/util/test_trusted_peer.py +2 -2
- chia/_tests/util/time_out_assert.py +43 -6
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
- chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
- chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
- chia/_tests/wallet/conftest.py +135 -74
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
- chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
- chia/_tests/wallet/did_wallet/test_did.py +1277 -474
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
- chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
- chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
- chia/_tests/wallet/test_address_type.py +20 -20
- chia/_tests/wallet/test_clvm_streamable.py +5 -5
- chia/_tests/wallet/test_coin_management.py +354 -0
- chia/_tests/wallet/test_coin_selection.py +34 -35
- chia/_tests/wallet/test_conditions.py +28 -16
- chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
- chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
- chia/_tests/wallet/test_nft_store.py +1 -2
- chia/_tests/wallet/test_notifications.py +2 -2
- chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
- chia/_tests/wallet/test_puzzle_store.py +2 -3
- chia/_tests/wallet/test_sign_coin_spends.py +3 -3
- chia/_tests/wallet/test_signer_protocol.py +33 -34
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
- chia/_tests/wallet/test_taproot.py +1 -1
- chia/_tests/wallet/test_transaction_store.py +23 -19
- chia/_tests/wallet/test_util.py +36 -32
- chia/_tests/wallet/test_wallet.py +37 -37
- chia/_tests/wallet/test_wallet_action_scope.py +8 -8
- chia/_tests/wallet/test_wallet_blockchain.py +4 -6
- chia/_tests/wallet/test_wallet_coin_store.py +34 -34
- chia/_tests/wallet/test_wallet_node.py +69 -72
- chia/_tests/wallet/test_wallet_retry.py +3 -3
- chia/_tests/wallet/test_wallet_state_manager.py +12 -5
- chia/_tests/wallet/test_wallet_trade_store.py +2 -2
- chia/_tests/wallet/test_wallet_utils.py +5 -4
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
- chia/_tests/wallet/wallet_block_tools.py +27 -27
- chia/_tests/weight_proof/test_weight_proof.py +30 -30
- chia/apis.py +19 -0
- chia/cmds/beta.py +8 -7
- chia/cmds/beta_funcs.py +15 -11
- chia/cmds/check_wallet_db.py +29 -27
- chia/cmds/chia.py +17 -9
- chia/cmds/cmd_classes.py +87 -79
- chia/cmds/cmd_helpers.py +242 -0
- chia/cmds/cmds_util.py +56 -66
- chia/cmds/coin_funcs.py +168 -153
- chia/cmds/coins.py +156 -194
- chia/cmds/configure.py +4 -3
- chia/cmds/dao.py +89 -33
- chia/cmds/dao_funcs.py +55 -33
- chia/cmds/data.py +7 -6
- chia/cmds/data_funcs.py +26 -21
- chia/cmds/db.py +4 -3
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev.py +2 -0
- chia/cmds/farm.py +18 -5
- chia/cmds/farm_funcs.py +17 -24
- chia/cmds/gh.py +275 -0
- chia/cmds/init.py +4 -11
- chia/cmds/init_funcs.py +9 -9
- chia/cmds/installers.py +5 -3
- chia/cmds/keys.py +56 -39
- chia/cmds/keys_funcs.py +30 -31
- chia/cmds/netspace.py +6 -3
- chia/cmds/netspace_funcs.py +3 -2
- chia/cmds/param_types.py +16 -6
- chia/cmds/passphrase.py +8 -7
- chia/cmds/passphrase_funcs.py +7 -61
- chia/cmds/peer.py +2 -1
- chia/cmds/peer_funcs.py +5 -5
- chia/cmds/plotnft.py +207 -153
- chia/cmds/plotnft_funcs.py +205 -174
- chia/cmds/plots.py +14 -6
- chia/cmds/plotters.py +2 -1
- chia/cmds/rpc.py +48 -28
- chia/cmds/show.py +2 -1
- chia/cmds/show_funcs.py +7 -6
- chia/cmds/signer.py +50 -58
- chia/cmds/sim.py +22 -14
- chia/cmds/sim_funcs.py +11 -11
- chia/cmds/start.py +3 -3
- chia/cmds/start_funcs.py +9 -12
- chia/cmds/stop.py +4 -3
- chia/cmds/units.py +1 -3
- chia/cmds/wallet.py +252 -96
- chia/cmds/wallet_funcs.py +217 -143
- chia/consensus/block_body_validation.py +133 -86
- chia/consensus/block_creation.py +42 -21
- chia/consensus/block_header_validation.py +32 -37
- chia/consensus/block_record.py +1 -2
- chia/consensus/blockchain.py +167 -180
- chia/consensus/blockchain_interface.py +10 -10
- chia/consensus/constants.py +2 -2
- chia/consensus/default_constants.py +3 -4
- chia/consensus/difficulty_adjustment.py +5 -5
- chia/consensus/find_fork_point.py +5 -5
- chia/consensus/full_block_to_block_record.py +4 -4
- chia/consensus/get_block_challenge.py +2 -2
- chia/consensus/get_block_generator.py +4 -3
- chia/consensus/multiprocess_validation.py +207 -304
- chia/consensus/vdf_info_computation.py +3 -3
- chia/daemon/client.py +46 -27
- chia/daemon/keychain_proxy.py +10 -9
- chia/daemon/keychain_server.py +18 -18
- chia/daemon/server.py +103 -113
- chia/daemon/windows_signal.py +2 -2
- chia/data_layer/data_layer.py +64 -76
- chia/data_layer/data_layer_api.py +8 -0
- chia/data_layer/data_layer_errors.py +3 -3
- chia/data_layer/data_layer_server.py +2 -2
- chia/data_layer/data_layer_util.py +71 -71
- chia/data_layer/data_layer_wallet.py +63 -67
- chia/data_layer/data_store.py +72 -72
- chia/data_layer/dl_wallet_store.py +10 -10
- chia/data_layer/download_data.py +5 -5
- chia/data_layer/s3_plugin_service.py +9 -9
- chia/data_layer/util/benchmark.py +0 -1
- chia/data_layer/util/plugin.py +2 -3
- chia/farmer/farmer.py +46 -43
- chia/farmer/farmer_api.py +27 -21
- chia/full_node/block_height_map.py +6 -6
- chia/full_node/block_store.py +41 -35
- chia/full_node/coin_store.py +42 -41
- chia/full_node/fee_estimate.py +2 -2
- chia/full_node/fee_estimation.py +1 -2
- chia/full_node/fee_history.py +5 -6
- chia/full_node/fee_tracker.py +24 -24
- chia/full_node/full_node.py +574 -300
- chia/full_node/full_node_api.py +181 -130
- chia/full_node/full_node_store.py +43 -43
- chia/full_node/hint_management.py +4 -4
- chia/full_node/hint_store.py +9 -10
- chia/full_node/mempool.py +25 -19
- chia/full_node/mempool_check_conditions.py +11 -42
- chia/full_node/mempool_manager.py +48 -53
- chia/full_node/pending_tx_cache.py +9 -9
- chia/full_node/subscriptions.py +23 -24
- chia/full_node/sync_store.py +8 -7
- chia/full_node/tx_processing_queue.py +3 -3
- chia/full_node/util/__init__.py +0 -0
- chia/full_node/weight_proof.py +79 -78
- chia/harvester/harvester.py +9 -8
- chia/harvester/harvester_api.py +19 -13
- chia/introducer/introducer.py +7 -5
- chia/introducer/introducer_api.py +9 -3
- chia/legacy/keyring.py +6 -5
- chia/plot_sync/delta.py +8 -8
- chia/plot_sync/receiver.py +12 -11
- chia/plot_sync/sender.py +15 -12
- chia/plotters/bladebit.py +12 -12
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +8 -8
- chia/plotters/plotters.py +6 -6
- chia/plotters/plotters_util.py +6 -4
- chia/plotting/cache.py +8 -7
- chia/plotting/check_plots.py +8 -8
- chia/plotting/create_plots.py +6 -6
- chia/plotting/manager.py +22 -22
- chia/plotting/util.py +31 -19
- chia/pools/pool_config.py +7 -7
- chia/pools/pool_puzzles.py +16 -16
- chia/pools/pool_wallet.py +64 -57
- chia/pools/pool_wallet_info.py +3 -3
- chia/protocols/full_node_protocol.py +3 -3
- chia/protocols/harvester_protocol.py +12 -12
- chia/protocols/introducer_protocol.py +1 -2
- chia/protocols/protocol_message_types.py +4 -4
- chia/protocols/protocol_state_machine.py +2 -2
- chia/protocols/protocol_timing.py +1 -0
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +2 -2
- chia/protocols/wallet_protocol.py +33 -33
- chia/rpc/crawler_rpc_api.py +12 -7
- chia/rpc/data_layer_rpc_api.py +49 -44
- chia/rpc/data_layer_rpc_client.py +41 -41
- chia/rpc/data_layer_rpc_util.py +7 -11
- chia/rpc/farmer_rpc_api.py +32 -27
- chia/rpc/farmer_rpc_client.py +14 -14
- chia/rpc/full_node_rpc_api.py +53 -48
- chia/rpc/full_node_rpc_client.py +30 -30
- chia/rpc/harvester_rpc_api.py +16 -11
- chia/rpc/harvester_rpc_client.py +6 -6
- chia/rpc/rpc_client.py +34 -14
- chia/rpc/rpc_server.py +117 -43
- chia/rpc/timelord_rpc_api.py +9 -4
- chia/rpc/util.py +11 -211
- chia/rpc/wallet_request_types.py +276 -60
- chia/rpc/wallet_rpc_api.py +563 -399
- chia/rpc/wallet_rpc_client.py +220 -250
- chia/seeder/crawl_store.py +6 -8
- chia/seeder/crawler.py +23 -36
- chia/seeder/crawler_api.py +28 -22
- chia/seeder/dns_server.py +99 -50
- chia/seeder/start_crawler.py +13 -9
- chia/server/address_manager.py +19 -19
- chia/server/address_manager_store.py +17 -17
- chia/server/api_protocol.py +106 -1
- chia/server/capabilities.py +3 -3
- chia/server/chia_policy.py +17 -16
- chia/server/introducer_peers.py +3 -3
- chia/server/node_discovery.py +34 -38
- chia/server/rate_limit_numbers.py +26 -16
- chia/server/rate_limits.py +67 -27
- chia/server/server.py +52 -31
- chia/server/signal_handlers.py +6 -3
- chia/server/ssl_context.py +5 -5
- chia/server/start_data_layer.py +37 -23
- chia/server/start_farmer.py +28 -16
- chia/server/start_full_node.py +29 -23
- chia/server/start_harvester.py +28 -15
- chia/server/start_introducer.py +27 -15
- chia/server/start_service.py +17 -29
- chia/server/start_timelord.py +25 -18
- chia/server/start_wallet.py +22 -18
- chia/server/upnp.py +4 -3
- chia/server/ws_connection.py +68 -54
- chia/simulator/add_blocks_in_batches.py +54 -0
- chia/simulator/block_tools.py +65 -64
- chia/simulator/full_node_simulator.py +66 -74
- chia/simulator/setup_services.py +10 -9
- chia/simulator/simulator_full_node_rpc_api.py +12 -14
- chia/simulator/simulator_full_node_rpc_client.py +3 -5
- chia/simulator/simulator_test_tools.py +8 -7
- chia/simulator/socket.py +1 -4
- chia/simulator/ssl_certs.py +5 -5
- chia/simulator/ssl_certs_1.py +2 -4
- chia/simulator/ssl_certs_10.py +2 -4
- chia/simulator/ssl_certs_2.py +2 -4
- chia/simulator/ssl_certs_3.py +2 -4
- chia/simulator/ssl_certs_4.py +2 -4
- chia/simulator/ssl_certs_5.py +2 -4
- chia/simulator/ssl_certs_6.py +2 -4
- chia/simulator/ssl_certs_7.py +2 -4
- chia/simulator/ssl_certs_8.py +2 -4
- chia/simulator/ssl_certs_9.py +2 -4
- chia/simulator/start_simulator.py +14 -6
- chia/simulator/wallet_tools.py +21 -20
- chia/ssl/create_ssl.py +11 -11
- chia/timelord/iters_from_block.py +2 -2
- chia/timelord/timelord.py +57 -33
- chia/timelord/timelord_api.py +12 -6
- chia/timelord/timelord_launcher.py +10 -8
- chia/timelord/timelord_state.py +5 -5
- chia/types/block_protocol.py +2 -2
- chia/types/blockchain_format/coin.py +3 -3
- chia/types/blockchain_format/program.py +17 -18
- chia/types/blockchain_format/tree_hash.py +9 -9
- chia/types/coin_spend.py +8 -8
- chia/types/condition_with_args.py +1 -2
- chia/types/eligible_coin_spends.py +16 -15
- chia/types/generator_types.py +1 -2
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +7 -7
- chia/types/mempool_submission_status.py +2 -2
- chia/types/peer_info.py +1 -1
- chia/types/spend_bundle.py +1 -2
- chia/types/transaction_queue_entry.py +2 -2
- chia/types/unfinished_header_block.py +2 -2
- chia/types/validation_state.py +14 -0
- chia/types/weight_proof.py +5 -6
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +6 -4
- chia/util/augmented_chain.py +13 -9
- chia/util/batches.py +5 -2
- chia/util/bech32m.py +14 -11
- chia/util/beta_metrics.py +5 -4
- chia/util/block_cache.py +5 -5
- chia/util/byte_types.py +2 -0
- chia/util/check_fork_next_block.py +3 -2
- chia/util/chia_logging.py +41 -21
- chia/util/collection.py +3 -3
- chia/util/condition_tools.py +18 -18
- chia/util/config.py +26 -25
- chia/util/cpu.py +2 -0
- chia/util/db_synchronous.py +2 -0
- chia/util/db_version.py +2 -0
- chia/util/db_wrapper.py +13 -10
- chia/util/default_root.py +17 -0
- chia/util/dump_keyring.py +6 -6
- chia/util/errors.py +5 -3
- chia/util/file_keyring.py +22 -33
- chia/util/files.py +2 -0
- chia/util/full_block_utils.py +31 -7
- chia/util/generator_tools.py +18 -8
- chia/util/hash.py +3 -1
- chia/util/initial-config.yaml +19 -0
- chia/util/inline_executor.py +2 -0
- chia/util/ip_address.py +39 -0
- chia/util/json_util.py +0 -4
- chia/util/keychain.py +27 -24
- chia/util/keyring_wrapper.py +65 -4
- chia/util/limited_semaphore.py +3 -1
- chia/util/lock.py +4 -2
- chia/util/log_exceptions.py +5 -2
- chia/util/logging.py +3 -1
- chia/util/lru_cache.py +2 -0
- chia/util/math.py +4 -4
- chia/util/network.py +15 -73
- chia/util/paginator.py +3 -1
- chia/util/path.py +2 -0
- chia/util/permissions.py +3 -2
- chia/util/prev_transaction_block.py +1 -3
- chia/util/priority_mutex.py +6 -3
- chia/util/profiler.py +7 -4
- chia/util/recursive_replace.py +2 -0
- chia/util/safe_cancel_task.py +2 -0
- chia/util/service_groups.py +2 -2
- chia/util/setproctitle.py +2 -0
- chia/util/significant_bits.py +2 -0
- chia/util/ssl_check.py +11 -11
- chia/util/streamable.py +44 -56
- chia/util/task_referencer.py +59 -0
- chia/util/task_timing.py +22 -18
- chia/util/timing.py +4 -1
- chia/util/vdf_prover.py +2 -3
- chia/util/virtual_project_analysis.py +540 -0
- chia/util/ws_message.py +6 -6
- chia/wallet/cat_wallet/cat_info.py +3 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
- chia/wallet/cat_wallet/cat_utils.py +5 -4
- chia/wallet/cat_wallet/cat_wallet.py +56 -70
- chia/wallet/cat_wallet/dao_cat_info.py +3 -3
- chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
- chia/wallet/cat_wallet/lineage_store.py +2 -2
- chia/wallet/coin_selection.py +15 -15
- chia/wallet/conditions.py +257 -71
- chia/wallet/dao_wallet/dao_info.py +4 -4
- chia/wallet/dao_wallet/dao_utils.py +43 -42
- chia/wallet/dao_wallet/dao_wallet.py +66 -68
- chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
- chia/wallet/derive_keys.py +11 -11
- chia/wallet/did_wallet/did_info.py +3 -3
- chia/wallet/did_wallet/did_wallet.py +56 -47
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/nft_info.py +4 -4
- chia/wallet/nft_wallet/nft_puzzles.py +16 -16
- chia/wallet/nft_wallet/nft_wallet.py +90 -89
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
- chia/wallet/nft_wallet/uncurry_nft.py +2 -2
- chia/wallet/notification_manager.py +5 -5
- chia/wallet/notification_store.py +6 -6
- chia/wallet/outer_puzzles.py +2 -2
- chia/wallet/payment.py +4 -5
- chia/wallet/puzzle_drivers.py +4 -4
- chia/wallet/puzzles/clawback/drivers.py +5 -5
- chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
- chia/wallet/puzzles/load_clvm.py +2 -3
- chia/wallet/puzzles/p2_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
- chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
- chia/wallet/puzzles/puzzle_utils.py +7 -7
- chia/wallet/puzzles/singleton_top_layer.py +6 -5
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
- chia/wallet/puzzles/tails.py +34 -30
- chia/wallet/signer_protocol.py +7 -8
- chia/wallet/singleton.py +4 -4
- chia/wallet/trade_manager.py +155 -141
- chia/wallet/trade_record.py +5 -5
- chia/wallet/trading/offer.py +100 -101
- chia/wallet/trading/trade_store.py +14 -14
- chia/wallet/transaction_record.py +31 -16
- chia/wallet/util/address_type.py +4 -4
- chia/wallet/util/blind_signer_tl.py +8 -12
- chia/wallet/util/clvm_streamable.py +15 -15
- chia/wallet/util/compute_hints.py +5 -5
- chia/wallet/util/compute_memos.py +4 -6
- chia/wallet/util/curry_and_treehash.py +3 -2
- chia/wallet/util/debug_spend_bundle.py +6 -8
- chia/wallet/util/merkle_tree.py +10 -10
- chia/wallet/util/merkle_utils.py +10 -10
- chia/wallet/util/new_peak_queue.py +3 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/{util → wallet/util}/pprint.py +2 -3
- chia/wallet/util/puzzle_compression.py +3 -4
- chia/wallet/util/puzzle_decorator.py +10 -10
- chia/wallet/util/query_filter.py +9 -10
- chia/wallet/util/tx_config.py +12 -12
- chia/wallet/util/wallet_sync_utils.py +24 -21
- chia/wallet/util/wallet_types.py +9 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
- chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
- chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
- chia/wallet/vc_wallet/vc_drivers.py +16 -16
- chia/wallet/vc_wallet/vc_store.py +9 -9
- chia/wallet/vc_wallet/vc_wallet.py +35 -35
- chia/wallet/wallet.py +54 -54
- chia/wallet/wallet_action_scope.py +14 -13
- chia/wallet/wallet_blockchain.py +10 -10
- chia/wallet/wallet_coin_record.py +2 -2
- chia/wallet/wallet_coin_store.py +10 -10
- chia/wallet/wallet_info.py +1 -2
- chia/wallet/wallet_interested_store.py +5 -5
- chia/wallet/wallet_nft_store.py +6 -6
- chia/wallet/wallet_node.py +72 -76
- chia/wallet/wallet_node_api.py +33 -27
- chia/wallet/wallet_pool_store.py +1 -2
- chia/wallet/wallet_protocol.py +15 -15
- chia/wallet/wallet_puzzle_store.py +35 -4
- chia/wallet/wallet_retry_store.py +2 -2
- chia/wallet/wallet_singleton_store.py +10 -9
- chia/wallet/wallet_spend_bundle.py +4 -20
- chia/wallet/wallet_state_manager.py +223 -224
- chia/wallet/wallet_transaction_store.py +44 -18
- chia/wallet/wallet_user_store.py +2 -2
- chia/wallet/wallet_weight_proof_handler.py +2 -2
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/WHEEL +1 -1
- mozilla-ca/cacert.pem +32 -87
- chia/_tests/cmds/wallet/test_coins.py +0 -195
- chia/consensus/block_root_validation.py +0 -46
- chia/util/api_decorators.py +0 -89
- chia_blockchain-2.5.0rc1.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from typing import Any,
|
|
4
|
+
from typing import Any, Optional
|
|
5
5
|
|
|
6
6
|
from chia.data_layer.data_layer_util import ClearPendingRootsRequest
|
|
7
7
|
from chia.rpc.rpc_client import RpcClient
|
|
@@ -10,25 +10,25 @@ from chia.util.ints import uint64
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class DataLayerRpcClient(RpcClient):
|
|
13
|
-
async def create_data_store(self, fee: Optional[uint64], verbose: bool) ->
|
|
13
|
+
async def create_data_store(self, fee: Optional[uint64], verbose: bool) -> dict[str, Any]:
|
|
14
14
|
response = await self.fetch("create_data_store", {"fee": fee, "verbose": verbose})
|
|
15
15
|
return response
|
|
16
16
|
|
|
17
|
-
async def wallet_log_in(self, fingerprint: int) ->
|
|
18
|
-
request:
|
|
17
|
+
async def wallet_log_in(self, fingerprint: int) -> dict[str, Any]:
|
|
18
|
+
request: dict[str, Any] = {"fingerprint": fingerprint}
|
|
19
19
|
response = await self.fetch("wallet_log_in", request)
|
|
20
20
|
return response
|
|
21
21
|
|
|
22
|
-
async def get_value(self, store_id: bytes32, key: bytes, root_hash: Optional[bytes32]) ->
|
|
23
|
-
request:
|
|
22
|
+
async def get_value(self, store_id: bytes32, key: bytes, root_hash: Optional[bytes32]) -> dict[str, Any]:
|
|
23
|
+
request: dict[str, Any] = {"id": store_id.hex(), "key": key.hex()}
|
|
24
24
|
if root_hash is not None:
|
|
25
25
|
request["root_hash"] = root_hash.hex()
|
|
26
26
|
response = await self.fetch("get_value", request)
|
|
27
27
|
return response
|
|
28
28
|
|
|
29
29
|
async def update_data_store(
|
|
30
|
-
self, store_id: bytes32, changelist:
|
|
31
|
-
) ->
|
|
30
|
+
self, store_id: bytes32, changelist: list[dict[str, str]], fee: Optional[uint64], submit_on_chain: bool = True
|
|
31
|
+
) -> dict[str, Any]:
|
|
32
32
|
response = await self.fetch(
|
|
33
33
|
"batch_update",
|
|
34
34
|
{
|
|
@@ -41,8 +41,8 @@ class DataLayerRpcClient(RpcClient):
|
|
|
41
41
|
return response
|
|
42
42
|
|
|
43
43
|
async def update_multiple_stores(
|
|
44
|
-
self, store_updates:
|
|
45
|
-
) ->
|
|
44
|
+
self, store_updates: list[dict[str, Any]], fee: Optional[uint64], submit_on_chain: bool = True
|
|
45
|
+
) -> dict[str, Any]:
|
|
46
46
|
response = await self.fetch(
|
|
47
47
|
"multistore_batch_update",
|
|
48
48
|
{
|
|
@@ -53,18 +53,18 @@ class DataLayerRpcClient(RpcClient):
|
|
|
53
53
|
)
|
|
54
54
|
return response
|
|
55
55
|
|
|
56
|
-
async def submit_pending_root(self, store_id: bytes32, fee: Optional[uint64]) ->
|
|
56
|
+
async def submit_pending_root(self, store_id: bytes32, fee: Optional[uint64]) -> dict[str, Any]:
|
|
57
57
|
response = await self.fetch("submit_pending_root", {"id": store_id.hex(), "fee": fee})
|
|
58
58
|
return response
|
|
59
59
|
|
|
60
|
-
async def submit_all_pending_roots(self, fee: Optional[uint64]) ->
|
|
60
|
+
async def submit_all_pending_roots(self, fee: Optional[uint64]) -> dict[str, Any]:
|
|
61
61
|
response = await self.fetch("submit_all_pending_roots", {"fee": fee})
|
|
62
62
|
return response
|
|
63
63
|
|
|
64
64
|
async def get_keys_values(
|
|
65
65
|
self, store_id: bytes32, root_hash: Optional[bytes32], page: Optional[int], max_page_size: Optional[int]
|
|
66
|
-
) ->
|
|
67
|
-
request:
|
|
66
|
+
) -> dict[str, Any]:
|
|
67
|
+
request: dict[str, Any] = {"id": store_id.hex()}
|
|
68
68
|
if root_hash is not None:
|
|
69
69
|
request["root_hash"] = root_hash.hex()
|
|
70
70
|
if page is not None:
|
|
@@ -76,8 +76,8 @@ class DataLayerRpcClient(RpcClient):
|
|
|
76
76
|
|
|
77
77
|
async def get_keys(
|
|
78
78
|
self, store_id: bytes32, root_hash: Optional[bytes32], page: Optional[int], max_page_size: Optional[int]
|
|
79
|
-
) ->
|
|
80
|
-
request:
|
|
79
|
+
) -> dict[str, Any]:
|
|
80
|
+
request: dict[str, Any] = {"id": store_id.hex()}
|
|
81
81
|
if root_hash is not None:
|
|
82
82
|
request["root_hash"] = root_hash.hex()
|
|
83
83
|
if page is not None:
|
|
@@ -87,38 +87,38 @@ class DataLayerRpcClient(RpcClient):
|
|
|
87
87
|
response = await self.fetch("get_keys", request)
|
|
88
88
|
return response
|
|
89
89
|
|
|
90
|
-
async def get_ancestors(self, store_id: bytes32, hash: bytes32) ->
|
|
90
|
+
async def get_ancestors(self, store_id: bytes32, hash: bytes32) -> dict[str, Any]:
|
|
91
91
|
response = await self.fetch("get_ancestors", {"id": store_id.hex(), "hash": hash})
|
|
92
92
|
return response
|
|
93
93
|
|
|
94
|
-
async def get_root(self, store_id: bytes32) ->
|
|
94
|
+
async def get_root(self, store_id: bytes32) -> dict[str, Any]:
|
|
95
95
|
response = await self.fetch("get_root", {"id": store_id.hex()})
|
|
96
96
|
return response
|
|
97
97
|
|
|
98
|
-
async def get_local_root(self, store_id: bytes32) ->
|
|
98
|
+
async def get_local_root(self, store_id: bytes32) -> dict[str, Any]:
|
|
99
99
|
response = await self.fetch("get_local_root", {"id": store_id.hex()})
|
|
100
100
|
return response
|
|
101
101
|
|
|
102
|
-
async def get_roots(self, store_ids:
|
|
102
|
+
async def get_roots(self, store_ids: list[bytes32]) -> dict[str, Any]:
|
|
103
103
|
response = await self.fetch("get_roots", {"ids": store_ids})
|
|
104
104
|
return response
|
|
105
105
|
|
|
106
|
-
async def subscribe(self, store_id: bytes32, urls:
|
|
106
|
+
async def subscribe(self, store_id: bytes32, urls: list[str]) -> dict[str, Any]:
|
|
107
107
|
response = await self.fetch("subscribe", {"id": store_id.hex(), "urls": urls})
|
|
108
108
|
return response
|
|
109
109
|
|
|
110
|
-
async def remove_subscriptions(self, store_id: bytes32, urls:
|
|
110
|
+
async def remove_subscriptions(self, store_id: bytes32, urls: list[str]) -> dict[str, Any]:
|
|
111
111
|
response = await self.fetch("remove_subscriptions", {"id": store_id.hex(), "urls": urls})
|
|
112
112
|
return response
|
|
113
113
|
|
|
114
|
-
async def unsubscribe(self, store_id: bytes32, retain: bool) ->
|
|
114
|
+
async def unsubscribe(self, store_id: bytes32, retain: bool) -> dict[str, Any]:
|
|
115
115
|
response = await self.fetch("unsubscribe", {"id": store_id.hex(), "retain": retain})
|
|
116
116
|
return response
|
|
117
117
|
|
|
118
118
|
async def add_missing_files(
|
|
119
|
-
self, store_ids: Optional[
|
|
120
|
-
) ->
|
|
121
|
-
request:
|
|
119
|
+
self, store_ids: Optional[list[bytes32]], overwrite: Optional[bool], foldername: Optional[Path]
|
|
120
|
+
) -> dict[str, Any]:
|
|
121
|
+
request: dict[str, Any] = {}
|
|
122
122
|
if store_ids is not None:
|
|
123
123
|
request["ids"] = [store_id.hex() for store_id in store_ids]
|
|
124
124
|
if overwrite is not None:
|
|
@@ -130,8 +130,8 @@ class DataLayerRpcClient(RpcClient):
|
|
|
130
130
|
|
|
131
131
|
async def get_kv_diff(
|
|
132
132
|
self, store_id: bytes32, hash_1: bytes32, hash_2: bytes32, page: Optional[int], max_page_size: Optional[int]
|
|
133
|
-
) ->
|
|
134
|
-
request:
|
|
133
|
+
) -> dict[str, Any]:
|
|
134
|
+
request: dict[str, Any] = {"id": store_id.hex(), "hash_1": hash_1.hex(), "hash_2": hash_2.hex()}
|
|
135
135
|
if page is not None:
|
|
136
136
|
request["page"] = page
|
|
137
137
|
if max_page_size is not None:
|
|
@@ -139,50 +139,50 @@ class DataLayerRpcClient(RpcClient):
|
|
|
139
139
|
response = await self.fetch("get_kv_diff", request)
|
|
140
140
|
return response
|
|
141
141
|
|
|
142
|
-
async def get_root_history(self, store_id: bytes32) ->
|
|
142
|
+
async def get_root_history(self, store_id: bytes32) -> dict[str, Any]:
|
|
143
143
|
response = await self.fetch("get_root_history", {"id": store_id.hex()})
|
|
144
144
|
return response
|
|
145
145
|
|
|
146
146
|
async def add_mirror(
|
|
147
|
-
self, store_id: bytes32, urls:
|
|
148
|
-
) ->
|
|
147
|
+
self, store_id: bytes32, urls: list[str], amount: int, fee: Optional[uint64]
|
|
148
|
+
) -> dict[str, Any]:
|
|
149
149
|
response = await self.fetch("add_mirror", {"id": store_id.hex(), "urls": urls, "amount": amount, "fee": fee})
|
|
150
150
|
return response
|
|
151
151
|
|
|
152
|
-
async def delete_mirror(self, coin_id: bytes32, fee: Optional[uint64]) ->
|
|
152
|
+
async def delete_mirror(self, coin_id: bytes32, fee: Optional[uint64]) -> dict[str, Any]:
|
|
153
153
|
response = await self.fetch("delete_mirror", {"coin_id": coin_id.hex(), "fee": fee})
|
|
154
154
|
return response
|
|
155
155
|
|
|
156
|
-
async def get_mirrors(self, store_id: bytes32) ->
|
|
156
|
+
async def get_mirrors(self, store_id: bytes32) -> dict[str, Any]:
|
|
157
157
|
response = await self.fetch("get_mirrors", {"id": store_id.hex()})
|
|
158
158
|
return response
|
|
159
159
|
|
|
160
|
-
async def get_subscriptions(self) ->
|
|
160
|
+
async def get_subscriptions(self) -> dict[str, Any]:
|
|
161
161
|
response = await self.fetch("subscriptions", {})
|
|
162
162
|
return response
|
|
163
163
|
|
|
164
|
-
async def get_owned_stores(self) ->
|
|
164
|
+
async def get_owned_stores(self) -> dict[str, Any]:
|
|
165
165
|
response = await self.fetch("get_owned_stores", {})
|
|
166
166
|
return response
|
|
167
167
|
|
|
168
|
-
async def get_sync_status(self, store_id: bytes32) ->
|
|
168
|
+
async def get_sync_status(self, store_id: bytes32) -> dict[str, Any]:
|
|
169
169
|
response = await self.fetch("get_sync_status", {"id": store_id.hex()})
|
|
170
170
|
return response
|
|
171
171
|
|
|
172
|
-
async def check_plugins(self) ->
|
|
172
|
+
async def check_plugins(self) -> dict[str, Any]:
|
|
173
173
|
response = await self.fetch("check_plugins", {})
|
|
174
174
|
return response
|
|
175
175
|
|
|
176
|
-
async def clear_pending_roots(self, store_id: bytes32) ->
|
|
176
|
+
async def clear_pending_roots(self, store_id: bytes32) -> dict[str, Any]:
|
|
177
177
|
request = ClearPendingRootsRequest(store_id=store_id)
|
|
178
178
|
response = await self.fetch("clear_pending_roots", request.marshal())
|
|
179
179
|
return response
|
|
180
180
|
|
|
181
|
-
async def get_proof(self, store_id: bytes32, keys:
|
|
182
|
-
request:
|
|
181
|
+
async def get_proof(self, store_id: bytes32, keys: list[bytes]) -> dict[str, Any]:
|
|
182
|
+
request: dict[str, Any] = {"store_id": store_id.hex(), "keys": [key.hex() for key in keys]}
|
|
183
183
|
response = await self.fetch("get_proof", request)
|
|
184
184
|
return response
|
|
185
185
|
|
|
186
|
-
async def verify_proof(self, proof:
|
|
186
|
+
async def verify_proof(self, proof: dict[str, Any]) -> dict[str, Any]:
|
|
187
187
|
response = await self.fetch("verify_proof", proof)
|
|
188
188
|
return response
|
chia/rpc/data_layer_rpc_util.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Any,
|
|
3
|
+
from typing import Any, TypeVar
|
|
4
4
|
|
|
5
5
|
from typing_extensions import Protocol
|
|
6
6
|
|
|
@@ -13,22 +13,18 @@ _T = TypeVar("_T")
|
|
|
13
13
|
|
|
14
14
|
class MarshallableProtocol(Protocol):
|
|
15
15
|
@classmethod
|
|
16
|
-
def unmarshal(cls:
|
|
16
|
+
def unmarshal(cls: type[_T], marshalled: dict[str, Any]) -> _T: ...
|
|
17
17
|
|
|
18
|
-
def marshal(self) ->
|
|
18
|
+
def marshal(self) -> dict[str, Any]: ...
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class UnboundRoute(Protocol):
|
|
22
|
-
async def __call__(self, request:
|
|
22
|
+
async def __call__(self, request: dict[str, Any]) -> dict[str, Any]:
|
|
23
23
|
pass
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class UnboundMarshalledRoute(Protocol):
|
|
27
|
-
|
|
28
|
-
# special case.
|
|
29
|
-
async def __call__( # pylint: disable=E0213
|
|
30
|
-
protocol_self, self: Any, request: MarshallableProtocol
|
|
31
|
-
) -> MarshallableProtocol:
|
|
27
|
+
async def __call__(protocol_self, self: Any, request: MarshallableProtocol) -> MarshallableProtocol:
|
|
32
28
|
pass
|
|
33
29
|
|
|
34
30
|
|
|
@@ -42,9 +38,9 @@ def marshal() -> RouteDecorator:
|
|
|
42
38
|
from typing import get_type_hints
|
|
43
39
|
|
|
44
40
|
hints = get_type_hints(route)
|
|
45
|
-
request_class:
|
|
41
|
+
request_class: type[MarshallableProtocol] = hints["request"]
|
|
46
42
|
|
|
47
|
-
async def wrapper(self: object, request:
|
|
43
|
+
async def wrapper(self: object, request: dict[str, object]) -> dict[str, object]:
|
|
48
44
|
# import json
|
|
49
45
|
# name = route.__name__
|
|
50
46
|
# print(f"\n ==== {name} request.json\n{json.dumps(request, indent=2)}")
|
chia/rpc/farmer_rpc_api.py
CHANGED
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
import operator
|
|
5
|
-
from typing import Any, Callable, ClassVar,
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Callable, ClassVar, Optional, cast
|
|
6
6
|
|
|
7
7
|
from typing_extensions import Protocol
|
|
8
8
|
|
|
@@ -23,7 +23,7 @@ class PaginatedRequestData(Protocol):
|
|
|
23
23
|
page: uint32
|
|
24
24
|
page_size: uint32
|
|
25
25
|
|
|
26
|
-
__match_args__: ClassVar[
|
|
26
|
+
__match_args__: ClassVar[tuple[str, ...]] = ()
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
@streamable
|
|
@@ -39,11 +39,11 @@ class PlotInfoRequestData(Streamable):
|
|
|
39
39
|
node_id: bytes32
|
|
40
40
|
page: uint32
|
|
41
41
|
page_size: uint32
|
|
42
|
-
filter:
|
|
42
|
+
filter: list[FilterItem] = dataclasses.field(default_factory=list)
|
|
43
43
|
sort_key: str = "filename"
|
|
44
44
|
reverse: bool = False
|
|
45
45
|
|
|
46
|
-
__match_args__: ClassVar[
|
|
46
|
+
__match_args__: ClassVar[tuple[str, ...]] = ()
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
@streamable
|
|
@@ -52,13 +52,13 @@ class PlotPathRequestData(Streamable):
|
|
|
52
52
|
node_id: bytes32
|
|
53
53
|
page: uint32
|
|
54
54
|
page_size: uint32
|
|
55
|
-
filter:
|
|
55
|
+
filter: list[str] = dataclasses.field(default_factory=list)
|
|
56
56
|
reverse: bool = False
|
|
57
57
|
|
|
58
|
-
__match_args__: ClassVar[
|
|
58
|
+
__match_args__: ClassVar[tuple[str, ...]] = ()
|
|
59
59
|
|
|
60
60
|
|
|
61
|
-
def paginated_plot_request(source:
|
|
61
|
+
def paginated_plot_request(source: list[Any], request: PaginatedRequestData) -> dict[str, object]:
|
|
62
62
|
paginator: Paginator = Paginator(source, request.page_size)
|
|
63
63
|
return {
|
|
64
64
|
"node_id": request.node_id.hex(),
|
|
@@ -78,11 +78,16 @@ def plot_matches_filter(plot: Plot, filter_item: FilterItem) -> bool:
|
|
|
78
78
|
|
|
79
79
|
|
|
80
80
|
class FarmerRpcApi:
|
|
81
|
+
if TYPE_CHECKING:
|
|
82
|
+
from chia.rpc.rpc_server import RpcApiProtocol
|
|
83
|
+
|
|
84
|
+
_protocol_check: ClassVar[RpcApiProtocol] = cast("FarmerRpcApi", None)
|
|
85
|
+
|
|
81
86
|
def __init__(self, farmer: Farmer):
|
|
82
87
|
self.service = farmer
|
|
83
88
|
self.service_name = "chia_farmer"
|
|
84
89
|
|
|
85
|
-
def get_routes(self) ->
|
|
90
|
+
def get_routes(self) -> dict[str, Endpoint]:
|
|
86
91
|
return {
|
|
87
92
|
"/get_signage_point": self.get_signage_point,
|
|
88
93
|
"/get_signage_points": self.get_signage_points,
|
|
@@ -99,7 +104,7 @@ class FarmerRpcApi:
|
|
|
99
104
|
"/get_pool_login_link": self.get_pool_login_link,
|
|
100
105
|
}
|
|
101
106
|
|
|
102
|
-
async def _state_changed(self, change: str, change_data: Optional[
|
|
107
|
+
async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]]) -> list[WsRpcMessage]:
|
|
103
108
|
payloads = []
|
|
104
109
|
|
|
105
110
|
if change_data is None:
|
|
@@ -233,7 +238,7 @@ class FarmerRpcApi:
|
|
|
233
238
|
|
|
234
239
|
return payloads
|
|
235
240
|
|
|
236
|
-
async def get_signage_point(self, request:
|
|
241
|
+
async def get_signage_point(self, request: dict[str, Any]) -> EndpointResult:
|
|
237
242
|
sp_hash = bytes32.from_hexstr(request["sp_hash"])
|
|
238
243
|
sps = self.service.sps.get(sp_hash)
|
|
239
244
|
if sps is None or len(sps) < 1:
|
|
@@ -253,8 +258,8 @@ class FarmerRpcApi:
|
|
|
253
258
|
"proofs": pospaces,
|
|
254
259
|
}
|
|
255
260
|
|
|
256
|
-
async def get_signage_points(self, _:
|
|
257
|
-
result:
|
|
261
|
+
async def get_signage_points(self, _: dict[str, Any]) -> EndpointResult:
|
|
262
|
+
result: list[dict[str, Any]] = []
|
|
258
263
|
for sps in self.service.sps.values():
|
|
259
264
|
for sp in sps:
|
|
260
265
|
pospaces = self.service.proofs_of_space.get(sp.challenge_chain_sp, [])
|
|
@@ -273,12 +278,12 @@ class FarmerRpcApi:
|
|
|
273
278
|
)
|
|
274
279
|
return {"signage_points": result}
|
|
275
280
|
|
|
276
|
-
async def get_reward_targets(self, request:
|
|
281
|
+
async def get_reward_targets(self, request: dict[str, Any]) -> EndpointResult:
|
|
277
282
|
search_for_private_key = request["search_for_private_key"]
|
|
278
283
|
max_ph_to_search = request.get("max_ph_to_search", 500)
|
|
279
284
|
return await self.service.get_reward_targets(search_for_private_key, max_ph_to_search)
|
|
280
285
|
|
|
281
|
-
async def set_reward_targets(self, request:
|
|
286
|
+
async def set_reward_targets(self, request: dict[str, Any]) -> EndpointResult:
|
|
282
287
|
farmer_target, pool_target = None, None
|
|
283
288
|
if "farmer_target" in request:
|
|
284
289
|
farmer_target = request["farmer_target"]
|
|
@@ -296,7 +301,7 @@ class FarmerRpcApi:
|
|
|
296
301
|
)
|
|
297
302
|
return plot_count
|
|
298
303
|
|
|
299
|
-
async def get_pool_state(self, request:
|
|
304
|
+
async def get_pool_state(self, request: dict[str, Any]) -> EndpointResult:
|
|
300
305
|
pools_list = []
|
|
301
306
|
for p2_singleton_puzzle_hash, pool_dict in self.service.pool_state.items():
|
|
302
307
|
pool_state = pool_dict.copy()
|
|
@@ -304,26 +309,26 @@ class FarmerRpcApi:
|
|
|
304
309
|
pools_list.append(pool_state)
|
|
305
310
|
return {"pool_state": pools_list}
|
|
306
311
|
|
|
307
|
-
async def set_payout_instructions(self, request:
|
|
312
|
+
async def set_payout_instructions(self, request: dict[str, Any]) -> EndpointResult:
|
|
308
313
|
launcher_id: bytes32 = bytes32.from_hexstr(request["launcher_id"])
|
|
309
314
|
await self.service.set_payout_instructions(launcher_id, request["payout_instructions"])
|
|
310
315
|
return {}
|
|
311
316
|
|
|
312
|
-
async def get_harvesters(self, request:
|
|
317
|
+
async def get_harvesters(self, request: dict[str, Any]) -> EndpointResult:
|
|
313
318
|
return await self.service.get_harvesters(False)
|
|
314
319
|
|
|
315
|
-
async def get_harvesters_summary(self, _:
|
|
320
|
+
async def get_harvesters_summary(self, _: dict[str, object]) -> EndpointResult:
|
|
316
321
|
return await self.service.get_harvesters(True)
|
|
317
322
|
|
|
318
|
-
async def get_harvester_plots_valid(self, request_dict:
|
|
319
|
-
# TODO: Consider having a extra
|
|
323
|
+
async def get_harvester_plots_valid(self, request_dict: dict[str, object]) -> EndpointResult:
|
|
324
|
+
# TODO: Consider having a extra list[PlotInfo] in Receiver to avoid rebuilding the list for each call
|
|
320
325
|
request = PlotInfoRequestData.from_json_dict(request_dict)
|
|
321
326
|
plot_list = list(self.service.get_receiver(request.node_id).plots().values())
|
|
322
327
|
# Apply filter
|
|
323
328
|
plot_list = [
|
|
324
329
|
plot for plot in plot_list if all(plot_matches_filter(plot, filter_item) for filter_item in request.filter)
|
|
325
330
|
]
|
|
326
|
-
restricted_sort_keys:
|
|
331
|
+
restricted_sort_keys: list[str] = ["pool_contract_puzzle_hash", "pool_public_key", "plot_public_key"]
|
|
327
332
|
# Apply sort_key and reverse if sort_key is not restricted
|
|
328
333
|
if request.sort_key in restricted_sort_keys:
|
|
329
334
|
raise KeyError(f"Can't sort by optional attributes: {restricted_sort_keys}")
|
|
@@ -332,8 +337,8 @@ class FarmerRpcApi:
|
|
|
332
337
|
return paginated_plot_request(plot_list, request)
|
|
333
338
|
|
|
334
339
|
def paginated_plot_path_request(
|
|
335
|
-
self, source_func: Callable[[Receiver],
|
|
336
|
-
) ->
|
|
340
|
+
self, source_func: Callable[[Receiver], list[str]], request_dict: dict[str, object]
|
|
341
|
+
) -> dict[str, object]:
|
|
337
342
|
request: PlotPathRequestData = PlotPathRequestData.from_json_dict(request_dict)
|
|
338
343
|
receiver = self.service.get_receiver(request.node_id)
|
|
339
344
|
source = source_func(receiver)
|
|
@@ -343,16 +348,16 @@ class FarmerRpcApi:
|
|
|
343
348
|
source = sorted(source, reverse=request.reverse)
|
|
344
349
|
return paginated_plot_request(source, request)
|
|
345
350
|
|
|
346
|
-
async def get_harvester_plots_invalid(self, request_dict:
|
|
351
|
+
async def get_harvester_plots_invalid(self, request_dict: dict[str, object]) -> EndpointResult:
|
|
347
352
|
return self.paginated_plot_path_request(Receiver.invalid, request_dict)
|
|
348
353
|
|
|
349
|
-
async def get_harvester_plots_keys_missing(self, request_dict:
|
|
354
|
+
async def get_harvester_plots_keys_missing(self, request_dict: dict[str, object]) -> EndpointResult:
|
|
350
355
|
return self.paginated_plot_path_request(Receiver.keys_missing, request_dict)
|
|
351
356
|
|
|
352
|
-
async def get_harvester_plots_duplicates(self, request_dict:
|
|
357
|
+
async def get_harvester_plots_duplicates(self, request_dict: dict[str, object]) -> EndpointResult:
|
|
353
358
|
return self.paginated_plot_path_request(Receiver.duplicates, request_dict)
|
|
354
359
|
|
|
355
|
-
async def get_pool_login_link(self, request:
|
|
360
|
+
async def get_pool_login_link(self, request: dict[str, Any]) -> EndpointResult:
|
|
356
361
|
launcher_id: bytes32 = bytes32.from_hexstr(request["launcher_id"])
|
|
357
362
|
login_link: Optional[str] = await self.service.generate_login_link(launcher_id)
|
|
358
363
|
if login_link is None:
|
chia/rpc/farmer_rpc_client.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Any,
|
|
3
|
+
from typing import Any, Optional, cast
|
|
4
4
|
|
|
5
5
|
from chia.rpc.farmer_rpc_api import PlotInfoRequestData, PlotPathRequestData
|
|
6
6
|
from chia.rpc.rpc_client import RpcClient
|
|
@@ -17,16 +17,16 @@ class FarmerRpcClient(RpcClient):
|
|
|
17
17
|
to the full node.
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
-
async def get_signage_point(self, sp_hash: bytes32) -> Optional[
|
|
20
|
+
async def get_signage_point(self, sp_hash: bytes32) -> Optional[dict[str, Any]]:
|
|
21
21
|
try:
|
|
22
22
|
return await self.fetch("get_signage_point", {"sp_hash": sp_hash.hex()})
|
|
23
23
|
except ValueError:
|
|
24
24
|
return None
|
|
25
25
|
|
|
26
|
-
async def get_signage_points(self) ->
|
|
27
|
-
return cast(
|
|
26
|
+
async def get_signage_points(self) -> list[dict[str, Any]]:
|
|
27
|
+
return cast(list[dict[str, Any]], (await self.fetch("get_signage_points", {}))["signage_points"])
|
|
28
28
|
|
|
29
|
-
async def get_reward_targets(self, search_for_private_key: bool, max_ph_to_search: int = 500) ->
|
|
29
|
+
async def get_reward_targets(self, search_for_private_key: bool, max_ph_to_search: int = 500) -> dict[str, Any]:
|
|
30
30
|
response = await self.fetch(
|
|
31
31
|
"get_reward_targets",
|
|
32
32
|
{"search_for_private_key": search_for_private_key, "max_ph_to_search": max_ph_to_search},
|
|
@@ -45,7 +45,7 @@ class FarmerRpcClient(RpcClient):
|
|
|
45
45
|
self,
|
|
46
46
|
farmer_target: Optional[str] = None,
|
|
47
47
|
pool_target: Optional[str] = None,
|
|
48
|
-
) ->
|
|
48
|
+
) -> dict[str, Any]:
|
|
49
49
|
request = {}
|
|
50
50
|
if farmer_target is not None:
|
|
51
51
|
request["farmer_target"] = farmer_target
|
|
@@ -53,29 +53,29 @@ class FarmerRpcClient(RpcClient):
|
|
|
53
53
|
request["pool_target"] = pool_target
|
|
54
54
|
return await self.fetch("set_reward_targets", request)
|
|
55
55
|
|
|
56
|
-
async def get_pool_state(self) ->
|
|
56
|
+
async def get_pool_state(self) -> dict[str, Any]:
|
|
57
57
|
return await self.fetch("get_pool_state", {})
|
|
58
58
|
|
|
59
|
-
async def set_payout_instructions(self, launcher_id: bytes32, payout_instructions: str) ->
|
|
59
|
+
async def set_payout_instructions(self, launcher_id: bytes32, payout_instructions: str) -> dict[str, Any]:
|
|
60
60
|
request = {"launcher_id": launcher_id.hex(), "payout_instructions": payout_instructions}
|
|
61
61
|
return await self.fetch("set_payout_instructions", request)
|
|
62
62
|
|
|
63
|
-
async def get_harvesters(self) ->
|
|
63
|
+
async def get_harvesters(self) -> dict[str, Any]:
|
|
64
64
|
return await self.fetch("get_harvesters", {})
|
|
65
65
|
|
|
66
|
-
async def get_harvesters_summary(self) ->
|
|
66
|
+
async def get_harvesters_summary(self) -> dict[str, Any]:
|
|
67
67
|
return await self.fetch("get_harvesters_summary", {})
|
|
68
68
|
|
|
69
|
-
async def get_harvester_plots_valid(self, request: PlotInfoRequestData) ->
|
|
69
|
+
async def get_harvester_plots_valid(self, request: PlotInfoRequestData) -> dict[str, Any]:
|
|
70
70
|
return await self.fetch("get_harvester_plots_valid", recurse_jsonify(request))
|
|
71
71
|
|
|
72
|
-
async def get_harvester_plots_invalid(self, request: PlotPathRequestData) ->
|
|
72
|
+
async def get_harvester_plots_invalid(self, request: PlotPathRequestData) -> dict[str, Any]:
|
|
73
73
|
return await self.fetch("get_harvester_plots_invalid", recurse_jsonify(request))
|
|
74
74
|
|
|
75
|
-
async def get_harvester_plots_keys_missing(self, request: PlotPathRequestData) ->
|
|
75
|
+
async def get_harvester_plots_keys_missing(self, request: PlotPathRequestData) -> dict[str, Any]:
|
|
76
76
|
return await self.fetch("get_harvester_plots_keys_missing", recurse_jsonify(request))
|
|
77
77
|
|
|
78
|
-
async def get_harvester_plots_duplicates(self, request: PlotPathRequestData) ->
|
|
78
|
+
async def get_harvester_plots_duplicates(self, request: PlotPathRequestData) -> dict[str, Any]:
|
|
79
79
|
return await self.fetch("get_harvester_plots_duplicates", recurse_jsonify(request))
|
|
80
80
|
|
|
81
81
|
async def get_pool_login_link(self, launcher_id: bytes32) -> Optional[str]:
|