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
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Optional
|
|
4
|
-
|
|
5
3
|
import pytest
|
|
6
|
-
from chia_rs import BlockRecord, FullBlock, SubEpochSummary, UnfinishedBlock
|
|
4
|
+
from chia_rs import BlockRecord, FullBlock, SubEpochSummary, UnfinishedBlock, is_overflow_block
|
|
7
5
|
from chia_rs.sized_bytes import bytes32
|
|
8
6
|
from chia_rs.sized_ints import uint64, uint128
|
|
9
7
|
|
|
@@ -22,6 +20,13 @@ from chia.simulator.wallet_tools import WalletTool
|
|
|
22
20
|
from chia.timelord.timelord_api import TimelordAPI
|
|
23
21
|
|
|
24
22
|
|
|
23
|
+
def last_unfinished(tl: TimelordAPI, *, overflow: bool) -> timelord_protocol.NewUnfinishedBlockTimelord:
|
|
24
|
+
if overflow:
|
|
25
|
+
return tl.timelord.overflow_blocks[-1]
|
|
26
|
+
else:
|
|
27
|
+
return tl.timelord.unfinished_blocks[-1]
|
|
28
|
+
|
|
29
|
+
|
|
25
30
|
class TestNewPeak:
|
|
26
31
|
@pytest.mark.anyio
|
|
27
32
|
async def test_timelord_new_peak_basic(
|
|
@@ -127,7 +132,8 @@ class TestNewPeak:
|
|
|
127
132
|
)
|
|
128
133
|
await timelord_api.new_unfinished_block_timelord(timelord_unf_block)
|
|
129
134
|
|
|
130
|
-
|
|
135
|
+
overflow = is_overflow_block(bt.constants, timelord_unf_block.reward_chain_block.signage_point_index)
|
|
136
|
+
assert last_unfinished(timelord_api, overflow=overflow).get_hash() == timelord_unf_block.get_hash()
|
|
131
137
|
new_peak = timelord_peak_from_block(b1, block_2)
|
|
132
138
|
assert timelord_unf_block.reward_chain_block.total_iters <= new_peak.reward_chain_block.total_iters
|
|
133
139
|
await timelord_api.new_peak_timelord(new_peak)
|
|
@@ -193,7 +199,9 @@ class TestNewPeak:
|
|
|
193
199
|
await get_rc_prev(b1, block_1),
|
|
194
200
|
)
|
|
195
201
|
await timelord_api.new_unfinished_block_timelord(timelord_unf_block)
|
|
196
|
-
|
|
202
|
+
|
|
203
|
+
overflow = is_overflow_block(bt.constants, timelord_unf_block.reward_chain_block.signage_point_index)
|
|
204
|
+
assert last_unfinished(timelord_api, overflow=overflow).get_hash() == timelord_unf_block.get_hash()
|
|
197
205
|
new_peak = timelord_peak_from_block(b2, block_2)
|
|
198
206
|
|
|
199
207
|
# timelord knows unfinished block_1 that has lower iterations,
|
|
@@ -208,7 +216,8 @@ class TestNewPeak:
|
|
|
208
216
|
== peak.reward_chain_block.get_hash()
|
|
209
217
|
)
|
|
210
218
|
# check unfinished block_1 is still in cache
|
|
211
|
-
|
|
219
|
+
overflow = is_overflow_block(bt.constants, timelord_unf_block.reward_chain_block.signage_point_index)
|
|
220
|
+
assert last_unfinished(timelord_api, overflow=overflow).get_hash() == timelord_unf_block.get_hash()
|
|
212
221
|
|
|
213
222
|
# full node gets block_1 unfinished
|
|
214
223
|
block_1_unf = UnfinishedBlock(
|
|
@@ -371,7 +380,8 @@ class TestNewPeak:
|
|
|
371
380
|
|
|
372
381
|
# add unfinished and make sure we cache it
|
|
373
382
|
await timelord_api.new_unfinished_block_timelord(timelord_unf_block)
|
|
374
|
-
|
|
383
|
+
overflow = is_overflow_block(bt.constants, timelord_unf_block.reward_chain_block.signage_point_index)
|
|
384
|
+
assert last_unfinished(timelord_api, overflow=overflow).get_hash() == timelord_unf_block.get_hash()
|
|
375
385
|
new_peak = timelord_peak_from_block(b1, block_1)
|
|
376
386
|
assert timelord_unf_block.reward_chain_block.total_iters >= new_peak.reward_chain_block.total_iters
|
|
377
387
|
await timelord_api.new_peak_timelord(new_peak)
|
|
@@ -531,9 +541,10 @@ class TestNewPeak:
|
|
|
531
541
|
)
|
|
532
542
|
|
|
533
543
|
await timelord_api.new_unfinished_block_timelord(timelord_unf_block)
|
|
534
|
-
|
|
544
|
+
overflow = is_overflow_block(bt.constants, timelord_unf_block.reward_chain_block.signage_point_index)
|
|
545
|
+
assert last_unfinished(timelord_api, overflow=overflow).get_hash() == timelord_unf_block.get_hash()
|
|
535
546
|
assert (
|
|
536
|
-
timelord_api.
|
|
547
|
+
last_unfinished(timelord_api, overflow=overflow).reward_chain_block.get_hash()
|
|
537
548
|
== timelord_unf_block.reward_chain_block.get_hash()
|
|
538
549
|
)
|
|
539
550
|
|
|
@@ -579,7 +590,7 @@ def get_recent_reward_challenges(blockchain: Blockchain) -> list[tuple[bytes32,
|
|
|
579
590
|
if peak is None:
|
|
580
591
|
return []
|
|
581
592
|
recent_rc: list[tuple[bytes32, uint128]] = []
|
|
582
|
-
curr:
|
|
593
|
+
curr: BlockRecord | None = peak
|
|
583
594
|
while curr is not None and len(recent_rc) < 2 * blockchain.constants.MAX_SUB_SLOT_BLOCKS:
|
|
584
595
|
if curr != peak:
|
|
585
596
|
recent_rc.append((curr.reward_infusion_new_challenge, curr.total_iters))
|
|
@@ -602,7 +613,7 @@ def timelord_peak_from_block(
|
|
|
602
613
|
) -> timelord_protocol.NewPeakTimelord:
|
|
603
614
|
peak = blockchain.block_record(block.header_hash)
|
|
604
615
|
_, difficulty = get_next_sub_slot_iters_and_difficulty(blockchain.constants, False, peak, blockchain)
|
|
605
|
-
ses:
|
|
616
|
+
ses: SubEpochSummary | None = next_sub_epoch_summary(
|
|
606
617
|
blockchain.constants, blockchain, peak.required_iters, block, True
|
|
607
618
|
)
|
|
608
619
|
|
|
@@ -34,8 +34,6 @@ constants = DEFAULT_CONSTANTS.replace(
|
|
|
34
34
|
),
|
|
35
35
|
MEMPOOL_BLOCK_BUFFER=uint8(10),
|
|
36
36
|
MIN_PLOT_SIZE_V1=uint8(18),
|
|
37
|
-
# TODO: todo_v2_plots decide on v2 test plot k-size
|
|
38
|
-
MIN_PLOT_SIZE_V2=uint8(18),
|
|
39
37
|
)
|
|
40
38
|
retire_bytes = (
|
|
41
39
|
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
chia/_tests/util/benchmarks.py
CHANGED
chia/_tests/util/blockchain.py
CHANGED
|
@@ -5,10 +5,10 @@ import os
|
|
|
5
5
|
import pickle # noqa: S403 # TODO: use explicit serialization instead of pickle
|
|
6
6
|
from collections.abc import AsyncIterator
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import Optional
|
|
9
8
|
|
|
10
9
|
from chia_rs import ConsensusConstants, FullBlock
|
|
11
10
|
from chia_rs.sized_ints import uint64
|
|
11
|
+
from filelock import FileLock
|
|
12
12
|
|
|
13
13
|
from chia.consensus.block_height_map import BlockHeightMap
|
|
14
14
|
from chia.consensus.blockchain import Blockchain
|
|
@@ -48,8 +48,8 @@ def persistent_blocks(
|
|
|
48
48
|
normalized_to_identity_icc_eos: bool = False,
|
|
49
49
|
normalized_to_identity_cc_sp: bool = False,
|
|
50
50
|
normalized_to_identity_cc_ip: bool = False,
|
|
51
|
-
block_list_input:
|
|
52
|
-
time_per_block:
|
|
51
|
+
block_list_input: list[FullBlock] | None = None,
|
|
52
|
+
time_per_block: float | None = None,
|
|
53
53
|
dummy_block_references: bool = False,
|
|
54
54
|
include_transactions: bool = False,
|
|
55
55
|
) -> list[FullBlock]:
|
|
@@ -59,6 +59,7 @@ def persistent_blocks(
|
|
|
59
59
|
block_list_input = []
|
|
60
60
|
block_path_dir = DEFAULT_ROOT_PATH.parent.joinpath("blocks")
|
|
61
61
|
file_path = block_path_dir.joinpath(db_name)
|
|
62
|
+
lock_file_path = block_path_dir / (db_name + ".lockfile")
|
|
62
63
|
|
|
63
64
|
ci = os.environ.get("CI")
|
|
64
65
|
if ci is not None and not file_path.exists():
|
|
@@ -66,40 +67,41 @@ def persistent_blocks(
|
|
|
66
67
|
|
|
67
68
|
block_path_dir.mkdir(parents=True, exist_ok=True)
|
|
68
69
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
70
|
+
with FileLock(lock_file_path):
|
|
71
|
+
if file_path.exists():
|
|
72
|
+
print(f"File found at: {file_path}")
|
|
73
|
+
try:
|
|
74
|
+
bytes_list = file_path.read_bytes()
|
|
75
|
+
# TODO: use explicit serialization instead of pickle
|
|
76
|
+
block_bytes_list: list[bytes] = pickle.loads(bytes_list) # noqa: S301
|
|
77
|
+
blocks: list[FullBlock] = []
|
|
78
|
+
for block_bytes in block_bytes_list:
|
|
79
|
+
blocks.append(FullBlock.from_bytes_unchecked(block_bytes))
|
|
80
|
+
if len(blocks) == num_of_blocks + len(block_list_input):
|
|
81
|
+
print(f"\n loaded {file_path} with {len(blocks)} blocks")
|
|
80
82
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
return blocks
|
|
84
|
+
except EOFError:
|
|
85
|
+
print("\n error reading db file")
|
|
86
|
+
else:
|
|
87
|
+
print(f"File not found at: {file_path}")
|
|
86
88
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
89
|
+
print("Creating a new test db")
|
|
90
|
+
return new_test_db(
|
|
91
|
+
file_path,
|
|
92
|
+
num_of_blocks,
|
|
93
|
+
seed,
|
|
94
|
+
empty_sub_slots,
|
|
95
|
+
bt,
|
|
96
|
+
block_list_input,
|
|
97
|
+
time_per_block,
|
|
98
|
+
normalized_to_identity_cc_eos=normalized_to_identity_cc_eos,
|
|
99
|
+
normalized_to_identity_icc_eos=normalized_to_identity_icc_eos,
|
|
100
|
+
normalized_to_identity_cc_sp=normalized_to_identity_cc_sp,
|
|
101
|
+
normalized_to_identity_cc_ip=normalized_to_identity_cc_ip,
|
|
102
|
+
dummy_block_references=dummy_block_references,
|
|
103
|
+
include_transactions=include_transactions,
|
|
104
|
+
)
|
|
103
105
|
|
|
104
106
|
|
|
105
107
|
def new_test_db(
|
|
@@ -109,7 +111,7 @@ def new_test_db(
|
|
|
109
111
|
empty_sub_slots: int,
|
|
110
112
|
bt: BlockTools,
|
|
111
113
|
block_list_input: list[FullBlock],
|
|
112
|
-
time_per_block:
|
|
114
|
+
time_per_block: float | None,
|
|
113
115
|
*,
|
|
114
116
|
normalized_to_identity_cc_eos: bool = False, # CC_EOS,
|
|
115
117
|
normalized_to_identity_icc_eos: bool = False, # ICC_EOS
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import TYPE_CHECKING, ClassVar,
|
|
4
|
+
from typing import TYPE_CHECKING, ClassVar, cast
|
|
5
5
|
|
|
6
6
|
from chia_rs import BlockRecord, HeaderBlock, SubEpochChallengeSegment, SubEpochSegments, SubEpochSummary
|
|
7
7
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -20,9 +20,9 @@ class BlockchainMock:
|
|
|
20
20
|
def __init__(
|
|
21
21
|
self,
|
|
22
22
|
blocks: dict[bytes32, BlockRecord],
|
|
23
|
-
headers:
|
|
24
|
-
height_to_hash:
|
|
25
|
-
sub_epoch_summaries:
|
|
23
|
+
headers: dict[bytes32, HeaderBlock] | None = None,
|
|
24
|
+
height_to_hash: dict[uint32, bytes32] | None = None,
|
|
25
|
+
sub_epoch_summaries: dict[uint32, SubEpochSummary] | None = None,
|
|
26
26
|
):
|
|
27
27
|
if sub_epoch_summaries is None:
|
|
28
28
|
sub_epoch_summaries = {}
|
|
@@ -37,10 +37,10 @@ class BlockchainMock:
|
|
|
37
37
|
self._sub_epoch_segments: dict[bytes32, SubEpochSegments] = {}
|
|
38
38
|
self.log = logging.getLogger(__name__)
|
|
39
39
|
|
|
40
|
-
def get_peak(self) ->
|
|
40
|
+
def get_peak(self) -> BlockRecord | None:
|
|
41
41
|
return None
|
|
42
42
|
|
|
43
|
-
def get_peak_height(self) ->
|
|
43
|
+
def get_peak_height(self) -> uint32 | None:
|
|
44
44
|
return None
|
|
45
45
|
|
|
46
46
|
def block_record(self, header_hash: bytes32) -> BlockRecord:
|
|
@@ -49,7 +49,7 @@ class BlockchainMock:
|
|
|
49
49
|
def height_to_block_record(self, height: uint32, check_db: bool = False) -> BlockRecord:
|
|
50
50
|
# Precondition: height is < peak height
|
|
51
51
|
|
|
52
|
-
header_hash:
|
|
52
|
+
header_hash: bytes32 | None = self.height_to_hash(height)
|
|
53
53
|
assert header_hash is not None
|
|
54
54
|
|
|
55
55
|
return self.block_record(header_hash)
|
|
@@ -60,7 +60,7 @@ class BlockchainMock:
|
|
|
60
60
|
def get_ses(self, height: uint32) -> SubEpochSummary:
|
|
61
61
|
return self._sub_epoch_summaries[height]
|
|
62
62
|
|
|
63
|
-
def height_to_hash(self, height: uint32) ->
|
|
63
|
+
def height_to_hash(self, height: uint32) -> bytes32 | None:
|
|
64
64
|
assert height in self._height_to_hash
|
|
65
65
|
return self._height_to_hash[height]
|
|
66
66
|
|
|
@@ -88,10 +88,10 @@ class BlockchainMock:
|
|
|
88
88
|
block_records.append(self.height_to_block_record(height))
|
|
89
89
|
return block_records
|
|
90
90
|
|
|
91
|
-
def try_block_record(self, header_hash: bytes32) ->
|
|
91
|
+
def try_block_record(self, header_hash: bytes32) -> BlockRecord | None:
|
|
92
92
|
return self._block_records.get(header_hash)
|
|
93
93
|
|
|
94
|
-
async def get_block_record_from_db(self, header_hash: bytes32) ->
|
|
94
|
+
async def get_block_record_from_db(self, header_hash: bytes32) -> BlockRecord | None:
|
|
95
95
|
return self._block_records[header_hash]
|
|
96
96
|
|
|
97
97
|
async def prev_block_hash(self, header_hashes: list[bytes32]) -> list[bytes32]:
|
|
@@ -119,7 +119,7 @@ class BlockchainMock:
|
|
|
119
119
|
async def get_sub_epoch_challenge_segments(
|
|
120
120
|
self,
|
|
121
121
|
sub_epoch_summary_hash: bytes32,
|
|
122
|
-
) ->
|
|
122
|
+
) -> list[SubEpochChallengeSegment] | None:
|
|
123
123
|
segments = self._sub_epoch_segments.get(sub_epoch_summary_hash)
|
|
124
124
|
if segments is None:
|
|
125
125
|
return None
|
chia/_tests/util/coin_store.py
CHANGED
chia/_tests/util/config.py
CHANGED
|
@@ -4,7 +4,6 @@ import tempfile
|
|
|
4
4
|
from collections.abc import AsyncIterator
|
|
5
5
|
from contextlib import asynccontextmanager
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
from typing import Optional
|
|
8
7
|
|
|
9
8
|
import aiosqlite
|
|
10
9
|
|
|
@@ -14,8 +13,8 @@ from chia.util.db_wrapper import DBWrapper2, generate_in_memory_db_uri
|
|
|
14
13
|
@asynccontextmanager
|
|
15
14
|
async def DBConnection(
|
|
16
15
|
db_version: int,
|
|
17
|
-
foreign_keys:
|
|
18
|
-
row_factory:
|
|
16
|
+
foreign_keys: bool | None = None,
|
|
17
|
+
row_factory: type[aiosqlite.Row] | None = None,
|
|
19
18
|
) -> AsyncIterator[DBWrapper2]:
|
|
20
19
|
db_uri = generate_in_memory_db_uri()
|
|
21
20
|
async with DBWrapper2.managed(
|
chia/_tests/util/full_sync.py
CHANGED
|
@@ -5,10 +5,10 @@ import logging
|
|
|
5
5
|
import shutil
|
|
6
6
|
import tempfile
|
|
7
7
|
import time
|
|
8
|
-
from collections.abc import Iterator
|
|
8
|
+
from collections.abc import Callable, Iterator
|
|
9
9
|
from contextlib import contextmanager
|
|
10
10
|
from pathlib import Path
|
|
11
|
-
from typing import
|
|
11
|
+
from typing import cast
|
|
12
12
|
|
|
13
13
|
import aiosqlite
|
|
14
14
|
import zstd
|
|
@@ -60,9 +60,7 @@ def enable_profiler(profile: bool, counter: int) -> Iterator[None]:
|
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
class FakeServer:
|
|
63
|
-
async def send_to_all(
|
|
64
|
-
self, messages: list[Message], node_type: NodeType, exclude: Optional[bytes32] = None
|
|
65
|
-
) -> None:
|
|
63
|
+
async def send_to_all(self, messages: list[Message], node_type: NodeType, exclude: bytes32 | None = None) -> None:
|
|
66
64
|
pass
|
|
67
65
|
|
|
68
66
|
async def send_to_all_if(
|
|
@@ -70,18 +68,18 @@ class FakeServer:
|
|
|
70
68
|
messages: list[Message],
|
|
71
69
|
node_type: NodeType,
|
|
72
70
|
predicate: Callable[[WSChiaConnection], bool],
|
|
73
|
-
exclude:
|
|
71
|
+
exclude: bytes32 | None = None,
|
|
74
72
|
) -> None:
|
|
75
73
|
pass
|
|
76
74
|
|
|
77
75
|
def set_received_message_callback(self, callback: ConnectionCallback) -> None:
|
|
78
76
|
pass
|
|
79
77
|
|
|
80
|
-
async def get_peer_info(self) ->
|
|
78
|
+
async def get_peer_info(self) -> PeerInfo | None:
|
|
81
79
|
return None
|
|
82
80
|
|
|
83
81
|
def get_connections(
|
|
84
|
-
self, node_type:
|
|
82
|
+
self, node_type: NodeType | None = None, *, outbound: bool | None = False
|
|
85
83
|
) -> list[WSChiaConnection]:
|
|
86
84
|
return []
|
|
87
85
|
|
|
@@ -91,7 +89,7 @@ class FakeServer:
|
|
|
91
89
|
async def start_client(
|
|
92
90
|
self,
|
|
93
91
|
target_node: PeerInfo,
|
|
94
|
-
on_connect:
|
|
92
|
+
on_connect: ConnectionCallback | None = None,
|
|
95
93
|
auth: bool = False,
|
|
96
94
|
is_feeler: bool = False,
|
|
97
95
|
) -> bool:
|
|
@@ -105,7 +103,7 @@ class FakePeer:
|
|
|
105
103
|
def __init__(self) -> None:
|
|
106
104
|
self.peer_node_id = bytes([0] * 32)
|
|
107
105
|
|
|
108
|
-
async def get_peer_info(self) ->
|
|
106
|
+
async def get_peer_info(self) -> PeerInfo | None:
|
|
109
107
|
return None
|
|
110
108
|
|
|
111
109
|
|
|
@@ -118,7 +116,7 @@ async def run_sync_test(
|
|
|
118
116
|
keep_up: bool,
|
|
119
117
|
db_sync: str,
|
|
120
118
|
node_profiler: bool,
|
|
121
|
-
start_at_checkpoint:
|
|
119
|
+
start_at_checkpoint: str | None,
|
|
122
120
|
) -> None:
|
|
123
121
|
logger = logging.getLogger()
|
|
124
122
|
logger.setLevel(logging.WARNING)
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
import click
|
|
7
6
|
from pytest import MonkeyPatch
|
|
@@ -20,8 +19,8 @@ from chia.ssl.create_ssl import generate_ca_signed_cert, get_chia_ca_crt_key, ma
|
|
|
20
19
|
required=True,
|
|
21
20
|
)
|
|
22
21
|
def gen_ssl(suffix: str = "") -> None:
|
|
23
|
-
captured_crt:
|
|
24
|
-
captured_key:
|
|
22
|
+
captured_crt: bytes | None = None
|
|
23
|
+
captured_key: bytes | None = None
|
|
25
24
|
capture_cert_and_key = False
|
|
26
25
|
|
|
27
26
|
def patched_write_ssl_cert_and_key(cert_path: Path, cert_data: bytes, key_path: Path, key_data: bytes) -> None:
|
|
@@ -39,8 +38,8 @@ def gen_ssl(suffix: str = "") -> None:
|
|
|
39
38
|
patch = MonkeyPatch()
|
|
40
39
|
patch.setattr("chia.ssl.create_ssl.write_ssl_cert_and_key", patched_write_ssl_cert_and_key)
|
|
41
40
|
|
|
42
|
-
private_ca_crt:
|
|
43
|
-
private_ca_key:
|
|
41
|
+
private_ca_crt: bytes | None = None
|
|
42
|
+
private_ca_key: bytes | None = None
|
|
44
43
|
capture_cert_and_key = True
|
|
45
44
|
|
|
46
45
|
make_ca_cert(Path("SSL_TEST_PRIVATE_CA_CRT"), Path("SSL_TEST_PRIVATE_CA_KEY"))
|
|
@@ -28,6 +28,8 @@ def get_name_puzzle_conditions(
|
|
|
28
28
|
height: uint32,
|
|
29
29
|
constants: ConsensusConstants,
|
|
30
30
|
) -> NPCResult:
|
|
31
|
+
# TODO: technically, this is supposed to be the previous transaction block
|
|
32
|
+
# height. But this is just for testing and it seems to be OK for now
|
|
31
33
|
flags = get_flags_for_height_and_constants(height, constants) | DONT_VALIDATE_SIGNATURE
|
|
32
34
|
|
|
33
35
|
if mempool_mode:
|
chia/_tests/util/misc.py
CHANGED
|
@@ -12,7 +12,7 @@ import pathlib
|
|
|
12
12
|
import ssl
|
|
13
13
|
import subprocess
|
|
14
14
|
import sys
|
|
15
|
-
from collections.abc import Awaitable, Collection, Iterator
|
|
15
|
+
from collections.abc import Awaitable, Callable, Collection, Iterator
|
|
16
16
|
from concurrent.futures import Future
|
|
17
17
|
from dataclasses import dataclass, field
|
|
18
18
|
from enum import Enum
|
|
@@ -20,7 +20,7 @@ from statistics import mean
|
|
|
20
20
|
from textwrap import dedent
|
|
21
21
|
from time import thread_time
|
|
22
22
|
from types import TracebackType
|
|
23
|
-
from typing import TYPE_CHECKING, Any,
|
|
23
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Protocol, TextIO, TypeVar, cast, final
|
|
24
24
|
|
|
25
25
|
import aiohttp
|
|
26
26
|
import pytest
|
|
@@ -88,7 +88,7 @@ class RuntimeResults:
|
|
|
88
88
|
duration: float
|
|
89
89
|
entry_file: str
|
|
90
90
|
entry_line: int
|
|
91
|
-
overhead:
|
|
91
|
+
overhead: float | None
|
|
92
92
|
|
|
93
93
|
def block(self, label: str = "") -> str:
|
|
94
94
|
# The entry line is reported starting at the beginning of the line to trigger
|
|
@@ -112,13 +112,13 @@ class AssertRuntimeResults:
|
|
|
112
112
|
duration: float
|
|
113
113
|
entry_file: str
|
|
114
114
|
entry_line: int
|
|
115
|
-
overhead:
|
|
115
|
+
overhead: float | None
|
|
116
116
|
limit: float
|
|
117
117
|
ratio: float
|
|
118
118
|
|
|
119
119
|
@classmethod
|
|
120
120
|
def from_runtime_results(
|
|
121
|
-
cls, results: RuntimeResults, limit: float, entry_file: str, entry_line: int, overhead:
|
|
121
|
+
cls, results: RuntimeResults, limit: float, entry_file: str, entry_line: int, overhead: float | None
|
|
122
122
|
) -> AssertRuntimeResults:
|
|
123
123
|
return cls(
|
|
124
124
|
start=results.start,
|
|
@@ -161,7 +161,7 @@ class AssertRuntimeResults:
|
|
|
161
161
|
|
|
162
162
|
def measure_overhead(
|
|
163
163
|
manager_maker: Callable[
|
|
164
|
-
[], contextlib.AbstractContextManager[
|
|
164
|
+
[], contextlib.AbstractContextManager[Future[RuntimeResults] | Future[AssertRuntimeResults]]
|
|
165
165
|
],
|
|
166
166
|
cycles: int = 10,
|
|
167
167
|
) -> float:
|
|
@@ -183,7 +183,7 @@ def measure_runtime(
|
|
|
183
183
|
label: str = "",
|
|
184
184
|
clock: Callable[[], float] = thread_time,
|
|
185
185
|
gc_mode: GcMode = GcMode.disable,
|
|
186
|
-
overhead:
|
|
186
|
+
overhead: float | None = None,
|
|
187
187
|
print_results: bool = True,
|
|
188
188
|
) -> Iterator[Future[RuntimeResults]]:
|
|
189
189
|
entry_file, entry_line = caller_file_and_line(
|
|
@@ -289,12 +289,12 @@ class _AssertRuntime:
|
|
|
289
289
|
clock: Callable[[], float] = thread_time
|
|
290
290
|
gc_mode: GcMode = GcMode.disable
|
|
291
291
|
print: bool = True
|
|
292
|
-
overhead:
|
|
293
|
-
entry_file:
|
|
294
|
-
entry_line:
|
|
295
|
-
_results:
|
|
296
|
-
runtime_manager:
|
|
297
|
-
runtime_results_callable:
|
|
292
|
+
overhead: float | None = None
|
|
293
|
+
entry_file: str | None = None
|
|
294
|
+
entry_line: int | None = None
|
|
295
|
+
_results: AssertRuntimeResults | None = None
|
|
296
|
+
runtime_manager: contextlib.AbstractContextManager[Future[RuntimeResults]] | None = None
|
|
297
|
+
runtime_results_callable: Future[RuntimeResults] | None = None
|
|
298
298
|
enable_assertion: bool = True
|
|
299
299
|
|
|
300
300
|
def __enter__(self) -> Future[AssertRuntimeResults]:
|
|
@@ -315,9 +315,9 @@ class _AssertRuntime:
|
|
|
315
315
|
|
|
316
316
|
def __exit__(
|
|
317
317
|
self,
|
|
318
|
-
exc_type:
|
|
319
|
-
exc:
|
|
320
|
-
traceback:
|
|
318
|
+
exc_type: type[BaseException] | None,
|
|
319
|
+
exc: BaseException | None,
|
|
320
|
+
traceback: TracebackType | None,
|
|
321
321
|
) -> None:
|
|
322
322
|
if (
|
|
323
323
|
self.entry_file is None
|
|
@@ -366,8 +366,8 @@ class _AssertRuntime:
|
|
|
366
366
|
@dataclasses.dataclass
|
|
367
367
|
class BenchmarkRunner:
|
|
368
368
|
enable_assertion: bool = True
|
|
369
|
-
test_id:
|
|
370
|
-
overhead:
|
|
369
|
+
test_id: TestId | None = None
|
|
370
|
+
overhead: float | None = None
|
|
371
371
|
|
|
372
372
|
def assert_runtime(self, *args: Any, **kwargs: Any) -> _AssertRuntime:
|
|
373
373
|
kwargs.setdefault("enable_assertion", self.enable_assertion)
|
|
@@ -398,7 +398,7 @@ def closing_chia_root_popen(chia_root: ChiaRoot, args: list[str]) -> Iterator[su
|
|
|
398
398
|
|
|
399
399
|
|
|
400
400
|
# https://github.com/pytest-dev/pytest/blob/7.3.1/src/_pytest/mark/__init__.py#L45
|
|
401
|
-
Marks =
|
|
401
|
+
Marks = pytest.MarkDecorator | Collection[pytest.MarkDecorator | pytest.Mark]
|
|
402
402
|
|
|
403
403
|
|
|
404
404
|
class DataCase(Protocol):
|
|
@@ -445,7 +445,7 @@ class CoinGenerator:
|
|
|
445
445
|
self._seed += 1
|
|
446
446
|
return uint64(self._seed)
|
|
447
447
|
|
|
448
|
-
def get(self, parent_coin_id:
|
|
448
|
+
def get(self, parent_coin_id: bytes32 | None = None, include_hint: bool = True) -> HintedCoin:
|
|
449
449
|
if parent_coin_id is None:
|
|
450
450
|
parent_coin_id = self._get_hash()
|
|
451
451
|
hint = None
|
|
@@ -516,7 +516,7 @@ class RecordingWebServer:
|
|
|
516
516
|
hostname: str,
|
|
517
517
|
port: uint16,
|
|
518
518
|
max_request_body_size: int = 1024**2, # Default `client_max_size` from web.Application
|
|
519
|
-
ssl_context:
|
|
519
|
+
ssl_context: ssl.SSLContext | None = None,
|
|
520
520
|
prefer_ipv6: bool = False,
|
|
521
521
|
) -> RecordingWebServer:
|
|
522
522
|
web_server = await WebServer.create(
|
|
@@ -657,9 +657,9 @@ def is_attribute_local(o: object, name: str) -> bool:
|
|
|
657
657
|
|
|
658
658
|
@contextlib.contextmanager
|
|
659
659
|
def patch_request_handler(
|
|
660
|
-
api:
|
|
661
|
-
handler: Callable[..., Awaitable[
|
|
662
|
-
request_type:
|
|
660
|
+
api: ApiProtocol | type[ApiProtocol],
|
|
661
|
+
handler: Callable[..., Awaitable[Message | None]],
|
|
662
|
+
request_type: ProtocolMessageTypes | None = None,
|
|
663
663
|
) -> Iterator[None]:
|
|
664
664
|
if request_type is None:
|
|
665
665
|
request_type = ProtocolMessageTypes[handler.__name__]
|