chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/README.md +1 -1
- chia/_tests/blockchain/blockchain_test_utils.py +24 -26
- chia/_tests/blockchain/test_augmented_chain.py +6 -8
- chia/_tests/blockchain/test_blockchain.py +409 -307
- chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
- chia/_tests/blockchain/test_build_chains.py +11 -13
- chia/_tests/blockchain/test_get_block_generator.py +8 -8
- chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
- chia/_tests/build-init-files.py +3 -4
- chia/_tests/build-job-matrix.py +9 -9
- chia/_tests/check_sql_statements.py +2 -3
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +7 -5
- chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
- chia/_tests/clvm/test_condition_codes.py +2 -2
- chia/_tests/clvm/test_curry_and_treehash.py +2 -4
- chia/_tests/clvm/test_message_conditions.py +184 -0
- chia/_tests/clvm/test_puzzle_compression.py +1 -2
- chia/_tests/clvm/test_puzzle_drivers.py +3 -3
- chia/_tests/clvm/test_puzzles.py +13 -18
- chia/_tests/clvm/test_singletons.py +17 -17
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +42 -45
- chia/_tests/cmds/conftest.py +2 -2
- chia/_tests/cmds/test_click_types.py +21 -16
- chia/_tests/cmds/test_cmd_framework.py +255 -35
- chia/_tests/cmds/test_cmds_util.py +2 -2
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_dev_gh.py +131 -0
- chia/_tests/cmds/test_farm_cmd.py +1 -2
- chia/_tests/cmds/test_show.py +6 -6
- chia/_tests/cmds/test_tx_config_args.py +2 -1
- chia/_tests/cmds/wallet/test_dao.py +23 -23
- chia/_tests/cmds/wallet/test_did.py +29 -29
- chia/_tests/cmds/wallet/test_nft.py +24 -23
- chia/_tests/cmds/wallet/test_notifications.py +8 -8
- chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
- chia/_tests/cmds/wallet/test_vcs.py +97 -73
- chia/_tests/cmds/wallet/test_wallet.py +74 -75
- chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
- chia/_tests/conftest.py +153 -38
- chia/_tests/connection_utils.py +7 -6
- chia/_tests/core/cmds/test_beta.py +3 -3
- chia/_tests/core/cmds/test_keys.py +6 -6
- chia/_tests/core/cmds/test_wallet.py +3 -3
- chia/_tests/core/consensus/test_block_creation.py +3 -5
- chia/_tests/core/custom_types/test_coin.py +1 -3
- chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
- chia/_tests/core/daemon/test_daemon.py +58 -58
- chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
- chia/_tests/core/data_layer/conftest.py +4 -3
- chia/_tests/core/data_layer/test_data_cli.py +1 -2
- chia/_tests/core/data_layer/test_data_layer.py +5 -5
- chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
- chia/_tests/core/data_layer/test_data_rpc.py +75 -93
- chia/_tests/core/data_layer/test_data_store.py +38 -37
- chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
- chia/_tests/core/data_layer/util.py +11 -10
- chia/_tests/core/farmer/test_farmer_api.py +6 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
- chia/_tests/core/full_node/ram_db.py +2 -2
- chia/_tests/core/full_node/stores/test_block_store.py +113 -11
- chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
- chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
- chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
- chia/_tests/core/full_node/test_address_manager.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +1 -1
- chia/_tests/core/full_node/test_conditions.py +10 -12
- chia/_tests/core/full_node/test_full_node.py +2077 -1822
- chia/_tests/core/full_node/test_generator_tools.py +4 -4
- chia/_tests/core/full_node/test_hint_management.py +2 -2
- chia/_tests/core/full_node/test_performance.py +2 -5
- chia/_tests/core/full_node/test_subscriptions.py +4 -4
- chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
- chia/_tests/core/make_block_generator.py +5 -7
- chia/_tests/core/mempool/test_mempool.py +205 -208
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
- chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
- chia/_tests/core/mempool/test_mempool_manager.py +109 -80
- chia/_tests/core/mempool/test_mempool_performance.py +3 -4
- chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
- chia/_tests/core/server/flood.py +6 -4
- chia/_tests/core/server/serve.py +10 -7
- chia/_tests/core/server/test_api_protocol.py +21 -0
- chia/_tests/core/server/test_capabilities.py +3 -5
- chia/_tests/core/server/test_dos.py +15 -16
- chia/_tests/core/server/test_loop.py +14 -10
- chia/_tests/core/server/test_node_discovery.py +1 -2
- chia/_tests/core/server/test_rate_limits.py +156 -44
- chia/_tests/core/server/test_server.py +8 -7
- chia/_tests/core/services/test_services.py +59 -37
- chia/_tests/core/ssl/test_ssl.py +5 -3
- chia/_tests/core/test_cost_calculation.py +5 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_db_conversion.py +5 -4
- chia/_tests/core/test_db_validation.py +6 -5
- chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
- chia/_tests/core/test_filter.py +3 -5
- chia/_tests/core/test_full_node_rpc.py +64 -90
- chia/_tests/core/test_merkle_set.py +10 -10
- chia/_tests/core/test_program.py +2 -4
- chia/_tests/core/test_rpc_util.py +1 -2
- chia/_tests/core/test_seeder.py +124 -12
- chia/_tests/core/util/test_block_cache.py +5 -5
- chia/_tests/core/util/test_cached_bls.py +3 -3
- chia/_tests/core/util/test_config.py +13 -13
- chia/_tests/core/util/test_files.py +2 -2
- chia/_tests/core/util/test_jsonify.py +9 -9
- chia/_tests/core/util/test_keychain.py +13 -5
- chia/_tests/core/util/test_keyring_wrapper.py +6 -5
- chia/_tests/core/util/test_log_exceptions.py +3 -3
- chia/_tests/core/util/test_streamable.py +38 -38
- chia/_tests/db/test_db_wrapper.py +13 -12
- chia/_tests/environments/common.py +2 -2
- chia/_tests/environments/full_node.py +2 -2
- chia/_tests/environments/wallet.py +109 -48
- chia/_tests/farmer_harvester/test_farmer.py +35 -35
- chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
- chia/_tests/generator/test_compression.py +13 -30
- chia/_tests/generator/test_generator_types.py +3 -3
- chia/_tests/generator/test_rom.py +7 -9
- chia/_tests/plot_sync/test_delta.py +2 -3
- chia/_tests/plot_sync/test_plot_sync.py +25 -24
- chia/_tests/plot_sync/test_receiver.py +9 -9
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +27 -26
- chia/_tests/plot_sync/util.py +2 -1
- chia/_tests/plotting/test_plot_manager.py +54 -11
- chia/_tests/plotting/util.py +2 -3
- chia/_tests/pools/test_pool_cli_parsing.py +128 -0
- chia/_tests/pools/test_pool_cmdline.py +993 -15
- chia/_tests/pools/test_pool_config.py +3 -5
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
- chia/_tests/pools/test_pool_rpc.py +203 -90
- chia/_tests/pools/test_pool_wallet.py +12 -8
- chia/_tests/pools/test_wallet_pool_store.py +3 -3
- chia/_tests/process_junit.py +16 -17
- chia/_tests/rpc/test_rpc_client.py +59 -2
- chia/_tests/rpc/test_rpc_server.py +183 -0
- chia/_tests/simulation/test_simulation.py +5 -5
- chia/_tests/simulation/test_simulator.py +8 -10
- chia/_tests/simulation/test_start_simulator.py +5 -4
- chia/_tests/timelord/test_new_peak.py +19 -19
- chia/_tests/tools/test_run_block.py +1 -2
- chia/_tests/tools/test_virtual_project.py +591 -0
- chia/_tests/util/benchmark_cost.py +9 -9
- chia/_tests/util/benchmarks.py +1 -2
- chia/_tests/util/blockchain.py +12 -11
- chia/_tests/util/blockchain_mock.py +15 -15
- chia/_tests/util/build_network_protocol_files.py +12 -12
- chia/_tests/util/db_connection.py +3 -2
- chia/_tests/util/full_sync.py +14 -6
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/generator_tools_testing.py +5 -7
- chia/_tests/util/get_name_puzzle_conditions.py +52 -0
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +59 -106
- chia/_tests/util/network_protocol_data.py +7 -9
- chia/_tests/util/protocol_messages_json.py +112 -111
- chia/_tests/util/rpc.py +3 -0
- chia/_tests/util/run_block.py +16 -16
- chia/_tests/util/setup_nodes.py +25 -23
- chia/{clvm → _tests/util}/spend_sim.py +59 -55
- chia/_tests/util/split_managers.py +12 -9
- chia/_tests/util/temp_file.py +1 -1
- chia/_tests/util/test_action_scope.py +2 -1
- chia/_tests/util/test_async_pool.py +8 -8
- chia/_tests/util/test_build_job_matrix.py +2 -3
- chia/_tests/util/test_condition_tools.py +4 -6
- chia/_tests/util/test_config.py +5 -5
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +19 -11
- chia/_tests/util/test_limited_semaphore.py +4 -3
- chia/_tests/util/test_logging_filter.py +2 -3
- chia/_tests/util/test_misc.py +29 -28
- chia/_tests/util/test_network.py +32 -31
- chia/_tests/util/test_network_protocol_files.py +2 -3
- chia/_tests/util/test_network_protocol_json.py +1 -0
- chia/_tests/util/test_network_protocol_test.py +18 -19
- chia/_tests/util/test_paginator.py +3 -4
- chia/_tests/util/test_pprint.py +1 -1
- chia/_tests/util/test_priority_mutex.py +18 -17
- chia/_tests/util/test_recursive_replace.py +2 -2
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/test_timing.py +1 -1
- chia/_tests/util/test_trusted_peer.py +2 -2
- chia/_tests/util/time_out_assert.py +43 -6
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
- chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
- chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
- chia/_tests/wallet/conftest.py +135 -74
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
- chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
- chia/_tests/wallet/did_wallet/test_did.py +1277 -474
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
- chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
- chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
- chia/_tests/wallet/test_address_type.py +20 -20
- chia/_tests/wallet/test_clvm_streamable.py +5 -5
- chia/_tests/wallet/test_coin_management.py +354 -0
- chia/_tests/wallet/test_coin_selection.py +34 -35
- chia/_tests/wallet/test_conditions.py +28 -16
- chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
- chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
- chia/_tests/wallet/test_nft_store.py +1 -2
- chia/_tests/wallet/test_notifications.py +2 -2
- chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
- chia/_tests/wallet/test_puzzle_store.py +2 -3
- chia/_tests/wallet/test_sign_coin_spends.py +3 -3
- chia/_tests/wallet/test_signer_protocol.py +33 -34
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
- chia/_tests/wallet/test_taproot.py +1 -1
- chia/_tests/wallet/test_transaction_store.py +23 -19
- chia/_tests/wallet/test_util.py +36 -32
- chia/_tests/wallet/test_wallet.py +37 -37
- chia/_tests/wallet/test_wallet_action_scope.py +8 -8
- chia/_tests/wallet/test_wallet_blockchain.py +4 -6
- chia/_tests/wallet/test_wallet_coin_store.py +34 -34
- chia/_tests/wallet/test_wallet_node.py +69 -72
- chia/_tests/wallet/test_wallet_retry.py +3 -3
- chia/_tests/wallet/test_wallet_state_manager.py +12 -5
- chia/_tests/wallet/test_wallet_trade_store.py +2 -2
- chia/_tests/wallet/test_wallet_utils.py +5 -4
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
- chia/_tests/wallet/wallet_block_tools.py +27 -27
- chia/_tests/weight_proof/test_weight_proof.py +30 -30
- chia/apis.py +19 -0
- chia/cmds/beta.py +8 -7
- chia/cmds/beta_funcs.py +15 -11
- chia/cmds/check_wallet_db.py +29 -27
- chia/cmds/chia.py +17 -9
- chia/cmds/cmd_classes.py +87 -79
- chia/cmds/cmd_helpers.py +242 -0
- chia/cmds/cmds_util.py +56 -66
- chia/cmds/coin_funcs.py +168 -153
- chia/cmds/coins.py +156 -194
- chia/cmds/configure.py +4 -3
- chia/cmds/dao.py +89 -33
- chia/cmds/dao_funcs.py +55 -33
- chia/cmds/data.py +7 -6
- chia/cmds/data_funcs.py +26 -21
- chia/cmds/db.py +4 -3
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev.py +2 -0
- chia/cmds/farm.py +18 -5
- chia/cmds/farm_funcs.py +17 -24
- chia/cmds/gh.py +275 -0
- chia/cmds/init.py +4 -11
- chia/cmds/init_funcs.py +9 -9
- chia/cmds/installers.py +5 -3
- chia/cmds/keys.py +56 -39
- chia/cmds/keys_funcs.py +30 -31
- chia/cmds/netspace.py +6 -3
- chia/cmds/netspace_funcs.py +3 -2
- chia/cmds/param_types.py +16 -6
- chia/cmds/passphrase.py +8 -7
- chia/cmds/passphrase_funcs.py +7 -61
- chia/cmds/peer.py +2 -1
- chia/cmds/peer_funcs.py +5 -5
- chia/cmds/plotnft.py +207 -153
- chia/cmds/plotnft_funcs.py +205 -174
- chia/cmds/plots.py +14 -6
- chia/cmds/plotters.py +2 -1
- chia/cmds/rpc.py +48 -28
- chia/cmds/show.py +2 -1
- chia/cmds/show_funcs.py +7 -6
- chia/cmds/signer.py +50 -58
- chia/cmds/sim.py +22 -14
- chia/cmds/sim_funcs.py +11 -11
- chia/cmds/start.py +3 -3
- chia/cmds/start_funcs.py +9 -12
- chia/cmds/stop.py +4 -3
- chia/cmds/units.py +1 -3
- chia/cmds/wallet.py +252 -96
- chia/cmds/wallet_funcs.py +217 -143
- chia/consensus/block_body_validation.py +133 -86
- chia/consensus/block_creation.py +42 -21
- chia/consensus/block_header_validation.py +32 -37
- chia/consensus/block_record.py +1 -2
- chia/consensus/blockchain.py +167 -180
- chia/consensus/blockchain_interface.py +10 -10
- chia/consensus/constants.py +2 -2
- chia/consensus/default_constants.py +3 -4
- chia/consensus/difficulty_adjustment.py +5 -5
- chia/consensus/find_fork_point.py +5 -5
- chia/consensus/full_block_to_block_record.py +4 -4
- chia/consensus/get_block_challenge.py +2 -2
- chia/consensus/get_block_generator.py +4 -3
- chia/consensus/multiprocess_validation.py +207 -304
- chia/consensus/vdf_info_computation.py +3 -3
- chia/daemon/client.py +46 -27
- chia/daemon/keychain_proxy.py +10 -9
- chia/daemon/keychain_server.py +18 -18
- chia/daemon/server.py +103 -113
- chia/daemon/windows_signal.py +2 -2
- chia/data_layer/data_layer.py +64 -76
- chia/data_layer/data_layer_api.py +8 -0
- chia/data_layer/data_layer_errors.py +3 -3
- chia/data_layer/data_layer_server.py +2 -2
- chia/data_layer/data_layer_util.py +71 -71
- chia/data_layer/data_layer_wallet.py +63 -67
- chia/data_layer/data_store.py +72 -72
- chia/data_layer/dl_wallet_store.py +10 -10
- chia/data_layer/download_data.py +5 -5
- chia/data_layer/s3_plugin_service.py +9 -9
- chia/data_layer/util/benchmark.py +0 -1
- chia/data_layer/util/plugin.py +2 -3
- chia/farmer/farmer.py +46 -43
- chia/farmer/farmer_api.py +27 -21
- chia/full_node/block_height_map.py +6 -6
- chia/full_node/block_store.py +41 -35
- chia/full_node/coin_store.py +42 -41
- chia/full_node/fee_estimate.py +2 -2
- chia/full_node/fee_estimation.py +1 -2
- chia/full_node/fee_history.py +5 -6
- chia/full_node/fee_tracker.py +24 -24
- chia/full_node/full_node.py +574 -300
- chia/full_node/full_node_api.py +181 -130
- chia/full_node/full_node_store.py +43 -43
- chia/full_node/hint_management.py +4 -4
- chia/full_node/hint_store.py +9 -10
- chia/full_node/mempool.py +25 -19
- chia/full_node/mempool_check_conditions.py +11 -42
- chia/full_node/mempool_manager.py +48 -53
- chia/full_node/pending_tx_cache.py +9 -9
- chia/full_node/subscriptions.py +23 -24
- chia/full_node/sync_store.py +8 -7
- chia/full_node/tx_processing_queue.py +3 -3
- chia/full_node/util/__init__.py +0 -0
- chia/full_node/weight_proof.py +79 -78
- chia/harvester/harvester.py +9 -8
- chia/harvester/harvester_api.py +19 -13
- chia/introducer/introducer.py +7 -5
- chia/introducer/introducer_api.py +9 -3
- chia/legacy/keyring.py +6 -5
- chia/plot_sync/delta.py +8 -8
- chia/plot_sync/receiver.py +12 -11
- chia/plot_sync/sender.py +15 -12
- chia/plotters/bladebit.py +12 -12
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +8 -8
- chia/plotters/plotters.py +6 -6
- chia/plotters/plotters_util.py +6 -4
- chia/plotting/cache.py +8 -7
- chia/plotting/check_plots.py +8 -8
- chia/plotting/create_plots.py +6 -6
- chia/plotting/manager.py +22 -22
- chia/plotting/util.py +31 -19
- chia/pools/pool_config.py +7 -7
- chia/pools/pool_puzzles.py +16 -16
- chia/pools/pool_wallet.py +64 -57
- chia/pools/pool_wallet_info.py +3 -3
- chia/protocols/full_node_protocol.py +3 -3
- chia/protocols/harvester_protocol.py +12 -12
- chia/protocols/introducer_protocol.py +1 -2
- chia/protocols/protocol_message_types.py +4 -4
- chia/protocols/protocol_state_machine.py +2 -2
- chia/protocols/protocol_timing.py +1 -0
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +2 -2
- chia/protocols/wallet_protocol.py +33 -33
- chia/rpc/crawler_rpc_api.py +12 -7
- chia/rpc/data_layer_rpc_api.py +49 -44
- chia/rpc/data_layer_rpc_client.py +41 -41
- chia/rpc/data_layer_rpc_util.py +7 -11
- chia/rpc/farmer_rpc_api.py +32 -27
- chia/rpc/farmer_rpc_client.py +14 -14
- chia/rpc/full_node_rpc_api.py +53 -48
- chia/rpc/full_node_rpc_client.py +30 -30
- chia/rpc/harvester_rpc_api.py +16 -11
- chia/rpc/harvester_rpc_client.py +6 -6
- chia/rpc/rpc_client.py +34 -14
- chia/rpc/rpc_server.py +117 -43
- chia/rpc/timelord_rpc_api.py +9 -4
- chia/rpc/util.py +11 -211
- chia/rpc/wallet_request_types.py +276 -60
- chia/rpc/wallet_rpc_api.py +563 -399
- chia/rpc/wallet_rpc_client.py +220 -250
- chia/seeder/crawl_store.py +6 -8
- chia/seeder/crawler.py +23 -36
- chia/seeder/crawler_api.py +28 -22
- chia/seeder/dns_server.py +99 -50
- chia/seeder/start_crawler.py +13 -9
- chia/server/address_manager.py +19 -19
- chia/server/address_manager_store.py +17 -17
- chia/server/api_protocol.py +106 -1
- chia/server/capabilities.py +3 -3
- chia/server/chia_policy.py +17 -16
- chia/server/introducer_peers.py +3 -3
- chia/server/node_discovery.py +34 -38
- chia/server/rate_limit_numbers.py +26 -16
- chia/server/rate_limits.py +67 -27
- chia/server/server.py +52 -31
- chia/server/signal_handlers.py +6 -3
- chia/server/ssl_context.py +5 -5
- chia/server/start_data_layer.py +37 -23
- chia/server/start_farmer.py +28 -16
- chia/server/start_full_node.py +29 -23
- chia/server/start_harvester.py +28 -15
- chia/server/start_introducer.py +27 -15
- chia/server/start_service.py +17 -29
- chia/server/start_timelord.py +25 -18
- chia/server/start_wallet.py +22 -18
- chia/server/upnp.py +4 -3
- chia/server/ws_connection.py +68 -54
- chia/simulator/add_blocks_in_batches.py +54 -0
- chia/simulator/block_tools.py +65 -64
- chia/simulator/full_node_simulator.py +66 -74
- chia/simulator/setup_services.py +10 -9
- chia/simulator/simulator_full_node_rpc_api.py +12 -14
- chia/simulator/simulator_full_node_rpc_client.py +3 -5
- chia/simulator/simulator_test_tools.py +8 -7
- chia/simulator/socket.py +1 -4
- chia/simulator/ssl_certs.py +5 -5
- chia/simulator/ssl_certs_1.py +2 -4
- chia/simulator/ssl_certs_10.py +2 -4
- chia/simulator/ssl_certs_2.py +2 -4
- chia/simulator/ssl_certs_3.py +2 -4
- chia/simulator/ssl_certs_4.py +2 -4
- chia/simulator/ssl_certs_5.py +2 -4
- chia/simulator/ssl_certs_6.py +2 -4
- chia/simulator/ssl_certs_7.py +2 -4
- chia/simulator/ssl_certs_8.py +2 -4
- chia/simulator/ssl_certs_9.py +2 -4
- chia/simulator/start_simulator.py +14 -6
- chia/simulator/wallet_tools.py +21 -20
- chia/ssl/create_ssl.py +11 -11
- chia/timelord/iters_from_block.py +2 -2
- chia/timelord/timelord.py +57 -33
- chia/timelord/timelord_api.py +12 -6
- chia/timelord/timelord_launcher.py +10 -8
- chia/timelord/timelord_state.py +5 -5
- chia/types/block_protocol.py +2 -2
- chia/types/blockchain_format/coin.py +3 -3
- chia/types/blockchain_format/program.py +17 -18
- chia/types/blockchain_format/tree_hash.py +9 -9
- chia/types/coin_spend.py +8 -8
- chia/types/condition_with_args.py +1 -2
- chia/types/eligible_coin_spends.py +16 -15
- chia/types/generator_types.py +1 -2
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +7 -7
- chia/types/mempool_submission_status.py +2 -2
- chia/types/peer_info.py +1 -1
- chia/types/spend_bundle.py +1 -2
- chia/types/transaction_queue_entry.py +2 -2
- chia/types/unfinished_header_block.py +2 -2
- chia/types/validation_state.py +14 -0
- chia/types/weight_proof.py +5 -6
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +6 -4
- chia/util/augmented_chain.py +13 -9
- chia/util/batches.py +5 -2
- chia/util/bech32m.py +14 -11
- chia/util/beta_metrics.py +5 -4
- chia/util/block_cache.py +5 -5
- chia/util/byte_types.py +2 -0
- chia/util/check_fork_next_block.py +3 -2
- chia/util/chia_logging.py +41 -21
- chia/util/collection.py +3 -3
- chia/util/condition_tools.py +18 -18
- chia/util/config.py +26 -25
- chia/util/cpu.py +2 -0
- chia/util/db_synchronous.py +2 -0
- chia/util/db_version.py +2 -0
- chia/util/db_wrapper.py +13 -10
- chia/util/default_root.py +17 -0
- chia/util/dump_keyring.py +6 -6
- chia/util/errors.py +5 -3
- chia/util/file_keyring.py +22 -33
- chia/util/files.py +2 -0
- chia/util/full_block_utils.py +31 -7
- chia/util/generator_tools.py +18 -8
- chia/util/hash.py +3 -1
- chia/util/initial-config.yaml +19 -0
- chia/util/inline_executor.py +2 -0
- chia/util/ip_address.py +39 -0
- chia/util/json_util.py +0 -4
- chia/util/keychain.py +27 -24
- chia/util/keyring_wrapper.py +65 -4
- chia/util/limited_semaphore.py +3 -1
- chia/util/lock.py +4 -2
- chia/util/log_exceptions.py +5 -2
- chia/util/logging.py +3 -1
- chia/util/lru_cache.py +2 -0
- chia/util/math.py +4 -4
- chia/util/network.py +15 -73
- chia/util/paginator.py +3 -1
- chia/util/path.py +2 -0
- chia/util/permissions.py +3 -2
- chia/util/prev_transaction_block.py +1 -3
- chia/util/priority_mutex.py +6 -3
- chia/util/profiler.py +7 -4
- chia/util/recursive_replace.py +2 -0
- chia/util/safe_cancel_task.py +2 -0
- chia/util/service_groups.py +2 -2
- chia/util/setproctitle.py +2 -0
- chia/util/significant_bits.py +2 -0
- chia/util/ssl_check.py +11 -11
- chia/util/streamable.py +44 -56
- chia/util/task_referencer.py +59 -0
- chia/util/task_timing.py +22 -18
- chia/util/timing.py +4 -1
- chia/util/vdf_prover.py +2 -3
- chia/util/virtual_project_analysis.py +540 -0
- chia/util/ws_message.py +6 -6
- chia/wallet/cat_wallet/cat_info.py +3 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
- chia/wallet/cat_wallet/cat_utils.py +5 -4
- chia/wallet/cat_wallet/cat_wallet.py +56 -70
- chia/wallet/cat_wallet/dao_cat_info.py +3 -3
- chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
- chia/wallet/cat_wallet/lineage_store.py +2 -2
- chia/wallet/coin_selection.py +15 -15
- chia/wallet/conditions.py +257 -71
- chia/wallet/dao_wallet/dao_info.py +4 -4
- chia/wallet/dao_wallet/dao_utils.py +43 -42
- chia/wallet/dao_wallet/dao_wallet.py +66 -68
- chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
- chia/wallet/derive_keys.py +11 -11
- chia/wallet/did_wallet/did_info.py +3 -3
- chia/wallet/did_wallet/did_wallet.py +56 -47
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/nft_info.py +4 -4
- chia/wallet/nft_wallet/nft_puzzles.py +16 -16
- chia/wallet/nft_wallet/nft_wallet.py +90 -89
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
- chia/wallet/nft_wallet/uncurry_nft.py +2 -2
- chia/wallet/notification_manager.py +5 -5
- chia/wallet/notification_store.py +6 -6
- chia/wallet/outer_puzzles.py +2 -2
- chia/wallet/payment.py +4 -5
- chia/wallet/puzzle_drivers.py +4 -4
- chia/wallet/puzzles/clawback/drivers.py +5 -5
- chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
- chia/wallet/puzzles/load_clvm.py +2 -3
- chia/wallet/puzzles/p2_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
- chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
- chia/wallet/puzzles/puzzle_utils.py +7 -7
- chia/wallet/puzzles/singleton_top_layer.py +6 -5
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
- chia/wallet/puzzles/tails.py +34 -30
- chia/wallet/signer_protocol.py +7 -8
- chia/wallet/singleton.py +4 -4
- chia/wallet/trade_manager.py +155 -141
- chia/wallet/trade_record.py +5 -5
- chia/wallet/trading/offer.py +100 -101
- chia/wallet/trading/trade_store.py +14 -14
- chia/wallet/transaction_record.py +31 -16
- chia/wallet/util/address_type.py +4 -4
- chia/wallet/util/blind_signer_tl.py +8 -12
- chia/wallet/util/clvm_streamable.py +15 -15
- chia/wallet/util/compute_hints.py +5 -5
- chia/wallet/util/compute_memos.py +4 -6
- chia/wallet/util/curry_and_treehash.py +3 -2
- chia/wallet/util/debug_spend_bundle.py +6 -8
- chia/wallet/util/merkle_tree.py +10 -10
- chia/wallet/util/merkle_utils.py +10 -10
- chia/wallet/util/new_peak_queue.py +3 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/{util → wallet/util}/pprint.py +2 -3
- chia/wallet/util/puzzle_compression.py +3 -4
- chia/wallet/util/puzzle_decorator.py +10 -10
- chia/wallet/util/query_filter.py +9 -10
- chia/wallet/util/tx_config.py +12 -12
- chia/wallet/util/wallet_sync_utils.py +24 -21
- chia/wallet/util/wallet_types.py +9 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
- chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
- chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
- chia/wallet/vc_wallet/vc_drivers.py +16 -16
- chia/wallet/vc_wallet/vc_store.py +9 -9
- chia/wallet/vc_wallet/vc_wallet.py +35 -35
- chia/wallet/wallet.py +54 -54
- chia/wallet/wallet_action_scope.py +14 -13
- chia/wallet/wallet_blockchain.py +10 -10
- chia/wallet/wallet_coin_record.py +2 -2
- chia/wallet/wallet_coin_store.py +10 -10
- chia/wallet/wallet_info.py +1 -2
- chia/wallet/wallet_interested_store.py +5 -5
- chia/wallet/wallet_nft_store.py +6 -6
- chia/wallet/wallet_node.py +72 -76
- chia/wallet/wallet_node_api.py +33 -27
- chia/wallet/wallet_pool_store.py +1 -2
- chia/wallet/wallet_protocol.py +15 -15
- chia/wallet/wallet_puzzle_store.py +35 -4
- chia/wallet/wallet_retry_store.py +2 -2
- chia/wallet/wallet_singleton_store.py +10 -9
- chia/wallet/wallet_spend_bundle.py +4 -20
- chia/wallet/wallet_state_manager.py +223 -224
- chia/wallet/wallet_transaction_store.py +44 -18
- chia/wallet/wallet_user_store.py +2 -2
- chia/wallet/wallet_weight_proof_handler.py +2 -2
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
- mozilla-ca/cacert.pem +32 -87
- chia/_tests/cmds/wallet/test_coins.py +0 -195
- chia/consensus/block_root_validation.py +0 -46
- chia/util/api_decorators.py +0 -89
- chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
chia/cmds/plotnft_funcs.py
CHANGED
|
@@ -4,16 +4,18 @@ import asyncio
|
|
|
4
4
|
import functools
|
|
5
5
|
import json
|
|
6
6
|
import time
|
|
7
|
+
from collections.abc import Awaitable
|
|
7
8
|
from dataclasses import replace
|
|
9
|
+
from pathlib import Path
|
|
8
10
|
from pprint import pprint
|
|
9
|
-
from typing import Any,
|
|
11
|
+
from typing import Any, Callable, Optional
|
|
10
12
|
|
|
11
13
|
import aiohttp
|
|
12
14
|
|
|
15
|
+
from chia.cmds.cmd_helpers import WalletClientInfo
|
|
13
16
|
from chia.cmds.cmds_util import (
|
|
14
17
|
cli_confirm,
|
|
15
18
|
get_any_service_client,
|
|
16
|
-
get_wallet_client,
|
|
17
19
|
transaction_status_msg,
|
|
18
20
|
transaction_submitted_msg,
|
|
19
21
|
)
|
|
@@ -28,8 +30,6 @@ from chia.server.server import ssl_context_for_root
|
|
|
28
30
|
from chia.ssl.create_ssl import get_mozilla_ca_crt
|
|
29
31
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
30
32
|
from chia.util.bech32m import encode_puzzle_hash
|
|
31
|
-
from chia.util.byte_types import hexstr_to_bytes
|
|
32
|
-
from chia.util.config import load_config
|
|
33
33
|
from chia.util.default_root import DEFAULT_ROOT_PATH
|
|
34
34
|
from chia.util.errors import CliRpcConnectionError
|
|
35
35
|
from chia.util.ints import uint32, uint64
|
|
@@ -38,12 +38,12 @@ from chia.wallet.util.address_type import AddressType
|
|
|
38
38
|
from chia.wallet.util.wallet_types import WalletType
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
async def create_pool_args(pool_url: str) ->
|
|
41
|
+
async def create_pool_args(pool_url: str) -> dict[str, Any]:
|
|
42
42
|
try:
|
|
43
43
|
async with aiohttp.ClientSession() as session:
|
|
44
44
|
async with session.get(f"{pool_url}/pool_info", ssl=ssl_context_for_root(get_mozilla_ca_crt())) as response:
|
|
45
45
|
if response.ok:
|
|
46
|
-
json_dict:
|
|
46
|
+
json_dict: dict[str, Any] = json.loads(await response.text())
|
|
47
47
|
else:
|
|
48
48
|
raise ValueError(f"Response from {pool_url} not OK: {response.status}")
|
|
49
49
|
except Exception as e:
|
|
@@ -62,54 +62,57 @@ async def create_pool_args(pool_url: str) -> Dict[str, Any]:
|
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
async def create(
|
|
65
|
-
|
|
65
|
+
wallet_info: WalletClientInfo,
|
|
66
|
+
pool_url: Optional[str],
|
|
67
|
+
state: str,
|
|
68
|
+
fee: uint64,
|
|
69
|
+
*,
|
|
70
|
+
prompt: bool,
|
|
66
71
|
) -> None:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
except Exception as e:
|
|
112
|
-
print(f"Error creating plot NFT: {e}\n Please start both farmer and wallet with: chia start -r farmer")
|
|
72
|
+
target_puzzle_hash: Optional[bytes32]
|
|
73
|
+
# Could use initial_pool_state_from_dict to simplify
|
|
74
|
+
if state == "SELF_POOLING":
|
|
75
|
+
pool_url = None
|
|
76
|
+
relative_lock_height = uint32(0)
|
|
77
|
+
target_puzzle_hash = None # wallet will fill this in
|
|
78
|
+
elif state == "FARMING_TO_POOL":
|
|
79
|
+
enforce_https = wallet_info.config["selected_network"] == "mainnet"
|
|
80
|
+
assert pool_url is not None
|
|
81
|
+
if enforce_https and not pool_url.startswith("https://"):
|
|
82
|
+
raise CliRpcConnectionError(f"Pool URLs must be HTTPS on mainnet {pool_url}.")
|
|
83
|
+
json_dict = await create_pool_args(pool_url)
|
|
84
|
+
relative_lock_height = json_dict["relative_lock_height"]
|
|
85
|
+
target_puzzle_hash = bytes32.from_hexstr(json_dict["target_puzzle_hash"])
|
|
86
|
+
else:
|
|
87
|
+
raise ValueError("Plot NFT must be created in SELF_POOLING or FARMING_TO_POOL state.")
|
|
88
|
+
|
|
89
|
+
pool_msg = f" and join pool: {pool_url}" if pool_url else ""
|
|
90
|
+
print(f"Will create a plot NFT{pool_msg}.")
|
|
91
|
+
if prompt:
|
|
92
|
+
cli_confirm("Confirm (y/n): ", "Aborting.")
|
|
93
|
+
|
|
94
|
+
try:
|
|
95
|
+
tx_record: TransactionRecord = await wallet_info.client.create_new_pool_wallet(
|
|
96
|
+
target_puzzle_hash,
|
|
97
|
+
pool_url,
|
|
98
|
+
relative_lock_height,
|
|
99
|
+
"localhost:5000",
|
|
100
|
+
"new",
|
|
101
|
+
state,
|
|
102
|
+
fee,
|
|
103
|
+
)
|
|
104
|
+
start = time.time()
|
|
105
|
+
while time.time() - start < 10:
|
|
106
|
+
await asyncio.sleep(0.1)
|
|
107
|
+
tx = await wallet_info.client.get_transaction(tx_record.name)
|
|
108
|
+
if len(tx.sent_to) > 0:
|
|
109
|
+
print(transaction_submitted_msg(tx))
|
|
110
|
+
print(transaction_status_msg(wallet_info.fingerprint, tx_record.name))
|
|
111
|
+
return None
|
|
112
|
+
except Exception as e:
|
|
113
|
+
raise CliRpcConnectionError(
|
|
114
|
+
f"Error creating plot NFT: {e}\n Please start both farmer and wallet with: chia start -r farmer"
|
|
115
|
+
)
|
|
113
116
|
|
|
114
117
|
|
|
115
118
|
async def pprint_pool_wallet_state(
|
|
@@ -117,7 +120,7 @@ async def pprint_pool_wallet_state(
|
|
|
117
120
|
wallet_id: int,
|
|
118
121
|
pool_wallet_info: PoolWalletInfo,
|
|
119
122
|
address_prefix: str,
|
|
120
|
-
pool_state_dict: Optional[
|
|
123
|
+
pool_state_dict: Optional[dict[str, Any]],
|
|
121
124
|
) -> None:
|
|
122
125
|
print(f"Wallet ID: {wallet_id}")
|
|
123
126
|
if pool_wallet_info.current.state == PoolSingletonState.LEAVING_POOL.value and pool_wallet_info.target is None:
|
|
@@ -142,7 +145,7 @@ async def pprint_pool_wallet_state(
|
|
|
142
145
|
print(f"Target state: {PoolSingletonState(pool_wallet_info.target.state).name}")
|
|
143
146
|
print(f"Target pool URL: {pool_wallet_info.target.pool_url}")
|
|
144
147
|
if pool_wallet_info.current.state == PoolSingletonState.SELF_POOLING.value:
|
|
145
|
-
balances:
|
|
148
|
+
balances: dict[str, Any] = await wallet_client.get_wallet_balance(wallet_id)
|
|
146
149
|
balance = balances["confirmed_wallet_balance"]
|
|
147
150
|
typ = WalletType(int(WalletType.POOLING_WALLET))
|
|
148
151
|
address_prefix, scale = wallet_coin_unit(typ, address_prefix)
|
|
@@ -177,12 +180,12 @@ async def pprint_pool_wallet_state(
|
|
|
177
180
|
|
|
178
181
|
async def pprint_all_pool_wallet_state(
|
|
179
182
|
wallet_client: WalletRpcClient,
|
|
180
|
-
get_wallets_response:
|
|
183
|
+
get_wallets_response: list[dict[str, Any]],
|
|
181
184
|
address_prefix: str,
|
|
182
|
-
pool_state_dict:
|
|
185
|
+
pool_state_dict: dict[bytes32, dict[str, Any]],
|
|
183
186
|
) -> None:
|
|
184
|
-
print(f"Wallet height: {await wallet_client.get_height_info()}")
|
|
185
|
-
print(f"Sync status: {'Synced' if (await wallet_client.
|
|
187
|
+
print(f"Wallet height: {(await wallet_client.get_height_info()).height}")
|
|
188
|
+
print(f"Sync status: {'Synced' if (await wallet_client.get_sync_status()).synced else 'Not synced'}")
|
|
186
189
|
for wallet_info in get_wallets_response:
|
|
187
190
|
pool_wallet_id = wallet_info["id"]
|
|
188
191
|
typ = WalletType(int(wallet_info["type"]))
|
|
@@ -198,47 +201,49 @@ async def pprint_all_pool_wallet_state(
|
|
|
198
201
|
print("")
|
|
199
202
|
|
|
200
203
|
|
|
201
|
-
async def show(
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
204
|
+
async def show(
|
|
205
|
+
wallet_info: WalletClientInfo,
|
|
206
|
+
root_path: Path,
|
|
207
|
+
wallet_id_passed_in: Optional[int],
|
|
208
|
+
) -> None:
|
|
209
|
+
summaries_response = await wallet_info.client.get_wallets()
|
|
210
|
+
config = wallet_info.config
|
|
211
|
+
address_prefix = config["network_overrides"]["config"][config["selected_network"]]["address_prefix"]
|
|
212
|
+
pool_state_dict: dict[bytes32, dict[str, Any]] = dict()
|
|
213
|
+
if wallet_id_passed_in is not None:
|
|
214
|
+
await wallet_id_lookup_and_check(wallet_info.client, wallet_id_passed_in)
|
|
215
|
+
try:
|
|
216
|
+
async with get_any_service_client(
|
|
217
|
+
client_type=FarmerRpcClient,
|
|
218
|
+
root_path=root_path,
|
|
219
|
+
) as (farmer_client, _):
|
|
220
|
+
pool_state_list = (await farmer_client.get_pool_state())["pool_state"]
|
|
221
|
+
pool_state_dict = {
|
|
222
|
+
bytes32.from_hexstr(pool_state_item["pool_config"]["launcher_id"]): pool_state_item
|
|
223
|
+
for pool_state_item in pool_state_list
|
|
224
|
+
}
|
|
225
|
+
if wallet_id_passed_in is not None:
|
|
226
|
+
pool_wallet_info, _ = await wallet_info.client.pw_status(wallet_id_passed_in)
|
|
227
|
+
await pprint_pool_wallet_state(
|
|
228
|
+
wallet_info.client,
|
|
229
|
+
wallet_id_passed_in,
|
|
230
|
+
pool_wallet_info,
|
|
231
|
+
address_prefix,
|
|
232
|
+
pool_state_dict.get(pool_wallet_info.launcher_id),
|
|
233
|
+
)
|
|
234
|
+
else:
|
|
235
|
+
await pprint_all_pool_wallet_state(
|
|
236
|
+
wallet_info.client, summaries_response, address_prefix, pool_state_dict
|
|
237
|
+
)
|
|
238
|
+
except CliRpcConnectionError: # we want to output this if we can't connect to the farmer
|
|
239
|
+
await pprint_all_pool_wallet_state(wallet_info.client, summaries_response, address_prefix, pool_state_dict)
|
|
235
240
|
|
|
236
241
|
|
|
237
|
-
async def get_login_link(launcher_id: bytes32) -> None:
|
|
238
|
-
async with get_any_service_client(FarmerRpcClient) as (farmer_client, _):
|
|
242
|
+
async def get_login_link(launcher_id: bytes32, root_path: Path) -> None:
|
|
243
|
+
async with get_any_service_client(FarmerRpcClient, root_path=root_path) as (farmer_client, _):
|
|
239
244
|
login_link: Optional[str] = await farmer_client.get_pool_login_link(launcher_id)
|
|
240
245
|
if login_link is None:
|
|
241
|
-
|
|
246
|
+
raise CliRpcConnectionError("Was not able to get login link.")
|
|
242
247
|
else:
|
|
243
248
|
print(login_link)
|
|
244
249
|
|
|
@@ -246,7 +251,7 @@ async def get_login_link(launcher_id: bytes32) -> None:
|
|
|
246
251
|
async def submit_tx_with_confirmation(
|
|
247
252
|
message: str,
|
|
248
253
|
prompt: bool,
|
|
249
|
-
func: Callable[[], Awaitable[
|
|
254
|
+
func: Callable[[], Awaitable[dict[str, Any]]],
|
|
250
255
|
wallet_client: WalletRpcClient,
|
|
251
256
|
fingerprint: int,
|
|
252
257
|
wallet_id: int,
|
|
@@ -269,106 +274,132 @@ async def submit_tx_with_confirmation(
|
|
|
269
274
|
print(f"Error performing operation on Plot NFT -f {fingerprint} wallet id: {wallet_id}: {e}")
|
|
270
275
|
|
|
271
276
|
|
|
277
|
+
async def wallet_id_lookup_and_check(wallet_client: WalletRpcClient, wallet_id: Optional[int]) -> int:
|
|
278
|
+
selected_wallet_id: int
|
|
279
|
+
|
|
280
|
+
# absent network errors, this should not fail with an error
|
|
281
|
+
pool_wallets = await wallet_client.get_wallets(wallet_type=WalletType.POOLING_WALLET)
|
|
282
|
+
|
|
283
|
+
if wallet_id is None:
|
|
284
|
+
if len(pool_wallets) == 0:
|
|
285
|
+
raise CliRpcConnectionError(
|
|
286
|
+
"No pool wallet found. Use 'chia plotnft create' to create a new pooling wallet."
|
|
287
|
+
)
|
|
288
|
+
if len(pool_wallets) > 1:
|
|
289
|
+
raise CliRpcConnectionError("More than one pool wallet found. Use -i to specify pool wallet id.")
|
|
290
|
+
selected_wallet_id = pool_wallets[0]["id"]
|
|
291
|
+
else:
|
|
292
|
+
selected_wallet_id = wallet_id
|
|
293
|
+
|
|
294
|
+
if not any(wallet["id"] == selected_wallet_id for wallet in pool_wallets):
|
|
295
|
+
raise CliRpcConnectionError(f"Wallet with id: {selected_wallet_id} is not a pool wallet.")
|
|
296
|
+
|
|
297
|
+
return selected_wallet_id
|
|
298
|
+
|
|
299
|
+
|
|
272
300
|
async def join_pool(
|
|
273
301
|
*,
|
|
274
|
-
|
|
275
|
-
fingerprint: int,
|
|
302
|
+
wallet_info: WalletClientInfo,
|
|
276
303
|
pool_url: str,
|
|
277
304
|
fee: uint64,
|
|
278
|
-
wallet_id: int,
|
|
305
|
+
wallet_id: Optional[int],
|
|
279
306
|
prompt: bool,
|
|
280
307
|
) -> None:
|
|
281
|
-
|
|
282
|
-
enforce_https = config["full_node"]["selected_network"] == "mainnet"
|
|
308
|
+
selected_wallet_id = await wallet_id_lookup_and_check(wallet_info.client, wallet_id)
|
|
283
309
|
|
|
284
|
-
|
|
285
|
-
print(f"Pool URLs must be HTTPS on mainnet {pool_url}. Aborting.")
|
|
286
|
-
return
|
|
287
|
-
try:
|
|
288
|
-
async with aiohttp.ClientSession() as session:
|
|
289
|
-
async with session.get(
|
|
290
|
-
f"{pool_url}/pool_info", ssl=ssl_context_for_root(get_mozilla_ca_crt())
|
|
291
|
-
) as response:
|
|
292
|
-
if response.ok:
|
|
293
|
-
json_dict = json.loads(await response.text())
|
|
294
|
-
else:
|
|
295
|
-
print(f"Response not OK: {response.status}")
|
|
296
|
-
return
|
|
297
|
-
except Exception as e:
|
|
298
|
-
print(f"Error connecting to pool {pool_url}: {e}")
|
|
299
|
-
return
|
|
300
|
-
|
|
301
|
-
if json_dict["relative_lock_height"] > 1000:
|
|
302
|
-
print("Relative lock height too high for this pool, cannot join")
|
|
303
|
-
return
|
|
304
|
-
if json_dict["protocol_version"] != POOL_PROTOCOL_VERSION:
|
|
305
|
-
print(f"Incorrect version: {json_dict['protocol_version']}, should be {POOL_PROTOCOL_VERSION}")
|
|
306
|
-
return
|
|
307
|
-
|
|
308
|
-
pprint(json_dict)
|
|
309
|
-
msg = f"\nWill join pool: {pool_url} with Plot NFT {fingerprint}."
|
|
310
|
-
func = functools.partial(
|
|
311
|
-
wallet_client.pw_join_pool,
|
|
312
|
-
wallet_id,
|
|
313
|
-
bytes32.from_hexstr(json_dict["target_puzzle_hash"]),
|
|
314
|
-
pool_url,
|
|
315
|
-
json_dict["relative_lock_height"],
|
|
316
|
-
fee,
|
|
317
|
-
)
|
|
310
|
+
enforce_https = wallet_info.config["selected_network"] == "mainnet"
|
|
318
311
|
|
|
319
|
-
|
|
312
|
+
if enforce_https and not pool_url.startswith("https://"):
|
|
313
|
+
raise CliRpcConnectionError(f"Pool URLs must be HTTPS on mainnet {pool_url}.")
|
|
314
|
+
try:
|
|
315
|
+
async with aiohttp.ClientSession() as session:
|
|
316
|
+
async with session.get(f"{pool_url}/pool_info", ssl=ssl_context_for_root(get_mozilla_ca_crt())) as response:
|
|
317
|
+
if response.ok:
|
|
318
|
+
json_dict = json.loads(await response.text())
|
|
319
|
+
else:
|
|
320
|
+
raise CliRpcConnectionError(f"Response not OK: {response.status}")
|
|
321
|
+
except Exception as e:
|
|
322
|
+
raise CliRpcConnectionError(f"Error connecting to pool {pool_url}: {e}")
|
|
320
323
|
|
|
324
|
+
if json_dict["relative_lock_height"] > 1000:
|
|
325
|
+
raise CliRpcConnectionError("Relative lock height too high for this pool, cannot join")
|
|
321
326
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
async with get_wallet_client(wallet_rpc_port, fingerprint) as (wallet_client, fingerprint, _):
|
|
326
|
-
msg = f"Will start self-farming with Plot NFT on wallet id {wallet_id} fingerprint {fingerprint}."
|
|
327
|
-
func = functools.partial(wallet_client.pw_self_pool, wallet_id, fee)
|
|
328
|
-
await submit_tx_with_confirmation(msg, prompt, func, wallet_client, fingerprint, wallet_id)
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
async def inspect_cmd(wallet_rpc_port: Optional[int], fingerprint: int, wallet_id: int) -> None:
|
|
332
|
-
async with get_wallet_client(wallet_rpc_port, fingerprint) as (wallet_client, fingerprint, _):
|
|
333
|
-
pool_wallet_info, unconfirmed_transactions = await wallet_client.pw_status(wallet_id)
|
|
334
|
-
print(
|
|
335
|
-
json.dumps(
|
|
336
|
-
{
|
|
337
|
-
"pool_wallet_info": pool_wallet_info.to_json_dict(),
|
|
338
|
-
"unconfirmed_transactions": [
|
|
339
|
-
{"sent_to": tx.sent_to, "transaction_id": tx.name.hex()} for tx in unconfirmed_transactions
|
|
340
|
-
],
|
|
341
|
-
}
|
|
342
|
-
)
|
|
327
|
+
if json_dict["protocol_version"] != POOL_PROTOCOL_VERSION:
|
|
328
|
+
raise CliRpcConnectionError(
|
|
329
|
+
f"Incorrect version: {json_dict['protocol_version']}, should be {POOL_PROTOCOL_VERSION}"
|
|
343
330
|
)
|
|
344
331
|
|
|
332
|
+
pprint(json_dict)
|
|
333
|
+
msg = f"\nWill join pool: {pool_url} with Plot NFT {wallet_info.fingerprint}."
|
|
334
|
+
func = functools.partial(
|
|
335
|
+
wallet_info.client.pw_join_pool,
|
|
336
|
+
selected_wallet_id,
|
|
337
|
+
bytes32.from_hexstr(json_dict["target_puzzle_hash"]),
|
|
338
|
+
pool_url,
|
|
339
|
+
json_dict["relative_lock_height"],
|
|
340
|
+
fee,
|
|
341
|
+
)
|
|
345
342
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
343
|
+
await submit_tx_with_confirmation(
|
|
344
|
+
msg, prompt, func, wallet_info.client, wallet_info.fingerprint, selected_wallet_id
|
|
345
|
+
)
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
async def self_pool(*, wallet_info: WalletClientInfo, fee: uint64, wallet_id: Optional[int], prompt: bool) -> None:
|
|
349
|
+
selected_wallet_id = await wallet_id_lookup_and_check(wallet_info.client, wallet_id)
|
|
350
|
+
msg = (
|
|
351
|
+
"Will start self-farming with Plot NFT on wallet id "
|
|
352
|
+
f"{selected_wallet_id} fingerprint {wallet_info.fingerprint}."
|
|
353
|
+
)
|
|
354
|
+
func = functools.partial(wallet_info.client.pw_self_pool, selected_wallet_id, fee)
|
|
355
|
+
await submit_tx_with_confirmation(
|
|
356
|
+
msg, prompt, func, wallet_info.client, wallet_info.fingerprint, selected_wallet_id
|
|
357
|
+
)
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
async def inspect_cmd(wallet_info: WalletClientInfo, wallet_id: Optional[int]) -> None:
|
|
361
|
+
selected_wallet_id = await wallet_id_lookup_and_check(wallet_info.client, wallet_id)
|
|
362
|
+
pool_wallet_info, unconfirmed_transactions = await wallet_info.client.pw_status(selected_wallet_id)
|
|
363
|
+
print(
|
|
364
|
+
json.dumps(
|
|
365
|
+
{
|
|
366
|
+
"pool_wallet_info": pool_wallet_info.to_json_dict(),
|
|
367
|
+
"unconfirmed_transactions": [
|
|
368
|
+
{"sent_to": tx.sent_to, "transaction_id": tx.name.hex()} for tx in unconfirmed_transactions
|
|
369
|
+
],
|
|
370
|
+
}
|
|
353
371
|
)
|
|
354
|
-
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
async def claim_cmd(*, wallet_info: WalletClientInfo, fee: uint64, wallet_id: Optional[int]) -> None:
|
|
376
|
+
selected_wallet_id = await wallet_id_lookup_and_check(wallet_info.client, wallet_id)
|
|
377
|
+
msg = f"\nWill claim rewards for wallet ID: {selected_wallet_id}."
|
|
378
|
+
func = functools.partial(
|
|
379
|
+
wallet_info.client.pw_absorb_rewards,
|
|
380
|
+
selected_wallet_id,
|
|
381
|
+
fee,
|
|
382
|
+
)
|
|
383
|
+
await submit_tx_with_confirmation(msg, False, func, wallet_info.client, wallet_info.fingerprint, selected_wallet_id)
|
|
355
384
|
|
|
356
385
|
|
|
357
|
-
async def change_payout_instructions(launcher_id:
|
|
358
|
-
new_pool_configs:
|
|
386
|
+
async def change_payout_instructions(launcher_id: bytes32, address: CliAddress, root_path: Optional[Path]) -> None:
|
|
387
|
+
new_pool_configs: list[PoolWalletConfig] = []
|
|
359
388
|
id_found = False
|
|
360
389
|
puzzle_hash = address.validate_address_type_get_ph(AddressType.XCH)
|
|
390
|
+
if root_path is None:
|
|
391
|
+
root_path = DEFAULT_ROOT_PATH
|
|
361
392
|
|
|
362
|
-
old_configs:
|
|
393
|
+
old_configs: list[PoolWalletConfig] = load_pool_config(root_path)
|
|
363
394
|
for pool_config in old_configs:
|
|
364
|
-
if pool_config.launcher_id ==
|
|
395
|
+
if pool_config.launcher_id == launcher_id:
|
|
365
396
|
id_found = True
|
|
366
397
|
pool_config = replace(pool_config, payout_instructions=puzzle_hash.hex())
|
|
367
398
|
new_pool_configs.append(pool_config)
|
|
368
399
|
if id_found:
|
|
369
|
-
print(f"Launcher Id: {launcher_id} Found, Updating Config.")
|
|
370
|
-
await update_pool_config(
|
|
371
|
-
print(f"Payout Instructions for launcher id: {launcher_id} successfully updated to: {address}.")
|
|
400
|
+
print(f"Launcher Id: {launcher_id.hex()} Found, Updating Config.")
|
|
401
|
+
await update_pool_config(root_path, new_pool_configs)
|
|
402
|
+
print(f"Payout Instructions for launcher id: {launcher_id.hex()} successfully updated to: {address}.")
|
|
372
403
|
print(f"You will need to change the payout instructions on every device you use to: {address}.")
|
|
373
404
|
else:
|
|
374
|
-
print(f"Launcher Id: {launcher_id} Not found.")
|
|
405
|
+
print(f"Launcher Id: {launcher_id.hex()} Not found.")
|
chia/cmds/plots.py
CHANGED
|
@@ -7,6 +7,7 @@ from pathlib import Path
|
|
|
7
7
|
|
|
8
8
|
import click
|
|
9
9
|
|
|
10
|
+
from chia.cmds.cmd_classes import ChiaCliContext
|
|
10
11
|
from chia.plotting.util import add_plot_directory, validate_plot_size
|
|
11
12
|
|
|
12
13
|
log = logging.getLogger(__name__)
|
|
@@ -33,7 +34,7 @@ def plots_cmd(ctx: click.Context) -> None:
|
|
|
33
34
|
"""Create, add, remove and check your plots"""
|
|
34
35
|
from chia.util.chia_logging import initialize_logging
|
|
35
36
|
|
|
36
|
-
root_path
|
|
37
|
+
root_path = ChiaCliContext.set_default(ctx).root_path
|
|
37
38
|
if not root_path.is_dir():
|
|
38
39
|
raise RuntimeError("Please initialize (or migrate) your config directory with 'chia init'")
|
|
39
40
|
initialize_logging("", {"log_level": "INFO", "log_stdout": True}, root_path)
|
|
@@ -132,7 +133,7 @@ def create_cmd(
|
|
|
132
133
|
nobitfield=nobitfield,
|
|
133
134
|
)
|
|
134
135
|
|
|
135
|
-
root_path
|
|
136
|
+
root_path = ChiaCliContext.set_default(ctx).root_path
|
|
136
137
|
try:
|
|
137
138
|
validate_plot_size(root_path, size, override_k)
|
|
138
139
|
except ValueError as e:
|
|
@@ -177,7 +178,14 @@ def check_cmd(
|
|
|
177
178
|
) -> None:
|
|
178
179
|
from chia.plotting.check_plots import check_plots
|
|
179
180
|
|
|
180
|
-
check_plots(
|
|
181
|
+
check_plots(
|
|
182
|
+
ChiaCliContext.set_default(ctx).root_path,
|
|
183
|
+
num,
|
|
184
|
+
challenge_start,
|
|
185
|
+
grep_string,
|
|
186
|
+
list_duplicates,
|
|
187
|
+
debug_show_memo,
|
|
188
|
+
)
|
|
181
189
|
|
|
182
190
|
|
|
183
191
|
@plots_cmd.command("add", help="Adds a directory of plots")
|
|
@@ -194,7 +202,7 @@ def add_cmd(ctx: click.Context, final_dir: str) -> None:
|
|
|
194
202
|
from chia.plotting.util import add_plot_directory
|
|
195
203
|
|
|
196
204
|
try:
|
|
197
|
-
add_plot_directory(ctx.
|
|
205
|
+
add_plot_directory(ChiaCliContext.set_default(ctx).root_path, final_dir)
|
|
198
206
|
print(f"Successfully added: {final_dir}")
|
|
199
207
|
except ValueError as e:
|
|
200
208
|
print(e)
|
|
@@ -213,10 +221,10 @@ def add_cmd(ctx: click.Context, final_dir: str) -> None:
|
|
|
213
221
|
def remove_cmd(ctx: click.Context, final_dir: str) -> None:
|
|
214
222
|
from chia.plotting.util import remove_plot_directory
|
|
215
223
|
|
|
216
|
-
remove_plot_directory(ctx.
|
|
224
|
+
remove_plot_directory(ChiaCliContext.set_default(ctx).root_path, final_dir)
|
|
217
225
|
|
|
218
226
|
|
|
219
227
|
@plots_cmd.command("show", help="Shows the directory of current plots")
|
|
220
228
|
@click.pass_context
|
|
221
229
|
def show_cmd(ctx: click.Context) -> None:
|
|
222
|
-
show_plots(ctx.
|
|
230
|
+
show_plots(ChiaCliContext.set_default(ctx).root_path)
|
chia/cmds/plotters.py
CHANGED
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import click
|
|
4
4
|
|
|
5
|
+
from chia.cmds.cmd_classes import ChiaCliContext
|
|
5
6
|
from chia.plotters.plotters import call_plotters
|
|
6
7
|
|
|
7
8
|
|
|
@@ -14,4 +15,4 @@ from chia.plotters.plotters import call_plotters
|
|
|
14
15
|
@click.pass_context
|
|
15
16
|
@click.argument("args", nargs=-1)
|
|
16
17
|
def plotters_cmd(ctx: click.Context, args: tuple[click.Argument]) -> None:
|
|
17
|
-
call_plotters(ctx.
|
|
18
|
+
call_plotters(ChiaCliContext.set_default(ctx).root_path, args)
|