chia-blockchain 2.5.0rc1__py3-none-any.whl → 2.5.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/README.md +1 -1
- chia/_tests/blockchain/blockchain_test_utils.py +24 -26
- chia/_tests/blockchain/test_augmented_chain.py +6 -8
- chia/_tests/blockchain/test_blockchain.py +409 -307
- chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
- chia/_tests/blockchain/test_build_chains.py +11 -13
- chia/_tests/blockchain/test_get_block_generator.py +8 -8
- chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
- chia/_tests/build-init-files.py +3 -4
- chia/_tests/build-job-matrix.py +9 -9
- chia/_tests/check_sql_statements.py +2 -3
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +7 -5
- chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
- chia/_tests/clvm/test_condition_codes.py +2 -2
- chia/_tests/clvm/test_curry_and_treehash.py +2 -4
- chia/_tests/clvm/test_message_conditions.py +184 -0
- chia/_tests/clvm/test_puzzle_compression.py +1 -2
- chia/_tests/clvm/test_puzzle_drivers.py +3 -3
- chia/_tests/clvm/test_puzzles.py +13 -18
- chia/_tests/clvm/test_singletons.py +17 -17
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +42 -45
- chia/_tests/cmds/conftest.py +2 -2
- chia/_tests/cmds/test_click_types.py +21 -16
- chia/_tests/cmds/test_cmd_framework.py +255 -35
- chia/_tests/cmds/test_cmds_util.py +2 -2
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_dev_gh.py +131 -0
- chia/_tests/cmds/test_farm_cmd.py +1 -2
- chia/_tests/cmds/test_show.py +6 -6
- chia/_tests/cmds/test_tx_config_args.py +2 -1
- chia/_tests/cmds/wallet/test_dao.py +23 -23
- chia/_tests/cmds/wallet/test_did.py +29 -29
- chia/_tests/cmds/wallet/test_nft.py +24 -23
- chia/_tests/cmds/wallet/test_notifications.py +8 -8
- chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
- chia/_tests/cmds/wallet/test_vcs.py +97 -73
- chia/_tests/cmds/wallet/test_wallet.py +74 -75
- chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
- chia/_tests/conftest.py +153 -38
- chia/_tests/connection_utils.py +7 -6
- chia/_tests/core/cmds/test_beta.py +3 -3
- chia/_tests/core/cmds/test_keys.py +6 -6
- chia/_tests/core/cmds/test_wallet.py +3 -3
- chia/_tests/core/consensus/test_block_creation.py +3 -5
- chia/_tests/core/custom_types/test_coin.py +1 -3
- chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
- chia/_tests/core/daemon/test_daemon.py +58 -58
- chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
- chia/_tests/core/data_layer/conftest.py +4 -3
- chia/_tests/core/data_layer/test_data_cli.py +1 -2
- chia/_tests/core/data_layer/test_data_layer.py +5 -5
- chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
- chia/_tests/core/data_layer/test_data_rpc.py +75 -93
- chia/_tests/core/data_layer/test_data_store.py +38 -37
- chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
- chia/_tests/core/data_layer/util.py +11 -10
- chia/_tests/core/farmer/test_farmer_api.py +6 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
- chia/_tests/core/full_node/ram_db.py +2 -2
- chia/_tests/core/full_node/stores/test_block_store.py +113 -11
- chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
- chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
- chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
- chia/_tests/core/full_node/test_address_manager.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +1 -1
- chia/_tests/core/full_node/test_conditions.py +10 -12
- chia/_tests/core/full_node/test_full_node.py +2077 -1822
- chia/_tests/core/full_node/test_generator_tools.py +4 -4
- chia/_tests/core/full_node/test_hint_management.py +2 -2
- chia/_tests/core/full_node/test_performance.py +2 -5
- chia/_tests/core/full_node/test_subscriptions.py +4 -4
- chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
- chia/_tests/core/make_block_generator.py +5 -7
- chia/_tests/core/mempool/test_mempool.py +205 -208
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
- chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
- chia/_tests/core/mempool/test_mempool_manager.py +109 -80
- chia/_tests/core/mempool/test_mempool_performance.py +3 -4
- chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
- chia/_tests/core/server/flood.py +6 -4
- chia/_tests/core/server/serve.py +10 -7
- chia/_tests/core/server/test_api_protocol.py +21 -0
- chia/_tests/core/server/test_capabilities.py +3 -5
- chia/_tests/core/server/test_dos.py +15 -16
- chia/_tests/core/server/test_loop.py +14 -10
- chia/_tests/core/server/test_node_discovery.py +1 -2
- chia/_tests/core/server/test_rate_limits.py +156 -44
- chia/_tests/core/server/test_server.py +8 -7
- chia/_tests/core/services/test_services.py +59 -37
- chia/_tests/core/ssl/test_ssl.py +5 -3
- chia/_tests/core/test_cost_calculation.py +5 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_db_conversion.py +5 -4
- chia/_tests/core/test_db_validation.py +6 -5
- chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
- chia/_tests/core/test_filter.py +3 -5
- chia/_tests/core/test_full_node_rpc.py +64 -90
- chia/_tests/core/test_merkle_set.py +10 -10
- chia/_tests/core/test_program.py +2 -4
- chia/_tests/core/test_rpc_util.py +1 -2
- chia/_tests/core/test_seeder.py +124 -12
- chia/_tests/core/util/test_block_cache.py +5 -5
- chia/_tests/core/util/test_cached_bls.py +3 -3
- chia/_tests/core/util/test_config.py +13 -13
- chia/_tests/core/util/test_files.py +2 -2
- chia/_tests/core/util/test_jsonify.py +9 -9
- chia/_tests/core/util/test_keychain.py +13 -5
- chia/_tests/core/util/test_keyring_wrapper.py +6 -5
- chia/_tests/core/util/test_log_exceptions.py +3 -3
- chia/_tests/core/util/test_streamable.py +38 -38
- chia/_tests/db/test_db_wrapper.py +13 -12
- chia/_tests/environments/common.py +2 -2
- chia/_tests/environments/full_node.py +2 -2
- chia/_tests/environments/wallet.py +109 -48
- chia/_tests/farmer_harvester/test_farmer.py +35 -35
- chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
- chia/_tests/generator/test_compression.py +13 -30
- chia/_tests/generator/test_generator_types.py +3 -3
- chia/_tests/generator/test_rom.py +7 -9
- chia/_tests/plot_sync/test_delta.py +2 -3
- chia/_tests/plot_sync/test_plot_sync.py +25 -24
- chia/_tests/plot_sync/test_receiver.py +9 -9
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +27 -26
- chia/_tests/plot_sync/util.py +2 -1
- chia/_tests/plotting/test_plot_manager.py +54 -11
- chia/_tests/plotting/util.py +2 -3
- chia/_tests/pools/test_pool_cli_parsing.py +128 -0
- chia/_tests/pools/test_pool_cmdline.py +993 -15
- chia/_tests/pools/test_pool_config.py +3 -5
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
- chia/_tests/pools/test_pool_rpc.py +203 -90
- chia/_tests/pools/test_pool_wallet.py +12 -8
- chia/_tests/pools/test_wallet_pool_store.py +3 -3
- chia/_tests/process_junit.py +16 -17
- chia/_tests/rpc/test_rpc_client.py +59 -2
- chia/_tests/rpc/test_rpc_server.py +183 -0
- chia/_tests/simulation/test_simulation.py +5 -5
- chia/_tests/simulation/test_simulator.py +8 -10
- chia/_tests/simulation/test_start_simulator.py +5 -4
- chia/_tests/timelord/test_new_peak.py +19 -19
- chia/_tests/tools/test_run_block.py +1 -2
- chia/_tests/tools/test_virtual_project.py +591 -0
- chia/_tests/util/benchmark_cost.py +9 -9
- chia/_tests/util/benchmarks.py +1 -2
- chia/_tests/util/blockchain.py +12 -11
- chia/_tests/util/blockchain_mock.py +15 -15
- chia/_tests/util/build_network_protocol_files.py +12 -12
- chia/_tests/util/db_connection.py +3 -2
- chia/_tests/util/full_sync.py +14 -6
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/generator_tools_testing.py +5 -7
- chia/_tests/util/get_name_puzzle_conditions.py +52 -0
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +59 -106
- chia/_tests/util/network_protocol_data.py +7 -9
- chia/_tests/util/protocol_messages_json.py +112 -111
- chia/_tests/util/rpc.py +3 -0
- chia/_tests/util/run_block.py +16 -16
- chia/_tests/util/setup_nodes.py +25 -23
- chia/{clvm → _tests/util}/spend_sim.py +59 -55
- chia/_tests/util/split_managers.py +12 -9
- chia/_tests/util/temp_file.py +1 -1
- chia/_tests/util/test_action_scope.py +2 -1
- chia/_tests/util/test_async_pool.py +8 -8
- chia/_tests/util/test_build_job_matrix.py +2 -3
- chia/_tests/util/test_condition_tools.py +4 -6
- chia/_tests/util/test_config.py +5 -5
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +19 -11
- chia/_tests/util/test_limited_semaphore.py +4 -3
- chia/_tests/util/test_logging_filter.py +2 -3
- chia/_tests/util/test_misc.py +29 -28
- chia/_tests/util/test_network.py +32 -31
- chia/_tests/util/test_network_protocol_files.py +2 -3
- chia/_tests/util/test_network_protocol_json.py +1 -0
- chia/_tests/util/test_network_protocol_test.py +18 -19
- chia/_tests/util/test_paginator.py +3 -4
- chia/_tests/util/test_pprint.py +1 -1
- chia/_tests/util/test_priority_mutex.py +18 -17
- chia/_tests/util/test_recursive_replace.py +2 -2
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/test_timing.py +1 -1
- chia/_tests/util/test_trusted_peer.py +2 -2
- chia/_tests/util/time_out_assert.py +43 -6
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
- chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
- chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
- chia/_tests/wallet/conftest.py +135 -74
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
- chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
- chia/_tests/wallet/did_wallet/test_did.py +1277 -474
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
- chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
- chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
- chia/_tests/wallet/test_address_type.py +20 -20
- chia/_tests/wallet/test_clvm_streamable.py +5 -5
- chia/_tests/wallet/test_coin_management.py +354 -0
- chia/_tests/wallet/test_coin_selection.py +34 -35
- chia/_tests/wallet/test_conditions.py +28 -16
- chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
- chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
- chia/_tests/wallet/test_nft_store.py +1 -2
- chia/_tests/wallet/test_notifications.py +2 -2
- chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
- chia/_tests/wallet/test_puzzle_store.py +2 -3
- chia/_tests/wallet/test_sign_coin_spends.py +3 -3
- chia/_tests/wallet/test_signer_protocol.py +33 -34
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
- chia/_tests/wallet/test_taproot.py +1 -1
- chia/_tests/wallet/test_transaction_store.py +23 -19
- chia/_tests/wallet/test_util.py +36 -32
- chia/_tests/wallet/test_wallet.py +37 -37
- chia/_tests/wallet/test_wallet_action_scope.py +8 -8
- chia/_tests/wallet/test_wallet_blockchain.py +4 -6
- chia/_tests/wallet/test_wallet_coin_store.py +34 -34
- chia/_tests/wallet/test_wallet_node.py +69 -72
- chia/_tests/wallet/test_wallet_retry.py +3 -3
- chia/_tests/wallet/test_wallet_state_manager.py +12 -5
- chia/_tests/wallet/test_wallet_trade_store.py +2 -2
- chia/_tests/wallet/test_wallet_utils.py +5 -4
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
- chia/_tests/wallet/wallet_block_tools.py +27 -27
- chia/_tests/weight_proof/test_weight_proof.py +30 -30
- chia/apis.py +19 -0
- chia/cmds/beta.py +8 -7
- chia/cmds/beta_funcs.py +15 -11
- chia/cmds/check_wallet_db.py +29 -27
- chia/cmds/chia.py +17 -9
- chia/cmds/cmd_classes.py +87 -79
- chia/cmds/cmd_helpers.py +242 -0
- chia/cmds/cmds_util.py +56 -66
- chia/cmds/coin_funcs.py +168 -153
- chia/cmds/coins.py +156 -194
- chia/cmds/configure.py +4 -3
- chia/cmds/dao.py +89 -33
- chia/cmds/dao_funcs.py +55 -33
- chia/cmds/data.py +7 -6
- chia/cmds/data_funcs.py +26 -21
- chia/cmds/db.py +4 -3
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev.py +2 -0
- chia/cmds/farm.py +18 -5
- chia/cmds/farm_funcs.py +17 -24
- chia/cmds/gh.py +275 -0
- chia/cmds/init.py +4 -11
- chia/cmds/init_funcs.py +9 -9
- chia/cmds/installers.py +5 -3
- chia/cmds/keys.py +56 -39
- chia/cmds/keys_funcs.py +30 -31
- chia/cmds/netspace.py +6 -3
- chia/cmds/netspace_funcs.py +3 -2
- chia/cmds/param_types.py +16 -6
- chia/cmds/passphrase.py +8 -7
- chia/cmds/passphrase_funcs.py +7 -61
- chia/cmds/peer.py +2 -1
- chia/cmds/peer_funcs.py +5 -5
- chia/cmds/plotnft.py +207 -153
- chia/cmds/plotnft_funcs.py +205 -174
- chia/cmds/plots.py +14 -6
- chia/cmds/plotters.py +2 -1
- chia/cmds/rpc.py +48 -28
- chia/cmds/show.py +2 -1
- chia/cmds/show_funcs.py +7 -6
- chia/cmds/signer.py +50 -58
- chia/cmds/sim.py +22 -14
- chia/cmds/sim_funcs.py +11 -11
- chia/cmds/start.py +3 -3
- chia/cmds/start_funcs.py +9 -12
- chia/cmds/stop.py +4 -3
- chia/cmds/units.py +1 -3
- chia/cmds/wallet.py +252 -96
- chia/cmds/wallet_funcs.py +217 -143
- chia/consensus/block_body_validation.py +133 -86
- chia/consensus/block_creation.py +42 -21
- chia/consensus/block_header_validation.py +32 -37
- chia/consensus/block_record.py +1 -2
- chia/consensus/blockchain.py +167 -180
- chia/consensus/blockchain_interface.py +10 -10
- chia/consensus/constants.py +2 -2
- chia/consensus/default_constants.py +3 -4
- chia/consensus/difficulty_adjustment.py +5 -5
- chia/consensus/find_fork_point.py +5 -5
- chia/consensus/full_block_to_block_record.py +4 -4
- chia/consensus/get_block_challenge.py +2 -2
- chia/consensus/get_block_generator.py +4 -3
- chia/consensus/multiprocess_validation.py +207 -304
- chia/consensus/vdf_info_computation.py +3 -3
- chia/daemon/client.py +46 -27
- chia/daemon/keychain_proxy.py +10 -9
- chia/daemon/keychain_server.py +18 -18
- chia/daemon/server.py +103 -113
- chia/daemon/windows_signal.py +2 -2
- chia/data_layer/data_layer.py +64 -76
- chia/data_layer/data_layer_api.py +8 -0
- chia/data_layer/data_layer_errors.py +3 -3
- chia/data_layer/data_layer_server.py +2 -2
- chia/data_layer/data_layer_util.py +71 -71
- chia/data_layer/data_layer_wallet.py +63 -67
- chia/data_layer/data_store.py +72 -72
- chia/data_layer/dl_wallet_store.py +10 -10
- chia/data_layer/download_data.py +5 -5
- chia/data_layer/s3_plugin_service.py +9 -9
- chia/data_layer/util/benchmark.py +0 -1
- chia/data_layer/util/plugin.py +2 -3
- chia/farmer/farmer.py +46 -43
- chia/farmer/farmer_api.py +27 -21
- chia/full_node/block_height_map.py +6 -6
- chia/full_node/block_store.py +41 -35
- chia/full_node/coin_store.py +42 -41
- chia/full_node/fee_estimate.py +2 -2
- chia/full_node/fee_estimation.py +1 -2
- chia/full_node/fee_history.py +5 -6
- chia/full_node/fee_tracker.py +24 -24
- chia/full_node/full_node.py +574 -300
- chia/full_node/full_node_api.py +181 -130
- chia/full_node/full_node_store.py +43 -43
- chia/full_node/hint_management.py +4 -4
- chia/full_node/hint_store.py +9 -10
- chia/full_node/mempool.py +25 -19
- chia/full_node/mempool_check_conditions.py +11 -42
- chia/full_node/mempool_manager.py +48 -53
- chia/full_node/pending_tx_cache.py +9 -9
- chia/full_node/subscriptions.py +23 -24
- chia/full_node/sync_store.py +8 -7
- chia/full_node/tx_processing_queue.py +3 -3
- chia/full_node/util/__init__.py +0 -0
- chia/full_node/weight_proof.py +79 -78
- chia/harvester/harvester.py +9 -8
- chia/harvester/harvester_api.py +19 -13
- chia/introducer/introducer.py +7 -5
- chia/introducer/introducer_api.py +9 -3
- chia/legacy/keyring.py +6 -5
- chia/plot_sync/delta.py +8 -8
- chia/plot_sync/receiver.py +12 -11
- chia/plot_sync/sender.py +15 -12
- chia/plotters/bladebit.py +12 -12
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +8 -8
- chia/plotters/plotters.py +6 -6
- chia/plotters/plotters_util.py +6 -4
- chia/plotting/cache.py +8 -7
- chia/plotting/check_plots.py +8 -8
- chia/plotting/create_plots.py +6 -6
- chia/plotting/manager.py +22 -22
- chia/plotting/util.py +31 -19
- chia/pools/pool_config.py +7 -7
- chia/pools/pool_puzzles.py +16 -16
- chia/pools/pool_wallet.py +64 -57
- chia/pools/pool_wallet_info.py +3 -3
- chia/protocols/full_node_protocol.py +3 -3
- chia/protocols/harvester_protocol.py +12 -12
- chia/protocols/introducer_protocol.py +1 -2
- chia/protocols/protocol_message_types.py +4 -4
- chia/protocols/protocol_state_machine.py +2 -2
- chia/protocols/protocol_timing.py +1 -0
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +2 -2
- chia/protocols/wallet_protocol.py +33 -33
- chia/rpc/crawler_rpc_api.py +12 -7
- chia/rpc/data_layer_rpc_api.py +49 -44
- chia/rpc/data_layer_rpc_client.py +41 -41
- chia/rpc/data_layer_rpc_util.py +7 -11
- chia/rpc/farmer_rpc_api.py +32 -27
- chia/rpc/farmer_rpc_client.py +14 -14
- chia/rpc/full_node_rpc_api.py +53 -48
- chia/rpc/full_node_rpc_client.py +30 -30
- chia/rpc/harvester_rpc_api.py +16 -11
- chia/rpc/harvester_rpc_client.py +6 -6
- chia/rpc/rpc_client.py +34 -14
- chia/rpc/rpc_server.py +117 -43
- chia/rpc/timelord_rpc_api.py +9 -4
- chia/rpc/util.py +11 -211
- chia/rpc/wallet_request_types.py +276 -60
- chia/rpc/wallet_rpc_api.py +563 -399
- chia/rpc/wallet_rpc_client.py +220 -250
- chia/seeder/crawl_store.py +6 -8
- chia/seeder/crawler.py +23 -36
- chia/seeder/crawler_api.py +28 -22
- chia/seeder/dns_server.py +99 -50
- chia/seeder/start_crawler.py +13 -9
- chia/server/address_manager.py +19 -19
- chia/server/address_manager_store.py +17 -17
- chia/server/api_protocol.py +106 -1
- chia/server/capabilities.py +3 -3
- chia/server/chia_policy.py +17 -16
- chia/server/introducer_peers.py +3 -3
- chia/server/node_discovery.py +34 -38
- chia/server/rate_limit_numbers.py +26 -16
- chia/server/rate_limits.py +67 -27
- chia/server/server.py +52 -31
- chia/server/signal_handlers.py +6 -3
- chia/server/ssl_context.py +5 -5
- chia/server/start_data_layer.py +37 -23
- chia/server/start_farmer.py +28 -16
- chia/server/start_full_node.py +29 -23
- chia/server/start_harvester.py +28 -15
- chia/server/start_introducer.py +27 -15
- chia/server/start_service.py +17 -29
- chia/server/start_timelord.py +25 -18
- chia/server/start_wallet.py +22 -18
- chia/server/upnp.py +4 -3
- chia/server/ws_connection.py +68 -54
- chia/simulator/add_blocks_in_batches.py +54 -0
- chia/simulator/block_tools.py +65 -64
- chia/simulator/full_node_simulator.py +66 -74
- chia/simulator/setup_services.py +10 -9
- chia/simulator/simulator_full_node_rpc_api.py +12 -14
- chia/simulator/simulator_full_node_rpc_client.py +3 -5
- chia/simulator/simulator_test_tools.py +8 -7
- chia/simulator/socket.py +1 -4
- chia/simulator/ssl_certs.py +5 -5
- chia/simulator/ssl_certs_1.py +2 -4
- chia/simulator/ssl_certs_10.py +2 -4
- chia/simulator/ssl_certs_2.py +2 -4
- chia/simulator/ssl_certs_3.py +2 -4
- chia/simulator/ssl_certs_4.py +2 -4
- chia/simulator/ssl_certs_5.py +2 -4
- chia/simulator/ssl_certs_6.py +2 -4
- chia/simulator/ssl_certs_7.py +2 -4
- chia/simulator/ssl_certs_8.py +2 -4
- chia/simulator/ssl_certs_9.py +2 -4
- chia/simulator/start_simulator.py +14 -6
- chia/simulator/wallet_tools.py +21 -20
- chia/ssl/create_ssl.py +11 -11
- chia/timelord/iters_from_block.py +2 -2
- chia/timelord/timelord.py +57 -33
- chia/timelord/timelord_api.py +12 -6
- chia/timelord/timelord_launcher.py +10 -8
- chia/timelord/timelord_state.py +5 -5
- chia/types/block_protocol.py +2 -2
- chia/types/blockchain_format/coin.py +3 -3
- chia/types/blockchain_format/program.py +17 -18
- chia/types/blockchain_format/tree_hash.py +9 -9
- chia/types/coin_spend.py +8 -8
- chia/types/condition_with_args.py +1 -2
- chia/types/eligible_coin_spends.py +16 -15
- chia/types/generator_types.py +1 -2
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +7 -7
- chia/types/mempool_submission_status.py +2 -2
- chia/types/peer_info.py +1 -1
- chia/types/spend_bundle.py +1 -2
- chia/types/transaction_queue_entry.py +2 -2
- chia/types/unfinished_header_block.py +2 -2
- chia/types/validation_state.py +14 -0
- chia/types/weight_proof.py +5 -6
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +6 -4
- chia/util/augmented_chain.py +13 -9
- chia/util/batches.py +5 -2
- chia/util/bech32m.py +14 -11
- chia/util/beta_metrics.py +5 -4
- chia/util/block_cache.py +5 -5
- chia/util/byte_types.py +2 -0
- chia/util/check_fork_next_block.py +3 -2
- chia/util/chia_logging.py +41 -21
- chia/util/collection.py +3 -3
- chia/util/condition_tools.py +18 -18
- chia/util/config.py +26 -25
- chia/util/cpu.py +2 -0
- chia/util/db_synchronous.py +2 -0
- chia/util/db_version.py +2 -0
- chia/util/db_wrapper.py +13 -10
- chia/util/default_root.py +17 -0
- chia/util/dump_keyring.py +6 -6
- chia/util/errors.py +5 -3
- chia/util/file_keyring.py +22 -33
- chia/util/files.py +2 -0
- chia/util/full_block_utils.py +31 -7
- chia/util/generator_tools.py +18 -8
- chia/util/hash.py +3 -1
- chia/util/initial-config.yaml +19 -0
- chia/util/inline_executor.py +2 -0
- chia/util/ip_address.py +39 -0
- chia/util/json_util.py +0 -4
- chia/util/keychain.py +27 -24
- chia/util/keyring_wrapper.py +65 -4
- chia/util/limited_semaphore.py +3 -1
- chia/util/lock.py +4 -2
- chia/util/log_exceptions.py +5 -2
- chia/util/logging.py +3 -1
- chia/util/lru_cache.py +2 -0
- chia/util/math.py +4 -4
- chia/util/network.py +15 -73
- chia/util/paginator.py +3 -1
- chia/util/path.py +2 -0
- chia/util/permissions.py +3 -2
- chia/util/prev_transaction_block.py +1 -3
- chia/util/priority_mutex.py +6 -3
- chia/util/profiler.py +7 -4
- chia/util/recursive_replace.py +2 -0
- chia/util/safe_cancel_task.py +2 -0
- chia/util/service_groups.py +2 -2
- chia/util/setproctitle.py +2 -0
- chia/util/significant_bits.py +2 -0
- chia/util/ssl_check.py +11 -11
- chia/util/streamable.py +44 -56
- chia/util/task_referencer.py +59 -0
- chia/util/task_timing.py +22 -18
- chia/util/timing.py +4 -1
- chia/util/vdf_prover.py +2 -3
- chia/util/virtual_project_analysis.py +540 -0
- chia/util/ws_message.py +6 -6
- chia/wallet/cat_wallet/cat_info.py +3 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
- chia/wallet/cat_wallet/cat_utils.py +5 -4
- chia/wallet/cat_wallet/cat_wallet.py +56 -70
- chia/wallet/cat_wallet/dao_cat_info.py +3 -3
- chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
- chia/wallet/cat_wallet/lineage_store.py +2 -2
- chia/wallet/coin_selection.py +15 -15
- chia/wallet/conditions.py +257 -71
- chia/wallet/dao_wallet/dao_info.py +4 -4
- chia/wallet/dao_wallet/dao_utils.py +43 -42
- chia/wallet/dao_wallet/dao_wallet.py +66 -68
- chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
- chia/wallet/derive_keys.py +11 -11
- chia/wallet/did_wallet/did_info.py +3 -3
- chia/wallet/did_wallet/did_wallet.py +56 -47
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/nft_info.py +4 -4
- chia/wallet/nft_wallet/nft_puzzles.py +16 -16
- chia/wallet/nft_wallet/nft_wallet.py +90 -89
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
- chia/wallet/nft_wallet/uncurry_nft.py +2 -2
- chia/wallet/notification_manager.py +5 -5
- chia/wallet/notification_store.py +6 -6
- chia/wallet/outer_puzzles.py +2 -2
- chia/wallet/payment.py +4 -5
- chia/wallet/puzzle_drivers.py +4 -4
- chia/wallet/puzzles/clawback/drivers.py +5 -5
- chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
- chia/wallet/puzzles/load_clvm.py +2 -3
- chia/wallet/puzzles/p2_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
- chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
- chia/wallet/puzzles/puzzle_utils.py +7 -7
- chia/wallet/puzzles/singleton_top_layer.py +6 -5
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
- chia/wallet/puzzles/tails.py +34 -30
- chia/wallet/signer_protocol.py +7 -8
- chia/wallet/singleton.py +4 -4
- chia/wallet/trade_manager.py +155 -141
- chia/wallet/trade_record.py +5 -5
- chia/wallet/trading/offer.py +100 -101
- chia/wallet/trading/trade_store.py +14 -14
- chia/wallet/transaction_record.py +31 -16
- chia/wallet/util/address_type.py +4 -4
- chia/wallet/util/blind_signer_tl.py +8 -12
- chia/wallet/util/clvm_streamable.py +15 -15
- chia/wallet/util/compute_hints.py +5 -5
- chia/wallet/util/compute_memos.py +4 -6
- chia/wallet/util/curry_and_treehash.py +3 -2
- chia/wallet/util/debug_spend_bundle.py +6 -8
- chia/wallet/util/merkle_tree.py +10 -10
- chia/wallet/util/merkle_utils.py +10 -10
- chia/wallet/util/new_peak_queue.py +3 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/{util → wallet/util}/pprint.py +2 -3
- chia/wallet/util/puzzle_compression.py +3 -4
- chia/wallet/util/puzzle_decorator.py +10 -10
- chia/wallet/util/query_filter.py +9 -10
- chia/wallet/util/tx_config.py +12 -12
- chia/wallet/util/wallet_sync_utils.py +24 -21
- chia/wallet/util/wallet_types.py +9 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
- chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
- chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
- chia/wallet/vc_wallet/vc_drivers.py +16 -16
- chia/wallet/vc_wallet/vc_store.py +9 -9
- chia/wallet/vc_wallet/vc_wallet.py +35 -35
- chia/wallet/wallet.py +54 -54
- chia/wallet/wallet_action_scope.py +14 -13
- chia/wallet/wallet_blockchain.py +10 -10
- chia/wallet/wallet_coin_record.py +2 -2
- chia/wallet/wallet_coin_store.py +10 -10
- chia/wallet/wallet_info.py +1 -2
- chia/wallet/wallet_interested_store.py +5 -5
- chia/wallet/wallet_nft_store.py +6 -6
- chia/wallet/wallet_node.py +72 -76
- chia/wallet/wallet_node_api.py +33 -27
- chia/wallet/wallet_pool_store.py +1 -2
- chia/wallet/wallet_protocol.py +15 -15
- chia/wallet/wallet_puzzle_store.py +35 -4
- chia/wallet/wallet_retry_store.py +2 -2
- chia/wallet/wallet_singleton_store.py +10 -9
- chia/wallet/wallet_spend_bundle.py +4 -20
- chia/wallet/wallet_state_manager.py +223 -224
- chia/wallet/wallet_transaction_store.py +44 -18
- chia/wallet/wallet_user_store.py +2 -2
- chia/wallet/wallet_weight_proof_handler.py +2 -2
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/WHEEL +1 -1
- mozilla-ca/cacert.pem +32 -87
- chia/_tests/cmds/wallet/test_coins.py +0 -195
- chia/consensus/block_root_validation.py +0 -46
- chia/util/api_decorators.py +0 -89
- chia_blockchain-2.5.0rc1.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
chia/server/start_service.py
CHANGED
|
@@ -6,26 +6,13 @@ import logging
|
|
|
6
6
|
import logging.config
|
|
7
7
|
import os
|
|
8
8
|
import signal
|
|
9
|
+
from collections.abc import AsyncIterator, Awaitable, Coroutine
|
|
9
10
|
from pathlib import Path
|
|
10
11
|
from types import FrameType
|
|
11
|
-
from typing import
|
|
12
|
-
Any,
|
|
13
|
-
AsyncIterator,
|
|
14
|
-
Awaitable,
|
|
15
|
-
Callable,
|
|
16
|
-
Coroutine,
|
|
17
|
-
Dict,
|
|
18
|
-
Generic,
|
|
19
|
-
List,
|
|
20
|
-
Optional,
|
|
21
|
-
Set,
|
|
22
|
-
Tuple,
|
|
23
|
-
Type,
|
|
24
|
-
TypeVar,
|
|
25
|
-
cast,
|
|
26
|
-
)
|
|
12
|
+
from typing import Any, Callable, Generic, Optional, TypeVar, cast
|
|
27
13
|
|
|
28
14
|
from chia.daemon.server import service_launch_lock_path
|
|
15
|
+
from chia.protocols.shared_protocol import default_capabilities
|
|
29
16
|
from chia.rpc.rpc_server import RpcApiProtocol, RpcServer, RpcServiceProtocol, start_rpc_server
|
|
30
17
|
from chia.server.api_protocol import ApiProtocol
|
|
31
18
|
from chia.server.chia_policy import set_chia_policy
|
|
@@ -36,14 +23,13 @@ from chia.server.ssl_context import chia_ssl_ca_paths, private_ssl_ca_paths
|
|
|
36
23
|
from chia.server.upnp import UPnP
|
|
37
24
|
from chia.server.ws_connection import WSChiaConnection
|
|
38
25
|
from chia.types.peer_info import PeerInfo, UnresolvedPeerInfo
|
|
26
|
+
from chia.util.chia_version import chia_short_version
|
|
39
27
|
from chia.util.ints import uint16
|
|
40
28
|
from chia.util.lock import Lockfile, LockfileError
|
|
41
29
|
from chia.util.log_exceptions import log_exceptions
|
|
42
30
|
from chia.util.network import resolve
|
|
43
31
|
from chia.util.setproctitle import setproctitle
|
|
44
|
-
|
|
45
|
-
from ..protocols.shared_protocol import default_capabilities
|
|
46
|
-
from ..util.chia_version import chia_short_version
|
|
32
|
+
from chia.util.task_referencer import create_referenced_task
|
|
47
33
|
|
|
48
34
|
# this is used to detect whether we are running in the main process or not, in
|
|
49
35
|
# signal handlers. We need to ignore signals in the sub processes.
|
|
@@ -54,7 +40,7 @@ _T_RpcServiceProtocol = TypeVar("_T_RpcServiceProtocol", bound=RpcServiceProtoco
|
|
|
54
40
|
_T_ApiProtocol = TypeVar("_T_ApiProtocol", bound=ApiProtocol)
|
|
55
41
|
_T_RpcApiProtocol = TypeVar("_T_RpcApiProtocol", bound=RpcApiProtocol)
|
|
56
42
|
|
|
57
|
-
RpcInfo =
|
|
43
|
+
RpcInfo = tuple[type[_T_RpcApiProtocol], int]
|
|
58
44
|
|
|
59
45
|
log = logging.getLogger(__name__)
|
|
60
46
|
|
|
@@ -74,14 +60,15 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
|
|
|
74
60
|
service_name: str,
|
|
75
61
|
network_id: str,
|
|
76
62
|
*,
|
|
77
|
-
config:
|
|
78
|
-
|
|
79
|
-
|
|
63
|
+
config: dict[str, Any],
|
|
64
|
+
class_for_type: dict[NodeType, type[ApiProtocol]],
|
|
65
|
+
upnp_ports: Optional[list[int]] = None,
|
|
66
|
+
connect_peers: Optional[set[UnresolvedPeerInfo]] = None,
|
|
80
67
|
on_connect_callback: Optional[Callable[[WSChiaConnection], Awaitable[None]]] = None,
|
|
81
68
|
rpc_info: Optional[RpcInfo[_T_RpcApiProtocol]] = None,
|
|
82
69
|
connect_to_daemon: bool = True,
|
|
83
70
|
max_request_body_size: Optional[int] = None,
|
|
84
|
-
override_capabilities: Optional[
|
|
71
|
+
override_capabilities: Optional[list[tuple[uint16, str]]] = None,
|
|
85
72
|
) -> None:
|
|
86
73
|
if upnp_ports is None:
|
|
87
74
|
upnp_ports = []
|
|
@@ -117,7 +104,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
|
|
|
117
104
|
if node_type == NodeType.WALLET:
|
|
118
105
|
inbound_rlp = self.service_config.get("inbound_rate_limit_percent", inbound_rlp)
|
|
119
106
|
outbound_rlp = 60
|
|
120
|
-
capabilities_to_use:
|
|
107
|
+
capabilities_to_use: list[tuple[uint16, str]] = default_capabilities[node_type]
|
|
121
108
|
if override_capabilities is not None:
|
|
122
109
|
capabilities_to_use = override_capabilities
|
|
123
110
|
|
|
@@ -136,6 +123,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
|
|
|
136
123
|
self.service_config,
|
|
137
124
|
(private_ca_crt, private_ca_key),
|
|
138
125
|
(chia_ca_crt, chia_ca_key),
|
|
126
|
+
class_for_type=class_for_type,
|
|
139
127
|
name=f"{service_name}_server",
|
|
140
128
|
)
|
|
141
129
|
f = getattr(node, "set_server", None)
|
|
@@ -158,7 +146,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
|
|
|
158
146
|
self.stop_requested = asyncio.Event()
|
|
159
147
|
|
|
160
148
|
async def _connect_peers_task_handler(self) -> None:
|
|
161
|
-
resolved_peers:
|
|
149
|
+
resolved_peers: dict[UnresolvedPeerInfo, PeerInfo] = {}
|
|
162
150
|
prefer_ipv6 = self.config.get("prefer_ipv6", False)
|
|
163
151
|
while True:
|
|
164
152
|
for unresolved in self._connect_peers:
|
|
@@ -231,7 +219,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
|
|
|
231
219
|
except ValueError:
|
|
232
220
|
pass
|
|
233
221
|
|
|
234
|
-
self._connect_peers_task =
|
|
222
|
+
self._connect_peers_task = create_referenced_task(self._connect_peers_task_handler())
|
|
235
223
|
|
|
236
224
|
self._log.info(
|
|
237
225
|
f"Started {self._service_name} service on network_id: {self._network_id} "
|
|
@@ -248,7 +236,8 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
|
|
|
248
236
|
self.stop_requested.set,
|
|
249
237
|
self.root_path,
|
|
250
238
|
self.config,
|
|
251
|
-
self.
|
|
239
|
+
service_config=self.service_config,
|
|
240
|
+
connect_to_daemon=self._connect_to_daemon,
|
|
252
241
|
max_request_body_size=self.max_request_body_size,
|
|
253
242
|
)
|
|
254
243
|
yield
|
|
@@ -304,7 +293,6 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
|
|
|
304
293
|
# we only handle signals in the main process. In the ProcessPoolExecutor
|
|
305
294
|
# processes, we have to ignore them. We'll shut them down gracefully
|
|
306
295
|
# from the main process
|
|
307
|
-
global main_pid
|
|
308
296
|
ignore = os.getpid() != main_pid
|
|
309
297
|
|
|
310
298
|
# TODO: if we remove this conditional behavior, consider moving logging to common signal handling
|
chia/server/start_timelord.py
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import os
|
|
4
4
|
import pathlib
|
|
5
5
|
import sys
|
|
6
|
-
from typing import Any,
|
|
6
|
+
from typing import Any, Optional
|
|
7
7
|
|
|
8
|
+
from chia.apis import ApiProtocolRegistry
|
|
8
9
|
from chia.consensus.constants import ConsensusConstants, replace_str_to_bytes
|
|
9
10
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
10
11
|
from chia.rpc.timelord_rpc_api import TimelordRpcApi
|
|
@@ -16,7 +17,8 @@ from chia.timelord.timelord_api import TimelordAPI
|
|
|
16
17
|
from chia.types.aliases import TimelordService
|
|
17
18
|
from chia.util.chia_logging import initialize_service_logging
|
|
18
19
|
from chia.util.config import get_unresolved_peer_infos, load_config, load_config_cli
|
|
19
|
-
from chia.util.default_root import
|
|
20
|
+
from chia.util.default_root import resolve_root_path
|
|
21
|
+
from chia.util.task_timing import maybe_manage_task_instrumentation
|
|
20
22
|
|
|
21
23
|
# See: https://bugs.python.org/issue29288
|
|
22
24
|
"".encode("idna")
|
|
@@ -24,22 +26,20 @@ from chia.util.default_root import DEFAULT_ROOT_PATH
|
|
|
24
26
|
SERVICE_NAME = "timelord"
|
|
25
27
|
|
|
26
28
|
|
|
27
|
-
log = logging.getLogger(__name__)
|
|
28
|
-
|
|
29
|
-
|
|
30
29
|
def create_timelord_service(
|
|
31
30
|
root_path: pathlib.Path,
|
|
32
|
-
config:
|
|
33
|
-
|
|
31
|
+
config: dict[str, Any],
|
|
32
|
+
consensus_constants: ConsensusConstants,
|
|
34
33
|
connect_to_daemon: bool = True,
|
|
35
34
|
) -> TimelordService:
|
|
36
35
|
service_config = config[SERVICE_NAME]
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
|
|
37
|
+
network_id = service_config["selected_network"]
|
|
38
|
+
overrides = service_config["network_overrides"]["constants"][network_id]
|
|
39
|
+
updated_constants = replace_str_to_bytes(consensus_constants, **overrides)
|
|
39
40
|
|
|
40
41
|
node = Timelord(root_path, service_config, updated_constants)
|
|
41
42
|
peer_api = TimelordAPI(node)
|
|
42
|
-
network_id = service_config["selected_network"]
|
|
43
43
|
|
|
44
44
|
rpc_info: Optional[RpcInfo[TimelordRpcApi]] = None
|
|
45
45
|
if service_config.get("start_rpc_server", True):
|
|
@@ -48,8 +48,8 @@ def create_timelord_service(
|
|
|
48
48
|
return Service(
|
|
49
49
|
root_path=root_path,
|
|
50
50
|
config=config,
|
|
51
|
-
peer_api=peer_api,
|
|
52
51
|
node=node,
|
|
52
|
+
peer_api=peer_api,
|
|
53
53
|
node_type=NodeType.TIMELORD,
|
|
54
54
|
advertised_port=None,
|
|
55
55
|
service_name=SERVICE_NAME,
|
|
@@ -57,16 +57,18 @@ def create_timelord_service(
|
|
|
57
57
|
network_id=network_id,
|
|
58
58
|
rpc_info=rpc_info,
|
|
59
59
|
connect_to_daemon=connect_to_daemon,
|
|
60
|
+
class_for_type=ApiProtocolRegistry,
|
|
60
61
|
)
|
|
61
62
|
|
|
62
63
|
|
|
63
|
-
async def async_main() -> int:
|
|
64
|
+
async def async_main(root_path: pathlib.Path) -> int:
|
|
64
65
|
# TODO: refactor to avoid the double load
|
|
65
|
-
config = load_config(
|
|
66
|
-
service_config = load_config_cli(
|
|
66
|
+
config = load_config(root_path, "config.yaml")
|
|
67
|
+
service_config = load_config_cli(root_path, "config.yaml", SERVICE_NAME)
|
|
67
68
|
config[SERVICE_NAME] = service_config
|
|
68
|
-
initialize_service_logging(service_name=SERVICE_NAME, config=config)
|
|
69
|
-
|
|
69
|
+
initialize_service_logging(service_name=SERVICE_NAME, config=config, root_path=root_path)
|
|
70
|
+
|
|
71
|
+
service = create_timelord_service(root_path, config, DEFAULT_CONSTANTS)
|
|
70
72
|
async with SignalHandlers.manage() as signal_handlers:
|
|
71
73
|
await service.setup_process_global_state(signal_handlers=signal_handlers)
|
|
72
74
|
await service.run()
|
|
@@ -75,7 +77,12 @@ async def async_main() -> int:
|
|
|
75
77
|
|
|
76
78
|
|
|
77
79
|
def main() -> int:
|
|
78
|
-
|
|
80
|
+
root_path = resolve_root_path(override=None)
|
|
81
|
+
|
|
82
|
+
with maybe_manage_task_instrumentation(
|
|
83
|
+
enable=os.environ.get(f"CHIA_INSTRUMENT_{SERVICE_NAME.upper()}") is not None
|
|
84
|
+
):
|
|
85
|
+
return async_run(coro=async_main(root_path=root_path))
|
|
79
86
|
|
|
80
87
|
|
|
81
88
|
if __name__ == "__main__":
|
chia/server/start_wallet.py
CHANGED
|
@@ -4,8 +4,9 @@ import os
|
|
|
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, Optional
|
|
8
8
|
|
|
9
|
+
from chia.apis import ApiProtocolRegistry
|
|
9
10
|
from chia.consensus.constants import ConsensusConstants, replace_str_to_bytes
|
|
10
11
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
11
12
|
from chia.rpc.wallet_rpc_api import WalletRpcApi
|
|
@@ -15,7 +16,7 @@ from chia.server.start_service import RpcInfo, Service, async_run
|
|
|
15
16
|
from chia.types.aliases import WalletService
|
|
16
17
|
from chia.util.chia_logging import initialize_service_logging
|
|
17
18
|
from chia.util.config import get_unresolved_peer_infos, load_config, load_config_cli
|
|
18
|
-
from chia.util.default_root import
|
|
19
|
+
from chia.util.default_root import resolve_root_path
|
|
19
20
|
from chia.util.keychain import Keychain
|
|
20
21
|
from chia.util.task_timing import maybe_manage_task_instrumentation
|
|
21
22
|
from chia.wallet.wallet_node import WalletNode
|
|
@@ -30,17 +31,17 @@ SERVICE_NAME = "wallet"
|
|
|
30
31
|
|
|
31
32
|
def create_wallet_service(
|
|
32
33
|
root_path: pathlib.Path,
|
|
33
|
-
config:
|
|
34
|
+
config: dict[str, Any],
|
|
34
35
|
consensus_constants: ConsensusConstants,
|
|
35
36
|
keychain: Optional[Keychain] = None,
|
|
36
37
|
connect_to_daemon: bool = True,
|
|
37
38
|
) -> WalletService:
|
|
38
39
|
service_config = config[SERVICE_NAME]
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
network_id = service_config["selected_network"]
|
|
42
|
+
overrides = service_config["network_overrides"]["constants"][network_id]
|
|
41
43
|
updated_constants = replace_str_to_bytes(consensus_constants, **overrides)
|
|
42
|
-
|
|
43
|
-
service_config["short_sync_blocks_behind_threshold"] = 20
|
|
44
|
+
service_config.setdefault("short_sync_blocks_behind_threshold", 20)
|
|
44
45
|
|
|
45
46
|
node = WalletNode(
|
|
46
47
|
service_config,
|
|
@@ -50,10 +51,8 @@ def create_wallet_service(
|
|
|
50
51
|
)
|
|
51
52
|
peer_api = WalletNodeAPI(node)
|
|
52
53
|
|
|
53
|
-
network_id = service_config["selected_network"]
|
|
54
|
-
rpc_port = service_config.get("rpc_port")
|
|
55
54
|
rpc_info: Optional[RpcInfo[WalletRpcApi]] = None
|
|
56
|
-
if
|
|
55
|
+
if service_config.get("start_rpc_server", True):
|
|
57
56
|
rpc_info = (WalletRpcApi, service_config["rpc_port"])
|
|
58
57
|
|
|
59
58
|
return Service(
|
|
@@ -62,20 +61,21 @@ def create_wallet_service(
|
|
|
62
61
|
node=node,
|
|
63
62
|
peer_api=peer_api,
|
|
64
63
|
node_type=NodeType.WALLET,
|
|
64
|
+
advertised_port=None,
|
|
65
65
|
service_name=SERVICE_NAME,
|
|
66
|
-
on_connect_callback=node.on_connect,
|
|
67
66
|
connect_peers=get_unresolved_peer_infos(service_config, NodeType.FULL_NODE),
|
|
67
|
+
on_connect_callback=node.on_connect,
|
|
68
68
|
network_id=network_id,
|
|
69
69
|
rpc_info=rpc_info,
|
|
70
|
-
advertised_port=None,
|
|
71
70
|
connect_to_daemon=connect_to_daemon,
|
|
71
|
+
class_for_type=ApiProtocolRegistry,
|
|
72
72
|
)
|
|
73
73
|
|
|
74
74
|
|
|
75
|
-
async def async_main() -> int:
|
|
75
|
+
async def async_main(root_path: pathlib.Path) -> int:
|
|
76
76
|
# TODO: refactor to avoid the double load
|
|
77
|
-
config = load_config(
|
|
78
|
-
service_config = load_config_cli(
|
|
77
|
+
config = load_config(root_path, "config.yaml")
|
|
78
|
+
service_config = load_config_cli(root_path, "config.yaml", SERVICE_NAME)
|
|
79
79
|
config[SERVICE_NAME] = service_config
|
|
80
80
|
|
|
81
81
|
# This is simulator
|
|
@@ -89,8 +89,9 @@ async def async_main() -> int:
|
|
|
89
89
|
service_config["selected_network"] = "testnet0"
|
|
90
90
|
else:
|
|
91
91
|
constants = DEFAULT_CONSTANTS
|
|
92
|
-
initialize_service_logging(service_name=SERVICE_NAME, config=config)
|
|
93
|
-
|
|
92
|
+
initialize_service_logging(service_name=SERVICE_NAME, config=config, root_path=root_path)
|
|
93
|
+
|
|
94
|
+
service = create_wallet_service(root_path, config, constants)
|
|
94
95
|
async with SignalHandlers.manage() as signal_handlers:
|
|
95
96
|
await service.setup_process_global_state(signal_handlers=signal_handlers)
|
|
96
97
|
await service.run()
|
|
@@ -100,9 +101,12 @@ async def async_main() -> int:
|
|
|
100
101
|
|
|
101
102
|
def main() -> int:
|
|
102
103
|
freeze_support()
|
|
104
|
+
root_path = resolve_root_path(override=None)
|
|
103
105
|
|
|
104
|
-
with maybe_manage_task_instrumentation(
|
|
105
|
-
|
|
106
|
+
with maybe_manage_task_instrumentation(
|
|
107
|
+
enable=os.environ.get(f"CHIA_INSTRUMENT_{SERVICE_NAME.upper()}") is not None
|
|
108
|
+
):
|
|
109
|
+
return async_run(coro=async_main(root_path=root_path))
|
|
106
110
|
|
|
107
111
|
|
|
108
112
|
if __name__ == "__main__":
|
chia/server/upnp.py
CHANGED
|
@@ -3,9 +3,10 @@ from __future__ import annotations
|
|
|
3
3
|
import contextlib
|
|
4
4
|
import logging
|
|
5
5
|
import threading
|
|
6
|
+
from collections.abc import Iterator
|
|
6
7
|
from dataclasses import dataclass, field
|
|
7
8
|
from queue import Queue
|
|
8
|
-
from typing import
|
|
9
|
+
from typing import Optional, Union
|
|
9
10
|
|
|
10
11
|
from typing_extensions import Literal
|
|
11
12
|
|
|
@@ -24,13 +25,13 @@ except ImportError:
|
|
|
24
25
|
@dataclass
|
|
25
26
|
class UPnP:
|
|
26
27
|
_thread: Optional[threading.Thread] = None
|
|
27
|
-
_queue: Queue[Union[
|
|
28
|
+
_queue: Queue[Union[tuple[Literal["remap", "release"], int], tuple[Literal["shutdown"]]]] = field(
|
|
28
29
|
default_factory=Queue,
|
|
29
30
|
)
|
|
30
31
|
_upnp: Optional[miniupnpc.UPnP] = None
|
|
31
32
|
|
|
32
33
|
@contextlib.contextmanager
|
|
33
|
-
def manage(self, ports:
|
|
34
|
+
def manage(self, ports: list[int]) -> Iterator[None]:
|
|
34
35
|
self.setup()
|
|
35
36
|
try:
|
|
36
37
|
for port in ports:
|