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
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import copy
|
|
4
4
|
import dataclasses
|
|
5
|
-
from typing import Any
|
|
5
|
+
from typing import Any
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
8
|
from chia_rs import AugSchemeMPL, CoinSpend, G1Element, G2Element, PrivateKey, SpendBundle
|
|
@@ -59,7 +59,7 @@ def test_process_fast_forward_spends_nothing_to_do() -> None:
|
|
|
59
59
|
original_version = dataclasses.replace(internal_mempool_item)
|
|
60
60
|
singleton_ff = SingletonFastForward()
|
|
61
61
|
bundle_coin_spends = singleton_ff.process_fast_forward_spends(
|
|
62
|
-
mempool_item=internal_mempool_item,
|
|
62
|
+
mempool_item=internal_mempool_item, prev_tx_height=TEST_HEIGHT, constants=DEFAULT_CONSTANTS
|
|
63
63
|
)
|
|
64
64
|
assert singleton_ff == SingletonFastForward()
|
|
65
65
|
assert bundle_coin_spends == original_version.bundle_coin_spends
|
|
@@ -91,7 +91,7 @@ def test_process_fast_forward_spends_latest_unspent() -> None:
|
|
|
91
91
|
original_version = dataclasses.replace(internal_mempool_item)
|
|
92
92
|
singleton_ff = SingletonFastForward()
|
|
93
93
|
bundle_coin_spends = singleton_ff.process_fast_forward_spends(
|
|
94
|
-
mempool_item=internal_mempool_item,
|
|
94
|
+
mempool_item=internal_mempool_item, prev_tx_height=TEST_HEIGHT, constants=DEFAULT_CONSTANTS
|
|
95
95
|
)
|
|
96
96
|
child_coin = item.bundle_coin_spends[test_coin.name()].additions[0]
|
|
97
97
|
expected_fast_forward_spends = {
|
|
@@ -199,10 +199,10 @@ async def make_and_send_spend_bundle(
|
|
|
199
199
|
is_eligible_for_ff: bool = True,
|
|
200
200
|
*,
|
|
201
201
|
is_launcher_coin: bool = False,
|
|
202
|
-
signing_puzzle:
|
|
203
|
-
signing_coin:
|
|
202
|
+
signing_puzzle: Program | None = None,
|
|
203
|
+
signing_coin: Coin | None = None,
|
|
204
204
|
aggsig: G2Element = G2Element(),
|
|
205
|
-
) -> tuple[MempoolInclusionStatus,
|
|
205
|
+
) -> tuple[MempoolInclusionStatus, Err | None]:
|
|
206
206
|
if is_launcher_coin or not is_eligible_for_ff:
|
|
207
207
|
assert signing_puzzle is not None
|
|
208
208
|
assert signing_coin is not None
|
chia/_tests/core/server/serve.py
CHANGED
|
@@ -7,7 +7,7 @@ import logging.config
|
|
|
7
7
|
import pathlib
|
|
8
8
|
import sys
|
|
9
9
|
import threading
|
|
10
|
-
from typing import
|
|
10
|
+
from typing import final, overload
|
|
11
11
|
|
|
12
12
|
from chia._tests.util.misc import create_logger
|
|
13
13
|
from chia.server.chia_policy import ChiaPolicy
|
|
@@ -47,7 +47,7 @@ async def async_main(
|
|
|
47
47
|
shutdown_path: pathlib.Path,
|
|
48
48
|
ip: str = "127.0.0.1",
|
|
49
49
|
port: int = 8444,
|
|
50
|
-
port_holder:
|
|
50
|
+
port_holder: list[int] | None = None,
|
|
51
51
|
) -> None: ...
|
|
52
52
|
|
|
53
53
|
|
|
@@ -58,22 +58,22 @@ async def async_main(
|
|
|
58
58
|
thread_end_event: threading.Event,
|
|
59
59
|
ip: str = "127.0.0.1",
|
|
60
60
|
port: int = 8444,
|
|
61
|
-
port_holder:
|
|
61
|
+
port_holder: list[int] | None = None,
|
|
62
62
|
) -> None: ...
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
async def async_main(
|
|
66
66
|
*,
|
|
67
67
|
out_path: pathlib.Path,
|
|
68
|
-
shutdown_path:
|
|
69
|
-
thread_end_event:
|
|
68
|
+
shutdown_path: pathlib.Path | None = None,
|
|
69
|
+
thread_end_event: threading.Event | None = None,
|
|
70
70
|
ip: str = "127.0.0.1",
|
|
71
71
|
port: int = 8444,
|
|
72
|
-
port_holder:
|
|
72
|
+
port_holder: list[int] | None = None,
|
|
73
73
|
) -> None:
|
|
74
74
|
with out_path.open(mode="w") as file:
|
|
75
75
|
logger = create_logger(file=file)
|
|
76
|
-
file_task:
|
|
76
|
+
file_task: asyncio.Task[None] | None = None
|
|
77
77
|
if thread_end_event is None:
|
|
78
78
|
assert shutdown_path is not None
|
|
79
79
|
thread_end_event = threading.Event()
|
|
@@ -3,7 +3,6 @@ from __future__ import annotations
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import logging
|
|
5
5
|
import time
|
|
6
|
-
from typing import Optional
|
|
7
6
|
|
|
8
7
|
import pytest
|
|
9
8
|
from aiohttp import ClientSession, ClientTimeout, WSCloseCode, WSMessage, WSMsgType, WSServerHandshakeError
|
|
@@ -36,7 +35,7 @@ def not_localhost(host: str) -> bool:
|
|
|
36
35
|
class FakeRateLimiter:
|
|
37
36
|
def process_msg_and_check(
|
|
38
37
|
self, message: Message, our_capabilities: list[Capability], peer_capabilities: list[Capability]
|
|
39
|
-
) ->
|
|
38
|
+
) -> str | None:
|
|
40
39
|
return None
|
|
41
40
|
|
|
42
41
|
|
|
@@ -30,7 +30,9 @@ def test_base_event_loop_has_methods() -> None:
|
|
|
30
30
|
assert hasattr(base_selector_event_loop, "create_server")
|
|
31
31
|
method = getattr(base_selector_event_loop, "create_server")
|
|
32
32
|
assert inspect.ismethod(method)
|
|
33
|
-
if sys.version_info >= (3,
|
|
33
|
+
if sys.version_info >= (3, 13):
|
|
34
|
+
expected_signature = "(protocol_factory, host=None, port=None, *, family=<AddressFamily.AF_UNSPEC: 0>, flags=<AddressInfo.AI_PASSIVE: 1>, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None, keep_alive=None, ssl_handshake_timeout=None, ssl_shutdown_timeout=None, start_serving=True)" # noqa: E501
|
|
35
|
+
elif sys.version_info >= (3, 11):
|
|
34
36
|
expected_signature = "(protocol_factory, host=None, port=None, *, family=<AddressFamily.AF_UNSPEC: 0>, flags=<AddressInfo.AI_PASSIVE: 1>, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None, ssl_handshake_timeout=None, ssl_shutdown_timeout=None, start_serving=True)" # noqa: E501
|
|
35
37
|
else:
|
|
36
38
|
expected_signature = "(protocol_factory, host=None, port=None, *, family=<AddressFamily.AF_UNSPEC: 0>, flags=<AddressInfo.AI_PASSIVE: 1>, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None, ssl_handshake_timeout=None, start_serving=True)" # noqa: E501
|
|
@@ -62,7 +64,7 @@ def test_base_event_loop_has_methods() -> None:
|
|
|
62
64
|
)
|
|
63
65
|
|
|
64
66
|
assert inspect.isfunction(_chia_create_server)
|
|
65
|
-
expected_signature = "(cls: 'Any', protocol_factory: '_ProtocolFactory', host: 'Any', port: 'Any', *, family: 'socket.AddressFamily' = <AddressFamily.AF_UNSPEC: 0>, flags: 'socket.AddressInfo' = <AddressInfo.AI_PASSIVE: 1>, sock: 'Any' = None, backlog: 'int' = 100, ssl: '_SSLContext' = None, reuse_address: '
|
|
67
|
+
expected_signature = "(cls: 'Any', protocol_factory: '_ProtocolFactory', host: 'Any', port: 'Any', *, family: 'socket.AddressFamily' = <AddressFamily.AF_UNSPEC: 0>, flags: 'socket.AddressInfo' = <AddressInfo.AI_PASSIVE: 1>, sock: 'Any' = None, backlog: 'int' = 100, ssl: '_SSLContext' = None, reuse_address: 'bool | None' = None, reuse_port: 'bool | None' = None, ssl_handshake_timeout: 'float | None' = 30, start_serving: 'bool' = True) -> 'PausableServer'" # noqa: E501
|
|
66
68
|
assert str(inspect.signature(_chia_create_server)) == expected_signature
|
|
67
69
|
|
|
68
70
|
class EchoProtocol(asyncio.Protocol):
|
|
@@ -103,7 +105,13 @@ def test_base_event_loop_has_methods() -> None:
|
|
|
103
105
|
|
|
104
106
|
for func in ("_attach", "_detach"):
|
|
105
107
|
assert hasattr(base_server, func)
|
|
106
|
-
|
|
107
|
-
|
|
108
|
+
if sys.version_info >= (3, 13):
|
|
109
|
+
# https://github.com/python/cpython/blob/bcee1c322115c581da27600f2ae55e5439c027eb/Lib/asyncio/base_events.py#L296
|
|
110
|
+
method = getattr(base_server, func)
|
|
111
|
+
assert str(inspect.signature(method)) == "(transport)"
|
|
112
|
+
else:
|
|
113
|
+
method = getattr(base_server, func)
|
|
114
|
+
assert str(inspect.signature(method)) == "()"
|
|
115
|
+
|
|
108
116
|
finally:
|
|
109
117
|
selector_event_loop.close()
|
|
@@ -10,7 +10,6 @@ import sys
|
|
|
10
10
|
import threading
|
|
11
11
|
from collections.abc import AsyncIterator
|
|
12
12
|
from dataclasses import dataclass, field
|
|
13
|
-
from typing import Optional
|
|
14
13
|
|
|
15
14
|
import anyio
|
|
16
15
|
import pytest
|
|
@@ -45,8 +44,8 @@ async def serve_in_thread(
|
|
|
45
44
|
|
|
46
45
|
@dataclass
|
|
47
46
|
class Client:
|
|
48
|
-
reader:
|
|
49
|
-
writer:
|
|
47
|
+
reader: asyncio.StreamReader | None
|
|
48
|
+
writer: asyncio.StreamWriter | None
|
|
50
49
|
|
|
51
50
|
@classmethod
|
|
52
51
|
async def open(cls, ip: str, port: int) -> Client:
|
|
@@ -95,10 +94,10 @@ class ServeInThread:
|
|
|
95
94
|
requested_port: int
|
|
96
95
|
out_path: pathlib.Path
|
|
97
96
|
connection_limit: int = 25
|
|
98
|
-
original_connection_limit:
|
|
99
|
-
loop:
|
|
100
|
-
server_task:
|
|
101
|
-
thread:
|
|
97
|
+
original_connection_limit: int | None = None
|
|
98
|
+
loop: asyncio.AbstractEventLoop | None = None
|
|
99
|
+
server_task: asyncio.Task[None] | None = None
|
|
100
|
+
thread: threading.Thread | None = None
|
|
102
101
|
thread_end_event: threading.Event = field(default_factory=threading.Event)
|
|
103
102
|
port_holder: list[int] = field(default_factory=list)
|
|
104
103
|
|
|
@@ -189,7 +188,7 @@ async def test_loop(tmp_path: pathlib.Path) -> None:
|
|
|
189
188
|
await asyncio.sleep(adjusted_timeout(5))
|
|
190
189
|
|
|
191
190
|
writer = None
|
|
192
|
-
post_connection_error:
|
|
191
|
+
post_connection_error: str | None = None
|
|
193
192
|
try:
|
|
194
193
|
logger.info(" ==== attempting a single new connection")
|
|
195
194
|
with anyio.fail_after(delay=adjusted_timeout(1)):
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Union
|
|
5
4
|
|
|
6
5
|
import pytest
|
|
7
6
|
from chia_rs.sized_ints import uint32
|
|
@@ -24,7 +23,6 @@ from chia.types.peer_info import PeerInfo
|
|
|
24
23
|
rl_v2 = [Capability.BASE, Capability.BLOCK_HEADERS, Capability.RATE_LIMITS_V2]
|
|
25
24
|
rl_v1 = [Capability.BASE]
|
|
26
25
|
node_with_params_b = node_with_params
|
|
27
|
-
test_different_versions_results: list[int] = []
|
|
28
26
|
|
|
29
27
|
|
|
30
28
|
@dataclass
|
|
@@ -66,7 +64,7 @@ async def test_limits_v2(incoming: bool, tx_msg: bool, limit_size: bool, monkeyp
|
|
|
66
64
|
message_data = b"\0" * 1024
|
|
67
65
|
msg_type = ProtocolMessageTypes.new_transaction
|
|
68
66
|
|
|
69
|
-
limits: dict[ProtocolMessageTypes,
|
|
67
|
+
limits: dict[ProtocolMessageTypes, RLSettings | Unlimited]
|
|
70
68
|
|
|
71
69
|
if limit_size:
|
|
72
70
|
agg_limit = RLSettings(False, count * 2, len(message_data), count * len(message_data))
|
|
@@ -80,7 +78,7 @@ async def test_limits_v2(incoming: bool, tx_msg: bool, limit_size: bool, monkeyp
|
|
|
80
78
|
|
|
81
79
|
def mock_get_limits(
|
|
82
80
|
our_capabilities: list[Capability], peer_capabilities: list[Capability]
|
|
83
|
-
) -> tuple[dict[ProtocolMessageTypes,
|
|
81
|
+
) -> tuple[dict[ProtocolMessageTypes, RLSettings | Unlimited], RLSettings]:
|
|
84
82
|
return limits, agg_limit
|
|
85
83
|
|
|
86
84
|
import chia.server.rate_limits
|
|
@@ -418,11 +416,14 @@ async def test_different_versions(
|
|
|
418
416
|
# The following code checks whether all of the runs resulted in the same number of items in "rate_limits_tx",
|
|
419
417
|
# which would mean the same rate limits are always used. This should not happen, since two nodes with V2
|
|
420
418
|
# will use V2.
|
|
421
|
-
|
|
419
|
+
rate_limits = get_rate_limits_to_use(a_con.local_capabilities, a_con.peer_capabilities)[0]
|
|
420
|
+
limit = rate_limits[ProtocolMessageTypes.request_header_blocks]
|
|
421
|
+
assert isinstance(limit, RLSettings)
|
|
422
422
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
423
|
+
if Capability.RATE_LIMITS_V2 in a_con.local_capabilities and Capability.RATE_LIMITS_V2 in a_con.peer_capabilities:
|
|
424
|
+
assert limit.frequency == 5000
|
|
425
|
+
else:
|
|
426
|
+
assert limit.frequency == 500
|
|
426
427
|
|
|
427
428
|
|
|
428
429
|
@pytest.mark.anyio
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
+
from collections.abc import Callable
|
|
4
5
|
from dataclasses import dataclass
|
|
5
|
-
from typing import
|
|
6
|
+
from typing import ClassVar, cast
|
|
6
7
|
|
|
7
8
|
import pytest
|
|
8
9
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -10,6 +11,7 @@ from chia_rs.sized_ints import int16, uint32
|
|
|
10
11
|
from packaging.version import Version
|
|
11
12
|
|
|
12
13
|
from chia import __version__
|
|
14
|
+
from chia._tests.conftest import ConsensusMode
|
|
13
15
|
from chia._tests.connection_utils import connect_and_get_peer
|
|
14
16
|
from chia._tests.util.setup_nodes import SimulatorsAndWalletsServices
|
|
15
17
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
@@ -22,6 +24,7 @@ from chia.protocols.shared_protocol import Error, protocol_version
|
|
|
22
24
|
from chia.protocols.wallet_protocol import RejectHeaderRequest
|
|
23
25
|
from chia.server.api_protocol import ApiMetadata
|
|
24
26
|
from chia.server.server import ChiaServer
|
|
27
|
+
from chia.server.ssl_context import chia_ssl_ca_paths, private_ssl_ca_paths
|
|
25
28
|
from chia.server.ws_connection import WSChiaConnection, error_response_version
|
|
26
29
|
from chia.simulator.block_tools import BlockTools
|
|
27
30
|
from chia.types.peer_info import PeerInfo
|
|
@@ -224,3 +227,60 @@ async def test_get_peer_info(bt: BlockTools) -> None:
|
|
|
224
227
|
node_service = await create_full_node_service(bt.root_path, bt.config, bt.constants, connect_to_daemon=False)
|
|
225
228
|
local_port = node_service._server.get_port()
|
|
226
229
|
assert local_port is not None
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
class FakeConnection:
|
|
233
|
+
connection_type: NodeType = NodeType.FULL_NODE
|
|
234
|
+
peer_node_id: bytes32 = bytes32(b"\x00" * 32)
|
|
235
|
+
|
|
236
|
+
def __init__(self, peer_info: PeerInfo) -> None:
|
|
237
|
+
self.peer_info = peer_info
|
|
238
|
+
|
|
239
|
+
def cancel_tasks(self) -> None:
|
|
240
|
+
pass
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="save time")
|
|
244
|
+
@pytest.mark.anyio
|
|
245
|
+
async def test_connection_closed_banning(bt: BlockTools, caplog: pytest.LogCaptureFixture) -> None:
|
|
246
|
+
test_config = bt.config["full_node"]
|
|
247
|
+
private_ca_crt, private_ca_key = private_ssl_ca_paths(bt.root_path, bt.config)
|
|
248
|
+
chia_ca_crt, chia_ca_key = chia_ssl_ca_paths(bt.root_path, bt.config)
|
|
249
|
+
|
|
250
|
+
# need to add in exempt networks to config
|
|
251
|
+
test_config["exempt_peer_networks"] = ["10.1.1.0/16"]
|
|
252
|
+
test_config["trusted_cidrs"] = ["34.34.34.34/32"]
|
|
253
|
+
|
|
254
|
+
my_test_server = ChiaServer.create(
|
|
255
|
+
port=None,
|
|
256
|
+
node=None,
|
|
257
|
+
api=FullNodeAPI(None), # type: ignore[arg-type]
|
|
258
|
+
local_type=NodeType.FULL_NODE,
|
|
259
|
+
ping_interval=0,
|
|
260
|
+
network_id="Fake",
|
|
261
|
+
root_path=bt.root_path,
|
|
262
|
+
capabilities=[],
|
|
263
|
+
outbound_rate_limit_percent=100,
|
|
264
|
+
inbound_rate_limit_percent=100,
|
|
265
|
+
config=test_config,
|
|
266
|
+
private_ca_crt_key=(private_ca_crt, private_ca_key),
|
|
267
|
+
chia_ca_crt_key=(chia_ca_crt, chia_ca_key),
|
|
268
|
+
stub_metadata_for_type={},
|
|
269
|
+
name="Hello",
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
with caplog.at_level(logging.WARNING):
|
|
273
|
+
# testing exempt_peer_networks
|
|
274
|
+
exempt_peer = FakeConnection(peer_info=PeerInfo("10.1.1.1", 8444))
|
|
275
|
+
await my_test_server.connection_closed(cast(WSChiaConnection, exempt_peer), ban_time=60)
|
|
276
|
+
assert f"Trying to ban exempt peer {exempt_peer.peer_info.host} for 60, but will not ban" in caplog.text
|
|
277
|
+
|
|
278
|
+
# testing localhost exemption
|
|
279
|
+
localhost_peer = FakeConnection(peer_info=PeerInfo("127.0.0.1", 8444))
|
|
280
|
+
await my_test_server.connection_closed(cast(WSChiaConnection, localhost_peer), ban_time=60)
|
|
281
|
+
assert "Trying to ban localhost for 60, but will not ban" in caplog.text
|
|
282
|
+
|
|
283
|
+
# testing trusted peers exemption
|
|
284
|
+
trusted_peer = FakeConnection(peer_info=PeerInfo("34.34.34.34", 8444))
|
|
285
|
+
await my_test_server.connection_closed(cast(WSChiaConnection, trusted_peer), ban_time=60)
|
|
286
|
+
assert f"Trying to ban trusted peer {trusted_peer.peer_info.host} for 60, but will not ban" in caplog.text
|
|
@@ -7,7 +7,7 @@ import sys
|
|
|
7
7
|
import time
|
|
8
8
|
from collections.abc import AsyncIterator
|
|
9
9
|
from pathlib import Path
|
|
10
|
-
from typing import Any,
|
|
10
|
+
from typing import Any, cast
|
|
11
11
|
|
|
12
12
|
import aiohttp.client_exceptions
|
|
13
13
|
import pytest
|
|
@@ -114,7 +114,7 @@ async def test_daemon_terminates(signal_number: signal.Signals, chia_root: ChiaR
|
|
|
114
114
|
async def test_services_terminate(
|
|
115
115
|
signal_number: signal.Signals,
|
|
116
116
|
chia_root: ChiaRoot,
|
|
117
|
-
create_service:
|
|
117
|
+
create_service: CreateServiceProtocol | None,
|
|
118
118
|
module_path: str,
|
|
119
119
|
service_config_name: str,
|
|
120
120
|
) -> None:
|
chia/_tests/core/ssl/test_ssl.py
CHANGED
|
@@ -9,7 +9,7 @@ import aiohttp
|
|
|
9
9
|
import pytest
|
|
10
10
|
from chia_rs.sized_bytes import bytes32
|
|
11
11
|
|
|
12
|
-
from chia.apis import
|
|
12
|
+
from chia.apis import StubMetadataRegistry
|
|
13
13
|
from chia.protocols.outbound_message import NodeType
|
|
14
14
|
from chia.protocols.shared_protocol import default_capabilities
|
|
15
15
|
from chia.server.server import ChiaServer, ssl_context_for_client
|
|
@@ -38,7 +38,7 @@ async def establish_connection(server: ChiaServer, self_hostname: str, ssl_conte
|
|
|
38
38
|
100,
|
|
39
39
|
30,
|
|
40
40
|
local_capabilities_for_handshake=default_capabilities[NodeType.FULL_NODE],
|
|
41
|
-
|
|
41
|
+
stub_metadata_for_type=StubMetadataRegistry,
|
|
42
42
|
)
|
|
43
43
|
await wsc.perform_handshake(server._network_id, dummy_port, NodeType.FULL_NODE)
|
|
44
44
|
await wsc.close()
|
|
@@ -58,9 +58,7 @@ async def test_basics(softfork_height: int, bt: BlockTools) -> None:
|
|
|
58
58
|
wallet_tool = bt.get_pool_wallet_tool()
|
|
59
59
|
ph = wallet_tool.get_new_puzzlehash()
|
|
60
60
|
num_blocks = 3
|
|
61
|
-
blocks = bt.get_consecutive_blocks(
|
|
62
|
-
num_blocks, [], guarantee_transaction_block=True, pool_reward_puzzle_hash=ph, farmer_reward_puzzle_hash=ph
|
|
63
|
-
)
|
|
61
|
+
blocks = bt.get_consecutive_blocks(num_blocks, [], guarantee_transaction_block=True, farmer_reward_puzzle_hash=ph)
|
|
64
62
|
coinbase = None
|
|
65
63
|
for coin in blocks[2].get_included_reward_coins():
|
|
66
64
|
if coin.puzzle_hash == ph and coin.amount == 250000000000:
|
|
@@ -124,9 +122,7 @@ async def test_mempool_mode(softfork_height: int, bt: BlockTools) -> None:
|
|
|
124
122
|
ph = wallet_tool.get_new_puzzlehash()
|
|
125
123
|
|
|
126
124
|
num_blocks = 3
|
|
127
|
-
blocks = bt.get_consecutive_blocks(
|
|
128
|
-
num_blocks, [], guarantee_transaction_block=True, pool_reward_puzzle_hash=ph, farmer_reward_puzzle_hash=ph
|
|
129
|
-
)
|
|
125
|
+
blocks = bt.get_consecutive_blocks(num_blocks, [], guarantee_transaction_block=True, farmer_reward_puzzle_hash=ph)
|
|
130
126
|
|
|
131
127
|
coinbase = None
|
|
132
128
|
for coin in blocks[2].get_included_reward_coins():
|
|
@@ -3,14 +3,13 @@ from __future__ import annotations
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
import logging
|
|
5
5
|
import operator
|
|
6
|
-
import sys
|
|
7
6
|
import time
|
|
8
|
-
from collections.abc import Awaitable
|
|
7
|
+
from collections.abc import Awaitable, Callable
|
|
9
8
|
from math import ceil
|
|
10
9
|
from os import mkdir
|
|
11
10
|
from pathlib import Path
|
|
12
11
|
from shutil import copy
|
|
13
|
-
from typing import Any,
|
|
12
|
+
from typing import Any, cast
|
|
14
13
|
|
|
15
14
|
import pytest
|
|
16
15
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -360,11 +359,10 @@ def test_plot_matches_filter(filter_item: FilterItem, match: bool) -> None:
|
|
|
360
359
|
],
|
|
361
360
|
)
|
|
362
361
|
@pytest.mark.anyio
|
|
363
|
-
@pytest.mark.skipif(sys.platform == "win32", reason="avoiding crashes on windows until we fix this (crashing workers)")
|
|
364
362
|
async def test_farmer_get_harvester_plots_endpoints(
|
|
365
363
|
harvester_farmer_environment: HarvesterFarmerEnvironment,
|
|
366
364
|
endpoint: Callable[[FarmerRpcClient, PaginatedRequestData], Awaitable[dict[str, Any]]],
|
|
367
|
-
filtering:
|
|
365
|
+
filtering: list[FilterItem] | list[str],
|
|
368
366
|
sort_key: str,
|
|
369
367
|
reverse: bool,
|
|
370
368
|
expected_plot_count: int,
|
chia/_tests/core/test_filter.py
CHANGED
|
@@ -9,6 +9,7 @@ from chia import __version__
|
|
|
9
9
|
from chia._tests.blockchain.blockchain_test_utils import _validate_and_add_block
|
|
10
10
|
from chia._tests.conftest import ConsensusMode
|
|
11
11
|
from chia._tests.connection_utils import connect_and_get_peer
|
|
12
|
+
from chia._tests.core.full_node.test_full_node import find_reward_coin
|
|
12
13
|
from chia._tests.util.rpc import validate_get_routes
|
|
13
14
|
from chia._tests.util.setup_nodes import SimulatorsAndWalletsServices
|
|
14
15
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
@@ -763,7 +764,6 @@ async def test_coin_name_found_in_mempool(one_node: SimulatorsAndWalletsServices
|
|
|
763
764
|
block_list_input=blocks,
|
|
764
765
|
guarantee_transaction_block=True,
|
|
765
766
|
farmer_reward_puzzle_hash=ph,
|
|
766
|
-
pool_reward_puzzle_hash=ph,
|
|
767
767
|
)
|
|
768
768
|
for block in blocks[-2:]:
|
|
769
769
|
await full_node_api.full_node.add_block(block)
|
|
@@ -771,7 +771,7 @@ async def test_coin_name_found_in_mempool(one_node: SimulatorsAndWalletsServices
|
|
|
771
771
|
# empty mempool
|
|
772
772
|
assert len(await client.get_all_mempool_items()) == 0
|
|
773
773
|
|
|
774
|
-
coin_to_spend = blocks[-1]
|
|
774
|
+
coin_to_spend = find_reward_coin(blocks[-1], ph)
|
|
775
775
|
spend_bundle = wallet.generate_signed_transaction(coin_to_spend.amount, ph_receiver, coin_to_spend)
|
|
776
776
|
await client.push_tx(spend_bundle)
|
|
777
777
|
|
|
@@ -5,7 +5,6 @@ import random
|
|
|
5
5
|
from hashlib import sha256
|
|
6
6
|
from itertools import permutations
|
|
7
7
|
from random import Random
|
|
8
|
-
from typing import Optional
|
|
9
8
|
|
|
10
9
|
import pytest
|
|
11
10
|
from chia_rs import Coin, MerkleSet, compute_merkle_set_root, confirm_included_already_hashed
|
|
@@ -311,7 +310,7 @@ def test_validate_removals_full_list(num_coins: int, seeded_random: Random) -> N
|
|
|
311
310
|
# the root can be computed by all the removals
|
|
312
311
|
coins = make_test_coins(num_coins, seeded_random)
|
|
313
312
|
|
|
314
|
-
coin_map: list[tuple[bytes32,
|
|
313
|
+
coin_map: list[tuple[bytes32, Coin | None]] = []
|
|
315
314
|
removals_merkle_set = MerkleSet([coin.name() for coin in coins])
|
|
316
315
|
for coin in coins:
|
|
317
316
|
coin_map.append((coin.name(), coin))
|
chia/_tests/core/test_seeder.py
CHANGED
|
@@ -4,7 +4,7 @@ import time
|
|
|
4
4
|
from dataclasses import dataclass
|
|
5
5
|
from ipaddress import IPv4Address, IPv6Address
|
|
6
6
|
from socket import AF_INET, AF_INET6, SOCK_STREAM
|
|
7
|
-
from typing import
|
|
7
|
+
from typing import cast
|
|
8
8
|
from unittest.mock import AsyncMock
|
|
9
9
|
|
|
10
10
|
import dns
|
|
@@ -367,9 +367,9 @@ def get_mock_resolver() -> AsyncMock:
|
|
|
367
367
|
|
|
368
368
|
# Adjust mock_resolve to accept all arguments
|
|
369
369
|
async def mock_resolve(
|
|
370
|
-
qname:
|
|
371
|
-
rdtype:
|
|
372
|
-
lifetime:
|
|
370
|
+
qname: dns.name.Name | str,
|
|
371
|
+
rdtype: dns.rdatatype.RdataType | str = dns.rdatatype.A,
|
|
372
|
+
lifetime: float | None = None,
|
|
373
373
|
) -> RRset:
|
|
374
374
|
if rdtype == "A":
|
|
375
375
|
return mock_rrset_a
|
|
@@ -10,7 +10,7 @@ from multiprocessing import Pool, Queue, TimeoutError
|
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
from threading import Thread
|
|
12
12
|
from time import sleep
|
|
13
|
-
from typing import Any
|
|
13
|
+
from typing import Any
|
|
14
14
|
|
|
15
15
|
import pytest
|
|
16
16
|
import yaml
|
|
@@ -41,7 +41,7 @@ def write_config(
|
|
|
41
41
|
atomic_write: bool,
|
|
42
42
|
do_sleep: bool,
|
|
43
43
|
iterations: int,
|
|
44
|
-
error_queue:
|
|
44
|
+
error_queue: Queue | None = None,
|
|
45
45
|
):
|
|
46
46
|
"""
|
|
47
47
|
Wait for a random amount of time and write out the config data. With a large
|
|
@@ -74,7 +74,7 @@ def write_config(
|
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
def read_and_compare_config(
|
|
77
|
-
root_path: Path, default_config: dict, do_sleep: bool, iterations: int, error_queue:
|
|
77
|
+
root_path: Path, default_config: dict, do_sleep: bool, iterations: int, error_queue: Queue | None = None
|
|
78
78
|
):
|
|
79
79
|
"""
|
|
80
80
|
Wait for a random amount of time, read the config and compare with the
|
|
@@ -263,7 +263,7 @@ class TestConfig:
|
|
|
263
263
|
Test whether multiple readers/writers encounter data corruption. When using non-atomic operations
|
|
264
264
|
to write to the config, partial/incomplete writes can cause readers to yield bad/corrupt data.
|
|
265
265
|
"""
|
|
266
|
-
#
|
|
266
|
+
# Artificially inflate the size of the default config. This is done to (hopefully) force
|
|
267
267
|
# save_config() to require multiple writes. When save_config() was using shutil.move()
|
|
268
268
|
# multiple writes were observed, leading to read failures when data was partially written.
|
|
269
269
|
default_config_dict["xyz"] = "x" * 32768
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Any
|
|
4
|
+
from typing import Any
|
|
5
5
|
|
|
6
6
|
from chia_rs.sized_bytes import bytes32
|
|
7
7
|
from chia_rs.sized_ints import uint32
|
|
@@ -18,7 +18,7 @@ def test_primitives() -> None:
|
|
|
18
18
|
@dataclass(frozen=True)
|
|
19
19
|
class PrimitivesTest(Streamable):
|
|
20
20
|
a: uint32
|
|
21
|
-
b:
|
|
21
|
+
b: str | None
|
|
22
22
|
c: str
|
|
23
23
|
d: bytes
|
|
24
24
|
e: bytes32
|
|
@@ -2,8 +2,8 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
import random
|
|
5
|
+
from collections.abc import Callable
|
|
5
6
|
from dataclasses import dataclass, replace
|
|
6
|
-
from typing import Callable, Optional
|
|
7
7
|
|
|
8
8
|
import importlib_resources
|
|
9
9
|
import pytest
|
|
@@ -271,7 +271,7 @@ def test_key_data_secrets_creation(
|
|
|
271
271
|
|
|
272
272
|
|
|
273
273
|
@pytest.mark.parametrize("label", [None, "key"])
|
|
274
|
-
def test_key_data_generate(label:
|
|
274
|
+
def test_key_data_generate(label: str | None) -> None:
|
|
275
275
|
key_data = KeyData.generate(label)
|
|
276
276
|
assert key_data.private_key == AugSchemeMPL.key_gen(mnemonic_to_seed(key_data.mnemonic_str()))
|
|
277
277
|
assert key_data.entropy == bytes_from_mnemonic(key_data.mnemonic_str())
|
|
@@ -343,7 +343,7 @@ def test_key_data_secrets_post_init(input_data: tuple[list[str], bytes, PrivateK
|
|
|
343
343
|
],
|
|
344
344
|
)
|
|
345
345
|
def test_key_data_post_init(
|
|
346
|
-
input_data: tuple[uint32, G1Element,
|
|
346
|
+
input_data: tuple[uint32, G1Element, str | None, KeyDataSecrets | None], data_type: str
|
|
347
347
|
) -> None:
|
|
348
348
|
with pytest.raises(KeychainKeyDataMismatch, match=data_type):
|
|
349
349
|
KeyData(*input_data)
|
|
@@ -3,11 +3,12 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
import os
|
|
5
5
|
import time
|
|
6
|
+
from collections.abc import Callable
|
|
6
7
|
from multiprocessing import Pool, TimeoutError
|
|
7
8
|
from pathlib import Path
|
|
8
9
|
from sys import platform
|
|
9
10
|
from time import sleep
|
|
10
|
-
from typing import Any
|
|
11
|
+
from typing import Any
|
|
11
12
|
|
|
12
13
|
import pytest
|
|
13
14
|
|
|
@@ -4,7 +4,6 @@ import contextlib
|
|
|
4
4
|
import dataclasses
|
|
5
5
|
import logging
|
|
6
6
|
import re
|
|
7
|
-
from typing import Union
|
|
8
7
|
|
|
9
8
|
import pytest
|
|
10
9
|
|
|
@@ -22,7 +21,7 @@ def logger_fixture() -> logging.Logger:
|
|
|
22
21
|
@dataclasses.dataclass
|
|
23
22
|
class ErrorCase:
|
|
24
23
|
type_to_raise: type[BaseException]
|
|
25
|
-
type_to_catch:
|
|
24
|
+
type_to_catch: type[BaseException] | tuple[type[BaseException], ...]
|
|
26
25
|
should_match: bool
|
|
27
26
|
|
|
28
27
|
|