chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.6.0rc2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/__init__.py +8 -4
- chia/_tests/blockchain/blockchain_test_utils.py +6 -8
- chia/_tests/blockchain/test_augmented_chain.py +4 -4
- chia/_tests/blockchain/test_blockchain.py +165 -190
- chia/_tests/blockchain/test_blockchain_transactions.py +5 -2
- chia/_tests/blockchain/test_build_chains.py +2 -4
- chia/_tests/blockchain/test_get_block_generator.py +2 -3
- chia/_tests/clvm/coin_store.py +4 -7
- chia/_tests/clvm/test_clvm_step.py +4 -4
- chia/_tests/clvm/test_puzzle_compression.py +2 -1
- chia/_tests/clvm/test_puzzle_drivers.py +2 -2
- chia/_tests/clvm/test_singletons.py +2 -4
- chia/_tests/clvm/test_spend_sim.py +2 -2
- chia/_tests/cmds/cmd_test_utils.py +27 -45
- chia/_tests/cmds/test_cmd_framework.py +6 -6
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_show.py +4 -4
- chia/_tests/cmds/test_tx_config_args.py +1 -2
- chia/_tests/cmds/testing_classes.py +4 -5
- chia/_tests/cmds/wallet/test_did.py +24 -27
- chia/_tests/cmds/wallet/test_nft.py +12 -10
- chia/_tests/cmds/wallet/test_vcs.py +11 -12
- chia/_tests/cmds/wallet/test_wallet.py +134 -89
- chia/_tests/conftest.py +66 -31
- chia/_tests/connection_utils.py +2 -2
- chia/_tests/core/cmds/test_beta.py +4 -4
- chia/_tests/core/cmds/test_keys.py +2 -3
- chia/_tests/core/cmds/test_wallet.py +15 -15
- chia/_tests/core/consensus/test_pot_iterations.py +19 -73
- chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
- chia/_tests/core/daemon/test_daemon.py +11 -11
- chia/_tests/core/data_layer/conftest.py +2 -2
- chia/_tests/core/data_layer/test_data_rpc.py +28 -14
- chia/_tests/core/data_layer/test_data_store.py +10 -10
- chia/_tests/core/data_layer/util.py +11 -11
- chia/_tests/core/farmer/test_farmer_api.py +2 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
- chia/_tests/core/full_node/stores/test_block_store.py +5 -4
- chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
- chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +3 -4
- chia/_tests/core/full_node/test_conditions.py +21 -23
- chia/_tests/core/full_node/test_full_node.py +273 -70
- chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
- chia/_tests/core/full_node/test_hint_management.py +2 -4
- chia/_tests/core/full_node/test_performance.py +0 -1
- chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
- chia/_tests/core/full_node/test_transactions.py +1 -2
- chia/_tests/core/full_node/test_tx_processing_queue.py +198 -30
- chia/_tests/core/mempool/test_mempool.py +54 -50
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
- chia/_tests/core/mempool/test_mempool_manager.py +988 -854
- chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
- chia/_tests/core/server/serve.py +7 -7
- chia/_tests/core/server/test_dos.py +1 -2
- chia/_tests/core/server/test_event_loop.py +12 -4
- chia/_tests/core/server/test_loop.py +7 -8
- chia/_tests/core/server/test_rate_limits.py +9 -8
- chia/_tests/core/server/test_server.py +61 -1
- chia/_tests/core/services/test_services.py +2 -2
- chia/_tests/core/ssl/test_ssl.py +2 -2
- chia/_tests/core/test_cost_calculation.py +2 -6
- chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
- chia/_tests/core/test_filter.py +0 -1
- chia/_tests/core/test_full_node_rpc.py +2 -2
- chia/_tests/core/test_merkle_set.py +1 -2
- chia/_tests/core/test_seeder.py +4 -4
- chia/_tests/core/util/test_config.py +4 -4
- chia/_tests/core/util/test_jsonify.py +2 -2
- chia/_tests/core/util/test_keychain.py +3 -3
- chia/_tests/core/util/test_lockfile.py +2 -1
- chia/_tests/core/util/test_log_exceptions.py +1 -2
- chia/_tests/core/util/test_streamable.py +17 -17
- chia/_tests/db/test_db_wrapper.py +3 -2
- chia/_tests/environments/wallet.py +14 -14
- chia/_tests/ether.py +4 -3
- chia/_tests/farmer_harvester/test_farmer.py +41 -24
- chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
- chia/_tests/harvester/test_harvester_api.py +11 -4
- chia/_tests/plot_sync/test_plot_sync.py +13 -11
- chia/_tests/plot_sync/test_receiver.py +11 -10
- chia/_tests/plot_sync/test_sync_simulated.py +2 -2
- chia/_tests/plot_sync/util.py +1 -2
- chia/_tests/plotting/test_plot_manager.py +7 -6
- chia/_tests/plotting/test_prover.py +30 -38
- chia/_tests/pools/test_pool_cmdline.py +4 -6
- chia/_tests/pools/test_pool_rpc.py +203 -61
- chia/_tests/pools/test_pool_wallet.py +3 -3
- chia/_tests/pools/test_wallet_pool_store.py +1 -4
- chia/_tests/process_junit.py +2 -2
- chia/_tests/rpc/test_rpc_client.py +4 -4
- chia/_tests/rpc/test_rpc_server.py +3 -3
- chia/_tests/simulation/test_simulation.py +12 -25
- chia/_tests/solver/test_solver_service.py +13 -4
- chia/_tests/testconfig.py +2 -2
- chia/_tests/timelord/test_new_peak.py +22 -11
- chia/_tests/tools/test_run_block.py +0 -2
- chia/_tests/tools/test_virtual_project.py +2 -1
- chia/_tests/util/benchmarks.py +1 -0
- chia/_tests/util/blockchain.py +38 -36
- chia/_tests/util/blockchain_mock.py +11 -11
- chia/_tests/util/build_network_protocol_files.py +2 -1
- chia/_tests/util/coin_store.py +2 -1
- chia/_tests/util/config.py +1 -1
- chia/_tests/util/db_connection.py +2 -3
- chia/_tests/util/full_sync.py +9 -11
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/get_name_puzzle_conditions.py +2 -0
- chia/_tests/util/misc.py +24 -24
- chia/_tests/util/network_protocol_data.py +20 -3
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +292 -3
- chia/_tests/util/setup_nodes.py +62 -47
- chia/_tests/util/spend_sim.py +57 -57
- chia/_tests/util/test_async_pool.py +2 -3
- chia/_tests/util/test_chia_version.py +1 -3
- chia/_tests/util/test_config.py +3 -3
- chia/_tests/util/test_full_block_utils.py +6 -3
- chia/_tests/util/test_limited_semaphore.py +1 -2
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_network.py +1 -2
- chia/_tests/util/test_priority_mutex.py +3 -3
- chia/_tests/util/test_recursive_replace.py +5 -6
- chia/_tests/util/test_replace_str_to_bytes.py +9 -10
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/time_out_assert.py +2 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
- chia/_tests/wallet/conftest.py +6 -6
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
- chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
- chia/_tests/wallet/did_wallet/test_did.py +16 -6
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
- chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
- chia/_tests/wallet/sync/test_wallet_sync.py +63 -60
- chia/_tests/wallet/test_clvm_streamable.py +2 -3
- chia/_tests/wallet/test_coin_management.py +2 -2
- chia/_tests/wallet/test_conditions.py +45 -51
- chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
- chia/_tests/wallet/test_new_wallet_protocol.py +17 -17
- chia/_tests/wallet/test_notifications.py +14 -14
- chia/_tests/wallet/test_signer_protocol.py +5 -5
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
- chia/_tests/wallet/test_transaction_store.py +20 -20
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +380 -228
- chia/_tests/wallet/test_wallet_action_scope.py +4 -4
- chia/_tests/wallet/test_wallet_blockchain.py +12 -12
- chia/_tests/wallet/test_wallet_coin_store.py +3 -4
- chia/_tests/wallet/test_wallet_node.py +16 -15
- chia/_tests/wallet/test_wallet_test_framework.py +2 -1
- chia/_tests/wallet/test_wallet_utils.py +2 -3
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
- chia/_tests/wallet/wallet_block_tools.py +12 -11
- chia/_tests/weight_proof/config.py +1 -0
- chia/_tests/weight_proof/test_weight_proof.py +5 -4
- chia/apis/__init__.py +21 -0
- chia/apis/farmer_stub.py +102 -0
- chia/apis/full_node_stub.py +374 -0
- chia/apis/harvester_stub.py +57 -0
- chia/apis/introducer_stub.py +35 -0
- chia/apis/solver_stub.py +30 -0
- chia/apis/stub_protocol_registry.py +21 -0
- chia/apis/timelord_stub.py +39 -0
- chia/apis/wallet_stub.py +161 -0
- chia/cmds/beta.py +3 -4
- chia/cmds/beta_funcs.py +4 -3
- chia/cmds/check_wallet_db.py +4 -4
- chia/cmds/chia.py +1 -2
- chia/cmds/cmd_classes.py +11 -13
- chia/cmds/cmd_helpers.py +11 -11
- chia/cmds/cmds_util.py +15 -15
- chia/cmds/coin_funcs.py +6 -7
- chia/cmds/coins.py +2 -3
- chia/cmds/configure.py +1 -2
- chia/cmds/data.py +42 -42
- chia/cmds/data_funcs.py +81 -81
- chia/cmds/db.py +4 -5
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev/data.py +4 -4
- chia/cmds/dev/gh.py +5 -5
- chia/cmds/dev/installers.py +2 -3
- chia/cmds/dev/mempool.py +3 -4
- chia/cmds/dev/mempool_funcs.py +4 -4
- chia/cmds/dev/sim.py +8 -8
- chia/cmds/dump_keyring.py +3 -3
- chia/cmds/farm.py +6 -8
- chia/cmds/farm_funcs.py +25 -24
- chia/cmds/init_funcs.py +4 -4
- chia/cmds/keys.py +16 -18
- chia/cmds/keys_funcs.py +36 -36
- chia/cmds/netspace.py +1 -3
- chia/cmds/netspace_funcs.py +1 -2
- chia/cmds/options.py +3 -2
- chia/cmds/param_types.py +17 -16
- chia/cmds/passphrase.py +6 -7
- chia/cmds/passphrase_funcs.py +11 -13
- chia/cmds/peer.py +1 -3
- chia/cmds/peer_funcs.py +3 -3
- chia/cmds/plotnft.py +6 -7
- chia/cmds/plotnft_funcs.py +37 -26
- chia/cmds/rpc.py +3 -3
- chia/cmds/show.py +3 -5
- chia/cmds/show_funcs.py +9 -9
- chia/cmds/sim_funcs.py +25 -26
- chia/cmds/solver.py +1 -3
- chia/cmds/solver_funcs.py +1 -2
- chia/cmds/start_funcs.py +2 -2
- chia/cmds/wallet.py +76 -81
- chia/cmds/wallet_funcs.py +206 -177
- chia/consensus/augmented_chain.py +6 -6
- chia/consensus/block_body_validation.py +19 -15
- chia/consensus/block_creation.py +25 -21
- chia/consensus/block_header_validation.py +27 -13
- chia/consensus/block_height_map.py +3 -6
- chia/consensus/block_height_map_protocol.py +2 -2
- chia/consensus/block_record.py +2 -4
- chia/consensus/blockchain.py +58 -40
- chia/consensus/blockchain_interface.py +7 -7
- chia/consensus/coin_store_protocol.py +5 -6
- chia/consensus/condition_tools.py +4 -4
- chia/consensus/cost_calculator.py +2 -3
- chia/consensus/default_constants.py +19 -13
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +3 -5
- chia/consensus/find_fork_point.py +2 -4
- chia/consensus/full_block_to_block_record.py +11 -13
- chia/consensus/generator_tools.py +2 -3
- chia/consensus/get_block_challenge.py +50 -26
- chia/consensus/get_block_generator.py +2 -3
- chia/consensus/make_sub_epoch_summary.py +8 -7
- chia/consensus/multiprocess_validation.py +31 -20
- chia/consensus/pos_quality.py +6 -23
- chia/consensus/pot_iterations.py +17 -44
- chia/consensus/signage_point.py +4 -5
- chia/consensus/vdf_info_computation.py +2 -4
- chia/daemon/client.py +8 -8
- chia/daemon/keychain_proxy.py +31 -37
- chia/daemon/server.py +32 -33
- chia/daemon/windows_signal.py +4 -3
- chia/data_layer/data_layer.py +86 -77
- chia/data_layer/data_layer_rpc_api.py +9 -9
- chia/data_layer/data_layer_rpc_client.py +13 -15
- chia/data_layer/data_layer_server.py +3 -3
- chia/data_layer/data_layer_util.py +14 -14
- chia/data_layer/data_layer_wallet.py +94 -101
- chia/data_layer/data_store.py +50 -50
- chia/data_layer/dl_wallet_store.py +9 -12
- chia/data_layer/download_data.py +8 -9
- chia/data_layer/s3_plugin_service.py +5 -9
- chia/data_layer/start_data_layer.py +5 -5
- chia/farmer/farmer.py +31 -31
- chia/farmer/farmer_api.py +45 -33
- chia/farmer/farmer_rpc_api.py +5 -4
- chia/farmer/farmer_rpc_client.py +6 -6
- chia/farmer/start_farmer.py +6 -6
- chia/full_node/block_store.py +13 -16
- chia/full_node/check_fork_next_block.py +1 -2
- chia/full_node/coin_store.py +15 -16
- chia/full_node/eligible_coin_spends.py +3 -3
- chia/full_node/fee_estimate_store.py +2 -3
- chia/full_node/fee_tracker.py +1 -2
- chia/full_node/full_block_utils.py +4 -4
- chia/full_node/full_node.py +239 -223
- chia/full_node/full_node_api.py +197 -152
- chia/full_node/full_node_rpc_api.py +34 -32
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- chia/full_node/hard_fork_utils.py +44 -0
- chia/full_node/hint_management.py +2 -2
- chia/full_node/mempool.py +17 -19
- chia/full_node/mempool_manager.py +89 -42
- chia/full_node/pending_tx_cache.py +2 -3
- chia/full_node/start_full_node.py +5 -5
- chia/full_node/sync_store.py +3 -4
- chia/full_node/tx_processing_queue.py +120 -36
- chia/full_node/weight_proof.py +61 -48
- chia/harvester/harvester.py +25 -24
- chia/harvester/harvester_api.py +61 -38
- chia/harvester/harvester_rpc_api.py +10 -10
- chia/harvester/start_harvester.py +4 -4
- chia/introducer/introducer.py +3 -3
- chia/introducer/introducer_api.py +6 -4
- chia/introducer/start_introducer.py +4 -4
- chia/legacy/keyring.py +3 -3
- chia/plot_sync/delta.py +1 -2
- chia/plot_sync/receiver.py +20 -17
- chia/plot_sync/sender.py +15 -10
- chia/plotters/bladebit.py +7 -7
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +4 -4
- chia/plotters/plotters.py +4 -4
- chia/plotters/plotters_util.py +3 -3
- chia/plotting/cache.py +20 -14
- chia/plotting/check_plots.py +26 -35
- chia/plotting/create_plots.py +22 -23
- chia/plotting/manager.py +21 -14
- chia/plotting/prover.py +59 -42
- chia/plotting/util.py +16 -16
- chia/pools/pool_config.py +2 -1
- chia/pools/pool_puzzles.py +11 -12
- chia/pools/pool_wallet.py +34 -57
- chia/pools/pool_wallet_info.py +39 -10
- chia/protocols/farmer_protocol.py +8 -9
- chia/protocols/fee_estimate.py +3 -4
- chia/protocols/full_node_protocol.py +3 -4
- chia/protocols/harvester_protocol.py +27 -15
- chia/protocols/outbound_message.py +3 -3
- chia/protocols/pool_protocol.py +8 -9
- chia/protocols/shared_protocol.py +1 -2
- chia/protocols/solver_protocol.py +9 -2
- chia/protocols/timelord_protocol.py +4 -7
- chia/protocols/wallet_protocol.py +11 -12
- chia/rpc/rpc_client.py +9 -9
- chia/rpc/rpc_server.py +17 -17
- chia/rpc/util.py +2 -2
- chia/seeder/crawler.py +8 -8
- chia/seeder/crawler_api.py +21 -27
- chia/seeder/crawler_rpc_api.py +2 -2
- chia/seeder/dns_server.py +21 -21
- chia/seeder/start_crawler.py +4 -4
- chia/server/address_manager.py +15 -16
- chia/server/api_protocol.py +11 -11
- chia/server/chia_policy.py +46 -26
- chia/server/introducer_peers.py +2 -3
- chia/server/node_discovery.py +19 -19
- chia/server/rate_limit_numbers.py +4 -5
- chia/server/rate_limits.py +4 -4
- chia/server/resolve_peer_info.py +4 -4
- chia/server/server.py +49 -52
- chia/server/signal_handlers.py +6 -6
- chia/server/start_service.py +17 -17
- chia/server/upnp.py +4 -6
- chia/server/ws_connection.py +52 -37
- chia/simulator/add_blocks_in_batches.py +1 -3
- chia/simulator/block_tools.py +312 -200
- chia/simulator/full_node_simulator.py +56 -35
- chia/simulator/keyring.py +2 -3
- chia/simulator/setup_services.py +15 -15
- chia/simulator/simulator_full_node_rpc_api.py +1 -2
- chia/simulator/simulator_full_node_rpc_client.py +1 -2
- chia/simulator/simulator_protocol.py +1 -2
- chia/simulator/simulator_test_tools.py +3 -3
- chia/simulator/start_simulator.py +7 -7
- chia/simulator/wallet_tools.py +10 -10
- chia/solver/solver.py +10 -10
- chia/solver/solver_api.py +10 -8
- chia/solver/solver_rpc_api.py +2 -2
- chia/solver/start_solver.py +4 -4
- chia/ssl/cacert.pem +148 -90
- chia/ssl/chia_ca.crt +14 -10
- chia/ssl/chia_ca_old.crt +19 -0
- chia/ssl/create_ssl.py +4 -4
- chia/ssl/renewedselfsignedca.conf +4 -0
- chia/ssl/ssl_check.py +1 -2
- chia/timelord/iters_from_block.py +1 -4
- chia/timelord/start_timelord.py +4 -4
- chia/timelord/timelord.py +44 -40
- chia/timelord/timelord_api.py +6 -4
- chia/timelord/timelord_launcher.py +2 -2
- chia/timelord/timelord_rpc_api.py +2 -2
- chia/timelord/timelord_state.py +11 -12
- chia/types/block_protocol.py +1 -3
- chia/types/blockchain_format/coin.py +1 -3
- chia/types/blockchain_format/program.py +11 -8
- chia/types/blockchain_format/proof_of_space.py +123 -76
- chia/types/blockchain_format/tree_hash.py +3 -3
- chia/types/blockchain_format/vdf.py +1 -2
- chia/types/coin_spend.py +3 -3
- chia/types/mempool_item.py +5 -5
- chia/types/mempool_submission_status.py +2 -3
- chia/types/peer_info.py +1 -2
- chia/types/unfinished_header_block.py +3 -4
- chia/types/validation_state.py +1 -2
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +5 -5
- chia/util/bech32m.py +1 -2
- chia/util/beta_metrics.py +2 -2
- chia/util/block_cache.py +4 -4
- chia/util/chia_logging.py +2 -2
- chia/util/chia_version.py +1 -2
- chia/util/config.py +15 -16
- chia/util/db_wrapper.py +26 -27
- chia/util/default_root.py +1 -2
- chia/util/errors.py +3 -3
- chia/util/file_keyring.py +14 -14
- chia/util/files.py +2 -3
- chia/util/hash.py +4 -4
- chia/util/initial-config.yaml +4 -5
- chia/util/inline_executor.py +2 -1
- chia/util/ip_address.py +1 -2
- chia/util/keychain.py +25 -27
- chia/util/keyring_wrapper.py +18 -19
- chia/util/lock.py +3 -4
- chia/util/log_exceptions.py +1 -2
- chia/util/lru_cache.py +2 -2
- chia/util/network.py +6 -6
- chia/util/path.py +2 -3
- chia/util/priority_mutex.py +2 -2
- chia/util/profiler.py +1 -2
- chia/util/safe_cancel_task.py +1 -2
- chia/util/streamable.py +24 -10
- chia/util/task_referencer.py +1 -1
- chia/util/timing.py +3 -3
- chia/util/virtual_project_analysis.py +6 -5
- chia/util/ws_message.py +2 -2
- chia/wallet/cat_wallet/cat_info.py +3 -4
- chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
- chia/wallet/cat_wallet/cat_utils.py +3 -4
- chia/wallet/cat_wallet/cat_wallet.py +61 -83
- chia/wallet/cat_wallet/lineage_store.py +3 -4
- chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
- chia/wallet/coin_selection.py +9 -10
- chia/wallet/conditions.py +142 -106
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
- chia/wallet/derivation_record.py +1 -2
- chia/wallet/derive_keys.py +2 -4
- chia/wallet/did_wallet/did_info.py +10 -11
- chia/wallet/did_wallet/did_wallet.py +36 -82
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
- chia/wallet/driver_protocol.py +5 -7
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
- chia/wallet/nft_wallet/nft_info.py +8 -9
- chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
- chia/wallet/nft_wallet/nft_wallet.py +79 -116
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
- chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
- chia/wallet/nft_wallet/uncurry_nft.py +10 -11
- chia/wallet/notification_manager.py +3 -3
- chia/wallet/notification_store.py +44 -61
- chia/wallet/outer_puzzles.py +6 -7
- chia/wallet/puzzle_drivers.py +34 -6
- chia/wallet/puzzles/clawback/drivers.py +6 -6
- chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
- chia/wallet/puzzles/load_clvm.py +1 -1
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
- chia/wallet/puzzles/singleton_top_layer.py +2 -3
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
- chia/wallet/puzzles/tails.py +3 -3
- chia/wallet/singleton.py +5 -7
- chia/wallet/singleton_record.py +3 -3
- chia/wallet/start_wallet.py +5 -5
- chia/wallet/trade_manager.py +37 -58
- chia/wallet/trade_record.py +4 -4
- chia/wallet/trading/offer.py +59 -46
- chia/wallet/trading/trade_store.py +8 -9
- chia/wallet/transaction_record.py +8 -8
- chia/wallet/uncurried_puzzle.py +1 -2
- chia/wallet/util/clvm_streamable.py +12 -12
- chia/wallet/util/compute_hints.py +4 -5
- chia/wallet/util/curry_and_treehash.py +1 -2
- chia/wallet/util/merkle_tree.py +2 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/wallet/util/signing.py +85 -0
- chia/wallet/util/tx_config.py +15 -6
- chia/wallet/util/wallet_sync_utils.py +14 -16
- chia/wallet/util/wallet_types.py +2 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
- chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
- chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
- chia/wallet/vc_wallet/vc_drivers.py +27 -27
- chia/wallet/vc_wallet/vc_store.py +5 -6
- chia/wallet/vc_wallet/vc_wallet.py +33 -61
- chia/wallet/wallet.py +50 -78
- chia/wallet/wallet_action_scope.py +11 -11
- chia/wallet/wallet_blockchain.py +12 -12
- chia/wallet/wallet_coin_record.py +12 -6
- chia/wallet/wallet_coin_store.py +24 -25
- chia/wallet/wallet_interested_store.py +3 -5
- chia/wallet/wallet_nft_store.py +10 -11
- chia/wallet/wallet_node.py +53 -61
- chia/wallet/wallet_node_api.py +5 -3
- chia/wallet/wallet_protocol.py +23 -23
- chia/wallet/wallet_puzzle_store.py +15 -18
- chia/wallet/wallet_request_types.py +778 -114
- chia/wallet/wallet_retry_store.py +1 -3
- chia/wallet/wallet_rpc_api.py +572 -909
- chia/wallet/wallet_rpc_client.py +87 -279
- chia/wallet/wallet_singleton_store.py +3 -4
- chia/wallet/wallet_state_manager.py +332 -106
- chia/wallet/wallet_transaction_store.py +11 -14
- chia/wallet/wallet_user_store.py +4 -6
- chia/wallet/wallet_weight_proof_handler.py +4 -4
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
- chia/apis.py +0 -21
- chia/consensus/check_time_locks.py +0 -57
- chia/data_layer/puzzles/__init__.py +0 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
- chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
- chia/types/coin_record.py +0 -44
- chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
chia/server/server.py
CHANGED
|
@@ -5,11 +5,11 @@ import logging
|
|
|
5
5
|
import ssl
|
|
6
6
|
import time
|
|
7
7
|
import traceback
|
|
8
|
-
from collections.abc import Awaitable
|
|
8
|
+
from collections.abc import Awaitable, Callable
|
|
9
9
|
from dataclasses import dataclass, field
|
|
10
10
|
from ipaddress import IPv4Network, IPv6Network, ip_network
|
|
11
11
|
from pathlib import Path
|
|
12
|
-
from typing import Any,
|
|
12
|
+
from typing import Any, cast
|
|
13
13
|
|
|
14
14
|
from aiohttp import (
|
|
15
15
|
ClientResponseError,
|
|
@@ -31,7 +31,7 @@ from chia.protocols.outbound_message import Message, NodeType
|
|
|
31
31
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
32
32
|
from chia.protocols.protocol_state_machine import message_requires_reply
|
|
33
33
|
from chia.protocols.protocol_timing import INVALID_PROTOCOL_BAN_SECONDS
|
|
34
|
-
from chia.server.api_protocol import ApiProtocol
|
|
34
|
+
from chia.server.api_protocol import ApiMetadata, ApiProtocol
|
|
35
35
|
from chia.server.introducer_peers import IntroducerPeers
|
|
36
36
|
from chia.server.ssl_context import private_ssl_paths, public_ssl_paths
|
|
37
37
|
from chia.server.ws_connection import ConnectionCallback, WSChiaConnection
|
|
@@ -52,33 +52,21 @@ def ssl_context_for_server(
|
|
|
52
52
|
key_path: Path,
|
|
53
53
|
*,
|
|
54
54
|
check_permissions: bool = True,
|
|
55
|
-
log:
|
|
55
|
+
log: logging.Logger | None = None,
|
|
56
56
|
) -> ssl.SSLContext:
|
|
57
57
|
if check_permissions:
|
|
58
58
|
verify_ssl_certs_and_keys([ca_cert, cert_path], [ca_key, key_path], log)
|
|
59
59
|
|
|
60
60
|
ssl_context = ssl._create_unverified_context(purpose=ssl.Purpose.CLIENT_AUTH, cafile=str(ca_cert)) # noqa: S323
|
|
61
61
|
ssl_context.check_hostname = False
|
|
62
|
-
ssl_context.minimum_version = ssl.TLSVersion.
|
|
63
|
-
ssl_context.set_ciphers(
|
|
64
|
-
"ECDHE-ECDSA-AES256-GCM-SHA384:"
|
|
65
|
-
"ECDHE-RSA-AES256-GCM-SHA384:"
|
|
66
|
-
"ECDHE-ECDSA-CHACHA20-POLY1305:"
|
|
67
|
-
"ECDHE-RSA-CHACHA20-POLY1305:"
|
|
68
|
-
"ECDHE-ECDSA-AES128-GCM-SHA256:"
|
|
69
|
-
"ECDHE-RSA-AES128-GCM-SHA256:"
|
|
70
|
-
"ECDHE-ECDSA-AES256-SHA384:"
|
|
71
|
-
"ECDHE-RSA-AES256-SHA384:"
|
|
72
|
-
"ECDHE-ECDSA-AES128-SHA256:"
|
|
73
|
-
"ECDHE-RSA-AES128-SHA256"
|
|
74
|
-
)
|
|
62
|
+
ssl_context.minimum_version = ssl.TLSVersion.TLSv1_3
|
|
75
63
|
ssl_context.load_cert_chain(certfile=str(cert_path), keyfile=str(key_path))
|
|
76
64
|
ssl_context.verify_mode = ssl.CERT_REQUIRED
|
|
77
65
|
return ssl_context
|
|
78
66
|
|
|
79
67
|
|
|
80
68
|
def ssl_context_for_root(
|
|
81
|
-
ca_cert_file: str, *, check_permissions: bool = True, log:
|
|
69
|
+
ca_cert_file: str, *, check_permissions: bool = True, log: logging.Logger | None = None
|
|
82
70
|
) -> ssl.SSLContext:
|
|
83
71
|
if check_permissions:
|
|
84
72
|
verify_ssl_certs_and_keys([Path(ca_cert_file)], [], log)
|
|
@@ -94,7 +82,7 @@ def ssl_context_for_client(
|
|
|
94
82
|
key_path: Path,
|
|
95
83
|
*,
|
|
96
84
|
check_permissions: bool = True,
|
|
97
|
-
log:
|
|
85
|
+
log: logging.Logger | None = None,
|
|
98
86
|
) -> ssl.SSLContext:
|
|
99
87
|
if check_permissions:
|
|
100
88
|
verify_ssl_certs_and_keys([ca_cert, cert_path], [ca_key, key_path], log)
|
|
@@ -116,7 +104,7 @@ def calculate_node_id(cert_path: Path) -> bytes32:
|
|
|
116
104
|
@final
|
|
117
105
|
@dataclass
|
|
118
106
|
class ChiaServer:
|
|
119
|
-
_port:
|
|
107
|
+
_port: int | None
|
|
120
108
|
_local_type: NodeType
|
|
121
109
|
_local_capabilities_for_handshake: list[tuple[uint16, str]]
|
|
122
110
|
_ping_interval: int
|
|
@@ -131,23 +119,23 @@ class ChiaServer:
|
|
|
131
119
|
ssl_context: ssl.SSLContext
|
|
132
120
|
ssl_client_context: ssl.SSLContext
|
|
133
121
|
node_id: bytes32
|
|
134
|
-
exempt_peer_networks: list[
|
|
135
|
-
|
|
122
|
+
exempt_peer_networks: list[IPv4Network | IPv6Network]
|
|
123
|
+
stub_metadata_for_type: dict[NodeType, ApiMetadata]
|
|
136
124
|
all_connections: dict[bytes32, WSChiaConnection] = field(default_factory=dict)
|
|
137
|
-
on_connect:
|
|
125
|
+
on_connect: ConnectionCallback | None = None
|
|
138
126
|
shut_down_event: asyncio.Event = field(default_factory=asyncio.Event)
|
|
139
|
-
introducer_peers:
|
|
140
|
-
gc_task:
|
|
141
|
-
webserver:
|
|
142
|
-
connection_close_task:
|
|
143
|
-
received_message_callback:
|
|
127
|
+
introducer_peers: IntroducerPeers | None = None
|
|
128
|
+
gc_task: asyncio.Task[None] | None = None
|
|
129
|
+
webserver: WebServer | None = None
|
|
130
|
+
connection_close_task: asyncio.Task[None] | None = None
|
|
131
|
+
received_message_callback: ConnectionCallback | None = None
|
|
144
132
|
banned_peers: dict[str, float] = field(default_factory=dict)
|
|
145
133
|
invalid_protocol_ban_seconds: int = INVALID_PROTOCOL_BAN_SECONDS
|
|
146
134
|
|
|
147
135
|
@classmethod
|
|
148
136
|
def create(
|
|
149
137
|
cls,
|
|
150
|
-
port:
|
|
138
|
+
port: int | None,
|
|
151
139
|
node: Any,
|
|
152
140
|
api: ApiProtocol,
|
|
153
141
|
local_type: NodeType,
|
|
@@ -160,7 +148,7 @@ class ChiaServer:
|
|
|
160
148
|
config: dict[str, Any],
|
|
161
149
|
private_ca_crt_key: tuple[Path, Path],
|
|
162
150
|
chia_ca_crt_key: tuple[Path, Path],
|
|
163
|
-
|
|
151
|
+
stub_metadata_for_type: dict[NodeType, ApiMetadata],
|
|
164
152
|
name: str = __name__,
|
|
165
153
|
) -> ChiaServer:
|
|
166
154
|
log = logging.getLogger(name)
|
|
@@ -241,7 +229,7 @@ class ChiaServer:
|
|
|
241
229
|
node_id=calculate_node_id(node_id_cert_path),
|
|
242
230
|
exempt_peer_networks=[ip_network(net, strict=False) for net in config.get("exempt_peer_networks", [])],
|
|
243
231
|
introducer_peers=IntroducerPeers() if local_type is NodeType.INTRODUCER else None,
|
|
244
|
-
|
|
232
|
+
stub_metadata_for_type=stub_metadata_for_type,
|
|
245
233
|
)
|
|
246
234
|
|
|
247
235
|
def set_received_message_callback(self, callback: ConnectionCallback) -> None:
|
|
@@ -285,7 +273,7 @@ class ChiaServer:
|
|
|
285
273
|
async def start(
|
|
286
274
|
self,
|
|
287
275
|
prefer_ipv6: bool,
|
|
288
|
-
on_connect:
|
|
276
|
+
on_connect: ConnectionCallback | None = None,
|
|
289
277
|
) -> None:
|
|
290
278
|
if self.webserver is not None:
|
|
291
279
|
raise RuntimeError("ChiaServer already started")
|
|
@@ -326,7 +314,7 @@ class ChiaServer:
|
|
|
326
314
|
peer_id = bytes32(der_cert.fingerprint(hashes.SHA256()))
|
|
327
315
|
if peer_id == self.node_id:
|
|
328
316
|
return ws
|
|
329
|
-
connection:
|
|
317
|
+
connection: WSChiaConnection | None = None
|
|
330
318
|
try:
|
|
331
319
|
connection = WSChiaConnection.create(
|
|
332
320
|
local_type=self._local_type,
|
|
@@ -341,7 +329,8 @@ class ChiaServer:
|
|
|
341
329
|
inbound_rate_limit_percent=self._inbound_rate_limit_percent,
|
|
342
330
|
outbound_rate_limit_percent=self._outbound_rate_limit_percent,
|
|
343
331
|
local_capabilities_for_handshake=self._local_capabilities_for_handshake,
|
|
344
|
-
|
|
332
|
+
stub_metadata_for_type=self.stub_metadata_for_type,
|
|
333
|
+
exempt_peer_networks=self.exempt_peer_networks,
|
|
345
334
|
)
|
|
346
335
|
await connection.perform_handshake(self._network_id, self.get_port(), self._local_type)
|
|
347
336
|
assert connection.connection_type is not None, "handshake failed to set connection type, still None"
|
|
@@ -384,7 +373,7 @@ class ChiaServer:
|
|
|
384
373
|
return ws
|
|
385
374
|
|
|
386
375
|
async def connection_added(
|
|
387
|
-
self, connection: WSChiaConnection, on_connect:
|
|
376
|
+
self, connection: WSChiaConnection, on_connect: ConnectionCallback | None = None
|
|
388
377
|
) -> None:
|
|
389
378
|
# If we already had a connection to this peer_id, close the old one. This is secure because peer_ids are based
|
|
390
379
|
# on TLS public keys
|
|
@@ -416,7 +405,7 @@ class ChiaServer:
|
|
|
416
405
|
async def start_client(
|
|
417
406
|
self,
|
|
418
407
|
target_node: PeerInfo,
|
|
419
|
-
on_connect:
|
|
408
|
+
on_connect: ConnectionCallback | None = None,
|
|
420
409
|
is_feeler: bool = False,
|
|
421
410
|
) -> bool:
|
|
422
411
|
"""
|
|
@@ -432,7 +421,7 @@ class ChiaServer:
|
|
|
432
421
|
return False
|
|
433
422
|
|
|
434
423
|
session = None
|
|
435
|
-
connection:
|
|
424
|
+
connection: WSChiaConnection | None = None
|
|
436
425
|
try:
|
|
437
426
|
# Crawler/DNS introducer usually uses a lower timeout than the default
|
|
438
427
|
timeout_value = float(self.config.get("peer_connect_timeout", 30))
|
|
@@ -492,8 +481,9 @@ class ChiaServer:
|
|
|
492
481
|
inbound_rate_limit_percent=self._inbound_rate_limit_percent,
|
|
493
482
|
outbound_rate_limit_percent=self._outbound_rate_limit_percent,
|
|
494
483
|
local_capabilities_for_handshake=self._local_capabilities_for_handshake,
|
|
495
|
-
|
|
484
|
+
stub_metadata_for_type=self.stub_metadata_for_type,
|
|
496
485
|
session=session,
|
|
486
|
+
exempt_peer_networks=self.exempt_peer_networks,
|
|
497
487
|
)
|
|
498
488
|
await connection.perform_handshake(self._network_id, server_port, self._local_type)
|
|
499
489
|
await self.connection_added(connection, on_connect)
|
|
@@ -561,15 +551,14 @@ class ChiaServer:
|
|
|
561
551
|
f"Trying to ban trusted peer {connection.peer_info.host} for {ban_time}, but will not ban"
|
|
562
552
|
)
|
|
563
553
|
ban_time = 0
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
if connection.peer_info.host in self.banned_peers:
|
|
568
|
-
self.banned_peers[connection.peer_info.host] = max(
|
|
569
|
-
ban_until, self.banned_peers[connection.peer_info.host]
|
|
554
|
+
elif is_in_network(connection.peer_info.host, self.exempt_peer_networks):
|
|
555
|
+
self.log.warning(
|
|
556
|
+
f"Trying to ban exempt peer {connection.peer_info.host} for {ban_time}, but will not ban"
|
|
570
557
|
)
|
|
571
|
-
|
|
572
|
-
|
|
558
|
+
ban_time = 0
|
|
559
|
+
|
|
560
|
+
if ban_time > 0:
|
|
561
|
+
self.ban_peer(connection.peer_info.host, ban_time)
|
|
573
562
|
|
|
574
563
|
present_connection = self.all_connections.get(connection.peer_node_id)
|
|
575
564
|
if present_connection is connection:
|
|
@@ -607,7 +596,7 @@ class ChiaServer:
|
|
|
607
596
|
self,
|
|
608
597
|
messages: list[Message],
|
|
609
598
|
node_type: NodeType,
|
|
610
|
-
exclude:
|
|
599
|
+
exclude: bytes32 | None = None,
|
|
611
600
|
) -> None:
|
|
612
601
|
await self.validate_broadcast_message_type(messages, node_type)
|
|
613
602
|
for _, connection in self.all_connections.items():
|
|
@@ -620,7 +609,7 @@ class ChiaServer:
|
|
|
620
609
|
messages: list[Message],
|
|
621
610
|
node_type: NodeType,
|
|
622
611
|
predicate: Callable[[WSChiaConnection], bool],
|
|
623
|
-
exclude:
|
|
612
|
+
exclude: bytes32 | None = None,
|
|
624
613
|
) -> None:
|
|
625
614
|
await self.validate_broadcast_message_type(messages, node_type)
|
|
626
615
|
for _, connection in self.all_connections.items():
|
|
@@ -635,8 +624,8 @@ class ChiaServer:
|
|
|
635
624
|
await connection.send_message(message)
|
|
636
625
|
|
|
637
626
|
async def call_api_of_specific(
|
|
638
|
-
self, request_method: Callable[..., Awaitable[
|
|
639
|
-
) ->
|
|
627
|
+
self, request_method: Callable[..., Awaitable[Message | None]], message_data: Streamable, node_id: bytes32
|
|
628
|
+
) -> Any | None:
|
|
640
629
|
if node_id in self.all_connections:
|
|
641
630
|
connection = self.all_connections[node_id]
|
|
642
631
|
return await connection.call_api(request_method, message_data)
|
|
@@ -644,7 +633,7 @@ class ChiaServer:
|
|
|
644
633
|
return None
|
|
645
634
|
|
|
646
635
|
def get_connections(
|
|
647
|
-
self, node_type:
|
|
636
|
+
self, node_type: NodeType | None = None, *, outbound: bool | None = None
|
|
648
637
|
) -> list[WSChiaConnection]:
|
|
649
638
|
result = []
|
|
650
639
|
for _, connection in self.all_connections.items():
|
|
@@ -680,7 +669,7 @@ class ChiaServer:
|
|
|
680
669
|
await self.webserver.await_closed()
|
|
681
670
|
self.webserver = None
|
|
682
671
|
|
|
683
|
-
async def get_peer_info(self) ->
|
|
672
|
+
async def get_peer_info(self) -> PeerInfo | None:
|
|
684
673
|
ip = None
|
|
685
674
|
|
|
686
675
|
try:
|
|
@@ -749,3 +738,11 @@ class ChiaServer:
|
|
|
749
738
|
|
|
750
739
|
def set_capabilities(self, capabilities: list[tuple[uint16, str]]) -> None:
|
|
751
740
|
self._local_capabilities_for_handshake = capabilities
|
|
741
|
+
|
|
742
|
+
def ban_peer(self, host: str, ban_time: int) -> None:
|
|
743
|
+
ban_until: float = time.time() + ban_time
|
|
744
|
+
self.log.warning(f"Banning {host} for {ban_time} seconds")
|
|
745
|
+
if host in self.banned_peers:
|
|
746
|
+
self.banned_peers[host] = max(ban_until, self.banned_peers[host])
|
|
747
|
+
else:
|
|
748
|
+
self.banned_peers[host] = ban_until
|
chia/server/signal_handlers.py
CHANGED
|
@@ -8,7 +8,7 @@ import signal
|
|
|
8
8
|
import sys
|
|
9
9
|
from collections.abc import AsyncIterator
|
|
10
10
|
from types import FrameType
|
|
11
|
-
from typing import
|
|
11
|
+
from typing import final
|
|
12
12
|
|
|
13
13
|
from typing_extensions import Protocol
|
|
14
14
|
|
|
@@ -19,7 +19,7 @@ class Handler(Protocol):
|
|
|
19
19
|
def __call__(
|
|
20
20
|
self,
|
|
21
21
|
signal_: signal.Signals,
|
|
22
|
-
stack_frame:
|
|
22
|
+
stack_frame: FrameType | None,
|
|
23
23
|
loop: asyncio.AbstractEventLoop,
|
|
24
24
|
) -> None: ...
|
|
25
25
|
|
|
@@ -28,7 +28,7 @@ class AsyncHandler(Protocol):
|
|
|
28
28
|
async def __call__(
|
|
29
29
|
self,
|
|
30
30
|
signal_: signal.Signals,
|
|
31
|
-
stack_frame:
|
|
31
|
+
stack_frame: FrameType | None,
|
|
32
32
|
loop: asyncio.AbstractEventLoop,
|
|
33
33
|
) -> None: ...
|
|
34
34
|
|
|
@@ -55,7 +55,7 @@ class SignalHandlers:
|
|
|
55
55
|
def loop_safe_sync_signal_handler_for_async(
|
|
56
56
|
self,
|
|
57
57
|
signal_: signal.Signals,
|
|
58
|
-
stack_frame:
|
|
58
|
+
stack_frame: FrameType | None,
|
|
59
59
|
loop: asyncio.AbstractEventLoop,
|
|
60
60
|
handler: AsyncHandler,
|
|
61
61
|
) -> None:
|
|
@@ -69,7 +69,7 @@ class SignalHandlers:
|
|
|
69
69
|
def threadsafe_sync_signal_handler_for_async(
|
|
70
70
|
self,
|
|
71
71
|
signal_: signal.Signals,
|
|
72
|
-
stack_frame:
|
|
72
|
+
stack_frame: FrameType | None,
|
|
73
73
|
loop: asyncio.AbstractEventLoop,
|
|
74
74
|
handler: AsyncHandler,
|
|
75
75
|
) -> None:
|
|
@@ -90,7 +90,7 @@ class SignalHandlers:
|
|
|
90
90
|
|
|
91
91
|
def ensure_signal_object_not_int(
|
|
92
92
|
signal_: int,
|
|
93
|
-
stack_frame:
|
|
93
|
+
stack_frame: FrameType | None,
|
|
94
94
|
*,
|
|
95
95
|
handler: Handler = handler,
|
|
96
96
|
loop: asyncio.AbstractEventLoop = loop,
|
chia/server/start_service.py
CHANGED
|
@@ -5,10 +5,10 @@ import contextlib
|
|
|
5
5
|
import logging
|
|
6
6
|
import os
|
|
7
7
|
import signal
|
|
8
|
-
from collections.abc import AsyncIterator, Awaitable, Coroutine
|
|
8
|
+
from collections.abc import AsyncIterator, Awaitable, Callable, Coroutine
|
|
9
9
|
from pathlib import Path
|
|
10
10
|
from types import FrameType
|
|
11
|
-
from typing import Any,
|
|
11
|
+
from typing import Any, Generic, TypeVar, cast
|
|
12
12
|
|
|
13
13
|
from chia_rs.sized_ints import uint16
|
|
14
14
|
|
|
@@ -16,7 +16,7 @@ from chia.daemon.server import service_launch_lock_path
|
|
|
16
16
|
from chia.protocols.outbound_message import NodeType
|
|
17
17
|
from chia.protocols.shared_protocol import default_capabilities
|
|
18
18
|
from chia.rpc.rpc_server import RpcApiProtocol, RpcServer, RpcServiceProtocol, start_rpc_server
|
|
19
|
-
from chia.server.api_protocol import ApiProtocol
|
|
19
|
+
from chia.server.api_protocol import ApiMetadata, ApiProtocol
|
|
20
20
|
from chia.server.chia_policy import set_chia_policy
|
|
21
21
|
from chia.server.server import ChiaServer
|
|
22
22
|
from chia.server.signal_handlers import SignalHandlers
|
|
@@ -33,7 +33,7 @@ from chia.util.task_referencer import create_referenced_task
|
|
|
33
33
|
|
|
34
34
|
# this is used to detect whether we are running in the main process or not, in
|
|
35
35
|
# signal handlers. We need to ignore signals in the sub processes.
|
|
36
|
-
main_pid:
|
|
36
|
+
main_pid: int | None = None
|
|
37
37
|
|
|
38
38
|
T = TypeVar("T")
|
|
39
39
|
_T_RpcServiceProtocol = TypeVar("_T_RpcServiceProtocol", bound=RpcServiceProtocol)
|
|
@@ -56,19 +56,19 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
|
|
|
56
56
|
node: _T_RpcServiceProtocol,
|
|
57
57
|
peer_api: _T_ApiProtocol,
|
|
58
58
|
node_type: NodeType,
|
|
59
|
-
advertised_port:
|
|
59
|
+
advertised_port: int | None,
|
|
60
60
|
service_name: str,
|
|
61
61
|
network_id: str,
|
|
62
62
|
*,
|
|
63
63
|
config: dict[str, Any],
|
|
64
|
-
|
|
65
|
-
upnp_ports:
|
|
66
|
-
connect_peers:
|
|
67
|
-
on_connect_callback:
|
|
68
|
-
rpc_info:
|
|
64
|
+
stub_metadata_for_type: dict[NodeType, ApiMetadata],
|
|
65
|
+
upnp_ports: list[int] | None = None,
|
|
66
|
+
connect_peers: set[UnresolvedPeerInfo] | None = None,
|
|
67
|
+
on_connect_callback: Callable[[WSChiaConnection], Awaitable[None]] | None = None,
|
|
68
|
+
rpc_info: RpcInfo[_T_RpcApiProtocol] | None = None,
|
|
69
69
|
connect_to_daemon: bool = True,
|
|
70
|
-
max_request_body_size:
|
|
71
|
-
override_capabilities:
|
|
70
|
+
max_request_body_size: int | None = None,
|
|
71
|
+
override_capabilities: list[tuple[uint16, str]] | None = None,
|
|
72
72
|
) -> None:
|
|
73
73
|
if upnp_ports is None:
|
|
74
74
|
upnp_ports = []
|
|
@@ -85,7 +85,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
|
|
|
85
85
|
self._connect_to_daemon = connect_to_daemon
|
|
86
86
|
self._node_type = node_type
|
|
87
87
|
self._service_name = service_name
|
|
88
|
-
self.rpc_server:
|
|
88
|
+
self.rpc_server: RpcServer[_T_RpcApiProtocol] | None = None
|
|
89
89
|
self._network_id: str = network_id
|
|
90
90
|
self.max_request_body_size = max_request_body_size
|
|
91
91
|
self.reconnect_retry_seconds: int = 3
|
|
@@ -123,7 +123,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
|
|
|
123
123
|
self.service_config,
|
|
124
124
|
(private_ca_crt, private_ca_key),
|
|
125
125
|
(chia_ca_crt, chia_ca_key),
|
|
126
|
-
|
|
126
|
+
stub_metadata_for_type=stub_metadata_for_type,
|
|
127
127
|
name=f"{service_name}_server",
|
|
128
128
|
)
|
|
129
129
|
f = getattr(node, "set_server", None)
|
|
@@ -141,7 +141,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
|
|
|
141
141
|
self._on_connect_callback = on_connect_callback
|
|
142
142
|
self._advertised_port = advertised_port
|
|
143
143
|
self._connect_peers = connect_peers
|
|
144
|
-
self._connect_peers_task:
|
|
144
|
+
self._connect_peers_task: asyncio.Task[None] | None = None
|
|
145
145
|
self.upnp: UPnP = UPnP()
|
|
146
146
|
self.stop_requested = asyncio.Event()
|
|
147
147
|
|
|
@@ -287,7 +287,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
|
|
|
287
287
|
def _accept_signal(
|
|
288
288
|
self,
|
|
289
289
|
signal_: signal.Signals,
|
|
290
|
-
stack_frame:
|
|
290
|
+
stack_frame: FrameType | None,
|
|
291
291
|
loop: asyncio.AbstractEventLoop,
|
|
292
292
|
) -> None:
|
|
293
293
|
# we only handle signals in the main process. In the ProcessPoolExecutor
|
|
@@ -309,7 +309,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
|
|
|
309
309
|
self.stop_requested.set()
|
|
310
310
|
|
|
311
311
|
|
|
312
|
-
def async_run(coro: Coroutine[object, object, T], connection_limit:
|
|
312
|
+
def async_run(coro: Coroutine[object, object, T], connection_limit: int | None = None) -> T:
|
|
313
313
|
with log_exceptions(log=log, message="fatal uncaught exception"):
|
|
314
314
|
if connection_limit is not None:
|
|
315
315
|
set_chia_policy(connection_limit)
|
chia/server/upnp.py
CHANGED
|
@@ -6,9 +6,7 @@ import threading
|
|
|
6
6
|
from collections.abc import Iterator
|
|
7
7
|
from dataclasses import dataclass, field
|
|
8
8
|
from queue import Queue
|
|
9
|
-
from typing import
|
|
10
|
-
|
|
11
|
-
from typing_extensions import Literal
|
|
9
|
+
from typing import Literal
|
|
12
10
|
|
|
13
11
|
log = logging.getLogger(__name__)
|
|
14
12
|
|
|
@@ -23,11 +21,11 @@ except ImportError:
|
|
|
23
21
|
|
|
24
22
|
@dataclass
|
|
25
23
|
class UPnP:
|
|
26
|
-
_thread:
|
|
27
|
-
_queue: Queue[
|
|
24
|
+
_thread: threading.Thread | None = None
|
|
25
|
+
_queue: Queue[tuple[Literal["remap", "release"], int] | tuple[Literal["shutdown"]]] = field(
|
|
28
26
|
default_factory=Queue,
|
|
29
27
|
)
|
|
30
|
-
_upnp:
|
|
28
|
+
_upnp: miniupnpc.UPnP | None = None
|
|
31
29
|
|
|
32
30
|
@contextlib.contextmanager
|
|
33
31
|
def manage(self, ports: list[int]) -> Iterator[None]:
|