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
|
@@ -6,10 +6,15 @@ from pathlib import Path
|
|
|
6
6
|
import pytest
|
|
7
7
|
|
|
8
8
|
from chia._tests.conftest import ConsensusMode
|
|
9
|
-
from chia._tests.environments.wallet import
|
|
9
|
+
from chia._tests.environments.wallet import (
|
|
10
|
+
NewPuzzleHashError,
|
|
11
|
+
WalletEnvironment,
|
|
12
|
+
WalletStateTransition,
|
|
13
|
+
WalletTestFramework,
|
|
14
|
+
)
|
|
10
15
|
from chia._tests.util.time_out_assert import time_out_assert, time_out_assert_not_none
|
|
11
16
|
from chia.protocols.wallet_protocol import CoinState
|
|
12
|
-
from chia.rpc.wallet_request_types import GetTransactionMemo
|
|
17
|
+
from chia.rpc.wallet_request_types import GetTransactionMemo, PushTX
|
|
13
18
|
from chia.simulator.simulator_protocol import ReorgProtocol
|
|
14
19
|
from chia.types.blockchain_format.coin import Coin, coin_as_list
|
|
15
20
|
from chia.types.blockchain_format.program import Program
|
|
@@ -54,7 +59,7 @@ async def test_cat_creation(wallet_environments: WalletTestFramework) -> None:
|
|
|
54
59
|
full_node_api = wallet_environments.full_node
|
|
55
60
|
wsm = wallet_environments.environments[0].wallet_state_manager
|
|
56
61
|
wallet = wallet_environments.environments[0].xch_wallet
|
|
57
|
-
|
|
62
|
+
wallet_node = wallet_environments.environments[0].node
|
|
58
63
|
wallet_environments.environments[0].wallet_aliases = {
|
|
59
64
|
"xch": 1,
|
|
60
65
|
"cat": 2,
|
|
@@ -138,7 +143,7 @@ async def test_cat_creation(wallet_environments: WalletTestFramework) -> None:
|
|
|
138
143
|
await full_node_api.reorg_from_index_to_new_index(
|
|
139
144
|
ReorgProtocol(uint32(height - 1), uint32(height + 1), bytes32(32 * b"1"), None)
|
|
140
145
|
)
|
|
141
|
-
|
|
146
|
+
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, peak_height=uint32(height + 1))
|
|
142
147
|
# The "set_remainder" sections here are due to a peculiarity with how the creation method creates an incoming TX
|
|
143
148
|
# The creation method is for testing purposes only so we're not going to bother fixing it for any real reason
|
|
144
149
|
await wallet_environments.process_pending_states(
|
|
@@ -318,7 +323,7 @@ async def test_cat_spend(wallet_environments: WalletTestFramework) -> None:
|
|
|
318
323
|
|
|
319
324
|
assert cat_wallet.cat_info.limitations_program_hash == cat_wallet_2.cat_info.limitations_program_hash
|
|
320
325
|
|
|
321
|
-
cat_2_hash = await cat_wallet_2.
|
|
326
|
+
cat_2_hash = await cat_wallet_2.standard_wallet.get_puzzle_hash(new=False)
|
|
322
327
|
async with cat_wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
323
328
|
await cat_wallet.generate_signed_transaction([uint64(60)], [cat_2_hash], action_scope, fee=uint64(1))
|
|
324
329
|
tx_id = None
|
|
@@ -389,7 +394,6 @@ async def test_cat_spend(wallet_environments: WalletTestFramework) -> None:
|
|
|
389
394
|
"cat": {
|
|
390
395
|
"confirmed_wallet_balance": 60,
|
|
391
396
|
"unconfirmed_wallet_balance": 60,
|
|
392
|
-
"pending_coin_removal_count": 0,
|
|
393
397
|
"spendable_balance": 60,
|
|
394
398
|
"max_send_amount": 60,
|
|
395
399
|
"pending_change": 0,
|
|
@@ -409,7 +413,7 @@ async def test_cat_spend(wallet_environments: WalletTestFramework) -> None:
|
|
|
409
413
|
memos = await env_2.rpc_client.get_transaction_memo(GetTransactionMemo(transaction_id=tx_id))
|
|
410
414
|
assert len(memos.coins_with_memos) == 2
|
|
411
415
|
assert memos.coins_with_memos[1].memos[0] == cat_2_hash
|
|
412
|
-
cat_hash = await cat_wallet.
|
|
416
|
+
cat_hash = await cat_wallet.standard_wallet.get_puzzle_hash(new=False)
|
|
413
417
|
async with cat_wallet_2.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
414
418
|
await cat_wallet_2.generate_signed_transaction([uint64(15)], [cat_hash], action_scope)
|
|
415
419
|
|
|
@@ -459,7 +463,7 @@ async def test_cat_spend(wallet_environments: WalletTestFramework) -> None:
|
|
|
459
463
|
await full_node_api.reorg_from_index_to_new_index(
|
|
460
464
|
ReorgProtocol(uint32(height - 1), uint32(height + 1), bytes32(32 * b"1"), None)
|
|
461
465
|
)
|
|
462
|
-
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node)
|
|
466
|
+
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, peak_height=uint32(height + 1))
|
|
463
467
|
await env_1.change_balances(
|
|
464
468
|
{
|
|
465
469
|
"cat": {
|
|
@@ -611,7 +615,7 @@ async def test_cat_doesnt_see_eve(wallet_environments: WalletTestFramework) -> N
|
|
|
611
615
|
|
|
612
616
|
assert cat_wallet.cat_info.limitations_program_hash == cat_wallet_2.cat_info.limitations_program_hash
|
|
613
617
|
|
|
614
|
-
cat_2_hash = await cat_wallet_2.
|
|
618
|
+
cat_2_hash = await cat_wallet_2.standard_wallet.get_puzzle_hash(new=False)
|
|
615
619
|
async with cat_wallet.wallet_state_manager.new_action_scope(
|
|
616
620
|
wallet_environments.tx_config, push=True
|
|
617
621
|
) as action_scope:
|
|
@@ -674,7 +678,6 @@ async def test_cat_doesnt_see_eve(wallet_environments: WalletTestFramework) -> N
|
|
|
674
678
|
"cat": {
|
|
675
679
|
"confirmed_wallet_balance": 60,
|
|
676
680
|
"unconfirmed_wallet_balance": 60,
|
|
677
|
-
"pending_coin_removal_count": 0,
|
|
678
681
|
"spendable_balance": 60,
|
|
679
682
|
"max_send_amount": 60,
|
|
680
683
|
"pending_change": 0,
|
|
@@ -686,7 +689,7 @@ async def test_cat_doesnt_see_eve(wallet_environments: WalletTestFramework) -> N
|
|
|
686
689
|
]
|
|
687
690
|
)
|
|
688
691
|
|
|
689
|
-
cc2_ph = await cat_wallet_2.
|
|
692
|
+
cc2_ph = await cat_wallet_2.get_cat_puzzle_hash(new=False)
|
|
690
693
|
async with wallet.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
691
694
|
await wallet.wallet_state_manager.main_wallet.generate_signed_transaction(uint64(10), cc2_ph, action_scope)
|
|
692
695
|
|
|
@@ -819,8 +822,8 @@ async def test_cat_spend_multiple(wallet_environments: WalletTestFramework) -> N
|
|
|
819
822
|
assert cat_wallet_0.cat_info.limitations_program_hash == cat_wallet_1.cat_info.limitations_program_hash
|
|
820
823
|
assert cat_wallet_0.cat_info.limitations_program_hash == cat_wallet_2.cat_info.limitations_program_hash
|
|
821
824
|
|
|
822
|
-
cat_1_hash = await cat_wallet_1.
|
|
823
|
-
cat_2_hash = await cat_wallet_2.
|
|
825
|
+
cat_1_hash = await cat_wallet_1.standard_wallet.get_puzzle_hash(new=False)
|
|
826
|
+
cat_2_hash = await cat_wallet_2.standard_wallet.get_puzzle_hash(new=False)
|
|
824
827
|
|
|
825
828
|
async with cat_wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
826
829
|
await cat_wallet_0.generate_signed_transaction([uint64(60), uint64(20)], [cat_1_hash, cat_2_hash], action_scope)
|
|
@@ -866,7 +869,6 @@ async def test_cat_spend_multiple(wallet_environments: WalletTestFramework) -> N
|
|
|
866
869
|
"cat": {
|
|
867
870
|
"confirmed_wallet_balance": 60,
|
|
868
871
|
"unconfirmed_wallet_balance": 60,
|
|
869
|
-
"pending_coin_removal_count": 0,
|
|
870
872
|
"spendable_balance": 60,
|
|
871
873
|
"max_send_amount": 60,
|
|
872
874
|
"pending_change": 0,
|
|
@@ -892,7 +894,6 @@ async def test_cat_spend_multiple(wallet_environments: WalletTestFramework) -> N
|
|
|
892
894
|
"cat": {
|
|
893
895
|
"confirmed_wallet_balance": 20,
|
|
894
896
|
"unconfirmed_wallet_balance": 20,
|
|
895
|
-
"pending_coin_removal_count": 0,
|
|
896
897
|
"spendable_balance": 20,
|
|
897
898
|
"max_send_amount": 20,
|
|
898
899
|
"pending_change": 0,
|
|
@@ -904,7 +905,7 @@ async def test_cat_spend_multiple(wallet_environments: WalletTestFramework) -> N
|
|
|
904
905
|
]
|
|
905
906
|
)
|
|
906
907
|
|
|
907
|
-
cat_hash = await cat_wallet_0.
|
|
908
|
+
cat_hash = await cat_wallet_0.standard_wallet.get_puzzle_hash(new=False)
|
|
908
909
|
|
|
909
910
|
async with cat_wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
910
911
|
await cat_wallet_1.generate_signed_transaction([uint64(15)], [cat_hash], action_scope)
|
|
@@ -1049,7 +1050,7 @@ async def test_cat_spend_multiple(wallet_environments: WalletTestFramework) -> N
|
|
|
1049
1050
|
assert len(memos) == 2 # One for tx, one for change
|
|
1050
1051
|
assert b"Markus Walburg" in [v for v_list in memos.values() for v in v_list]
|
|
1051
1052
|
assert tx.spend_bundle is not None
|
|
1052
|
-
assert
|
|
1053
|
+
assert next(iter(memos.keys())) in [a.name() for a in tx.spend_bundle.additions()]
|
|
1053
1054
|
|
|
1054
1055
|
|
|
1055
1056
|
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
|
|
@@ -1111,7 +1112,7 @@ async def test_cat_max_amount_send(wallet_environments: WalletTestFramework) ->
|
|
|
1111
1112
|
|
|
1112
1113
|
assert cat_wallet.cat_info.limitations_program_hash is not None
|
|
1113
1114
|
|
|
1114
|
-
cat_2 = await cat_wallet.
|
|
1115
|
+
cat_2 = await cat_wallet.standard_wallet.get_puzzle(new=False)
|
|
1115
1116
|
cat_2_hash = cat_2.get_tree_hash()
|
|
1116
1117
|
amounts = []
|
|
1117
1118
|
puzzle_hashes = []
|
|
@@ -1170,14 +1171,14 @@ async def test_cat_max_amount_send(wallet_environments: WalletTestFramework) ->
|
|
|
1170
1171
|
async with cat_wallet.wallet_state_manager.new_action_scope(
|
|
1171
1172
|
wallet_environments.tx_config, push=False
|
|
1172
1173
|
) as action_scope:
|
|
1173
|
-
await cat_wallet.generate_signed_transaction([uint64(max_sent_amount - 1)], [bytes32
|
|
1174
|
+
await cat_wallet.generate_signed_transaction([uint64(max_sent_amount - 1)], [bytes32.zeros], action_scope)
|
|
1174
1175
|
assert action_scope.side_effects.transactions[0].amount == uint64(max_sent_amount - 1)
|
|
1175
1176
|
|
|
1176
1177
|
# 2) Generate transaction that is equal to limit
|
|
1177
1178
|
async with cat_wallet.wallet_state_manager.new_action_scope(
|
|
1178
1179
|
wallet_environments.tx_config, push=False
|
|
1179
1180
|
) as action_scope:
|
|
1180
|
-
await cat_wallet.generate_signed_transaction([uint64(max_sent_amount)], [bytes32
|
|
1181
|
+
await cat_wallet.generate_signed_transaction([uint64(max_sent_amount)], [bytes32.zeros], action_scope)
|
|
1181
1182
|
assert action_scope.side_effects.transactions[0].amount == uint64(max_sent_amount)
|
|
1182
1183
|
|
|
1183
1184
|
# 3) Generate transaction that is greater than limit
|
|
@@ -1185,9 +1186,7 @@ async def test_cat_max_amount_send(wallet_environments: WalletTestFramework) ->
|
|
|
1185
1186
|
async with cat_wallet.wallet_state_manager.new_action_scope(
|
|
1186
1187
|
wallet_environments.tx_config, push=False
|
|
1187
1188
|
) as action_scope:
|
|
1188
|
-
await cat_wallet.generate_signed_transaction(
|
|
1189
|
-
[uint64(max_sent_amount + 1)], [bytes32([0] * 32)], action_scope
|
|
1190
|
-
)
|
|
1189
|
+
await cat_wallet.generate_signed_transaction([uint64(max_sent_amount + 1)], [bytes32.zeros], action_scope)
|
|
1191
1190
|
|
|
1192
1191
|
|
|
1193
1192
|
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
|
|
@@ -1388,7 +1387,7 @@ async def test_cat_hint(wallet_environments: WalletTestFramework) -> None:
|
|
|
1388
1387
|
cat_wallet_2 = wallet_node_2.wallet_state_manager.wallets[uint32(2)]
|
|
1389
1388
|
assert isinstance(cat_wallet_2, CATWallet)
|
|
1390
1389
|
|
|
1391
|
-
cat_hash = await cat_wallet.
|
|
1390
|
+
cat_hash = await cat_wallet.standard_wallet.get_puzzle_hash(new=False)
|
|
1392
1391
|
async with cat_wallet_2.wallet_state_manager.new_action_scope(
|
|
1393
1392
|
wallet_environments.tx_config, push=True
|
|
1394
1393
|
) as action_scope:
|
|
@@ -1537,7 +1536,7 @@ async def test_cat_change_detection(wallet_environments: WalletTestFramework) ->
|
|
|
1537
1536
|
1,
|
|
1538
1537
|
[
|
|
1539
1538
|
[51, inner_puzhash, cat_amount_1],
|
|
1540
|
-
[51, bytes32
|
|
1539
|
+
[51, bytes32.zeros, cat_amount_0 - cat_amount_1],
|
|
1541
1540
|
],
|
|
1542
1541
|
),
|
|
1543
1542
|
None,
|
|
@@ -1555,7 +1554,7 @@ async def test_cat_change_detection(wallet_environments: WalletTestFramework) ->
|
|
|
1555
1554
|
),
|
|
1556
1555
|
],
|
|
1557
1556
|
)
|
|
1558
|
-
await env.rpc_client.push_tx(eve_spend)
|
|
1557
|
+
await env.rpc_client.push_tx(PushTX(eve_spend))
|
|
1559
1558
|
await time_out_assert_not_none(5, full_node_api.full_node.mempool_manager.get_spendbundle, eve_spend.name())
|
|
1560
1559
|
await wallet_environments.process_pending_states(
|
|
1561
1560
|
[
|
|
@@ -1590,7 +1589,7 @@ async def test_unacknowledged_cat_table() -> None:
|
|
|
1590
1589
|
return bytes32([i] * 32)
|
|
1591
1590
|
|
|
1592
1591
|
def coin_state(i: int) -> CoinState:
|
|
1593
|
-
return CoinState(Coin(bytes32
|
|
1592
|
+
return CoinState(Coin(bytes32.zeros, bytes32.zeros, uint64(i)), None, None)
|
|
1594
1593
|
|
|
1595
1594
|
await interested_store.add_unacknowledged_coin_state(asset_id(0), coin_state(0), None)
|
|
1596
1595
|
await interested_store.add_unacknowledged_coin_state(asset_id(1), coin_state(1), 100)
|
|
@@ -1667,7 +1666,7 @@ async def test_cat_melt_balance(wallet_environments: WalletTestFramework) -> Non
|
|
|
1667
1666
|
)
|
|
1668
1667
|
],
|
|
1669
1668
|
)
|
|
1670
|
-
await env.rpc_client.push_tx(spend_to_wallet)
|
|
1669
|
+
await env.rpc_client.push_tx(PushTX(spend_to_wallet))
|
|
1671
1670
|
await time_out_assert(10, simulator.tx_id_in_mempool, True, spend_to_wallet.name())
|
|
1672
1671
|
|
|
1673
1672
|
await wallet_environments.process_pending_states(
|
|
@@ -1717,7 +1716,7 @@ async def test_cat_melt_balance(wallet_environments: WalletTestFramework) -> Non
|
|
|
1717
1716
|
],
|
|
1718
1717
|
)
|
|
1719
1718
|
signed_spend, _ = await env.wallet_state_manager.sign_bundle(new_spend.coin_spends)
|
|
1720
|
-
await env.rpc_client.push_tx(signed_spend)
|
|
1719
|
+
await env.rpc_client.push_tx(PushTX(signed_spend))
|
|
1721
1720
|
await time_out_assert(10, simulator.tx_id_in_mempool, True, signed_spend.name())
|
|
1722
1721
|
|
|
1723
1722
|
await wallet_environments.process_pending_states(
|
|
@@ -1736,3 +1735,92 @@ async def test_cat_melt_balance(wallet_environments: WalletTestFramework) -> Non
|
|
|
1736
1735
|
)
|
|
1737
1736
|
]
|
|
1738
1737
|
)
|
|
1738
|
+
|
|
1739
|
+
|
|
1740
|
+
@pytest.mark.parametrize(
|
|
1741
|
+
"wallet_environments",
|
|
1742
|
+
[
|
|
1743
|
+
{
|
|
1744
|
+
"num_environments": 1,
|
|
1745
|
+
"blocks_needed": [1],
|
|
1746
|
+
"trusted": True, # Parameter doesn't matter for this test
|
|
1747
|
+
"reuse_puzhash": True, # Important to test this is ignored in the duplicate change scenario
|
|
1748
|
+
}
|
|
1749
|
+
],
|
|
1750
|
+
indirect=True,
|
|
1751
|
+
)
|
|
1752
|
+
@pytest.mark.limit_consensus_modes([ConsensusMode.PLAIN], reason="irrelevant")
|
|
1753
|
+
@pytest.mark.anyio
|
|
1754
|
+
async def test_cat_puzzle_hashes(wallet_environments: WalletTestFramework) -> None:
|
|
1755
|
+
env = wallet_environments.environments[0]
|
|
1756
|
+
wallet = env.xch_wallet
|
|
1757
|
+
|
|
1758
|
+
env.wallet_aliases = {
|
|
1759
|
+
"xch": 1,
|
|
1760
|
+
"cat": 2,
|
|
1761
|
+
}
|
|
1762
|
+
|
|
1763
|
+
async with env.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
1764
|
+
cat_wallet = await CATWallet.create_new_cat_wallet(
|
|
1765
|
+
env.node.wallet_state_manager,
|
|
1766
|
+
wallet,
|
|
1767
|
+
{"identifier": "genesis_by_id"},
|
|
1768
|
+
uint64(100),
|
|
1769
|
+
action_scope,
|
|
1770
|
+
)
|
|
1771
|
+
|
|
1772
|
+
await wallet_environments.process_pending_states(
|
|
1773
|
+
[
|
|
1774
|
+
WalletStateTransition(
|
|
1775
|
+
pre_block_balance_updates={
|
|
1776
|
+
"xch": {"set_remainder": True},
|
|
1777
|
+
"cat": {"init": True, "set_remainder": True},
|
|
1778
|
+
},
|
|
1779
|
+
post_block_balance_updates={
|
|
1780
|
+
"xch": {"set_remainder": True},
|
|
1781
|
+
"cat": {
|
|
1782
|
+
"confirmed_wallet_balance": 100,
|
|
1783
|
+
"unconfirmed_wallet_balance": 0,
|
|
1784
|
+
"spendable_balance": 100,
|
|
1785
|
+
"max_send_amount": 100,
|
|
1786
|
+
"pending_change": -100,
|
|
1787
|
+
"pending_coin_removal_count": -1,
|
|
1788
|
+
"unspent_coin_count": 1,
|
|
1789
|
+
},
|
|
1790
|
+
},
|
|
1791
|
+
),
|
|
1792
|
+
]
|
|
1793
|
+
)
|
|
1794
|
+
|
|
1795
|
+
# Test that we attempt a new puzzle hash here even though everything says we shouldn't
|
|
1796
|
+
with pytest.raises(NewPuzzleHashError):
|
|
1797
|
+
async with env.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
1798
|
+
await cat_wallet.generate_signed_transaction(
|
|
1799
|
+
[uint64(50)], [await cat_wallet.standard_wallet.get_puzzle_hash(new=False)], action_scope
|
|
1800
|
+
)
|
|
1801
|
+
|
|
1802
|
+
# Test new puzzle hash getting
|
|
1803
|
+
current_derivation_index = await env.wallet_state_manager.puzzle_store.get_current_derivation_record_for_wallet(
|
|
1804
|
+
uint32(env.wallet_aliases["cat"])
|
|
1805
|
+
)
|
|
1806
|
+
assert current_derivation_index is not None
|
|
1807
|
+
await cat_wallet.get_cat_puzzle_hash(new=True)
|
|
1808
|
+
next_derivation_index = await env.wallet_state_manager.puzzle_store.get_current_derivation_record_for_wallet(
|
|
1809
|
+
uint32(env.wallet_aliases["cat"])
|
|
1810
|
+
)
|
|
1811
|
+
assert next_derivation_index is not None
|
|
1812
|
+
assert current_derivation_index.index < next_derivation_index.index
|
|
1813
|
+
|
|
1814
|
+
# Test a weird edge case where a new puzzle hash needs to get generated
|
|
1815
|
+
# First, we reset the used status of all puzzle hashes by re-adding them
|
|
1816
|
+
for puzhash in await env.wallet_state_manager.puzzle_store.get_all_puzzle_hashes():
|
|
1817
|
+
dr = await env.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(puzhash)
|
|
1818
|
+
assert dr is not None
|
|
1819
|
+
await env.wallet_state_manager.puzzle_store.add_derivation_paths([dr])
|
|
1820
|
+
|
|
1821
|
+
# Then we make sure that even though we asked for a used puzzle hash, it still gives us an unused one
|
|
1822
|
+
unused_count = await env.wallet_state_manager.puzzle_store.get_unused_count(uint32(env.wallet_aliases["cat"]))
|
|
1823
|
+
await cat_wallet.get_cat_puzzle_hash(new=False)
|
|
1824
|
+
assert unused_count < await env.wallet_state_manager.puzzle_store.get_unused_count(
|
|
1825
|
+
uint32(env.wallet_aliases["cat"])
|
|
1826
|
+
)
|
|
@@ -1,11 +1,11 @@
|
|
|
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 G2Element
|
|
7
7
|
|
|
8
|
-
from chia.
|
|
8
|
+
from chia._tests.util.spend_sim import CostLogger, SimClient, SpendSim, sim_and_client
|
|
9
9
|
from chia.types.blockchain_format.coin import Coin
|
|
10
10
|
from chia.types.blockchain_format.program import Program
|
|
11
11
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
@@ -45,10 +45,10 @@ def str_to_cat_hash(tail_str: str) -> bytes32:
|
|
|
45
45
|
|
|
46
46
|
# This method takes a dictionary of strings mapping to amounts and generates the appropriate CAT/XCH coins
|
|
47
47
|
async def generate_coins(
|
|
48
|
-
sim: SpendSim, sim_client: SimClient, requested_coins:
|
|
49
|
-
) ->
|
|
48
|
+
sim: SpendSim, sim_client: SimClient, requested_coins: dict[Optional[str], list[int]]
|
|
49
|
+
) -> dict[Optional[str], list[Coin]]:
|
|
50
50
|
await sim.farm_block(acs_ph)
|
|
51
|
-
parent_coin =
|
|
51
|
+
parent_coin = next(cr.coin for cr in await sim_client.get_coin_records_by_puzzle_hash(acs_ph))
|
|
52
52
|
|
|
53
53
|
# We need to gather a list of initial coins to create as well as spends that do the eve spend for every CAT
|
|
54
54
|
payments = []
|
|
@@ -87,7 +87,7 @@ async def generate_coins(
|
|
|
87
87
|
await sim.farm_block()
|
|
88
88
|
|
|
89
89
|
# Search for all of the coins and put them into a dictionary
|
|
90
|
-
coin_dict:
|
|
90
|
+
coin_dict: dict[Optional[str], list[Coin]] = {}
|
|
91
91
|
for tail_str, _ in requested_coins.items():
|
|
92
92
|
if tail_str:
|
|
93
93
|
tail_hash = str_to_tail_hash(tail_str)
|
|
@@ -112,15 +112,15 @@ async def generate_coins(
|
|
|
112
112
|
# `generate_secure_bundle` simulates a wallet's `generate_signed_transaction`
|
|
113
113
|
# but doesn't bother with non-offer announcements
|
|
114
114
|
def generate_secure_bundle(
|
|
115
|
-
selected_coins:
|
|
116
|
-
announcements:
|
|
115
|
+
selected_coins: list[Coin],
|
|
116
|
+
announcements: list[AssertPuzzleAnnouncement],
|
|
117
117
|
offered_amount: uint64,
|
|
118
118
|
tail_str: Optional[str] = None,
|
|
119
119
|
) -> WalletSpendBundle:
|
|
120
120
|
announcement_assertions = [a.to_program() for a in announcements]
|
|
121
121
|
selected_coin_amount = sum(c.amount for c in selected_coins)
|
|
122
122
|
non_primaries = [] if len(selected_coins) < 2 else selected_coins[1:]
|
|
123
|
-
inner_solution:
|
|
123
|
+
inner_solution: list[Any] = [
|
|
124
124
|
[51, Offer.ph(), offered_amount], # Offered coin
|
|
125
125
|
[51, acs_ph, uint64(selected_coin_amount - offered_amount)], # Change
|
|
126
126
|
*announcement_assertions,
|
|
@@ -178,7 +178,7 @@ async def test_complex_offer(cost_logger: CostLogger) -> None:
|
|
|
178
178
|
driver_dict_as_infos = {key.hex(): value.info for key, value in driver_dict.items()}
|
|
179
179
|
|
|
180
180
|
# Create an XCH Offer for RED
|
|
181
|
-
chia_requested_payments:
|
|
181
|
+
chia_requested_payments: dict[Optional[bytes32], list[Payment]] = {
|
|
182
182
|
str_to_tail_hash("red"): [Payment(acs_ph, uint64(100), [b"memo"]), Payment(acs_ph, uint64(200), [b"memo"])]
|
|
183
183
|
}
|
|
184
184
|
chia_notarized_payments = Offer.notarize_payments(chia_requested_payments, chia_coins)
|
|
@@ -190,7 +190,7 @@ async def test_complex_offer(cost_logger: CostLogger) -> None:
|
|
|
190
190
|
# Create a RED Offer for XCH
|
|
191
191
|
red_coins_1 = red_coins[0:1]
|
|
192
192
|
red_coins_2 = red_coins[1:]
|
|
193
|
-
red_requested_payments:
|
|
193
|
+
red_requested_payments: dict[Optional[bytes32], list[Payment]] = {
|
|
194
194
|
None: [Payment(acs_ph, uint64(300), [b"red memo"]), Payment(acs_ph, uint64(350), [b"red memo"])]
|
|
195
195
|
}
|
|
196
196
|
red_notarized_payments = Offer.notarize_payments(red_requested_payments, red_coins_1)
|
|
@@ -201,7 +201,7 @@ async def test_complex_offer(cost_logger: CostLogger) -> None:
|
|
|
201
201
|
red_offer = Offer(red_notarized_payments, red_secured_bundle, driver_dict)
|
|
202
202
|
assert not red_offer.is_valid()
|
|
203
203
|
|
|
204
|
-
red_requested_payments_2:
|
|
204
|
+
red_requested_payments_2: dict[Optional[bytes32], list[Payment]] = {
|
|
205
205
|
None: [Payment(acs_ph, uint64(50), [b"red memo"])]
|
|
206
206
|
}
|
|
207
207
|
red_notarized_payments_2 = Offer.notarize_payments(red_requested_payments_2, red_coins_2)
|
|
@@ -219,7 +219,7 @@ async def test_complex_offer(cost_logger: CostLogger) -> None:
|
|
|
219
219
|
assert new_offer.is_valid()
|
|
220
220
|
|
|
221
221
|
# Create yet another offer of BLUE for XCH and RED
|
|
222
|
-
blue_requested_payments:
|
|
222
|
+
blue_requested_payments: dict[Optional[bytes32], list[Payment]] = {
|
|
223
223
|
None: [Payment(acs_ph, uint64(200), [b"blue memo"])],
|
|
224
224
|
str_to_tail_hash("red"): [Payment(acs_ph, uint64(50), [b"blue memo"])],
|
|
225
225
|
}
|
|
@@ -252,7 +252,7 @@ async def test_complex_offer(cost_logger: CostLogger) -> None:
|
|
|
252
252
|
|
|
253
253
|
# Test preventing TAIL from running during exchange
|
|
254
254
|
blue_cat_puz = construct_cat_puzzle(CAT_MOD, str_to_tail_hash("blue"), OFFER_MOD)
|
|
255
|
-
random_hash = bytes32
|
|
255
|
+
random_hash = bytes32.zeros
|
|
256
256
|
blue_spend = make_spend(
|
|
257
257
|
Coin(random_hash, blue_cat_puz.get_tree_hash(), uint64(0)),
|
|
258
258
|
blue_cat_puz,
|
|
@@ -261,7 +261,7 @@ async def test_complex_offer(cost_logger: CostLogger) -> None:
|
|
|
261
261
|
new_spends_list = [blue_spend, *new_offer.to_spend_bundle().coin_spends]
|
|
262
262
|
tail_offer = Offer.from_spend_bundle(WalletSpendBundle(new_spends_list, G2Element()))
|
|
263
263
|
valid_spend = tail_offer.to_valid_spend(random_hash)
|
|
264
|
-
real_blue_spend =
|
|
264
|
+
real_blue_spend = next(spend for spend in valid_spend.coin_spends if b"hey there" in bytes(spend))
|
|
265
265
|
real_blue_spend_replaced = real_blue_spend.replace(
|
|
266
266
|
solution=SerializedProgram.from_program(
|
|
267
267
|
real_blue_spend.solution.to_program().replace(
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
|
-
from typing import Any,
|
|
4
|
+
from typing import Any, Union
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
7
|
from chia_rs import G2Element
|
|
8
8
|
|
|
9
9
|
from chia._tests.conftest import SOFTFORK_HEIGHTS
|
|
10
10
|
from chia._tests.environments.wallet import WalletStateTransition, WalletTestFramework
|
|
11
|
+
from chia._tests.util.get_name_puzzle_conditions import get_name_puzzle_conditions
|
|
11
12
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
12
13
|
from chia._tests.wallet.vc_wallet.test_vc_wallet import mint_cr_cat
|
|
13
14
|
from chia.consensus.cost_calculator import NPCResult
|
|
14
15
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
15
16
|
from chia.full_node.bundle_tools import simple_solution_generator
|
|
16
|
-
from chia.
|
|
17
|
+
from chia.rpc.wallet_request_types import VCAddProofs, VCGetList, VCGetProofsForRoot, VCMint, VCSpend
|
|
17
18
|
from chia.types.blockchain_format.program import INFINITE_COST, Program
|
|
18
19
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
19
20
|
from chia.types.spend_bundle import SpendBundle
|
|
21
|
+
from chia.util.bech32m import encode_puzzle_hash
|
|
20
22
|
from chia.util.hash import std_hash
|
|
21
23
|
from chia.util.ints import uint32, uint64
|
|
22
24
|
from chia.wallet.cat_wallet.cat_wallet import CATWallet
|
|
@@ -36,7 +38,7 @@ from chia.wallet.vc_wallet.vc_store import VCProofs
|
|
|
36
38
|
from chia.wallet.wallet_node import WalletNode
|
|
37
39
|
from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
|
38
40
|
|
|
39
|
-
OfferSummary =
|
|
41
|
+
OfferSummary = dict[Union[int, bytes32], int]
|
|
40
42
|
|
|
41
43
|
|
|
42
44
|
async def get_trade_and_status(trade_manager: TradeManager, trade: TradeRecord) -> TradeStatus:
|
|
@@ -166,7 +168,7 @@ async def test_cat_trades(
|
|
|
166
168
|
tail_taker = Program.to([3, (1, "taker"), None, None])
|
|
167
169
|
proofs_checker_maker = ProofsChecker(["foo", "bar"])
|
|
168
170
|
proofs_checker_taker = ProofsChecker(["bar", "zap"])
|
|
169
|
-
authorized_providers:
|
|
171
|
+
authorized_providers: list[bytes32] = [did_id_maker, did_id_taker]
|
|
170
172
|
cat_wallet_maker: CATWallet = await CRCATWallet.get_or_create_wallet_for_cat(
|
|
171
173
|
wallet_node_maker.wallet_state_manager,
|
|
172
174
|
wallet_maker,
|
|
@@ -237,12 +239,22 @@ async def test_cat_trades(
|
|
|
237
239
|
# Mint some VCs that can spend the CR-CATs
|
|
238
240
|
vc_record_maker = (
|
|
239
241
|
await client_maker.vc_mint(
|
|
240
|
-
|
|
242
|
+
VCMint(
|
|
243
|
+
did_id=encode_puzzle_hash(did_id_maker, "did"),
|
|
244
|
+
target_address=encode_puzzle_hash(await wallet_maker.get_new_puzzlehash(), "txch"),
|
|
245
|
+
push=True,
|
|
246
|
+
),
|
|
247
|
+
wallet_environments.tx_config,
|
|
241
248
|
)
|
|
242
249
|
).vc_record
|
|
243
250
|
vc_record_taker = (
|
|
244
251
|
await client_taker.vc_mint(
|
|
245
|
-
|
|
252
|
+
VCMint(
|
|
253
|
+
did_id=encode_puzzle_hash(did_id_taker, "did"),
|
|
254
|
+
target_address=encode_puzzle_hash(await wallet_taker.get_new_puzzlehash(), "txch"),
|
|
255
|
+
push=True,
|
|
256
|
+
),
|
|
257
|
+
wallet_environments.tx_config,
|
|
246
258
|
)
|
|
247
259
|
).vc_record
|
|
248
260
|
await wallet_environments.process_pending_states(
|
|
@@ -274,17 +286,23 @@ async def test_cat_trades(
|
|
|
274
286
|
proofs_maker = VCProofs({"foo": "1", "bar": "1", "zap": "1"})
|
|
275
287
|
proof_root_maker: bytes32 = proofs_maker.root()
|
|
276
288
|
await client_maker.vc_spend(
|
|
277
|
-
|
|
289
|
+
VCSpend(
|
|
290
|
+
vc_id=vc_record_maker.vc.launcher_id,
|
|
291
|
+
new_proof_hash=proof_root_maker,
|
|
292
|
+
push=True,
|
|
293
|
+
),
|
|
278
294
|
wallet_environments.tx_config,
|
|
279
|
-
new_proof_hash=proof_root_maker,
|
|
280
295
|
)
|
|
281
296
|
|
|
282
297
|
proofs_taker = VCProofs({"foo": "1", "bar": "1", "zap": "1"})
|
|
283
298
|
proof_root_taker: bytes32 = proofs_taker.root()
|
|
284
299
|
await client_taker.vc_spend(
|
|
285
|
-
|
|
300
|
+
VCSpend(
|
|
301
|
+
vc_id=vc_record_taker.vc.launcher_id,
|
|
302
|
+
new_proof_hash=proof_root_taker,
|
|
303
|
+
push=True,
|
|
304
|
+
),
|
|
286
305
|
wallet_environments.tx_config,
|
|
287
|
-
new_proof_hash=proof_root_taker,
|
|
288
306
|
)
|
|
289
307
|
await wallet_environments.process_pending_states(
|
|
290
308
|
[
|
|
@@ -374,17 +392,21 @@ async def test_cat_trades(
|
|
|
374
392
|
)
|
|
375
393
|
|
|
376
394
|
if credential_restricted:
|
|
377
|
-
await client_maker.vc_add_proofs(proofs_maker
|
|
378
|
-
assert
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
assert
|
|
387
|
-
|
|
395
|
+
await client_maker.vc_add_proofs(VCAddProofs.from_vc_proofs(proofs_maker))
|
|
396
|
+
assert (
|
|
397
|
+
await client_maker.vc_get_proofs_for_root(VCGetProofsForRoot(proof_root_maker))
|
|
398
|
+
).to_vc_proofs().key_value_pairs == proofs_maker.key_value_pairs
|
|
399
|
+
get_list_reponse = await client_maker.vc_get_list(VCGetList())
|
|
400
|
+
assert len(get_list_reponse.vc_records) == 1
|
|
401
|
+
assert get_list_reponse.proof_dict[proof_root_maker] == proofs_maker.key_value_pairs
|
|
402
|
+
|
|
403
|
+
await client_taker.vc_add_proofs(VCAddProofs.from_vc_proofs(proofs_taker))
|
|
404
|
+
assert (
|
|
405
|
+
await client_taker.vc_get_proofs_for_root(VCGetProofsForRoot(proof_root_taker))
|
|
406
|
+
).to_vc_proofs().key_value_pairs == proofs_taker.key_value_pairs
|
|
407
|
+
get_list_reponse = await client_taker.vc_get_list(VCGetList())
|
|
408
|
+
assert len(get_list_reponse.vc_records) == 1
|
|
409
|
+
assert get_list_reponse.proof_dict[proof_root_taker] == proofs_taker.key_value_pairs
|
|
388
410
|
|
|
389
411
|
# Add the taker's CAT to the maker's wallet
|
|
390
412
|
if credential_restricted:
|
|
@@ -445,10 +467,10 @@ async def test_cat_trades(
|
|
|
445
467
|
new_cat_wallet_maker.id(): 15,
|
|
446
468
|
}
|
|
447
469
|
|
|
448
|
-
driver_dict:
|
|
470
|
+
driver_dict: dict[bytes32, PuzzleInfo] = {}
|
|
449
471
|
for wallet in (cat_wallet_maker, new_cat_wallet_maker):
|
|
450
472
|
asset_id: str = wallet.get_asset_id()
|
|
451
|
-
driver_item:
|
|
473
|
+
driver_item: dict[str, Any] = {
|
|
452
474
|
"type": AssetType.CAT.value,
|
|
453
475
|
"tail": "0x" + asset_id,
|
|
454
476
|
}
|
|
@@ -1701,7 +1723,7 @@ async def test_trade_cancellation(wallet_environments: WalletTestFramework) -> N
|
|
|
1701
1723
|
wallet_environments.tx_config, push=False
|
|
1702
1724
|
) as action_scope:
|
|
1703
1725
|
await trade_manager_maker.cancel_pending_offers(
|
|
1704
|
-
[trade_make.trade_id, bytes32
|
|
1726
|
+
[trade_make.trade_id, bytes32.zeros], action_scope, secure=False
|
|
1705
1727
|
)
|
|
1706
1728
|
await time_out_assert(15, get_trade_and_status, TradeStatus.CANCELLED, trade_manager_maker, trade_make)
|
|
1707
1729
|
|
|
@@ -1851,7 +1873,7 @@ async def test_trade_cancellation(wallet_environments: WalletTestFramework) -> N
|
|
|
1851
1873
|
chia_and_cat_for_something: OfferSummary = {
|
|
1852
1874
|
env_maker.wallet_aliases["xch"]: -5,
|
|
1853
1875
|
env_maker.wallet_aliases["cat"]: -6,
|
|
1854
|
-
bytes32
|
|
1876
|
+
bytes32.zeros: 1, # Doesn't matter
|
|
1855
1877
|
}
|
|
1856
1878
|
|
|
1857
1879
|
# Now we're going to create the other way around for test coverage sake
|
|
@@ -1861,7 +1883,7 @@ async def test_trade_cancellation(wallet_environments: WalletTestFramework) -> N
|
|
|
1861
1883
|
success, trade_make, error = await trade_manager_maker.create_offer_for_ids(
|
|
1862
1884
|
chia_and_cat_for_something,
|
|
1863
1885
|
action_scope,
|
|
1864
|
-
driver_dict={bytes32
|
|
1886
|
+
driver_dict={bytes32.zeros: PuzzleInfo({"type": AssetType.CAT.value, "tail": "0x" + bytes(32).hex()})},
|
|
1865
1887
|
)
|
|
1866
1888
|
assert error is None
|
|
1867
1889
|
assert success is True
|
|
@@ -1876,8 +1898,8 @@ async def test_trade_cancellation(wallet_environments: WalletTestFramework) -> N
|
|
|
1876
1898
|
total_spend = SpendBundle.aggregate(
|
|
1877
1899
|
[tx.spend_bundle for tx in action_scope.side_effects.transactions if tx.spend_bundle is not None]
|
|
1878
1900
|
)
|
|
1879
|
-
all_conditions:
|
|
1880
|
-
creations:
|
|
1901
|
+
all_conditions: list[Program] = []
|
|
1902
|
+
creations: list[CreateCoinAnnouncement] = []
|
|
1881
1903
|
announcement_nonce = std_hash(trade_make.trade_id)
|
|
1882
1904
|
for spend in total_spend.coin_spends:
|
|
1883
1905
|
all_conditions.extend(
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import List, Tuple
|
|
4
|
-
|
|
5
3
|
import pytest
|
|
6
4
|
|
|
7
5
|
from chia.server.server import ChiaServer
|
|
@@ -19,7 +17,7 @@ from chia.wallet.wallet_node import WalletNode
|
|
|
19
17
|
)
|
|
20
18
|
@pytest.mark.anyio
|
|
21
19
|
async def test_missing_decorator(
|
|
22
|
-
simulator_and_wallet:
|
|
20
|
+
simulator_and_wallet: tuple[list[FullNodeSimulator], list[tuple[WalletNode, ChiaServer]], BlockTools],
|
|
23
21
|
trusted: bool,
|
|
24
22
|
self_hostname: str,
|
|
25
23
|
) -> None:
|
|
@@ -39,7 +37,7 @@ async def test_missing_decorator(
|
|
|
39
37
|
)
|
|
40
38
|
@pytest.mark.anyio
|
|
41
39
|
async def test_unknown_decorator(
|
|
42
|
-
simulator_and_wallet:
|
|
40
|
+
simulator_and_wallet: tuple[list[FullNodeSimulator], list[tuple[WalletNode, ChiaServer]], BlockTools],
|
|
43
41
|
trusted: bool,
|
|
44
42
|
self_hostname: str,
|
|
45
43
|
) -> None:
|
|
@@ -59,7 +57,7 @@ async def test_unknown_decorator(
|
|
|
59
57
|
)
|
|
60
58
|
@pytest.mark.anyio
|
|
61
59
|
async def test_decorator(
|
|
62
|
-
simulator_and_wallet:
|
|
60
|
+
simulator_and_wallet: tuple[list[FullNodeSimulator], list[tuple[WalletNode, ChiaServer]], BlockTools],
|
|
63
61
|
trusted: bool,
|
|
64
62
|
self_hostname: str,
|
|
65
63
|
) -> None:
|