chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5rc2__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/blockchain/blockchain_test_utils.py +2 -3
- chia/_tests/blockchain/test_augmented_chain.py +2 -3
- chia/_tests/blockchain/test_blockchain.py +261 -44
- chia/_tests/blockchain/test_blockchain_transactions.py +4 -3
- chia/_tests/blockchain/test_build_chains.py +197 -1
- chia/_tests/blockchain/test_get_block_generator.py +1 -1
- chia/_tests/blockchain/test_lookup_fork_chain.py +1 -1
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +3 -4
- chia/_tests/clvm/test_message_conditions.py +2 -2
- chia/_tests/clvm/test_puzzle_compression.py +2 -3
- chia/_tests/clvm/test_puzzles.py +1 -2
- chia/_tests/clvm/test_singletons.py +2 -3
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +30 -25
- chia/_tests/cmds/test_dev_gh.py +1 -1
- chia/_tests/cmds/test_farm_cmd.py +1 -1
- chia/_tests/cmds/test_show.py +1 -2
- chia/_tests/cmds/wallet/test_did.py +101 -56
- chia/_tests/cmds/wallet/test_nft.py +109 -84
- chia/_tests/cmds/wallet/test_notifications.py +1 -1
- chia/_tests/cmds/wallet/test_offer.toffer +1 -1
- chia/_tests/cmds/wallet/test_vcs.py +8 -8
- chia/_tests/cmds/wallet/test_wallet.py +100 -46
- chia/_tests/conftest.py +31 -20
- chia/_tests/connection_utils.py +1 -1
- chia/_tests/core/consensus/stores/__init__.py +0 -0
- chia/_tests/core/consensus/stores/test_coin_store_protocol.py +40 -0
- chia/_tests/core/consensus/test_block_creation.py +2 -31
- chia/_tests/core/consensus/test_pot_iterations.py +38 -3
- chia/_tests/core/custom_types/test_proof_of_space.py +154 -26
- chia/_tests/core/custom_types/test_spend_bundle.py +2 -3
- chia/_tests/core/daemon/test_daemon.py +80 -0
- chia/_tests/core/data_layer/test_data_layer.py +1 -1
- chia/_tests/core/data_layer/test_data_layer_util.py +1 -1
- chia/_tests/core/data_layer/test_data_rpc.py +14 -10
- chia/_tests/core/data_layer/test_data_store.py +5 -5
- chia/_tests/core/farmer/test_farmer_api.py +2 -2
- chia/_tests/core/full_node/full_sync/test_full_sync.py +446 -406
- chia/_tests/core/full_node/ram_db.py +3 -1
- chia/_tests/core/full_node/stores/test_block_store.py +28 -16
- chia/_tests/core/full_node/stores/test_coin_store.py +277 -185
- chia/_tests/core/full_node/stores/test_full_node_store.py +11 -4
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_address_manager.py +200 -27
- chia/_tests/core/full_node/test_block_height_map.py +2 -2
- chia/_tests/core/full_node/test_conditions.py +7 -6
- chia/_tests/core/full_node/test_full_node.py +456 -40
- chia/_tests/core/full_node/test_generator_tools.py +32 -2
- chia/_tests/core/full_node/test_hint_management.py +1 -1
- chia/_tests/core/full_node/test_node_load.py +20 -21
- chia/_tests/core/full_node/test_performance.py +3 -4
- chia/_tests/core/full_node/test_prev_tx_block.py +43 -0
- chia/_tests/core/full_node/test_subscriptions.py +1 -2
- chia/_tests/core/full_node/test_transactions.py +9 -5
- chia/_tests/core/full_node/test_tx_processing_queue.py +1 -2
- chia/_tests/core/large_block.py +1 -2
- chia/_tests/core/make_block_generator.py +3 -4
- chia/_tests/core/mempool/test_mempool.py +36 -86
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +1 -1
- chia/_tests/core/mempool/test_mempool_item_queries.py +1 -3
- chia/_tests/core/mempool/test_mempool_manager.py +421 -69
- chia/_tests/core/mempool/test_mempool_performance.py +3 -2
- chia/_tests/core/mempool/test_singleton_fast_forward.py +60 -131
- chia/_tests/core/server/flood.py +1 -1
- chia/_tests/core/server/test_dos.py +1 -1
- chia/_tests/core/server/test_node_discovery.py +41 -27
- chia/_tests/core/server/test_rate_limits.py +1 -1
- chia/_tests/core/server/test_server.py +1 -1
- chia/_tests/core/services/test_services.py +5 -5
- chia/_tests/core/ssl/test_ssl.py +1 -1
- chia/_tests/core/test_cost_calculation.py +6 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_crawler_rpc.py +1 -1
- chia/_tests/core/test_db_conversion.py +3 -1
- chia/_tests/core/test_db_validation.py +5 -3
- chia/_tests/core/test_farmer_harvester_rpc.py +15 -15
- chia/_tests/core/test_filter.py +4 -1
- chia/_tests/core/test_full_node_rpc.py +99 -82
- chia/_tests/core/test_program.py +2 -2
- chia/_tests/core/util/test_block_cache.py +1 -1
- chia/_tests/core/util/test_keychain.py +2 -2
- chia/_tests/core/util/test_lockfile.py +1 -1
- chia/_tests/core/util/test_log_exceptions.py +5 -5
- chia/_tests/core/util/test_streamable.py +81 -22
- chia/_tests/db/test_db_wrapper.py +1 -3
- chia/_tests/environments/wallet.py +5 -5
- chia/_tests/farmer_harvester/test_farmer.py +9 -7
- chia/_tests/farmer_harvester/test_farmer_harvester.py +11 -4
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +15 -9
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +1 -2
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +7 -5
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -1
- chia/_tests/generator/test_compression.py +1 -2
- chia/_tests/generator/test_rom.py +8 -4
- chia/_tests/plot_sync/test_plot_sync.py +3 -3
- chia/_tests/plot_sync/test_receiver.py +3 -3
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +3 -3
- chia/_tests/plot_sync/util.py +2 -2
- chia/_tests/pools/test_pool_cmdline.py +48 -21
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +2 -3
- chia/_tests/pools/test_pool_rpc.py +237 -105
- chia/_tests/pools/test_pool_wallet.py +11 -2
- chia/_tests/pools/test_wallet_pool_store.py +5 -4
- chia/_tests/rpc/test_rpc_client.py +1 -1
- chia/_tests/simulation/test_simulation.py +13 -8
- chia/_tests/simulation/test_simulator.py +2 -2
- chia/_tests/timelord/test_new_peak.py +191 -47
- chia/_tests/timelord/test_timelord.py +1 -1
- chia/_tests/tools/test_full_sync.py +0 -2
- chia/_tests/tools/test_run_block.py +3 -1
- chia/_tests/util/benchmark_cost.py +3 -3
- chia/_tests/util/benchmarks.py +2 -2
- chia/_tests/util/blockchain.py +11 -5
- chia/_tests/util/blockchain_mock.py +1 -4
- chia/_tests/util/coin_store.py +29 -0
- chia/_tests/util/constants.py +2 -18
- chia/_tests/util/full_sync.py +3 -3
- chia/_tests/util/generator_tools_testing.py +2 -3
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +33 -31
- chia/_tests/util/network_protocol_data.py +19 -17
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +3 -1
- chia/_tests/util/run_block.py +2 -2
- chia/_tests/util/setup_nodes.py +7 -7
- chia/_tests/util/spend_sim.py +47 -55
- chia/_tests/util/test_condition_tools.py +5 -4
- chia/_tests/util/test_config.py +2 -2
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +12 -14
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_paginator.py +4 -4
- chia/_tests/util/test_priority_mutex.py +2 -2
- chia/_tests/util/test_replace_str_to_bytes.py +15 -5
- chia/_tests/util/test_ssl_check.py +1 -1
- chia/_tests/util/test_testnet_overrides.py +13 -3
- chia/_tests/util/time_out_assert.py +4 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -2
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +352 -432
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +3 -6
- chia/_tests/wallet/cat_wallet/test_trades.py +53 -77
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -1
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +3 -3
- chia/_tests/wallet/clawback/test_clawback_metadata.py +4 -2
- chia/_tests/wallet/conftest.py +11 -12
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +11 -4
- chia/_tests/wallet/db_wallet/test_dl_offers.py +433 -130
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +3 -3
- chia/_tests/wallet/did_wallet/test_did.py +2132 -2000
- chia/_tests/wallet/nft_wallet/config.py +1 -1
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1610 -742
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +486 -907
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +4 -4
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +517 -294
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +133 -62
- chia/_tests/wallet/rpc/test_wallet_rpc.py +495 -265
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +10 -6
- chia/_tests/wallet/sync/test_wallet_sync.py +89 -60
- chia/_tests/wallet/test_clvm_casts.py +88 -0
- chia/_tests/wallet/test_coin_management.py +1 -1
- chia/_tests/wallet/test_coin_selection.py +1 -1
- chia/_tests/wallet/test_conditions.py +1 -1
- chia/_tests/wallet/test_new_wallet_protocol.py +13 -11
- chia/_tests/wallet/test_notifications.py +5 -3
- chia/_tests/wallet/test_sign_coin_spends.py +6 -6
- chia/_tests/wallet/test_signer_protocol.py +13 -12
- chia/_tests/wallet/test_singleton.py +1 -1
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +5 -7
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +108 -29
- chia/_tests/wallet/test_wallet_action_scope.py +9 -2
- chia/_tests/wallet/test_wallet_blockchain.py +2 -3
- chia/_tests/wallet/test_wallet_key_val_store.py +1 -2
- chia/_tests/wallet/test_wallet_node.py +2 -4
- chia/_tests/wallet/test_wallet_retry.py +4 -2
- chia/_tests/wallet/test_wallet_state_manager.py +191 -5
- chia/_tests/wallet/test_wallet_test_framework.py +1 -1
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +8 -8
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -12
- chia/_tests/wallet/wallet_block_tools.py +6 -6
- chia/_tests/weight_proof/test_weight_proof.py +10 -48
- chia/apis.py +1 -1
- chia/cmds/beta.py +1 -1
- chia/cmds/chia.py +9 -9
- chia/cmds/cmd_classes.py +12 -11
- chia/cmds/cmd_helpers.py +1 -1
- chia/cmds/cmds_util.py +12 -9
- chia/cmds/coin_funcs.py +2 -2
- chia/cmds/configure.py +2 -2
- chia/cmds/data.py +0 -2
- chia/cmds/data_funcs.py +1 -1
- chia/cmds/db_validate_func.py +1 -2
- chia/cmds/dev/__init__.py +0 -0
- chia/cmds/dev/data.py +273 -0
- chia/cmds/{gh.py → dev/gh.py} +5 -5
- chia/cmds/dev/main.py +22 -0
- chia/cmds/dev/mempool.py +78 -0
- chia/cmds/dev/mempool_funcs.py +63 -0
- chia/cmds/farm_funcs.py +5 -4
- chia/cmds/init_funcs.py +11 -11
- chia/cmds/keys.py +2 -2
- chia/cmds/keys_funcs.py +4 -4
- chia/cmds/netspace_funcs.py +1 -1
- chia/cmds/peer_funcs.py +2 -2
- chia/cmds/plotnft_funcs.py +72 -26
- chia/cmds/rpc.py +1 -1
- chia/cmds/show_funcs.py +5 -5
- chia/cmds/signer.py +8 -7
- chia/cmds/sim_funcs.py +8 -9
- chia/cmds/wallet.py +2 -2
- chia/cmds/wallet_funcs.py +165 -131
- chia/{util → consensus}/augmented_chain.py +1 -2
- chia/consensus/block_body_validation.py +54 -40
- chia/consensus/block_creation.py +42 -76
- chia/consensus/block_header_validation.py +32 -26
- chia/consensus/block_record.py +0 -3
- chia/consensus/blockchain.py +23 -32
- chia/consensus/blockchain_interface.py +1 -5
- chia/consensus/check_time_locks.py +57 -0
- chia/consensus/coin_store_protocol.py +151 -0
- chia/consensus/coinbase.py +0 -6
- chia/consensus/condition_costs.py +4 -0
- chia/{util → consensus}/condition_tools.py +4 -5
- chia/consensus/cost_calculator.py +1 -1
- chia/consensus/default_constants.py +32 -9
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +1 -2
- chia/consensus/find_fork_point.py +1 -3
- chia/consensus/full_block_to_block_record.py +1 -6
- chia/{util → consensus}/generator_tools.py +1 -3
- chia/consensus/get_block_challenge.py +30 -7
- chia/consensus/make_sub_epoch_summary.py +1 -5
- chia/consensus/multiprocess_validation.py +21 -20
- chia/consensus/pot_iterations.py +74 -13
- chia/{util → consensus}/prev_transaction_block.py +1 -1
- chia/consensus/vdf_info_computation.py +1 -3
- chia/daemon/keychain_proxy.py +5 -5
- chia/daemon/server.py +22 -5
- chia/data_layer/data_layer.py +92 -51
- chia/{rpc → data_layer}/data_layer_rpc_api.py +1 -1
- chia/{rpc → data_layer}/data_layer_rpc_util.py +3 -6
- chia/data_layer/data_layer_util.py +4 -6
- chia/data_layer/data_layer_wallet.py +42 -69
- chia/data_layer/dl_wallet_store.py +12 -6
- chia/data_layer/download_data.py +3 -3
- chia/data_layer/s3_plugin_service.py +0 -1
- chia/farmer/farmer.py +3 -4
- chia/farmer/farmer_api.py +11 -7
- chia/{rpc → farmer}/farmer_rpc_client.py +1 -1
- chia/full_node/block_height_map.py +7 -6
- chia/full_node/block_store.py +5 -7
- chia/full_node/bundle_tools.py +1 -2
- chia/full_node/coin_store.py +143 -124
- chia/{types → full_node}/eligible_coin_spends.py +39 -70
- chia/full_node/fee_estimator.py +1 -1
- chia/full_node/fee_estimator_interface.py +0 -8
- chia/full_node/fee_tracker.py +25 -25
- chia/full_node/full_node.py +70 -53
- chia/full_node/full_node_api.py +57 -40
- chia/{rpc → full_node}/full_node_rpc_api.py +87 -8
- chia/{rpc → full_node}/full_node_rpc_client.py +7 -6
- chia/full_node/full_node_store.py +23 -8
- chia/full_node/mempool.py +206 -53
- chia/full_node/mempool_check_conditions.py +20 -63
- chia/full_node/mempool_manager.py +26 -40
- chia/full_node/subscriptions.py +1 -3
- chia/full_node/tx_processing_queue.py +50 -3
- chia/full_node/weight_proof.py +46 -37
- chia/harvester/harvester.py +1 -1
- chia/harvester/harvester_api.py +22 -7
- chia/introducer/introducer.py +1 -1
- chia/introducer/introducer_api.py +1 -1
- chia/plot_sync/exceptions.py +1 -1
- chia/plot_sync/receiver.py +1 -1
- chia/plot_sync/sender.py +2 -2
- chia/pools/pool_puzzles.py +13 -18
- chia/pools/pool_wallet.py +23 -46
- chia/protocols/farmer_protocol.py +11 -3
- chia/protocols/full_node_protocol.py +1 -4
- chia/protocols/harvester_protocol.py +3 -3
- chia/protocols/pool_protocol.py +1 -2
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +1 -3
- chia/protocols/wallet_protocol.py +3 -3
- chia/rpc/rpc_client.py +7 -8
- chia/rpc/rpc_server.py +3 -3
- chia/rpc/util.py +3 -1
- chia/seeder/crawler.py +1 -1
- chia/seeder/crawler_api.py +1 -1
- chia/seeder/dns_server.py +2 -0
- chia/seeder/start_crawler.py +3 -3
- chia/server/address_manager.py +286 -38
- chia/server/address_manager_store.py +0 -215
- chia/{types → server}/aliases.py +7 -7
- chia/server/api_protocol.py +1 -1
- chia/server/chia_policy.py +1 -1
- chia/server/node_discovery.py +76 -113
- chia/server/rate_limits.py +1 -1
- chia/server/resolve_peer_info.py +43 -0
- chia/server/server.py +5 -5
- chia/server/start_data_layer.py +4 -4
- chia/server/start_farmer.py +5 -4
- chia/server/start_full_node.py +5 -4
- chia/server/start_harvester.py +7 -5
- chia/server/start_introducer.py +2 -2
- chia/server/start_service.py +1 -1
- chia/server/start_timelord.py +7 -5
- chia/server/start_wallet.py +7 -5
- chia/server/ws_connection.py +1 -1
- chia/simulator/add_blocks_in_batches.py +2 -2
- chia/simulator/block_tools.py +245 -201
- chia/simulator/full_node_simulator.py +38 -10
- chia/simulator/setup_services.py +12 -12
- chia/simulator/simulator_full_node_rpc_api.py +2 -2
- chia/simulator/simulator_full_node_rpc_client.py +2 -2
- chia/simulator/simulator_test_tools.py +2 -2
- chia/simulator/start_simulator.py +1 -1
- chia/simulator/wallet_tools.py +10 -18
- chia/ssl/create_ssl.py +1 -1
- chia/timelord/iters_from_block.py +14 -14
- chia/timelord/timelord.py +15 -11
- chia/timelord/timelord_api.py +14 -2
- chia/timelord/timelord_state.py +20 -14
- chia/types/blockchain_format/program.py +53 -10
- chia/types/blockchain_format/proof_of_space.py +73 -19
- chia/types/coin_spend.py +3 -56
- chia/types/generator_types.py +28 -0
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +12 -7
- chia/types/unfinished_header_block.py +1 -2
- chia/types/validation_state.py +1 -2
- chia/types/weight_proof.py +1 -3
- chia/util/action_scope.py +3 -3
- chia/util/block_cache.py +1 -2
- chia/util/byte_types.py +1 -1
- chia/util/casts.py +21 -0
- chia/util/config.py +0 -37
- chia/util/db_wrapper.py +8 -1
- chia/util/errors.py +3 -2
- chia/util/initial-config.yaml +21 -5
- chia/util/keychain.py +6 -7
- chia/util/keyring_wrapper.py +5 -5
- chia/util/limited_semaphore.py +1 -1
- chia/util/priority_mutex.py +1 -1
- chia/util/streamable.py +63 -5
- chia/util/task_timing.py +1 -1
- chia/util/virtual_project_analysis.py +1 -1
- chia/wallet/cat_wallet/cat_info.py +7 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +9 -5
- chia/wallet/cat_wallet/cat_utils.py +1 -1
- chia/wallet/cat_wallet/cat_wallet.py +44 -36
- chia/wallet/cat_wallet/lineage_store.py +7 -0
- chia/wallet/cat_wallet/r_cat_wallet.py +274 -0
- chia/wallet/conditions.py +5 -10
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -4
- chia/wallet/derivation_record.py +33 -0
- chia/wallet/derive_keys.py +3 -3
- chia/wallet/did_wallet/did_info.py +12 -3
- chia/wallet/did_wallet/did_wallet.py +132 -101
- chia/wallet/did_wallet/did_wallet_puzzles.py +9 -9
- chia/wallet/driver_protocol.py +3 -1
- chia/{types/spend_bundle.py → wallet/estimate_fees.py} +2 -7
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
- chia/wallet/nft_wallet/nft_wallet.py +69 -112
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +6 -4
- chia/wallet/nft_wallet/transfer_program_puzzle.py +4 -2
- chia/wallet/nft_wallet/uncurry_nft.py +4 -6
- chia/wallet/notification_manager.py +2 -3
- chia/wallet/outer_puzzles.py +7 -2
- chia/wallet/puzzle_drivers.py +1 -1
- chia/wallet/puzzles/clawback/drivers.py +5 -4
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -1
- chia/wallet/puzzles/singleton_top_layer.py +2 -1
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +2 -1
- chia/wallet/puzzles/tails.py +1 -3
- chia/wallet/signer_protocol.py +5 -6
- chia/wallet/singleton.py +5 -4
- chia/wallet/singleton_record.py +1 -1
- chia/wallet/trade_manager.py +18 -20
- chia/wallet/trade_record.py +3 -6
- chia/wallet/trading/offer.py +12 -13
- chia/wallet/uncurried_puzzle.py +2 -2
- chia/wallet/util/compute_additions.py +58 -0
- chia/wallet/util/compute_hints.py +3 -3
- chia/wallet/util/compute_memos.py +4 -4
- chia/wallet/util/curry_and_treehash.py +2 -1
- chia/wallet/util/debug_spend_bundle.py +1 -1
- chia/wallet/util/merkle_tree.py +1 -1
- chia/wallet/util/peer_request_cache.py +1 -2
- chia/wallet/util/tx_config.py +3 -8
- chia/wallet/util/wallet_sync_utils.py +10 -5
- chia/wallet/util/wallet_types.py +1 -0
- chia/wallet/vc_wallet/cr_cat_drivers.py +17 -18
- chia/wallet/vc_wallet/cr_cat_wallet.py +30 -28
- chia/wallet/vc_wallet/cr_outer_puzzle.py +5 -3
- chia/wallet/vc_wallet/vc_drivers.py +50 -8
- chia/wallet/vc_wallet/vc_store.py +3 -5
- chia/wallet/vc_wallet/vc_wallet.py +15 -22
- chia/wallet/wallet.py +36 -46
- chia/wallet/wallet_action_scope.py +73 -4
- chia/wallet/wallet_blockchain.py +1 -3
- chia/wallet/wallet_interested_store.py +1 -1
- chia/wallet/wallet_nft_store.py +3 -3
- chia/wallet/wallet_node.py +17 -16
- chia/wallet/wallet_node_api.py +4 -5
- chia/wallet/wallet_pool_store.py +1 -1
- chia/wallet/wallet_protocol.py +2 -0
- chia/wallet/wallet_puzzle_store.py +1 -1
- chia/{rpc → wallet}/wallet_request_types.py +670 -81
- chia/{rpc → wallet}/wallet_rpc_api.py +735 -766
- chia/{rpc → wallet}/wallet_rpc_client.py +268 -420
- chia/wallet/wallet_singleton_store.py +8 -7
- chia/wallet/wallet_spend_bundle.py +4 -3
- chia/wallet/wallet_state_manager.py +320 -191
- chia/wallet/wallet_weight_proof_handler.py +1 -2
- chia/wallet/wsm_apis.py +98 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/METADATA +7 -7
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/RECORD +443 -436
- mozilla-ca/cacert.pem +3 -165
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +0 -145
- chia/cmds/dev.py +0 -18
- chia/types/blockchain_format/slots.py +0 -9
- chia/types/blockchain_format/sub_epoch_summary.py +0 -5
- chia/types/end_of_slot_bundle.py +0 -5
- chia/types/full_block.py +0 -5
- chia/types/header_block.py +0 -5
- chia/types/spend_bundle_conditions.py +0 -7
- chia/types/transaction_queue_entry.py +0 -56
- chia/types/unfinished_block.py +0 -5
- /chia/cmds/{installers.py → dev/installers.py} +0 -0
- /chia/cmds/{sim.py → dev/sim.py} +0 -0
- /chia/{util → cmds}/dump_keyring.py +0 -0
- /chia/{full_node → consensus}/signage_point.py +0 -0
- /chia/{rpc → data_layer}/data_layer_rpc_client.py +0 -0
- /chia/{rpc → farmer}/farmer_rpc_api.py +0 -0
- /chia/{util → full_node}/full_block_utils.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_api.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_client.py +0 -0
- /chia/{full_node → protocols}/fee_estimate.py +0 -0
- /chia/{server → protocols}/outbound_message.py +0 -0
- /chia/{rpc → seeder}/crawler_rpc_api.py +0 -0
- /chia/{util → simulator}/vdf_prover.py +0 -0
- /chia/{util → ssl}/ssl_check.py +0 -0
- /chia/{rpc → timelord}/timelord_rpc_api.py +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/entry_points.txt +0 -0
|
@@ -16,19 +16,20 @@ import pytest
|
|
|
16
16
|
from _pytest.fixtures import SubRequest
|
|
17
17
|
from chia_rs import ConsensusConstants, G1Element
|
|
18
18
|
from chia_rs.sized_bytes import bytes32
|
|
19
|
-
from chia_rs.sized_ints import uint32, uint64
|
|
19
|
+
from chia_rs.sized_ints import uint16, uint32, uint64
|
|
20
|
+
from pytest_mock import MockerFixture
|
|
20
21
|
|
|
21
22
|
from chia._tests.environments.wallet import WalletStateTransition, WalletTestFramework
|
|
22
23
|
from chia._tests.util.setup_nodes import setup_simulators_and_wallets_service
|
|
23
24
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
24
25
|
from chia.pools.pool_wallet_info import PoolSingletonState, PoolWalletInfo
|
|
25
|
-
from chia.rpc.
|
|
26
|
+
from chia.rpc.rpc_client import ResponseFailureError
|
|
27
|
+
from chia.server.aliases import WalletService
|
|
26
28
|
from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
|
|
27
29
|
from chia.simulator.block_tools import BlockTools, get_plot_dir
|
|
28
30
|
from chia.simulator.full_node_simulator import FullNodeSimulator
|
|
29
31
|
from chia.simulator.simulator_protocol import ReorgProtocol
|
|
30
32
|
from chia.simulator.start_simulator import SimulatorFullNodeService
|
|
31
|
-
from chia.types.aliases import WalletService
|
|
32
33
|
from chia.types.peer_info import PeerInfo
|
|
33
34
|
from chia.util.bech32m import encode_puzzle_hash
|
|
34
35
|
from chia.util.byte_types import hexstr_to_bytes
|
|
@@ -40,6 +41,8 @@ from chia.wallet.util.transaction_type import TransactionType
|
|
|
40
41
|
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
|
|
41
42
|
from chia.wallet.util.wallet_types import WalletType
|
|
42
43
|
from chia.wallet.wallet_node import WalletNode
|
|
44
|
+
from chia.wallet.wallet_request_types import PWAbsorbRewards, PWJoinPool, PWSelfPool, PWStatus
|
|
45
|
+
from chia.wallet.wallet_rpc_client import WalletRpcClient
|
|
43
46
|
from chia.wallet.wallet_state_manager import WalletStateManager
|
|
44
47
|
|
|
45
48
|
# TODO: Compare deducted fees in all tests against reported total_fee
|
|
@@ -189,7 +192,7 @@ async def setup(
|
|
|
189
192
|
|
|
190
193
|
|
|
191
194
|
async def verify_pool_state(wallet_rpc: WalletRpcClient, w_id: int, expected_state: PoolSingletonState) -> bool:
|
|
192
|
-
pw_status: PoolWalletInfo = (await wallet_rpc.pw_status(w_id))
|
|
195
|
+
pw_status: PoolWalletInfo = (await wallet_rpc.pw_status(PWStatus(uint32(w_id)))).state
|
|
193
196
|
return pw_status.current.state == expected_state.value
|
|
194
197
|
|
|
195
198
|
|
|
@@ -253,7 +256,8 @@ async def create_new_plotnft(
|
|
|
253
256
|
wallet_state_manager: WalletStateManager = wallet_test_framework.environments[0].wallet_state_manager
|
|
254
257
|
wallet_rpc: WalletRpcClient = wallet_test_framework.environments[0].rpc_client
|
|
255
258
|
|
|
256
|
-
|
|
259
|
+
async with wallet_state_manager.new_action_scope(wallet_test_framework.tx_config, push=True) as action_scope:
|
|
260
|
+
our_ph = await action_scope.get_puzzle_hash(wallet_state_manager)
|
|
257
261
|
|
|
258
262
|
await wallet_rpc.create_new_pool_wallet(
|
|
259
263
|
target_puzzlehash=our_ph,
|
|
@@ -283,7 +287,8 @@ class TestPoolWalletRpc:
|
|
|
283
287
|
client, wallet_node, full_node_api, _total_block_rewards, _ = one_wallet_node_and_rpc
|
|
284
288
|
wallet = wallet_node.wallet_state_manager.main_wallet
|
|
285
289
|
|
|
286
|
-
|
|
290
|
+
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
291
|
+
our_ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
287
292
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
288
293
|
assert len(await client.get_wallets(WalletType.POOLING_WALLET)) == 0
|
|
289
294
|
creation_tx: TransactionRecord = await client.create_new_pool_wallet(
|
|
@@ -295,13 +300,13 @@ class TestPoolWalletRpc:
|
|
|
295
300
|
summaries_response = await client.get_wallets(WalletType.POOLING_WALLET)
|
|
296
301
|
assert len(summaries_response) == 1
|
|
297
302
|
wallet_id: int = summaries_response[0]["id"]
|
|
298
|
-
status: PoolWalletInfo = (await client.pw_status(wallet_id))
|
|
303
|
+
status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
299
304
|
|
|
300
305
|
assert status.current.state == PoolSingletonState.SELF_POOLING.value
|
|
301
306
|
assert status.target is None
|
|
302
307
|
assert status.current.owner_pubkey == G1Element.from_bytes(
|
|
303
308
|
bytes.fromhex(
|
|
304
|
-
"
|
|
309
|
+
"880afd6f9e123005655376e389015877e60060b768592809d2c746325d256edeb0017e1b406cba0832aa983e5c4bbf54"
|
|
305
310
|
)
|
|
306
311
|
)
|
|
307
312
|
assert status.current.pool_url == ""
|
|
@@ -314,7 +319,7 @@ class TestPoolWalletRpc:
|
|
|
314
319
|
pool_config = pool_list[0]
|
|
315
320
|
assert (
|
|
316
321
|
pool_config["owner_public_key"]
|
|
317
|
-
== "
|
|
322
|
+
== "0x880afd6f9e123005655376e389015877e60060b768592809d2c746325d256edeb0017e1b406cba0832aa983e5c4bbf54"
|
|
318
323
|
)
|
|
319
324
|
# It can be one of multiple launcher IDs, due to selecting a different coin
|
|
320
325
|
launcher_id = None
|
|
@@ -335,7 +340,8 @@ class TestPoolWalletRpc:
|
|
|
335
340
|
client, wallet_node, full_node_api, _total_block_rewards, _ = one_wallet_node_and_rpc
|
|
336
341
|
wallet = wallet_node.wallet_state_manager.main_wallet
|
|
337
342
|
|
|
338
|
-
|
|
343
|
+
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
344
|
+
our_ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
339
345
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
340
346
|
assert len(await client.get_wallets(WalletType.POOLING_WALLET)) == 0
|
|
341
347
|
|
|
@@ -348,13 +354,13 @@ class TestPoolWalletRpc:
|
|
|
348
354
|
summaries_response = await client.get_wallets(WalletType.POOLING_WALLET)
|
|
349
355
|
assert len(summaries_response) == 1
|
|
350
356
|
wallet_id: int = summaries_response[0]["id"]
|
|
351
|
-
status: PoolWalletInfo = (await client.pw_status(wallet_id))
|
|
357
|
+
status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
352
358
|
|
|
353
359
|
assert status.current.state == PoolSingletonState.FARMING_TO_POOL.value
|
|
354
360
|
assert status.target is None
|
|
355
361
|
assert status.current.owner_pubkey == G1Element.from_bytes(
|
|
356
362
|
bytes.fromhex(
|
|
357
|
-
"
|
|
363
|
+
"880afd6f9e123005655376e389015877e60060b768592809d2c746325d256edeb0017e1b406cba0832aa983e5c4bbf54"
|
|
358
364
|
)
|
|
359
365
|
)
|
|
360
366
|
assert status.current.pool_url == "http://pool.example.com"
|
|
@@ -367,7 +373,7 @@ class TestPoolWalletRpc:
|
|
|
367
373
|
pool_config = pool_list[0]
|
|
368
374
|
assert (
|
|
369
375
|
pool_config["owner_public_key"]
|
|
370
|
-
== "
|
|
376
|
+
== "0x880afd6f9e123005655376e389015877e60060b768592809d2c746325d256edeb0017e1b406cba0832aa983e5c4bbf54"
|
|
371
377
|
)
|
|
372
378
|
# It can be one of multiple launcher IDs, due to selecting a different coin
|
|
373
379
|
launcher_id = None
|
|
@@ -390,8 +396,9 @@ class TestPoolWalletRpc:
|
|
|
390
396
|
|
|
391
397
|
wallet = wallet_node.wallet_state_manager.main_wallet
|
|
392
398
|
|
|
393
|
-
|
|
394
|
-
|
|
399
|
+
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
400
|
+
our_ph_1 = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
401
|
+
our_ph_2 = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
395
402
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
396
403
|
assert len(await client.get_wallets(WalletType.POOLING_WALLET)) == 0
|
|
397
404
|
|
|
@@ -408,15 +415,15 @@ class TestPoolWalletRpc:
|
|
|
408
415
|
|
|
409
416
|
async def pw_created(check_wallet_id: int) -> bool:
|
|
410
417
|
try:
|
|
411
|
-
await client.pw_status(check_wallet_id)
|
|
418
|
+
await client.pw_status(PWStatus(uint32(check_wallet_id)))
|
|
412
419
|
return True
|
|
413
420
|
except ValueError:
|
|
414
421
|
return False
|
|
415
422
|
|
|
416
423
|
await time_out_assert(10, pw_created, True, 2)
|
|
417
424
|
await time_out_assert(10, pw_created, True, 3)
|
|
418
|
-
status_2: PoolWalletInfo = (await client.pw_status(2))
|
|
419
|
-
status_3: PoolWalletInfo = (await client.pw_status(3))
|
|
425
|
+
status_2: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(2)))).state
|
|
426
|
+
status_3: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(3)))).state
|
|
420
427
|
|
|
421
428
|
if status_2.current.state == PoolSingletonState.SELF_POOLING.value:
|
|
422
429
|
assert status_3.current.state == PoolSingletonState.FARMING_TO_POOL.value
|
|
@@ -437,9 +444,9 @@ class TestPoolWalletRpc:
|
|
|
437
444
|
assert len(summaries_response) == 1
|
|
438
445
|
|
|
439
446
|
with pytest.raises(ValueError):
|
|
440
|
-
await client.pw_status(2)
|
|
447
|
+
await client.pw_status(PWStatus(uint32(2)))
|
|
441
448
|
with pytest.raises(ValueError):
|
|
442
|
-
await client.pw_status(3)
|
|
449
|
+
await client.pw_status(PWStatus(uint32(3)))
|
|
443
450
|
|
|
444
451
|
# Create some CAT wallets to increase wallet IDs
|
|
445
452
|
def mempool_empty() -> bool:
|
|
@@ -476,11 +483,9 @@ class TestPoolWalletRpc:
|
|
|
476
483
|
pool_list = full_config["pool"]["pool_list"]
|
|
477
484
|
assert len(pool_list) == i + 3
|
|
478
485
|
if i == 0:
|
|
479
|
-
# Ensures that the CAT creation does not cause pool wallet IDs to increment
|
|
480
486
|
for some_wallet in wallet_node.wallet_state_manager.wallets.values():
|
|
481
487
|
if some_wallet.type() == WalletType.POOLING_WALLET:
|
|
482
|
-
status: PoolWalletInfo = (await client.pw_status(some_wallet.id()))
|
|
483
|
-
assert (await some_wallet.get_pool_wallet_index()) < 5
|
|
488
|
+
status: PoolWalletInfo = (await client.pw_status(PWStatus(some_wallet.id()))).state
|
|
484
489
|
auth_sk = find_authentication_sk(
|
|
485
490
|
[some_wallet.wallet_state_manager.get_master_private_key()], status.current.owner_pubkey
|
|
486
491
|
)
|
|
@@ -500,7 +505,8 @@ class TestPoolWalletRpc:
|
|
|
500
505
|
|
|
501
506
|
wallet = wallet_node.wallet_state_manager.main_wallet
|
|
502
507
|
|
|
503
|
-
|
|
508
|
+
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
509
|
+
our_ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
504
510
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
505
511
|
assert len(await client.get_wallets(WalletType.POOLING_WALLET)) == 0
|
|
506
512
|
|
|
@@ -509,7 +515,7 @@ class TestPoolWalletRpc:
|
|
|
509
515
|
)
|
|
510
516
|
await full_node_api.process_transaction_records(records=[creation_tx])
|
|
511
517
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
512
|
-
status: PoolWalletInfo = (await client.pw_status(2))
|
|
518
|
+
status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(2)))).state
|
|
513
519
|
|
|
514
520
|
assert status.current.state == PoolSingletonState.SELF_POOLING.value
|
|
515
521
|
async with manage_temporary_pool_plot(bt, status.p2_singleton_puzzle_hash) as pool_plot:
|
|
@@ -529,7 +535,11 @@ class TestPoolWalletRpc:
|
|
|
529
535
|
assert bal["confirmed_wallet_balance"] == 2 * 1_750_000_000_000
|
|
530
536
|
|
|
531
537
|
# Claim 2 * 1.75, and farm a new 1.75
|
|
532
|
-
absorb_txs
|
|
538
|
+
absorb_txs = (
|
|
539
|
+
await client.pw_absorb_rewards(
|
|
540
|
+
PWAbsorbRewards(wallet_id=uint32(2), fee=uint64(fee), push=True), DEFAULT_TX_CONFIG
|
|
541
|
+
)
|
|
542
|
+
).transactions
|
|
533
543
|
await full_node_api.wait_transaction_records_entered_mempool(records=absorb_txs)
|
|
534
544
|
await full_node_api.farm_blocks_to_puzzlehash(count=2, farm_to=our_ph, guarantee_transaction_blocks=True)
|
|
535
545
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
@@ -544,14 +554,18 @@ class TestPoolWalletRpc:
|
|
|
544
554
|
)
|
|
545
555
|
== 2
|
|
546
556
|
)
|
|
547
|
-
new_status: PoolWalletInfo = (await client.pw_status(2))
|
|
557
|
+
new_status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(2)))).state
|
|
548
558
|
assert status.current == new_status.current
|
|
549
559
|
assert status.tip_singleton_coin_id != new_status.tip_singleton_coin_id
|
|
550
560
|
bal = await client.get_wallet_balance(2)
|
|
551
561
|
assert bal["confirmed_wallet_balance"] == 1 * 1_750_000_000_000
|
|
552
562
|
|
|
553
563
|
# Claim another 1.75
|
|
554
|
-
absorb_txs1
|
|
564
|
+
absorb_txs1 = (
|
|
565
|
+
await client.pw_absorb_rewards(
|
|
566
|
+
PWAbsorbRewards(wallet_id=uint32(2), fee=uint64(fee), push=True), DEFAULT_TX_CONFIG
|
|
567
|
+
)
|
|
568
|
+
).transactions
|
|
555
569
|
|
|
556
570
|
await full_node_api.wait_transaction_records_entered_mempool(records=absorb_txs1)
|
|
557
571
|
|
|
@@ -576,7 +590,9 @@ class TestPoolWalletRpc:
|
|
|
576
590
|
assert bal["confirmed_wallet_balance"] == 0
|
|
577
591
|
|
|
578
592
|
with pytest.raises(ValueError):
|
|
579
|
-
await client.pw_absorb_rewards(
|
|
593
|
+
await client.pw_absorb_rewards(
|
|
594
|
+
PWAbsorbRewards(wallet_id=uint32(2), fee=uint64(fee), push=True), DEFAULT_TX_CONFIG
|
|
595
|
+
)
|
|
580
596
|
|
|
581
597
|
tx1 = await client.get_transactions(1)
|
|
582
598
|
assert (250_000_000_000 + fee) in [tx.amount for tx in tx1]
|
|
@@ -590,7 +606,8 @@ class TestPoolWalletRpc:
|
|
|
590
606
|
|
|
591
607
|
wallet = wallet_node.wallet_state_manager.main_wallet
|
|
592
608
|
|
|
593
|
-
|
|
609
|
+
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
610
|
+
our_ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
594
611
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
595
612
|
assert len(await client.get_wallets(WalletType.POOLING_WALLET)) == 0
|
|
596
613
|
|
|
@@ -607,7 +624,7 @@ class TestPoolWalletRpc:
|
|
|
607
624
|
main_bal = await client.get_wallet_balance(1)
|
|
608
625
|
assert main_bal["confirmed_wallet_balance"] == main_expected_confirmed_balance
|
|
609
626
|
|
|
610
|
-
status: PoolWalletInfo = (await client.pw_status(2))
|
|
627
|
+
status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(2)))).state
|
|
611
628
|
assert status.current.state == PoolSingletonState.SELF_POOLING.value
|
|
612
629
|
|
|
613
630
|
async with manage_temporary_pool_plot(bt, status.p2_singleton_puzzle_hash) as pool_plot:
|
|
@@ -634,14 +651,19 @@ class TestPoolWalletRpc:
|
|
|
634
651
|
assert bal["confirmed_wallet_balance"] == pool_expected_confirmed_balance
|
|
635
652
|
|
|
636
653
|
# Claim
|
|
637
|
-
absorb_txs
|
|
654
|
+
absorb_txs = (
|
|
655
|
+
await client.pw_absorb_rewards(
|
|
656
|
+
PWAbsorbRewards(wallet_id=uint32(2), fee=uint64(fee), max_spends_in_tx=uint16(1), push=True),
|
|
657
|
+
DEFAULT_TX_CONFIG,
|
|
658
|
+
)
|
|
659
|
+
).transactions
|
|
638
660
|
await full_node_api.process_transaction_records(records=absorb_txs)
|
|
639
661
|
main_expected_confirmed_balance -= fee
|
|
640
662
|
main_expected_confirmed_balance += 1_750_000_000_000
|
|
641
663
|
pool_expected_confirmed_balance -= 1_750_000_000_000
|
|
642
664
|
|
|
643
665
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
644
|
-
new_status: PoolWalletInfo = (await client.pw_status(2))
|
|
666
|
+
new_status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(2)))).state
|
|
645
667
|
assert status.current == new_status.current
|
|
646
668
|
assert status.tip_singleton_coin_id != new_status.tip_singleton_coin_id
|
|
647
669
|
main_bal = await client.get_wallet_balance(1)
|
|
@@ -660,7 +682,8 @@ class TestPoolWalletRpc:
|
|
|
660
682
|
|
|
661
683
|
wallet = wallet_node.wallet_state_manager.main_wallet
|
|
662
684
|
|
|
663
|
-
|
|
685
|
+
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
686
|
+
our_ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
664
687
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
665
688
|
assert len(await client.get_wallets(WalletType.POOLING_WALLET)) == 0
|
|
666
689
|
creation_tx: TransactionRecord = await client.create_new_pool_wallet(
|
|
@@ -673,14 +696,14 @@ class TestPoolWalletRpc:
|
|
|
673
696
|
|
|
674
697
|
async def farming_to_pool() -> bool:
|
|
675
698
|
try:
|
|
676
|
-
status: PoolWalletInfo = (await client.pw_status(2))
|
|
699
|
+
status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(2)))).state
|
|
677
700
|
return status.current.state == PoolSingletonState.FARMING_TO_POOL.value
|
|
678
701
|
except ValueError:
|
|
679
702
|
return False
|
|
680
703
|
|
|
681
704
|
await time_out_assert(20, farming_to_pool)
|
|
682
705
|
|
|
683
|
-
status: PoolWalletInfo = (await client.pw_status(2))
|
|
706
|
+
status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(2)))).state
|
|
684
707
|
async with manage_temporary_pool_plot(bt, status.p2_singleton_puzzle_hash) as pool_plot:
|
|
685
708
|
all_blocks = await full_node_api.get_all_full_blocks()
|
|
686
709
|
blocks = bt.get_consecutive_blocks(
|
|
@@ -701,12 +724,15 @@ class TestPoolWalletRpc:
|
|
|
701
724
|
assert bal["confirmed_wallet_balance"] == 0
|
|
702
725
|
|
|
703
726
|
# Claim block_count * 1.75
|
|
704
|
-
ret = await client.pw_absorb_rewards(
|
|
705
|
-
|
|
727
|
+
ret = await client.pw_absorb_rewards(
|
|
728
|
+
PWAbsorbRewards(wallet_id=uint32(2), fee=uint64(fee), push=True), DEFAULT_TX_CONFIG
|
|
729
|
+
)
|
|
730
|
+
absorb_txs = ret.transactions
|
|
706
731
|
if fee == 0:
|
|
707
|
-
assert ret
|
|
732
|
+
assert ret.fee_transaction is None
|
|
708
733
|
else:
|
|
709
|
-
assert ret
|
|
734
|
+
assert ret.fee_transaction is not None
|
|
735
|
+
assert ret.fee_transaction.fee_amount == fee
|
|
710
736
|
for tx in absorb_txs:
|
|
711
737
|
assert tx.fee_amount == fee
|
|
712
738
|
await full_node_api.process_transaction_records(records=absorb_txs)
|
|
@@ -714,11 +740,11 @@ class TestPoolWalletRpc:
|
|
|
714
740
|
main_expected_confirmed_balance += block_count * 1_750_000_000_000
|
|
715
741
|
|
|
716
742
|
async def status_updated() -> bool:
|
|
717
|
-
new_st: PoolWalletInfo = (await client.pw_status(2))
|
|
743
|
+
new_st: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(2)))).state
|
|
718
744
|
return status.current == new_st.current and status.tip_singleton_coin_id != new_st.tip_singleton_coin_id
|
|
719
745
|
|
|
720
746
|
await time_out_assert(20, status_updated)
|
|
721
|
-
new_status = (await client.pw_status(2))
|
|
747
|
+
new_status = (await client.pw_status(PWStatus(uint32(2)))).state
|
|
722
748
|
bal = await client.get_wallet_balance(2)
|
|
723
749
|
assert bal["confirmed_wallet_balance"] == 0
|
|
724
750
|
|
|
@@ -755,14 +781,16 @@ class TestPoolWalletRpc:
|
|
|
755
781
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
756
782
|
|
|
757
783
|
# Absorb the farmed reward
|
|
758
|
-
ret = await client.pw_absorb_rewards(
|
|
759
|
-
|
|
784
|
+
ret = await client.pw_absorb_rewards(
|
|
785
|
+
PWAbsorbRewards(wallet_id=uint32(2), fee=uint64(fee), push=True), DEFAULT_TX_CONFIG
|
|
786
|
+
)
|
|
787
|
+
absorb_tx = ret.transaction
|
|
760
788
|
await full_node_api.process_transaction_records(records=[absorb_tx])
|
|
761
789
|
|
|
762
790
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
763
791
|
await time_out_assert(20, status_updated)
|
|
764
|
-
status = (await client.pw_status(2))
|
|
765
|
-
assert ret
|
|
792
|
+
status = (await client.pw_status(PWStatus(uint32(2)))).state
|
|
793
|
+
assert ret.fee_transaction is None
|
|
766
794
|
|
|
767
795
|
bal2 = await client.get_wallet_balance(2)
|
|
768
796
|
assert bal2["confirmed_wallet_balance"] == 0
|
|
@@ -804,8 +832,8 @@ class TestPoolWalletRpc:
|
|
|
804
832
|
assert len(summaries_response) == 2
|
|
805
833
|
wallet_id: int = summaries_response[0]["id"]
|
|
806
834
|
wallet_id_2: int = summaries_response[1]["id"]
|
|
807
|
-
status: PoolWalletInfo = (await client.pw_status(wallet_id))
|
|
808
|
-
status_2: PoolWalletInfo = (await client.pw_status(wallet_id_2))
|
|
835
|
+
status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
836
|
+
status_2: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(wallet_id_2)))).state
|
|
809
837
|
|
|
810
838
|
assert status.current.state == PoolSingletonState.SELF_POOLING.value
|
|
811
839
|
assert status_2.current.state == PoolSingletonState.SELF_POOLING.value
|
|
@@ -813,30 +841,40 @@ class TestPoolWalletRpc:
|
|
|
813
841
|
assert status_2.target is None
|
|
814
842
|
|
|
815
843
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
816
|
-
join_pool
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
844
|
+
join_pool = await client.pw_join_pool(
|
|
845
|
+
PWJoinPool(
|
|
846
|
+
wallet_id=uint32(wallet_id),
|
|
847
|
+
target_puzzlehash=pool_ph,
|
|
848
|
+
pool_url="https://pool.example.com",
|
|
849
|
+
relative_lock_height=uint32(10),
|
|
850
|
+
fee=uint64(fee),
|
|
851
|
+
push=True,
|
|
852
|
+
),
|
|
853
|
+
DEFAULT_TX_CONFIG,
|
|
822
854
|
)
|
|
823
|
-
|
|
824
|
-
join_pool_tx: TransactionRecord = join_pool["transaction"]
|
|
855
|
+
join_pool_tx: TransactionRecord = join_pool.transaction
|
|
825
856
|
assert join_pool_tx is not None
|
|
826
857
|
await full_node_api.wait_transaction_records_entered_mempool(records=[join_pool_tx])
|
|
827
858
|
|
|
828
|
-
join_pool_2
|
|
829
|
-
|
|
859
|
+
join_pool_2 = await client.pw_join_pool(
|
|
860
|
+
PWJoinPool(
|
|
861
|
+
wallet_id=uint32(wallet_id_2),
|
|
862
|
+
target_puzzlehash=pool_ph,
|
|
863
|
+
pool_url="https://pool.example.com",
|
|
864
|
+
relative_lock_height=uint32(10),
|
|
865
|
+
fee=uint64(fee),
|
|
866
|
+
push=True,
|
|
867
|
+
),
|
|
868
|
+
DEFAULT_TX_CONFIG,
|
|
830
869
|
)
|
|
831
|
-
|
|
832
|
-
join_pool_tx_2: TransactionRecord = join_pool_2["transaction"]
|
|
870
|
+
join_pool_tx_2: TransactionRecord = join_pool_2.transaction
|
|
833
871
|
for r in join_pool_tx.removals:
|
|
834
872
|
assert r not in join_pool_tx_2.removals
|
|
835
873
|
assert join_pool_tx_2 is not None
|
|
836
874
|
await full_node_api.wait_transaction_records_entered_mempool(records=[join_pool_tx_2])
|
|
837
875
|
|
|
838
|
-
status = (await client.pw_status(wallet_id))
|
|
839
|
-
status_2 = (await client.pw_status(wallet_id_2))
|
|
876
|
+
status = (await client.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
877
|
+
status_2 = (await client.pw_status(PWStatus(uint32(wallet_id_2)))).state
|
|
840
878
|
|
|
841
879
|
assert status.current.state == PoolSingletonState.SELF_POOLING.value
|
|
842
880
|
assert status.target is not None
|
|
@@ -848,7 +886,7 @@ class TestPoolWalletRpc:
|
|
|
848
886
|
await full_node_api.process_transaction_records(records=[join_pool_tx, join_pool_tx_2])
|
|
849
887
|
|
|
850
888
|
async def status_is_farming_to_pool(w_id: int) -> bool:
|
|
851
|
-
pw_status: PoolWalletInfo = (await client.pw_status(w_id))
|
|
889
|
+
pw_status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(w_id)))).state
|
|
852
890
|
return pw_status.current.state == PoolSingletonState.FARMING_TO_POOL.value
|
|
853
891
|
|
|
854
892
|
await time_out_assert(20, status_is_farming_to_pool, True, wallet_id)
|
|
@@ -879,23 +917,24 @@ class TestPoolWalletRpc:
|
|
|
879
917
|
summaries_response = await client.get_wallets(WalletType.POOLING_WALLET)
|
|
880
918
|
assert len(summaries_response) == 1
|
|
881
919
|
wallet_id: int = summaries_response[0]["id"]
|
|
882
|
-
status: PoolWalletInfo = (await client.pw_status(wallet_id))
|
|
920
|
+
status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
883
921
|
|
|
884
922
|
assert status.current.state == PoolSingletonState.SELF_POOLING.value
|
|
885
923
|
assert status.target is None
|
|
886
924
|
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
wallet_id,
|
|
890
|
-
pool_ph,
|
|
891
|
-
"https://pool.example.com",
|
|
892
|
-
uint32(5),
|
|
893
|
-
fee,
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
925
|
+
await client.pw_join_pool(
|
|
926
|
+
PWJoinPool(
|
|
927
|
+
wallet_id=uint32(wallet_id),
|
|
928
|
+
target_puzzlehash=pool_ph,
|
|
929
|
+
pool_url="https://pool.example.com",
|
|
930
|
+
relative_lock_height=uint32(5),
|
|
931
|
+
fee=fee,
|
|
932
|
+
push=True,
|
|
933
|
+
),
|
|
934
|
+
DEFAULT_TX_CONFIG,
|
|
935
|
+
)
|
|
897
936
|
|
|
898
|
-
status = (await client.pw_status(wallet_id))
|
|
937
|
+
status = (await client.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
899
938
|
|
|
900
939
|
assert status.current.state == PoolSingletonState.SELF_POOLING.value
|
|
901
940
|
assert status.current.pool_url == ""
|
|
@@ -911,22 +950,24 @@ class TestPoolWalletRpc:
|
|
|
911
950
|
|
|
912
951
|
async def status_is_farming_to_pool() -> bool:
|
|
913
952
|
await full_node_api.farm_blocks_to_puzzlehash(count=1, farm_to=our_ph, guarantee_transaction_blocks=True)
|
|
914
|
-
pw_status: PoolWalletInfo = (await client.pw_status(wallet_id))
|
|
953
|
+
pw_status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
915
954
|
return pw_status.current.state == PoolSingletonState.FARMING_TO_POOL.value
|
|
916
955
|
|
|
917
956
|
await time_out_assert(timeout=MAX_WAIT_SECS, function=status_is_farming_to_pool)
|
|
918
957
|
|
|
919
958
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
920
959
|
|
|
921
|
-
leave_pool_tx
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
960
|
+
leave_pool_tx = await client.pw_self_pool(
|
|
961
|
+
PWSelfPool(wallet_id=uint32(wallet_id), fee=uint64(fee), push=True), DEFAULT_TX_CONFIG
|
|
962
|
+
)
|
|
963
|
+
assert leave_pool_tx.transaction.wallet_id == wallet_id
|
|
964
|
+
assert leave_pool_tx.transaction.amount == 1
|
|
965
|
+
await full_node_api.wait_transaction_records_entered_mempool(records=leave_pool_tx.transactions)
|
|
925
966
|
|
|
926
967
|
await full_node_api.farm_blocks_to_puzzlehash(count=1, farm_to=our_ph, guarantee_transaction_blocks=True)
|
|
927
968
|
|
|
928
969
|
async def status_is_leaving() -> bool:
|
|
929
|
-
pw_status: PoolWalletInfo = (await client.pw_status(wallet_id))
|
|
970
|
+
pw_status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
930
971
|
return pw_status.current.state == PoolSingletonState.LEAVING_POOL.value
|
|
931
972
|
|
|
932
973
|
await time_out_assert(timeout=MAX_WAIT_SECS, function=status_is_leaving)
|
|
@@ -934,7 +975,7 @@ class TestPoolWalletRpc:
|
|
|
934
975
|
|
|
935
976
|
async def status_is_self_pooling() -> bool:
|
|
936
977
|
# Farm enough blocks to wait for relative_lock_height
|
|
937
|
-
pw_status: PoolWalletInfo = (await client.pw_status(wallet_id))
|
|
978
|
+
pw_status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
938
979
|
log.warning(f"PW status state: {pw_status.current}")
|
|
939
980
|
return pw_status.current.state == PoolSingletonState.SELF_POOLING.value
|
|
940
981
|
|
|
@@ -983,16 +1024,17 @@ class TestPoolWalletRpc:
|
|
|
983
1024
|
wallet_id = await create_new_plotnft(wallet_environments)
|
|
984
1025
|
|
|
985
1026
|
# Join a different pool
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
wallet_id,
|
|
989
|
-
bytes32.zeros,
|
|
990
|
-
"https://pool-b.org",
|
|
991
|
-
LOCK_HEIGHT,
|
|
992
|
-
uint64(fee),
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
1027
|
+
await wallet_rpc.pw_join_pool(
|
|
1028
|
+
PWJoinPool(
|
|
1029
|
+
wallet_id=uint32(wallet_id),
|
|
1030
|
+
target_puzzlehash=bytes32.zeros,
|
|
1031
|
+
pool_url="https://pool-b.org",
|
|
1032
|
+
relative_lock_height=LOCK_HEIGHT,
|
|
1033
|
+
fee=uint64(fee),
|
|
1034
|
+
push=True,
|
|
1035
|
+
),
|
|
1036
|
+
DEFAULT_TX_CONFIG,
|
|
1037
|
+
)
|
|
996
1038
|
|
|
997
1039
|
await wallet_environments.full_node.farm_blocks_to_puzzlehash(count=1, guarantee_transaction_blocks=True)
|
|
998
1040
|
await verify_pool_state(wallet_rpc, wallet_id, PoolSingletonState.LEAVING_POOL)
|
|
@@ -1019,7 +1061,7 @@ class TestPoolWalletRpc:
|
|
|
1019
1061
|
print(f"Checking state after {total_blocks_farmed} blocks")
|
|
1020
1062
|
|
|
1021
1063
|
await full_node.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
1022
|
-
pw_status: PoolWalletInfo = (await wallet_rpc.pw_status(wallet_id))
|
|
1064
|
+
pw_status: PoolWalletInfo = (await wallet_rpc.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
1023
1065
|
if pw_status.current.state == state.value:
|
|
1024
1066
|
return True
|
|
1025
1067
|
return False
|
|
@@ -1032,7 +1074,7 @@ class TestPoolWalletRpc:
|
|
|
1032
1074
|
wallet_environments.environments[0].node,
|
|
1033
1075
|
)
|
|
1034
1076
|
|
|
1035
|
-
pw_status: PoolWalletInfo = (await wallet_rpc.pw_status(wallet_id))
|
|
1077
|
+
pw_status: PoolWalletInfo = (await wallet_rpc.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
1036
1078
|
assert pw_status.current.state == PoolSingletonState.FARMING_TO_POOL.value
|
|
1037
1079
|
assert pw_status.current.pool_url == "https://pool-b.org"
|
|
1038
1080
|
assert pw_status.current.relative_lock_height == LOCK_HEIGHT
|
|
@@ -1063,35 +1105,39 @@ class TestPoolWalletRpc:
|
|
|
1063
1105
|
summaries_response = await client.get_wallets(WalletType.POOLING_WALLET)
|
|
1064
1106
|
assert len(summaries_response) == 1
|
|
1065
1107
|
wallet_id: int = summaries_response[0]["id"]
|
|
1066
|
-
status: PoolWalletInfo = (await client.pw_status(wallet_id))
|
|
1108
|
+
status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
1067
1109
|
|
|
1068
1110
|
assert status.current.state == PoolSingletonState.FARMING_TO_POOL.value
|
|
1069
1111
|
assert status.target is None
|
|
1070
1112
|
|
|
1071
1113
|
async def status_is_farming_to_pool() -> bool:
|
|
1072
|
-
pw_status: PoolWalletInfo = (await client.pw_status(wallet_id))
|
|
1114
|
+
pw_status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
1073
1115
|
return pw_status.current.state == PoolSingletonState.FARMING_TO_POOL.value
|
|
1074
1116
|
|
|
1075
1117
|
await time_out_assert(timeout=WAIT_SECS, function=status_is_farming_to_pool)
|
|
1076
1118
|
|
|
1077
|
-
pw_info: PoolWalletInfo = (await client.pw_status(wallet_id))
|
|
1119
|
+
pw_info: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
1078
1120
|
assert pw_info.current.pool_url == "https://pool-a.org"
|
|
1079
1121
|
assert pw_info.current.relative_lock_height == 5
|
|
1080
1122
|
|
|
1081
|
-
join_pool_txs
|
|
1123
|
+
join_pool_txs = (
|
|
1082
1124
|
await client.pw_join_pool(
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1125
|
+
PWJoinPool(
|
|
1126
|
+
wallet_id=uint32(wallet_id),
|
|
1127
|
+
target_puzzlehash=pool_b_ph,
|
|
1128
|
+
pool_url="https://pool-b.org",
|
|
1129
|
+
relative_lock_height=uint32(10),
|
|
1130
|
+
fee=uint64(fee),
|
|
1131
|
+
push=True,
|
|
1132
|
+
),
|
|
1133
|
+
DEFAULT_TX_CONFIG,
|
|
1088
1134
|
)
|
|
1089
|
-
)
|
|
1135
|
+
).transactions
|
|
1090
1136
|
await full_node_api.wait_transaction_records_entered_mempool(records=join_pool_txs)
|
|
1091
1137
|
await full_node_api.farm_blocks_to_puzzlehash(count=1, farm_to=our_ph, guarantee_transaction_blocks=True)
|
|
1092
1138
|
|
|
1093
1139
|
async def status_is_leaving_no_blocks() -> bool:
|
|
1094
|
-
pw_status: PoolWalletInfo = (await client.pw_status(wallet_id))
|
|
1140
|
+
pw_status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(wallet_id)))).state
|
|
1095
1141
|
return pw_status.current.state == PoolSingletonState.LEAVING_POOL.value
|
|
1096
1142
|
|
|
1097
1143
|
await time_out_assert(timeout=WAIT_SECS, function=status_is_leaving_no_blocks)
|
|
@@ -1120,3 +1166,89 @@ class TestPoolWalletRpc:
|
|
|
1120
1166
|
|
|
1121
1167
|
# Eventually, leaves pool
|
|
1122
1168
|
assert await status_is_farming_to_pool()
|
|
1169
|
+
|
|
1170
|
+
@pytest.mark.parametrize(
|
|
1171
|
+
"wallet_environments",
|
|
1172
|
+
[
|
|
1173
|
+
{
|
|
1174
|
+
"num_environments": 1,
|
|
1175
|
+
"blocks_needed": [10],
|
|
1176
|
+
}
|
|
1177
|
+
],
|
|
1178
|
+
indirect=True,
|
|
1179
|
+
)
|
|
1180
|
+
@pytest.mark.anyio
|
|
1181
|
+
async def test_join_pool_twice(
|
|
1182
|
+
self,
|
|
1183
|
+
fee: uint64,
|
|
1184
|
+
wallet_environments: WalletTestFramework,
|
|
1185
|
+
) -> None:
|
|
1186
|
+
wallet_state_manager: WalletStateManager = wallet_environments.environments[0].wallet_state_manager
|
|
1187
|
+
wallet_rpc: WalletRpcClient = wallet_environments.environments[0].rpc_client
|
|
1188
|
+
|
|
1189
|
+
wallet_state_manager.config["reuse_public_key_for_change"][
|
|
1190
|
+
str(wallet_state_manager.root_pubkey.get_fingerprint())
|
|
1191
|
+
] = wallet_environments.tx_config.reuse_puzhash
|
|
1192
|
+
|
|
1193
|
+
# Create a farming plotnft to url http://pool.example.com
|
|
1194
|
+
wallet_id = await create_new_plotnft(wallet_environments)
|
|
1195
|
+
|
|
1196
|
+
# Test joining the same pool via the RPC client
|
|
1197
|
+
with pytest.raises(ResponseFailureError, match="Already farming to pool"):
|
|
1198
|
+
await wallet_rpc.pw_join_pool(
|
|
1199
|
+
PWJoinPool(
|
|
1200
|
+
wallet_id=uint32(wallet_id),
|
|
1201
|
+
target_puzzlehash=bytes32.zeros,
|
|
1202
|
+
pool_url="http://pool.example.com",
|
|
1203
|
+
relative_lock_height=uint32(10),
|
|
1204
|
+
fee=uint64(0),
|
|
1205
|
+
push=True,
|
|
1206
|
+
),
|
|
1207
|
+
DEFAULT_TX_CONFIG,
|
|
1208
|
+
)
|
|
1209
|
+
|
|
1210
|
+
@pytest.mark.parametrize(
|
|
1211
|
+
"wallet_environments",
|
|
1212
|
+
[
|
|
1213
|
+
{
|
|
1214
|
+
"num_environments": 1,
|
|
1215
|
+
"blocks_needed": [10],
|
|
1216
|
+
"trusted": True,
|
|
1217
|
+
"reuse_puzhash": False,
|
|
1218
|
+
}
|
|
1219
|
+
],
|
|
1220
|
+
indirect=True,
|
|
1221
|
+
)
|
|
1222
|
+
@pytest.mark.anyio
|
|
1223
|
+
async def test_join_pool_unsynced(
|
|
1224
|
+
self,
|
|
1225
|
+
fee: uint64,
|
|
1226
|
+
wallet_environments: WalletTestFramework,
|
|
1227
|
+
mocker: MockerFixture,
|
|
1228
|
+
) -> None:
|
|
1229
|
+
wallet_state_manager: WalletStateManager = wallet_environments.environments[0].wallet_state_manager
|
|
1230
|
+
wallet_rpc: WalletRpcClient = wallet_environments.environments[0].rpc_client
|
|
1231
|
+
|
|
1232
|
+
wallet_state_manager.config["reuse_public_key_for_change"][
|
|
1233
|
+
str(wallet_state_manager.root_pubkey.get_fingerprint())
|
|
1234
|
+
] = wallet_environments.tx_config.reuse_puzhash
|
|
1235
|
+
|
|
1236
|
+
# Create a farming plotnft to url http://pool.example.com
|
|
1237
|
+
wallet_id = await create_new_plotnft(wallet_environments)
|
|
1238
|
+
|
|
1239
|
+
mock = mocker.patch.object(wallet_state_manager, "synced")
|
|
1240
|
+
mock.return_value = False
|
|
1241
|
+
|
|
1242
|
+
# Test joining the same pool via the RPC client
|
|
1243
|
+
with pytest.raises(ResponseFailureError, match="Wallet needs to be fully synced."):
|
|
1244
|
+
await wallet_rpc.pw_join_pool(
|
|
1245
|
+
PWJoinPool(
|
|
1246
|
+
wallet_id=uint32(wallet_id),
|
|
1247
|
+
target_puzzlehash=bytes32.zeros,
|
|
1248
|
+
pool_url="http://pool.example.com",
|
|
1249
|
+
relative_lock_height=uint32(10),
|
|
1250
|
+
fee=uint64(0),
|
|
1251
|
+
push=True,
|
|
1252
|
+
),
|
|
1253
|
+
DEFAULT_TX_CONFIG,
|
|
1254
|
+
)
|