chia-blockchain 2.5.7rc3__py3-none-any.whl → 2.5.8rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/__init__.py +8 -4
- chia/_tests/blockchain/blockchain_test_utils.py +6 -8
- chia/_tests/blockchain/test_augmented_chain.py +4 -4
- chia/_tests/blockchain/test_blockchain.py +165 -190
- chia/_tests/blockchain/test_build_chains.py +2 -4
- chia/_tests/blockchain/test_get_block_generator.py +2 -3
- chia/_tests/clvm/coin_store.py +4 -7
- chia/_tests/clvm/test_clvm_step.py +4 -4
- chia/_tests/clvm/test_puzzle_compression.py +2 -1
- chia/_tests/clvm/test_puzzle_drivers.py +2 -2
- chia/_tests/clvm/test_singletons.py +2 -4
- chia/_tests/clvm/test_spend_sim.py +2 -2
- chia/_tests/cmds/cmd_test_utils.py +27 -45
- chia/_tests/cmds/test_cmd_framework.py +6 -6
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_show.py +4 -4
- chia/_tests/cmds/test_tx_config_args.py +1 -2
- chia/_tests/cmds/testing_classes.py +4 -5
- chia/_tests/cmds/wallet/test_did.py +24 -27
- chia/_tests/cmds/wallet/test_nft.py +12 -10
- chia/_tests/cmds/wallet/test_vcs.py +11 -12
- chia/_tests/cmds/wallet/test_wallet.py +134 -89
- chia/_tests/conftest.py +59 -30
- chia/_tests/connection_utils.py +2 -2
- chia/_tests/core/cmds/test_beta.py +4 -4
- chia/_tests/core/cmds/test_keys.py +2 -3
- chia/_tests/core/cmds/test_wallet.py +15 -15
- chia/_tests/core/consensus/test_pot_iterations.py +19 -73
- chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
- chia/_tests/core/daemon/test_daemon.py +11 -11
- chia/_tests/core/data_layer/conftest.py +2 -2
- chia/_tests/core/data_layer/test_data_rpc.py +28 -14
- chia/_tests/core/data_layer/test_data_store.py +10 -10
- chia/_tests/core/data_layer/util.py +11 -11
- chia/_tests/core/farmer/test_farmer_api.py +2 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
- chia/_tests/core/full_node/stores/test_block_store.py +5 -4
- chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
- chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +3 -4
- chia/_tests/core/full_node/test_conditions.py +21 -23
- chia/_tests/core/full_node/test_full_node.py +225 -62
- chia/_tests/core/full_node/test_hint_management.py +2 -4
- chia/_tests/core/full_node/test_performance.py +0 -1
- chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
- chia/_tests/core/full_node/test_transactions.py +1 -2
- chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
- chia/_tests/core/mempool/test_mempool.py +29 -37
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
- chia/_tests/core/mempool/test_mempool_manager.py +963 -839
- chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
- chia/_tests/core/server/serve.py +7 -7
- chia/_tests/core/server/test_dos.py +1 -2
- chia/_tests/core/server/test_event_loop.py +12 -4
- chia/_tests/core/server/test_loop.py +7 -8
- chia/_tests/core/server/test_rate_limits.py +9 -8
- chia/_tests/core/server/test_server.py +61 -1
- chia/_tests/core/services/test_services.py +2 -2
- chia/_tests/core/ssl/test_ssl.py +2 -2
- chia/_tests/core/test_cost_calculation.py +2 -6
- chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
- chia/_tests/core/test_filter.py +0 -1
- chia/_tests/core/test_full_node_rpc.py +2 -2
- chia/_tests/core/test_merkle_set.py +1 -2
- chia/_tests/core/test_seeder.py +4 -4
- chia/_tests/core/util/test_config.py +4 -4
- chia/_tests/core/util/test_jsonify.py +2 -2
- chia/_tests/core/util/test_keychain.py +3 -3
- chia/_tests/core/util/test_lockfile.py +2 -1
- chia/_tests/core/util/test_log_exceptions.py +1 -2
- chia/_tests/core/util/test_streamable.py +17 -17
- chia/_tests/db/test_db_wrapper.py +3 -2
- chia/_tests/environments/wallet.py +14 -14
- chia/_tests/ether.py +4 -3
- chia/_tests/farmer_harvester/test_farmer.py +41 -24
- chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
- chia/_tests/harvester/test_harvester_api.py +11 -4
- chia/_tests/plot_sync/test_plot_sync.py +13 -11
- chia/_tests/plot_sync/test_receiver.py +11 -10
- chia/_tests/plot_sync/test_sync_simulated.py +2 -2
- chia/_tests/plot_sync/util.py +1 -2
- chia/_tests/plotting/test_plot_manager.py +7 -6
- chia/_tests/plotting/test_prover.py +30 -38
- chia/_tests/pools/test_pool_cmdline.py +4 -6
- chia/_tests/pools/test_pool_rpc.py +203 -61
- chia/_tests/pools/test_pool_wallet.py +3 -3
- chia/_tests/pools/test_wallet_pool_store.py +1 -4
- chia/_tests/process_junit.py +2 -2
- chia/_tests/rpc/test_rpc_client.py +4 -4
- chia/_tests/rpc/test_rpc_server.py +3 -3
- chia/_tests/simulation/test_simulation.py +12 -25
- chia/_tests/solver/test_solver_service.py +13 -4
- chia/_tests/testconfig.py +2 -2
- chia/_tests/timelord/test_new_peak.py +22 -11
- chia/_tests/tools/test_run_block.py +0 -2
- chia/_tests/tools/test_virtual_project.py +2 -1
- chia/_tests/util/benchmarks.py +1 -0
- chia/_tests/util/blockchain.py +38 -36
- chia/_tests/util/blockchain_mock.py +11 -11
- chia/_tests/util/build_network_protocol_files.py +2 -1
- chia/_tests/util/coin_store.py +2 -1
- chia/_tests/util/config.py +1 -1
- chia/_tests/util/db_connection.py +2 -3
- chia/_tests/util/full_sync.py +9 -11
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/get_name_puzzle_conditions.py +2 -0
- chia/_tests/util/misc.py +24 -24
- chia/_tests/util/network_protocol_data.py +20 -3
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +292 -3
- chia/_tests/util/setup_nodes.py +62 -47
- chia/_tests/util/spend_sim.py +57 -57
- chia/_tests/util/test_async_pool.py +2 -3
- chia/_tests/util/test_chia_version.py +1 -3
- chia/_tests/util/test_config.py +3 -3
- chia/_tests/util/test_full_block_utils.py +6 -3
- chia/_tests/util/test_limited_semaphore.py +1 -2
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_network.py +1 -2
- chia/_tests/util/test_priority_mutex.py +3 -3
- chia/_tests/util/test_recursive_replace.py +5 -6
- chia/_tests/util/test_replace_str_to_bytes.py +8 -10
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/time_out_assert.py +2 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
- chia/_tests/wallet/conftest.py +6 -6
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
- chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
- chia/_tests/wallet/did_wallet/test_did.py +16 -6
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
- chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
- chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
- chia/_tests/wallet/test_clvm_streamable.py +2 -3
- chia/_tests/wallet/test_coin_management.py +2 -2
- chia/_tests/wallet/test_conditions.py +45 -51
- chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
- chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
- chia/_tests/wallet/test_notifications.py +14 -14
- chia/_tests/wallet/test_signer_protocol.py +5 -5
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
- chia/_tests/wallet/test_transaction_store.py +20 -20
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +380 -228
- chia/_tests/wallet/test_wallet_action_scope.py +4 -4
- chia/_tests/wallet/test_wallet_blockchain.py +12 -12
- chia/_tests/wallet/test_wallet_coin_store.py +3 -4
- chia/_tests/wallet/test_wallet_node.py +14 -14
- chia/_tests/wallet/test_wallet_test_framework.py +2 -1
- chia/_tests/wallet/test_wallet_utils.py +2 -3
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
- chia/_tests/wallet/wallet_block_tools.py +12 -11
- chia/_tests/weight_proof/config.py +1 -0
- chia/_tests/weight_proof/test_weight_proof.py +5 -4
- chia/apis/__init__.py +21 -0
- chia/apis/farmer_stub.py +102 -0
- chia/apis/full_node_stub.py +372 -0
- chia/apis/harvester_stub.py +57 -0
- chia/apis/introducer_stub.py +35 -0
- chia/apis/solver_stub.py +30 -0
- chia/apis/stub_protocol_registry.py +21 -0
- chia/apis/timelord_stub.py +39 -0
- chia/apis/wallet_stub.py +161 -0
- chia/cmds/beta.py +3 -4
- chia/cmds/beta_funcs.py +4 -3
- chia/cmds/check_wallet_db.py +4 -4
- chia/cmds/chia.py +1 -2
- chia/cmds/cmd_classes.py +11 -13
- chia/cmds/cmd_helpers.py +11 -11
- chia/cmds/cmds_util.py +15 -15
- chia/cmds/coin_funcs.py +6 -7
- chia/cmds/coins.py +2 -3
- chia/cmds/configure.py +1 -2
- chia/cmds/data.py +42 -42
- chia/cmds/data_funcs.py +81 -81
- chia/cmds/db.py +4 -5
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev/data.py +4 -4
- chia/cmds/dev/gh.py +5 -5
- chia/cmds/dev/installers.py +2 -3
- chia/cmds/dev/mempool.py +3 -4
- chia/cmds/dev/mempool_funcs.py +4 -4
- chia/cmds/dev/sim.py +8 -8
- chia/cmds/dump_keyring.py +3 -3
- chia/cmds/farm.py +6 -8
- chia/cmds/farm_funcs.py +25 -24
- chia/cmds/init_funcs.py +4 -4
- chia/cmds/keys.py +16 -18
- chia/cmds/keys_funcs.py +36 -36
- chia/cmds/netspace.py +1 -3
- chia/cmds/netspace_funcs.py +1 -2
- chia/cmds/options.py +3 -2
- chia/cmds/param_types.py +17 -16
- chia/cmds/passphrase.py +6 -7
- chia/cmds/passphrase_funcs.py +11 -13
- chia/cmds/peer.py +1 -3
- chia/cmds/peer_funcs.py +3 -3
- chia/cmds/plotnft.py +6 -7
- chia/cmds/plotnft_funcs.py +37 -26
- chia/cmds/rpc.py +3 -3
- chia/cmds/show.py +3 -5
- chia/cmds/show_funcs.py +9 -9
- chia/cmds/sim_funcs.py +25 -26
- chia/cmds/solver.py +1 -3
- chia/cmds/solver_funcs.py +1 -2
- chia/cmds/start_funcs.py +2 -2
- chia/cmds/wallet.py +76 -81
- chia/cmds/wallet_funcs.py +206 -177
- chia/consensus/augmented_chain.py +6 -6
- chia/consensus/block_body_validation.py +19 -15
- chia/consensus/block_creation.py +25 -21
- chia/consensus/block_header_validation.py +27 -13
- chia/consensus/block_height_map.py +3 -6
- chia/consensus/block_height_map_protocol.py +2 -2
- chia/consensus/block_record.py +2 -4
- chia/consensus/blockchain.py +58 -40
- chia/consensus/blockchain_interface.py +7 -7
- chia/consensus/coin_store_protocol.py +5 -6
- chia/consensus/condition_tools.py +4 -4
- chia/consensus/cost_calculator.py +2 -3
- chia/consensus/default_constants.py +16 -13
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +3 -5
- chia/consensus/find_fork_point.py +2 -4
- chia/consensus/full_block_to_block_record.py +11 -13
- chia/consensus/generator_tools.py +2 -3
- chia/consensus/get_block_challenge.py +42 -26
- chia/consensus/get_block_generator.py +2 -3
- chia/consensus/make_sub_epoch_summary.py +8 -7
- chia/consensus/multiprocess_validation.py +31 -20
- chia/consensus/pos_quality.py +6 -23
- chia/consensus/pot_iterations.py +17 -44
- chia/consensus/signage_point.py +4 -5
- chia/consensus/vdf_info_computation.py +2 -4
- chia/daemon/client.py +8 -8
- chia/daemon/keychain_proxy.py +31 -37
- chia/daemon/server.py +32 -33
- chia/daemon/windows_signal.py +4 -3
- chia/data_layer/data_layer.py +86 -77
- chia/data_layer/data_layer_rpc_api.py +9 -9
- chia/data_layer/data_layer_rpc_client.py +13 -15
- chia/data_layer/data_layer_server.py +3 -3
- chia/data_layer/data_layer_util.py +14 -14
- chia/data_layer/data_layer_wallet.py +94 -101
- chia/data_layer/data_store.py +50 -50
- chia/data_layer/dl_wallet_store.py +9 -12
- chia/data_layer/download_data.py +8 -9
- chia/data_layer/s3_plugin_service.py +5 -9
- chia/data_layer/start_data_layer.py +5 -5
- chia/farmer/farmer.py +31 -31
- chia/farmer/farmer_api.py +45 -33
- chia/farmer/farmer_rpc_api.py +5 -4
- chia/farmer/farmer_rpc_client.py +6 -6
- chia/farmer/start_farmer.py +12 -7
- chia/full_node/block_store.py +13 -16
- chia/full_node/check_fork_next_block.py +1 -2
- chia/full_node/coin_store.py +15 -16
- chia/full_node/eligible_coin_spends.py +3 -3
- chia/full_node/fee_estimate_store.py +2 -3
- chia/full_node/fee_tracker.py +1 -2
- chia/full_node/full_block_utils.py +4 -4
- chia/full_node/full_node.py +238 -224
- chia/full_node/full_node_api.py +193 -150
- chia/full_node/full_node_rpc_api.py +53 -31
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- chia/full_node/hint_management.py +2 -2
- chia/full_node/mempool.py +17 -19
- chia/full_node/mempool_manager.py +89 -42
- chia/full_node/pending_tx_cache.py +2 -3
- chia/full_node/start_full_node.py +5 -5
- chia/full_node/sync_store.py +3 -4
- chia/full_node/tx_processing_queue.py +34 -13
- chia/full_node/weight_proof.py +61 -48
- chia/harvester/harvester.py +25 -24
- chia/harvester/harvester_api.py +61 -38
- chia/harvester/harvester_rpc_api.py +10 -10
- chia/harvester/start_harvester.py +4 -4
- chia/introducer/introducer.py +3 -3
- chia/introducer/introducer_api.py +6 -4
- chia/introducer/start_introducer.py +4 -4
- chia/legacy/keyring.py +3 -3
- chia/plot_sync/delta.py +1 -2
- chia/plot_sync/receiver.py +20 -17
- chia/plot_sync/sender.py +15 -10
- chia/plotters/bladebit.py +7 -7
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +4 -4
- chia/plotters/plotters.py +4 -4
- chia/plotters/plotters_util.py +3 -3
- chia/plotting/cache.py +20 -14
- chia/plotting/check_plots.py +26 -35
- chia/plotting/create_plots.py +22 -23
- chia/plotting/manager.py +21 -14
- chia/plotting/prover.py +59 -42
- chia/plotting/util.py +16 -16
- chia/pools/pool_config.py +2 -1
- chia/pools/pool_puzzles.py +11 -12
- chia/pools/pool_wallet.py +34 -57
- chia/pools/pool_wallet_info.py +39 -10
- chia/protocols/farmer_protocol.py +8 -9
- chia/protocols/fee_estimate.py +3 -4
- chia/protocols/full_node_protocol.py +3 -4
- chia/protocols/harvester_protocol.py +27 -15
- chia/protocols/outbound_message.py +3 -3
- chia/protocols/pool_protocol.py +8 -9
- chia/protocols/shared_protocol.py +1 -2
- chia/protocols/solver_protocol.py +9 -2
- chia/protocols/timelord_protocol.py +4 -7
- chia/protocols/wallet_protocol.py +11 -12
- chia/rpc/rpc_client.py +9 -9
- chia/rpc/rpc_server.py +17 -17
- chia/rpc/util.py +2 -2
- chia/seeder/crawler.py +8 -8
- chia/seeder/crawler_api.py +21 -27
- chia/seeder/crawler_rpc_api.py +2 -2
- chia/seeder/dns_server.py +21 -21
- chia/seeder/start_crawler.py +4 -4
- chia/server/address_manager.py +15 -16
- chia/server/api_protocol.py +11 -11
- chia/server/chia_policy.py +46 -26
- chia/server/introducer_peers.py +2 -3
- chia/server/node_discovery.py +19 -19
- chia/server/rate_limit_numbers.py +4 -5
- chia/server/rate_limits.py +4 -4
- chia/server/resolve_peer_info.py +4 -4
- chia/server/server.py +49 -52
- chia/server/signal_handlers.py +6 -6
- chia/server/start_service.py +17 -17
- chia/server/upnp.py +4 -6
- chia/server/ws_connection.py +52 -37
- chia/simulator/add_blocks_in_batches.py +1 -3
- chia/simulator/block_tools.py +312 -200
- chia/simulator/full_node_simulator.py +56 -35
- chia/simulator/keyring.py +2 -3
- chia/simulator/setup_services.py +16 -15
- chia/simulator/simulator_full_node_rpc_api.py +1 -2
- chia/simulator/simulator_full_node_rpc_client.py +1 -2
- chia/simulator/simulator_protocol.py +1 -2
- chia/simulator/simulator_test_tools.py +3 -3
- chia/simulator/start_simulator.py +7 -7
- chia/simulator/wallet_tools.py +10 -10
- chia/solver/solver.py +10 -10
- chia/solver/solver_api.py +10 -8
- chia/solver/solver_rpc_api.py +2 -2
- chia/solver/start_solver.py +4 -4
- chia/ssl/cacert.pem +148 -90
- chia/ssl/chia_ca.crt +14 -10
- chia/ssl/chia_ca_old.crt +19 -0
- chia/ssl/create_ssl.py +4 -4
- chia/ssl/renewedselfsignedca.conf +4 -0
- chia/ssl/ssl_check.py +1 -2
- chia/timelord/iters_from_block.py +1 -4
- chia/timelord/start_timelord.py +4 -4
- chia/timelord/timelord.py +44 -40
- chia/timelord/timelord_api.py +6 -4
- chia/timelord/timelord_launcher.py +2 -2
- chia/timelord/timelord_rpc_api.py +2 -2
- chia/timelord/timelord_state.py +11 -12
- chia/types/block_protocol.py +1 -3
- chia/types/blockchain_format/coin.py +1 -3
- chia/types/blockchain_format/program.py +11 -8
- chia/types/blockchain_format/proof_of_space.py +123 -76
- chia/types/blockchain_format/tree_hash.py +3 -3
- chia/types/blockchain_format/vdf.py +1 -2
- chia/types/coin_spend.py +3 -3
- chia/types/mempool_item.py +5 -5
- chia/types/mempool_submission_status.py +2 -3
- chia/types/peer_info.py +1 -2
- chia/types/unfinished_header_block.py +3 -4
- chia/types/validation_state.py +1 -2
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +5 -5
- chia/util/bech32m.py +1 -2
- chia/util/beta_metrics.py +2 -2
- chia/util/block_cache.py +4 -4
- chia/util/chia_logging.py +2 -2
- chia/util/chia_version.py +1 -2
- chia/util/config.py +15 -16
- chia/util/db_wrapper.py +26 -27
- chia/util/default_root.py +1 -2
- chia/util/errors.py +3 -3
- chia/util/file_keyring.py +14 -14
- chia/util/files.py +2 -3
- chia/util/hash.py +4 -4
- chia/util/initial-config.yaml +3 -5
- chia/util/inline_executor.py +2 -1
- chia/util/ip_address.py +1 -2
- chia/util/keychain.py +25 -27
- chia/util/keyring_wrapper.py +18 -19
- chia/util/lock.py +3 -4
- chia/util/log_exceptions.py +1 -2
- chia/util/lru_cache.py +2 -2
- chia/util/network.py +6 -6
- chia/util/path.py +2 -3
- chia/util/priority_mutex.py +2 -2
- chia/util/profiler.py +1 -2
- chia/util/safe_cancel_task.py +1 -2
- chia/util/streamable.py +22 -8
- chia/util/task_referencer.py +1 -1
- chia/util/timing.py +3 -3
- chia/util/virtual_project_analysis.py +6 -5
- chia/util/ws_message.py +2 -2
- chia/wallet/cat_wallet/cat_info.py +3 -4
- chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
- chia/wallet/cat_wallet/cat_utils.py +3 -4
- chia/wallet/cat_wallet/cat_wallet.py +61 -83
- chia/wallet/cat_wallet/lineage_store.py +3 -4
- chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
- chia/wallet/coin_selection.py +9 -10
- chia/wallet/conditions.py +120 -105
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
- chia/wallet/derivation_record.py +1 -2
- chia/wallet/derive_keys.py +2 -4
- chia/wallet/did_wallet/did_info.py +10 -11
- chia/wallet/did_wallet/did_wallet.py +36 -82
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
- chia/wallet/driver_protocol.py +5 -7
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
- chia/wallet/nft_wallet/nft_info.py +8 -9
- chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
- chia/wallet/nft_wallet/nft_wallet.py +79 -116
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
- chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
- chia/wallet/nft_wallet/uncurry_nft.py +10 -11
- chia/wallet/notification_manager.py +3 -3
- chia/wallet/notification_store.py +44 -61
- chia/wallet/outer_puzzles.py +6 -7
- chia/wallet/puzzle_drivers.py +34 -6
- chia/wallet/puzzles/clawback/drivers.py +6 -6
- chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
- chia/wallet/puzzles/load_clvm.py +1 -1
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
- chia/wallet/puzzles/singleton_top_layer.py +2 -3
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
- chia/wallet/puzzles/tails.py +3 -3
- chia/wallet/singleton.py +5 -7
- chia/wallet/singleton_record.py +3 -3
- chia/wallet/start_wallet.py +5 -5
- chia/wallet/trade_manager.py +37 -58
- chia/wallet/trade_record.py +4 -4
- chia/wallet/trading/offer.py +59 -46
- chia/wallet/trading/trade_store.py +8 -9
- chia/wallet/transaction_record.py +8 -8
- chia/wallet/uncurried_puzzle.py +1 -2
- chia/wallet/util/clvm_streamable.py +12 -12
- chia/wallet/util/compute_hints.py +4 -5
- chia/wallet/util/curry_and_treehash.py +1 -2
- chia/wallet/util/merkle_tree.py +2 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/wallet/util/signing.py +85 -0
- chia/wallet/util/tx_config.py +15 -6
- chia/wallet/util/wallet_sync_utils.py +14 -16
- chia/wallet/util/wallet_types.py +2 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
- chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
- chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
- chia/wallet/vc_wallet/vc_drivers.py +27 -27
- chia/wallet/vc_wallet/vc_store.py +5 -6
- chia/wallet/vc_wallet/vc_wallet.py +33 -61
- chia/wallet/wallet.py +50 -78
- chia/wallet/wallet_action_scope.py +11 -11
- chia/wallet/wallet_blockchain.py +12 -12
- chia/wallet/wallet_coin_record.py +12 -6
- chia/wallet/wallet_coin_store.py +24 -25
- chia/wallet/wallet_interested_store.py +3 -5
- chia/wallet/wallet_nft_store.py +10 -11
- chia/wallet/wallet_node.py +53 -61
- chia/wallet/wallet_node_api.py +5 -3
- chia/wallet/wallet_protocol.py +23 -23
- chia/wallet/wallet_puzzle_store.py +15 -18
- chia/wallet/wallet_request_types.py +778 -114
- chia/wallet/wallet_retry_store.py +1 -3
- chia/wallet/wallet_rpc_api.py +572 -909
- chia/wallet/wallet_rpc_client.py +87 -279
- chia/wallet/wallet_singleton_store.py +3 -4
- chia/wallet/wallet_state_manager.py +332 -106
- chia/wallet/wallet_transaction_store.py +11 -14
- chia/wallet/wallet_user_store.py +4 -6
- chia/wallet/wallet_weight_proof_handler.py +4 -4
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
- chia/apis.py +0 -21
- chia/consensus/check_time_locks.py +0 -57
- chia/data_layer/puzzles/__init__.py +0 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
- chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
- chia/types/coin_record.py +0 -44
- chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
|
@@ -7,7 +7,7 @@ import dataclasses
|
|
|
7
7
|
import json
|
|
8
8
|
import logging
|
|
9
9
|
from os.path import dirname
|
|
10
|
-
from typing import
|
|
10
|
+
from typing import cast
|
|
11
11
|
|
|
12
12
|
import pytest
|
|
13
13
|
from chia_rs import (
|
|
@@ -52,7 +52,7 @@ from chia.types.validation_state import ValidationState
|
|
|
52
52
|
from chia.util.bech32m import decode_puzzle_hash
|
|
53
53
|
from chia.util.hash import std_hash
|
|
54
54
|
|
|
55
|
-
SPType =
|
|
55
|
+
SPType = timelord_protocol.NewEndOfSubSlotVDF | timelord_protocol.NewSignagePointVDF
|
|
56
56
|
SPList = list[SPType]
|
|
57
57
|
|
|
58
58
|
|
|
@@ -61,8 +61,8 @@ async def test_harvester_receive_source_signing_data(
|
|
|
61
61
|
farmer_harvester_2_simulators_zero_bits_plot_filter: tuple[
|
|
62
62
|
FarmerService,
|
|
63
63
|
HarvesterService,
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
FullNodeService | SimulatorFullNodeService,
|
|
65
|
+
FullNodeService | SimulatorFullNodeService,
|
|
66
66
|
BlockTools,
|
|
67
67
|
],
|
|
68
68
|
) -> None:
|
|
@@ -121,12 +121,12 @@ async def test_harvester_receive_source_signing_data(
|
|
|
121
121
|
|
|
122
122
|
async def intercept_harvester_request_signatures(
|
|
123
123
|
self: HarvesterAPI, request: harvester_protocol.RequestSignatures
|
|
124
|
-
) ->
|
|
124
|
+
) -> Message | None:
|
|
125
125
|
nonlocal harvester
|
|
126
126
|
nonlocal farmer_reward_address
|
|
127
127
|
|
|
128
128
|
validate_harvester_request_signatures(request)
|
|
129
|
-
result_msg:
|
|
129
|
+
result_msg: Message | None = await HarvesterAPI.request_signatures(
|
|
130
130
|
cast(HarvesterAPI, harvester.server.api), request
|
|
131
131
|
)
|
|
132
132
|
assert result_msg is not None
|
|
@@ -158,15 +158,14 @@ async def test_harvester_receive_source_signing_data(
|
|
|
158
158
|
assert hash
|
|
159
159
|
assert src
|
|
160
160
|
|
|
161
|
-
data:
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
] = None
|
|
161
|
+
data: (
|
|
162
|
+
FoliageBlockData
|
|
163
|
+
| FoliageTransactionBlock
|
|
164
|
+
| ClassgroupElement
|
|
165
|
+
| ChallengeChainSubSlot
|
|
166
|
+
| RewardChainSubSlot
|
|
167
|
+
| None
|
|
168
|
+
) = None
|
|
170
169
|
if src.kind == uint8(SigningDataKind.FOLIAGE_BLOCK_DATA):
|
|
171
170
|
data = FoliageBlockData.from_bytes(src.data)
|
|
172
171
|
assert (
|
|
@@ -227,7 +226,7 @@ async def test_harvester_receive_source_signing_data(
|
|
|
227
226
|
|
|
228
227
|
async def intercept_farmer_request_signed_values(
|
|
229
228
|
self: FarmerAPI, request: farmer_protocol.RequestSignedValues
|
|
230
|
-
) ->
|
|
229
|
+
) -> Message | None:
|
|
231
230
|
nonlocal farmer
|
|
232
231
|
nonlocal farmer_reward_address
|
|
233
232
|
nonlocal full_node_2
|
|
@@ -284,8 +283,8 @@ async def test_harvester_fee_convention(
|
|
|
284
283
|
farmer_harvester_2_simulators_zero_bits_plot_filter: tuple[
|
|
285
284
|
FarmerService,
|
|
286
285
|
HarvesterService,
|
|
287
|
-
|
|
288
|
-
|
|
286
|
+
FullNodeService | SimulatorFullNodeService,
|
|
287
|
+
FullNodeService | SimulatorFullNodeService,
|
|
289
288
|
BlockTools,
|
|
290
289
|
],
|
|
291
290
|
caplog: pytest.LogCaptureFixture,
|
|
@@ -314,8 +313,8 @@ async def test_harvester_fee_invalid_convention(
|
|
|
314
313
|
farmer_harvester_2_simulators_zero_bits_plot_filter: tuple[
|
|
315
314
|
FarmerService,
|
|
316
315
|
HarvesterService,
|
|
317
|
-
|
|
318
|
-
|
|
316
|
+
FullNodeService | SimulatorFullNodeService,
|
|
317
|
+
FullNodeService | SimulatorFullNodeService,
|
|
319
318
|
BlockTools,
|
|
320
319
|
],
|
|
321
320
|
caplog: pytest.LogCaptureFixture,
|
|
@@ -437,7 +436,7 @@ def node_type_connected(server: ChiaServer, node_type: NodeType) -> bool:
|
|
|
437
436
|
|
|
438
437
|
def decode_sp(
|
|
439
438
|
is_sub_slot: bool, sp64: str
|
|
440
|
-
) ->
|
|
439
|
+
) -> timelord_protocol.NewEndOfSubSlotVDF | timelord_protocol.NewSignagePointVDF:
|
|
441
440
|
sp_bytes = base64.b64decode(sp64)
|
|
442
441
|
if is_sub_slot:
|
|
443
442
|
return timelord_protocol.NewEndOfSubSlotVDF.from_bytes(sp_bytes)
|
|
@@ -496,7 +495,7 @@ async def inject_signage_points(signage_points: SPList, full_node_1: FullNode, f
|
|
|
496
495
|
api2 = cast(FullNodeAPI, full_node_2.server.api)
|
|
497
496
|
|
|
498
497
|
for i, sp in enumerate(signage_points):
|
|
499
|
-
req:
|
|
498
|
+
req: full_node_protocol.RespondEndOfSubSlot | full_node_protocol.RespondSignagePoint
|
|
500
499
|
|
|
501
500
|
if isinstance(sp, timelord_protocol.NewEndOfSubSlotVDF):
|
|
502
501
|
full_node_1.log.info(f"Injecting SP for end of sub-slot @ {i}")
|
|
@@ -214,28 +214,28 @@ def test_current_block_height_new_block_then_new_height() -> None:
|
|
|
214
214
|
|
|
215
215
|
@pytest.mark.anyio
|
|
216
216
|
async def test_mm_new_peak_changes_fee_estimator_block_height() -> None:
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
217
|
+
async with instantiate_mempool_manager(zero_calls_get_coin_records) as mempool_manager:
|
|
218
|
+
block2 = create_test_block_record(height=uint32(2))
|
|
219
|
+
await mempool_manager.new_peak(block2, None)
|
|
220
|
+
assert mempool_manager.mempool.fee_estimator.block_height == uint32(2) # type: ignore[attr-defined]
|
|
221
221
|
|
|
222
222
|
|
|
223
223
|
@pytest.mark.anyio
|
|
224
224
|
async def test_mm_calls_new_block_height() -> None:
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
225
|
+
async with instantiate_mempool_manager(zero_calls_get_coin_records) as mempool_manager:
|
|
226
|
+
new_block_height_called = False
|
|
227
|
+
|
|
228
|
+
def test_new_block_height_called(self: FeeEstimatorInterface, height: uint32) -> None:
|
|
229
|
+
nonlocal new_block_height_called
|
|
230
|
+
new_block_height_called = True
|
|
231
|
+
|
|
232
|
+
# Replace new_block_height with test function
|
|
233
|
+
mempool_manager.fee_estimator.new_block_height = types.MethodType( # type: ignore[method-assign]
|
|
234
|
+
test_new_block_height_called, mempool_manager.fee_estimator
|
|
235
|
+
)
|
|
236
|
+
block2 = create_test_block_record(height=uint32(2))
|
|
237
|
+
await mempool_manager.new_peak(block2, None)
|
|
238
|
+
assert new_block_height_called
|
|
239
239
|
|
|
240
240
|
|
|
241
241
|
def test_add_tx_called() -> None:
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import re
|
|
4
|
+
from collections.abc import AsyncGenerator
|
|
4
5
|
from typing import Any
|
|
5
6
|
|
|
6
7
|
import pytest
|
|
@@ -23,28 +24,29 @@ from chia.wallet.wallet_service import WalletService
|
|
|
23
24
|
@pytest.fixture(scope="function")
|
|
24
25
|
async def setup_node_and_rpc(
|
|
25
26
|
two_wallet_nodes_services: tuple[list[SimulatorFullNodeService], list[WalletService], BlockTools],
|
|
26
|
-
) -> tuple[FullNodeRpcClient, FullNodeRpcApi]:
|
|
27
|
+
) -> AsyncGenerator[tuple[FullNodeRpcClient, FullNodeRpcApi], None]:
|
|
27
28
|
full_nodes, wallets, bt = two_wallet_nodes_services
|
|
28
29
|
wallet = wallets[0]._node.wallet_state_manager.main_wallet
|
|
29
30
|
full_node_apis = [full_node_service._api for full_node_service in full_nodes]
|
|
30
31
|
full_node_api: FullNodeSimulator = full_node_apis[0]
|
|
31
32
|
full_node_service_1 = full_nodes[0]
|
|
32
33
|
assert full_node_service_1.rpc_server is not None
|
|
33
|
-
|
|
34
|
+
|
|
35
|
+
async with FullNodeRpcClient.create_as_context(
|
|
34
36
|
bt.config["self_hostname"],
|
|
35
37
|
full_node_service_1.rpc_server.listen_port,
|
|
36
38
|
full_node_service_1.root_path,
|
|
37
39
|
full_node_service_1.config,
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
+
) as client:
|
|
41
|
+
full_node_rpc_api = FullNodeRpcApi(full_node_api.full_node)
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
44
|
+
ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
43
45
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
+
for i in range(4):
|
|
47
|
+
await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
|
|
46
48
|
|
|
47
|
-
|
|
49
|
+
yield client, full_node_rpc_api
|
|
48
50
|
|
|
49
51
|
|
|
50
52
|
@pytest.fixture(scope="function")
|
|
@@ -15,6 +15,7 @@ from chia._tests.conftest import HarvesterFarmerEnvironment
|
|
|
15
15
|
from chia._tests.plotting.util import get_test_plots
|
|
16
16
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
17
17
|
from chia.harvester.harvester_api import HarvesterAPI
|
|
18
|
+
from chia.plotting.prover import V1Prover, V2Prover
|
|
18
19
|
from chia.plotting.util import PlotInfo
|
|
19
20
|
from chia.protocols import harvester_protocol
|
|
20
21
|
from chia.protocols.harvester_protocol import PoolDifficulty
|
|
@@ -85,10 +86,16 @@ def create_test_setup(
|
|
|
85
86
|
|
|
86
87
|
@contextmanager
|
|
87
88
|
def mock_successful_proof(plot_info: PlotInfo) -> Iterator[None]:
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
if isinstance(plot_info.prover, V1Prover):
|
|
90
|
+
with patch.object(plot_info.prover, "get_full_proof") as mock_get_proof:
|
|
91
|
+
mock_proof = MagicMock(spec=ProofOfSpace)
|
|
92
|
+
mock_get_proof.return_value = mock_proof, None
|
|
93
|
+
yield
|
|
94
|
+
elif isinstance(plot_info.prover, V2Prover):
|
|
95
|
+
with patch.object(plot_info.prover, "get_partial_proof") as mock_get_proof:
|
|
96
|
+
mock_proof = MagicMock(spec=ProofOfSpace)
|
|
97
|
+
mock_get_proof.return_value = [uint64(1)] * 64, None
|
|
98
|
+
yield
|
|
92
99
|
|
|
93
100
|
|
|
94
101
|
def assert_farming_info_sent(mock_peer: MagicMock) -> None:
|
|
@@ -3,14 +3,14 @@ from __future__ import annotations
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import contextlib
|
|
5
5
|
import functools
|
|
6
|
-
from collections.abc import AsyncIterator
|
|
6
|
+
from collections.abc import AsyncIterator, Callable
|
|
7
7
|
from dataclasses import dataclass, field, replace
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
from shutil import copy
|
|
10
|
-
from typing import Any
|
|
10
|
+
from typing import Any
|
|
11
11
|
|
|
12
12
|
import pytest
|
|
13
|
-
from chia_rs import G1Element
|
|
13
|
+
from chia_rs import G1Element, PlotParam
|
|
14
14
|
from chia_rs.sized_bytes import bytes32
|
|
15
15
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
16
16
|
|
|
@@ -109,6 +109,10 @@ class ExpectedResult:
|
|
|
109
109
|
self.duplicates_delta.removals += [str(x) for x in list_paths]
|
|
110
110
|
|
|
111
111
|
|
|
112
|
+
def equal_param(a: PlotParam, b: PlotParam) -> bool:
|
|
113
|
+
return a.size_v1 == b.size_v1 and a.strength_v2 == b.strength_v2
|
|
114
|
+
|
|
115
|
+
|
|
112
116
|
@dataclass
|
|
113
117
|
class Environment:
|
|
114
118
|
root_path: Path
|
|
@@ -127,7 +131,7 @@ class Environment:
|
|
|
127
131
|
split_farmer_service_manager: SplitAsyncManager[FarmerService]
|
|
128
132
|
split_harvester_managers: list[SplitAsyncManager[Harvester]]
|
|
129
133
|
|
|
130
|
-
def get_harvester(self, peer_id: bytes32) ->
|
|
134
|
+
def get_harvester(self, peer_id: bytes32) -> Harvester | None:
|
|
131
135
|
for harvester in self.harvesters:
|
|
132
136
|
assert harvester.server is not None
|
|
133
137
|
if harvester.server.node_id == peer_id:
|
|
@@ -183,10 +187,10 @@ class Environment:
|
|
|
183
187
|
self.remove_directory(harvester_index, self.dir_invalid, State.invalid)
|
|
184
188
|
self.remove_directory(harvester_index, self.dir_duplicates, State.duplicates)
|
|
185
189
|
|
|
186
|
-
async def plot_sync_callback(self, peer_id: bytes32, delta:
|
|
190
|
+
async def plot_sync_callback(self, peer_id: bytes32, delta: Delta | None) -> None:
|
|
187
191
|
if delta is None:
|
|
188
192
|
return
|
|
189
|
-
harvester:
|
|
193
|
+
harvester: Harvester | None = self.get_harvester(peer_id)
|
|
190
194
|
assert harvester is not None
|
|
191
195
|
expected = self.expected[self.harvesters.index(harvester)]
|
|
192
196
|
assert len(expected.valid_delta.additions) == len(delta.valid.additions)
|
|
@@ -195,8 +199,7 @@ class Environment:
|
|
|
195
199
|
plot = harvester.plot_manager.plots.get(Path(path), None)
|
|
196
200
|
assert plot is not None
|
|
197
201
|
assert plot.prover.get_filename() == delta.valid.additions[path].filename
|
|
198
|
-
|
|
199
|
-
assert plot.prover.get_size().size_v1 == delta.valid.additions[path].size
|
|
202
|
+
assert equal_param(plot.prover.get_param(), delta.valid.additions[path].param())
|
|
200
203
|
assert plot.prover.get_id() == delta.valid.additions[path].plot_id
|
|
201
204
|
assert plot.prover.get_compression_level() == delta.valid.additions[path].compression_level
|
|
202
205
|
assert plot.pool_public_key == delta.valid.additions[path].pool_public_key
|
|
@@ -257,8 +260,7 @@ class Environment:
|
|
|
257
260
|
for path, plot_info in plot_manager.plots.items():
|
|
258
261
|
assert str(path) in receiver.plots()
|
|
259
262
|
assert plot_info.prover.get_filename() == receiver.plots()[str(path)].filename
|
|
260
|
-
|
|
261
|
-
assert plot_info.prover.get_size().size_v1 == receiver.plots()[str(path)].size
|
|
263
|
+
assert equal_param(plot_info.prover.get_param(), receiver.plots()[str(path)].param())
|
|
262
264
|
assert plot_info.prover.get_id() == receiver.plots()[str(path)].plot_id
|
|
263
265
|
assert plot_info.prover.get_compression_level() == receiver.plots()[str(path)].compression_level
|
|
264
266
|
assert plot_info.pool_public_key == receiver.plots()[str(path)].pool_public_key
|
|
@@ -431,7 +433,7 @@ async def test_sync_keys_missing(environment: Environment) -> None:
|
|
|
431
433
|
# Run again two times to make sure we still get the same results in repeated refresh intervals
|
|
432
434
|
await env.run_sync_test()
|
|
433
435
|
await env.run_sync_test()
|
|
434
|
-
# Drop all but 2 plots with missing keys and test sync
|
|
436
|
+
# Drop all but 2 plots with missing keys and test sync in between
|
|
435
437
|
assert len(env.dir_keys_missing) > 2
|
|
436
438
|
for _ in range(len(env.dir_keys_missing) - 2):
|
|
437
439
|
drop_plot = env.dir_keys_missing.path_list()[0]
|
|
@@ -4,14 +4,16 @@ import dataclasses
|
|
|
4
4
|
import logging
|
|
5
5
|
import random
|
|
6
6
|
import time
|
|
7
|
-
from
|
|
7
|
+
from collections.abc import Callable
|
|
8
|
+
from typing import Any
|
|
8
9
|
|
|
9
10
|
import pytest
|
|
10
|
-
from chia_rs import G1Element
|
|
11
|
+
from chia_rs import G1Element
|
|
11
12
|
from chia_rs.sized_bytes import bytes32
|
|
12
13
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
13
14
|
|
|
14
15
|
from chia._tests.plot_sync.util import get_dummy_connection
|
|
16
|
+
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
15
17
|
from chia.consensus.pos_quality import UI_ACTUAL_SPACE_CONSTANT_FACTOR, _expected_plot_size
|
|
16
18
|
from chia.plot_sync.delta import Delta
|
|
17
19
|
from chia.plot_sync.receiver import Receiver, Sync, get_list_or_len
|
|
@@ -89,7 +91,7 @@ def assert_error_response(plot_sync: Receiver, error_code: ErrorCodes) -> None:
|
|
|
89
91
|
assert response.error.code == error_code.value
|
|
90
92
|
|
|
91
93
|
|
|
92
|
-
def pre_function_validate(receiver: Receiver, data:
|
|
94
|
+
def pre_function_validate(receiver: Receiver, data: list[Plot] | list[str], expected_state: State) -> None:
|
|
93
95
|
if expected_state == State.loaded:
|
|
94
96
|
for plot_info in data:
|
|
95
97
|
assert type(plot_info) is Plot
|
|
@@ -108,7 +110,7 @@ def pre_function_validate(receiver: Receiver, data: Union[list[Plot], list[str]]
|
|
|
108
110
|
assert path not in receiver.duplicates()
|
|
109
111
|
|
|
110
112
|
|
|
111
|
-
def post_function_validate(receiver: Receiver, data:
|
|
113
|
+
def post_function_validate(receiver: Receiver, data: list[Plot] | list[str], expected_state: State) -> None:
|
|
112
114
|
if expected_state == State.loaded:
|
|
113
115
|
for plot_info in data:
|
|
114
116
|
assert type(plot_info) is Plot
|
|
@@ -163,7 +165,7 @@ async def run_sync_step(receiver: Receiver, sync_step: SyncStepData) -> None:
|
|
|
163
165
|
|
|
164
166
|
def plot_sync_setup(seeded_random: random.Random) -> tuple[Receiver, list[SyncStepData]]:
|
|
165
167
|
harvester_connection = get_dummy_connection(NodeType.HARVESTER, bytes32.random(seeded_random))
|
|
166
|
-
receiver = Receiver(harvester_connection, dummy_callback) # type:ignore[arg-type]
|
|
168
|
+
receiver = Receiver(harvester_connection, dummy_callback, DEFAULT_CONSTANTS) # type:ignore[arg-type]
|
|
167
169
|
|
|
168
170
|
# Create example plot data
|
|
169
171
|
path_list = [str(x) for x in range(40)]
|
|
@@ -188,7 +190,7 @@ def plot_sync_setup(seeded_random: random.Random) -> tuple[Receiver, list[SyncSt
|
|
|
188
190
|
# TODO: todo_v2_plots support v2 plots
|
|
189
191
|
receiver._total_effective_plot_size = int(
|
|
190
192
|
sum(
|
|
191
|
-
UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(
|
|
193
|
+
UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(plot.param(), DEFAULT_CONSTANTS))
|
|
192
194
|
for plot in receiver.plots().values()
|
|
193
195
|
)
|
|
194
196
|
)
|
|
@@ -221,6 +223,7 @@ def test_default_values(seeded_random: random.Random) -> None:
|
|
|
221
223
|
bytes32.random(seeded_random),
|
|
222
224
|
), # type:ignore[arg-type]
|
|
223
225
|
dummy_callback, # type:ignore[arg-type]
|
|
226
|
+
DEFAULT_CONSTANTS,
|
|
224
227
|
)
|
|
225
228
|
)
|
|
226
229
|
|
|
@@ -270,9 +273,8 @@ async def test_to_dict(counts_only: bool, seeded_random: random.Random) -> None:
|
|
|
270
273
|
assert get_list_or_len(plot_sync_dict_1["duplicates"], not counts_only) == 0
|
|
271
274
|
assert plot_sync_dict_1["total_plot_size"] == sum(plot.file_size for plot in receiver.plots().values())
|
|
272
275
|
assert plot_sync_dict_1["total_effective_plot_size"] == int(
|
|
273
|
-
# TODO: todo_v2_plots support v2 plots
|
|
274
276
|
sum(
|
|
275
|
-
UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(
|
|
277
|
+
UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(plot.param(), DEFAULT_CONSTANTS))
|
|
276
278
|
for plot in receiver.plots().values()
|
|
277
279
|
)
|
|
278
280
|
)
|
|
@@ -320,10 +322,9 @@ async def test_to_dict(counts_only: bool, seeded_random: random.Random) -> None:
|
|
|
320
322
|
assert get_list_or_len(sync_steps[State.duplicates].args[0], counts_only) == plot_sync_dict_3["duplicates"]
|
|
321
323
|
|
|
322
324
|
assert plot_sync_dict_3["total_plot_size"] == sum(plot.file_size for plot in receiver.plots().values())
|
|
323
|
-
# TODO: todo_v2_plots support v2 plots
|
|
324
325
|
assert plot_sync_dict_3["total_effective_plot_size"] == int(
|
|
325
326
|
sum(
|
|
326
|
-
UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(
|
|
327
|
+
UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(plot.param(), DEFAULT_CONSTANTS))
|
|
327
328
|
for plot in receiver.plots().values()
|
|
328
329
|
)
|
|
329
330
|
)
|
|
@@ -10,7 +10,7 @@ from collections.abc import AsyncIterator
|
|
|
10
10
|
from dataclasses import dataclass, field
|
|
11
11
|
from enum import Enum
|
|
12
12
|
from pathlib import Path
|
|
13
|
-
from typing import Any
|
|
13
|
+
from typing import Any
|
|
14
14
|
|
|
15
15
|
import pytest
|
|
16
16
|
from chia_rs import G1Element
|
|
@@ -102,7 +102,7 @@ class TestData:
|
|
|
102
102
|
batch_size = self.harvester.plot_manager.refresh_parameter.batch_size
|
|
103
103
|
|
|
104
104
|
# Used to capture the sync id in `run_internal`
|
|
105
|
-
sync_id:
|
|
105
|
+
sync_id: uint64 | None = None
|
|
106
106
|
|
|
107
107
|
def run_internal() -> None:
|
|
108
108
|
nonlocal sync_id
|
chia/_tests/plot_sync/util.py
CHANGED
|
@@ -4,7 +4,6 @@ import contextlib
|
|
|
4
4
|
import time
|
|
5
5
|
from collections.abc import AsyncIterator
|
|
6
6
|
from dataclasses import dataclass
|
|
7
|
-
from typing import Optional
|
|
8
7
|
|
|
9
8
|
from chia_rs.sized_bytes import bytes32
|
|
10
9
|
from chia_rs.sized_ints import uint16, uint64
|
|
@@ -25,7 +24,7 @@ class WSChiaConnectionDummy:
|
|
|
25
24
|
connection_type: NodeType
|
|
26
25
|
peer_node_id: bytes32
|
|
27
26
|
peer_info: PeerInfo = PeerInfo("127.0.0.1", uint16(0))
|
|
28
|
-
last_sent_message:
|
|
27
|
+
last_sent_message: Message | None = None
|
|
29
28
|
|
|
30
29
|
async def send_message(self, message: Message) -> None:
|
|
31
30
|
self.last_sent_message = message
|
|
@@ -3,12 +3,12 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
import sys
|
|
5
5
|
import time
|
|
6
|
-
from collections.abc import Iterator
|
|
6
|
+
from collections.abc import Callable, Iterator
|
|
7
7
|
from dataclasses import dataclass, replace
|
|
8
8
|
from os import unlink
|
|
9
9
|
from pathlib import Path
|
|
10
10
|
from shutil import copy, move
|
|
11
|
-
from typing import
|
|
11
|
+
from typing import cast
|
|
12
12
|
|
|
13
13
|
import pytest
|
|
14
14
|
from chia_rs import G1Element
|
|
@@ -18,6 +18,7 @@ from chiapos import DiskProver
|
|
|
18
18
|
from chia._tests.plotting.util import get_test_plots
|
|
19
19
|
from chia._tests.util.misc import boolean_datacases
|
|
20
20
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
21
|
+
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
21
22
|
from chia.plotting.cache import CURRENT_VERSION, CacheDataV1
|
|
22
23
|
from chia.plotting.manager import Cache, PlotManager
|
|
23
24
|
from chia.plotting.prover import V1Prover
|
|
@@ -90,7 +91,7 @@ class PlotRefreshTester:
|
|
|
90
91
|
expected_result_matched: bool
|
|
91
92
|
|
|
92
93
|
def __init__(self, root_path: Path):
|
|
93
|
-
self.plot_manager = PlotManager(root_path, self.refresh_callback)
|
|
94
|
+
self.plot_manager = PlotManager(root_path, self.refresh_callback, DEFAULT_CONSTANTS)
|
|
94
95
|
# Set a very high refresh interval here to avoid unintentional refresh cycles
|
|
95
96
|
self.plot_manager.refresh_parameter = replace(
|
|
96
97
|
self.plot_manager.refresh_parameter, interval_seconds=uint32(10000)
|
|
@@ -508,8 +509,8 @@ async def test_plot_info_caching(environment, bt):
|
|
|
508
509
|
assert plot_manager.plots[path].prover.get_filename() == plot_info.prover.get_filename()
|
|
509
510
|
assert plot_manager.plots[path].prover.get_id() == plot_info.prover.get_id()
|
|
510
511
|
assert plot_manager.plots[path].prover.get_memo() == plot_info.prover.get_memo()
|
|
511
|
-
assert plot_manager.plots[path].prover.
|
|
512
|
-
assert plot_manager.plots[path].prover.
|
|
512
|
+
assert plot_manager.plots[path].prover.get_param().size_v1 == plot_info.prover.get_param().size_v1
|
|
513
|
+
assert plot_manager.plots[path].prover.get_param().strength_v2 == plot_info.prover.get_param().strength_v2
|
|
513
514
|
assert plot_manager.plots[path].prover.get_compression_level() == plot_info.prover.get_compression_level()
|
|
514
515
|
assert plot_manager.plots[path].pool_public_key == plot_info.pool_public_key
|
|
515
516
|
assert plot_manager.plots[path].pool_contract_puzzle_hash == plot_info.pool_contract_puzzle_hash
|
|
@@ -663,7 +664,7 @@ async def test_cache_lifetime(environment: Environment) -> None:
|
|
|
663
664
|
)
|
|
664
665
|
@pytest.mark.anyio
|
|
665
666
|
async def test_callback_event_raises(environment, event_to_raise: PlotRefreshEvents):
|
|
666
|
-
last_event_fired:
|
|
667
|
+
last_event_fired: PlotRefreshEvents | None = None
|
|
667
668
|
|
|
668
669
|
def raising_callback(event: PlotRefreshEvents, _: PlotRefreshResult):
|
|
669
670
|
nonlocal last_event_fired
|
|
@@ -12,44 +12,57 @@ from chia.plotting.prover import PlotVersion, V1Prover, V2Prover, get_prover_fro
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class TestProver:
|
|
15
|
+
def test_get_prover_from_file_with_plot1_still_works(self) -> None:
|
|
16
|
+
with tempfile.NamedTemporaryFile(suffix=".plot", delete=False) as f:
|
|
17
|
+
temp_path = f.name
|
|
18
|
+
try:
|
|
19
|
+
with pytest.raises(Exception) as exc_info:
|
|
20
|
+
get_prover_from_file(temp_path)
|
|
21
|
+
assert not isinstance(exc_info.value, NotImplementedError)
|
|
22
|
+
finally:
|
|
23
|
+
Path(temp_path).unlink()
|
|
24
|
+
|
|
25
|
+
def test_unsupported_file_extension_raises_value_error(self) -> None:
|
|
26
|
+
with pytest.raises(ValueError, match="Unsupported plot file"):
|
|
27
|
+
get_prover_from_file("/nonexistent/path/test.txt")
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# TODO: todo_v2_plots enable these tests once we have test plots we can load
|
|
31
|
+
@pytest.mark.skip("we don't have v2 test plots yet")
|
|
32
|
+
class TestV2Prover:
|
|
15
33
|
def test_v2_prover_init_with_nonexistent_file(self) -> None:
|
|
16
|
-
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
34
|
+
prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
|
|
17
35
|
assert prover.get_version() == PlotVersion.V2
|
|
18
36
|
assert prover.get_filename() == "/nonexistent/path/test.plot2"
|
|
19
37
|
|
|
20
|
-
def
|
|
21
|
-
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
38
|
+
def test_v2_prover_get_param_raises_error(self) -> None:
|
|
39
|
+
prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
|
|
22
40
|
with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
|
|
23
|
-
prover.
|
|
41
|
+
prover.get_param()
|
|
24
42
|
|
|
25
43
|
def test_v2_prover_get_memo_raises_error(self) -> None:
|
|
26
|
-
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
44
|
+
prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
|
|
27
45
|
with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
|
|
28
46
|
prover.get_memo()
|
|
29
47
|
|
|
30
48
|
def test_v2_prover_get_compression_level(self) -> None:
|
|
31
|
-
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
49
|
+
prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
|
|
32
50
|
assert prover.get_compression_level() == uint8(0)
|
|
33
51
|
|
|
34
52
|
def test_v2_prover_get_id_raises_error(self) -> None:
|
|
35
|
-
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
53
|
+
prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
|
|
36
54
|
with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
|
|
37
55
|
prover.get_id()
|
|
38
56
|
|
|
39
57
|
def test_v2_prover_get_qualities_for_challenge_raises_error(self) -> None:
|
|
40
|
-
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
58
|
+
prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
|
|
41
59
|
with pytest.raises(
|
|
42
60
|
AssertionError, match="V2 plot format does not support qualities directly, use partial proofs"
|
|
43
61
|
):
|
|
44
|
-
prover.get_qualities_for_challenge(bytes32(b"1" * 32))
|
|
45
|
-
|
|
46
|
-
def test_v2_prover_get_full_proof_raises_error(self) -> None:
|
|
47
|
-
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
48
|
-
with pytest.raises(AssertionError, match="V2 plot format require solver to get full proof"):
|
|
49
|
-
prover.get_full_proof(bytes32(b"1" * 32), 0)
|
|
62
|
+
prover.get_qualities_for_challenge(bytes32(b"1" * 32), uint8(5))
|
|
50
63
|
|
|
51
64
|
def test_v2_prover_bytes_raises_error(self) -> None:
|
|
52
|
-
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
65
|
+
prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
|
|
53
66
|
with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
|
|
54
67
|
bytes(prover)
|
|
55
68
|
|
|
@@ -61,21 +74,7 @@ class TestProver:
|
|
|
61
74
|
prover = get_prover_from_file("/nonexistent/path/test.plot2")
|
|
62
75
|
assert prover.get_version() == PlotVersion.V2
|
|
63
76
|
with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
|
|
64
|
-
prover.
|
|
65
|
-
|
|
66
|
-
def test_get_prover_from_file_with_plot1_still_works(self) -> None:
|
|
67
|
-
with tempfile.NamedTemporaryFile(suffix=".plot", delete=False) as f:
|
|
68
|
-
temp_path = f.name
|
|
69
|
-
try:
|
|
70
|
-
with pytest.raises(Exception) as exc_info:
|
|
71
|
-
get_prover_from_file(temp_path)
|
|
72
|
-
assert not isinstance(exc_info.value, NotImplementedError)
|
|
73
|
-
finally:
|
|
74
|
-
Path(temp_path).unlink()
|
|
75
|
-
|
|
76
|
-
def test_unsupported_file_extension_raises_value_error(self) -> None:
|
|
77
|
-
with pytest.raises(ValueError, match="Unsupported plot file"):
|
|
78
|
-
get_prover_from_file("/nonexistent/path/test.txt")
|
|
77
|
+
prover.get_param()
|
|
79
78
|
|
|
80
79
|
|
|
81
80
|
class TestV1Prover:
|
|
@@ -87,13 +86,6 @@ class TestV1Prover:
|
|
|
87
86
|
|
|
88
87
|
|
|
89
88
|
class TestGetProverFromBytes:
|
|
90
|
-
def test_get_prover_from_bytes_v2_plot(self) -> None:
|
|
91
|
-
with patch("chia.plotting.prover.V2Prover.from_bytes") as mock_v2_from_bytes:
|
|
92
|
-
mock_prover = MagicMock()
|
|
93
|
-
mock_v2_from_bytes.return_value = mock_prover
|
|
94
|
-
result = get_prover_from_bytes("test.plot2", b"test_data")
|
|
95
|
-
assert result == mock_prover
|
|
96
|
-
|
|
97
89
|
def test_get_prover_from_bytes_v1_plot(self) -> None:
|
|
98
90
|
with patch("chia.plotting.prover.DiskProver") as mock_disk_prover_class:
|
|
99
91
|
mock_disk_prover = MagicMock()
|
|
@@ -102,5 +94,5 @@ class TestGetProverFromBytes:
|
|
|
102
94
|
assert isinstance(result, V1Prover)
|
|
103
95
|
|
|
104
96
|
def test_get_prover_from_bytes_unsupported_extension(self) -> None:
|
|
105
|
-
with pytest.raises(
|
|
97
|
+
with pytest.raises((RuntimeError, ValueError)):
|
|
106
98
|
get_prover_from_bytes("test.txt", b"test_data")
|
|
@@ -4,7 +4,7 @@ import json
|
|
|
4
4
|
import re
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
from io import StringIO
|
|
7
|
-
from typing import
|
|
7
|
+
from typing import cast
|
|
8
8
|
|
|
9
9
|
import click
|
|
10
10
|
import pytest
|
|
@@ -59,8 +59,8 @@ pytestmark = [pytest.mark.limit_consensus_modes(reason="irrelevant")]
|
|
|
59
59
|
class StateUrlCase:
|
|
60
60
|
id: str
|
|
61
61
|
state: str
|
|
62
|
-
pool_url:
|
|
63
|
-
expected_error:
|
|
62
|
+
pool_url: str | None
|
|
63
|
+
expected_error: str | None = None
|
|
64
64
|
marks: Marks = ()
|
|
65
65
|
|
|
66
66
|
|
|
@@ -992,9 +992,7 @@ async def test_plotnft_cli_misc(mocker: MockerFixture, consensus_mode: Consensus
|
|
|
992
992
|
)
|
|
993
993
|
|
|
994
994
|
# Test fall-through raise in create
|
|
995
|
-
mocker.patch.object(
|
|
996
|
-
test_rpc_client, "create_new_pool_wallet", create=True, side_effect=ValueError("Injected error")
|
|
997
|
-
)
|
|
995
|
+
mocker.patch.object(test_rpc_client, "create_new_wallet", create=True, side_effect=ValueError("Injected error"))
|
|
998
996
|
with pytest.raises(CliRpcConnectionError, match="Error creating plot NFT: Injected error"):
|
|
999
997
|
await create(
|
|
1000
998
|
wallet_info=WalletClientInfo(client=cast(WalletRpcClient, test_rpc_client), fingerprint=0, config=dict()),
|