chia-blockchain 2.5.7rc4__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 +6 -6
- chia/full_node/block_store.py +13 -16
- chia/full_node/check_fork_next_block.py +1 -2
- chia/full_node/coin_store.py +15 -16
- chia/full_node/eligible_coin_spends.py +3 -3
- chia/full_node/fee_estimate_store.py +2 -3
- chia/full_node/fee_tracker.py +1 -2
- chia/full_node/full_block_utils.py +4 -4
- chia/full_node/full_node.py +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 +15 -15
- chia/simulator/simulator_full_node_rpc_api.py +1 -2
- chia/simulator/simulator_full_node_rpc_client.py +1 -2
- chia/simulator/simulator_protocol.py +1 -2
- chia/simulator/simulator_test_tools.py +3 -3
- chia/simulator/start_simulator.py +7 -7
- chia/simulator/wallet_tools.py +10 -10
- chia/solver/solver.py +10 -10
- chia/solver/solver_api.py +10 -8
- chia/solver/solver_rpc_api.py +2 -2
- chia/solver/start_solver.py +4 -4
- chia/ssl/cacert.pem +148 -90
- chia/ssl/chia_ca.crt +14 -10
- chia/ssl/chia_ca_old.crt +19 -0
- chia/ssl/create_ssl.py +4 -4
- chia/ssl/renewedselfsignedca.conf +4 -0
- chia/ssl/ssl_check.py +1 -2
- chia/timelord/iters_from_block.py +1 -4
- chia/timelord/start_timelord.py +4 -4
- chia/timelord/timelord.py +44 -40
- chia/timelord/timelord_api.py +6 -4
- chia/timelord/timelord_launcher.py +2 -2
- chia/timelord/timelord_rpc_api.py +2 -2
- chia/timelord/timelord_state.py +11 -12
- chia/types/block_protocol.py +1 -3
- chia/types/blockchain_format/coin.py +1 -3
- chia/types/blockchain_format/program.py +11 -8
- chia/types/blockchain_format/proof_of_space.py +123 -76
- chia/types/blockchain_format/tree_hash.py +3 -3
- chia/types/blockchain_format/vdf.py +1 -2
- chia/types/coin_spend.py +3 -3
- chia/types/mempool_item.py +5 -5
- chia/types/mempool_submission_status.py +2 -3
- chia/types/peer_info.py +1 -2
- chia/types/unfinished_header_block.py +3 -4
- chia/types/validation_state.py +1 -2
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +5 -5
- chia/util/bech32m.py +1 -2
- chia/util/beta_metrics.py +2 -2
- chia/util/block_cache.py +4 -4
- chia/util/chia_logging.py +2 -2
- chia/util/chia_version.py +1 -2
- chia/util/config.py +15 -16
- chia/util/db_wrapper.py +26 -27
- chia/util/default_root.py +1 -2
- chia/util/errors.py +3 -3
- chia/util/file_keyring.py +14 -14
- chia/util/files.py +2 -3
- chia/util/hash.py +4 -4
- chia/util/initial-config.yaml +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.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.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.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
chia/rpc/rpc_server.py
CHANGED
|
@@ -6,12 +6,12 @@ import json
|
|
|
6
6
|
import logging
|
|
7
7
|
import sys
|
|
8
8
|
import traceback
|
|
9
|
-
from collections.abc import AsyncIterator, Awaitable
|
|
9
|
+
from collections.abc import AsyncIterator, Awaitable, Callable
|
|
10
10
|
from dataclasses import dataclass
|
|
11
11
|
from pathlib import Path
|
|
12
12
|
from ssl import SSLContext
|
|
13
13
|
from types import MethodType
|
|
14
|
-
from typing import Any,
|
|
14
|
+
from typing import Any, ClassVar, Generic, TypeVar
|
|
15
15
|
|
|
16
16
|
from aiohttp import (
|
|
17
17
|
ClientConnectorError,
|
|
@@ -57,7 +57,7 @@ _T_RpcApiProtocol = TypeVar("_T_RpcApiProtocol", bound="RpcApiProtocol")
|
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
class StateChangedProtocol(Protocol):
|
|
60
|
-
def __call__(self, change: str, change_data:
|
|
60
|
+
def __call__(self, change: str, change_data: dict[str, Any] | None) -> None: ...
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
class RpcServiceProtocol(Protocol):
|
|
@@ -75,7 +75,7 @@ class RpcServiceProtocol(Protocol):
|
|
|
75
75
|
# Optional[ChiaServer]
|
|
76
76
|
...
|
|
77
77
|
|
|
78
|
-
def get_connections(self, request_node_type:
|
|
78
|
+
def get_connections(self, request_node_type: NodeType | None) -> list[dict[str, Any]]:
|
|
79
79
|
"""Report the active connections for the service.
|
|
80
80
|
|
|
81
81
|
A default implementation is available and can be called as
|
|
@@ -115,12 +115,12 @@ class RpcApiProtocol(Protocol):
|
|
|
115
115
|
"""Return the mapping of endpoints to handler callables."""
|
|
116
116
|
...
|
|
117
117
|
|
|
118
|
-
async def _state_changed(self, change: str, change_data:
|
|
118
|
+
async def _state_changed(self, change: str, change_data: dict[str, Any] | None) -> list[WsRpcMessage]:
|
|
119
119
|
"""Notify the state change system of a changed state."""
|
|
120
120
|
...
|
|
121
121
|
|
|
122
122
|
|
|
123
|
-
def default_get_connections(server: ChiaServer, request_node_type:
|
|
123
|
+
def default_get_connections(server: ChiaServer, request_node_type: NodeType | None) -> list[dict[str, Any]]:
|
|
124
124
|
connections = server.get_connections(request_node_type)
|
|
125
125
|
con_info = [
|
|
126
126
|
{
|
|
@@ -154,12 +154,12 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
|
|
|
154
154
|
ssl_client_context: SSLContext
|
|
155
155
|
net_config: dict[str, Any]
|
|
156
156
|
service_config: dict[str, Any]
|
|
157
|
-
webserver:
|
|
157
|
+
webserver: WebServer | None = None
|
|
158
158
|
daemon_heartbeat: int = 300
|
|
159
|
-
daemon_connection_task:
|
|
159
|
+
daemon_connection_task: asyncio.Task[None] | None = None
|
|
160
160
|
shut_down: bool = False
|
|
161
|
-
websocket:
|
|
162
|
-
client_session:
|
|
161
|
+
websocket: ClientWebSocketResponse | None = None
|
|
162
|
+
client_session: ClientSession | None = None
|
|
163
163
|
prefer_ipv6: bool = False
|
|
164
164
|
|
|
165
165
|
@classmethod
|
|
@@ -220,7 +220,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
|
|
|
220
220
|
await self.daemon_connection_task
|
|
221
221
|
self.daemon_connection_task = None
|
|
222
222
|
|
|
223
|
-
async def _state_changed(self, change: str, change_data:
|
|
223
|
+
async def _state_changed(self, change: str, change_data: dict[str, Any] | None) -> None:
|
|
224
224
|
if self.websocket is None or self.websocket.closed:
|
|
225
225
|
return None
|
|
226
226
|
payloads: list[WsRpcMessage] = await self.rpc_api._state_changed(change, change_data)
|
|
@@ -246,7 +246,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
|
|
|
246
246
|
tb = traceback.format_exc()
|
|
247
247
|
log.warning(f"Sending data failed. Exception {tb}.")
|
|
248
248
|
|
|
249
|
-
def state_changed(self, change: str, change_data:
|
|
249
|
+
def state_changed(self, change: str, change_data: dict[str, Any] | None = None) -> None:
|
|
250
250
|
if self.websocket is None or self.websocket.closed:
|
|
251
251
|
return None
|
|
252
252
|
create_referenced_task(self._state_changed(change, change_data), known_unreferenced=True)
|
|
@@ -280,7 +280,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
|
|
|
280
280
|
}
|
|
281
281
|
|
|
282
282
|
async def get_connections(self, request: dict[str, Any]) -> EndpointResult:
|
|
283
|
-
request_node_type:
|
|
283
|
+
request_node_type: NodeType | None = None
|
|
284
284
|
if "node_type" in request:
|
|
285
285
|
request_node_type = NodeType(request["node_type"])
|
|
286
286
|
if self.rpc_api.service.server is None:
|
|
@@ -361,7 +361,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
|
|
|
361
361
|
"errors": error_strings,
|
|
362
362
|
}
|
|
363
363
|
|
|
364
|
-
async def ws_api(self, message: WsRpcMessage) ->
|
|
364
|
+
async def ws_api(self, message: WsRpcMessage) -> dict[str, object] | None:
|
|
365
365
|
"""
|
|
366
366
|
This function gets called when new message is received via websocket.
|
|
367
367
|
"""
|
|
@@ -376,10 +376,10 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
|
|
|
376
376
|
if command == "ping":
|
|
377
377
|
return pong()
|
|
378
378
|
|
|
379
|
-
f_internal:
|
|
379
|
+
f_internal: Endpoint | None = getattr(self, command, None)
|
|
380
380
|
if f_internal is not None:
|
|
381
381
|
return await f_internal(data)
|
|
382
|
-
f_rpc_api:
|
|
382
|
+
f_rpc_api: Endpoint | None = getattr(self.rpc_api, command, None)
|
|
383
383
|
if f_rpc_api is not None:
|
|
384
384
|
return await f_rpc_api(data)
|
|
385
385
|
|
|
@@ -487,7 +487,7 @@ async def start_rpc_server(
|
|
|
487
487
|
net_config: dict[str, object],
|
|
488
488
|
service_config: dict[str, object],
|
|
489
489
|
connect_to_daemon: bool = True,
|
|
490
|
-
max_request_body_size:
|
|
490
|
+
max_request_body_size: int | None = None,
|
|
491
491
|
) -> RpcServer[_T_RpcApiProtocol]:
|
|
492
492
|
"""
|
|
493
493
|
Starts an HTTP server with the following RPC methods, to be used by local clients to
|
chia/rpc/util.py
CHANGED
|
@@ -2,8 +2,8 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
4
|
import traceback
|
|
5
|
-
from collections.abc import Awaitable
|
|
6
|
-
from typing import TYPE_CHECKING, Any,
|
|
5
|
+
from collections.abc import Awaitable, Callable
|
|
6
|
+
from typing import TYPE_CHECKING, Any, get_type_hints
|
|
7
7
|
|
|
8
8
|
import aiohttp
|
|
9
9
|
|
chia/seeder/crawler.py
CHANGED
|
@@ -7,10 +7,10 @@ import logging
|
|
|
7
7
|
import time
|
|
8
8
|
import traceback
|
|
9
9
|
from collections import defaultdict
|
|
10
|
-
from collections.abc import AsyncIterator, Awaitable
|
|
10
|
+
from collections.abc import AsyncIterator, Awaitable, Callable
|
|
11
11
|
from dataclasses import dataclass, field
|
|
12
12
|
from pathlib import Path
|
|
13
|
-
from typing import TYPE_CHECKING, Any,
|
|
13
|
+
from typing import TYPE_CHECKING, Any, ClassVar, cast
|
|
14
14
|
|
|
15
15
|
import aiosqlite
|
|
16
16
|
from chia_rs import ConsensusConstants
|
|
@@ -45,10 +45,10 @@ class Crawler:
|
|
|
45
45
|
root_path: Path
|
|
46
46
|
constants: ConsensusConstants
|
|
47
47
|
print_status: bool = True
|
|
48
|
-
state_changed_callback:
|
|
49
|
-
_server:
|
|
50
|
-
crawl_task:
|
|
51
|
-
crawl_store:
|
|
48
|
+
state_changed_callback: StateChangedProtocol | None = None
|
|
49
|
+
_server: ChiaServer | None = None
|
|
50
|
+
crawl_task: asyncio.Task[None] | None = None
|
|
51
|
+
crawl_store: CrawlStore | None = None
|
|
52
52
|
log: logging.Logger = log
|
|
53
53
|
_shut_down: bool = False
|
|
54
54
|
peer_count: int = 0
|
|
@@ -118,7 +118,7 @@ class Crawler:
|
|
|
118
118
|
def _set_state_changed_callback(self, callback: StateChangedProtocol) -> None:
|
|
119
119
|
self.state_changed_callback = callback
|
|
120
120
|
|
|
121
|
-
def get_connections(self, request_node_type:
|
|
121
|
+
def get_connections(self, request_node_type: NodeType | None) -> list[dict[str, Any]]:
|
|
122
122
|
return default_get_connections(server=self.server, request_node_type=request_node_type)
|
|
123
123
|
|
|
124
124
|
async def create_client(
|
|
@@ -322,7 +322,7 @@ class Crawler:
|
|
|
322
322
|
def set_server(self, server: ChiaServer) -> None:
|
|
323
323
|
self._server = server
|
|
324
324
|
|
|
325
|
-
def _state_changed(self, change: str, change_data:
|
|
325
|
+
def _state_changed(self, change: str, change_data: dict[str, Any] | None = None) -> None:
|
|
326
326
|
if self.state_changed_callback is not None:
|
|
327
327
|
self.state_changed_callback(change, change_data)
|
|
328
328
|
|
chia/seeder/crawler_api.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import TYPE_CHECKING, ClassVar,
|
|
4
|
+
from typing import TYPE_CHECKING, ClassVar, cast
|
|
5
5
|
|
|
6
6
|
from chia.protocols import full_node_protocol, wallet_protocol
|
|
7
7
|
from chia.protocols.outbound_message import Message
|
|
@@ -34,76 +34,70 @@ class CrawlerAPI:
|
|
|
34
34
|
return True
|
|
35
35
|
|
|
36
36
|
@metadata.request(peer_required=True)
|
|
37
|
-
async def request_peers(
|
|
38
|
-
self, _request: full_node_protocol.RequestPeers, peer: WSChiaConnection
|
|
39
|
-
) -> Optional[Message]:
|
|
37
|
+
async def request_peers(self, _request: full_node_protocol.RequestPeers, peer: WSChiaConnection) -> Message | None:
|
|
40
38
|
pass
|
|
41
39
|
|
|
42
40
|
@metadata.request(peer_required=True)
|
|
43
|
-
async def respond_peers(
|
|
44
|
-
self, request: full_node_protocol.RespondPeers, peer: WSChiaConnection
|
|
45
|
-
) -> Optional[Message]:
|
|
41
|
+
async def respond_peers(self, request: full_node_protocol.RespondPeers, peer: WSChiaConnection) -> Message | None:
|
|
46
42
|
pass
|
|
47
43
|
|
|
48
44
|
@metadata.request(peer_required=True)
|
|
49
|
-
async def new_peak(self, request: full_node_protocol.NewPeak, peer: WSChiaConnection) ->
|
|
45
|
+
async def new_peak(self, request: full_node_protocol.NewPeak, peer: WSChiaConnection) -> Message | None:
|
|
50
46
|
await self.crawler.new_peak(request, peer)
|
|
51
47
|
return None
|
|
52
48
|
|
|
53
49
|
@metadata.request()
|
|
54
|
-
async def new_transaction(self, transaction: full_node_protocol.NewTransaction) ->
|
|
50
|
+
async def new_transaction(self, transaction: full_node_protocol.NewTransaction) -> Message | None:
|
|
55
51
|
pass
|
|
56
52
|
|
|
57
53
|
@metadata.request(peer_required=True)
|
|
58
54
|
async def new_signage_point_or_end_of_sub_slot(
|
|
59
55
|
self, new_sp: full_node_protocol.NewSignagePointOrEndOfSubSlot, peer: WSChiaConnection
|
|
60
|
-
) ->
|
|
56
|
+
) -> Message | None:
|
|
61
57
|
pass
|
|
62
58
|
|
|
63
59
|
@metadata.request()
|
|
64
|
-
async def new_unfinished_block(
|
|
65
|
-
self, new_unfinished_block: full_node_protocol.NewUnfinishedBlock
|
|
66
|
-
) -> Optional[Message]:
|
|
60
|
+
async def new_unfinished_block(self, new_unfinished_block: full_node_protocol.NewUnfinishedBlock) -> Message | None:
|
|
67
61
|
pass
|
|
68
62
|
|
|
69
63
|
@metadata.request()
|
|
70
64
|
async def new_unfinished_block2(
|
|
71
65
|
self, new_unfinished_block: full_node_protocol.NewUnfinishedBlock2
|
|
72
|
-
) ->
|
|
66
|
+
) -> Message | None:
|
|
73
67
|
pass
|
|
74
68
|
|
|
75
69
|
@metadata.request(peer_required=True)
|
|
76
70
|
async def new_compact_vdf(
|
|
77
71
|
self, request: full_node_protocol.NewCompactVDF, peer: WSChiaConnection
|
|
78
|
-
) ->
|
|
72
|
+
) -> Message | None:
|
|
79
73
|
pass
|
|
80
74
|
|
|
81
75
|
@metadata.request()
|
|
82
|
-
async def request_transaction(self, request: full_node_protocol.RequestTransaction) ->
|
|
76
|
+
async def request_transaction(self, request: full_node_protocol.RequestTransaction) -> Message | None:
|
|
83
77
|
pass
|
|
84
78
|
|
|
85
79
|
@metadata.request()
|
|
86
|
-
async def request_proof_of_weight(self, request: full_node_protocol.RequestProofOfWeight) ->
|
|
80
|
+
async def request_proof_of_weight(self, request: full_node_protocol.RequestProofOfWeight) -> Message | None:
|
|
87
81
|
pass
|
|
88
82
|
|
|
89
83
|
@metadata.request()
|
|
90
|
-
async def request_block(self, request: full_node_protocol.RequestBlock) ->
|
|
84
|
+
async def request_block(self, request: full_node_protocol.RequestBlock) -> Message | None:
|
|
91
85
|
pass
|
|
92
86
|
|
|
93
87
|
@metadata.request()
|
|
94
|
-
async def request_blocks(self, request: full_node_protocol.RequestBlocks) ->
|
|
88
|
+
async def request_blocks(self, request: full_node_protocol.RequestBlocks) -> Message | None:
|
|
95
89
|
pass
|
|
96
90
|
|
|
97
91
|
@metadata.request()
|
|
98
92
|
async def request_unfinished_block(
|
|
99
93
|
self, request_unfinished_block: full_node_protocol.RequestUnfinishedBlock
|
|
100
|
-
) ->
|
|
94
|
+
) -> Message | None:
|
|
101
95
|
pass
|
|
102
96
|
|
|
103
97
|
@metadata.request()
|
|
104
98
|
async def request_signage_point_or_end_of_sub_slot(
|
|
105
99
|
self, request: full_node_protocol.RequestSignagePointOrEndOfSubSlot
|
|
106
|
-
) ->
|
|
100
|
+
) -> Message | None:
|
|
107
101
|
pass
|
|
108
102
|
|
|
109
103
|
@metadata.request(peer_required=True)
|
|
@@ -111,25 +105,25 @@ class CrawlerAPI:
|
|
|
111
105
|
self,
|
|
112
106
|
request: full_node_protocol.RequestMempoolTransactions,
|
|
113
107
|
peer: WSChiaConnection,
|
|
114
|
-
) ->
|
|
108
|
+
) -> Message | None:
|
|
115
109
|
pass
|
|
116
110
|
|
|
117
111
|
@metadata.request()
|
|
118
|
-
async def request_block_header(self, request: wallet_protocol.RequestBlockHeader) ->
|
|
112
|
+
async def request_block_header(self, request: wallet_protocol.RequestBlockHeader) -> Message | None:
|
|
119
113
|
pass
|
|
120
114
|
|
|
121
115
|
@metadata.request()
|
|
122
|
-
async def request_additions(self, request: wallet_protocol.RequestAdditions) ->
|
|
116
|
+
async def request_additions(self, request: wallet_protocol.RequestAdditions) -> Message | None:
|
|
123
117
|
pass
|
|
124
118
|
|
|
125
119
|
@metadata.request()
|
|
126
|
-
async def request_removals(self, request: wallet_protocol.RequestRemovals) ->
|
|
120
|
+
async def request_removals(self, request: wallet_protocol.RequestRemovals) -> Message | None:
|
|
127
121
|
pass
|
|
128
122
|
|
|
129
123
|
@metadata.request()
|
|
130
|
-
async def request_puzzle_solution(self, request: wallet_protocol.RequestPuzzleSolution) ->
|
|
124
|
+
async def request_puzzle_solution(self, request: wallet_protocol.RequestPuzzleSolution) -> Message | None:
|
|
131
125
|
pass
|
|
132
126
|
|
|
133
127
|
@metadata.request()
|
|
134
|
-
async def request_header_blocks(self, request: wallet_protocol.RequestHeaderBlocks) ->
|
|
128
|
+
async def request_header_blocks(self, request: wallet_protocol.RequestHeaderBlocks) -> Message | None:
|
|
135
129
|
pass
|
chia/seeder/crawler_rpc_api.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import ipaddress
|
|
4
|
-
from typing import TYPE_CHECKING, Any, ClassVar,
|
|
4
|
+
from typing import TYPE_CHECKING, Any, ClassVar, cast
|
|
5
5
|
|
|
6
6
|
from chia.rpc.rpc_server import Endpoint, EndpointResult
|
|
7
7
|
from chia.seeder.crawler import Crawler
|
|
@@ -24,7 +24,7 @@ class CrawlerRpcApi:
|
|
|
24
24
|
"/get_ips_after_timestamp": self.get_ips_after_timestamp,
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
async def _state_changed(self, change: str, change_data:
|
|
27
|
+
async def _state_changed(self, change: str, change_data: dict[str, Any] | None = None) -> list[WsRpcMessage]:
|
|
28
28
|
payloads = []
|
|
29
29
|
|
|
30
30
|
if change_data is None:
|
chia/seeder/dns_server.py
CHANGED
|
@@ -5,14 +5,14 @@ import logging
|
|
|
5
5
|
import signal
|
|
6
6
|
import sys
|
|
7
7
|
import traceback
|
|
8
|
-
from collections.abc import AsyncIterator, Awaitable
|
|
8
|
+
from collections.abc import AsyncIterator, Awaitable, Callable
|
|
9
9
|
from contextlib import asynccontextmanager
|
|
10
10
|
from dataclasses import dataclass, field
|
|
11
11
|
from ipaddress import IPv4Address, IPv6Address, ip_address
|
|
12
12
|
from multiprocessing import freeze_support
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
from types import FrameType
|
|
15
|
-
from typing import Any
|
|
15
|
+
from typing import Any
|
|
16
16
|
|
|
17
17
|
import aiosqlite
|
|
18
18
|
import dns.asyncresolver
|
|
@@ -58,9 +58,9 @@ class UDPDNSServerProtocol(asyncio.DatagramProtocol):
|
|
|
58
58
|
"""
|
|
59
59
|
|
|
60
60
|
callback: DnsCallback
|
|
61
|
-
transport:
|
|
61
|
+
transport: asyncio.DatagramTransport | None = field(init=False, default=None)
|
|
62
62
|
data_queue: asyncio.Queue[tuple[DNSRecord, tuple[str, int]]] = field(default_factory=asyncio.Queue)
|
|
63
|
-
queue_task:
|
|
63
|
+
queue_task: asyncio.Task[None] | None = field(init=False, default=None)
|
|
64
64
|
|
|
65
65
|
def start(self) -> None:
|
|
66
66
|
self.queue_task = create_referenced_task(self.respond()) # This starts the dns respond loop.
|
|
@@ -81,7 +81,7 @@ class UDPDNSServerProtocol(asyncio.DatagramProtocol):
|
|
|
81
81
|
|
|
82
82
|
def datagram_received(self, data: bytes, addr: tuple[str, int]) -> None:
|
|
83
83
|
log.debug(f"Received UDP DNS request from {addr}.")
|
|
84
|
-
dns_request:
|
|
84
|
+
dns_request: DNSRecord | None = parse_dns_request(data)
|
|
85
85
|
if dns_request is None: # Invalid Request, we can just drop it and move on.
|
|
86
86
|
return
|
|
87
87
|
create_referenced_task(self.handler(dns_request, addr), known_unreferenced=True)
|
|
@@ -123,7 +123,7 @@ class TCPDNSServerProtocol(asyncio.BufferedProtocol):
|
|
|
123
123
|
"""
|
|
124
124
|
|
|
125
125
|
callback: DnsCallback
|
|
126
|
-
transport:
|
|
126
|
+
transport: asyncio.Transport | None = field(init=False, default=None)
|
|
127
127
|
peer_info: str = field(init=False, default="")
|
|
128
128
|
expected_length: int = 0
|
|
129
129
|
buffer: bytearray = field(init=False, default_factory=lambda: bytearray(2))
|
|
@@ -139,7 +139,7 @@ class TCPDNSServerProtocol(asyncio.BufferedProtocol):
|
|
|
139
139
|
self.peer_info = f"{peer_info[0]}:{peer_info[1]}"
|
|
140
140
|
log.debug(f"TCP connection established with {self.peer_info}.")
|
|
141
141
|
|
|
142
|
-
def connection_lost(self, exc:
|
|
142
|
+
def connection_lost(self, exc: Exception | None) -> None:
|
|
143
143
|
"""
|
|
144
144
|
This is called whenever a connection is lost, or closed.
|
|
145
145
|
"""
|
|
@@ -178,7 +178,7 @@ class TCPDNSServerProtocol(asyncio.BufferedProtocol):
|
|
|
178
178
|
self.buffer = self.buffer[self.expected_length :] # Remove the message from the buffer
|
|
179
179
|
self.expected_length = 0 # Reset the expected length
|
|
180
180
|
|
|
181
|
-
dns_request:
|
|
181
|
+
dns_request: DNSRecord | None = parse_dns_request(message)
|
|
182
182
|
if dns_request is None: # Invalid Request, so we disconnect and don't send anything back.
|
|
183
183
|
self.transport.close()
|
|
184
184
|
return
|
|
@@ -186,7 +186,7 @@ class TCPDNSServerProtocol(asyncio.BufferedProtocol):
|
|
|
186
186
|
|
|
187
187
|
self.buffer = bytearray(2 if self.expected_length == 0 else self.expected_length) # Reset the buffer if empty.
|
|
188
188
|
|
|
189
|
-
def eof_received(self) ->
|
|
189
|
+
def eof_received(self) -> bool | None:
|
|
190
190
|
"""
|
|
191
191
|
This is called when the client closes the connection, False or None means we close the connection.
|
|
192
192
|
True means we keep the connection open.
|
|
@@ -241,11 +241,11 @@ def create_dns_reply(dns_request: DNSRecord) -> DNSRecord:
|
|
|
241
241
|
return DNSRecord(DNSHeader(id=dns_request.header.id, qr=1, aa=1, ra=0), q=dns_request.q)
|
|
242
242
|
|
|
243
243
|
|
|
244
|
-
def parse_dns_request(data: bytes) ->
|
|
244
|
+
def parse_dns_request(data: bytes) -> DNSRecord | None:
|
|
245
245
|
"""
|
|
246
246
|
Parses the DNS request, and returns a DNSRecord object, or None if the request is invalid.
|
|
247
247
|
"""
|
|
248
|
-
dns_request:
|
|
248
|
+
dns_request: DNSRecord | None = None
|
|
249
249
|
try:
|
|
250
250
|
dns_request = DNSRecord.parse(data)
|
|
251
251
|
except DNSError as e:
|
|
@@ -273,15 +273,15 @@ class DNSServer:
|
|
|
273
273
|
root_path: Path
|
|
274
274
|
lock: asyncio.Lock = field(default_factory=asyncio.Lock)
|
|
275
275
|
shutdown_event: asyncio.Event = field(default_factory=asyncio.Event)
|
|
276
|
-
crawl_store:
|
|
277
|
-
reliable_task:
|
|
276
|
+
crawl_store: CrawlStore | None = field(init=False, default=None)
|
|
277
|
+
reliable_task: asyncio.Task[None] | None = field(init=False, default=None)
|
|
278
278
|
shutting_down: bool = field(init=False, default=False)
|
|
279
|
-
udp_transport_ipv4:
|
|
280
|
-
udp_protocol_ipv4:
|
|
281
|
-
udp_transport_ipv6:
|
|
282
|
-
udp_protocol_ipv6:
|
|
279
|
+
udp_transport_ipv4: asyncio.DatagramTransport | None = field(init=False, default=None)
|
|
280
|
+
udp_protocol_ipv4: UDPDNSServerProtocol | None = field(init=False, default=None)
|
|
281
|
+
udp_transport_ipv6: asyncio.DatagramTransport | None = field(init=False, default=None)
|
|
282
|
+
udp_protocol_ipv6: UDPDNSServerProtocol | None = field(init=False, default=None)
|
|
283
283
|
# TODO: After 3.10 is dropped change to asyncio.Server
|
|
284
|
-
tcp_server:
|
|
284
|
+
tcp_server: asyncio.base_events.Server | None = field(init=False, default=None)
|
|
285
285
|
# these are all set in __post_init__
|
|
286
286
|
tcp_dns_port: int = field(init=False)
|
|
287
287
|
udp_dns_port: int = field(init=False)
|
|
@@ -295,7 +295,7 @@ class DNSServer:
|
|
|
295
295
|
reliable_peers_v6: list[IPv6Address] = field(default_factory=list)
|
|
296
296
|
static_peers_v4: list[IPv4Address] = field(default_factory=list)
|
|
297
297
|
static_peers_v6: list[IPv6Address] = field(default_factory=list)
|
|
298
|
-
resolver:
|
|
298
|
+
resolver: dns.asyncresolver.Resolver | None = field(init=False)
|
|
299
299
|
pointer_v4: int = 0
|
|
300
300
|
pointer_v6: int = 0
|
|
301
301
|
|
|
@@ -330,7 +330,7 @@ class DNSServer:
|
|
|
330
330
|
),
|
|
331
331
|
)
|
|
332
332
|
try:
|
|
333
|
-
self.resolver:
|
|
333
|
+
self.resolver: dns.asyncresolver.Resolver | None = dns.asyncresolver.Resolver()
|
|
334
334
|
except Exception:
|
|
335
335
|
self.resolver = None
|
|
336
336
|
log.exception("Error initializing asyncresolver for dns_server")
|
|
@@ -379,7 +379,7 @@ class DNSServer:
|
|
|
379
379
|
async def _accept_signal(
|
|
380
380
|
self,
|
|
381
381
|
signal_: signal.Signals,
|
|
382
|
-
stack_frame:
|
|
382
|
+
stack_frame: FrameType | None,
|
|
383
383
|
loop: asyncio.AbstractEventLoop,
|
|
384
384
|
) -> None: # pragma: no cover
|
|
385
385
|
log.info("Received signal %s (%s), shutting down.", signal_.name, signal_.value)
|
chia/seeder/start_crawler.py
CHANGED
|
@@ -4,11 +4,11 @@ import logging
|
|
|
4
4
|
import pathlib
|
|
5
5
|
import sys
|
|
6
6
|
from multiprocessing import freeze_support
|
|
7
|
-
from typing import Any
|
|
7
|
+
from typing import Any
|
|
8
8
|
|
|
9
9
|
from chia_rs import ConsensusConstants
|
|
10
10
|
|
|
11
|
-
from chia.apis import
|
|
11
|
+
from chia.apis import StubMetadataRegistry
|
|
12
12
|
from chia.consensus.constants import replace_str_to_bytes
|
|
13
13
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
14
14
|
from chia.protocols.outbound_message import NodeType
|
|
@@ -46,7 +46,7 @@ def create_full_node_crawler_service(
|
|
|
46
46
|
|
|
47
47
|
network_id = service_config["selected_network"]
|
|
48
48
|
|
|
49
|
-
rpc_info:
|
|
49
|
+
rpc_info: RpcInfo[CrawlerRpcApi] | None = None
|
|
50
50
|
if crawler_config.get("start_rpc_server", True):
|
|
51
51
|
rpc_info = (CrawlerRpcApi, crawler_config.get("rpc_port", 8561))
|
|
52
52
|
|
|
@@ -63,7 +63,7 @@ def create_full_node_crawler_service(
|
|
|
63
63
|
network_id=network_id,
|
|
64
64
|
rpc_info=rpc_info,
|
|
65
65
|
connect_to_daemon=connect_to_daemon,
|
|
66
|
-
|
|
66
|
+
stub_metadata_for_type=StubMetadataRegistry,
|
|
67
67
|
)
|
|
68
68
|
|
|
69
69
|
|
chia/server/address_manager.py
CHANGED
|
@@ -12,7 +12,6 @@ from pathlib import Path
|
|
|
12
12
|
from random import choice, randrange
|
|
13
13
|
from secrets import randbits
|
|
14
14
|
from timeit import default_timer as timer
|
|
15
|
-
from typing import Optional
|
|
16
15
|
|
|
17
16
|
import aiofiles
|
|
18
17
|
from chia_rs.sized_ints import uint16, uint32, uint64
|
|
@@ -45,7 +44,7 @@ class ExtendedPeerInfo:
|
|
|
45
44
|
def __init__(
|
|
46
45
|
self,
|
|
47
46
|
addr: TimestampedPeerInfo,
|
|
48
|
-
src_peer:
|
|
47
|
+
src_peer: PeerInfo | None,
|
|
49
48
|
):
|
|
50
49
|
self.peer_info: PeerInfo = PeerInfo(
|
|
51
50
|
addr.host,
|
|
@@ -57,7 +56,7 @@ class ExtendedPeerInfo:
|
|
|
57
56
|
self.src = src_peer
|
|
58
57
|
else:
|
|
59
58
|
self.src = self.peer_info
|
|
60
|
-
self.random_pos:
|
|
59
|
+
self.random_pos: int | None = None
|
|
61
60
|
self.is_tried: bool = False
|
|
62
61
|
self.ref_count: int = 0
|
|
63
62
|
self.last_success: int = 0
|
|
@@ -145,7 +144,7 @@ class ExtendedPeerInfo:
|
|
|
145
144
|
)
|
|
146
145
|
return hash2 % TRIED_BUCKET_COUNT
|
|
147
146
|
|
|
148
|
-
def get_new_bucket(self, key: int, src_peer:
|
|
147
|
+
def get_new_bucket(self, key: int, src_peer: PeerInfo | None = None) -> int:
|
|
149
148
|
if src_peer is None:
|
|
150
149
|
src_peer = self.src
|
|
151
150
|
assert src_peer is not None
|
|
@@ -175,7 +174,7 @@ class ExtendedPeerInfo:
|
|
|
175
174
|
)
|
|
176
175
|
return hash1 % BUCKET_SIZE
|
|
177
176
|
|
|
178
|
-
def is_terrible(self, now:
|
|
177
|
+
def is_terrible(self, now: int | None = None) -> bool:
|
|
179
178
|
if now is None:
|
|
180
179
|
now = math.floor(time.time())
|
|
181
180
|
# never remove things tried in the last minute
|
|
@@ -200,7 +199,7 @@ class ExtendedPeerInfo:
|
|
|
200
199
|
|
|
201
200
|
return False
|
|
202
201
|
|
|
203
|
-
def get_selection_chance(self, now:
|
|
202
|
+
def get_selection_chance(self, now: int | None = None) -> float:
|
|
204
203
|
if now is None:
|
|
205
204
|
now = math.floor(time.time())
|
|
206
205
|
chance = 1.0
|
|
@@ -247,7 +246,7 @@ class AddressManager:
|
|
|
247
246
|
"""
|
|
248
247
|
Create an address manager using data deserialized from a peers file.
|
|
249
248
|
"""
|
|
250
|
-
address_manager:
|
|
249
|
+
address_manager: AddressManager | None = None
|
|
251
250
|
if peers_file_path.exists():
|
|
252
251
|
try:
|
|
253
252
|
log.info(f"Loading peers from {peers_file_path}")
|
|
@@ -400,7 +399,7 @@ class AddressManager:
|
|
|
400
399
|
if not info.is_tried and info.ref_count == 0:
|
|
401
400
|
self.delete_new_entry_(id)
|
|
402
401
|
|
|
403
|
-
def create_(self, addr: TimestampedPeerInfo, addr_src:
|
|
402
|
+
def create_(self, addr: TimestampedPeerInfo, addr_src: PeerInfo | None) -> tuple[ExtendedPeerInfo, int]:
|
|
404
403
|
self.id_count += 1
|
|
405
404
|
node_id = self.id_count
|
|
406
405
|
self.map_info[node_id] = ExtendedPeerInfo(addr, addr_src)
|
|
@@ -409,7 +408,7 @@ class AddressManager:
|
|
|
409
408
|
self.random_pos.append(node_id)
|
|
410
409
|
return (self.map_info[node_id], node_id)
|
|
411
410
|
|
|
412
|
-
def find_(self, addr: PeerInfo) -> tuple[
|
|
411
|
+
def find_(self, addr: PeerInfo) -> tuple[ExtendedPeerInfo | None, int | None]:
|
|
413
412
|
if addr.host not in self.map_addr:
|
|
414
413
|
return (None, None)
|
|
415
414
|
node_id = self.map_addr[addr.host]
|
|
@@ -529,7 +528,7 @@ class AddressManager:
|
|
|
529
528
|
del self.map_info[node_id]
|
|
530
529
|
self.new_count -= 1
|
|
531
530
|
|
|
532
|
-
def add_to_new_table_(self, addr: TimestampedPeerInfo, source:
|
|
531
|
+
def add_to_new_table_(self, addr: TimestampedPeerInfo, source: PeerInfo | None, penalty: int) -> bool:
|
|
533
532
|
is_unique = False
|
|
534
533
|
peer_info = PeerInfo(
|
|
535
534
|
addr.host,
|
|
@@ -603,7 +602,7 @@ class AddressManager:
|
|
|
603
602
|
info.last_count_attempt = timestamp
|
|
604
603
|
info.num_attempts += 1
|
|
605
604
|
|
|
606
|
-
def select_peer_(self, new_only: bool) ->
|
|
605
|
+
def select_peer_(self, new_only: bool) -> ExtendedPeerInfo | None:
|
|
607
606
|
if len(self.random_pos) == 0:
|
|
608
607
|
return None
|
|
609
608
|
|
|
@@ -697,7 +696,7 @@ class AddressManager:
|
|
|
697
696
|
if resolved:
|
|
698
697
|
self.tried_collisions.remove(node_id)
|
|
699
698
|
|
|
700
|
-
def select_tried_collision_(self) ->
|
|
699
|
+
def select_tried_collision_(self) -> ExtendedPeerInfo | None:
|
|
701
700
|
if len(self.tried_collisions) == 0:
|
|
702
701
|
return None
|
|
703
702
|
new_id = choice(self.tried_collisions)
|
|
@@ -766,7 +765,7 @@ class AddressManager:
|
|
|
766
765
|
async def add_to_new_table(
|
|
767
766
|
self,
|
|
768
767
|
addresses: list[TimestampedPeerInfo],
|
|
769
|
-
source:
|
|
768
|
+
source: PeerInfo | None = None,
|
|
770
769
|
penalty: int = 0,
|
|
771
770
|
) -> bool:
|
|
772
771
|
is_added = False
|
|
@@ -806,12 +805,12 @@ class AddressManager:
|
|
|
806
805
|
self.resolve_tried_collisions_()
|
|
807
806
|
|
|
808
807
|
# Randomly select an address in tried that another address is attempting to evict.
|
|
809
|
-
async def select_tried_collision(self) ->
|
|
808
|
+
async def select_tried_collision(self) -> ExtendedPeerInfo | None:
|
|
810
809
|
async with self.lock:
|
|
811
810
|
return self.select_tried_collision_()
|
|
812
811
|
|
|
813
812
|
# Choose an address to connect to.
|
|
814
|
-
async def select_peer(self, new_only: bool = False) ->
|
|
813
|
+
async def select_peer(self, new_only: bool = False) -> ExtendedPeerInfo | None:
|
|
815
814
|
async with self.lock:
|
|
816
815
|
return self.select_peer_(new_only)
|
|
817
816
|
|
|
@@ -833,7 +832,7 @@ class AddressManager:
|
|
|
833
832
|
"""
|
|
834
833
|
Create an address manager using data deserialized from a peers file.
|
|
835
834
|
"""
|
|
836
|
-
peer_data:
|
|
835
|
+
peer_data: PeerDataSerialization | None = None
|
|
837
836
|
address_manager = AddressManager()
|
|
838
837
|
start_time = timer()
|
|
839
838
|
# if this fails, we pass the exception up to the function that called us and try the other type of deserializing
|