chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/README.md +1 -1
- chia/_tests/blockchain/blockchain_test_utils.py +24 -26
- chia/_tests/blockchain/test_augmented_chain.py +6 -8
- chia/_tests/blockchain/test_blockchain.py +409 -307
- chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
- chia/_tests/blockchain/test_build_chains.py +11 -13
- chia/_tests/blockchain/test_get_block_generator.py +8 -8
- chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
- chia/_tests/build-init-files.py +3 -4
- chia/_tests/build-job-matrix.py +9 -9
- chia/_tests/check_sql_statements.py +2 -3
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +7 -5
- chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
- chia/_tests/clvm/test_condition_codes.py +2 -2
- chia/_tests/clvm/test_curry_and_treehash.py +2 -4
- chia/_tests/clvm/test_message_conditions.py +184 -0
- chia/_tests/clvm/test_puzzle_compression.py +1 -2
- chia/_tests/clvm/test_puzzle_drivers.py +3 -3
- chia/_tests/clvm/test_puzzles.py +13 -18
- chia/_tests/clvm/test_singletons.py +17 -17
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +42 -45
- chia/_tests/cmds/conftest.py +2 -2
- chia/_tests/cmds/test_click_types.py +21 -16
- chia/_tests/cmds/test_cmd_framework.py +255 -35
- chia/_tests/cmds/test_cmds_util.py +2 -2
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_dev_gh.py +131 -0
- chia/_tests/cmds/test_farm_cmd.py +1 -2
- chia/_tests/cmds/test_show.py +6 -6
- chia/_tests/cmds/test_tx_config_args.py +2 -1
- chia/_tests/cmds/wallet/test_dao.py +23 -23
- chia/_tests/cmds/wallet/test_did.py +29 -29
- chia/_tests/cmds/wallet/test_nft.py +24 -23
- chia/_tests/cmds/wallet/test_notifications.py +8 -8
- chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
- chia/_tests/cmds/wallet/test_vcs.py +97 -73
- chia/_tests/cmds/wallet/test_wallet.py +74 -75
- chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
- chia/_tests/conftest.py +153 -38
- chia/_tests/connection_utils.py +7 -6
- chia/_tests/core/cmds/test_beta.py +3 -3
- chia/_tests/core/cmds/test_keys.py +6 -6
- chia/_tests/core/cmds/test_wallet.py +3 -3
- chia/_tests/core/consensus/test_block_creation.py +3 -5
- chia/_tests/core/custom_types/test_coin.py +1 -3
- chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
- chia/_tests/core/daemon/test_daemon.py +58 -58
- chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
- chia/_tests/core/data_layer/conftest.py +4 -3
- chia/_tests/core/data_layer/test_data_cli.py +1 -2
- chia/_tests/core/data_layer/test_data_layer.py +5 -5
- chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
- chia/_tests/core/data_layer/test_data_rpc.py +75 -93
- chia/_tests/core/data_layer/test_data_store.py +38 -37
- chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
- chia/_tests/core/data_layer/util.py +11 -10
- chia/_tests/core/farmer/test_farmer_api.py +6 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
- chia/_tests/core/full_node/ram_db.py +2 -2
- chia/_tests/core/full_node/stores/test_block_store.py +113 -11
- chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
- chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
- chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
- chia/_tests/core/full_node/test_address_manager.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +1 -1
- chia/_tests/core/full_node/test_conditions.py +10 -12
- chia/_tests/core/full_node/test_full_node.py +2077 -1822
- chia/_tests/core/full_node/test_generator_tools.py +4 -4
- chia/_tests/core/full_node/test_hint_management.py +2 -2
- chia/_tests/core/full_node/test_performance.py +2 -5
- chia/_tests/core/full_node/test_subscriptions.py +4 -4
- chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
- chia/_tests/core/make_block_generator.py +5 -7
- chia/_tests/core/mempool/test_mempool.py +205 -208
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
- chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
- chia/_tests/core/mempool/test_mempool_manager.py +109 -80
- chia/_tests/core/mempool/test_mempool_performance.py +3 -4
- chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
- chia/_tests/core/server/flood.py +6 -4
- chia/_tests/core/server/serve.py +10 -7
- chia/_tests/core/server/test_api_protocol.py +21 -0
- chia/_tests/core/server/test_capabilities.py +3 -5
- chia/_tests/core/server/test_dos.py +15 -16
- chia/_tests/core/server/test_loop.py +14 -10
- chia/_tests/core/server/test_node_discovery.py +1 -2
- chia/_tests/core/server/test_rate_limits.py +156 -44
- chia/_tests/core/server/test_server.py +8 -7
- chia/_tests/core/services/test_services.py +59 -37
- chia/_tests/core/ssl/test_ssl.py +5 -3
- chia/_tests/core/test_cost_calculation.py +5 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_db_conversion.py +5 -4
- chia/_tests/core/test_db_validation.py +6 -5
- chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
- chia/_tests/core/test_filter.py +3 -5
- chia/_tests/core/test_full_node_rpc.py +64 -90
- chia/_tests/core/test_merkle_set.py +10 -10
- chia/_tests/core/test_program.py +2 -4
- chia/_tests/core/test_rpc_util.py +1 -2
- chia/_tests/core/test_seeder.py +124 -12
- chia/_tests/core/util/test_block_cache.py +5 -5
- chia/_tests/core/util/test_cached_bls.py +3 -3
- chia/_tests/core/util/test_config.py +13 -13
- chia/_tests/core/util/test_files.py +2 -2
- chia/_tests/core/util/test_jsonify.py +9 -9
- chia/_tests/core/util/test_keychain.py +13 -5
- chia/_tests/core/util/test_keyring_wrapper.py +6 -5
- chia/_tests/core/util/test_log_exceptions.py +3 -3
- chia/_tests/core/util/test_streamable.py +38 -38
- chia/_tests/db/test_db_wrapper.py +13 -12
- chia/_tests/environments/common.py +2 -2
- chia/_tests/environments/full_node.py +2 -2
- chia/_tests/environments/wallet.py +109 -48
- chia/_tests/farmer_harvester/test_farmer.py +35 -35
- chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
- chia/_tests/generator/test_compression.py +13 -30
- chia/_tests/generator/test_generator_types.py +3 -3
- chia/_tests/generator/test_rom.py +7 -9
- chia/_tests/plot_sync/test_delta.py +2 -3
- chia/_tests/plot_sync/test_plot_sync.py +25 -24
- chia/_tests/plot_sync/test_receiver.py +9 -9
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +27 -26
- chia/_tests/plot_sync/util.py +2 -1
- chia/_tests/plotting/test_plot_manager.py +54 -11
- chia/_tests/plotting/util.py +2 -3
- chia/_tests/pools/test_pool_cli_parsing.py +128 -0
- chia/_tests/pools/test_pool_cmdline.py +993 -15
- chia/_tests/pools/test_pool_config.py +3 -5
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
- chia/_tests/pools/test_pool_rpc.py +203 -90
- chia/_tests/pools/test_pool_wallet.py +12 -8
- chia/_tests/pools/test_wallet_pool_store.py +3 -3
- chia/_tests/process_junit.py +16 -17
- chia/_tests/rpc/test_rpc_client.py +59 -2
- chia/_tests/rpc/test_rpc_server.py +183 -0
- chia/_tests/simulation/test_simulation.py +5 -5
- chia/_tests/simulation/test_simulator.py +8 -10
- chia/_tests/simulation/test_start_simulator.py +5 -4
- chia/_tests/timelord/test_new_peak.py +19 -19
- chia/_tests/tools/test_run_block.py +1 -2
- chia/_tests/tools/test_virtual_project.py +591 -0
- chia/_tests/util/benchmark_cost.py +9 -9
- chia/_tests/util/benchmarks.py +1 -2
- chia/_tests/util/blockchain.py +12 -11
- chia/_tests/util/blockchain_mock.py +15 -15
- chia/_tests/util/build_network_protocol_files.py +12 -12
- chia/_tests/util/db_connection.py +3 -2
- chia/_tests/util/full_sync.py +14 -6
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/generator_tools_testing.py +5 -7
- chia/_tests/util/get_name_puzzle_conditions.py +52 -0
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +59 -106
- chia/_tests/util/network_protocol_data.py +7 -9
- chia/_tests/util/protocol_messages_json.py +112 -111
- chia/_tests/util/rpc.py +3 -0
- chia/_tests/util/run_block.py +16 -16
- chia/_tests/util/setup_nodes.py +25 -23
- chia/{clvm → _tests/util}/spend_sim.py +59 -55
- chia/_tests/util/split_managers.py +12 -9
- chia/_tests/util/temp_file.py +1 -1
- chia/_tests/util/test_action_scope.py +2 -1
- chia/_tests/util/test_async_pool.py +8 -8
- chia/_tests/util/test_build_job_matrix.py +2 -3
- chia/_tests/util/test_condition_tools.py +4 -6
- chia/_tests/util/test_config.py +5 -5
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +19 -11
- chia/_tests/util/test_limited_semaphore.py +4 -3
- chia/_tests/util/test_logging_filter.py +2 -3
- chia/_tests/util/test_misc.py +29 -28
- chia/_tests/util/test_network.py +32 -31
- chia/_tests/util/test_network_protocol_files.py +2 -3
- chia/_tests/util/test_network_protocol_json.py +1 -0
- chia/_tests/util/test_network_protocol_test.py +18 -19
- chia/_tests/util/test_paginator.py +3 -4
- chia/_tests/util/test_pprint.py +1 -1
- chia/_tests/util/test_priority_mutex.py +18 -17
- chia/_tests/util/test_recursive_replace.py +2 -2
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/test_timing.py +1 -1
- chia/_tests/util/test_trusted_peer.py +2 -2
- chia/_tests/util/time_out_assert.py +43 -6
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
- chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
- chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
- chia/_tests/wallet/conftest.py +135 -74
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
- chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
- chia/_tests/wallet/did_wallet/test_did.py +1277 -474
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
- chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
- chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
- chia/_tests/wallet/test_address_type.py +20 -20
- chia/_tests/wallet/test_clvm_streamable.py +5 -5
- chia/_tests/wallet/test_coin_management.py +354 -0
- chia/_tests/wallet/test_coin_selection.py +34 -35
- chia/_tests/wallet/test_conditions.py +28 -16
- chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
- chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
- chia/_tests/wallet/test_nft_store.py +1 -2
- chia/_tests/wallet/test_notifications.py +2 -2
- chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
- chia/_tests/wallet/test_puzzle_store.py +2 -3
- chia/_tests/wallet/test_sign_coin_spends.py +3 -3
- chia/_tests/wallet/test_signer_protocol.py +33 -34
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
- chia/_tests/wallet/test_taproot.py +1 -1
- chia/_tests/wallet/test_transaction_store.py +23 -19
- chia/_tests/wallet/test_util.py +36 -32
- chia/_tests/wallet/test_wallet.py +37 -37
- chia/_tests/wallet/test_wallet_action_scope.py +8 -8
- chia/_tests/wallet/test_wallet_blockchain.py +4 -6
- chia/_tests/wallet/test_wallet_coin_store.py +34 -34
- chia/_tests/wallet/test_wallet_node.py +69 -72
- chia/_tests/wallet/test_wallet_retry.py +3 -3
- chia/_tests/wallet/test_wallet_state_manager.py +12 -5
- chia/_tests/wallet/test_wallet_trade_store.py +2 -2
- chia/_tests/wallet/test_wallet_utils.py +5 -4
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
- chia/_tests/wallet/wallet_block_tools.py +27 -27
- chia/_tests/weight_proof/test_weight_proof.py +30 -30
- chia/apis.py +19 -0
- chia/cmds/beta.py +8 -7
- chia/cmds/beta_funcs.py +15 -11
- chia/cmds/check_wallet_db.py +29 -27
- chia/cmds/chia.py +17 -9
- chia/cmds/cmd_classes.py +87 -79
- chia/cmds/cmd_helpers.py +242 -0
- chia/cmds/cmds_util.py +56 -66
- chia/cmds/coin_funcs.py +168 -153
- chia/cmds/coins.py +156 -194
- chia/cmds/configure.py +4 -3
- chia/cmds/dao.py +89 -33
- chia/cmds/dao_funcs.py +55 -33
- chia/cmds/data.py +7 -6
- chia/cmds/data_funcs.py +26 -21
- chia/cmds/db.py +4 -3
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev.py +2 -0
- chia/cmds/farm.py +18 -5
- chia/cmds/farm_funcs.py +17 -24
- chia/cmds/gh.py +275 -0
- chia/cmds/init.py +4 -11
- chia/cmds/init_funcs.py +9 -9
- chia/cmds/installers.py +5 -3
- chia/cmds/keys.py +56 -39
- chia/cmds/keys_funcs.py +30 -31
- chia/cmds/netspace.py +6 -3
- chia/cmds/netspace_funcs.py +3 -2
- chia/cmds/param_types.py +16 -6
- chia/cmds/passphrase.py +8 -7
- chia/cmds/passphrase_funcs.py +7 -61
- chia/cmds/peer.py +2 -1
- chia/cmds/peer_funcs.py +5 -5
- chia/cmds/plotnft.py +207 -153
- chia/cmds/plotnft_funcs.py +205 -174
- chia/cmds/plots.py +14 -6
- chia/cmds/plotters.py +2 -1
- chia/cmds/rpc.py +48 -28
- chia/cmds/show.py +2 -1
- chia/cmds/show_funcs.py +7 -6
- chia/cmds/signer.py +50 -58
- chia/cmds/sim.py +22 -14
- chia/cmds/sim_funcs.py +11 -11
- chia/cmds/start.py +3 -3
- chia/cmds/start_funcs.py +9 -12
- chia/cmds/stop.py +4 -3
- chia/cmds/units.py +1 -3
- chia/cmds/wallet.py +252 -96
- chia/cmds/wallet_funcs.py +217 -143
- chia/consensus/block_body_validation.py +133 -86
- chia/consensus/block_creation.py +42 -21
- chia/consensus/block_header_validation.py +32 -37
- chia/consensus/block_record.py +1 -2
- chia/consensus/blockchain.py +167 -180
- chia/consensus/blockchain_interface.py +10 -10
- chia/consensus/constants.py +2 -2
- chia/consensus/default_constants.py +3 -4
- chia/consensus/difficulty_adjustment.py +5 -5
- chia/consensus/find_fork_point.py +5 -5
- chia/consensus/full_block_to_block_record.py +4 -4
- chia/consensus/get_block_challenge.py +2 -2
- chia/consensus/get_block_generator.py +4 -3
- chia/consensus/multiprocess_validation.py +207 -304
- chia/consensus/vdf_info_computation.py +3 -3
- chia/daemon/client.py +46 -27
- chia/daemon/keychain_proxy.py +10 -9
- chia/daemon/keychain_server.py +18 -18
- chia/daemon/server.py +103 -113
- chia/daemon/windows_signal.py +2 -2
- chia/data_layer/data_layer.py +64 -76
- chia/data_layer/data_layer_api.py +8 -0
- chia/data_layer/data_layer_errors.py +3 -3
- chia/data_layer/data_layer_server.py +2 -2
- chia/data_layer/data_layer_util.py +71 -71
- chia/data_layer/data_layer_wallet.py +63 -67
- chia/data_layer/data_store.py +72 -72
- chia/data_layer/dl_wallet_store.py +10 -10
- chia/data_layer/download_data.py +5 -5
- chia/data_layer/s3_plugin_service.py +9 -9
- chia/data_layer/util/benchmark.py +0 -1
- chia/data_layer/util/plugin.py +2 -3
- chia/farmer/farmer.py +46 -43
- chia/farmer/farmer_api.py +27 -21
- chia/full_node/block_height_map.py +6 -6
- chia/full_node/block_store.py +41 -35
- chia/full_node/coin_store.py +42 -41
- chia/full_node/fee_estimate.py +2 -2
- chia/full_node/fee_estimation.py +1 -2
- chia/full_node/fee_history.py +5 -6
- chia/full_node/fee_tracker.py +24 -24
- chia/full_node/full_node.py +574 -300
- chia/full_node/full_node_api.py +181 -130
- chia/full_node/full_node_store.py +43 -43
- chia/full_node/hint_management.py +4 -4
- chia/full_node/hint_store.py +9 -10
- chia/full_node/mempool.py +25 -19
- chia/full_node/mempool_check_conditions.py +11 -42
- chia/full_node/mempool_manager.py +48 -53
- chia/full_node/pending_tx_cache.py +9 -9
- chia/full_node/subscriptions.py +23 -24
- chia/full_node/sync_store.py +8 -7
- chia/full_node/tx_processing_queue.py +3 -3
- chia/full_node/util/__init__.py +0 -0
- chia/full_node/weight_proof.py +79 -78
- chia/harvester/harvester.py +9 -8
- chia/harvester/harvester_api.py +19 -13
- chia/introducer/introducer.py +7 -5
- chia/introducer/introducer_api.py +9 -3
- chia/legacy/keyring.py +6 -5
- chia/plot_sync/delta.py +8 -8
- chia/plot_sync/receiver.py +12 -11
- chia/plot_sync/sender.py +15 -12
- chia/plotters/bladebit.py +12 -12
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +8 -8
- chia/plotters/plotters.py +6 -6
- chia/plotters/plotters_util.py +6 -4
- chia/plotting/cache.py +8 -7
- chia/plotting/check_plots.py +8 -8
- chia/plotting/create_plots.py +6 -6
- chia/plotting/manager.py +22 -22
- chia/plotting/util.py +31 -19
- chia/pools/pool_config.py +7 -7
- chia/pools/pool_puzzles.py +16 -16
- chia/pools/pool_wallet.py +64 -57
- chia/pools/pool_wallet_info.py +3 -3
- chia/protocols/full_node_protocol.py +3 -3
- chia/protocols/harvester_protocol.py +12 -12
- chia/protocols/introducer_protocol.py +1 -2
- chia/protocols/protocol_message_types.py +4 -4
- chia/protocols/protocol_state_machine.py +2 -2
- chia/protocols/protocol_timing.py +1 -0
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +2 -2
- chia/protocols/wallet_protocol.py +33 -33
- chia/rpc/crawler_rpc_api.py +12 -7
- chia/rpc/data_layer_rpc_api.py +49 -44
- chia/rpc/data_layer_rpc_client.py +41 -41
- chia/rpc/data_layer_rpc_util.py +7 -11
- chia/rpc/farmer_rpc_api.py +32 -27
- chia/rpc/farmer_rpc_client.py +14 -14
- chia/rpc/full_node_rpc_api.py +53 -48
- chia/rpc/full_node_rpc_client.py +30 -30
- chia/rpc/harvester_rpc_api.py +16 -11
- chia/rpc/harvester_rpc_client.py +6 -6
- chia/rpc/rpc_client.py +34 -14
- chia/rpc/rpc_server.py +117 -43
- chia/rpc/timelord_rpc_api.py +9 -4
- chia/rpc/util.py +11 -211
- chia/rpc/wallet_request_types.py +276 -60
- chia/rpc/wallet_rpc_api.py +563 -399
- chia/rpc/wallet_rpc_client.py +220 -250
- chia/seeder/crawl_store.py +6 -8
- chia/seeder/crawler.py +23 -36
- chia/seeder/crawler_api.py +28 -22
- chia/seeder/dns_server.py +99 -50
- chia/seeder/start_crawler.py +13 -9
- chia/server/address_manager.py +19 -19
- chia/server/address_manager_store.py +17 -17
- chia/server/api_protocol.py +106 -1
- chia/server/capabilities.py +3 -3
- chia/server/chia_policy.py +17 -16
- chia/server/introducer_peers.py +3 -3
- chia/server/node_discovery.py +34 -38
- chia/server/rate_limit_numbers.py +26 -16
- chia/server/rate_limits.py +67 -27
- chia/server/server.py +52 -31
- chia/server/signal_handlers.py +6 -3
- chia/server/ssl_context.py +5 -5
- chia/server/start_data_layer.py +37 -23
- chia/server/start_farmer.py +28 -16
- chia/server/start_full_node.py +29 -23
- chia/server/start_harvester.py +28 -15
- chia/server/start_introducer.py +27 -15
- chia/server/start_service.py +17 -29
- chia/server/start_timelord.py +25 -18
- chia/server/start_wallet.py +22 -18
- chia/server/upnp.py +4 -3
- chia/server/ws_connection.py +68 -54
- chia/simulator/add_blocks_in_batches.py +54 -0
- chia/simulator/block_tools.py +65 -64
- chia/simulator/full_node_simulator.py +66 -74
- chia/simulator/setup_services.py +10 -9
- chia/simulator/simulator_full_node_rpc_api.py +12 -14
- chia/simulator/simulator_full_node_rpc_client.py +3 -5
- chia/simulator/simulator_test_tools.py +8 -7
- chia/simulator/socket.py +1 -4
- chia/simulator/ssl_certs.py +5 -5
- chia/simulator/ssl_certs_1.py +2 -4
- chia/simulator/ssl_certs_10.py +2 -4
- chia/simulator/ssl_certs_2.py +2 -4
- chia/simulator/ssl_certs_3.py +2 -4
- chia/simulator/ssl_certs_4.py +2 -4
- chia/simulator/ssl_certs_5.py +2 -4
- chia/simulator/ssl_certs_6.py +2 -4
- chia/simulator/ssl_certs_7.py +2 -4
- chia/simulator/ssl_certs_8.py +2 -4
- chia/simulator/ssl_certs_9.py +2 -4
- chia/simulator/start_simulator.py +14 -6
- chia/simulator/wallet_tools.py +21 -20
- chia/ssl/create_ssl.py +11 -11
- chia/timelord/iters_from_block.py +2 -2
- chia/timelord/timelord.py +57 -33
- chia/timelord/timelord_api.py +12 -6
- chia/timelord/timelord_launcher.py +10 -8
- chia/timelord/timelord_state.py +5 -5
- chia/types/block_protocol.py +2 -2
- chia/types/blockchain_format/coin.py +3 -3
- chia/types/blockchain_format/program.py +17 -18
- chia/types/blockchain_format/tree_hash.py +9 -9
- chia/types/coin_spend.py +8 -8
- chia/types/condition_with_args.py +1 -2
- chia/types/eligible_coin_spends.py +16 -15
- chia/types/generator_types.py +1 -2
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +7 -7
- chia/types/mempool_submission_status.py +2 -2
- chia/types/peer_info.py +1 -1
- chia/types/spend_bundle.py +1 -2
- chia/types/transaction_queue_entry.py +2 -2
- chia/types/unfinished_header_block.py +2 -2
- chia/types/validation_state.py +14 -0
- chia/types/weight_proof.py +5 -6
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +6 -4
- chia/util/augmented_chain.py +13 -9
- chia/util/batches.py +5 -2
- chia/util/bech32m.py +14 -11
- chia/util/beta_metrics.py +5 -4
- chia/util/block_cache.py +5 -5
- chia/util/byte_types.py +2 -0
- chia/util/check_fork_next_block.py +3 -2
- chia/util/chia_logging.py +41 -21
- chia/util/collection.py +3 -3
- chia/util/condition_tools.py +18 -18
- chia/util/config.py +26 -25
- chia/util/cpu.py +2 -0
- chia/util/db_synchronous.py +2 -0
- chia/util/db_version.py +2 -0
- chia/util/db_wrapper.py +13 -10
- chia/util/default_root.py +17 -0
- chia/util/dump_keyring.py +6 -6
- chia/util/errors.py +5 -3
- chia/util/file_keyring.py +22 -33
- chia/util/files.py +2 -0
- chia/util/full_block_utils.py +31 -7
- chia/util/generator_tools.py +18 -8
- chia/util/hash.py +3 -1
- chia/util/initial-config.yaml +19 -0
- chia/util/inline_executor.py +2 -0
- chia/util/ip_address.py +39 -0
- chia/util/json_util.py +0 -4
- chia/util/keychain.py +27 -24
- chia/util/keyring_wrapper.py +65 -4
- chia/util/limited_semaphore.py +3 -1
- chia/util/lock.py +4 -2
- chia/util/log_exceptions.py +5 -2
- chia/util/logging.py +3 -1
- chia/util/lru_cache.py +2 -0
- chia/util/math.py +4 -4
- chia/util/network.py +15 -73
- chia/util/paginator.py +3 -1
- chia/util/path.py +2 -0
- chia/util/permissions.py +3 -2
- chia/util/prev_transaction_block.py +1 -3
- chia/util/priority_mutex.py +6 -3
- chia/util/profiler.py +7 -4
- chia/util/recursive_replace.py +2 -0
- chia/util/safe_cancel_task.py +2 -0
- chia/util/service_groups.py +2 -2
- chia/util/setproctitle.py +2 -0
- chia/util/significant_bits.py +2 -0
- chia/util/ssl_check.py +11 -11
- chia/util/streamable.py +44 -56
- chia/util/task_referencer.py +59 -0
- chia/util/task_timing.py +22 -18
- chia/util/timing.py +4 -1
- chia/util/vdf_prover.py +2 -3
- chia/util/virtual_project_analysis.py +540 -0
- chia/util/ws_message.py +6 -6
- chia/wallet/cat_wallet/cat_info.py +3 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
- chia/wallet/cat_wallet/cat_utils.py +5 -4
- chia/wallet/cat_wallet/cat_wallet.py +56 -70
- chia/wallet/cat_wallet/dao_cat_info.py +3 -3
- chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
- chia/wallet/cat_wallet/lineage_store.py +2 -2
- chia/wallet/coin_selection.py +15 -15
- chia/wallet/conditions.py +257 -71
- chia/wallet/dao_wallet/dao_info.py +4 -4
- chia/wallet/dao_wallet/dao_utils.py +43 -42
- chia/wallet/dao_wallet/dao_wallet.py +66 -68
- chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
- chia/wallet/derive_keys.py +11 -11
- chia/wallet/did_wallet/did_info.py +3 -3
- chia/wallet/did_wallet/did_wallet.py +56 -47
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/nft_info.py +4 -4
- chia/wallet/nft_wallet/nft_puzzles.py +16 -16
- chia/wallet/nft_wallet/nft_wallet.py +90 -89
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
- chia/wallet/nft_wallet/uncurry_nft.py +2 -2
- chia/wallet/notification_manager.py +5 -5
- chia/wallet/notification_store.py +6 -6
- chia/wallet/outer_puzzles.py +2 -2
- chia/wallet/payment.py +4 -5
- chia/wallet/puzzle_drivers.py +4 -4
- chia/wallet/puzzles/clawback/drivers.py +5 -5
- chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
- chia/wallet/puzzles/load_clvm.py +2 -3
- chia/wallet/puzzles/p2_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
- chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
- chia/wallet/puzzles/puzzle_utils.py +7 -7
- chia/wallet/puzzles/singleton_top_layer.py +6 -5
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
- chia/wallet/puzzles/tails.py +34 -30
- chia/wallet/signer_protocol.py +7 -8
- chia/wallet/singleton.py +4 -4
- chia/wallet/trade_manager.py +155 -141
- chia/wallet/trade_record.py +5 -5
- chia/wallet/trading/offer.py +100 -101
- chia/wallet/trading/trade_store.py +14 -14
- chia/wallet/transaction_record.py +31 -16
- chia/wallet/util/address_type.py +4 -4
- chia/wallet/util/blind_signer_tl.py +8 -12
- chia/wallet/util/clvm_streamable.py +15 -15
- chia/wallet/util/compute_hints.py +5 -5
- chia/wallet/util/compute_memos.py +4 -6
- chia/wallet/util/curry_and_treehash.py +3 -2
- chia/wallet/util/debug_spend_bundle.py +6 -8
- chia/wallet/util/merkle_tree.py +10 -10
- chia/wallet/util/merkle_utils.py +10 -10
- chia/wallet/util/new_peak_queue.py +3 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/{util → wallet/util}/pprint.py +2 -3
- chia/wallet/util/puzzle_compression.py +3 -4
- chia/wallet/util/puzzle_decorator.py +10 -10
- chia/wallet/util/query_filter.py +9 -10
- chia/wallet/util/tx_config.py +12 -12
- chia/wallet/util/wallet_sync_utils.py +24 -21
- chia/wallet/util/wallet_types.py +9 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
- chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
- chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
- chia/wallet/vc_wallet/vc_drivers.py +16 -16
- chia/wallet/vc_wallet/vc_store.py +9 -9
- chia/wallet/vc_wallet/vc_wallet.py +35 -35
- chia/wallet/wallet.py +54 -54
- chia/wallet/wallet_action_scope.py +14 -13
- chia/wallet/wallet_blockchain.py +10 -10
- chia/wallet/wallet_coin_record.py +2 -2
- chia/wallet/wallet_coin_store.py +10 -10
- chia/wallet/wallet_info.py +1 -2
- chia/wallet/wallet_interested_store.py +5 -5
- chia/wallet/wallet_nft_store.py +6 -6
- chia/wallet/wallet_node.py +72 -76
- chia/wallet/wallet_node_api.py +33 -27
- chia/wallet/wallet_pool_store.py +1 -2
- chia/wallet/wallet_protocol.py +15 -15
- chia/wallet/wallet_puzzle_store.py +35 -4
- chia/wallet/wallet_retry_store.py +2 -2
- chia/wallet/wallet_singleton_store.py +10 -9
- chia/wallet/wallet_spend_bundle.py +4 -20
- chia/wallet/wallet_state_manager.py +223 -224
- chia/wallet/wallet_transaction_store.py +44 -18
- chia/wallet/wallet_user_store.py +2 -2
- chia/wallet/wallet_weight_proof_handler.py +2 -2
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
- mozilla-ca/cacert.pem +32 -87
- chia/_tests/cmds/wallet/test_coins.py +0 -195
- chia/consensus/block_root_validation.py +0 -46
- chia/util/api_decorators.py +0 -89
- chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
chia/_tests/util/blockchain.py
CHANGED
|
@@ -3,8 +3,9 @@ from __future__ import annotations
|
|
|
3
3
|
import contextlib
|
|
4
4
|
import os
|
|
5
5
|
import pickle
|
|
6
|
+
from collections.abc import AsyncIterator
|
|
6
7
|
from pathlib import Path
|
|
7
|
-
from typing import
|
|
8
|
+
from typing import Optional
|
|
8
9
|
|
|
9
10
|
from chia.consensus.blockchain import Blockchain
|
|
10
11
|
from chia.consensus.constants import ConsensusConstants
|
|
@@ -19,12 +20,12 @@ from chia.util.default_root import DEFAULT_ROOT_PATH
|
|
|
19
20
|
@contextlib.asynccontextmanager
|
|
20
21
|
async def create_blockchain(
|
|
21
22
|
constants: ConsensusConstants, db_version: int
|
|
22
|
-
) -> AsyncIterator[
|
|
23
|
+
) -> AsyncIterator[tuple[Blockchain, DBWrapper2]]:
|
|
23
24
|
db_uri = generate_in_memory_db_uri()
|
|
24
25
|
async with DBWrapper2.managed(database=db_uri, uri=True, reader_count=1, db_version=db_version) as wrapper:
|
|
25
26
|
coin_store = await CoinStore.create(wrapper)
|
|
26
27
|
store = await BlockStore.create(wrapper)
|
|
27
|
-
bc1 = await Blockchain.create(coin_store, store, constants, Path("."), 2, single_threaded=True)
|
|
28
|
+
bc1 = await Blockchain.create(coin_store, store, constants, Path("."), 2, single_threaded=True, log_coins=True)
|
|
28
29
|
try:
|
|
29
30
|
assert bc1.get_peak() is None
|
|
30
31
|
yield bc1, wrapper
|
|
@@ -43,11 +44,11 @@ def persistent_blocks(
|
|
|
43
44
|
normalized_to_identity_icc_eos: bool = False,
|
|
44
45
|
normalized_to_identity_cc_sp: bool = False,
|
|
45
46
|
normalized_to_identity_cc_ip: bool = False,
|
|
46
|
-
block_list_input: Optional[
|
|
47
|
+
block_list_input: Optional[list[FullBlock]] = None,
|
|
47
48
|
time_per_block: Optional[float] = None,
|
|
48
49
|
dummy_block_references: bool = False,
|
|
49
50
|
include_transactions: bool = False,
|
|
50
|
-
) ->
|
|
51
|
+
) -> list[FullBlock]:
|
|
51
52
|
# try loading from disc, if not create new blocks.db file
|
|
52
53
|
# TODO hash fixtures.py and blocktool.py, add to path, delete if the files changed
|
|
53
54
|
if block_list_input is None:
|
|
@@ -65,8 +66,8 @@ def persistent_blocks(
|
|
|
65
66
|
print(f"File found at: {file_path}")
|
|
66
67
|
try:
|
|
67
68
|
bytes_list = file_path.read_bytes()
|
|
68
|
-
block_bytes_list:
|
|
69
|
-
blocks:
|
|
69
|
+
block_bytes_list: list[bytes] = pickle.loads(bytes_list)
|
|
70
|
+
blocks: list[FullBlock] = []
|
|
70
71
|
for block_bytes in block_bytes_list:
|
|
71
72
|
blocks.append(FullBlock.from_bytes_unchecked(block_bytes))
|
|
72
73
|
if len(blocks) == num_of_blocks + len(block_list_input):
|
|
@@ -101,7 +102,7 @@ def new_test_db(
|
|
|
101
102
|
seed: bytes,
|
|
102
103
|
empty_sub_slots: int,
|
|
103
104
|
bt: BlockTools,
|
|
104
|
-
block_list_input:
|
|
105
|
+
block_list_input: list[FullBlock],
|
|
105
106
|
time_per_block: Optional[float],
|
|
106
107
|
*,
|
|
107
108
|
normalized_to_identity_cc_eos: bool = False, # CC_EOS,
|
|
@@ -110,9 +111,9 @@ def new_test_db(
|
|
|
110
111
|
normalized_to_identity_cc_ip: bool = False, # CC_IP
|
|
111
112
|
dummy_block_references: bool = False,
|
|
112
113
|
include_transactions: bool = False,
|
|
113
|
-
) ->
|
|
114
|
+
) -> list[FullBlock]:
|
|
114
115
|
print(f"create {path} with {num_of_blocks} blocks with ")
|
|
115
|
-
blocks:
|
|
116
|
+
blocks: list[FullBlock] = bt.get_consecutive_blocks(
|
|
116
117
|
num_of_blocks,
|
|
117
118
|
block_list_input=block_list_input,
|
|
118
119
|
time_per_block=time_per_block,
|
|
@@ -125,7 +126,7 @@ def new_test_db(
|
|
|
125
126
|
dummy_block_references=dummy_block_references,
|
|
126
127
|
include_transactions=include_transactions,
|
|
127
128
|
)
|
|
128
|
-
block_bytes_list:
|
|
129
|
+
block_bytes_list: list[bytes] = []
|
|
129
130
|
for block in blocks:
|
|
130
131
|
block_bytes_list.append(bytes(block))
|
|
131
132
|
bytes_fn = pickle.dumps(block_bytes_list)
|
|
@@ -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, Optional, cast
|
|
5
5
|
|
|
6
6
|
from chia.consensus.block_record import BlockRecord
|
|
7
7
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
@@ -21,10 +21,10 @@ class BlockchainMock:
|
|
|
21
21
|
|
|
22
22
|
def __init__(
|
|
23
23
|
self,
|
|
24
|
-
blocks:
|
|
25
|
-
headers: Optional[
|
|
26
|
-
height_to_hash: Optional[
|
|
27
|
-
sub_epoch_summaries: Optional[
|
|
24
|
+
blocks: dict[bytes32, BlockRecord],
|
|
25
|
+
headers: Optional[dict[bytes32, HeaderBlock]] = None,
|
|
26
|
+
height_to_hash: Optional[dict[uint32, bytes32]] = None,
|
|
27
|
+
sub_epoch_summaries: Optional[dict[uint32, SubEpochSummary]] = None,
|
|
28
28
|
):
|
|
29
29
|
if sub_epoch_summaries is None:
|
|
30
30
|
sub_epoch_summaries = {}
|
|
@@ -36,7 +36,7 @@ class BlockchainMock:
|
|
|
36
36
|
self._headers = headers
|
|
37
37
|
self._height_to_hash = height_to_hash
|
|
38
38
|
self._sub_epoch_summaries = sub_epoch_summaries
|
|
39
|
-
self._sub_epoch_segments:
|
|
39
|
+
self._sub_epoch_segments: dict[bytes32, SubEpochSegments] = {}
|
|
40
40
|
self.log = logging.getLogger(__name__)
|
|
41
41
|
|
|
42
42
|
def get_peak(self) -> Optional[BlockRecord]:
|
|
@@ -56,7 +56,7 @@ class BlockchainMock:
|
|
|
56
56
|
|
|
57
57
|
return self.block_record(header_hash)
|
|
58
58
|
|
|
59
|
-
def get_ses_heights(self) ->
|
|
59
|
+
def get_ses_heights(self) -> list[uint32]:
|
|
60
60
|
return sorted(self._sub_epoch_summaries.keys())
|
|
61
61
|
|
|
62
62
|
def get_ses(self, height: uint32) -> SubEpochSummary:
|
|
@@ -78,11 +78,11 @@ class BlockchainMock:
|
|
|
78
78
|
async def warmup(self, fork_point: uint32) -> None:
|
|
79
79
|
return
|
|
80
80
|
|
|
81
|
-
async def get_block_records_in_range(self, start: int, stop: int) ->
|
|
81
|
+
async def get_block_records_in_range(self, start: int, stop: int) -> dict[bytes32, BlockRecord]:
|
|
82
82
|
return self._block_records
|
|
83
83
|
|
|
84
|
-
async def get_block_records_at(self, heights:
|
|
85
|
-
block_records:
|
|
84
|
+
async def get_block_records_at(self, heights: list[uint32]) -> list[BlockRecord]:
|
|
85
|
+
block_records: list[BlockRecord] = []
|
|
86
86
|
for height in heights:
|
|
87
87
|
block_records.append(self.height_to_block_record(height))
|
|
88
88
|
return block_records
|
|
@@ -93,7 +93,7 @@ class BlockchainMock:
|
|
|
93
93
|
async def get_block_record_from_db(self, header_hash: bytes32) -> Optional[BlockRecord]:
|
|
94
94
|
return self._block_records[header_hash]
|
|
95
95
|
|
|
96
|
-
async def prev_block_hash(self, header_hashes:
|
|
96
|
+
async def prev_block_hash(self, header_hashes: list[bytes32]) -> list[bytes32]:
|
|
97
97
|
ret = []
|
|
98
98
|
for h in header_hashes:
|
|
99
99
|
ret.append(self._block_records[h].prev_hash)
|
|
@@ -107,18 +107,18 @@ class BlockchainMock:
|
|
|
107
107
|
|
|
108
108
|
async def get_header_blocks_in_range(
|
|
109
109
|
self, start: int, stop: int, tx_filter: bool = True
|
|
110
|
-
) ->
|
|
110
|
+
) -> dict[bytes32, HeaderBlock]:
|
|
111
111
|
return self._headers
|
|
112
112
|
|
|
113
113
|
async def persist_sub_epoch_challenge_segments(
|
|
114
|
-
self, sub_epoch_summary_hash: bytes32, segments:
|
|
114
|
+
self, sub_epoch_summary_hash: bytes32, segments: list[SubEpochChallengeSegment]
|
|
115
115
|
) -> None:
|
|
116
116
|
self._sub_epoch_segments[sub_epoch_summary_hash] = SubEpochSegments(segments)
|
|
117
117
|
|
|
118
118
|
async def get_sub_epoch_challenge_segments(
|
|
119
119
|
self,
|
|
120
120
|
sub_epoch_summary_hash: bytes32,
|
|
121
|
-
) -> Optional[
|
|
121
|
+
) -> Optional[list[SubEpochChallengeSegment]]:
|
|
122
122
|
segments = self._sub_epoch_segments.get(sub_epoch_summary_hash)
|
|
123
123
|
if segments is None:
|
|
124
124
|
return None
|
|
@@ -127,6 +127,6 @@ class BlockchainMock:
|
|
|
127
127
|
def seen_compact_proofs(self, vdf_info: VDFInfo, height: uint32) -> bool:
|
|
128
128
|
return False
|
|
129
129
|
|
|
130
|
-
async def lookup_block_generators(self, header_hash: bytes32, generator_refs:
|
|
130
|
+
async def lookup_block_generators(self, header_hash: bytes32, generator_refs: set[uint32]) -> dict[uint32, bytes]:
|
|
131
131
|
# not implemented
|
|
132
132
|
assert False # pragma: no cover
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
# ruff: noqa: F405
|
|
1
2
|
from __future__ import annotations
|
|
2
3
|
|
|
3
4
|
import os
|
|
4
5
|
import subprocess
|
|
5
|
-
import
|
|
6
|
+
import sys
|
|
6
7
|
from pathlib import Path
|
|
7
8
|
from typing import Any, Callable
|
|
8
9
|
|
|
@@ -183,19 +184,19 @@ def get_protocol_bytes() -> bytes:
|
|
|
183
184
|
|
|
184
185
|
|
|
185
186
|
def build_protocol_test() -> str:
|
|
186
|
-
result = """#
|
|
187
|
+
result = """# ruff: noqa: F405
|
|
188
|
+
# this file is generated by build_network_protocol_files.py
|
|
187
189
|
|
|
188
190
|
from __future__ import annotations
|
|
189
191
|
|
|
190
192
|
from pathlib import Path
|
|
191
|
-
from typing import Tuple
|
|
192
193
|
|
|
193
194
|
from chia._tests.util.build_network_protocol_files import get_network_protocol_filename
|
|
194
195
|
from chia._tests.util.network_protocol_data import * # noqa: F403
|
|
195
196
|
from chia._tests.util.protocol_messages_json import * # noqa: F403
|
|
196
197
|
|
|
197
198
|
|
|
198
|
-
def parse_blob(input_bytes: bytes) ->
|
|
199
|
+
def parse_blob(input_bytes: bytes) -> tuple[bytes, bytes]:
|
|
199
200
|
size_bytes = input_bytes[:4]
|
|
200
201
|
input_bytes = input_bytes[4:]
|
|
201
202
|
size = int.from_bytes(size_bytes, "big")
|
|
@@ -233,17 +234,18 @@ def test_protocol_bytes() -> None:
|
|
|
233
234
|
|
|
234
235
|
|
|
235
236
|
def get_protocol_json() -> str:
|
|
236
|
-
result = """#
|
|
237
|
+
result = """# ruff: noqa: E501
|
|
238
|
+
# this file is generated by build_network_protocol_files.py
|
|
237
239
|
from __future__ import annotations
|
|
238
240
|
|
|
239
|
-
from typing import Any
|
|
241
|
+
from typing import Any
|
|
240
242
|
"""
|
|
241
243
|
counter = 0
|
|
242
244
|
|
|
243
245
|
def visitor(obj: Any, name: str) -> None:
|
|
244
246
|
nonlocal result
|
|
245
247
|
nonlocal counter
|
|
246
|
-
result += f"\n{name}_json:
|
|
248
|
+
result += f"\n{name}_json: dict[str, Any] = {obj.to_json_dict()}\n"
|
|
247
249
|
counter += 1
|
|
248
250
|
|
|
249
251
|
visit_all_messages(visitor)
|
|
@@ -252,7 +254,8 @@ from typing import Any, Dict
|
|
|
252
254
|
|
|
253
255
|
|
|
254
256
|
def build_json_test() -> str:
|
|
255
|
-
result = """#
|
|
257
|
+
result = """# ruff: noqa: F405
|
|
258
|
+
# this file is generated by build_network_protocol_files.py
|
|
256
259
|
|
|
257
260
|
from __future__ import annotations
|
|
258
261
|
|
|
@@ -285,14 +288,11 @@ def main() -> None:
|
|
|
285
288
|
"test_network_protocol_json.py": build_json_test,
|
|
286
289
|
}
|
|
287
290
|
|
|
288
|
-
scripts_path = Path(sysconfig.get_path("scripts"))
|
|
289
|
-
|
|
290
291
|
for name, function in name_to_function.items():
|
|
291
292
|
path = tests_dir.joinpath(name)
|
|
292
293
|
path.write_text(function())
|
|
293
|
-
# black seems to have trouble when run as a module so not using `python -m black`
|
|
294
294
|
subprocess.run(
|
|
295
|
-
[
|
|
295
|
+
[sys.executable, "-m", "ruff", "format", os.fspath(path.relative_to(tests_dir))],
|
|
296
296
|
check=True,
|
|
297
297
|
cwd=tests_dir,
|
|
298
298
|
)
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import tempfile
|
|
4
|
+
from collections.abc import AsyncIterator
|
|
4
5
|
from contextlib import asynccontextmanager
|
|
5
6
|
from pathlib import Path
|
|
6
|
-
from typing import
|
|
7
|
+
from typing import Optional
|
|
7
8
|
|
|
8
9
|
import aiosqlite
|
|
9
10
|
|
|
@@ -14,7 +15,7 @@ from chia.util.db_wrapper import DBWrapper2, generate_in_memory_db_uri
|
|
|
14
15
|
async def DBConnection(
|
|
15
16
|
db_version: int,
|
|
16
17
|
foreign_keys: Optional[bool] = None,
|
|
17
|
-
row_factory: Optional[
|
|
18
|
+
row_factory: Optional[type[aiosqlite.Row]] = None,
|
|
18
19
|
) -> AsyncIterator[DBWrapper2]:
|
|
19
20
|
db_uri = generate_in_memory_db_uri()
|
|
20
21
|
async with DBWrapper2.managed(
|
chia/_tests/util/full_sync.py
CHANGED
|
@@ -5,15 +5,17 @@ import logging
|
|
|
5
5
|
import shutil
|
|
6
6
|
import tempfile
|
|
7
7
|
import time
|
|
8
|
+
from collections.abc import Iterator
|
|
8
9
|
from contextlib import contextmanager
|
|
9
10
|
from pathlib import Path
|
|
10
|
-
from typing import Callable,
|
|
11
|
+
from typing import Callable, Optional, cast
|
|
11
12
|
|
|
12
13
|
import aiosqlite
|
|
13
14
|
import zstd
|
|
14
15
|
|
|
15
16
|
from chia._tests.util.constants import test_constants as TEST_CONSTANTS
|
|
16
17
|
from chia.cmds.init_funcs import chia_init
|
|
18
|
+
from chia.consensus.block_body_validation import ForkInfo
|
|
17
19
|
from chia.consensus.constants import replace_str_to_bytes
|
|
18
20
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
19
21
|
from chia.consensus.difficulty_adjustment import get_next_sub_slot_iters_and_difficulty
|
|
@@ -25,6 +27,7 @@ from chia.simulator.block_tools import make_unfinished_block
|
|
|
25
27
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
26
28
|
from chia.types.full_block import FullBlock
|
|
27
29
|
from chia.types.peer_info import PeerInfo
|
|
30
|
+
from chia.types.validation_state import ValidationState
|
|
28
31
|
from chia.util.config import load_config
|
|
29
32
|
from chia.util.ints import uint16
|
|
30
33
|
|
|
@@ -57,13 +60,13 @@ def enable_profiler(profile: bool, counter: int) -> Iterator[None]:
|
|
|
57
60
|
|
|
58
61
|
class FakeServer:
|
|
59
62
|
async def send_to_all(
|
|
60
|
-
self, messages:
|
|
63
|
+
self, messages: list[Message], node_type: NodeType, exclude: Optional[bytes32] = None
|
|
61
64
|
) -> None:
|
|
62
65
|
pass
|
|
63
66
|
|
|
64
67
|
async def send_to_all_if(
|
|
65
68
|
self,
|
|
66
|
-
messages:
|
|
69
|
+
messages: list[Message],
|
|
67
70
|
node_type: NodeType,
|
|
68
71
|
predicate: Callable[[WSChiaConnection], bool],
|
|
69
72
|
exclude: Optional[bytes32] = None,
|
|
@@ -78,7 +81,7 @@ class FakeServer:
|
|
|
78
81
|
|
|
79
82
|
def get_connections(
|
|
80
83
|
self, node_type: Optional[NodeType] = None, *, outbound: Optional[bool] = False
|
|
81
|
-
) ->
|
|
84
|
+
) -> list[WSChiaConnection]:
|
|
82
85
|
return []
|
|
83
86
|
|
|
84
87
|
def is_duplicate_or_self_connection(self, target_node: PeerInfo) -> bool:
|
|
@@ -206,8 +209,13 @@ async def run_sync_test(
|
|
|
206
209
|
ssi, diff = get_next_sub_slot_iters_and_difficulty(
|
|
207
210
|
full_node.constants, True, block_record, full_node.blockchain
|
|
208
211
|
)
|
|
209
|
-
|
|
210
|
-
|
|
212
|
+
fork_height = block_batch[0].height - 1
|
|
213
|
+
header_hash = block_batch[0].prev_header_hash
|
|
214
|
+
success, summary = await full_node.add_block_batch(
|
|
215
|
+
block_batch,
|
|
216
|
+
peer_info,
|
|
217
|
+
ForkInfo(fork_height, fork_height, header_hash),
|
|
218
|
+
ValidationState(ssi, diff, None),
|
|
211
219
|
)
|
|
212
220
|
end_height = block_batch[-1].height
|
|
213
221
|
full_node.blockchain.clean_block_record(end_height - full_node.constants.BLOCKS_CACHE_SIZE)
|
|
@@ -43,9 +43,6 @@ def gen_ssl(suffix: str = "") -> None:
|
|
|
43
43
|
private_ca_key: Optional[bytes] = None
|
|
44
44
|
capture_cert_and_key = True
|
|
45
45
|
|
|
46
|
-
print("from typing import Dict, Tuple")
|
|
47
|
-
print()
|
|
48
|
-
|
|
49
46
|
make_ca_cert(Path("SSL_TEST_PRIVATE_CA_CRT"), Path("SSL_TEST_PRIVATE_CA_KEY"))
|
|
50
47
|
|
|
51
48
|
capture_cert_and_key = False
|
|
@@ -86,17 +83,19 @@ def gen_ssl(suffix: str = "") -> None:
|
|
|
86
83
|
ca_crt = chia_ca_crt if cert_type == "public" else private_ca_crt
|
|
87
84
|
ca_key = chia_ca_key if cert_type == "public" else private_ca_key
|
|
88
85
|
|
|
86
|
+
assert ca_crt is not None
|
|
87
|
+
assert ca_key is not None
|
|
89
88
|
generate_ca_signed_cert(ca_crt, ca_key, Path(crt), Path(key))
|
|
90
89
|
|
|
91
90
|
patch.undo()
|
|
92
91
|
|
|
93
92
|
append_str = "" if suffix == "" else f"_{suffix}"
|
|
94
93
|
print(
|
|
95
|
-
f"SSL_TEST_PRIVATE_CA_CERT_AND_KEY{append_str}:
|
|
94
|
+
f"SSL_TEST_PRIVATE_CA_CERT_AND_KEY{append_str}: tuple[bytes, bytes] = "
|
|
96
95
|
"(SSL_TEST_PRIVATE_CA_CRT, SSL_TEST_PRIVATE_CA_KEY)"
|
|
97
96
|
)
|
|
98
97
|
print()
|
|
99
|
-
print(f"SSL_TEST_NODE_CERTS_AND_KEYS{append_str}:
|
|
98
|
+
print(f"SSL_TEST_NODE_CERTS_AND_KEYS{append_str}: dict[str, dict[str, dict[str, bytes]]] = {{")
|
|
100
99
|
for node_name, cert_type_dict in node_certs_and_keys.items():
|
|
101
100
|
print(f' "{node_name}": {{')
|
|
102
101
|
for cert_type, cert_dict in cert_type_dict.items():
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from
|
|
4
|
-
|
|
3
|
+
from chia._tests.util.get_name_puzzle_conditions import get_name_puzzle_conditions
|
|
5
4
|
from chia.consensus.constants import ConsensusConstants
|
|
6
5
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
7
|
-
from chia.full_node.mempool_check_conditions import get_name_puzzle_conditions
|
|
8
6
|
from chia.types.blockchain_format.coin import Coin
|
|
9
7
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
10
8
|
from chia.types.full_block import FullBlock
|
|
@@ -19,10 +17,10 @@ def run_and_get_removals_and_additions(
|
|
|
19
17
|
*,
|
|
20
18
|
height: uint32,
|
|
21
19
|
constants: ConsensusConstants = DEFAULT_CONSTANTS,
|
|
22
|
-
mempool_mode=False,
|
|
23
|
-
) ->
|
|
24
|
-
removals:
|
|
25
|
-
additions:
|
|
20
|
+
mempool_mode: bool = False,
|
|
21
|
+
) -> tuple[list[bytes32], list[Coin]]:
|
|
22
|
+
removals: list[bytes32] = []
|
|
23
|
+
additions: list[Coin] = []
|
|
26
24
|
|
|
27
25
|
assert len(block.transactions_generator_ref_list) == 0
|
|
28
26
|
if not block.is_transaction_block():
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
from chia_rs import (
|
|
6
|
+
DONT_VALIDATE_SIGNATURE,
|
|
7
|
+
MEMPOOL_MODE,
|
|
8
|
+
G2Element,
|
|
9
|
+
get_flags_for_height_and_constants,
|
|
10
|
+
run_block_generator,
|
|
11
|
+
run_block_generator2,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
from chia.consensus.constants import ConsensusConstants
|
|
15
|
+
from chia.consensus.cost_calculator import NPCResult
|
|
16
|
+
from chia.types.generator_types import BlockGenerator
|
|
17
|
+
from chia.util.errors import Err
|
|
18
|
+
from chia.util.ints import uint16, uint32
|
|
19
|
+
|
|
20
|
+
log = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def get_name_puzzle_conditions(
|
|
24
|
+
generator: BlockGenerator,
|
|
25
|
+
max_cost: int,
|
|
26
|
+
*,
|
|
27
|
+
mempool_mode: bool,
|
|
28
|
+
height: uint32,
|
|
29
|
+
constants: ConsensusConstants,
|
|
30
|
+
) -> NPCResult:
|
|
31
|
+
flags = get_flags_for_height_and_constants(height, constants) | DONT_VALIDATE_SIGNATURE
|
|
32
|
+
|
|
33
|
+
if mempool_mode:
|
|
34
|
+
flags |= MEMPOOL_MODE
|
|
35
|
+
|
|
36
|
+
if height >= constants.HARD_FORK_HEIGHT:
|
|
37
|
+
run_block = run_block_generator2
|
|
38
|
+
else:
|
|
39
|
+
run_block = run_block_generator
|
|
40
|
+
|
|
41
|
+
try:
|
|
42
|
+
block_args = generator.generator_refs
|
|
43
|
+
err, result = run_block(bytes(generator.program), block_args, max_cost, flags, G2Element(), None, constants)
|
|
44
|
+
assert (err is None) != (result is None)
|
|
45
|
+
if err is not None:
|
|
46
|
+
return NPCResult(uint16(err), None)
|
|
47
|
+
else:
|
|
48
|
+
assert result is not None
|
|
49
|
+
return NPCResult(None, result)
|
|
50
|
+
except BaseException:
|
|
51
|
+
log.exception("get_name_puzzle_condition failed")
|
|
52
|
+
return NPCResult(uint16(Err.GENERATOR_RUNTIME_ERROR.value), None)
|
chia/_tests/util/key_tool.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
|
-
from typing import Dict, List
|
|
5
4
|
|
|
6
5
|
from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
|
|
7
6
|
|
|
@@ -13,9 +12,9 @@ from chia.util.condition_tools import conditions_dict_for_solution, pkm_pairs_fo
|
|
|
13
12
|
|
|
14
13
|
@dataclass
|
|
15
14
|
class KeyTool:
|
|
16
|
-
dict:
|
|
15
|
+
dict: dict[G1Element, int] = field(default_factory=dict)
|
|
17
16
|
|
|
18
|
-
def add_secret_exponents(self, secret_exponents:
|
|
17
|
+
def add_secret_exponents(self, secret_exponents: list[int]) -> None:
|
|
19
18
|
for _ in secret_exponents:
|
|
20
19
|
self.dict[int_to_public_key(_)] = _ % GROUP_ORDER
|
|
21
20
|
|