chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__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.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.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.0rc2.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import asyncio
|
|
4
4
|
from math import floor
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Any,
|
|
6
|
+
from typing import Any, Optional
|
|
7
7
|
|
|
8
8
|
import pytest
|
|
9
9
|
from chia_rs import G1Element
|
|
@@ -32,19 +32,19 @@ def farmer_is_started(farmer: Farmer) -> bool:
|
|
|
32
32
|
return farmer.started
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
async def get_harvester_config(harvester_rpc_port: Optional[int], root_path: Path) ->
|
|
36
|
-
async with get_any_service_client(HarvesterRpcClient,
|
|
35
|
+
async def get_harvester_config(harvester_rpc_port: Optional[int], root_path: Path) -> dict[str, Any]:
|
|
36
|
+
async with get_any_service_client(HarvesterRpcClient, root_path, harvester_rpc_port) as (harvester_client, _):
|
|
37
37
|
return await harvester_client.get_harvester_config()
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
async def update_harvester_config(harvester_rpc_port: Optional[int], root_path: Path, config:
|
|
41
|
-
async with get_any_service_client(HarvesterRpcClient,
|
|
40
|
+
async def update_harvester_config(harvester_rpc_port: Optional[int], root_path: Path, config: dict[str, Any]) -> bool:
|
|
41
|
+
async with get_any_service_client(HarvesterRpcClient, root_path, harvester_rpc_port) as (harvester_client, _):
|
|
42
42
|
return await harvester_client.update_harvester_config(config)
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
@pytest.mark.anyio
|
|
46
46
|
async def test_start_with_empty_keychain(
|
|
47
|
-
farmer_one_harvester_not_started:
|
|
47
|
+
farmer_one_harvester_not_started: tuple[list[HarvesterService], FarmerService, BlockTools],
|
|
48
48
|
) -> None:
|
|
49
49
|
_, farmer_service, bt = farmer_one_harvester_not_started
|
|
50
50
|
farmer: Farmer = farmer_service._node
|
|
@@ -67,7 +67,7 @@ async def test_start_with_empty_keychain(
|
|
|
67
67
|
|
|
68
68
|
@pytest.mark.anyio
|
|
69
69
|
async def test_harvester_handshake(
|
|
70
|
-
farmer_one_harvester_not_started:
|
|
70
|
+
farmer_one_harvester_not_started: tuple[list[HarvesterService], FarmerService, BlockTools],
|
|
71
71
|
) -> None:
|
|
72
72
|
harvesters, farmer_service, bt = farmer_one_harvester_not_started
|
|
73
73
|
harvester_service = harvesters[0]
|
|
@@ -169,8 +169,8 @@ async def test_farmer_respond_signatures(
|
|
|
169
169
|
|
|
170
170
|
|
|
171
171
|
@pytest.mark.anyio
|
|
172
|
-
async def test_harvester_config(farmer_one_harvester:
|
|
173
|
-
harvester_services,
|
|
172
|
+
async def test_harvester_config(farmer_one_harvester: tuple[list[HarvesterService], FarmerService, BlockTools]) -> None:
|
|
173
|
+
harvester_services, _farmer_service, bt = farmer_one_harvester
|
|
174
174
|
harvester_service = harvester_services[0]
|
|
175
175
|
|
|
176
176
|
assert harvester_service.rpc_server and harvester_service.rpc_server.webserver
|
|
@@ -179,7 +179,7 @@ async def test_harvester_config(farmer_one_harvester: Tuple[List[HarvesterServic
|
|
|
179
179
|
harvester_config = await get_harvester_config(harvester_rpc_port, bt.root_path)
|
|
180
180
|
assert harvester_config["success"] is True
|
|
181
181
|
|
|
182
|
-
def check_config_match(config1:
|
|
182
|
+
def check_config_match(config1: dict[str, Any], config2: dict[str, Any]) -> None:
|
|
183
183
|
assert config1["harvester"]["use_gpu_harvesting"] == config2["use_gpu_harvesting"]
|
|
184
184
|
assert config1["harvester"]["gpu_index"] == config2["gpu_index"]
|
|
185
185
|
assert config1["harvester"]["enforce_gpu_index"] == config2["enforce_gpu_index"]
|
|
@@ -202,7 +202,7 @@ async def test_harvester_config(farmer_one_harvester: Tuple[List[HarvesterServic
|
|
|
202
202
|
harvester_config["parallel_decompressor_count"] += 1
|
|
203
203
|
harvester_config["decompressor_thread_count"] += 1
|
|
204
204
|
harvester_config["recursive_plot_scan"] = not harvester_config["recursive_plot_scan"]
|
|
205
|
-
harvester_config["refresh_parameter_interval_seconds"]
|
|
205
|
+
harvester_config["refresh_parameter_interval_seconds"] += 1
|
|
206
206
|
|
|
207
207
|
res = await update_harvester_config(harvester_rpc_port, bt.root_path, harvester_config)
|
|
208
208
|
assert res is True
|
|
@@ -212,13 +212,13 @@ async def test_harvester_config(farmer_one_harvester: Tuple[List[HarvesterServic
|
|
|
212
212
|
|
|
213
213
|
@pytest.mark.anyio
|
|
214
214
|
async def test_missing_signage_point(
|
|
215
|
-
farmer_one_harvester:
|
|
215
|
+
farmer_one_harvester: tuple[list[HarvesterService], FarmerService, BlockTools],
|
|
216
216
|
) -> None:
|
|
217
|
-
_, farmer_service,
|
|
217
|
+
_, farmer_service, _bt = farmer_one_harvester
|
|
218
218
|
farmer_api = farmer_service._api
|
|
219
219
|
farmer = farmer_api.farmer
|
|
220
220
|
|
|
221
|
-
def create_sp(index: int, challenge_hash: bytes32) ->
|
|
221
|
+
def create_sp(index: int, challenge_hash: bytes32) -> tuple[uint64, farmer_protocol.NewSignagePoint]:
|
|
222
222
|
time = uint64(index + 1)
|
|
223
223
|
sp = farmer_protocol.NewSignagePoint(
|
|
224
224
|
challenge_hash, std_hash(b"2"), std_hash(b"3"), uint64(1), uint64(1000000), uint8(index), uint32(1)
|
|
@@ -271,7 +271,7 @@ async def test_missing_signage_point(
|
|
|
271
271
|
assert original_state_changed_callback is not None
|
|
272
272
|
number_of_missing_sps: uint32 = uint32(0)
|
|
273
273
|
|
|
274
|
-
def state_changed(change: str, data:
|
|
274
|
+
def state_changed(change: str, data: dict[str, Any]) -> None:
|
|
275
275
|
nonlocal number_of_missing_sps
|
|
276
276
|
number_of_missing_sps = data["missing_signage_points"][1]
|
|
277
277
|
original_state_changed_callback(change, data)
|
|
@@ -284,9 +284,9 @@ async def test_missing_signage_point(
|
|
|
284
284
|
|
|
285
285
|
@pytest.mark.anyio
|
|
286
286
|
async def test_harvester_has_no_server(
|
|
287
|
-
farmer_one_harvester:
|
|
287
|
+
farmer_one_harvester: tuple[list[FarmerService], HarvesterService, BlockTools],
|
|
288
288
|
) -> None:
|
|
289
|
-
harvesters, _,
|
|
289
|
+
harvesters, _, _bt = farmer_one_harvester
|
|
290
290
|
harvester_server = harvesters[0]._server
|
|
291
291
|
|
|
292
292
|
assert harvester_server.webserver is None
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from collections.abc import AsyncIterator
|
|
3
4
|
from pathlib import Path
|
|
4
|
-
from typing import Any,
|
|
5
|
+
from typing import Any, Optional
|
|
5
6
|
|
|
6
7
|
import pytest
|
|
7
8
|
|
|
@@ -31,7 +32,7 @@ from chia.util.keychain import Keychain
|
|
|
31
32
|
argnames=["filter_prefix_bits", "should_pass"], argvalues=[(9, 34), (8, 89), (7, 162), (6, 295), (5, 579)]
|
|
32
33
|
)
|
|
33
34
|
def test_filter_prefix_bits_on_blocks(
|
|
34
|
-
default_10000_blocks:
|
|
35
|
+
default_10000_blocks: list[FullBlock], filter_prefix_bits: uint8, should_pass: int
|
|
35
36
|
) -> None:
|
|
36
37
|
passed = 0
|
|
37
38
|
for block in default_10000_blocks:
|
|
@@ -50,7 +51,7 @@ def test_filter_prefix_bits_on_blocks(
|
|
|
50
51
|
@pytest.fixture(scope="function")
|
|
51
52
|
async def farmer_harvester_with_filter_size_9(
|
|
52
53
|
get_temp_keyring: Keychain, tmp_path: Path, self_hostname: str
|
|
53
|
-
) -> AsyncIterator[
|
|
54
|
+
) -> AsyncIterator[tuple[HarvesterService, FarmerAPI]]:
|
|
54
55
|
async def have_connections() -> bool:
|
|
55
56
|
return len(await farmer_rpc_cl.get_connections()) > 0
|
|
56
57
|
|
|
@@ -86,14 +87,14 @@ async def farmer_harvester_with_filter_size_9(
|
|
|
86
87
|
@pytest.mark.parametrize(argnames=["peak_height", "eligible_plots"], argvalues=[(5495999, 0), (5496000, 1)])
|
|
87
88
|
@pytest.mark.anyio
|
|
88
89
|
async def test_filter_prefix_bits_with_farmer_harvester(
|
|
89
|
-
farmer_harvester_with_filter_size_9:
|
|
90
|
+
farmer_harvester_with_filter_size_9: tuple[HarvesterService, FarmerAPI],
|
|
90
91
|
peak_height: uint32,
|
|
91
92
|
eligible_plots: int,
|
|
92
93
|
) -> None:
|
|
93
94
|
state_change = None
|
|
94
95
|
state_change_data = None
|
|
95
96
|
|
|
96
|
-
def state_changed_callback(change: str, change_data: Optional[
|
|
97
|
+
def state_changed_callback(change: str, change_data: Optional[dict[str, Any]]) -> None:
|
|
97
98
|
nonlocal state_change, state_change_data
|
|
98
99
|
state_change = change
|
|
99
100
|
state_change_data = change_data
|
|
@@ -2,20 +2,22 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import base64
|
|
5
|
+
import contextlib
|
|
5
6
|
import dataclasses
|
|
6
7
|
import json
|
|
7
8
|
import logging
|
|
8
9
|
from os.path import dirname
|
|
9
|
-
from typing import
|
|
10
|
+
from typing import Optional, Union, cast
|
|
10
11
|
|
|
11
12
|
import pytest
|
|
12
13
|
from chia_rs import G1Element
|
|
13
|
-
from pytest_mock import MockerFixture
|
|
14
14
|
|
|
15
|
+
from chia._tests.util.misc import patch_request_handler
|
|
15
16
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
17
|
+
from chia.consensus.block_body_validation import ForkInfo
|
|
16
18
|
from chia.consensus.blockchain import AddBlockResult
|
|
17
19
|
from chia.consensus.difficulty_adjustment import get_next_sub_slot_iters_and_difficulty
|
|
18
|
-
from chia.consensus.multiprocess_validation import PreValidationResult,
|
|
20
|
+
from chia.consensus.multiprocess_validation import PreValidationResult, pre_validate_block
|
|
19
21
|
from chia.farmer.farmer import Farmer, calculate_harvester_fee_quality
|
|
20
22
|
from chia.farmer.farmer_api import FarmerAPI
|
|
21
23
|
from chia.full_node.full_node import FullNode
|
|
@@ -23,7 +25,6 @@ from chia.full_node.full_node_api import FullNodeAPI
|
|
|
23
25
|
from chia.harvester.harvester import Harvester
|
|
24
26
|
from chia.harvester.harvester_api import HarvesterAPI
|
|
25
27
|
from chia.protocols import farmer_protocol, full_node_protocol, harvester_protocol, timelord_protocol
|
|
26
|
-
from chia.protocols.farmer_protocol import RequestSignedValues
|
|
27
28
|
from chia.protocols.harvester_protocol import ProofOfSpaceFeeInfo, RespondSignatures, SigningDataKind
|
|
28
29
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
29
30
|
from chia.server.outbound_message import Message, NodeType, make_msg
|
|
@@ -39,24 +40,25 @@ from chia.types.blockchain_format.sized_bytes import bytes32
|
|
|
39
40
|
from chia.types.blockchain_format.slots import ChallengeChainSubSlot, RewardChainSubSlot
|
|
40
41
|
from chia.types.full_block import FullBlock
|
|
41
42
|
from chia.types.peer_info import UnresolvedPeerInfo
|
|
43
|
+
from chia.types.validation_state import ValidationState
|
|
44
|
+
from chia.util.augmented_chain import AugmentedBlockchain
|
|
42
45
|
from chia.util.bech32m import decode_puzzle_hash
|
|
43
46
|
from chia.util.hash import std_hash
|
|
44
47
|
from chia.util.ints import uint8, uint32, uint64
|
|
45
48
|
|
|
46
49
|
SPType = Union[timelord_protocol.NewEndOfSubSlotVDF, timelord_protocol.NewSignagePointVDF]
|
|
47
|
-
SPList =
|
|
50
|
+
SPList = list[SPType]
|
|
48
51
|
|
|
49
52
|
|
|
50
53
|
@pytest.mark.anyio
|
|
51
54
|
async def test_harvester_receive_source_signing_data(
|
|
52
|
-
farmer_harvester_2_simulators_zero_bits_plot_filter:
|
|
55
|
+
farmer_harvester_2_simulators_zero_bits_plot_filter: tuple[
|
|
53
56
|
FarmerService,
|
|
54
57
|
HarvesterService,
|
|
55
58
|
Union[FullNodeService, SimulatorFullNodeService],
|
|
56
59
|
Union[FullNodeService, SimulatorFullNodeService],
|
|
57
60
|
BlockTools,
|
|
58
61
|
],
|
|
59
|
-
mocker: MockerFixture,
|
|
60
62
|
) -> None:
|
|
61
63
|
"""
|
|
62
64
|
Tests that the source data for the signatures requests sent to the
|
|
@@ -90,7 +92,7 @@ async def test_harvester_receive_source_signing_data(
|
|
|
90
92
|
await wait_until_node_type_connected(full_node_1.server, NodeType.FULL_NODE)
|
|
91
93
|
|
|
92
94
|
# Prepare test data
|
|
93
|
-
blocks:
|
|
95
|
+
blocks: list[FullBlock]
|
|
94
96
|
signage_points: SPList
|
|
95
97
|
|
|
96
98
|
(blocks, signage_points) = load_test_data()
|
|
@@ -112,8 +114,9 @@ async def test_harvester_receive_source_signing_data(
|
|
|
112
114
|
finished_validating_data = False
|
|
113
115
|
farmer_reward_address = decode_puzzle_hash("txch1psqeaw0h244v5sy2r4se8pheyl62n8778zl6t5e7dep0xch9xfkqhx2mej")
|
|
114
116
|
|
|
115
|
-
async def intercept_harvester_request_signatures(
|
|
116
|
-
|
|
117
|
+
async def intercept_harvester_request_signatures(
|
|
118
|
+
self: HarvesterAPI, request: harvester_protocol.RequestSignatures
|
|
119
|
+
) -> Optional[Message]:
|
|
117
120
|
nonlocal harvester
|
|
118
121
|
nonlocal farmer_reward_address
|
|
119
122
|
|
|
@@ -207,24 +210,23 @@ async def test_harvester_receive_source_signing_data(
|
|
|
207
210
|
data_hash = data.get_hash()
|
|
208
211
|
assert data_hash == hash
|
|
209
212
|
|
|
210
|
-
async def intercept_farmer_new_proof_of_space(
|
|
213
|
+
async def intercept_farmer_new_proof_of_space(
|
|
214
|
+
self: HarvesterAPI, request: harvester_protocol.NewProofOfSpace, peer: WSChiaConnection
|
|
215
|
+
) -> None:
|
|
211
216
|
nonlocal farmer
|
|
212
217
|
nonlocal farmer_reward_address
|
|
213
218
|
|
|
214
|
-
request
|
|
215
|
-
harvester_protocol.NewProofOfSpace.from_bytes(args[0]), farmer_reward_address_override=farmer_reward_address
|
|
216
|
-
)
|
|
217
|
-
peer: WSChiaConnection = args[1]
|
|
219
|
+
request = dataclasses.replace(request, farmer_reward_address_override=farmer_reward_address)
|
|
218
220
|
|
|
219
221
|
await FarmerAPI.new_proof_of_space(farmer.server.api, request, peer)
|
|
220
222
|
|
|
221
|
-
async def intercept_farmer_request_signed_values(
|
|
223
|
+
async def intercept_farmer_request_signed_values(
|
|
224
|
+
self: FarmerAPI, request: farmer_protocol.RequestSignedValues
|
|
225
|
+
) -> Optional[Message]:
|
|
222
226
|
nonlocal farmer
|
|
223
227
|
nonlocal farmer_reward_address
|
|
224
228
|
nonlocal full_node_2
|
|
225
229
|
|
|
226
|
-
request: RequestSignedValues = RequestSignedValues.from_bytes(args[0])
|
|
227
|
-
|
|
228
230
|
# Ensure the FullNode included the source data for the signatures
|
|
229
231
|
assert request.foliage_block_data
|
|
230
232
|
assert request.foliage_block_data.get_hash() == request.foliage_block_data_hash
|
|
@@ -239,23 +241,42 @@ async def test_harvester_receive_source_signing_data(
|
|
|
239
241
|
|
|
240
242
|
return await FarmerAPI.request_signed_values(farmer.server.api, request)
|
|
241
243
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
244
|
+
with contextlib.ExitStack() as exit_stack:
|
|
245
|
+
exit_stack.enter_context(
|
|
246
|
+
patch_request_handler(
|
|
247
|
+
api=farmer.server.api,
|
|
248
|
+
handler=intercept_farmer_request_signed_values,
|
|
249
|
+
request_type=ProtocolMessageTypes.request_signed_values,
|
|
250
|
+
)
|
|
251
|
+
)
|
|
252
|
+
exit_stack.enter_context(
|
|
253
|
+
patch_request_handler(
|
|
254
|
+
api=farmer.server.api,
|
|
255
|
+
handler=intercept_farmer_new_proof_of_space,
|
|
256
|
+
request_type=ProtocolMessageTypes.new_proof_of_space,
|
|
257
|
+
)
|
|
258
|
+
)
|
|
259
|
+
exit_stack.enter_context(
|
|
260
|
+
patch_request_handler(
|
|
261
|
+
api=harvester.server.api,
|
|
262
|
+
handler=intercept_harvester_request_signatures,
|
|
263
|
+
request_type=ProtocolMessageTypes.request_signatures,
|
|
264
|
+
)
|
|
265
|
+
)
|
|
245
266
|
|
|
246
|
-
|
|
247
|
-
|
|
267
|
+
# Start injecting signage points
|
|
268
|
+
await inject_signage_points(signage_points, full_node_1, full_node_2)
|
|
248
269
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
270
|
+
# Wait until test finishes
|
|
271
|
+
def did_finished_validating_data() -> bool:
|
|
272
|
+
return finished_validating_data
|
|
252
273
|
|
|
253
|
-
|
|
274
|
+
await time_out_assert(60, did_finished_validating_data, True)
|
|
254
275
|
|
|
255
276
|
|
|
256
277
|
@pytest.mark.anyio
|
|
257
278
|
async def test_harvester_fee_convention(
|
|
258
|
-
farmer_harvester_2_simulators_zero_bits_plot_filter:
|
|
279
|
+
farmer_harvester_2_simulators_zero_bits_plot_filter: tuple[
|
|
259
280
|
FarmerService,
|
|
260
281
|
HarvesterService,
|
|
261
282
|
Union[FullNodeService, SimulatorFullNodeService],
|
|
@@ -285,7 +306,7 @@ async def test_harvester_fee_convention(
|
|
|
285
306
|
|
|
286
307
|
@pytest.mark.anyio
|
|
287
308
|
async def test_harvester_fee_invalid_convention(
|
|
288
|
-
farmer_harvester_2_simulators_zero_bits_plot_filter:
|
|
309
|
+
farmer_harvester_2_simulators_zero_bits_plot_filter: tuple[
|
|
289
310
|
FarmerService,
|
|
290
311
|
HarvesterService,
|
|
291
312
|
Union[FullNodeService, SimulatorFullNodeService],
|
|
@@ -318,7 +339,7 @@ async def test_harvester_fee_invalid_convention(
|
|
|
318
339
|
|
|
319
340
|
def prepare_sp_and_pos_for_fee_test(
|
|
320
341
|
fee_threshold_offset: int,
|
|
321
|
-
) ->
|
|
342
|
+
) -> tuple[farmer_protocol.NewSignagePoint, harvester_protocol.NewProofOfSpace]:
|
|
322
343
|
proof = std_hash(b"1")
|
|
323
344
|
challenge = std_hash(b"1")
|
|
324
345
|
|
|
@@ -419,7 +440,7 @@ def decode_sp(
|
|
|
419
440
|
return timelord_protocol.NewSignagePointVDF.from_bytes(sp_bytes)
|
|
420
441
|
|
|
421
442
|
|
|
422
|
-
async def add_test_blocks_into_full_node(blocks:
|
|
443
|
+
async def add_test_blocks_into_full_node(blocks: list[FullBlock], full_node: FullNode) -> None:
|
|
423
444
|
# Inject full node with a pre-existing block to skip initial genesis sub-slot
|
|
424
445
|
# so that we have blocks generated that have our farmer reward address, instead
|
|
425
446
|
# of the GENESIS_PRE_FARM_FARMER_PUZZLE_HASH.
|
|
@@ -435,31 +456,37 @@ async def add_test_blocks_into_full_node(blocks: List[FullBlock], full_node: Ful
|
|
|
435
456
|
prev_ses_block = curr
|
|
436
457
|
new_slot = len(block.finished_sub_slots) > 0
|
|
437
458
|
ssi, diff = get_next_sub_slot_iters_and_difficulty(full_node.constants, new_slot, prev_b, full_node.blockchain)
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
459
|
+
futures = []
|
|
460
|
+
chain = AugmentedBlockchain(full_node.blockchain)
|
|
461
|
+
for block in blocks:
|
|
462
|
+
futures.append(
|
|
463
|
+
await pre_validate_block(
|
|
464
|
+
full_node.blockchain.constants,
|
|
465
|
+
chain,
|
|
466
|
+
block,
|
|
467
|
+
full_node.blockchain.pool,
|
|
468
|
+
None,
|
|
469
|
+
ValidationState(ssi, diff, prev_ses_block),
|
|
470
|
+
)
|
|
471
|
+
)
|
|
472
|
+
pre_validation_results: list[PreValidationResult] = list(await asyncio.gather(*futures))
|
|
449
473
|
assert pre_validation_results is not None and len(pre_validation_results) == len(blocks)
|
|
450
474
|
for i in range(len(blocks)):
|
|
451
475
|
block = blocks[i]
|
|
452
476
|
if block.height != 0 and len(block.finished_sub_slots) > 0: # pragma: no cover
|
|
453
477
|
if block.finished_sub_slots[0].challenge_chain.new_sub_slot_iters is not None:
|
|
454
478
|
ssi = block.finished_sub_slots[0].challenge_chain.new_sub_slot_iters
|
|
455
|
-
|
|
479
|
+
fork_info = ForkInfo(block.height - 1, block.height - 1, block.prev_header_hash)
|
|
480
|
+
r, _, _ = await full_node.blockchain.add_block(
|
|
481
|
+
blocks[i], pre_validation_results[i], sub_slot_iters=ssi, fork_info=fork_info
|
|
482
|
+
)
|
|
456
483
|
assert r == AddBlockResult.NEW_PEAK
|
|
457
484
|
|
|
458
485
|
|
|
459
486
|
async def inject_signage_points(signage_points: SPList, full_node_1: FullNode, full_node_2: FullNode) -> None:
|
|
460
|
-
full_node_2_peer_1 =
|
|
487
|
+
full_node_2_peer_1 = next(
|
|
461
488
|
n for n in list(full_node_2.server.all_connections.values()) if n.local_type == NodeType.FULL_NODE
|
|
462
|
-
|
|
489
|
+
)
|
|
463
490
|
|
|
464
491
|
api2 = cast(FullNodeAPI, full_node_2.server.api)
|
|
465
492
|
|
|
@@ -491,7 +518,7 @@ async def inject_signage_points(signage_points: SPList, full_node_1: FullNode, f
|
|
|
491
518
|
# A FullBlock is also included which is infused already in the chain so
|
|
492
519
|
# that the next NewEndOfSubSlotVDF is valid.
|
|
493
520
|
# This block has to be added to the test FullNode before injecting the signage points.
|
|
494
|
-
def load_test_data() ->
|
|
521
|
+
def load_test_data() -> tuple[list[FullBlock], SPList]:
|
|
495
522
|
file_path: str = dirname(__file__) + "/test_third_party_harvesters_data.json"
|
|
496
523
|
with open(file_path) as f:
|
|
497
524
|
data = json.load(f)
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import types
|
|
4
|
-
from typing import Dict, List
|
|
5
4
|
|
|
6
5
|
import pytest
|
|
7
6
|
from chia_rs import Coin
|
|
@@ -41,8 +40,8 @@ def make_mempoolitem() -> MempoolItem:
|
|
|
41
40
|
block_height = 1
|
|
42
41
|
|
|
43
42
|
fee = uint64(10000000)
|
|
44
|
-
spends:
|
|
45
|
-
conds = SpendBundleConditions(spends, 0, 0, 0, None, None, [], cost, 0, 0, False)
|
|
43
|
+
spends: list[SpendConditions] = []
|
|
44
|
+
conds = SpendBundleConditions(spends, 0, 0, 0, None, None, [], cost, 0, 0, False, 0, 0)
|
|
46
45
|
mempool_item = MempoolItem(
|
|
47
46
|
spend_bundle,
|
|
48
47
|
fee,
|
|
@@ -125,7 +124,7 @@ def test_item_not_removed_if_not_added() -> None:
|
|
|
125
124
|
|
|
126
125
|
|
|
127
126
|
def test_mempool_fee_estimator_remove_item() -> None:
|
|
128
|
-
should_call_fee_estimator_remove:
|
|
127
|
+
should_call_fee_estimator_remove: dict[MempoolRemoveReason, int] = {
|
|
129
128
|
MempoolRemoveReason.BLOCK_INCLUSION: 0,
|
|
130
129
|
MempoolRemoveReason.CONFLICT: 1,
|
|
131
130
|
MempoolRemoveReason.POOL_FULL: 1,
|
|
@@ -188,7 +187,7 @@ def test_current_block_height_new_block() -> None:
|
|
|
188
187
|
fee_estimator = FeeEstimatorInterfaceIntegrationVerificationObject()
|
|
189
188
|
mempool = Mempool(test_mempool_info, fee_estimator)
|
|
190
189
|
height = uint32(10)
|
|
191
|
-
included_items:
|
|
190
|
+
included_items: list[MempoolItemInfo] = []
|
|
192
191
|
mempool.fee_estimator.new_block(FeeBlockInfo(height, included_items))
|
|
193
192
|
assert mempool.fee_estimator.current_block_height == height # type: ignore[attr-defined]
|
|
194
193
|
|
|
@@ -197,7 +196,7 @@ def test_current_block_height_new_height_then_new_block() -> None:
|
|
|
197
196
|
fee_estimator = FeeEstimatorInterfaceIntegrationVerificationObject()
|
|
198
197
|
mempool = Mempool(test_mempool_info, fee_estimator)
|
|
199
198
|
height = uint32(11)
|
|
200
|
-
included_items:
|
|
199
|
+
included_items: list[MempoolItemInfo] = []
|
|
201
200
|
fee_estimator.new_block_height(uint32(height - 1))
|
|
202
201
|
mempool.fee_estimator.new_block(FeeBlockInfo(height, included_items))
|
|
203
202
|
assert mempool.fee_estimator.current_block_height == height # type: ignore[attr-defined]
|
|
@@ -207,7 +206,7 @@ def test_current_block_height_new_block_then_new_height() -> None:
|
|
|
207
206
|
fee_estimator = FeeEstimatorInterfaceIntegrationVerificationObject()
|
|
208
207
|
mempool = Mempool(test_mempool_info, fee_estimator)
|
|
209
208
|
height = uint32(12)
|
|
210
|
-
included_items:
|
|
209
|
+
included_items: list[MempoolItemInfo] = []
|
|
211
210
|
fee_estimator.new_block_height(uint32(height - 1))
|
|
212
211
|
mempool.fee_estimator.new_block(FeeBlockInfo(height, included_items))
|
|
213
212
|
fee_estimator.new_block_height(uint32(height + 1))
|
|
@@ -254,7 +253,8 @@ def test_add_tx_called() -> None:
|
|
|
254
253
|
|
|
255
254
|
# Replace with test method
|
|
256
255
|
mempool.fee_estimator.tracker.add_tx = types.MethodType( # type: ignore[attr-defined]
|
|
257
|
-
add_tx_called_fun,
|
|
256
|
+
add_tx_called_fun,
|
|
257
|
+
mempool.fee_estimator.tracker, # type: ignore[attr-defined]
|
|
258
258
|
)
|
|
259
259
|
|
|
260
260
|
mempool.add_to_pool(item)
|