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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import Optional
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
6
|
from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
|
|
@@ -8,8 +8,8 @@ from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
|
|
|
8
8
|
from chia._tests.clvm.benchmark_costs import cost_of_spend_bundle
|
|
9
9
|
from chia._tests.clvm.test_puzzles import public_key_for_index, secret_exponent_for_index
|
|
10
10
|
from chia._tests.util.key_tool import KeyTool
|
|
11
|
+
from chia._tests.util.spend_sim import CostLogger, SimClient, SpendSim, sim_and_client
|
|
11
12
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
12
|
-
from chia.clvm.spend_sim import CostLogger, SimClient, SpendSim, sim_and_client
|
|
13
13
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
14
14
|
from chia.types.blockchain_format.program import INFINITE_COST, Program
|
|
15
15
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
@@ -48,7 +48,7 @@ async def do_spend(
|
|
|
48
48
|
sim: SpendSim,
|
|
49
49
|
sim_client: SimClient,
|
|
50
50
|
spend_bundle: WalletSpendBundle,
|
|
51
|
-
expected_result:
|
|
51
|
+
expected_result: tuple[MempoolInclusionStatus, Optional[Err]],
|
|
52
52
|
cost_logger: Optional[CostLogger] = None,
|
|
53
53
|
cost_log_msg: str = "",
|
|
54
54
|
) -> int:
|
|
@@ -66,7 +66,7 @@ async def do_spend(
|
|
|
66
66
|
class TestClawbackLifecycle:
|
|
67
67
|
# Helper function
|
|
68
68
|
def sign_coin_spend(self, coin_spend: CoinSpend, index: int) -> G2Element:
|
|
69
|
-
synthetic_secret_key: PrivateKey = calculate_synthetic_secret_key(
|
|
69
|
+
synthetic_secret_key: PrivateKey = calculate_synthetic_secret_key(
|
|
70
70
|
PrivateKey.from_bytes(
|
|
71
71
|
secret_exponent_for_index(index).to_bytes(32, "big"),
|
|
72
72
|
),
|
|
@@ -277,7 +277,7 @@ class TestClawbackLifecycle:
|
|
|
277
277
|
cb_sender_sol = create_merkle_solution(timelock, sender_ph, recipient_ph, sender_puz, sender_sol)
|
|
278
278
|
|
|
279
279
|
conds = conditions_dict_for_solution(clawback_puz, cb_sender_sol, INFINITE_COST)
|
|
280
|
-
assert isinstance(conds,
|
|
280
|
+
assert isinstance(conds, dict)
|
|
281
281
|
create_coins = conds[ConditionOpcode.CREATE_COIN]
|
|
282
282
|
assert len(create_coins) == 1
|
|
283
283
|
assert create_coins[0].vars[0] == sender_ph
|
|
@@ -286,7 +286,7 @@ class TestClawbackLifecycle:
|
|
|
286
286
|
cb_recipient_sol = create_merkle_solution(timelock, sender_ph, recipient_ph, recipient_puz, recipient_sol)
|
|
287
287
|
clawback_puz.run(cb_recipient_sol)
|
|
288
288
|
conds = conditions_dict_for_solution(clawback_puz, cb_recipient_sol, INFINITE_COST)
|
|
289
|
-
assert isinstance(conds,
|
|
289
|
+
assert isinstance(conds, dict)
|
|
290
290
|
create_coins = conds[ConditionOpcode.CREATE_COIN]
|
|
291
291
|
assert len(create_coins) == 1
|
|
292
292
|
assert create_coins[0].vars[0] == recipient_ph
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import random
|
|
4
|
-
from typing import List, Tuple
|
|
5
4
|
|
|
6
5
|
import pytest
|
|
7
6
|
|
|
@@ -21,7 +20,7 @@ from chia.wallet.wallet_node import WalletNode
|
|
|
21
20
|
)
|
|
22
21
|
@pytest.mark.anyio
|
|
23
22
|
async def test_is_recipient(
|
|
24
|
-
simulator_and_wallet:
|
|
23
|
+
simulator_and_wallet: tuple[list[FullNodeSimulator], list[tuple[WalletNode, ChiaServer]], BlockTools],
|
|
25
24
|
trusted: bool,
|
|
26
25
|
self_hostname: str,
|
|
27
26
|
seeded_random: random.Random,
|
chia/_tests/wallet/conftest.py
CHANGED
|
@@ -1,20 +1,30 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import contextlib
|
|
4
|
+
import unittest
|
|
5
|
+
from collections.abc import AsyncIterator, Awaitable
|
|
3
6
|
from contextlib import AsyncExitStack
|
|
4
7
|
from dataclasses import replace
|
|
5
|
-
from typing import Any,
|
|
8
|
+
from typing import Any, Callable, Literal, Optional
|
|
6
9
|
|
|
7
10
|
import pytest
|
|
11
|
+
from chia_rs import (
|
|
12
|
+
DONT_VALIDATE_SIGNATURE,
|
|
13
|
+
SpendBundleConditions,
|
|
14
|
+
get_flags_for_height_and_constants,
|
|
15
|
+
run_block_generator,
|
|
16
|
+
run_block_generator2,
|
|
17
|
+
)
|
|
8
18
|
|
|
9
|
-
from chia._tests.environments.wallet import WalletEnvironment, WalletState, WalletTestFramework
|
|
19
|
+
from chia._tests.environments.wallet import NewPuzzleHashError, WalletEnvironment, WalletState, WalletTestFramework
|
|
10
20
|
from chia._tests.util.setup_nodes import setup_simulators_and_wallets_service
|
|
11
21
|
from chia._tests.wallet.wallet_block_tools import WalletBlockTools
|
|
12
22
|
from chia.consensus.constants import ConsensusConstants
|
|
13
|
-
from chia.consensus.cost_calculator import NPCResult
|
|
14
23
|
from chia.full_node.full_node import FullNode
|
|
15
24
|
from chia.rpc.full_node_rpc_client import FullNodeRpcClient
|
|
16
25
|
from chia.rpc.wallet_rpc_client import WalletRpcClient
|
|
17
26
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
27
|
+
from chia.types.full_block import FullBlock
|
|
18
28
|
from chia.types.peer_info import PeerInfo
|
|
19
29
|
from chia.util.ints import uint32, uint64, uint128
|
|
20
30
|
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG, TXConfig
|
|
@@ -55,8 +65,8 @@ async def ignore_block_validation(
|
|
|
55
65
|
if "standard_block_tools" in request.keywords:
|
|
56
66
|
return None
|
|
57
67
|
|
|
58
|
-
async def validate_block_body(*args: Any, **kwargs: Any) ->
|
|
59
|
-
return None
|
|
68
|
+
async def validate_block_body(*args: Any, **kwargs: Any) -> Literal[None]:
|
|
69
|
+
return None
|
|
60
70
|
|
|
61
71
|
def create_wrapper(original_create: Any) -> Any:
|
|
62
72
|
async def new_create(*args: Any, **kwargs: Any) -> Any:
|
|
@@ -73,9 +83,34 @@ async def ignore_block_validation(
|
|
|
73
83
|
|
|
74
84
|
return new_create
|
|
75
85
|
|
|
86
|
+
def run_block(
|
|
87
|
+
block: FullBlock, prev_generators: list[bytes], constants: ConsensusConstants
|
|
88
|
+
) -> tuple[Optional[int], Optional[SpendBundleConditions]]:
|
|
89
|
+
assert block.transactions_generator is not None
|
|
90
|
+
assert block.transactions_info is not None
|
|
91
|
+
flags = get_flags_for_height_and_constants(block.height, constants) | DONT_VALIDATE_SIGNATURE
|
|
92
|
+
if block.height >= constants.HARD_FORK_HEIGHT:
|
|
93
|
+
run_block = run_block_generator2
|
|
94
|
+
else:
|
|
95
|
+
run_block = run_block_generator
|
|
96
|
+
err, conds = run_block(
|
|
97
|
+
bytes(block.transactions_generator),
|
|
98
|
+
prev_generators,
|
|
99
|
+
block.transactions_info.cost,
|
|
100
|
+
flags,
|
|
101
|
+
block.transactions_info.aggregated_signature,
|
|
102
|
+
None,
|
|
103
|
+
constants,
|
|
104
|
+
)
|
|
105
|
+
# pretend that the signatures are OK
|
|
106
|
+
if conds is not None:
|
|
107
|
+
conds = conds.replace(validated_signature=True)
|
|
108
|
+
return err, conds
|
|
109
|
+
|
|
76
110
|
monkeypatch.setattr("chia.simulator.block_tools.BlockTools", WalletBlockTools)
|
|
77
111
|
monkeypatch.setattr(FullNode, "create", create_wrapper(FullNode.create))
|
|
78
112
|
monkeypatch.setattr("chia.consensus.blockchain.validate_block_body", validate_block_body)
|
|
113
|
+
monkeypatch.setattr("chia.consensus.multiprocess_validation._run_block", run_block)
|
|
79
114
|
monkeypatch.setattr(
|
|
80
115
|
"chia.consensus.block_header_validation.validate_unfinished_header_block", lambda *_, **__: (uint64(1), None)
|
|
81
116
|
)
|
|
@@ -86,7 +121,7 @@ async def ignore_block_validation(
|
|
|
86
121
|
"chia.consensus.multiprocess_validation.validate_finished_header_block", lambda *_, **__: (uint64(1), None)
|
|
87
122
|
)
|
|
88
123
|
monkeypatch.setattr(
|
|
89
|
-
"chia.consensus.multiprocess_validation.verify_and_get_quality_string", lambda *_, **__: bytes32
|
|
124
|
+
"chia.consensus.multiprocess_validation.verify_and_get_quality_string", lambda *_, **__: bytes32.zeros
|
|
90
125
|
)
|
|
91
126
|
monkeypatch.setattr("chia.consensus.block_record.BlockRecord.sp_total_iters", lambda *_: uint128(0))
|
|
92
127
|
monkeypatch.setattr("chia.consensus.block_record.BlockRecord.ip_sub_slot_total_iters", lambda *_: uint128(0))
|
|
@@ -111,6 +146,28 @@ def tx_config(request: Any) -> TXConfig:
|
|
|
111
146
|
return replace(DEFAULT_TX_CONFIG, reuse_puzhash=request.param)
|
|
112
147
|
|
|
113
148
|
|
|
149
|
+
def new_action_scope_wrapper(func: Any) -> Any:
|
|
150
|
+
@contextlib.asynccontextmanager
|
|
151
|
+
async def wrapped_new_action_scope(self: WalletStateManager, *args: Any, **kwargs: Any) -> Any:
|
|
152
|
+
# Take note of the number of puzzle hashes if we're supposed to be reusing
|
|
153
|
+
ph_indexes: dict[uint32, int] = {}
|
|
154
|
+
for wallet_id in self.wallets:
|
|
155
|
+
ph_indexes[wallet_id] = await self.puzzle_store.get_unused_count(wallet_id)
|
|
156
|
+
|
|
157
|
+
async with func(self, *args, **kwargs) as action_scope:
|
|
158
|
+
yield action_scope
|
|
159
|
+
|
|
160
|
+
# Finally, check that the number of puzzle hashes did or did not increase by the specified amount
|
|
161
|
+
if action_scope.config.tx_config.reuse_puzhash:
|
|
162
|
+
for wallet_id, ph_index in zip(self.wallets, ph_indexes):
|
|
163
|
+
if not ph_indexes[wallet_id] == (await self.puzzle_store.get_unused_count(wallet_id)):
|
|
164
|
+
raise NewPuzzleHashError(
|
|
165
|
+
f"wallet ID {wallet_id} generated new puzzle hashes while reuse_puzhash was False"
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
return wrapped_new_action_scope
|
|
169
|
+
|
|
170
|
+
|
|
114
171
|
# This fixture automatically creates 4 parametrized tests trusted/untrusted x reuse/new derivations
|
|
115
172
|
# These parameterizations can be skipped by manually specifying "trusted" or "reuse puzhash" to the fixture
|
|
116
173
|
@pytest.fixture(scope="function")
|
|
@@ -128,7 +185,7 @@ async def wallet_environments(
|
|
|
128
185
|
pytest.skip("Skipping not specified reuse_puzhash mode")
|
|
129
186
|
assert len(request.param["blocks_needed"]) == request.param["num_environments"]
|
|
130
187
|
if "config_overrides" in request.param:
|
|
131
|
-
config_overrides:
|
|
188
|
+
config_overrides: dict[str, Any] = request.param["config_overrides"]
|
|
132
189
|
else: # pragma: no cover
|
|
133
190
|
config_overrides = {}
|
|
134
191
|
async with setup_simulators_and_wallets_service(
|
|
@@ -141,77 +198,81 @@ async def wallet_environments(
|
|
|
141
198
|
|
|
142
199
|
full_node[0]._api.full_node.config = {**full_node[0]._api.full_node.config, **config_overrides}
|
|
143
200
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
await
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
201
|
+
new_action_scope_wrapped = new_action_scope_wrapper(WalletStateManager.new_action_scope)
|
|
202
|
+
with unittest.mock.patch(
|
|
203
|
+
"chia.wallet.wallet_state_manager.WalletStateManager.new_action_scope", new=new_action_scope_wrapped
|
|
204
|
+
):
|
|
205
|
+
wallet_rpc_clients: list[WalletRpcClient] = []
|
|
206
|
+
async with AsyncExitStack() as astack:
|
|
207
|
+
for service in wallet_services:
|
|
208
|
+
service._node.config = {
|
|
209
|
+
**service._node.config,
|
|
210
|
+
"trusted_peers": (
|
|
211
|
+
{full_node[0]._api.server.node_id.hex(): full_node[0]._api.server.node_id.hex()}
|
|
212
|
+
if trusted_full_node
|
|
213
|
+
else {}
|
|
214
|
+
),
|
|
215
|
+
**config_overrides,
|
|
216
|
+
}
|
|
217
|
+
service._node.wallet_state_manager.config = service._node.config
|
|
218
|
+
# Shorten the 10 seconds default value
|
|
219
|
+
service._node.coin_state_retry_seconds = 2
|
|
220
|
+
await service._node.server.start_client(
|
|
221
|
+
PeerInfo(bt.config["self_hostname"], full_node[0]._api.full_node.server.get_port()), None
|
|
222
|
+
)
|
|
223
|
+
wallet_rpc_clients.append(
|
|
224
|
+
await astack.enter_async_context(
|
|
225
|
+
WalletRpcClient.create_as_context(
|
|
226
|
+
bt.config["self_hostname"],
|
|
227
|
+
# Semantics guarantee us a non-None value here
|
|
228
|
+
service.rpc_server.listen_port, # type: ignore[union-attr]
|
|
229
|
+
service.root_path,
|
|
230
|
+
service.config,
|
|
231
|
+
)
|
|
170
232
|
)
|
|
171
233
|
)
|
|
172
|
-
)
|
|
173
234
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
235
|
+
wallet_states: list[WalletState] = []
|
|
236
|
+
for service, blocks_needed in zip(wallet_services, request.param["blocks_needed"]):
|
|
237
|
+
if blocks_needed > 0:
|
|
238
|
+
await full_node[0]._api.farm_blocks_to_wallet(
|
|
239
|
+
count=blocks_needed, wallet=service._node.wallet_state_manager.main_wallet
|
|
240
|
+
)
|
|
241
|
+
await full_node[0]._api.wait_for_wallet_synced(wallet_node=service._node, timeout=20)
|
|
242
|
+
wallet_states.append(
|
|
243
|
+
WalletState(
|
|
244
|
+
Balance(
|
|
245
|
+
confirmed_wallet_balance=uint128(2_000_000_000_000 * blocks_needed),
|
|
246
|
+
unconfirmed_wallet_balance=uint128(2_000_000_000_000 * blocks_needed),
|
|
247
|
+
spendable_balance=uint128(2_000_000_000_000 * blocks_needed),
|
|
248
|
+
pending_change=uint64(0),
|
|
249
|
+
max_send_amount=uint128(2_000_000_000_000 * blocks_needed),
|
|
250
|
+
unspent_coin_count=uint32(2 * blocks_needed),
|
|
251
|
+
pending_coin_removal_count=uint32(0),
|
|
252
|
+
),
|
|
253
|
+
)
|
|
179
254
|
)
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
max_send_amount=uint128(2_000_000_000_000 * blocks_needed),
|
|
189
|
-
unspent_coin_count=uint32(2 * blocks_needed),
|
|
190
|
-
pending_coin_removal_count=uint32(0),
|
|
191
|
-
),
|
|
255
|
+
|
|
256
|
+
assert full_node[0].rpc_server is not None
|
|
257
|
+
client_node = await astack.enter_async_context(
|
|
258
|
+
FullNodeRpcClient.create_as_context(
|
|
259
|
+
bt.config["self_hostname"],
|
|
260
|
+
full_node[0].rpc_server.listen_port,
|
|
261
|
+
full_node[0].root_path,
|
|
262
|
+
full_node[0].config,
|
|
192
263
|
)
|
|
193
264
|
)
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
265
|
+
yield WalletTestFramework(
|
|
266
|
+
full_node[0]._api,
|
|
267
|
+
client_node,
|
|
268
|
+
trusted_full_node,
|
|
269
|
+
[
|
|
270
|
+
WalletEnvironment(
|
|
271
|
+
service=service,
|
|
272
|
+
rpc_client=rpc_client,
|
|
273
|
+
wallet_states={uint32(1): wallet_state},
|
|
274
|
+
)
|
|
275
|
+
for service, rpc_client, wallet_state in zip(wallet_services, wallet_rpc_clients, wallet_states)
|
|
276
|
+
],
|
|
277
|
+
tx_config,
|
|
202
278
|
)
|
|
203
|
-
)
|
|
204
|
-
yield WalletTestFramework(
|
|
205
|
-
full_node[0]._api,
|
|
206
|
-
client_node,
|
|
207
|
-
trusted_full_node,
|
|
208
|
-
[
|
|
209
|
-
WalletEnvironment(
|
|
210
|
-
service=service,
|
|
211
|
-
rpc_client=rpc_client,
|
|
212
|
-
wallet_states={uint32(1): wallet_state},
|
|
213
|
-
)
|
|
214
|
-
for service, rpc_client, wallet_state in zip(wallet_services, wallet_rpc_clients, wallet_states)
|
|
215
|
-
],
|
|
216
|
-
tx_config,
|
|
217
|
-
)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Any,
|
|
3
|
+
from typing import Any, Optional
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
6
|
from chia_rs import AugSchemeMPL
|
|
7
7
|
from clvm.casts import int_to_bytes
|
|
8
8
|
|
|
9
|
-
from chia.
|
|
9
|
+
from chia._tests.util.spend_sim import SimClient, SpendSim, sim_and_client
|
|
10
10
|
from chia.types.blockchain_format.coin import Coin
|
|
11
11
|
from chia.types.blockchain_format.program import INFINITE_COST, Program
|
|
12
12
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
@@ -537,12 +537,16 @@ def test_validator() -> None:
|
|
|
537
537
|
|
|
538
538
|
# Setup the spend_p2_singleton (proposal inner puz)
|
|
539
539
|
spend_p2_singleton = SPEND_P2_SINGLETON_MOD.curry(
|
|
540
|
-
treasury_struct,
|
|
540
|
+
treasury_struct,
|
|
541
|
+
CAT_MOD_HASH,
|
|
542
|
+
conditions,
|
|
543
|
+
[],
|
|
544
|
+
p2_singleton_puzhash, # tailhash conds
|
|
541
545
|
)
|
|
542
546
|
spend_p2_singleton_puzhash = spend_p2_singleton.get_tree_hash()
|
|
543
547
|
|
|
544
548
|
parent_amt_list = [[parent_id, locked_amount]]
|
|
545
|
-
cat_parent_amt_list:
|
|
549
|
+
cat_parent_amt_list: list[Optional[Any]] = []
|
|
546
550
|
spend_p2_singleton_solution = Program.to([parent_amt_list, cat_parent_amt_list, treasury_inner.get_tree_hash()])
|
|
547
551
|
|
|
548
552
|
output_conds = spend_p2_singleton.run(spend_p2_singleton_solution)
|
|
@@ -592,8 +596,6 @@ def test_validator() -> None:
|
|
|
592
596
|
conds = proposal_validator.run(solution)
|
|
593
597
|
assert len(conds.as_python()) == 3
|
|
594
598
|
|
|
595
|
-
return
|
|
596
|
-
|
|
597
599
|
|
|
598
600
|
def test_spend_p2_singleton() -> None:
|
|
599
601
|
# Curried values
|
|
@@ -721,7 +723,7 @@ def test_merge_p2_singleton() -> None:
|
|
|
721
723
|
]
|
|
722
724
|
amounts = [uint64(1000), uint64(2000), uint64(3000)]
|
|
723
725
|
parent_puzhash_amounts = []
|
|
724
|
-
merge_coin_ids:
|
|
726
|
+
merge_coin_ids: list[bytes32] = []
|
|
725
727
|
for pid, amt in zip(parent_ids, amounts):
|
|
726
728
|
parent_puzhash_amounts.append([pid, my_puzhash, amt])
|
|
727
729
|
merge_coin_ids.append(Coin(pid, my_puzhash, amt).name())
|
|
@@ -747,8 +749,6 @@ def test_merge_p2_singleton() -> None:
|
|
|
747
749
|
assert cca in agg_acas
|
|
748
750
|
assert merge_conds[ConditionOpcode.ASSERT_MY_COIN_ID][0].vars[0] == coin_id
|
|
749
751
|
|
|
750
|
-
return
|
|
751
|
-
|
|
752
752
|
|
|
753
753
|
def test_treasury() -> None:
|
|
754
754
|
"""
|
|
@@ -820,12 +820,16 @@ def test_treasury() -> None:
|
|
|
820
820
|
|
|
821
821
|
# Setup the spend_p2_singleton (proposal inner puz)
|
|
822
822
|
spend_p2_singleton = SPEND_P2_SINGLETON_MOD.curry(
|
|
823
|
-
treasury_struct,
|
|
823
|
+
treasury_struct,
|
|
824
|
+
CAT_MOD_HASH,
|
|
825
|
+
conditions,
|
|
826
|
+
[],
|
|
827
|
+
p2_singleton_puzhash, # tailhash conds
|
|
824
828
|
)
|
|
825
829
|
spend_p2_singleton_puzhash = spend_p2_singleton.get_tree_hash()
|
|
826
830
|
|
|
827
831
|
parent_amt_list = [[parent_id, locked_amount]]
|
|
828
|
-
cat_parent_amt_list:
|
|
832
|
+
cat_parent_amt_list: list[Optional[Any]] = []
|
|
829
833
|
spend_p2_singleton_solution = Program.to([parent_amt_list, cat_parent_amt_list, treasury_inner.get_tree_hash()])
|
|
830
834
|
|
|
831
835
|
proposal: Program = proposal_curry_one.curry(
|
|
@@ -1067,12 +1071,16 @@ def test_proposal_lifecycle() -> None:
|
|
|
1067
1071
|
|
|
1068
1072
|
# Setup the spend_p2_singleton (proposal inner puz)
|
|
1069
1073
|
spend_p2_singleton = SPEND_P2_SINGLETON_MOD.curry(
|
|
1070
|
-
treasury_singleton_struct,
|
|
1074
|
+
treasury_singleton_struct,
|
|
1075
|
+
CAT_MOD_HASH,
|
|
1076
|
+
conditions,
|
|
1077
|
+
[],
|
|
1078
|
+
p2_singleton_puzhash, # tailhash conds
|
|
1071
1079
|
)
|
|
1072
1080
|
spend_p2_singleton_puzhash = spend_p2_singleton.get_tree_hash()
|
|
1073
1081
|
|
|
1074
1082
|
parent_amt_list = [[parent_id, locked_amount]]
|
|
1075
|
-
cat_parent_amt_list:
|
|
1083
|
+
cat_parent_amt_list: list[Optional[Any]] = []
|
|
1076
1084
|
spend_p2_singleton_solution = Program.to([parent_amt_list, cat_parent_amt_list, treasury_inner_puzhash])
|
|
1077
1085
|
|
|
1078
1086
|
# Setup Proposal
|
|
@@ -1242,10 +1250,10 @@ def test_proposal_lifecycle() -> None:
|
|
|
1242
1250
|
async def do_spend(
|
|
1243
1251
|
sim: SpendSim,
|
|
1244
1252
|
sim_client: SimClient,
|
|
1245
|
-
coins:
|
|
1246
|
-
puzzles:
|
|
1247
|
-
solutions:
|
|
1248
|
-
) ->
|
|
1253
|
+
coins: list[Coin],
|
|
1254
|
+
puzzles: list[Program],
|
|
1255
|
+
solutions: list[Program],
|
|
1256
|
+
) -> tuple[MempoolInclusionStatus, Optional[Err]]:
|
|
1249
1257
|
spends = []
|
|
1250
1258
|
for coin, puzzle, solution in zip(coins, puzzles, solutions):
|
|
1251
1259
|
spends.append(make_spend(coin, puzzle, solution))
|