chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.6.0rc2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/__init__.py +8 -4
- chia/_tests/blockchain/blockchain_test_utils.py +6 -8
- chia/_tests/blockchain/test_augmented_chain.py +4 -4
- chia/_tests/blockchain/test_blockchain.py +165 -190
- chia/_tests/blockchain/test_blockchain_transactions.py +5 -2
- chia/_tests/blockchain/test_build_chains.py +2 -4
- chia/_tests/blockchain/test_get_block_generator.py +2 -3
- chia/_tests/clvm/coin_store.py +4 -7
- chia/_tests/clvm/test_clvm_step.py +4 -4
- chia/_tests/clvm/test_puzzle_compression.py +2 -1
- chia/_tests/clvm/test_puzzle_drivers.py +2 -2
- chia/_tests/clvm/test_singletons.py +2 -4
- chia/_tests/clvm/test_spend_sim.py +2 -2
- chia/_tests/cmds/cmd_test_utils.py +27 -45
- chia/_tests/cmds/test_cmd_framework.py +6 -6
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_show.py +4 -4
- chia/_tests/cmds/test_tx_config_args.py +1 -2
- chia/_tests/cmds/testing_classes.py +4 -5
- chia/_tests/cmds/wallet/test_did.py +24 -27
- chia/_tests/cmds/wallet/test_nft.py +12 -10
- chia/_tests/cmds/wallet/test_vcs.py +11 -12
- chia/_tests/cmds/wallet/test_wallet.py +134 -89
- chia/_tests/conftest.py +66 -31
- chia/_tests/connection_utils.py +2 -2
- chia/_tests/core/cmds/test_beta.py +4 -4
- chia/_tests/core/cmds/test_keys.py +2 -3
- chia/_tests/core/cmds/test_wallet.py +15 -15
- chia/_tests/core/consensus/test_pot_iterations.py +19 -73
- chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
- chia/_tests/core/daemon/test_daemon.py +11 -11
- chia/_tests/core/data_layer/conftest.py +2 -2
- chia/_tests/core/data_layer/test_data_rpc.py +28 -14
- chia/_tests/core/data_layer/test_data_store.py +10 -10
- chia/_tests/core/data_layer/util.py +11 -11
- chia/_tests/core/farmer/test_farmer_api.py +2 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
- chia/_tests/core/full_node/stores/test_block_store.py +5 -4
- chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
- chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +3 -4
- chia/_tests/core/full_node/test_conditions.py +21 -23
- chia/_tests/core/full_node/test_full_node.py +273 -70
- chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
- chia/_tests/core/full_node/test_hint_management.py +2 -4
- chia/_tests/core/full_node/test_performance.py +0 -1
- chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
- chia/_tests/core/full_node/test_transactions.py +1 -2
- chia/_tests/core/full_node/test_tx_processing_queue.py +198 -30
- chia/_tests/core/mempool/test_mempool.py +54 -50
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
- chia/_tests/core/mempool/test_mempool_manager.py +988 -854
- chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
- chia/_tests/core/server/serve.py +7 -7
- chia/_tests/core/server/test_dos.py +1 -2
- chia/_tests/core/server/test_event_loop.py +12 -4
- chia/_tests/core/server/test_loop.py +7 -8
- chia/_tests/core/server/test_rate_limits.py +9 -8
- chia/_tests/core/server/test_server.py +61 -1
- chia/_tests/core/services/test_services.py +2 -2
- chia/_tests/core/ssl/test_ssl.py +2 -2
- chia/_tests/core/test_cost_calculation.py +2 -6
- chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
- chia/_tests/core/test_filter.py +0 -1
- chia/_tests/core/test_full_node_rpc.py +2 -2
- chia/_tests/core/test_merkle_set.py +1 -2
- chia/_tests/core/test_seeder.py +4 -4
- chia/_tests/core/util/test_config.py +4 -4
- chia/_tests/core/util/test_jsonify.py +2 -2
- chia/_tests/core/util/test_keychain.py +3 -3
- chia/_tests/core/util/test_lockfile.py +2 -1
- chia/_tests/core/util/test_log_exceptions.py +1 -2
- chia/_tests/core/util/test_streamable.py +17 -17
- chia/_tests/db/test_db_wrapper.py +3 -2
- chia/_tests/environments/wallet.py +14 -14
- chia/_tests/ether.py +4 -3
- chia/_tests/farmer_harvester/test_farmer.py +41 -24
- chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
- chia/_tests/harvester/test_harvester_api.py +11 -4
- chia/_tests/plot_sync/test_plot_sync.py +13 -11
- chia/_tests/plot_sync/test_receiver.py +11 -10
- chia/_tests/plot_sync/test_sync_simulated.py +2 -2
- chia/_tests/plot_sync/util.py +1 -2
- chia/_tests/plotting/test_plot_manager.py +7 -6
- chia/_tests/plotting/test_prover.py +30 -38
- chia/_tests/pools/test_pool_cmdline.py +4 -6
- chia/_tests/pools/test_pool_rpc.py +203 -61
- chia/_tests/pools/test_pool_wallet.py +3 -3
- chia/_tests/pools/test_wallet_pool_store.py +1 -4
- chia/_tests/process_junit.py +2 -2
- chia/_tests/rpc/test_rpc_client.py +4 -4
- chia/_tests/rpc/test_rpc_server.py +3 -3
- chia/_tests/simulation/test_simulation.py +12 -25
- chia/_tests/solver/test_solver_service.py +13 -4
- chia/_tests/testconfig.py +2 -2
- chia/_tests/timelord/test_new_peak.py +22 -11
- chia/_tests/tools/test_run_block.py +0 -2
- chia/_tests/tools/test_virtual_project.py +2 -1
- chia/_tests/util/benchmarks.py +1 -0
- chia/_tests/util/blockchain.py +38 -36
- chia/_tests/util/blockchain_mock.py +11 -11
- chia/_tests/util/build_network_protocol_files.py +2 -1
- chia/_tests/util/coin_store.py +2 -1
- chia/_tests/util/config.py +1 -1
- chia/_tests/util/db_connection.py +2 -3
- chia/_tests/util/full_sync.py +9 -11
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/get_name_puzzle_conditions.py +2 -0
- chia/_tests/util/misc.py +24 -24
- chia/_tests/util/network_protocol_data.py +20 -3
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +292 -3
- chia/_tests/util/setup_nodes.py +62 -47
- chia/_tests/util/spend_sim.py +57 -57
- chia/_tests/util/test_async_pool.py +2 -3
- chia/_tests/util/test_chia_version.py +1 -3
- chia/_tests/util/test_config.py +3 -3
- chia/_tests/util/test_full_block_utils.py +6 -3
- chia/_tests/util/test_limited_semaphore.py +1 -2
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_network.py +1 -2
- chia/_tests/util/test_priority_mutex.py +3 -3
- chia/_tests/util/test_recursive_replace.py +5 -6
- chia/_tests/util/test_replace_str_to_bytes.py +9 -10
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/time_out_assert.py +2 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
- chia/_tests/wallet/conftest.py +6 -6
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
- chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
- chia/_tests/wallet/did_wallet/test_did.py +16 -6
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
- chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
- chia/_tests/wallet/sync/test_wallet_sync.py +63 -60
- chia/_tests/wallet/test_clvm_streamable.py +2 -3
- chia/_tests/wallet/test_coin_management.py +2 -2
- chia/_tests/wallet/test_conditions.py +45 -51
- chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
- chia/_tests/wallet/test_new_wallet_protocol.py +17 -17
- chia/_tests/wallet/test_notifications.py +14 -14
- chia/_tests/wallet/test_signer_protocol.py +5 -5
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
- chia/_tests/wallet/test_transaction_store.py +20 -20
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +380 -228
- chia/_tests/wallet/test_wallet_action_scope.py +4 -4
- chia/_tests/wallet/test_wallet_blockchain.py +12 -12
- chia/_tests/wallet/test_wallet_coin_store.py +3 -4
- chia/_tests/wallet/test_wallet_node.py +16 -15
- chia/_tests/wallet/test_wallet_test_framework.py +2 -1
- chia/_tests/wallet/test_wallet_utils.py +2 -3
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
- chia/_tests/wallet/wallet_block_tools.py +12 -11
- chia/_tests/weight_proof/config.py +1 -0
- chia/_tests/weight_proof/test_weight_proof.py +5 -4
- chia/apis/__init__.py +21 -0
- chia/apis/farmer_stub.py +102 -0
- chia/apis/full_node_stub.py +374 -0
- chia/apis/harvester_stub.py +57 -0
- chia/apis/introducer_stub.py +35 -0
- chia/apis/solver_stub.py +30 -0
- chia/apis/stub_protocol_registry.py +21 -0
- chia/apis/timelord_stub.py +39 -0
- chia/apis/wallet_stub.py +161 -0
- chia/cmds/beta.py +3 -4
- chia/cmds/beta_funcs.py +4 -3
- chia/cmds/check_wallet_db.py +4 -4
- chia/cmds/chia.py +1 -2
- chia/cmds/cmd_classes.py +11 -13
- chia/cmds/cmd_helpers.py +11 -11
- chia/cmds/cmds_util.py +15 -15
- chia/cmds/coin_funcs.py +6 -7
- chia/cmds/coins.py +2 -3
- chia/cmds/configure.py +1 -2
- chia/cmds/data.py +42 -42
- chia/cmds/data_funcs.py +81 -81
- chia/cmds/db.py +4 -5
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev/data.py +4 -4
- chia/cmds/dev/gh.py +5 -5
- chia/cmds/dev/installers.py +2 -3
- chia/cmds/dev/mempool.py +3 -4
- chia/cmds/dev/mempool_funcs.py +4 -4
- chia/cmds/dev/sim.py +8 -8
- chia/cmds/dump_keyring.py +3 -3
- chia/cmds/farm.py +6 -8
- chia/cmds/farm_funcs.py +25 -24
- chia/cmds/init_funcs.py +4 -4
- chia/cmds/keys.py +16 -18
- chia/cmds/keys_funcs.py +36 -36
- chia/cmds/netspace.py +1 -3
- chia/cmds/netspace_funcs.py +1 -2
- chia/cmds/options.py +3 -2
- chia/cmds/param_types.py +17 -16
- chia/cmds/passphrase.py +6 -7
- chia/cmds/passphrase_funcs.py +11 -13
- chia/cmds/peer.py +1 -3
- chia/cmds/peer_funcs.py +3 -3
- chia/cmds/plotnft.py +6 -7
- chia/cmds/plotnft_funcs.py +37 -26
- chia/cmds/rpc.py +3 -3
- chia/cmds/show.py +3 -5
- chia/cmds/show_funcs.py +9 -9
- chia/cmds/sim_funcs.py +25 -26
- chia/cmds/solver.py +1 -3
- chia/cmds/solver_funcs.py +1 -2
- chia/cmds/start_funcs.py +2 -2
- chia/cmds/wallet.py +76 -81
- chia/cmds/wallet_funcs.py +206 -177
- chia/consensus/augmented_chain.py +6 -6
- chia/consensus/block_body_validation.py +19 -15
- chia/consensus/block_creation.py +25 -21
- chia/consensus/block_header_validation.py +27 -13
- chia/consensus/block_height_map.py +3 -6
- chia/consensus/block_height_map_protocol.py +2 -2
- chia/consensus/block_record.py +2 -4
- chia/consensus/blockchain.py +58 -40
- chia/consensus/blockchain_interface.py +7 -7
- chia/consensus/coin_store_protocol.py +5 -6
- chia/consensus/condition_tools.py +4 -4
- chia/consensus/cost_calculator.py +2 -3
- chia/consensus/default_constants.py +19 -13
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +3 -5
- chia/consensus/find_fork_point.py +2 -4
- chia/consensus/full_block_to_block_record.py +11 -13
- chia/consensus/generator_tools.py +2 -3
- chia/consensus/get_block_challenge.py +50 -26
- chia/consensus/get_block_generator.py +2 -3
- chia/consensus/make_sub_epoch_summary.py +8 -7
- chia/consensus/multiprocess_validation.py +31 -20
- chia/consensus/pos_quality.py +6 -23
- chia/consensus/pot_iterations.py +17 -44
- chia/consensus/signage_point.py +4 -5
- chia/consensus/vdf_info_computation.py +2 -4
- chia/daemon/client.py +8 -8
- chia/daemon/keychain_proxy.py +31 -37
- chia/daemon/server.py +32 -33
- chia/daemon/windows_signal.py +4 -3
- chia/data_layer/data_layer.py +86 -77
- chia/data_layer/data_layer_rpc_api.py +9 -9
- chia/data_layer/data_layer_rpc_client.py +13 -15
- chia/data_layer/data_layer_server.py +3 -3
- chia/data_layer/data_layer_util.py +14 -14
- chia/data_layer/data_layer_wallet.py +94 -101
- chia/data_layer/data_store.py +50 -50
- chia/data_layer/dl_wallet_store.py +9 -12
- chia/data_layer/download_data.py +8 -9
- chia/data_layer/s3_plugin_service.py +5 -9
- chia/data_layer/start_data_layer.py +5 -5
- chia/farmer/farmer.py +31 -31
- chia/farmer/farmer_api.py +45 -33
- chia/farmer/farmer_rpc_api.py +5 -4
- chia/farmer/farmer_rpc_client.py +6 -6
- chia/farmer/start_farmer.py +6 -6
- chia/full_node/block_store.py +13 -16
- chia/full_node/check_fork_next_block.py +1 -2
- chia/full_node/coin_store.py +15 -16
- chia/full_node/eligible_coin_spends.py +3 -3
- chia/full_node/fee_estimate_store.py +2 -3
- chia/full_node/fee_tracker.py +1 -2
- chia/full_node/full_block_utils.py +4 -4
- chia/full_node/full_node.py +239 -223
- chia/full_node/full_node_api.py +197 -152
- chia/full_node/full_node_rpc_api.py +34 -32
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- chia/full_node/hard_fork_utils.py +44 -0
- chia/full_node/hint_management.py +2 -2
- chia/full_node/mempool.py +17 -19
- chia/full_node/mempool_manager.py +89 -42
- chia/full_node/pending_tx_cache.py +2 -3
- chia/full_node/start_full_node.py +5 -5
- chia/full_node/sync_store.py +3 -4
- chia/full_node/tx_processing_queue.py +120 -36
- chia/full_node/weight_proof.py +61 -48
- chia/harvester/harvester.py +25 -24
- chia/harvester/harvester_api.py +61 -38
- chia/harvester/harvester_rpc_api.py +10 -10
- chia/harvester/start_harvester.py +4 -4
- chia/introducer/introducer.py +3 -3
- chia/introducer/introducer_api.py +6 -4
- chia/introducer/start_introducer.py +4 -4
- chia/legacy/keyring.py +3 -3
- chia/plot_sync/delta.py +1 -2
- chia/plot_sync/receiver.py +20 -17
- chia/plot_sync/sender.py +15 -10
- chia/plotters/bladebit.py +7 -7
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +4 -4
- chia/plotters/plotters.py +4 -4
- chia/plotters/plotters_util.py +3 -3
- chia/plotting/cache.py +20 -14
- chia/plotting/check_plots.py +26 -35
- chia/plotting/create_plots.py +22 -23
- chia/plotting/manager.py +21 -14
- chia/plotting/prover.py +59 -42
- chia/plotting/util.py +16 -16
- chia/pools/pool_config.py +2 -1
- chia/pools/pool_puzzles.py +11 -12
- chia/pools/pool_wallet.py +34 -57
- chia/pools/pool_wallet_info.py +39 -10
- chia/protocols/farmer_protocol.py +8 -9
- chia/protocols/fee_estimate.py +3 -4
- chia/protocols/full_node_protocol.py +3 -4
- chia/protocols/harvester_protocol.py +27 -15
- chia/protocols/outbound_message.py +3 -3
- chia/protocols/pool_protocol.py +8 -9
- chia/protocols/shared_protocol.py +1 -2
- chia/protocols/solver_protocol.py +9 -2
- chia/protocols/timelord_protocol.py +4 -7
- chia/protocols/wallet_protocol.py +11 -12
- chia/rpc/rpc_client.py +9 -9
- chia/rpc/rpc_server.py +17 -17
- chia/rpc/util.py +2 -2
- chia/seeder/crawler.py +8 -8
- chia/seeder/crawler_api.py +21 -27
- chia/seeder/crawler_rpc_api.py +2 -2
- chia/seeder/dns_server.py +21 -21
- chia/seeder/start_crawler.py +4 -4
- chia/server/address_manager.py +15 -16
- chia/server/api_protocol.py +11 -11
- chia/server/chia_policy.py +46 -26
- chia/server/introducer_peers.py +2 -3
- chia/server/node_discovery.py +19 -19
- chia/server/rate_limit_numbers.py +4 -5
- chia/server/rate_limits.py +4 -4
- chia/server/resolve_peer_info.py +4 -4
- chia/server/server.py +49 -52
- chia/server/signal_handlers.py +6 -6
- chia/server/start_service.py +17 -17
- chia/server/upnp.py +4 -6
- chia/server/ws_connection.py +52 -37
- chia/simulator/add_blocks_in_batches.py +1 -3
- chia/simulator/block_tools.py +312 -200
- chia/simulator/full_node_simulator.py +56 -35
- chia/simulator/keyring.py +2 -3
- chia/simulator/setup_services.py +15 -15
- chia/simulator/simulator_full_node_rpc_api.py +1 -2
- chia/simulator/simulator_full_node_rpc_client.py +1 -2
- chia/simulator/simulator_protocol.py +1 -2
- chia/simulator/simulator_test_tools.py +3 -3
- chia/simulator/start_simulator.py +7 -7
- chia/simulator/wallet_tools.py +10 -10
- chia/solver/solver.py +10 -10
- chia/solver/solver_api.py +10 -8
- chia/solver/solver_rpc_api.py +2 -2
- chia/solver/start_solver.py +4 -4
- chia/ssl/cacert.pem +148 -90
- chia/ssl/chia_ca.crt +14 -10
- chia/ssl/chia_ca_old.crt +19 -0
- chia/ssl/create_ssl.py +4 -4
- chia/ssl/renewedselfsignedca.conf +4 -0
- chia/ssl/ssl_check.py +1 -2
- chia/timelord/iters_from_block.py +1 -4
- chia/timelord/start_timelord.py +4 -4
- chia/timelord/timelord.py +44 -40
- chia/timelord/timelord_api.py +6 -4
- chia/timelord/timelord_launcher.py +2 -2
- chia/timelord/timelord_rpc_api.py +2 -2
- chia/timelord/timelord_state.py +11 -12
- chia/types/block_protocol.py +1 -3
- chia/types/blockchain_format/coin.py +1 -3
- chia/types/blockchain_format/program.py +11 -8
- chia/types/blockchain_format/proof_of_space.py +123 -76
- chia/types/blockchain_format/tree_hash.py +3 -3
- chia/types/blockchain_format/vdf.py +1 -2
- chia/types/coin_spend.py +3 -3
- chia/types/mempool_item.py +5 -5
- chia/types/mempool_submission_status.py +2 -3
- chia/types/peer_info.py +1 -2
- chia/types/unfinished_header_block.py +3 -4
- chia/types/validation_state.py +1 -2
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +5 -5
- chia/util/bech32m.py +1 -2
- chia/util/beta_metrics.py +2 -2
- chia/util/block_cache.py +4 -4
- chia/util/chia_logging.py +2 -2
- chia/util/chia_version.py +1 -2
- chia/util/config.py +15 -16
- chia/util/db_wrapper.py +26 -27
- chia/util/default_root.py +1 -2
- chia/util/errors.py +3 -3
- chia/util/file_keyring.py +14 -14
- chia/util/files.py +2 -3
- chia/util/hash.py +4 -4
- chia/util/initial-config.yaml +4 -5
- chia/util/inline_executor.py +2 -1
- chia/util/ip_address.py +1 -2
- chia/util/keychain.py +25 -27
- chia/util/keyring_wrapper.py +18 -19
- chia/util/lock.py +3 -4
- chia/util/log_exceptions.py +1 -2
- chia/util/lru_cache.py +2 -2
- chia/util/network.py +6 -6
- chia/util/path.py +2 -3
- chia/util/priority_mutex.py +2 -2
- chia/util/profiler.py +1 -2
- chia/util/safe_cancel_task.py +1 -2
- chia/util/streamable.py +24 -10
- chia/util/task_referencer.py +1 -1
- chia/util/timing.py +3 -3
- chia/util/virtual_project_analysis.py +6 -5
- chia/util/ws_message.py +2 -2
- chia/wallet/cat_wallet/cat_info.py +3 -4
- chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
- chia/wallet/cat_wallet/cat_utils.py +3 -4
- chia/wallet/cat_wallet/cat_wallet.py +61 -83
- chia/wallet/cat_wallet/lineage_store.py +3 -4
- chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
- chia/wallet/coin_selection.py +9 -10
- chia/wallet/conditions.py +142 -106
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
- chia/wallet/derivation_record.py +1 -2
- chia/wallet/derive_keys.py +2 -4
- chia/wallet/did_wallet/did_info.py +10 -11
- chia/wallet/did_wallet/did_wallet.py +36 -82
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
- chia/wallet/driver_protocol.py +5 -7
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
- chia/wallet/nft_wallet/nft_info.py +8 -9
- chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
- chia/wallet/nft_wallet/nft_wallet.py +79 -116
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
- chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
- chia/wallet/nft_wallet/uncurry_nft.py +10 -11
- chia/wallet/notification_manager.py +3 -3
- chia/wallet/notification_store.py +44 -61
- chia/wallet/outer_puzzles.py +6 -7
- chia/wallet/puzzle_drivers.py +34 -6
- chia/wallet/puzzles/clawback/drivers.py +6 -6
- chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
- chia/wallet/puzzles/load_clvm.py +1 -1
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
- chia/wallet/puzzles/singleton_top_layer.py +2 -3
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
- chia/wallet/puzzles/tails.py +3 -3
- chia/wallet/singleton.py +5 -7
- chia/wallet/singleton_record.py +3 -3
- chia/wallet/start_wallet.py +5 -5
- chia/wallet/trade_manager.py +37 -58
- chia/wallet/trade_record.py +4 -4
- chia/wallet/trading/offer.py +59 -46
- chia/wallet/trading/trade_store.py +8 -9
- chia/wallet/transaction_record.py +8 -8
- chia/wallet/uncurried_puzzle.py +1 -2
- chia/wallet/util/clvm_streamable.py +12 -12
- chia/wallet/util/compute_hints.py +4 -5
- chia/wallet/util/curry_and_treehash.py +1 -2
- chia/wallet/util/merkle_tree.py +2 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/wallet/util/signing.py +85 -0
- chia/wallet/util/tx_config.py +15 -6
- chia/wallet/util/wallet_sync_utils.py +14 -16
- chia/wallet/util/wallet_types.py +2 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
- chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
- chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
- chia/wallet/vc_wallet/vc_drivers.py +27 -27
- chia/wallet/vc_wallet/vc_store.py +5 -6
- chia/wallet/vc_wallet/vc_wallet.py +33 -61
- chia/wallet/wallet.py +50 -78
- chia/wallet/wallet_action_scope.py +11 -11
- chia/wallet/wallet_blockchain.py +12 -12
- chia/wallet/wallet_coin_record.py +12 -6
- chia/wallet/wallet_coin_store.py +24 -25
- chia/wallet/wallet_interested_store.py +3 -5
- chia/wallet/wallet_nft_store.py +10 -11
- chia/wallet/wallet_node.py +53 -61
- chia/wallet/wallet_node_api.py +5 -3
- chia/wallet/wallet_protocol.py +23 -23
- chia/wallet/wallet_puzzle_store.py +15 -18
- chia/wallet/wallet_request_types.py +778 -114
- chia/wallet/wallet_retry_store.py +1 -3
- chia/wallet/wallet_rpc_api.py +572 -909
- chia/wallet/wallet_rpc_client.py +87 -279
- chia/wallet/wallet_singleton_store.py +3 -4
- chia/wallet/wallet_state_manager.py +332 -106
- chia/wallet/wallet_transaction_store.py +11 -14
- chia/wallet/wallet_user_store.py +4 -6
- chia/wallet/wallet_weight_proof_handler.py +4 -4
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
- chia/apis.py +0 -21
- chia/consensus/check_time_locks.py +0 -57
- chia/data_layer/puzzles/__init__.py +0 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
- chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
- chia/types/coin_record.py +0 -44
- chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
|
@@ -2,16 +2,16 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import io
|
|
4
4
|
import re
|
|
5
|
+
from collections.abc import Callable
|
|
5
6
|
from dataclasses import dataclass, field, fields
|
|
6
7
|
from enum import Enum
|
|
7
|
-
from typing import Any,
|
|
8
|
+
from typing import Any, ClassVar, Literal, get_args, get_type_hints
|
|
8
9
|
|
|
9
10
|
import pytest
|
|
10
11
|
from chia_rs import FullBlock, G1Element, SubEpochChallengeSegment
|
|
11
12
|
from chia_rs.sized_bytes import bytes4, bytes32
|
|
12
13
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
13
14
|
from clvm_tools import binutils
|
|
14
|
-
from typing_extensions import Literal, get_args
|
|
15
15
|
|
|
16
16
|
from chia.protocols.wallet_protocol import RespondRemovals
|
|
17
17
|
from chia.simulator.block_tools import BlockTools, test_constants
|
|
@@ -374,8 +374,8 @@ def test_not_lists() -> None:
|
|
|
374
374
|
|
|
375
375
|
|
|
376
376
|
def test_basic_optional() -> None:
|
|
377
|
-
assert is_type_SpecificOptional(
|
|
378
|
-
assert is_type_SpecificOptional(
|
|
377
|
+
assert is_type_SpecificOptional(int | None)
|
|
378
|
+
assert is_type_SpecificOptional(int | None)
|
|
379
379
|
assert not is_type_SpecificOptional(list[int])
|
|
380
380
|
|
|
381
381
|
|
|
@@ -418,10 +418,10 @@ class PostInitTestClassBad(Streamable):
|
|
|
418
418
|
@streamable
|
|
419
419
|
@dataclass(frozen=True)
|
|
420
420
|
class PostInitTestClassOptional(Streamable):
|
|
421
|
-
a:
|
|
422
|
-
b:
|
|
423
|
-
c:
|
|
424
|
-
d:
|
|
421
|
+
a: uint8 | None
|
|
422
|
+
b: uint8 | None
|
|
423
|
+
c: uint8 | None
|
|
424
|
+
d: uint8 | None
|
|
425
425
|
|
|
426
426
|
|
|
427
427
|
@streamable
|
|
@@ -537,8 +537,8 @@ def test_basic() -> None:
|
|
|
537
537
|
b: uint32
|
|
538
538
|
c: list[uint32]
|
|
539
539
|
d: list[list[uint32]]
|
|
540
|
-
e:
|
|
541
|
-
f:
|
|
540
|
+
e: uint32 | None
|
|
541
|
+
f: uint32 | None
|
|
542
542
|
g: tuple[uint32, str, bytes]
|
|
543
543
|
h: dict[uint32, str]
|
|
544
544
|
i: IntegerEnum
|
|
@@ -590,9 +590,9 @@ def test_json(bt: BlockTools) -> None:
|
|
|
590
590
|
@streamable
|
|
591
591
|
@dataclass(frozen=True)
|
|
592
592
|
class OptionalTestClass(Streamable):
|
|
593
|
-
a:
|
|
594
|
-
b:
|
|
595
|
-
c:
|
|
593
|
+
a: str | None
|
|
594
|
+
b: bool | None
|
|
595
|
+
c: list[str | None] | None
|
|
596
596
|
|
|
597
597
|
|
|
598
598
|
@pytest.mark.parametrize(
|
|
@@ -606,7 +606,7 @@ class OptionalTestClass(Streamable):
|
|
|
606
606
|
(None, None, None),
|
|
607
607
|
],
|
|
608
608
|
)
|
|
609
|
-
def test_optional_json(a:
|
|
609
|
+
def test_optional_json(a: str | None, b: bool | None, c: list[str | None] | None) -> None:
|
|
610
610
|
obj: OptionalTestClass = OptionalTestClass.from_json_dict({"a": a, "b": b, "c": c})
|
|
611
611
|
assert obj.a == a
|
|
612
612
|
assert obj.b == b
|
|
@@ -623,7 +623,7 @@ class TestClassRecursive1(Streamable):
|
|
|
623
623
|
@dataclass(frozen=True)
|
|
624
624
|
class TestClassRecursive2(Streamable):
|
|
625
625
|
a: uint32
|
|
626
|
-
b: list[
|
|
626
|
+
b: list[list[TestClassRecursive1] | None]
|
|
627
627
|
c: bytes32
|
|
628
628
|
|
|
629
629
|
|
|
@@ -637,7 +637,7 @@ def test_recursive_json() -> None:
|
|
|
637
637
|
|
|
638
638
|
|
|
639
639
|
def test_recursive_types() -> None:
|
|
640
|
-
coin:
|
|
640
|
+
coin: Coin | None = None
|
|
641
641
|
l1 = [(bytes32([2] * 32), coin)]
|
|
642
642
|
rr = RespondRemovals(uint32(1), bytes32([1] * 32), l1, None)
|
|
643
643
|
RespondRemovals(rr.height, rr.header_hash, rr.coins, rr.proofs)
|
|
@@ -650,7 +650,7 @@ def test_ambiguous_deserialization_optionals() -> None:
|
|
|
650
650
|
@streamable
|
|
651
651
|
@dataclass(frozen=True)
|
|
652
652
|
class TestClassOptional(Streamable):
|
|
653
|
-
a:
|
|
653
|
+
a: uint8 | None
|
|
654
654
|
|
|
655
655
|
# Does not have the required elements
|
|
656
656
|
with pytest.raises(AssertionError):
|
|
@@ -2,8 +2,9 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import contextlib
|
|
5
|
+
from collections.abc import Callable
|
|
5
6
|
from dataclasses import dataclass
|
|
6
|
-
from typing import TYPE_CHECKING
|
|
7
|
+
from typing import TYPE_CHECKING
|
|
7
8
|
|
|
8
9
|
import aiosqlite
|
|
9
10
|
import pytest
|
|
@@ -494,7 +495,7 @@ async def test_foreign_key_pragma_rolls_back_on_foreign_key_error() -> None:
|
|
|
494
495
|
@dataclass
|
|
495
496
|
class RowFactoryCase:
|
|
496
497
|
id: str
|
|
497
|
-
factory:
|
|
498
|
+
factory: type[aiosqlite.Row] | None
|
|
498
499
|
marks: Marks = ()
|
|
499
500
|
|
|
500
501
|
|
|
@@ -6,7 +6,7 @@ import operator
|
|
|
6
6
|
import unittest
|
|
7
7
|
from collections.abc import Iterator
|
|
8
8
|
from dataclasses import asdict, dataclass, field
|
|
9
|
-
from typing import TYPE_CHECKING, Any, ClassVar,
|
|
9
|
+
from typing import TYPE_CHECKING, Any, ClassVar, cast
|
|
10
10
|
|
|
11
11
|
from chia_rs.sized_bytes import bytes32
|
|
12
12
|
from chia_rs.sized_ints import uint32, uint64
|
|
@@ -50,9 +50,9 @@ OPP_DICT = {"<": operator.lt, ">": operator.gt, "<=": operator.le, ">=": operato
|
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
class BalanceCheckingError(Exception):
|
|
53
|
-
errors: dict[
|
|
53
|
+
errors: dict[int | str, list[str]]
|
|
54
54
|
|
|
55
|
-
def __init__(self, errors: dict[
|
|
55
|
+
def __init__(self, errors: dict[int | str, list[str]]) -> None:
|
|
56
56
|
self.errors = errors
|
|
57
57
|
|
|
58
58
|
def __repr__(self) -> str:
|
|
@@ -69,10 +69,10 @@ class WalletState:
|
|
|
69
69
|
|
|
70
70
|
@dataclass
|
|
71
71
|
class WalletStateTransition:
|
|
72
|
-
pre_block_balance_updates: dict[
|
|
73
|
-
post_block_balance_updates: dict[
|
|
74
|
-
pre_block_additional_balance_info: dict[
|
|
75
|
-
post_block_additional_balance_info: dict[
|
|
72
|
+
pre_block_balance_updates: dict[int | str, dict[str, int]] = field(default_factory=dict)
|
|
73
|
+
post_block_balance_updates: dict[int | str, dict[str, int]] = field(default_factory=dict)
|
|
74
|
+
pre_block_additional_balance_info: dict[int | str, dict[str, int]] = field(default_factory=dict)
|
|
75
|
+
post_block_additional_balance_info: dict[int | str, dict[str, int]] = field(default_factory=dict)
|
|
76
76
|
|
|
77
77
|
|
|
78
78
|
@dataclass
|
|
@@ -121,7 +121,7 @@ class WalletEnvironment:
|
|
|
121
121
|
def xch_wallet(self) -> Wallet:
|
|
122
122
|
return self.service._node.wallet_state_manager.main_wallet
|
|
123
123
|
|
|
124
|
-
def dealias_wallet_id(self, wallet_id_or_alias:
|
|
124
|
+
def dealias_wallet_id(self, wallet_id_or_alias: int | str) -> uint32:
|
|
125
125
|
"""
|
|
126
126
|
This function turns something that is either a wallet id or a wallet alias into a wallet id.
|
|
127
127
|
"""
|
|
@@ -131,7 +131,7 @@ class WalletEnvironment:
|
|
|
131
131
|
else uint32(self.wallet_aliases[wallet_id_or_alias])
|
|
132
132
|
)
|
|
133
133
|
|
|
134
|
-
def alias_wallet_id(self, wallet_id: uint32) ->
|
|
134
|
+
def alias_wallet_id(self, wallet_id: uint32) -> uint32 | str:
|
|
135
135
|
"""
|
|
136
136
|
This function turns a wallet id into an alias if one is available or the same wallet id if one is not.
|
|
137
137
|
"""
|
|
@@ -141,7 +141,7 @@ class WalletEnvironment:
|
|
|
141
141
|
else:
|
|
142
142
|
return wallet_id
|
|
143
143
|
|
|
144
|
-
async def check_balances(self, additional_balance_info: dict[
|
|
144
|
+
async def check_balances(self, additional_balance_info: dict[int | str, dict[str, int]] = {}) -> None:
|
|
145
145
|
"""
|
|
146
146
|
This function checks the internal representation of what the balances should be against the balances that the
|
|
147
147
|
wallet actually returns via the RPC.
|
|
@@ -151,7 +151,7 @@ class WalletEnvironment:
|
|
|
151
151
|
dealiased_additional_balance_info: dict[uint32, dict[str, int]] = {
|
|
152
152
|
self.dealias_wallet_id(k): v for k, v in additional_balance_info.items()
|
|
153
153
|
}
|
|
154
|
-
errors: dict[
|
|
154
|
+
errors: dict[int | str, list[str]] = {}
|
|
155
155
|
for wallet_id in self.wallet_state_manager.wallets:
|
|
156
156
|
if wallet_id not in self.wallet_states:
|
|
157
157
|
raise KeyError(f"No wallet state for wallet id {wallet_id} (alias: {self.alias_wallet_id(wallet_id)})")
|
|
@@ -189,7 +189,7 @@ class WalletEnvironment:
|
|
|
189
189
|
if errors != {}:
|
|
190
190
|
raise BalanceCheckingError(errors)
|
|
191
191
|
|
|
192
|
-
async def change_balances(self, update_dictionary: dict[
|
|
192
|
+
async def change_balances(self, update_dictionary: dict[int | str, dict[str, int]]) -> None:
|
|
193
193
|
"""
|
|
194
194
|
This method changes the internal representation of what the wallet balances should be. This is probably
|
|
195
195
|
necessary to call before check_balances as most wallet operations will result in a balance change that causes
|
|
@@ -228,7 +228,7 @@ class WalletEnvironment:
|
|
|
228
228
|
)
|
|
229
229
|
else:
|
|
230
230
|
for key, change in kwargs.items():
|
|
231
|
-
if key in "set_remainder":
|
|
231
|
+
if key in {"set_remainder", "init"}:
|
|
232
232
|
continue
|
|
233
233
|
if "#" in key:
|
|
234
234
|
opp: str = key[0 : key.index("#")]
|
|
@@ -347,7 +347,7 @@ class WalletTestFramework:
|
|
|
347
347
|
1) Ensures all pending transactions have entered the mempool
|
|
348
348
|
2) Checks that all balances have changed properly prior to a block being farmed
|
|
349
349
|
3) Farms a block (to no one in particular)
|
|
350
|
-
4)
|
|
350
|
+
4) Checks that all balances have changed properly after the block was farmed
|
|
351
351
|
5) Checks that all pending transactions that were gathered in step 1 are now confirmed
|
|
352
352
|
6) Checks that if `reuse_puzhash` was set, no new derivations were created
|
|
353
353
|
7) Ensures the wallet is in a synced state before progressing to the rest of the test
|
chia/_tests/ether.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Callable
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
4
5
|
|
|
5
6
|
if TYPE_CHECKING:
|
|
6
7
|
from chia._tests.util.misc import TestId
|
|
@@ -15,5 +16,5 @@ if TYPE_CHECKING:
|
|
|
15
16
|
# result in you likely getting the default `None` values since they are not
|
|
16
17
|
# populated until tests are running.
|
|
17
18
|
|
|
18
|
-
record_property:
|
|
19
|
-
test_id:
|
|
19
|
+
record_property: Callable[[str, object], None] | None = None
|
|
20
|
+
test_id: TestId | None = None
|
|
@@ -5,11 +5,11 @@ import logging
|
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
from time import time
|
|
7
7
|
from types import TracebackType
|
|
8
|
-
from typing import Any,
|
|
8
|
+
from typing import Any, cast
|
|
9
9
|
from unittest.mock import ANY
|
|
10
10
|
|
|
11
11
|
import pytest
|
|
12
|
-
from chia_rs import AugSchemeMPL, G1Element, G2Element,
|
|
12
|
+
from chia_rs import AugSchemeMPL, G1Element, G2Element, PlotParam, PrivateKey, ProofOfSpace
|
|
13
13
|
from chia_rs.sized_bytes import bytes32
|
|
14
14
|
from chia_rs.sized_ints import uint8, uint16, uint32, uint64
|
|
15
15
|
from pytest_mock import MockerFixture
|
|
@@ -57,7 +57,7 @@ class IncrementPoolStatsCase:
|
|
|
57
57
|
name: str
|
|
58
58
|
current_time: float
|
|
59
59
|
count: int
|
|
60
|
-
value:
|
|
60
|
+
value: int | dict[str, Any] | None
|
|
61
61
|
expected_result: Any
|
|
62
62
|
|
|
63
63
|
def __init__(
|
|
@@ -66,7 +66,7 @@ class IncrementPoolStatsCase:
|
|
|
66
66
|
name: str,
|
|
67
67
|
current_time: float,
|
|
68
68
|
count: int,
|
|
69
|
-
value:
|
|
69
|
+
value: int | dict[str, Any] | None,
|
|
70
70
|
expected_result: Any,
|
|
71
71
|
):
|
|
72
72
|
prepared_p2_singleton_puzzle_hash = std_hash(b"11223344")
|
|
@@ -134,16 +134,16 @@ class NewProofOfSpaceCase:
|
|
|
134
134
|
plot_identifier: str
|
|
135
135
|
signage_point_index: uint8
|
|
136
136
|
plot_id: bytes32
|
|
137
|
-
plot_size:
|
|
137
|
+
plot_size: PlotParam
|
|
138
138
|
plot_challenge: bytes32
|
|
139
139
|
plot_public_key: G1Element
|
|
140
|
-
pool_public_key:
|
|
140
|
+
pool_public_key: G1Element | None
|
|
141
141
|
pool_contract_puzzle_hash: bytes32
|
|
142
142
|
height: uint32
|
|
143
143
|
proof: bytes
|
|
144
144
|
pool_config: PoolWalletConfig
|
|
145
|
-
pool_difficulty:
|
|
146
|
-
authentication_token_timeout:
|
|
145
|
+
pool_difficulty: uint64 | None
|
|
146
|
+
authentication_token_timeout: uint8 | None
|
|
147
147
|
farmer_private_keys: list[PrivateKey]
|
|
148
148
|
authentication_keys: dict[bytes32, PrivateKey]
|
|
149
149
|
use_invalid_peer_response: bool
|
|
@@ -157,8 +157,8 @@ class NewProofOfSpaceCase:
|
|
|
157
157
|
difficulty: uint64,
|
|
158
158
|
sub_slot_iters: uint64,
|
|
159
159
|
pool_url: str,
|
|
160
|
-
pool_difficulty:
|
|
161
|
-
authentication_token_timeout:
|
|
160
|
+
pool_difficulty: uint64 | None,
|
|
161
|
+
authentication_token_timeout: uint8 | None,
|
|
162
162
|
use_invalid_peer_response: bool,
|
|
163
163
|
has_valid_authentication_keys: bool,
|
|
164
164
|
expected_pool_stats: dict[str, Any],
|
|
@@ -189,7 +189,7 @@ class NewProofOfSpaceCase:
|
|
|
189
189
|
plot_identifier="test",
|
|
190
190
|
signage_point_index=uint8(1),
|
|
191
191
|
plot_id=bytes32.fromhex("baaa6780c53d4b3739b8807b4ae79a76644ddf0d9e03dc7d0a6a0e613e764d9f"),
|
|
192
|
-
plot_size=
|
|
192
|
+
plot_size=PlotParam.make_v1(32),
|
|
193
193
|
plot_challenge=bytes32.fromhex("7580e4c366dc2c94c37ce44943f9629a3cd6e027d7b24cd014adeaa578d4b0a2"),
|
|
194
194
|
plot_public_key=G1Element.from_bytes(
|
|
195
195
|
bytes.fromhex(
|
|
@@ -626,7 +626,14 @@ async def test_farmer_new_proof_of_space_for_pool_stats(
|
|
|
626
626
|
}
|
|
627
627
|
|
|
628
628
|
assert (
|
|
629
|
-
verify_and_get_quality_string(
|
|
629
|
+
verify_and_get_quality_string(
|
|
630
|
+
pos,
|
|
631
|
+
DEFAULT_CONSTANTS,
|
|
632
|
+
case.challenge_hash,
|
|
633
|
+
case.sp_hash,
|
|
634
|
+
height=uint32(1),
|
|
635
|
+
prev_transaction_block_height=uint32(1),
|
|
636
|
+
)
|
|
630
637
|
is not None
|
|
631
638
|
)
|
|
632
639
|
|
|
@@ -669,9 +676,9 @@ async def test_farmer_new_proof_of_space_for_pool_stats(
|
|
|
669
676
|
class DummyPoolResponse:
|
|
670
677
|
ok: bool
|
|
671
678
|
status: int
|
|
672
|
-
error_code:
|
|
673
|
-
error_message:
|
|
674
|
-
new_difficulty:
|
|
679
|
+
error_code: int | None = None
|
|
680
|
+
error_message: str | None = None
|
|
681
|
+
new_difficulty: int | None = None
|
|
675
682
|
|
|
676
683
|
async def text(self) -> str:
|
|
677
684
|
json_dict: dict[str, Any] = dict()
|
|
@@ -688,9 +695,9 @@ class DummyPoolResponse:
|
|
|
688
695
|
|
|
689
696
|
async def __aexit__(
|
|
690
697
|
self,
|
|
691
|
-
exc_type:
|
|
692
|
-
exc_val:
|
|
693
|
-
exc_tb:
|
|
698
|
+
exc_type: type[BaseException] | None,
|
|
699
|
+
exc_val: BaseException | None,
|
|
700
|
+
exc_tb: TracebackType | None,
|
|
694
701
|
) -> None:
|
|
695
702
|
pass
|
|
696
703
|
|
|
@@ -883,7 +890,12 @@ async def test_farmer_pool_response(
|
|
|
883
890
|
|
|
884
891
|
assert (
|
|
885
892
|
verify_and_get_quality_string(
|
|
886
|
-
pos,
|
|
893
|
+
pos,
|
|
894
|
+
DEFAULT_CONSTANTS,
|
|
895
|
+
sp.challenge_hash,
|
|
896
|
+
sp.challenge_chain_sp,
|
|
897
|
+
height=uint32(1),
|
|
898
|
+
prev_transaction_block_height=uint32(1),
|
|
887
899
|
)
|
|
888
900
|
is not None
|
|
889
901
|
)
|
|
@@ -998,7 +1010,7 @@ class DummyPoolInfoResponse:
|
|
|
998
1010
|
ok: bool
|
|
999
1011
|
status: int
|
|
1000
1012
|
url: URL
|
|
1001
|
-
pool_info:
|
|
1013
|
+
pool_info: dict[str, Any] | None = None
|
|
1002
1014
|
history: tuple[DummyClientResponse, ...] = ()
|
|
1003
1015
|
|
|
1004
1016
|
async def text(self) -> str:
|
|
@@ -1012,9 +1024,9 @@ class DummyPoolInfoResponse:
|
|
|
1012
1024
|
|
|
1013
1025
|
async def __aexit__(
|
|
1014
1026
|
self,
|
|
1015
|
-
exc_type:
|
|
1016
|
-
exc_val:
|
|
1017
|
-
exc_tb:
|
|
1027
|
+
exc_type: type[BaseException] | None,
|
|
1028
|
+
exc_val: BaseException | None,
|
|
1029
|
+
exc_tb: TracebackType | None,
|
|
1018
1030
|
) -> None:
|
|
1019
1031
|
pass
|
|
1020
1032
|
|
|
@@ -1251,7 +1263,12 @@ async def test_farmer_additional_headers_on_partial_submit(
|
|
|
1251
1263
|
|
|
1252
1264
|
assert (
|
|
1253
1265
|
verify_and_get_quality_string(
|
|
1254
|
-
pos,
|
|
1266
|
+
pos,
|
|
1267
|
+
DEFAULT_CONSTANTS,
|
|
1268
|
+
sp.challenge_hash,
|
|
1269
|
+
sp.challenge_chain_sp,
|
|
1270
|
+
height=uint32(1),
|
|
1271
|
+
prev_transaction_block_height=uint32(1),
|
|
1255
1272
|
)
|
|
1256
1273
|
is not None
|
|
1257
1274
|
)
|
|
@@ -4,11 +4,11 @@ import asyncio
|
|
|
4
4
|
import unittest.mock
|
|
5
5
|
from math import floor
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
from typing import Any
|
|
7
|
+
from typing import Any
|
|
8
8
|
from unittest.mock import AsyncMock, Mock
|
|
9
9
|
|
|
10
10
|
import pytest
|
|
11
|
-
from chia_rs import G1Element
|
|
11
|
+
from chia_rs import G1Element, PartialProof
|
|
12
12
|
from chia_rs.sized_bytes import bytes32
|
|
13
13
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
14
14
|
|
|
@@ -56,12 +56,12 @@ def farmer_is_started(farmer: Farmer) -> bool:
|
|
|
56
56
|
return farmer.started
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
async def get_harvester_config(harvester_rpc_port:
|
|
59
|
+
async def get_harvester_config(harvester_rpc_port: int | None, root_path: Path) -> dict[str, Any]:
|
|
60
60
|
async with get_any_service_client(HarvesterRpcClient, root_path, harvester_rpc_port) as (harvester_client, _):
|
|
61
61
|
return await harvester_client.get_harvester_config()
|
|
62
62
|
|
|
63
63
|
|
|
64
|
-
async def update_harvester_config(harvester_rpc_port:
|
|
64
|
+
async def update_harvester_config(harvester_rpc_port: int | None, root_path: Path, config: dict[str, Any]) -> bool:
|
|
65
65
|
async with get_any_service_client(HarvesterRpcClient, root_path, harvester_rpc_port) as (harvester_client, _):
|
|
66
66
|
return await harvester_client.update_harvester_config(config)
|
|
67
67
|
|
|
@@ -325,6 +325,10 @@ async def test_harvester_has_no_server(
|
|
|
325
325
|
assert harvester_server.webserver is None
|
|
326
326
|
|
|
327
327
|
|
|
328
|
+
test_partial_proof = PartialProof([uint64(256)] * 64)
|
|
329
|
+
test_partial_proof2 = PartialProof([uint64(4096)] * 64)
|
|
330
|
+
|
|
331
|
+
|
|
328
332
|
@pytest.mark.anyio
|
|
329
333
|
async def test_v2_partial_proofs_new_sp_hash(
|
|
330
334
|
farmer_one_harvester_solver: tuple[list[HarvesterService], FarmerService, SolverService, BlockTools],
|
|
@@ -338,9 +342,11 @@ async def test_v2_partial_proofs_new_sp_hash(
|
|
|
338
342
|
challenge_hash=bytes32(b"2" * 32),
|
|
339
343
|
sp_hash=sp_hash,
|
|
340
344
|
plot_identifier="test_plot_id",
|
|
341
|
-
partial_proofs=[
|
|
345
|
+
partial_proofs=[test_partial_proof],
|
|
342
346
|
signage_point_index=uint8(0),
|
|
343
347
|
plot_size=uint8(32),
|
|
348
|
+
strength=uint8(5),
|
|
349
|
+
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
|
|
344
350
|
pool_public_key=None,
|
|
345
351
|
pool_contract_puzzle_hash=bytes32(b"4" * 32),
|
|
346
352
|
plot_public_key=G1Element(),
|
|
@@ -367,9 +373,11 @@ async def test_v2_partial_proofs_missing_sp_hash(
|
|
|
367
373
|
challenge_hash=bytes32(b"2" * 32),
|
|
368
374
|
sp_hash=sp_hash,
|
|
369
375
|
plot_identifier="test_plot_id",
|
|
370
|
-
partial_proofs=[
|
|
376
|
+
partial_proofs=[test_partial_proof],
|
|
371
377
|
signage_point_index=uint8(0),
|
|
372
378
|
plot_size=uint8(32),
|
|
379
|
+
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
|
|
380
|
+
strength=uint8(5),
|
|
373
381
|
pool_public_key=None,
|
|
374
382
|
pool_contract_puzzle_hash=bytes32(b"4" * 32),
|
|
375
383
|
plot_public_key=G1Element(),
|
|
@@ -409,9 +417,14 @@ async def test_v2_partial_proofs_with_existing_sp(
|
|
|
409
417
|
challenge_hash=challenge_hash,
|
|
410
418
|
sp_hash=sp_hash,
|
|
411
419
|
plot_identifier="test_plot_id",
|
|
412
|
-
partial_proofs=[
|
|
420
|
+
partial_proofs=[
|
|
421
|
+
test_partial_proof,
|
|
422
|
+
test_partial_proof2,
|
|
423
|
+
],
|
|
413
424
|
signage_point_index=uint8(0),
|
|
414
425
|
plot_size=uint8(32),
|
|
426
|
+
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
|
|
427
|
+
strength=uint8(5),
|
|
415
428
|
pool_public_key=G1Element(),
|
|
416
429
|
pool_contract_puzzle_hash=bytes32(b"4" * 32),
|
|
417
430
|
plot_public_key=G1Element(),
|
|
@@ -441,9 +454,11 @@ async def test_solution_response_handler(
|
|
|
441
454
|
challenge_hash=challenge_hash,
|
|
442
455
|
sp_hash=sp_hash,
|
|
443
456
|
plot_identifier="test_plot_id",
|
|
444
|
-
partial_proofs=[
|
|
457
|
+
partial_proofs=[test_partial_proof],
|
|
445
458
|
signage_point_index=uint8(0),
|
|
446
459
|
plot_size=uint8(32),
|
|
460
|
+
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
|
|
461
|
+
strength=uint8(5),
|
|
447
462
|
pool_public_key=G1Element(),
|
|
448
463
|
pool_contract_puzzle_hash=bytes32(b"4" * 32),
|
|
449
464
|
plot_public_key=G1Element(),
|
|
@@ -452,7 +467,8 @@ async def test_solution_response_handler(
|
|
|
452
467
|
harvester_peer = await get_harvester_peer(farmer)
|
|
453
468
|
|
|
454
469
|
# manually add pending request
|
|
455
|
-
|
|
470
|
+
key = bytes(partial_proofs.partial_proofs[0])
|
|
471
|
+
farmer.pending_solver_requests[key] = {
|
|
456
472
|
"proof_data": partial_proofs,
|
|
457
473
|
"peer": harvester_peer,
|
|
458
474
|
}
|
|
@@ -477,7 +493,8 @@ async def test_solution_response_handler(
|
|
|
477
493
|
assert original_peer == harvester_peer
|
|
478
494
|
|
|
479
495
|
# verify pending request was removed
|
|
480
|
-
|
|
496
|
+
key = bytes(partial_proofs.partial_proofs[0])
|
|
497
|
+
assert key not in farmer.pending_solver_requests
|
|
481
498
|
|
|
482
499
|
|
|
483
500
|
@pytest.mark.anyio
|
|
@@ -492,7 +509,10 @@ async def test_solution_response_unknown_quality(
|
|
|
492
509
|
solver_peer = await get_solver_peer(farmer)
|
|
493
510
|
|
|
494
511
|
# create solution response with unknown quality
|
|
495
|
-
solution_response = solver_protocol.SolverResponse(
|
|
512
|
+
solution_response = solver_protocol.SolverResponse(
|
|
513
|
+
partial_proof=test_partial_proof,
|
|
514
|
+
proof=b"test_proof",
|
|
515
|
+
)
|
|
496
516
|
|
|
497
517
|
with unittest.mock.patch.object(farmer_api, "new_proof_of_space", new_callable=AsyncMock) as mock_new_proof:
|
|
498
518
|
await farmer_api.solution_response(solution_response, solver_peer)
|
|
@@ -518,9 +538,14 @@ async def test_solution_response_empty_proof(
|
|
|
518
538
|
challenge_hash=challenge_hash,
|
|
519
539
|
sp_hash=sp_hash,
|
|
520
540
|
plot_identifier="test_plot_id",
|
|
521
|
-
partial_proofs=[
|
|
541
|
+
partial_proofs=[
|
|
542
|
+
test_partial_proof,
|
|
543
|
+
test_partial_proof2,
|
|
544
|
+
],
|
|
522
545
|
signage_point_index=uint8(0),
|
|
523
546
|
plot_size=uint8(32),
|
|
547
|
+
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
|
|
548
|
+
strength=uint8(5),
|
|
524
549
|
pool_public_key=G1Element(),
|
|
525
550
|
pool_contract_puzzle_hash=bytes32(b"4" * 32),
|
|
526
551
|
plot_public_key=G1Element(),
|
|
@@ -530,8 +555,9 @@ async def test_solution_response_empty_proof(
|
|
|
530
555
|
harvester_peer.peer_node_id = "harvester_peer"
|
|
531
556
|
|
|
532
557
|
# manually add pending request
|
|
533
|
-
|
|
534
|
-
|
|
558
|
+
key = bytes(partial_proofs.partial_proofs[0])
|
|
559
|
+
farmer.pending_solver_requests[key] = {
|
|
560
|
+
"proof_data": partial_proofs,
|
|
535
561
|
"peer": harvester_peer,
|
|
536
562
|
}
|
|
537
563
|
|
|
@@ -548,7 +574,8 @@ async def test_solution_response_empty_proof(
|
|
|
548
574
|
mock_new_proof.assert_not_called()
|
|
549
575
|
|
|
550
576
|
# verify pending request was removed (cleanup still happens)
|
|
551
|
-
|
|
577
|
+
key = bytes(partial_proofs.partial_proofs[0])
|
|
578
|
+
assert key not in farmer.pending_solver_requests
|
|
552
579
|
|
|
553
580
|
|
|
554
581
|
@pytest.mark.anyio
|
|
@@ -579,9 +606,14 @@ async def test_v2_partial_proofs_solver_exception(
|
|
|
579
606
|
challenge_hash=challenge_hash,
|
|
580
607
|
sp_hash=sp_hash,
|
|
581
608
|
plot_identifier="test_plot_id",
|
|
582
|
-
partial_proofs=[
|
|
609
|
+
partial_proofs=[
|
|
610
|
+
test_partial_proof,
|
|
611
|
+
test_partial_proof2,
|
|
612
|
+
],
|
|
583
613
|
signage_point_index=uint8(0),
|
|
584
614
|
plot_size=uint8(32),
|
|
615
|
+
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
|
|
616
|
+
strength=uint8(5),
|
|
585
617
|
pool_public_key=G1Element(),
|
|
586
618
|
pool_contract_puzzle_hash=bytes32(b"4" * 32),
|
|
587
619
|
plot_public_key=G1Element(),
|
|
@@ -594,4 +626,5 @@ async def test_v2_partial_proofs_solver_exception(
|
|
|
594
626
|
await farmer_api.partial_proofs(partial_proofs, harvester_peer)
|
|
595
627
|
|
|
596
628
|
# verify pending request was cleaned up after exception
|
|
597
|
-
|
|
629
|
+
key = bytes(partial_proofs.partial_proofs[0])
|
|
630
|
+
assert key not in farmer.pending_solver_requests
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from collections.abc import AsyncIterator
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import Any
|
|
5
|
+
from typing import Any
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
8
|
from chia_rs import FullBlock
|
|
@@ -55,33 +55,33 @@ async def farmer_harvester_with_filter_size_9(
|
|
|
55
55
|
async def have_connections() -> bool:
|
|
56
56
|
return len(await farmer_rpc_cl.get_connections()) > 0
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
async with create_block_tools_async(
|
|
59
59
|
constants=test_constants.replace(NUMBER_ZERO_BITS_PLOT_FILTER_V1=uint8(9)), keychain=get_temp_keyring
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
60
|
+
) as local_b_tools:
|
|
61
|
+
new_config = local_b_tools._config
|
|
62
|
+
local_b_tools.change_config(new_config)
|
|
63
|
+
async with setup_farmer_solver_multi_harvester(
|
|
64
|
+
local_b_tools, 1, tmp_path, local_b_tools.constants, start_services=True
|
|
65
|
+
) as (harvesters, farmer_service, _):
|
|
66
|
+
harvester_service = harvesters[0]
|
|
67
|
+
assert farmer_service.rpc_server is not None
|
|
68
|
+
farmer_rpc_cl = await FarmerRpcClient.create(
|
|
69
|
+
self_hostname, farmer_service.rpc_server.listen_port, farmer_service.root_path, farmer_service.config
|
|
70
|
+
)
|
|
71
|
+
assert harvester_service.rpc_server is not None
|
|
72
|
+
harvester_rpc_cl = await HarvesterRpcClient.create(
|
|
73
|
+
self_hostname,
|
|
74
|
+
harvester_service.rpc_server.listen_port,
|
|
75
|
+
harvester_service.root_path,
|
|
76
|
+
harvester_service.config,
|
|
77
|
+
)
|
|
78
|
+
await time_out_assert(15, have_connections, True)
|
|
79
|
+
yield harvester_service, farmer_service._api
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
farmer_rpc_cl.close()
|
|
82
|
+
harvester_rpc_cl.close()
|
|
83
|
+
await farmer_rpc_cl.await_closed()
|
|
84
|
+
await harvester_rpc_cl.await_closed()
|
|
85
85
|
|
|
86
86
|
|
|
87
87
|
@pytest.mark.parametrize(argnames=["peak_height", "eligible_plots"], argvalues=[(5495999, 0), (5496000, 1)])
|
|
@@ -94,7 +94,7 @@ async def test_filter_prefix_bits_with_farmer_harvester(
|
|
|
94
94
|
state_change = None
|
|
95
95
|
state_change_data = None
|
|
96
96
|
|
|
97
|
-
def state_changed_callback(change: str, change_data:
|
|
97
|
+
def state_changed_callback(change: str, change_data: dict[str, Any] | None) -> None:
|
|
98
98
|
nonlocal state_change, state_change_data
|
|
99
99
|
state_change = change
|
|
100
100
|
state_change_data = change_data
|