chia-blockchain 2.5.0rc1__py3-none-any.whl → 2.5.1__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.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.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.0rc1.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
chia/cmds/rpc.py
CHANGED
|
@@ -3,30 +3,40 @@ from __future__ import annotations
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import json
|
|
5
5
|
import sys
|
|
6
|
-
from
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import Any, Optional, TextIO
|
|
7
8
|
|
|
8
9
|
import click
|
|
9
10
|
from aiohttp import ClientResponseError
|
|
10
11
|
|
|
12
|
+
from chia.cmds.cmd_classes import ChiaCliContext
|
|
11
13
|
from chia.util.config import load_config
|
|
12
|
-
from chia.util.default_root import DEFAULT_ROOT_PATH
|
|
13
14
|
from chia.util.ints import uint16
|
|
14
15
|
|
|
15
|
-
services:
|
|
16
|
+
services: list[str] = ["crawler", "daemon", "farmer", "full_node", "harvester", "timelord", "wallet", "data_layer"]
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
async def call_endpoint(
|
|
19
|
-
service: str,
|
|
20
|
-
|
|
20
|
+
service: str,
|
|
21
|
+
endpoint: str,
|
|
22
|
+
request: dict[str, Any],
|
|
23
|
+
config: dict[str, Any],
|
|
24
|
+
root_path: Path,
|
|
25
|
+
quiet: bool = False,
|
|
26
|
+
) -> dict[str, Any]:
|
|
21
27
|
if service == "daemon":
|
|
22
|
-
return await call_daemon_command(endpoint, request, config, quiet)
|
|
28
|
+
return await call_daemon_command(endpoint, request, config, root_path=root_path, quiet=quiet)
|
|
23
29
|
|
|
24
|
-
return await call_rpc_service_endpoint(service, endpoint, request, config)
|
|
30
|
+
return await call_rpc_service_endpoint(service, endpoint, request, config, root_path=root_path)
|
|
25
31
|
|
|
26
32
|
|
|
27
33
|
async def call_rpc_service_endpoint(
|
|
28
|
-
service: str,
|
|
29
|
-
|
|
34
|
+
service: str,
|
|
35
|
+
endpoint: str,
|
|
36
|
+
request: dict[str, Any],
|
|
37
|
+
config: dict[str, Any],
|
|
38
|
+
root_path: Path,
|
|
39
|
+
) -> dict[str, Any]:
|
|
30
40
|
from chia.rpc.rpc_client import RpcClient
|
|
31
41
|
|
|
32
42
|
port: uint16
|
|
@@ -37,10 +47,10 @@ async def call_rpc_service_endpoint(
|
|
|
37
47
|
port = uint16(config[service]["rpc_port"])
|
|
38
48
|
|
|
39
49
|
try:
|
|
40
|
-
client = await RpcClient.create(config["self_hostname"], port,
|
|
50
|
+
client = await RpcClient.create(config["self_hostname"], port, root_path, config)
|
|
41
51
|
except Exception as e:
|
|
42
52
|
raise Exception(f"Failed to create RPC client {service}: {e}")
|
|
43
|
-
result:
|
|
53
|
+
result: dict[str, Any]
|
|
44
54
|
try:
|
|
45
55
|
result = await client.fetch(endpoint, request)
|
|
46
56
|
except ClientResponseError as e:
|
|
@@ -56,16 +66,16 @@ async def call_rpc_service_endpoint(
|
|
|
56
66
|
|
|
57
67
|
|
|
58
68
|
async def call_daemon_command(
|
|
59
|
-
command: str, request:
|
|
60
|
-
) ->
|
|
69
|
+
command: str, request: dict[str, Any], config: dict[str, Any], root_path: Path, quiet: bool = False
|
|
70
|
+
) -> dict[str, Any]:
|
|
61
71
|
from chia.daemon.client import connect_to_daemon_and_validate
|
|
62
72
|
|
|
63
|
-
daemon = await connect_to_daemon_and_validate(
|
|
73
|
+
daemon = await connect_to_daemon_and_validate(root_path, config, quiet=quiet)
|
|
64
74
|
|
|
65
75
|
if daemon is None:
|
|
66
76
|
raise Exception("Failed to connect to chia daemon")
|
|
67
77
|
|
|
68
|
-
result:
|
|
78
|
+
result: dict[str, Any]
|
|
69
79
|
try:
|
|
70
80
|
ws_request = daemon.format_request(command, request)
|
|
71
81
|
ws_response = await daemon._get(ws_request)
|
|
@@ -77,12 +87,12 @@ async def call_daemon_command(
|
|
|
77
87
|
return result
|
|
78
88
|
|
|
79
89
|
|
|
80
|
-
def print_result(json_dict:
|
|
90
|
+
def print_result(json_dict: dict[str, Any]) -> None:
|
|
81
91
|
print(json.dumps(json_dict, indent=2, sort_keys=True))
|
|
82
92
|
|
|
83
93
|
|
|
84
|
-
def get_routes(service: str, config:
|
|
85
|
-
return asyncio.run(call_endpoint(service, "get_routes", {}, config, quiet))
|
|
94
|
+
def get_routes(service: str, config: dict[str, Any], root_path: Path, quiet: bool = False) -> dict[str, Any]:
|
|
95
|
+
return asyncio.run(call_endpoint(service, "get_routes", {}, config, root_path=root_path, quiet=quiet))
|
|
86
96
|
|
|
87
97
|
|
|
88
98
|
@click.group("rpc", help="RPC Client")
|
|
@@ -92,10 +102,12 @@ def rpc_cmd() -> None:
|
|
|
92
102
|
|
|
93
103
|
@rpc_cmd.command("endpoints", help="Print all endpoints of a service")
|
|
94
104
|
@click.argument("service", type=click.Choice(services))
|
|
95
|
-
|
|
96
|
-
|
|
105
|
+
@click.pass_context
|
|
106
|
+
def endpoints_cmd(ctx: click.Context, service: str) -> None:
|
|
107
|
+
root_path = ChiaCliContext.set_default(ctx).root_path
|
|
108
|
+
config = load_config(root_path, "config.yaml")
|
|
97
109
|
try:
|
|
98
|
-
routes = get_routes(service, config)
|
|
110
|
+
routes = get_routes(service, config, root_path=root_path)
|
|
99
111
|
for route in routes["routes"]:
|
|
100
112
|
print(route.lstrip("/"))
|
|
101
113
|
except Exception as e:
|
|
@@ -104,10 +116,12 @@ def endpoints_cmd(service: str) -> None:
|
|
|
104
116
|
|
|
105
117
|
@rpc_cmd.command("status", help="Print the status of all available RPC services")
|
|
106
118
|
@click.option("--json-output", "json_output", is_flag=True, help="Output status as JSON")
|
|
107
|
-
|
|
119
|
+
@click.pass_context
|
|
120
|
+
def status_cmd(ctx: click.Context, json_output: bool) -> None:
|
|
108
121
|
import json
|
|
109
122
|
|
|
110
|
-
|
|
123
|
+
root_path = ChiaCliContext.set_default(ctx).root_path
|
|
124
|
+
config = load_config(root_path, "config.yaml")
|
|
111
125
|
|
|
112
126
|
def print_row(c0: str, c1: str) -> None:
|
|
113
127
|
print(f"│ {c0:<12} │ {c1:<9} │")
|
|
@@ -116,7 +130,7 @@ def status_cmd(json_output: bool) -> None:
|
|
|
116
130
|
for service in services:
|
|
117
131
|
status = "ACTIVE"
|
|
118
132
|
try:
|
|
119
|
-
if not get_routes(service, config, quiet=True)["success"]:
|
|
133
|
+
if not get_routes(service, config, root_path=root_path, quiet=True)["success"]:
|
|
120
134
|
raise Exception()
|
|
121
135
|
except Exception:
|
|
122
136
|
status = "INACTIVE"
|
|
@@ -156,16 +170,22 @@ def create_commands() -> None:
|
|
|
156
170
|
type=click.File("r"),
|
|
157
171
|
default=None,
|
|
158
172
|
)
|
|
173
|
+
@click.pass_context
|
|
159
174
|
def rpc_client_cmd(
|
|
160
|
-
|
|
175
|
+
ctx: click.Context,
|
|
176
|
+
endpoint: str,
|
|
177
|
+
request: Optional[str],
|
|
178
|
+
json_file: Optional[TextIO],
|
|
179
|
+
service: str = service,
|
|
161
180
|
) -> None:
|
|
162
|
-
|
|
181
|
+
root_path: Path = ChiaCliContext.set_default(ctx).root_path
|
|
182
|
+
config = load_config(root_path, "config.yaml")
|
|
163
183
|
if request is not None and json_file is not None:
|
|
164
184
|
sys.exit(
|
|
165
185
|
"Can only use one request source: REQUEST argument OR -j/--json-file option. See the help with -h"
|
|
166
186
|
)
|
|
167
187
|
|
|
168
|
-
request_json:
|
|
188
|
+
request_json: dict[str, Any] = {}
|
|
169
189
|
if json_file is not None:
|
|
170
190
|
try:
|
|
171
191
|
request_json = json.load(json_file)
|
|
@@ -180,7 +200,7 @@ def create_commands() -> None:
|
|
|
180
200
|
try:
|
|
181
201
|
if endpoint[0] == "/":
|
|
182
202
|
endpoint = endpoint[1:]
|
|
183
|
-
print_result(asyncio.run(call_endpoint(service, endpoint, request_json, config)))
|
|
203
|
+
print_result(asyncio.run(call_endpoint(service, endpoint, request_json, config, root_path=root_path)))
|
|
184
204
|
except Exception as e:
|
|
185
205
|
sys.exit(str(e))
|
|
186
206
|
|
chia/cmds/show.py
CHANGED
|
@@ -4,6 +4,7 @@ from typing import Optional
|
|
|
4
4
|
|
|
5
5
|
import click
|
|
6
6
|
|
|
7
|
+
from chia.cmds.cmd_classes import ChiaCliContext
|
|
7
8
|
from chia.cmds.show_funcs import show_async
|
|
8
9
|
|
|
9
10
|
|
|
@@ -62,7 +63,7 @@ def show_cmd(
|
|
|
62
63
|
asyncio.run(
|
|
63
64
|
show_async(
|
|
64
65
|
rpc_port,
|
|
65
|
-
ctx.
|
|
66
|
+
ChiaCliContext.set_default(ctx).root_path,
|
|
66
67
|
fee,
|
|
67
68
|
state,
|
|
68
69
|
block_header_hash_by_height,
|
chia/cmds/show_funcs.py
CHANGED
|
@@ -2,13 +2,13 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import Any,
|
|
5
|
+
from typing import Any, Optional, Union
|
|
6
6
|
|
|
7
7
|
from chia.rpc.full_node_rpc_client import FullNodeRpcClient
|
|
8
8
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
async def print_blockchain_state(node_client: FullNodeRpcClient, config:
|
|
11
|
+
async def print_blockchain_state(node_client: FullNodeRpcClient, config: dict[str, Any]) -> bool:
|
|
12
12
|
import time
|
|
13
13
|
|
|
14
14
|
from chia.cmds.cmds_util import format_bytes
|
|
@@ -43,7 +43,8 @@ async def print_blockchain_state(node_client: FullNodeRpcClient, config: Dict[st
|
|
|
43
43
|
sync_current_block = blockchain_state["sync"]["sync_progress_height"]
|
|
44
44
|
print(
|
|
45
45
|
f"Current Blockchain Status: Syncing {sync_current_block}/{sync_max_block} "
|
|
46
|
-
f"({sync_max_block - sync_current_block} behind).
|
|
46
|
+
f"({sync_max_block - sync_current_block} behind). "
|
|
47
|
+
f"({sync_current_block * 100.0 / sync_max_block:2.2f}% synced)"
|
|
47
48
|
)
|
|
48
49
|
print("Peak: Hash:", bytes32(peak.header_hash) if peak is not None else "")
|
|
49
50
|
elif peak is not None:
|
|
@@ -78,7 +79,7 @@ async def print_blockchain_state(node_client: FullNodeRpcClient, config: Dict[st
|
|
|
78
79
|
print(f"Current VDF sub_slot_iters: {sub_slot_iters}")
|
|
79
80
|
print("\n Height: | Hash:")
|
|
80
81
|
|
|
81
|
-
added_blocks:
|
|
82
|
+
added_blocks: list[BlockRecord] = []
|
|
82
83
|
curr = await node_client.get_block_record(peak.header_hash)
|
|
83
84
|
while curr is not None and len(added_blocks) < num_blocks and curr.height > 0:
|
|
84
85
|
added_blocks.append(curr)
|
|
@@ -92,7 +93,7 @@ async def print_blockchain_state(node_client: FullNodeRpcClient, config: Dict[st
|
|
|
92
93
|
|
|
93
94
|
|
|
94
95
|
async def print_block_from_hash(
|
|
95
|
-
node_client: FullNodeRpcClient, config:
|
|
96
|
+
node_client: FullNodeRpcClient, config: dict[str, Any], block_by_header_hash: str
|
|
96
97
|
) -> None:
|
|
97
98
|
import time
|
|
98
99
|
|
|
@@ -196,7 +197,7 @@ async def show_async(
|
|
|
196
197
|
) -> None:
|
|
197
198
|
from chia.cmds.cmds_util import get_any_service_client
|
|
198
199
|
|
|
199
|
-
async with get_any_service_client(FullNodeRpcClient,
|
|
200
|
+
async with get_any_service_client(FullNodeRpcClient, root_path, rpc_port) as (node_client, config):
|
|
200
201
|
# Check State
|
|
201
202
|
if print_state:
|
|
202
203
|
if await print_blockchain_state(node_client, config) is True:
|
chia/cmds/signer.py
CHANGED
|
@@ -3,26 +3,31 @@ from __future__ import annotations
|
|
|
3
3
|
import itertools
|
|
4
4
|
import os
|
|
5
5
|
import time
|
|
6
|
+
from collections.abc import Sequence
|
|
6
7
|
from dataclasses import replace
|
|
7
|
-
from functools import cached_property
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
from threading import Event, Thread
|
|
10
|
-
from typing import
|
|
10
|
+
from typing import TypeVar
|
|
11
11
|
|
|
12
12
|
import click
|
|
13
13
|
from chia_rs import AugSchemeMPL, G2Element
|
|
14
14
|
from hsms.util.byte_chunks import create_chunks_for_blob, optimal_chunk_size_for_max_chunk_size
|
|
15
15
|
from segno import QRCode, make_qr
|
|
16
16
|
|
|
17
|
-
from chia.cmds.cmd_classes import
|
|
18
|
-
from chia.cmds.
|
|
19
|
-
from chia.cmds.wallet import wallet_cmd
|
|
17
|
+
from chia.cmds.cmd_classes import chia_command, command_helper, option
|
|
18
|
+
from chia.cmds.cmd_helpers import NeedsWalletRPC, TransactionsIn, TransactionsOut
|
|
20
19
|
from chia.rpc.util import ALL_TRANSLATION_LAYERS
|
|
21
|
-
from chia.rpc.wallet_request_types import
|
|
20
|
+
from chia.rpc.wallet_request_types import (
|
|
21
|
+
ApplySignatures,
|
|
22
|
+
ExecuteSigningInstructions,
|
|
23
|
+
GatherSigningInfo,
|
|
24
|
+
PushTransactions,
|
|
25
|
+
)
|
|
22
26
|
from chia.util.streamable import Streamable
|
|
23
27
|
from chia.wallet.signer_protocol import SignedTransaction, SigningInstructions, SigningResponse, Spend
|
|
24
28
|
from chia.wallet.transaction_record import TransactionRecord
|
|
25
29
|
from chia.wallet.util.clvm_streamable import byte_deserialize_clvm_streamable, byte_serialize_clvm_streamable
|
|
30
|
+
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
|
|
26
31
|
from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
|
27
32
|
|
|
28
33
|
|
|
@@ -31,7 +36,7 @@ def _clear_screen() -> None:
|
|
|
31
36
|
os.system("cls" if os.name == "nt" else "clear")
|
|
32
37
|
|
|
33
38
|
|
|
34
|
-
@
|
|
39
|
+
@click.group("signer", help="Get information for an external signer")
|
|
35
40
|
def signer_cmd() -> None:
|
|
36
41
|
pass # pragma: no cover
|
|
37
42
|
|
|
@@ -55,7 +60,7 @@ class QrCodeDisplay:
|
|
|
55
60
|
show_default=True,
|
|
56
61
|
)
|
|
57
62
|
|
|
58
|
-
def _display_qr(self, index: int, max_index: int, code_list:
|
|
63
|
+
def _display_qr(self, index: int, max_index: int, code_list: list[QRCode], stop_event: Event) -> None:
|
|
59
64
|
while not stop_event.is_set():
|
|
60
65
|
for qr_code in itertools.cycle(code_list):
|
|
61
66
|
_clear_screen()
|
|
@@ -68,7 +73,7 @@ class QrCodeDisplay:
|
|
|
68
73
|
if stop_event.is_set():
|
|
69
74
|
return
|
|
70
75
|
|
|
71
|
-
def display_qr_codes(self, blobs:
|
|
76
|
+
def display_qr_codes(self, blobs: list[bytes]) -> None:
|
|
72
77
|
chunk_sizes = [optimal_chunk_size_for_max_chunk_size(len(blob), self.qr_density) for blob in blobs]
|
|
73
78
|
chunks = [create_chunks_for_blob(blob, chunk_size) for blob, chunk_size in zip(blobs, chunk_sizes)]
|
|
74
79
|
qr_codes = [[make_qr(chunk) for chunk in chks] for chks in chunks]
|
|
@@ -86,37 +91,6 @@ class QrCodeDisplay:
|
|
|
86
91
|
stop_event.clear()
|
|
87
92
|
|
|
88
93
|
|
|
89
|
-
@command_helper
|
|
90
|
-
class TransactionsIn:
|
|
91
|
-
transaction_file_in: str = option(
|
|
92
|
-
"--transaction-file-in",
|
|
93
|
-
"-i",
|
|
94
|
-
type=str,
|
|
95
|
-
help="Transaction file to use as input",
|
|
96
|
-
required=True,
|
|
97
|
-
)
|
|
98
|
-
|
|
99
|
-
@cached_property
|
|
100
|
-
def transaction_bundle(self) -> TransactionBundle:
|
|
101
|
-
with open(Path(self.transaction_file_in), "rb") as file:
|
|
102
|
-
return TransactionBundle.from_bytes(file.read())
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
@command_helper
|
|
106
|
-
class TransactionsOut:
|
|
107
|
-
transaction_file_out: str = option(
|
|
108
|
-
"--transaction-file-out",
|
|
109
|
-
"-o",
|
|
110
|
-
type=str,
|
|
111
|
-
help="Transaction filename to use as output",
|
|
112
|
-
required=True,
|
|
113
|
-
)
|
|
114
|
-
|
|
115
|
-
def handle_transaction_output(self, output: List[TransactionRecord]) -> None:
|
|
116
|
-
with open(Path(self.transaction_file_out), "wb") as file:
|
|
117
|
-
file.write(bytes(TransactionBundle(output)))
|
|
118
|
-
|
|
119
|
-
|
|
120
94
|
@command_helper
|
|
121
95
|
class _SPTranslation:
|
|
122
96
|
translation: str = option(
|
|
@@ -142,9 +116,9 @@ class SPIn(_SPTranslation):
|
|
|
142
116
|
required=True,
|
|
143
117
|
)
|
|
144
118
|
|
|
145
|
-
def read_sp_input(self, typ:
|
|
146
|
-
final_list:
|
|
147
|
-
for filename in self.signer_protocol_input:
|
|
119
|
+
def read_sp_input(self, typ: type[_T_ClvmStreamable]) -> list[_T_ClvmStreamable]:
|
|
120
|
+
final_list: list[_T_ClvmStreamable] = []
|
|
121
|
+
for filename in self.signer_protocol_input:
|
|
148
122
|
with open(Path(filename), "rb") as file:
|
|
149
123
|
final_list.append(
|
|
150
124
|
byte_deserialize_clvm_streamable(
|
|
@@ -176,7 +150,7 @@ class SPOut(QrCodeDisplay, _SPTranslation):
|
|
|
176
150
|
help="The file(s) to output to (if --output-format=file)",
|
|
177
151
|
)
|
|
178
152
|
|
|
179
|
-
def handle_clvm_output(self, outputs:
|
|
153
|
+
def handle_clvm_output(self, outputs: list[Streamable]) -> None:
|
|
180
154
|
translation_layer = ALL_TRANSLATION_LAYERS[self.translation] if self.translation != "none" else None
|
|
181
155
|
if self.output_format == "hex":
|
|
182
156
|
for output in outputs:
|
|
@@ -202,9 +176,10 @@ class SPOut(QrCodeDisplay, _SPTranslation):
|
|
|
202
176
|
|
|
203
177
|
|
|
204
178
|
@chia_command(
|
|
205
|
-
signer_cmd,
|
|
206
|
-
"gather_signing_info",
|
|
207
|
-
"
|
|
179
|
+
group=signer_cmd,
|
|
180
|
+
name="gather_signing_info",
|
|
181
|
+
short_help="gather signer information",
|
|
182
|
+
help="Gather the information from a transaction that a signer needs in order to create a signature",
|
|
208
183
|
)
|
|
209
184
|
class GatherSigningInfoCMD:
|
|
210
185
|
sp_out: SPOut
|
|
@@ -213,7 +188,7 @@ class GatherSigningInfoCMD:
|
|
|
213
188
|
|
|
214
189
|
async def run(self) -> None:
|
|
215
190
|
async with self.rpc_info.wallet_rpc() as wallet_rpc:
|
|
216
|
-
spends:
|
|
191
|
+
spends: list[Spend] = [
|
|
217
192
|
Spend.from_coin_spend(cs)
|
|
218
193
|
for tx in self.txs_in.transaction_bundle.txs
|
|
219
194
|
if tx.spend_bundle is not None
|
|
@@ -225,7 +200,12 @@ class GatherSigningInfoCMD:
|
|
|
225
200
|
self.sp_out.handle_clvm_output([signing_instructions])
|
|
226
201
|
|
|
227
202
|
|
|
228
|
-
@chia_command(
|
|
203
|
+
@chia_command(
|
|
204
|
+
group=signer_cmd,
|
|
205
|
+
name="apply_signatures",
|
|
206
|
+
short_help="apply signatures",
|
|
207
|
+
help="Apply a signer's signatures to a transaction bundle",
|
|
208
|
+
)
|
|
229
209
|
class ApplySignaturesCMD:
|
|
230
210
|
txs_out: TransactionsOut
|
|
231
211
|
sp_in: SPIn
|
|
@@ -234,19 +214,19 @@ class ApplySignaturesCMD:
|
|
|
234
214
|
|
|
235
215
|
async def run(self) -> None:
|
|
236
216
|
async with self.rpc_info.wallet_rpc() as wallet_rpc:
|
|
237
|
-
signing_responses:
|
|
238
|
-
spends:
|
|
217
|
+
signing_responses: list[SigningResponse] = self.sp_in.read_sp_input(SigningResponse)
|
|
218
|
+
spends: list[Spend] = [
|
|
239
219
|
Spend.from_coin_spend(cs)
|
|
240
220
|
for tx in self.txs_in.transaction_bundle.txs
|
|
241
221
|
if tx.spend_bundle is not None
|
|
242
222
|
for cs in tx.spend_bundle.coin_spends
|
|
243
223
|
]
|
|
244
|
-
signed_transactions:
|
|
224
|
+
signed_transactions: list[SignedTransaction] = (
|
|
245
225
|
await wallet_rpc.client.apply_signatures(
|
|
246
226
|
ApplySignatures(spends=spends, signing_responses=signing_responses)
|
|
247
227
|
)
|
|
248
228
|
).signed_transactions
|
|
249
|
-
signed_spends:
|
|
229
|
+
signed_spends: list[Spend] = [spend for tx in signed_transactions for spend in tx.transaction_info.spends]
|
|
250
230
|
final_signature: G2Element = G2Element()
|
|
251
231
|
for signature in [sig for tx in signed_transactions for sig in tx.signatures]:
|
|
252
232
|
if signature.type != "bls_12381_aug_scheme": # pragma: no cover
|
|
@@ -254,7 +234,7 @@ class ApplySignaturesCMD:
|
|
|
254
234
|
return
|
|
255
235
|
final_signature = AugSchemeMPL.aggregate([final_signature, G2Element.from_bytes(signature.signature)])
|
|
256
236
|
new_spend_bundle = WalletSpendBundle([spend.as_coin_spend() for spend in signed_spends], final_signature)
|
|
257
|
-
new_transactions:
|
|
237
|
+
new_transactions: list[TransactionRecord] = [
|
|
258
238
|
replace(
|
|
259
239
|
self.txs_in.transaction_bundle.txs[0], spend_bundle=new_spend_bundle, name=new_spend_bundle.name()
|
|
260
240
|
),
|
|
@@ -263,7 +243,12 @@ class ApplySignaturesCMD:
|
|
|
263
243
|
self.txs_out.handle_transaction_output(new_transactions)
|
|
264
244
|
|
|
265
245
|
|
|
266
|
-
@chia_command(
|
|
246
|
+
@chia_command(
|
|
247
|
+
group=signer_cmd,
|
|
248
|
+
name="execute_signing_instructions",
|
|
249
|
+
short_help="execute signing instructions",
|
|
250
|
+
help="Given some signing instructions, return signing responses",
|
|
251
|
+
)
|
|
267
252
|
class ExecuteSigningInstructionsCMD:
|
|
268
253
|
sp_out: SPOut
|
|
269
254
|
sp_in: SPIn
|
|
@@ -271,7 +256,7 @@ class ExecuteSigningInstructionsCMD:
|
|
|
271
256
|
|
|
272
257
|
async def run(self) -> None:
|
|
273
258
|
async with self.rpc_info.wallet_rpc() as wallet_rpc:
|
|
274
|
-
signing_instructions:
|
|
259
|
+
signing_instructions: list[SigningInstructions] = self.sp_in.read_sp_input(SigningInstructions)
|
|
275
260
|
self.sp_out.handle_clvm_output(
|
|
276
261
|
[
|
|
277
262
|
signing_response
|
|
@@ -285,14 +270,21 @@ class ExecuteSigningInstructionsCMD:
|
|
|
285
270
|
)
|
|
286
271
|
|
|
287
272
|
|
|
288
|
-
@chia_command(
|
|
273
|
+
@chia_command(
|
|
274
|
+
name="push_transactions",
|
|
275
|
+
short_help="push transaction bundle",
|
|
276
|
+
help="Push a transaction bundle to the wallet to send to the network",
|
|
277
|
+
)
|
|
289
278
|
class PushTransactionsCMD:
|
|
290
279
|
txs_in: TransactionsIn
|
|
291
280
|
rpc_info: NeedsWalletRPC
|
|
292
281
|
|
|
293
282
|
async def run(self) -> None:
|
|
294
283
|
async with self.rpc_info.wallet_rpc() as wallet_rpc:
|
|
295
|
-
|
|
284
|
+
# TODO: provide access to additional parameters instead of filling with the defaults constant
|
|
285
|
+
await wallet_rpc.client.push_transactions(
|
|
286
|
+
PushTransactions(transactions=self.txs_in.transaction_bundle.txs), DEFAULT_TX_CONFIG
|
|
287
|
+
)
|
|
296
288
|
|
|
297
289
|
|
|
298
290
|
# Uncomment this for testing of qr code display
|
chia/cmds/sim.py
CHANGED
|
@@ -7,6 +7,7 @@ from typing import Any, Optional
|
|
|
7
7
|
import click
|
|
8
8
|
|
|
9
9
|
from chia.cmds import options
|
|
10
|
+
from chia.cmds.cmd_classes import ChiaCliContext
|
|
10
11
|
from chia.cmds.sim_funcs import async_config_wizard, farm_blocks, print_status, revert_block_height, set_auto_farm
|
|
11
12
|
from chia.util.default_root import SIMULATOR_ROOT_PATH
|
|
12
13
|
|
|
@@ -34,10 +35,9 @@ from chia.util.default_root import SIMULATOR_ROOT_PATH
|
|
|
34
35
|
)
|
|
35
36
|
@click.pass_context
|
|
36
37
|
def sim_cmd(ctx: click.Context, rpc_port: Optional[int], root_path: str, simulator_name: str) -> None:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
ctx.obj["rpc_port"] = rpc_port
|
|
38
|
+
context = ChiaCliContext.set_default(ctx)
|
|
39
|
+
context.root_path = Path(root_path) / simulator_name
|
|
40
|
+
context.rpc_port = rpc_port
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
@sim_cmd.command("create", help="Guides you through the process of setting up a Chia Simulator")
|
|
@@ -73,13 +73,14 @@ def create_simulator_config(
|
|
|
73
73
|
docker_mode: bool,
|
|
74
74
|
no_bitfield: bool,
|
|
75
75
|
) -> None:
|
|
76
|
-
|
|
76
|
+
root_path = ChiaCliContext.set_default(ctx).root_path
|
|
77
|
+
print(f"Using this Directory: {root_path}\n")
|
|
77
78
|
if fingerprint and mnemonic:
|
|
78
79
|
print("You can't use both a fingerprint and a mnemonic. Please choose one.")
|
|
79
80
|
return None
|
|
80
81
|
asyncio.run(
|
|
81
82
|
async_config_wizard(
|
|
82
|
-
|
|
83
|
+
root_path,
|
|
83
84
|
fingerprint,
|
|
84
85
|
reward_address,
|
|
85
86
|
plot_directory,
|
|
@@ -132,10 +133,12 @@ def status_cmd(
|
|
|
132
133
|
include_rewards: bool,
|
|
133
134
|
show_addresses: bool,
|
|
134
135
|
) -> None:
|
|
136
|
+
context = ChiaCliContext.set_default(ctx)
|
|
137
|
+
|
|
135
138
|
asyncio.run(
|
|
136
139
|
print_status(
|
|
137
|
-
|
|
138
|
-
|
|
140
|
+
context.rpc_port,
|
|
141
|
+
context.root_path,
|
|
139
142
|
fingerprint,
|
|
140
143
|
show_key,
|
|
141
144
|
show_coins,
|
|
@@ -174,10 +177,13 @@ def revert_cmd(
|
|
|
174
177
|
if reset and blocks != 1:
|
|
175
178
|
print("\nBlocks, '-b' must not be set if all blocks are selected by reset, '-r'. Exiting.\n")
|
|
176
179
|
return
|
|
180
|
+
|
|
181
|
+
context = ChiaCliContext.set_default(ctx)
|
|
182
|
+
|
|
177
183
|
asyncio.run(
|
|
178
184
|
revert_block_height(
|
|
179
|
-
|
|
180
|
-
|
|
185
|
+
context.rpc_port,
|
|
186
|
+
context.root_path,
|
|
181
187
|
blocks,
|
|
182
188
|
new_blocks,
|
|
183
189
|
reset,
|
|
@@ -192,10 +198,11 @@ def revert_cmd(
|
|
|
192
198
|
@click.option("-a", "--target-address", type=str, default="", help="Block reward address")
|
|
193
199
|
@click.pass_context
|
|
194
200
|
def farm_cmd(ctx: click.Context, blocks: int, non_transaction: bool, target_address: str) -> None:
|
|
201
|
+
context = ChiaCliContext.set_default(ctx)
|
|
195
202
|
asyncio.run(
|
|
196
203
|
farm_blocks(
|
|
197
|
-
|
|
198
|
-
|
|
204
|
+
context.rpc_port,
|
|
205
|
+
context.root_path,
|
|
199
206
|
blocks,
|
|
200
207
|
not non_transaction,
|
|
201
208
|
target_address,
|
|
@@ -208,10 +215,11 @@ def farm_cmd(ctx: click.Context, blocks: int, non_transaction: bool, target_addr
|
|
|
208
215
|
@click.pass_context
|
|
209
216
|
def autofarm_cmd(ctx: click.Context, set_autofarm: str) -> None:
|
|
210
217
|
autofarm = bool(set_autofarm == "on")
|
|
218
|
+
context = ChiaCliContext.set_default(ctx)
|
|
211
219
|
asyncio.run(
|
|
212
220
|
set_auto_farm(
|
|
213
|
-
|
|
214
|
-
|
|
221
|
+
context.rpc_port,
|
|
222
|
+
context.root_path,
|
|
215
223
|
autofarm,
|
|
216
224
|
)
|
|
217
225
|
)
|
chia/cmds/sim_funcs.py
CHANGED
|
@@ -5,7 +5,7 @@ import os
|
|
|
5
5
|
import sys
|
|
6
6
|
from pathlib import Path, PureWindowsPath
|
|
7
7
|
from random import randint
|
|
8
|
-
from typing import Any,
|
|
8
|
+
from typing import Any, Optional
|
|
9
9
|
|
|
10
10
|
from aiohttp import ClientConnectorError
|
|
11
11
|
from chia_rs import PrivateKey
|
|
@@ -47,7 +47,7 @@ def create_chia_directory(
|
|
|
47
47
|
plot_directory: Optional[str],
|
|
48
48
|
auto_farm: Optional[bool],
|
|
49
49
|
docker_mode: bool,
|
|
50
|
-
) ->
|
|
50
|
+
) -> dict[str, Any]:
|
|
51
51
|
"""
|
|
52
52
|
This function creates a new chia directory and returns a heavily modified config,
|
|
53
53
|
suitable for use in the simulator.
|
|
@@ -57,7 +57,7 @@ def create_chia_directory(
|
|
|
57
57
|
if not chia_root.is_dir() or not Path(chia_root / "config" / "config.yaml").exists():
|
|
58
58
|
# create chia directories & load config
|
|
59
59
|
chia_init(chia_root, testnet=True, fix_ssl_permissions=True)
|
|
60
|
-
config:
|
|
60
|
+
config: dict[str, Any] = load_config(chia_root, "config.yaml")
|
|
61
61
|
# apply standard block-tools config.
|
|
62
62
|
config["full_node"]["send_uncompact_interval"] = 0
|
|
63
63
|
config["full_node"]["target_uncompact_proofs"] = 30
|
|
@@ -243,7 +243,7 @@ def select_fingerprint(
|
|
|
243
243
|
return fingerprint
|
|
244
244
|
|
|
245
245
|
|
|
246
|
-
async def generate_plots(config:
|
|
246
|
+
async def generate_plots(config: dict[str, Any], root_path: Path, fingerprint: int, bitfield: bool) -> None:
|
|
247
247
|
"""
|
|
248
248
|
Pre-Generate plots for the new simulator instance.
|
|
249
249
|
"""
|
|
@@ -345,14 +345,14 @@ def print_coin_record(
|
|
|
345
345
|
|
|
346
346
|
|
|
347
347
|
async def print_coin_records(
|
|
348
|
-
config:
|
|
348
|
+
config: dict[str, Any],
|
|
349
349
|
node_client: SimulatorFullNodeRpcClient,
|
|
350
350
|
include_reward_coins: bool,
|
|
351
351
|
include_spent: bool = False,
|
|
352
352
|
) -> None:
|
|
353
353
|
import sys
|
|
354
354
|
|
|
355
|
-
coin_records:
|
|
355
|
+
coin_records: list[CoinRecord] = await node_client.get_all_coins(include_spent)
|
|
356
356
|
coin_records = [coin_record for coin_record in coin_records if not coin_record.coinbase or include_reward_coins]
|
|
357
357
|
address_prefix = config["network_overrides"]["config"][config["selected_network"]]["address_prefix"]
|
|
358
358
|
name = "mojo"
|
|
@@ -382,7 +382,7 @@ async def print_coin_records(
|
|
|
382
382
|
break
|
|
383
383
|
|
|
384
384
|
|
|
385
|
-
async def print_wallets(config:
|
|
385
|
+
async def print_wallets(config: dict[str, Any], node_client: SimulatorFullNodeRpcClient) -> None:
|
|
386
386
|
ph_and_amount = await node_client.get_all_puzzle_hashes()
|
|
387
387
|
address_prefix = config["network_overrides"]["config"][config["selected_network"]]["address_prefix"]
|
|
388
388
|
name = "mojo"
|
|
@@ -407,7 +407,7 @@ async def print_status(
|
|
|
407
407
|
from chia.cmds.show_funcs import print_blockchain_state
|
|
408
408
|
from chia.cmds.units import units
|
|
409
409
|
|
|
410
|
-
async with get_any_service_client(SimulatorFullNodeRpcClient,
|
|
410
|
+
async with get_any_service_client(SimulatorFullNodeRpcClient, root_path, rpc_port) as (node_client, config):
|
|
411
411
|
# Display keychain info
|
|
412
412
|
if show_key:
|
|
413
413
|
if fingerprint is None:
|
|
@@ -451,7 +451,7 @@ async def revert_block_height(
|
|
|
451
451
|
"""
|
|
452
452
|
This function allows users to easily revert the chain to a previous state or perform a reorg.
|
|
453
453
|
"""
|
|
454
|
-
async with get_any_service_client(SimulatorFullNodeRpcClient,
|
|
454
|
+
async with get_any_service_client(SimulatorFullNodeRpcClient, root_path, rpc_port) as (node_client, _):
|
|
455
455
|
if use_revert_blocks:
|
|
456
456
|
if num_new_blocks != 1:
|
|
457
457
|
print(f"Ignoring num_new_blocks: {num_new_blocks}, because we are not performing a reorg.")
|
|
@@ -479,7 +479,7 @@ async def farm_blocks(
|
|
|
479
479
|
"""
|
|
480
480
|
This function is used to generate new blocks.
|
|
481
481
|
"""
|
|
482
|
-
async with get_any_service_client(SimulatorFullNodeRpcClient,
|
|
482
|
+
async with get_any_service_client(SimulatorFullNodeRpcClient, root_path, rpc_port) as (node_client, config):
|
|
483
483
|
if target_address == "":
|
|
484
484
|
target_address = config["simulator"]["farming_address"]
|
|
485
485
|
if target_address is None:
|
|
@@ -500,7 +500,7 @@ async def set_auto_farm(rpc_port: Optional[int], root_path: Path, set_autofarm:
|
|
|
500
500
|
"""
|
|
501
501
|
This function can be used to enable or disable Auto Farming.
|
|
502
502
|
"""
|
|
503
|
-
async with get_any_service_client(SimulatorFullNodeRpcClient,
|
|
503
|
+
async with get_any_service_client(SimulatorFullNodeRpcClient, root_path, rpc_port) as (node_client, _):
|
|
504
504
|
current = await node_client.get_auto_farming()
|
|
505
505
|
if current == set_autofarm:
|
|
506
506
|
print(f"Auto farming is already {'on' if set_autofarm else 'off'}")
|