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/rpc/full_node_rpc_api.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from datetime import datetime, timezone
|
|
4
|
-
from typing import Any,
|
|
4
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
|
|
5
5
|
|
|
6
6
|
from chia.consensus.block_record import BlockRecord
|
|
7
7
|
from chia.consensus.blockchain import Blockchain, BlockchainMutexPriority
|
|
@@ -33,7 +33,7 @@ from chia.util.math import make_monotonically_decreasing
|
|
|
33
33
|
from chia.util.ws_message import WsRpcMessage, create_payload_dict
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
def coin_record_dict_backwards_compat(coin_record:
|
|
36
|
+
def coin_record_dict_backwards_compat(coin_record: dict[str, Any]) -> dict[str, bool]:
|
|
37
37
|
coin_record["spent"] = coin_record["spent_block_index"] > 0
|
|
38
38
|
return coin_record
|
|
39
39
|
|
|
@@ -82,12 +82,17 @@ async def get_average_block_time(
|
|
|
82
82
|
|
|
83
83
|
|
|
84
84
|
class FullNodeRpcApi:
|
|
85
|
+
if TYPE_CHECKING:
|
|
86
|
+
from chia.rpc.rpc_server import RpcApiProtocol
|
|
87
|
+
|
|
88
|
+
_protocol_check: ClassVar[RpcApiProtocol] = cast("FullNodeRpcApi", None)
|
|
89
|
+
|
|
85
90
|
def __init__(self, service: FullNode) -> None:
|
|
86
91
|
self.service = service
|
|
87
92
|
self.service_name = "chia_full_node"
|
|
88
|
-
self.cached_blockchain_state: Optional[
|
|
93
|
+
self.cached_blockchain_state: Optional[dict[str, Any]] = None
|
|
89
94
|
|
|
90
|
-
def get_routes(self) ->
|
|
95
|
+
def get_routes(self) -> dict[str, Endpoint]:
|
|
91
96
|
return {
|
|
92
97
|
# Blockchain
|
|
93
98
|
"/get_blockchain_state": self.get_blockchain_state,
|
|
@@ -122,12 +127,12 @@ class FullNodeRpcApi:
|
|
|
122
127
|
"/get_fee_estimate": self.get_fee_estimate,
|
|
123
128
|
}
|
|
124
129
|
|
|
125
|
-
async def _state_changed(self, change: str, change_data: Optional[
|
|
130
|
+
async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]] = None) -> list[WsRpcMessage]:
|
|
126
131
|
if change_data is None:
|
|
127
132
|
change_data = {}
|
|
128
133
|
|
|
129
134
|
payloads = []
|
|
130
|
-
if change
|
|
135
|
+
if change in {"new_peak", "sync_mode"}:
|
|
131
136
|
data = await self.get_blockchain_state({})
|
|
132
137
|
assert data is not None
|
|
133
138
|
payloads.append(
|
|
@@ -147,7 +152,7 @@ class FullNodeRpcApi:
|
|
|
147
152
|
)
|
|
148
153
|
)
|
|
149
154
|
|
|
150
|
-
if change in
|
|
155
|
+
if change in {"block", "signage_point"}:
|
|
151
156
|
payloads.append(create_payload_dict(change, change_data, self.service_name, "metrics"))
|
|
152
157
|
|
|
153
158
|
if change == "unfinished_block":
|
|
@@ -155,7 +160,7 @@ class FullNodeRpcApi:
|
|
|
155
160
|
|
|
156
161
|
return payloads
|
|
157
162
|
|
|
158
|
-
async def get_blockchain_state(self, _:
|
|
163
|
+
async def get_blockchain_state(self, _: dict[str, Any]) -> EndpointResult:
|
|
159
164
|
"""
|
|
160
165
|
Returns a summary of the node's view of the blockchain.
|
|
161
166
|
"""
|
|
@@ -278,7 +283,7 @@ class FullNodeRpcApi:
|
|
|
278
283
|
self.cached_blockchain_state = dict(response["blockchain_state"])
|
|
279
284
|
return response
|
|
280
285
|
|
|
281
|
-
async def get_recent_signage_point_or_eos(self, request:
|
|
286
|
+
async def get_recent_signage_point_or_eos(self, request: dict[str, Any]) -> EndpointResult:
|
|
282
287
|
if "sp_hash" not in request:
|
|
283
288
|
challenge_hash: bytes32 = bytes32.from_hexstr(request["challenge_hash"])
|
|
284
289
|
# This is the case of getting an end of slot
|
|
@@ -369,7 +374,7 @@ class FullNodeRpcApi:
|
|
|
369
374
|
|
|
370
375
|
return {"signage_point": sp, "time_received": time_received, "reverted": True}
|
|
371
376
|
|
|
372
|
-
async def get_block(self, request:
|
|
377
|
+
async def get_block(self, request: dict[str, Any]) -> EndpointResult:
|
|
373
378
|
if "header_hash" not in request:
|
|
374
379
|
raise ValueError("No header_hash in request")
|
|
375
380
|
header_hash = bytes32.from_hexstr(request["header_hash"])
|
|
@@ -380,7 +385,7 @@ class FullNodeRpcApi:
|
|
|
380
385
|
|
|
381
386
|
return {"block": block}
|
|
382
387
|
|
|
383
|
-
async def get_blocks(self, request:
|
|
388
|
+
async def get_blocks(self, request: dict[str, Any]) -> EndpointResult:
|
|
384
389
|
if "start" not in request:
|
|
385
390
|
raise ValueError("No start in request")
|
|
386
391
|
if "end" not in request:
|
|
@@ -397,7 +402,7 @@ class FullNodeRpcApi:
|
|
|
397
402
|
block_range = []
|
|
398
403
|
for a in range(start, end):
|
|
399
404
|
block_range.append(uint32(a))
|
|
400
|
-
blocks:
|
|
405
|
+
blocks: list[FullBlock] = await self.service.block_store.get_full_blocks_at(block_range)
|
|
401
406
|
json_blocks = []
|
|
402
407
|
for block in blocks:
|
|
403
408
|
hh: bytes32 = block.header_hash
|
|
@@ -410,7 +415,7 @@ class FullNodeRpcApi:
|
|
|
410
415
|
json_blocks.append(json)
|
|
411
416
|
return {"blocks": json_blocks}
|
|
412
417
|
|
|
413
|
-
async def get_block_count_metrics(self, _:
|
|
418
|
+
async def get_block_count_metrics(self, _: dict[str, Any]) -> EndpointResult:
|
|
414
419
|
compact_blocks = 0
|
|
415
420
|
uncompact_blocks = 0
|
|
416
421
|
with log_exceptions(self.service.log, consume=True):
|
|
@@ -430,7 +435,7 @@ class FullNodeRpcApi:
|
|
|
430
435
|
}
|
|
431
436
|
}
|
|
432
437
|
|
|
433
|
-
async def get_block_records(self, request:
|
|
438
|
+
async def get_block_records(self, request: dict[str, Any]) -> EndpointResult:
|
|
434
439
|
if "start" not in request:
|
|
435
440
|
raise ValueError("No start in request")
|
|
436
441
|
if "end" not in request:
|
|
@@ -460,7 +465,7 @@ class FullNodeRpcApi:
|
|
|
460
465
|
records.append(record)
|
|
461
466
|
return {"block_records": records}
|
|
462
467
|
|
|
463
|
-
async def get_block_spends(self, request:
|
|
468
|
+
async def get_block_spends(self, request: dict[str, Any]) -> EndpointResult:
|
|
464
469
|
if "header_hash" not in request:
|
|
465
470
|
raise ValueError("No header_hash in request")
|
|
466
471
|
header_hash = bytes32.from_hexstr(request["header_hash"])
|
|
@@ -468,7 +473,7 @@ class FullNodeRpcApi:
|
|
|
468
473
|
if full_block is None:
|
|
469
474
|
raise ValueError(f"Block {header_hash.hex()} not found")
|
|
470
475
|
|
|
471
|
-
spends:
|
|
476
|
+
spends: list[CoinSpend] = []
|
|
472
477
|
block_generator = await get_block_generator(self.service.blockchain.lookup_block_generators, full_block)
|
|
473
478
|
if block_generator is None: # if block is not a transaction block.
|
|
474
479
|
return {"block_spends": spends}
|
|
@@ -477,7 +482,7 @@ class FullNodeRpcApi:
|
|
|
477
482
|
|
|
478
483
|
return {"block_spends": spends}
|
|
479
484
|
|
|
480
|
-
async def get_block_spends_with_conditions(self, request:
|
|
485
|
+
async def get_block_spends_with_conditions(self, request: dict[str, Any]) -> EndpointResult:
|
|
481
486
|
if "header_hash" not in request:
|
|
482
487
|
raise ValueError("No header_hash in request")
|
|
483
488
|
header_hash = bytes32.from_hexstr(request["header_hash"])
|
|
@@ -506,7 +511,7 @@ class FullNodeRpcApi:
|
|
|
506
511
|
]
|
|
507
512
|
}
|
|
508
513
|
|
|
509
|
-
async def get_block_record_by_height(self, request:
|
|
514
|
+
async def get_block_record_by_height(self, request: dict[str, Any]) -> EndpointResult:
|
|
510
515
|
if "height" not in request:
|
|
511
516
|
raise ValueError("No height in request")
|
|
512
517
|
height = request["height"]
|
|
@@ -525,7 +530,7 @@ class FullNodeRpcApi:
|
|
|
525
530
|
raise ValueError(f"Block {header_hash} does not exist")
|
|
526
531
|
return {"block_record": record}
|
|
527
532
|
|
|
528
|
-
async def get_block_record(self, request:
|
|
533
|
+
async def get_block_record(self, request: dict[str, Any]) -> EndpointResult:
|
|
529
534
|
if "header_hash" not in request:
|
|
530
535
|
raise ValueError("header_hash not in request")
|
|
531
536
|
header_hash_str = request["header_hash"]
|
|
@@ -539,12 +544,12 @@ class FullNodeRpcApi:
|
|
|
539
544
|
|
|
540
545
|
return {"block_record": record}
|
|
541
546
|
|
|
542
|
-
async def get_unfinished_block_headers(self, _request:
|
|
547
|
+
async def get_unfinished_block_headers(self, _request: dict[str, Any]) -> EndpointResult:
|
|
543
548
|
peak: Optional[BlockRecord] = self.service.blockchain.get_peak()
|
|
544
549
|
if peak is None:
|
|
545
550
|
return {"headers": []}
|
|
546
551
|
|
|
547
|
-
response_headers:
|
|
552
|
+
response_headers: list[UnfinishedHeaderBlock] = []
|
|
548
553
|
for block in self.service.full_node_store.get_unfinished_blocks(peak.height):
|
|
549
554
|
unfinished_header_block = UnfinishedHeaderBlock(
|
|
550
555
|
block.finished_sub_slots,
|
|
@@ -558,7 +563,7 @@ class FullNodeRpcApi:
|
|
|
558
563
|
response_headers.append(unfinished_header_block)
|
|
559
564
|
return {"headers": response_headers}
|
|
560
565
|
|
|
561
|
-
async def get_network_space(self, request:
|
|
566
|
+
async def get_network_space(self, request: dict[str, Any]) -> EndpointResult:
|
|
562
567
|
"""
|
|
563
568
|
Retrieves an estimate of total space validating the chain
|
|
564
569
|
between two block header hashes.
|
|
@@ -599,13 +604,13 @@ class FullNodeRpcApi:
|
|
|
599
604
|
)
|
|
600
605
|
return {"space": uint128(int(network_space_bytes_estimate))}
|
|
601
606
|
|
|
602
|
-
async def get_coin_records_by_puzzle_hash(self, request:
|
|
607
|
+
async def get_coin_records_by_puzzle_hash(self, request: dict[str, Any]) -> EndpointResult:
|
|
603
608
|
"""
|
|
604
609
|
Retrieves the coins for a given puzzlehash, by default returns unspent coins.
|
|
605
610
|
"""
|
|
606
611
|
if "puzzle_hash" not in request:
|
|
607
612
|
raise ValueError("Puzzle hash not in request")
|
|
608
|
-
kwargs:
|
|
613
|
+
kwargs: dict[str, Any] = {"include_spent_coins": False, "puzzle_hash": hexstr_to_bytes(request["puzzle_hash"])}
|
|
609
614
|
if "start_height" in request:
|
|
610
615
|
kwargs["start_height"] = uint32(request["start_height"])
|
|
611
616
|
if "end_height" in request:
|
|
@@ -618,13 +623,13 @@ class FullNodeRpcApi:
|
|
|
618
623
|
|
|
619
624
|
return {"coin_records": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in coin_records]}
|
|
620
625
|
|
|
621
|
-
async def get_coin_records_by_puzzle_hashes(self, request:
|
|
626
|
+
async def get_coin_records_by_puzzle_hashes(self, request: dict[str, Any]) -> EndpointResult:
|
|
622
627
|
"""
|
|
623
628
|
Retrieves the coins for a given puzzlehash, by default returns unspent coins.
|
|
624
629
|
"""
|
|
625
630
|
if "puzzle_hashes" not in request:
|
|
626
631
|
raise ValueError("Puzzle hashes not in request")
|
|
627
|
-
kwargs:
|
|
632
|
+
kwargs: dict[str, Any] = {
|
|
628
633
|
"include_spent_coins": False,
|
|
629
634
|
"puzzle_hashes": [hexstr_to_bytes(ph) for ph in request["puzzle_hashes"]],
|
|
630
635
|
}
|
|
@@ -640,7 +645,7 @@ class FullNodeRpcApi:
|
|
|
640
645
|
|
|
641
646
|
return {"coin_records": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in coin_records]}
|
|
642
647
|
|
|
643
|
-
async def get_coin_record_by_name(self, request:
|
|
648
|
+
async def get_coin_record_by_name(self, request: dict[str, Any]) -> EndpointResult:
|
|
644
649
|
"""
|
|
645
650
|
Retrieves a coin record by its name.
|
|
646
651
|
"""
|
|
@@ -654,13 +659,13 @@ class FullNodeRpcApi:
|
|
|
654
659
|
|
|
655
660
|
return {"coin_record": coin_record_dict_backwards_compat(coin_record.to_json_dict())}
|
|
656
661
|
|
|
657
|
-
async def get_coin_records_by_names(self, request:
|
|
662
|
+
async def get_coin_records_by_names(self, request: dict[str, Any]) -> EndpointResult:
|
|
658
663
|
"""
|
|
659
664
|
Retrieves the coins for given coin IDs, by default returns unspent coins.
|
|
660
665
|
"""
|
|
661
666
|
if "names" not in request:
|
|
662
667
|
raise ValueError("Names not in request")
|
|
663
|
-
kwargs:
|
|
668
|
+
kwargs: dict[str, Any] = {
|
|
664
669
|
"include_spent_coins": False,
|
|
665
670
|
"names": [hexstr_to_bytes(name) for name in request["names"]],
|
|
666
671
|
}
|
|
@@ -676,13 +681,13 @@ class FullNodeRpcApi:
|
|
|
676
681
|
|
|
677
682
|
return {"coin_records": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in coin_records]}
|
|
678
683
|
|
|
679
|
-
async def get_coin_records_by_parent_ids(self, request:
|
|
684
|
+
async def get_coin_records_by_parent_ids(self, request: dict[str, Any]) -> EndpointResult:
|
|
680
685
|
"""
|
|
681
686
|
Retrieves the coins for given parent coin IDs, by default returns unspent coins.
|
|
682
687
|
"""
|
|
683
688
|
if "parent_ids" not in request:
|
|
684
689
|
raise ValueError("Parent IDs not in request")
|
|
685
|
-
kwargs:
|
|
690
|
+
kwargs: dict[str, Any] = {
|
|
686
691
|
"include_spent_coins": False,
|
|
687
692
|
"parent_ids": [hexstr_to_bytes(ph) for ph in request["parent_ids"]],
|
|
688
693
|
}
|
|
@@ -698,7 +703,7 @@ class FullNodeRpcApi:
|
|
|
698
703
|
|
|
699
704
|
return {"coin_records": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in coin_records]}
|
|
700
705
|
|
|
701
|
-
async def get_coin_records_by_hint(self, request:
|
|
706
|
+
async def get_coin_records_by_hint(self, request: dict[str, Any]) -> EndpointResult:
|
|
702
707
|
"""
|
|
703
708
|
Retrieves coins by hint, by default returns unspent coins.
|
|
704
709
|
"""
|
|
@@ -708,9 +713,9 @@ class FullNodeRpcApi:
|
|
|
708
713
|
if self.service.hint_store is None:
|
|
709
714
|
return {"coin_records": []}
|
|
710
715
|
|
|
711
|
-
names:
|
|
716
|
+
names: list[bytes32] = await self.service.hint_store.get_coin_ids(bytes32.from_hexstr(request["hint"]))
|
|
712
717
|
|
|
713
|
-
kwargs:
|
|
718
|
+
kwargs: dict[str, Any] = {
|
|
714
719
|
"include_spent_coins": False,
|
|
715
720
|
"names": names,
|
|
716
721
|
}
|
|
@@ -727,7 +732,7 @@ class FullNodeRpcApi:
|
|
|
727
732
|
|
|
728
733
|
return {"coin_records": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in coin_records]}
|
|
729
734
|
|
|
730
|
-
async def push_tx(self, request:
|
|
735
|
+
async def push_tx(self, request: dict[str, Any]) -> EndpointResult:
|
|
731
736
|
if "spend_bundle" not in request:
|
|
732
737
|
raise ValueError("Spend bundle not in request")
|
|
733
738
|
|
|
@@ -752,7 +757,7 @@ class FullNodeRpcApi:
|
|
|
752
757
|
"status": status.name,
|
|
753
758
|
}
|
|
754
759
|
|
|
755
|
-
async def get_puzzle_and_solution(self, request:
|
|
760
|
+
async def get_puzzle_and_solution(self, request: dict[str, Any]) -> EndpointResult:
|
|
756
761
|
coin_name: bytes32 = bytes32.from_hexstr(request["coin_id"])
|
|
757
762
|
height = request["height"]
|
|
758
763
|
coin_record = await self.service.coin_store.get_coin_record(coin_name)
|
|
@@ -776,7 +781,7 @@ class FullNodeRpcApi:
|
|
|
776
781
|
)
|
|
777
782
|
return {"coin_solution": CoinSpend(coin_record.coin, spend_info.puzzle, spend_info.solution)}
|
|
778
783
|
|
|
779
|
-
async def get_additions_and_removals(self, request:
|
|
784
|
+
async def get_additions_and_removals(self, request: dict[str, Any]) -> EndpointResult:
|
|
780
785
|
if "header_hash" not in request:
|
|
781
786
|
raise ValueError("No header_hash in request")
|
|
782
787
|
header_hash = bytes32.from_hexstr(request["header_hash"])
|
|
@@ -788,28 +793,28 @@ class FullNodeRpcApi:
|
|
|
788
793
|
async with self.service.blockchain.priority_mutex.acquire(priority=BlockchainMutexPriority.low):
|
|
789
794
|
if self.service.blockchain.height_to_hash(block.height) != header_hash:
|
|
790
795
|
raise ValueError(f"Block at {header_hash.hex()} is no longer in the blockchain (it's in a fork)")
|
|
791
|
-
additions:
|
|
792
|
-
removals:
|
|
796
|
+
additions: list[CoinRecord] = await self.service.coin_store.get_coins_added_at_height(block.height)
|
|
797
|
+
removals: list[CoinRecord] = await self.service.coin_store.get_coins_removed_at_height(block.height)
|
|
793
798
|
|
|
794
799
|
return {
|
|
795
800
|
"additions": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in additions],
|
|
796
801
|
"removals": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in removals],
|
|
797
802
|
}
|
|
798
803
|
|
|
799
|
-
async def get_aggsig_additional_data(self, _:
|
|
804
|
+
async def get_aggsig_additional_data(self, _: dict[str, Any]) -> EndpointResult:
|
|
800
805
|
return {"additional_data": self.service.constants.AGG_SIG_ME_ADDITIONAL_DATA.hex()}
|
|
801
806
|
|
|
802
|
-
async def get_all_mempool_tx_ids(self, _:
|
|
807
|
+
async def get_all_mempool_tx_ids(self, _: dict[str, Any]) -> EndpointResult:
|
|
803
808
|
ids = list(self.service.mempool_manager.mempool.all_item_ids())
|
|
804
809
|
return {"tx_ids": ids}
|
|
805
810
|
|
|
806
|
-
async def get_all_mempool_items(self, _:
|
|
811
|
+
async def get_all_mempool_items(self, _: dict[str, Any]) -> EndpointResult:
|
|
807
812
|
spends = {}
|
|
808
813
|
for item in self.service.mempool_manager.mempool.all_items():
|
|
809
814
|
spends[item.name.hex()] = item.to_json_dict()
|
|
810
815
|
return {"mempool_items": spends}
|
|
811
816
|
|
|
812
|
-
async def get_mempool_item_by_tx_id(self, request:
|
|
817
|
+
async def get_mempool_item_by_tx_id(self, request: dict[str, Any]) -> EndpointResult:
|
|
813
818
|
if "tx_id" not in request:
|
|
814
819
|
raise ValueError("No tx_id in request")
|
|
815
820
|
include_pending: bool = request.get("include_pending", False)
|
|
@@ -821,7 +826,7 @@ class FullNodeRpcApi:
|
|
|
821
826
|
|
|
822
827
|
return {"mempool_item": item.to_json_dict()}
|
|
823
828
|
|
|
824
|
-
async def get_mempool_items_by_coin_name(self, request:
|
|
829
|
+
async def get_mempool_items_by_coin_name(self, request: dict[str, Any]) -> EndpointResult:
|
|
825
830
|
if "coin_name" not in request:
|
|
826
831
|
raise ValueError("No coin_name in request")
|
|
827
832
|
|
|
@@ -849,7 +854,7 @@ class FullNodeRpcApi:
|
|
|
849
854
|
}
|
|
850
855
|
return uint64(tx_cost_estimates[name])
|
|
851
856
|
|
|
852
|
-
async def _validate_fee_estimate_cost(self, request:
|
|
857
|
+
async def _validate_fee_estimate_cost(self, request: dict[str, Any]) -> uint64:
|
|
853
858
|
c = 0
|
|
854
859
|
ns = ["spend_bundle", "cost", "spend_type"]
|
|
855
860
|
for n in ns:
|
|
@@ -869,17 +874,17 @@ class FullNodeRpcApi:
|
|
|
869
874
|
cost *= request.get("spend_count", 1)
|
|
870
875
|
return uint64(cost)
|
|
871
876
|
|
|
872
|
-
def _validate_target_times(self, request:
|
|
877
|
+
def _validate_target_times(self, request: dict[str, Any]) -> None:
|
|
873
878
|
if "target_times" not in request:
|
|
874
879
|
raise ValueError("Request must contain 'target_times' array")
|
|
875
880
|
if any(t < 0 for t in request["target_times"]):
|
|
876
881
|
raise ValueError("'target_times' array members must be non-negative")
|
|
877
882
|
|
|
878
|
-
async def get_fee_estimate(self, request:
|
|
883
|
+
async def get_fee_estimate(self, request: dict[str, Any]) -> dict[str, Any]:
|
|
879
884
|
self._validate_target_times(request)
|
|
880
885
|
spend_cost = await self._validate_fee_estimate_cost(request)
|
|
881
886
|
|
|
882
|
-
target_times:
|
|
887
|
+
target_times: list[int] = request["target_times"]
|
|
883
888
|
estimator: FeeEstimatorInterface = self.service.mempool_manager.mempool.fee_estimator
|
|
884
889
|
target_times.sort()
|
|
885
890
|
estimates = [
|
chia/rpc/full_node_rpc_client.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Any,
|
|
3
|
+
from typing import Any, Optional, cast
|
|
4
4
|
|
|
5
5
|
from chia.consensus.block_record import BlockRecord
|
|
6
6
|
from chia.full_node.signage_point import SignagePoint
|
|
@@ -15,7 +15,7 @@ from chia.types.unfinished_header_block import UnfinishedHeaderBlock
|
|
|
15
15
|
from chia.util.ints import uint32
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
def coin_record_dict_backwards_compat(coin_record:
|
|
18
|
+
def coin_record_dict_backwards_compat(coin_record: dict[str, Any]) -> dict[str, Any]:
|
|
19
19
|
del coin_record["spent"]
|
|
20
20
|
return coin_record
|
|
21
21
|
|
|
@@ -29,11 +29,11 @@ class FullNodeRpcClient(RpcClient):
|
|
|
29
29
|
to the full node.
|
|
30
30
|
"""
|
|
31
31
|
|
|
32
|
-
async def get_blockchain_state(self) ->
|
|
32
|
+
async def get_blockchain_state(self) -> dict[str, Any]:
|
|
33
33
|
response = await self.fetch("get_blockchain_state", {})
|
|
34
34
|
if response["blockchain_state"]["peak"] is not None:
|
|
35
35
|
response["blockchain_state"]["peak"] = BlockRecord.from_json_dict(response["blockchain_state"]["peak"])
|
|
36
|
-
return cast(
|
|
36
|
+
return cast(dict[str, Any], response["blockchain_state"])
|
|
37
37
|
|
|
38
38
|
async def get_block(self, header_hash: bytes32) -> Optional[FullBlock]:
|
|
39
39
|
try:
|
|
@@ -42,7 +42,7 @@ class FullNodeRpcClient(RpcClient):
|
|
|
42
42
|
return None
|
|
43
43
|
return FullBlock.from_json_dict(response["block"])
|
|
44
44
|
|
|
45
|
-
async def get_blocks(self, start: int, end: int, exclude_reorged: bool = False) ->
|
|
45
|
+
async def get_blocks(self, start: int, end: int, exclude_reorged: bool = False) -> list[FullBlock]:
|
|
46
46
|
response = await self.fetch(
|
|
47
47
|
"get_blocks", {"start": start, "end": end, "exclude_header_hash": True, "exclude_reorged": exclude_reorged}
|
|
48
48
|
)
|
|
@@ -64,11 +64,11 @@ class FullNodeRpcClient(RpcClient):
|
|
|
64
64
|
return None
|
|
65
65
|
return BlockRecord.from_json_dict(response["block_record"])
|
|
66
66
|
|
|
67
|
-
async def get_unfinished_block_headers(self) ->
|
|
67
|
+
async def get_unfinished_block_headers(self) -> list[UnfinishedHeaderBlock]:
|
|
68
68
|
response = await self.fetch("get_unfinished_block_headers", {})
|
|
69
69
|
return [UnfinishedHeaderBlock.from_json_dict(r) for r in response["headers"]]
|
|
70
70
|
|
|
71
|
-
async def get_all_block(self, start: uint32, end: uint32) ->
|
|
71
|
+
async def get_all_block(self, start: uint32, end: uint32) -> list[FullBlock]:
|
|
72
72
|
response = await self.fetch("get_blocks", {"start": start, "end": end, "exclude_header_hash": True})
|
|
73
73
|
return [FullBlock.from_json_dict(r) for r in response["blocks"]]
|
|
74
74
|
|
|
@@ -93,11 +93,11 @@ class FullNodeRpcClient(RpcClient):
|
|
|
93
93
|
|
|
94
94
|
async def get_coin_records_by_names(
|
|
95
95
|
self,
|
|
96
|
-
names:
|
|
96
|
+
names: list[bytes32],
|
|
97
97
|
include_spent_coins: bool = True,
|
|
98
98
|
start_height: Optional[int] = None,
|
|
99
99
|
end_height: Optional[int] = None,
|
|
100
|
-
) ->
|
|
100
|
+
) -> list[CoinRecord]:
|
|
101
101
|
names_hex = [name.hex() for name in names]
|
|
102
102
|
d = {"names": names_hex, "include_spent_coins": include_spent_coins}
|
|
103
103
|
if start_height is not None:
|
|
@@ -114,7 +114,7 @@ class FullNodeRpcClient(RpcClient):
|
|
|
114
114
|
include_spent_coins: bool = True,
|
|
115
115
|
start_height: Optional[int] = None,
|
|
116
116
|
end_height: Optional[int] = None,
|
|
117
|
-
) ->
|
|
117
|
+
) -> list[CoinRecord]:
|
|
118
118
|
d = {"puzzle_hash": puzzle_hash.hex(), "include_spent_coins": include_spent_coins}
|
|
119
119
|
if start_height is not None:
|
|
120
120
|
d["start_height"] = start_height
|
|
@@ -126,11 +126,11 @@ class FullNodeRpcClient(RpcClient):
|
|
|
126
126
|
|
|
127
127
|
async def get_coin_records_by_puzzle_hashes(
|
|
128
128
|
self,
|
|
129
|
-
puzzle_hashes:
|
|
129
|
+
puzzle_hashes: list[bytes32],
|
|
130
130
|
include_spent_coins: bool = True,
|
|
131
131
|
start_height: Optional[int] = None,
|
|
132
132
|
end_height: Optional[int] = None,
|
|
133
|
-
) ->
|
|
133
|
+
) -> list[CoinRecord]:
|
|
134
134
|
puzzle_hashes_hex = [ph.hex() for ph in puzzle_hashes]
|
|
135
135
|
d = {"puzzle_hashes": puzzle_hashes_hex, "include_spent_coins": include_spent_coins}
|
|
136
136
|
if start_height is not None:
|
|
@@ -143,11 +143,11 @@ class FullNodeRpcClient(RpcClient):
|
|
|
143
143
|
|
|
144
144
|
async def get_coin_records_by_parent_ids(
|
|
145
145
|
self,
|
|
146
|
-
parent_ids:
|
|
146
|
+
parent_ids: list[bytes32],
|
|
147
147
|
include_spent_coins: bool = True,
|
|
148
148
|
start_height: Optional[int] = None,
|
|
149
149
|
end_height: Optional[int] = None,
|
|
150
|
-
) ->
|
|
150
|
+
) -> list[CoinRecord]:
|
|
151
151
|
parent_ids_hex = [pid.hex() for pid in parent_ids]
|
|
152
152
|
d = {"parent_ids": parent_ids_hex, "include_spent_coins": include_spent_coins}
|
|
153
153
|
if start_height is not None:
|
|
@@ -168,7 +168,7 @@ class FullNodeRpcClient(RpcClient):
|
|
|
168
168
|
include_spent_coins: bool = True,
|
|
169
169
|
start_height: Optional[int] = None,
|
|
170
170
|
end_height: Optional[int] = None,
|
|
171
|
-
) ->
|
|
171
|
+
) -> list[CoinRecord]:
|
|
172
172
|
d = {"hint": hint.hex(), "include_spent_coins": include_spent_coins}
|
|
173
173
|
if start_height is not None:
|
|
174
174
|
d["start_height"] = start_height
|
|
@@ -178,7 +178,7 @@ class FullNodeRpcClient(RpcClient):
|
|
|
178
178
|
response = await self.fetch("get_coin_records_by_hint", d)
|
|
179
179
|
return [CoinRecord.from_json_dict(coin_record_dict_backwards_compat(coin)) for coin in response["coin_records"]]
|
|
180
180
|
|
|
181
|
-
async def get_additions_and_removals(self, header_hash: bytes32) ->
|
|
181
|
+
async def get_additions_and_removals(self, header_hash: bytes32) -> tuple[list[CoinRecord], list[CoinRecord]]:
|
|
182
182
|
try:
|
|
183
183
|
response = await self.fetch("get_additions_and_removals", {"header_hash": header_hash.hex()})
|
|
184
184
|
except Exception:
|
|
@@ -191,7 +191,7 @@ class FullNodeRpcClient(RpcClient):
|
|
|
191
191
|
additions.append(CoinRecord.from_json_dict(coin_record_dict_backwards_compat(coin_record)))
|
|
192
192
|
return additions, removals
|
|
193
193
|
|
|
194
|
-
async def get_block_records(self, start: int, end: int) ->
|
|
194
|
+
async def get_block_records(self, start: int, end: int) -> list[dict[str, Any]]:
|
|
195
195
|
try:
|
|
196
196
|
response = await self.fetch("get_block_records", {"start": start, "end": end})
|
|
197
197
|
if response["block_records"] is None:
|
|
@@ -199,9 +199,9 @@ class FullNodeRpcClient(RpcClient):
|
|
|
199
199
|
except Exception:
|
|
200
200
|
return []
|
|
201
201
|
# TODO: return block records
|
|
202
|
-
return cast(
|
|
202
|
+
return cast(list[dict[str, Any]], response["block_records"])
|
|
203
203
|
|
|
204
|
-
async def get_block_spends(self, header_hash: bytes32) -> Optional[
|
|
204
|
+
async def get_block_spends(self, header_hash: bytes32) -> Optional[list[CoinSpend]]:
|
|
205
205
|
try:
|
|
206
206
|
response = await self.fetch("get_block_spends", {"header_hash": header_hash.hex()})
|
|
207
207
|
block_spends = []
|
|
@@ -211,10 +211,10 @@ class FullNodeRpcClient(RpcClient):
|
|
|
211
211
|
except Exception:
|
|
212
212
|
return None
|
|
213
213
|
|
|
214
|
-
async def get_block_spends_with_conditions(self, header_hash: bytes32) -> Optional[
|
|
214
|
+
async def get_block_spends_with_conditions(self, header_hash: bytes32) -> Optional[list[CoinSpendWithConditions]]:
|
|
215
215
|
try:
|
|
216
216
|
response = await self.fetch("get_block_spends_with_conditions", {"header_hash": header_hash.hex()})
|
|
217
|
-
block_spends:
|
|
217
|
+
block_spends: list[CoinSpendWithConditions] = []
|
|
218
218
|
for block_spend in response["block_spends_with_conditions"]:
|
|
219
219
|
block_spends.append(CoinSpendWithConditions.from_json_dict(block_spend))
|
|
220
220
|
return block_spends
|
|
@@ -222,7 +222,7 @@ class FullNodeRpcClient(RpcClient):
|
|
|
222
222
|
except Exception:
|
|
223
223
|
return None
|
|
224
224
|
|
|
225
|
-
async def push_tx(self, spend_bundle: SpendBundle) ->
|
|
225
|
+
async def push_tx(self, spend_bundle: SpendBundle) -> dict[str, Any]:
|
|
226
226
|
return await self.fetch("push_tx", {"spend_bundle": spend_bundle.to_json_dict()})
|
|
227
227
|
|
|
228
228
|
async def get_puzzle_and_solution(self, coin_id: bytes32, height: uint32) -> Optional[CoinSpend]:
|
|
@@ -232,13 +232,13 @@ class FullNodeRpcClient(RpcClient):
|
|
|
232
232
|
except Exception:
|
|
233
233
|
return None
|
|
234
234
|
|
|
235
|
-
async def get_all_mempool_tx_ids(self) ->
|
|
235
|
+
async def get_all_mempool_tx_ids(self) -> list[bytes32]:
|
|
236
236
|
response = await self.fetch("get_all_mempool_tx_ids", {})
|
|
237
237
|
return [bytes32.from_hexstr(tx_id_hex) for tx_id_hex in response["tx_ids"]]
|
|
238
238
|
|
|
239
|
-
async def get_all_mempool_items(self) ->
|
|
239
|
+
async def get_all_mempool_items(self) -> dict[bytes32, dict[str, Any]]:
|
|
240
240
|
response = await self.fetch("get_all_mempool_items", {})
|
|
241
|
-
converted:
|
|
241
|
+
converted: dict[bytes32, dict[str, Any]] = {}
|
|
242
242
|
for tx_id_hex, item in response["mempool_items"].items():
|
|
243
243
|
converted[bytes32.from_hexstr(tx_id_hex)] = item
|
|
244
244
|
return converted
|
|
@@ -247,16 +247,16 @@ class FullNodeRpcClient(RpcClient):
|
|
|
247
247
|
self,
|
|
248
248
|
tx_id: bytes32,
|
|
249
249
|
include_pending: bool = False,
|
|
250
|
-
) -> Optional[
|
|
250
|
+
) -> Optional[dict[str, Any]]:
|
|
251
251
|
try:
|
|
252
252
|
response = await self.fetch(
|
|
253
253
|
"get_mempool_item_by_tx_id", {"tx_id": tx_id.hex(), "include_pending": include_pending}
|
|
254
254
|
)
|
|
255
|
-
return cast(
|
|
255
|
+
return cast(dict[str, Any], response["mempool_item"])
|
|
256
256
|
except Exception:
|
|
257
257
|
return None
|
|
258
258
|
|
|
259
|
-
async def get_mempool_items_by_coin_name(self, coin_name: bytes32) ->
|
|
259
|
+
async def get_mempool_items_by_coin_name(self, coin_name: bytes32) -> dict[str, Any]:
|
|
260
260
|
response = await self.fetch("get_mempool_items_by_coin_name", {"coin_name": coin_name.hex()})
|
|
261
261
|
return response
|
|
262
262
|
|
|
@@ -285,8 +285,8 @@ class FullNodeRpcClient(RpcClient):
|
|
|
285
285
|
|
|
286
286
|
async def get_fee_estimate(
|
|
287
287
|
self,
|
|
288
|
-
target_times: Optional[
|
|
288
|
+
target_times: Optional[list[int]],
|
|
289
289
|
cost: Optional[int],
|
|
290
|
-
) ->
|
|
290
|
+
) -> dict[str, Any]:
|
|
291
291
|
response = await self.fetch("get_fee_estimate", {"cost": cost, "target_times": target_times})
|
|
292
292
|
return response
|