chia-blockchain 2.5.7rc4__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 +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 +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 +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 +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.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.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.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
chia/plotters/bladebit.py
CHANGED
|
@@ -7,7 +7,7 @@ import os
|
|
|
7
7
|
import sys
|
|
8
8
|
import traceback
|
|
9
9
|
from pathlib import Path
|
|
10
|
-
from typing import Any, Literal
|
|
10
|
+
from typing import Any, Literal
|
|
11
11
|
|
|
12
12
|
from chia.plotters.plotters_util import get_venv_bin, reset_loop_policy_for_windows, run_command, run_plotter
|
|
13
13
|
from chia.plotting.create_plots import resolve_plot_keys
|
|
@@ -23,9 +23,9 @@ def is_bladebit_supported() -> bool:
|
|
|
23
23
|
return sys.platform.startswith("linux") or sys.platform in {"win32", "cygwin", "darwin"}
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
def meets_memory_requirement(plotters_root_path: Path) -> tuple[bool,
|
|
26
|
+
def meets_memory_requirement(plotters_root_path: Path) -> tuple[bool, str | None]:
|
|
27
27
|
have_enough_memory: bool = False
|
|
28
|
-
warning_string:
|
|
28
|
+
warning_string: str | None = None
|
|
29
29
|
|
|
30
30
|
bladebit_executable_path = get_bladebit_executable_path(plotters_root_path)
|
|
31
31
|
if bladebit_executable_path.exists():
|
|
@@ -87,7 +87,7 @@ def get_bladebit_exec_path(with_cuda: bool = False) -> str:
|
|
|
87
87
|
return "bladebit.exe" if sys.platform in {"win32", "cygwin"} else "bladebit"
|
|
88
88
|
|
|
89
89
|
|
|
90
|
-
def get_bladebit_exec_venv_path(with_cuda: bool = False) ->
|
|
90
|
+
def get_bladebit_exec_venv_path(with_cuda: bool = False) -> Path | None:
|
|
91
91
|
venv_bin_path = get_venv_bin()
|
|
92
92
|
if not venv_bin_path:
|
|
93
93
|
return None
|
|
@@ -131,7 +131,7 @@ def get_bladebit_executable_path(plotters_root_path: Path) -> Path:
|
|
|
131
131
|
|
|
132
132
|
def get_bladebit_version(
|
|
133
133
|
plotters_root_path: Path,
|
|
134
|
-
) ->
|
|
134
|
+
) -> tuple[Literal[False], str] | tuple[None, str] | tuple[Literal[True], list[str]]:
|
|
135
135
|
bladebit_executable_path = get_bladebit_executable_path(plotters_root_path)
|
|
136
136
|
if not bladebit_executable_path.exists():
|
|
137
137
|
# (found=False, "")
|
|
@@ -157,7 +157,7 @@ def get_bladebit_version(
|
|
|
157
157
|
return None, str(e)
|
|
158
158
|
|
|
159
159
|
|
|
160
|
-
def get_bladebit_install_info(plotters_root_path: Path) ->
|
|
160
|
+
def get_bladebit_install_info(plotters_root_path: Path) -> dict[str, Any] | None:
|
|
161
161
|
info: dict[str, Any] = {"display_name": "BladeBit Plotter"}
|
|
162
162
|
installed: bool = False
|
|
163
163
|
supported: bool = is_bladebit_supported()
|
|
@@ -165,7 +165,7 @@ def get_bladebit_install_info(plotters_root_path: Path) -> Optional[dict[str, An
|
|
|
165
165
|
|
|
166
166
|
bladebit_executable_path = get_bladebit_executable_path(plotters_root_path)
|
|
167
167
|
if bladebit_executable_path.exists():
|
|
168
|
-
version:
|
|
168
|
+
version: str | None = None
|
|
169
169
|
found, response = get_bladebit_version(plotters_root_path)
|
|
170
170
|
if found:
|
|
171
171
|
version = ".".join(response)
|
chia/plotters/chiapos.py
CHANGED
|
@@ -10,7 +10,7 @@ import importlib.metadata
|
|
|
10
10
|
import logging
|
|
11
11
|
from argparse import Namespace
|
|
12
12
|
from pathlib import Path
|
|
13
|
-
from typing import Any
|
|
13
|
+
from typing import Any
|
|
14
14
|
|
|
15
15
|
from chia.plotting.create_plots import create_plots, resolve_plot_keys
|
|
16
16
|
from chia.plotting.util import Params, add_plot_directory, validate_plot_size
|
|
@@ -18,7 +18,7 @@ from chia.plotting.util import Params, add_plot_directory, validate_plot_size
|
|
|
18
18
|
log = logging.getLogger(__name__)
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
def get_chiapos_install_info() ->
|
|
21
|
+
def get_chiapos_install_info() -> dict[str, Any] | None:
|
|
22
22
|
chiapos_version = importlib.metadata.version("chiapos")
|
|
23
23
|
return {"display_name": "Chia Proof of Space", "version": chiapos_version, "installed": True}
|
|
24
24
|
|
chia/plotters/madmax.py
CHANGED
|
@@ -6,7 +6,7 @@ import os
|
|
|
6
6
|
import sys
|
|
7
7
|
import traceback
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from typing import Any
|
|
9
|
+
from typing import Any
|
|
10
10
|
|
|
11
11
|
from chia.plotters.plotters_util import get_venv_bin, reset_loop_policy_for_windows, run_command, run_plotter
|
|
12
12
|
from chia.plotting.create_plots import resolve_plot_keys
|
|
@@ -32,7 +32,7 @@ def get_madmax_package_path() -> Path:
|
|
|
32
32
|
return Path(os.path.dirname(sys.executable)).joinpath("madmax")
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
def get_madmax_exec_venv_path(ksize: int = 32) ->
|
|
35
|
+
def get_madmax_exec_venv_path(ksize: int = 32) -> Path | None:
|
|
36
36
|
venv_bin_path = get_venv_bin()
|
|
37
37
|
if not venv_bin_path:
|
|
38
38
|
return None
|
|
@@ -100,14 +100,14 @@ def get_madmax_version(plotters_root_path: Path):
|
|
|
100
100
|
return None, f"Failed to determine madmax version: {e} {tb}"
|
|
101
101
|
|
|
102
102
|
|
|
103
|
-
def get_madmax_install_info(plotters_root_path: Path) ->
|
|
103
|
+
def get_madmax_install_info(plotters_root_path: Path) -> dict[str, Any] | None:
|
|
104
104
|
info: dict[str, Any] = {"display_name": "madMAx Plotter"}
|
|
105
105
|
installed: bool = False
|
|
106
106
|
supported: bool = is_madmax_supported()
|
|
107
107
|
|
|
108
108
|
madmax_executable_path = get_madmax_executable_path_for_ksize(plotters_root_path)
|
|
109
109
|
if madmax_executable_path.exists():
|
|
110
|
-
version:
|
|
110
|
+
version: str | None = None
|
|
111
111
|
found, result_msg = get_madmax_version(plotters_root_path)
|
|
112
112
|
if found:
|
|
113
113
|
version = ".".join(result_msg)
|
chia/plotters/plotters.py
CHANGED
|
@@ -5,7 +5,7 @@ import binascii
|
|
|
5
5
|
import os
|
|
6
6
|
from enum import Enum
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import Any
|
|
8
|
+
from typing import Any
|
|
9
9
|
|
|
10
10
|
from chia.plotters.bladebit import get_bladebit_install_info, plot_bladebit
|
|
11
11
|
from chia.plotters.chiapos import get_chiapos_install_info, plot_chia
|
|
@@ -550,9 +550,9 @@ def call_plotters(root_path: Path, args):
|
|
|
550
550
|
def get_available_plotters(root_path) -> dict[str, Any]:
|
|
551
551
|
plotters_root_path: Path = get_plotters_root_path(root_path)
|
|
552
552
|
plotters: dict[str, Any] = {}
|
|
553
|
-
chiapos:
|
|
554
|
-
bladebit:
|
|
555
|
-
madmax:
|
|
553
|
+
chiapos: dict[str, Any] | None = get_chiapos_install_info()
|
|
554
|
+
bladebit: dict[str, Any] | None = get_bladebit_install_info(plotters_root_path)
|
|
555
|
+
madmax: dict[str, Any] | None = get_madmax_install_info(plotters_root_path)
|
|
556
556
|
|
|
557
557
|
if chiapos is not None:
|
|
558
558
|
plotters["chiapos"] = chiapos
|
chia/plotters/plotters_util.py
CHANGED
|
@@ -10,7 +10,7 @@ import sys
|
|
|
10
10
|
from collections.abc import Iterator
|
|
11
11
|
from datetime import datetime
|
|
12
12
|
from pathlib import Path
|
|
13
|
-
from typing import
|
|
13
|
+
from typing import TextIO
|
|
14
14
|
|
|
15
15
|
from chia.util.chia_version import chia_short_version
|
|
16
16
|
from chia.util.config import lock_and_load_config
|
|
@@ -18,8 +18,8 @@ from chia.util.task_referencer import create_referenced_task
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
@contextlib.contextmanager
|
|
21
|
-
def get_optional_beta_plot_log_file(root_path: Path, plotter: str) -> Iterator[
|
|
22
|
-
beta_log_path:
|
|
21
|
+
def get_optional_beta_plot_log_file(root_path: Path, plotter: str) -> Iterator[TextIO | None]:
|
|
22
|
+
beta_log_path: Path | None = None
|
|
23
23
|
with lock_and_load_config(root_path, "config.yaml") as config:
|
|
24
24
|
if config.get("beta", {}).get("enabled", False):
|
|
25
25
|
file_name = f"{plotter}_{datetime.now().strftime('%m_%d_%Y__%H_%M_%S')}.log"
|
chia/plotting/cache.py
CHANGED
|
@@ -5,14 +5,15 @@ import time
|
|
|
5
5
|
import traceback
|
|
6
6
|
from collections.abc import ItemsView, KeysView, ValuesView
|
|
7
7
|
from dataclasses import dataclass, field
|
|
8
|
+
from functools import lru_cache
|
|
8
9
|
from math import ceil
|
|
9
10
|
from pathlib import Path
|
|
10
|
-
from typing import TYPE_CHECKING
|
|
11
|
+
from typing import TYPE_CHECKING
|
|
11
12
|
|
|
12
13
|
if TYPE_CHECKING:
|
|
13
14
|
from chia.plotting.prover import ProverProtocol
|
|
14
15
|
|
|
15
|
-
from chia_rs import G1Element
|
|
16
|
+
from chia_rs import G1Element, PrivateKey
|
|
16
17
|
from chia_rs.sized_bytes import bytes32
|
|
17
18
|
from chia_rs.sized_ints import uint16, uint64
|
|
18
19
|
|
|
@@ -27,13 +28,18 @@ log = logging.getLogger(__name__)
|
|
|
27
28
|
CURRENT_VERSION: int = 2
|
|
28
29
|
|
|
29
30
|
|
|
31
|
+
@lru_cache
|
|
32
|
+
def cached_master_sk_to_local_sk(master: PrivateKey) -> PrivateKey:
|
|
33
|
+
return master_sk_to_local_sk(master)
|
|
34
|
+
|
|
35
|
+
|
|
30
36
|
@streamable
|
|
31
37
|
@dataclass(frozen=True)
|
|
32
38
|
class DiskCacheEntry(Streamable):
|
|
33
39
|
prover_data: bytes
|
|
34
40
|
farmer_public_key: G1Element
|
|
35
|
-
pool_public_key:
|
|
36
|
-
pool_contract_puzzle_hash:
|
|
41
|
+
pool_public_key: G1Element | None
|
|
42
|
+
pool_contract_puzzle_hash: bytes32 | None
|
|
37
43
|
plot_public_key: G1Element
|
|
38
44
|
last_use: uint64
|
|
39
45
|
|
|
@@ -48,8 +54,8 @@ class CacheDataV1(Streamable):
|
|
|
48
54
|
class CacheEntry:
|
|
49
55
|
prover: ProverProtocol
|
|
50
56
|
farmer_public_key: G1Element
|
|
51
|
-
pool_public_key:
|
|
52
|
-
pool_contract_puzzle_hash:
|
|
57
|
+
pool_public_key: G1Element | None
|
|
58
|
+
pool_contract_puzzle_hash: bytes32 | None
|
|
53
59
|
plot_public_key: G1Element
|
|
54
60
|
last_use: float
|
|
55
61
|
|
|
@@ -61,15 +67,15 @@ class CacheEntry:
|
|
|
61
67
|
local_master_sk,
|
|
62
68
|
) = parse_plot_info(prover.get_memo())
|
|
63
69
|
|
|
64
|
-
pool_public_key:
|
|
65
|
-
pool_contract_puzzle_hash:
|
|
70
|
+
pool_public_key: G1Element | None = None
|
|
71
|
+
pool_contract_puzzle_hash: bytes32 | None = None
|
|
66
72
|
if isinstance(pool_public_key_or_puzzle_hash, G1Element):
|
|
67
73
|
pool_public_key = pool_public_key_or_puzzle_hash
|
|
68
74
|
else:
|
|
69
75
|
assert isinstance(pool_public_key_or_puzzle_hash, bytes32)
|
|
70
76
|
pool_contract_puzzle_hash = pool_public_key_or_puzzle_hash
|
|
71
77
|
|
|
72
|
-
local_sk =
|
|
78
|
+
local_sk = cached_master_sk_to_local_sk(local_master_sk)
|
|
73
79
|
|
|
74
80
|
plot_public_key: G1Element = generate_plot_public_key(
|
|
75
81
|
local_sk.get_g1(), farmer_public_key, pool_contract_puzzle_hash is not None
|
|
@@ -165,9 +171,9 @@ class Cache:
|
|
|
165
171
|
# it's here to filter invalid cache entries coming from bladebit RAM plotting.
|
|
166
172
|
# Related: - https://github.com/Chia-Network/chia-blockchain/issues/13084
|
|
167
173
|
# - https://github.com/Chia-Network/chiapos/pull/337
|
|
168
|
-
|
|
169
|
-
if
|
|
170
|
-
k =
|
|
174
|
+
param = new_entry.prover.get_param()
|
|
175
|
+
if param.size_v1 is not None:
|
|
176
|
+
k = param.size_v1
|
|
171
177
|
if k not in estimated_c2_sizes:
|
|
172
178
|
estimated_c2_sizes[k] = ceil(2**k / 100_000_000) * ceil(k / 8)
|
|
173
179
|
memo_size = len(new_entry.prover.get_memo())
|
|
@@ -190,7 +196,7 @@ class Cache:
|
|
|
190
196
|
)
|
|
191
197
|
else:
|
|
192
198
|
self._data[Path(path)] = new_entry
|
|
193
|
-
elif
|
|
199
|
+
elif param.strength_v2 is not None:
|
|
194
200
|
# TODO: todo_v2_plots validate prover size
|
|
195
201
|
self._data[Path(path)] = new_entry
|
|
196
202
|
|
|
@@ -212,7 +218,7 @@ class Cache:
|
|
|
212
218
|
def items(self) -> ItemsView[Path, CacheEntry]:
|
|
213
219
|
return self._data.items()
|
|
214
220
|
|
|
215
|
-
def get(self, path: Path) ->
|
|
221
|
+
def get(self, path: Path) -> CacheEntry | None:
|
|
216
222
|
return self._data.get(path)
|
|
217
223
|
|
|
218
224
|
def changed(self) -> bool:
|
chia/plotting/check_plots.py
CHANGED
|
@@ -7,16 +7,14 @@ from collections.abc import Sequence
|
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
from threading import Lock
|
|
9
9
|
from time import monotonic, sleep
|
|
10
|
-
from typing import Optional, Union
|
|
11
10
|
|
|
12
|
-
from chia_rs import G1Element
|
|
13
|
-
from chia_rs.sized_bytes import bytes32
|
|
11
|
+
from chia_rs import G1Element, solve_proof
|
|
14
12
|
from chia_rs.sized_ints import uint8, uint32
|
|
15
13
|
from chiapos import Verifier
|
|
16
14
|
|
|
17
15
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
18
16
|
from chia.plotting.manager import PlotManager
|
|
19
|
-
from chia.plotting.prover import
|
|
17
|
+
from chia.plotting.prover import QualityProtocol, V1Prover, V2Prover, V2Quality
|
|
20
18
|
from chia.plotting.util import (
|
|
21
19
|
PlotInfo,
|
|
22
20
|
PlotRefreshEvents,
|
|
@@ -26,10 +24,6 @@ from chia.plotting.util import (
|
|
|
26
24
|
get_plot_filenames,
|
|
27
25
|
parse_plot_info,
|
|
28
26
|
)
|
|
29
|
-
from chia.types.blockchain_format.proof_of_space import (
|
|
30
|
-
quality_for_partial_proof,
|
|
31
|
-
solve_proof,
|
|
32
|
-
)
|
|
33
27
|
from chia.util.bech32m import encode_puzzle_hash
|
|
34
28
|
from chia.util.config import load_config
|
|
35
29
|
from chia.util.cpu import available_logical_cores
|
|
@@ -46,8 +40,8 @@ def plot_refresh_callback(event: PlotRefreshEvents, refresh_result: PlotRefreshR
|
|
|
46
40
|
|
|
47
41
|
def check_plots(
|
|
48
42
|
root_path: Path,
|
|
49
|
-
num:
|
|
50
|
-
challenge_start:
|
|
43
|
+
num: int | None,
|
|
44
|
+
challenge_start: int | None,
|
|
51
45
|
grep_string: str,
|
|
52
46
|
list_duplicates: bool,
|
|
53
47
|
debug_show_memo: bool,
|
|
@@ -61,6 +55,7 @@ def check_plots(
|
|
|
61
55
|
open_no_key_filenames=True,
|
|
62
56
|
refresh_parameter=plot_refresh_parameter,
|
|
63
57
|
refresh_callback=plot_refresh_callback,
|
|
58
|
+
constants=DEFAULT_CONSTANTS,
|
|
64
59
|
)
|
|
65
60
|
|
|
66
61
|
context_count = config["harvester"].get("parallel_decompressor_count", 5)
|
|
@@ -142,7 +137,7 @@ def check_plots(
|
|
|
142
137
|
log.info("")
|
|
143
138
|
log.info(f"Starting to test each plot with {num} challenges each\n")
|
|
144
139
|
total_good_plots_v1: Counter[uint8] = Counter()
|
|
145
|
-
total_good_plots_v2:
|
|
140
|
+
total_good_plots_v2: int = 0
|
|
146
141
|
total_size = 0
|
|
147
142
|
bad_plots_list: list[Path] = []
|
|
148
143
|
|
|
@@ -165,7 +160,7 @@ def check_plots(
|
|
|
165
160
|
local_sk = master_sk_to_local_sk(local_master_sk)
|
|
166
161
|
|
|
167
162
|
with lock:
|
|
168
|
-
log.info(f"Testing plot {plot_path} k={pr.
|
|
163
|
+
log.info(f"Testing plot {plot_path} k={pr.get_param()}")
|
|
169
164
|
if plot_info.pool_public_key is not None:
|
|
170
165
|
log.info(f"\t{'Pool public key:':<23} {plot_info.pool_public_key}")
|
|
171
166
|
if plot_info.pool_contract_puzzle_hash is not None:
|
|
@@ -176,18 +171,13 @@ def check_plots(
|
|
|
176
171
|
|
|
177
172
|
total_proofs = 0
|
|
178
173
|
caught_exception: bool = False
|
|
179
|
-
version = pr.get_version()
|
|
180
174
|
for i in range(num_start, num_end):
|
|
181
175
|
challenge = std_hash(i.to_bytes(32, "big"))
|
|
182
|
-
|
|
183
|
-
proofs: Sequence[Union[bytes32, bytes]]
|
|
176
|
+
qualities: Sequence[QualityProtocol]
|
|
184
177
|
# Some plot errors cause get_qualities_for_challenge to throw a RuntimeError
|
|
185
178
|
try:
|
|
186
179
|
quality_start_time = round(monotonic() * 1000)
|
|
187
|
-
|
|
188
|
-
proofs = pr.get_qualities_for_challenge(challenge)
|
|
189
|
-
else:
|
|
190
|
-
proofs = pr.get_partial_proofs_for_challenge(challenge, DEFAULT_CONSTANTS.PLOT_STRENGTH_INITIAL)
|
|
180
|
+
qualities = pr.get_qualities_for_challenge(challenge, DEFAULT_CONSTANTS.QUALITY_PROOF_SCAN_FILTER)
|
|
191
181
|
quality_spent_time = round(monotonic() * 1000) - quality_start_time
|
|
192
182
|
if quality_spent_time > 8000:
|
|
193
183
|
log.warning(
|
|
@@ -215,18 +205,22 @@ def check_plots(
|
|
|
215
205
|
caught_exception = True
|
|
216
206
|
break
|
|
217
207
|
|
|
218
|
-
for index,
|
|
208
|
+
for index, quality in enumerate(qualities):
|
|
219
209
|
# Other plot errors cause get_full_proof or validate_proof to throw an AssertionError
|
|
220
210
|
try:
|
|
221
211
|
proof_start_time = round(monotonic() * 1000)
|
|
222
|
-
|
|
223
|
-
|
|
212
|
+
quality_str = quality.get_string()
|
|
213
|
+
|
|
214
|
+
if isinstance(pr, V1Prover):
|
|
224
215
|
full_proof = pr.get_full_proof(challenge, index, parallel_read)
|
|
225
216
|
proof_spent_time = round(monotonic() * 1000) - proof_start_time
|
|
226
|
-
|
|
227
|
-
|
|
217
|
+
elif isinstance(pr, V2Prover):
|
|
218
|
+
assert isinstance(quality, V2Quality)
|
|
219
|
+
partial_proof = pr.get_partial_proof(quality)
|
|
228
220
|
proof_spent_time = round(monotonic() * 1000) - proof_start_time
|
|
229
|
-
full_proof = solve_proof(
|
|
221
|
+
full_proof = solve_proof(
|
|
222
|
+
partial_proof, pr.get_id(), pr.get_strength(), DEFAULT_CONSTANTS.PLOT_SIZE_V2
|
|
223
|
+
)
|
|
230
224
|
|
|
231
225
|
if proof_spent_time > 15000:
|
|
232
226
|
log.warning(
|
|
@@ -236,7 +230,7 @@ def check_plots(
|
|
|
236
230
|
else:
|
|
237
231
|
log.info(f"\tFinding proof took: {proof_spent_time} ms. Filepath: {plot_path}")
|
|
238
232
|
|
|
239
|
-
ver_quality_str = v.validate_proof(pr.get_id(), pr.
|
|
233
|
+
ver_quality_str = v.validate_proof(pr.get_id(), pr.get_param().size_v1, challenge, full_proof)
|
|
240
234
|
if quality_str == ver_quality_str:
|
|
241
235
|
total_proofs += 1
|
|
242
236
|
else:
|
|
@@ -257,15 +251,13 @@ def check_plots(
|
|
|
257
251
|
f"\tProofs {total_proofs} / {challenges}, {round(total_proofs / float(challenges), 4)}. "
|
|
258
252
|
f"Filepath: {plot_path}"
|
|
259
253
|
)
|
|
260
|
-
|
|
261
|
-
if
|
|
262
|
-
k =
|
|
254
|
+
param = pr.get_param()
|
|
255
|
+
if param.size_v1 is not None:
|
|
256
|
+
k = param.size_v1
|
|
263
257
|
total_good_plots_v1[k] += 1
|
|
264
258
|
total_size += plot_path.stat().st_size
|
|
265
259
|
else:
|
|
266
|
-
|
|
267
|
-
k = version_and_size.size_v2
|
|
268
|
-
total_good_plots_v2[k] += 1
|
|
260
|
+
total_good_plots_v2 += 1
|
|
269
261
|
total_size += plot_path.stat().st_size
|
|
270
262
|
else:
|
|
271
263
|
log.error(
|
|
@@ -288,12 +280,11 @@ def check_plots(
|
|
|
288
280
|
log.info("")
|
|
289
281
|
log.info("")
|
|
290
282
|
log.info("Summary")
|
|
291
|
-
total_plots: int = sum(list(total_good_plots_v1.values()) +
|
|
283
|
+
total_plots: int = sum(list(total_good_plots_v1.values())) + total_good_plots_v2
|
|
292
284
|
log.info(f"Found {total_plots} valid plots, total size {total_size / (1024 * 1024 * 1024 * 1024):.5f} TiB")
|
|
293
285
|
for k, count in sorted(dict(total_good_plots_v1).items()):
|
|
294
286
|
log.info(f"{count} v1 plots of size {k}")
|
|
295
|
-
|
|
296
|
-
log.info(f"{count} v2 plots of size {k}")
|
|
287
|
+
log.info(f"{total_good_plots_v2} v2 plots")
|
|
297
288
|
grand_total_bad = len(bad_plots_list) + len(plot_manager.failed_to_open_filenames)
|
|
298
289
|
if grand_total_bad > 0:
|
|
299
290
|
log.warning(f"{grand_total_bad} invalid plots found:")
|
chia/plotting/create_plots.py
CHANGED
|
@@ -3,7 +3,6 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
from datetime import datetime
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Optional
|
|
7
6
|
|
|
8
7
|
from chia_rs import AugSchemeMPL, G1Element, PrivateKey
|
|
9
8
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -27,15 +26,15 @@ class PlotKeys:
|
|
|
27
26
|
def __init__(
|
|
28
27
|
self,
|
|
29
28
|
farmer_public_key: G1Element,
|
|
30
|
-
pool_public_key:
|
|
31
|
-
pool_contract_address:
|
|
29
|
+
pool_public_key: G1Element | None,
|
|
30
|
+
pool_contract_address: str | None,
|
|
32
31
|
):
|
|
33
32
|
self.farmer_public_key = farmer_public_key
|
|
34
33
|
self.pool_public_key = pool_public_key
|
|
35
34
|
self.pool_contract_address = pool_contract_address
|
|
36
35
|
|
|
37
36
|
@property
|
|
38
|
-
def pool_contract_puzzle_hash(self) ->
|
|
37
|
+
def pool_contract_puzzle_hash(self) -> bytes32 | None:
|
|
39
38
|
if self.pool_contract_address is not None:
|
|
40
39
|
return decode_puzzle_hash(self.pool_contract_address)
|
|
41
40
|
return None
|
|
@@ -44,10 +43,10 @@ class PlotKeys:
|
|
|
44
43
|
class PlotKeysResolver:
|
|
45
44
|
def __init__(
|
|
46
45
|
self,
|
|
47
|
-
farmer_public_key:
|
|
48
|
-
alt_fingerprint:
|
|
49
|
-
pool_public_key:
|
|
50
|
-
pool_contract_address:
|
|
46
|
+
farmer_public_key: str | None,
|
|
47
|
+
alt_fingerprint: int | None,
|
|
48
|
+
pool_public_key: str | None,
|
|
49
|
+
pool_contract_address: str | None,
|
|
51
50
|
root_path: Path,
|
|
52
51
|
log: logging.Logger,
|
|
53
52
|
connect_to_daemon: bool = False,
|
|
@@ -59,13 +58,13 @@ class PlotKeysResolver:
|
|
|
59
58
|
self.root_path = root_path
|
|
60
59
|
self.log = log
|
|
61
60
|
self.connect_to_daemon = connect_to_daemon
|
|
62
|
-
self.resolved_keys:
|
|
61
|
+
self.resolved_keys: PlotKeys | None = None
|
|
63
62
|
|
|
64
63
|
async def resolve(self) -> PlotKeys:
|
|
65
64
|
if self.resolved_keys is not None:
|
|
66
65
|
return self.resolved_keys
|
|
67
66
|
|
|
68
|
-
keychain_proxy:
|
|
67
|
+
keychain_proxy: KeychainProxy | None = None
|
|
69
68
|
try:
|
|
70
69
|
if self.connect_to_daemon:
|
|
71
70
|
keychain_proxy = await connect_to_keychain_and_validate(self.root_path, self.log)
|
|
@@ -78,7 +77,7 @@ class PlotKeysResolver:
|
|
|
78
77
|
else:
|
|
79
78
|
farmer_public_key = await self.get_farmer_public_key(keychain_proxy)
|
|
80
79
|
|
|
81
|
-
pool_public_key:
|
|
80
|
+
pool_public_key: G1Element | None = None
|
|
82
81
|
if self.pool_public_key is not None:
|
|
83
82
|
if self.pool_contract_address is not None:
|
|
84
83
|
raise RuntimeError("Choose one of pool_contract_address and pool_public_key")
|
|
@@ -93,8 +92,8 @@ class PlotKeysResolver:
|
|
|
93
92
|
await keychain_proxy.close()
|
|
94
93
|
return self.resolved_keys
|
|
95
94
|
|
|
96
|
-
async def get_sk(self, keychain_proxy:
|
|
97
|
-
sk:
|
|
95
|
+
async def get_sk(self, keychain_proxy: KeychainProxy | None = None) -> PrivateKey | None:
|
|
96
|
+
sk: PrivateKey | None = None
|
|
98
97
|
if keychain_proxy:
|
|
99
98
|
try:
|
|
100
99
|
if self.alt_fingerprint is not None:
|
|
@@ -104,7 +103,7 @@ class PlotKeysResolver:
|
|
|
104
103
|
except Exception as e:
|
|
105
104
|
log.error(f"Keychain proxy failed with error: {e}")
|
|
106
105
|
else:
|
|
107
|
-
sk_ent:
|
|
106
|
+
sk_ent: tuple[PrivateKey, bytes] | None = None
|
|
108
107
|
keychain: Keychain = Keychain()
|
|
109
108
|
if self.alt_fingerprint is not None:
|
|
110
109
|
sk_ent = keychain.get_private_key_by_fingerprint(self.alt_fingerprint)
|
|
@@ -115,16 +114,16 @@ class PlotKeysResolver:
|
|
|
115
114
|
sk = sk_ent[0]
|
|
116
115
|
return sk
|
|
117
116
|
|
|
118
|
-
async def get_farmer_public_key(self, keychain_proxy:
|
|
119
|
-
sk:
|
|
117
|
+
async def get_farmer_public_key(self, keychain_proxy: KeychainProxy | None = None) -> G1Element:
|
|
118
|
+
sk: PrivateKey | None = await self.get_sk(keychain_proxy)
|
|
120
119
|
if sk is None:
|
|
121
120
|
raise RuntimeError(
|
|
122
121
|
"No keys, please run 'chia keys add', 'chia keys generate' or provide a public key with -f"
|
|
123
122
|
)
|
|
124
123
|
return master_sk_to_farmer_sk(sk).get_g1()
|
|
125
124
|
|
|
126
|
-
async def get_pool_public_key(self, keychain_proxy:
|
|
127
|
-
sk:
|
|
125
|
+
async def get_pool_public_key(self, keychain_proxy: KeychainProxy | None = None) -> G1Element:
|
|
126
|
+
sk: PrivateKey | None = await self.get_sk(keychain_proxy)
|
|
128
127
|
if sk is None:
|
|
129
128
|
raise RuntimeError(
|
|
130
129
|
"No keys, please run 'chia keys add', 'chia keys generate' or provide a public key with -p"
|
|
@@ -133,10 +132,10 @@ class PlotKeysResolver:
|
|
|
133
132
|
|
|
134
133
|
|
|
135
134
|
async def resolve_plot_keys(
|
|
136
|
-
farmer_public_key:
|
|
137
|
-
alt_fingerprint:
|
|
138
|
-
pool_public_key:
|
|
139
|
-
pool_contract_address:
|
|
135
|
+
farmer_public_key: str | None,
|
|
136
|
+
alt_fingerprint: int | None,
|
|
137
|
+
pool_public_key: str | None,
|
|
138
|
+
pool_contract_address: str | None,
|
|
140
139
|
root_path: Path,
|
|
141
140
|
log: logging.Logger,
|
|
142
141
|
connect_to_daemon: bool = False,
|
|
@@ -150,7 +149,7 @@ async def create_plots(
|
|
|
150
149
|
args: Params,
|
|
151
150
|
keys: PlotKeys,
|
|
152
151
|
use_datetime: bool = True,
|
|
153
|
-
test_private_keys:
|
|
152
|
+
test_private_keys: list[PrivateKey] | None = None,
|
|
154
153
|
) -> tuple[dict[bytes32, Path], dict[bytes32, Path]]:
|
|
155
154
|
if args.tmp2_dir is None:
|
|
156
155
|
args.tmp2_dir = args.tmp_dir
|
chia/plotting/manager.py
CHANGED
|
@@ -4,11 +4,12 @@ import logging
|
|
|
4
4
|
import threading
|
|
5
5
|
import time
|
|
6
6
|
import traceback
|
|
7
|
+
from collections.abc import Callable
|
|
7
8
|
from concurrent.futures.thread import ThreadPoolExecutor
|
|
8
9
|
from pathlib import Path
|
|
9
|
-
from typing import Any
|
|
10
|
+
from typing import Any
|
|
10
11
|
|
|
11
|
-
from chia_rs import G1Element
|
|
12
|
+
from chia_rs import ConsensusConstants, G1Element
|
|
12
13
|
from chiapos import decompressor_context_queue
|
|
13
14
|
|
|
14
15
|
from chia.consensus.pos_quality import UI_ACTUAL_SPACE_CONSTANT_FACTOR, _expected_plot_size
|
|
@@ -36,24 +37,26 @@ class PlotManager:
|
|
|
36
37
|
farmer_public_keys: list[G1Element]
|
|
37
38
|
pool_public_keys: list[G1Element]
|
|
38
39
|
cache: Cache
|
|
39
|
-
match_str:
|
|
40
|
+
match_str: str | None
|
|
40
41
|
open_no_key_filenames: bool
|
|
41
42
|
last_refresh_time: float
|
|
42
43
|
refresh_parameter: PlotsRefreshParameter
|
|
43
44
|
log: Any
|
|
44
45
|
_lock: threading.Lock
|
|
45
|
-
_refresh_thread:
|
|
46
|
+
_refresh_thread: threading.Thread | None
|
|
46
47
|
_refreshing_enabled: bool
|
|
47
48
|
_refresh_callback: Callable
|
|
48
49
|
_initial: bool
|
|
49
50
|
max_compression_level_allowed: int
|
|
50
51
|
context_count: int
|
|
52
|
+
constants: ConsensusConstants
|
|
51
53
|
|
|
52
54
|
def __init__(
|
|
53
55
|
self,
|
|
54
56
|
root_path: Path,
|
|
55
57
|
refresh_callback: Callable,
|
|
56
|
-
|
|
58
|
+
constants: ConsensusConstants,
|
|
59
|
+
match_str: str | None = None,
|
|
57
60
|
open_no_key_filenames: bool = False,
|
|
58
61
|
refresh_parameter: PlotsRefreshParameter = PlotsRefreshParameter(),
|
|
59
62
|
):
|
|
@@ -82,6 +85,7 @@ class PlotManager:
|
|
|
82
85
|
self._initial = True
|
|
83
86
|
self.max_compression_level_allowed = 0
|
|
84
87
|
self.context_count = 0
|
|
88
|
+
self.constants = constants
|
|
85
89
|
|
|
86
90
|
def __enter__(self):
|
|
87
91
|
self._lock.acquire()
|
|
@@ -278,8 +282,8 @@ class PlotManager:
|
|
|
278
282
|
f"total_result.removed {len(total_result.removed)}, "
|
|
279
283
|
f"total_duration {total_result.duration:.2f} seconds"
|
|
280
284
|
)
|
|
281
|
-
except Exception
|
|
282
|
-
log.
|
|
285
|
+
except Exception:
|
|
286
|
+
log.exception("_refresh_callback raised")
|
|
283
287
|
self.reset()
|
|
284
288
|
|
|
285
289
|
def refresh_batch(self, plot_paths: list[Path], plot_directories: set[Path]) -> PlotRefreshResult:
|
|
@@ -292,7 +296,7 @@ class PlotManager:
|
|
|
292
296
|
if self.match_str is not None:
|
|
293
297
|
log.info(f'Only loading plots that contain "{self.match_str}" in the file or directory name')
|
|
294
298
|
|
|
295
|
-
def process_file(file_path: Path) ->
|
|
299
|
+
def process_file(file_path: Path) -> PlotInfo | None:
|
|
296
300
|
if not self._refreshing_enabled:
|
|
297
301
|
return None
|
|
298
302
|
filename_str = str(file_path)
|
|
@@ -309,7 +313,7 @@ class PlotManager:
|
|
|
309
313
|
if file_path in self.plots:
|
|
310
314
|
return self.plots[file_path]
|
|
311
315
|
|
|
312
|
-
entry:
|
|
316
|
+
entry: tuple[str, set[str]] | None = self.plot_filename_paths.get(file_path.name)
|
|
313
317
|
if entry is not None:
|
|
314
318
|
_loaded_parent, duplicates = entry
|
|
315
319
|
if str(file_path.parent) in duplicates:
|
|
@@ -328,17 +332,20 @@ class PlotManager:
|
|
|
328
332
|
|
|
329
333
|
log.debug(f"process_file {file_path!s}")
|
|
330
334
|
|
|
331
|
-
expected_size =
|
|
335
|
+
expected_size = (
|
|
336
|
+
_expected_plot_size(prover.get_param(), self.constants) * UI_ACTUAL_SPACE_CONSTANT_FACTOR
|
|
337
|
+
)
|
|
332
338
|
|
|
333
339
|
# TODO: consider checking if the file was just written to (which would mean that the file is still
|
|
334
340
|
# being copied). A segfault might happen in this edge case.
|
|
335
341
|
|
|
336
|
-
|
|
342
|
+
param = prover.get_param()
|
|
337
343
|
level = prover.get_compression_level()
|
|
338
344
|
if (
|
|
339
345
|
level == 0
|
|
340
346
|
and stat_info.st_size < 0.98 * expected_size
|
|
341
|
-
and
|
|
347
|
+
and param.size_v1 is not None
|
|
348
|
+
and param.size_v1 >= 30
|
|
342
349
|
):
|
|
343
350
|
log.warning(
|
|
344
351
|
f"Not farming plot {file_path}. "
|
|
@@ -388,7 +395,7 @@ class PlotManager:
|
|
|
388
395
|
self.no_key_filenames.remove(file_path)
|
|
389
396
|
|
|
390
397
|
with self.plot_filename_paths_lock:
|
|
391
|
-
paths:
|
|
398
|
+
paths: tuple[str, set[str]] | None = self.plot_filename_paths.get(file_path.name)
|
|
392
399
|
if paths is None:
|
|
393
400
|
paths = (str(Path(cache_entry.prover.get_filename()).parent), set())
|
|
394
401
|
self.plot_filename_paths[file_path.name] = paths
|
|
@@ -419,7 +426,7 @@ class PlotManager:
|
|
|
419
426
|
log.error(f"Failed to open file {file_path}. {e} {tb}")
|
|
420
427
|
self.failed_to_open_filenames[file_path] = int(time.time())
|
|
421
428
|
return None
|
|
422
|
-
log.debug(f"Found plot {file_path} of size {new_plot_info.prover.
|
|
429
|
+
log.debug(f"Found plot {file_path} of size {new_plot_info.prover.get_param()}, cache_hit: {cache_hit}")
|
|
423
430
|
|
|
424
431
|
return new_plot_info
|
|
425
432
|
|