chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/README.md +1 -1
- chia/_tests/blockchain/blockchain_test_utils.py +24 -26
- chia/_tests/blockchain/test_augmented_chain.py +6 -8
- chia/_tests/blockchain/test_blockchain.py +409 -307
- chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
- chia/_tests/blockchain/test_build_chains.py +11 -13
- chia/_tests/blockchain/test_get_block_generator.py +8 -8
- chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
- chia/_tests/build-init-files.py +3 -4
- chia/_tests/build-job-matrix.py +9 -9
- chia/_tests/check_sql_statements.py +2 -3
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +7 -5
- chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
- chia/_tests/clvm/test_condition_codes.py +2 -2
- chia/_tests/clvm/test_curry_and_treehash.py +2 -4
- chia/_tests/clvm/test_message_conditions.py +184 -0
- chia/_tests/clvm/test_puzzle_compression.py +1 -2
- chia/_tests/clvm/test_puzzle_drivers.py +3 -3
- chia/_tests/clvm/test_puzzles.py +13 -18
- chia/_tests/clvm/test_singletons.py +17 -17
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +42 -45
- chia/_tests/cmds/conftest.py +2 -2
- chia/_tests/cmds/test_click_types.py +21 -16
- chia/_tests/cmds/test_cmd_framework.py +255 -35
- chia/_tests/cmds/test_cmds_util.py +2 -2
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_dev_gh.py +131 -0
- chia/_tests/cmds/test_farm_cmd.py +1 -2
- chia/_tests/cmds/test_show.py +6 -6
- chia/_tests/cmds/test_tx_config_args.py +2 -1
- chia/_tests/cmds/wallet/test_dao.py +23 -23
- chia/_tests/cmds/wallet/test_did.py +29 -29
- chia/_tests/cmds/wallet/test_nft.py +24 -23
- chia/_tests/cmds/wallet/test_notifications.py +8 -8
- chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
- chia/_tests/cmds/wallet/test_vcs.py +97 -73
- chia/_tests/cmds/wallet/test_wallet.py +74 -75
- chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
- chia/_tests/conftest.py +153 -38
- chia/_tests/connection_utils.py +7 -6
- chia/_tests/core/cmds/test_beta.py +3 -3
- chia/_tests/core/cmds/test_keys.py +6 -6
- chia/_tests/core/cmds/test_wallet.py +3 -3
- chia/_tests/core/consensus/test_block_creation.py +3 -5
- chia/_tests/core/custom_types/test_coin.py +1 -3
- chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
- chia/_tests/core/daemon/test_daemon.py +58 -58
- chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
- chia/_tests/core/data_layer/conftest.py +4 -3
- chia/_tests/core/data_layer/test_data_cli.py +1 -2
- chia/_tests/core/data_layer/test_data_layer.py +5 -5
- chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
- chia/_tests/core/data_layer/test_data_rpc.py +75 -93
- chia/_tests/core/data_layer/test_data_store.py +38 -37
- chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
- chia/_tests/core/data_layer/util.py +11 -10
- chia/_tests/core/farmer/test_farmer_api.py +6 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
- chia/_tests/core/full_node/ram_db.py +2 -2
- chia/_tests/core/full_node/stores/test_block_store.py +113 -11
- chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
- chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
- chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
- chia/_tests/core/full_node/test_address_manager.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +1 -1
- chia/_tests/core/full_node/test_conditions.py +10 -12
- chia/_tests/core/full_node/test_full_node.py +2077 -1822
- chia/_tests/core/full_node/test_generator_tools.py +4 -4
- chia/_tests/core/full_node/test_hint_management.py +2 -2
- chia/_tests/core/full_node/test_performance.py +2 -5
- chia/_tests/core/full_node/test_subscriptions.py +4 -4
- chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
- chia/_tests/core/make_block_generator.py +5 -7
- chia/_tests/core/mempool/test_mempool.py +205 -208
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
- chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
- chia/_tests/core/mempool/test_mempool_manager.py +109 -80
- chia/_tests/core/mempool/test_mempool_performance.py +3 -4
- chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
- chia/_tests/core/server/flood.py +6 -4
- chia/_tests/core/server/serve.py +10 -7
- chia/_tests/core/server/test_api_protocol.py +21 -0
- chia/_tests/core/server/test_capabilities.py +3 -5
- chia/_tests/core/server/test_dos.py +15 -16
- chia/_tests/core/server/test_loop.py +14 -10
- chia/_tests/core/server/test_node_discovery.py +1 -2
- chia/_tests/core/server/test_rate_limits.py +156 -44
- chia/_tests/core/server/test_server.py +8 -7
- chia/_tests/core/services/test_services.py +59 -37
- chia/_tests/core/ssl/test_ssl.py +5 -3
- chia/_tests/core/test_cost_calculation.py +5 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_db_conversion.py +5 -4
- chia/_tests/core/test_db_validation.py +6 -5
- chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
- chia/_tests/core/test_filter.py +3 -5
- chia/_tests/core/test_full_node_rpc.py +64 -90
- chia/_tests/core/test_merkle_set.py +10 -10
- chia/_tests/core/test_program.py +2 -4
- chia/_tests/core/test_rpc_util.py +1 -2
- chia/_tests/core/test_seeder.py +124 -12
- chia/_tests/core/util/test_block_cache.py +5 -5
- chia/_tests/core/util/test_cached_bls.py +3 -3
- chia/_tests/core/util/test_config.py +13 -13
- chia/_tests/core/util/test_files.py +2 -2
- chia/_tests/core/util/test_jsonify.py +9 -9
- chia/_tests/core/util/test_keychain.py +13 -5
- chia/_tests/core/util/test_keyring_wrapper.py +6 -5
- chia/_tests/core/util/test_log_exceptions.py +3 -3
- chia/_tests/core/util/test_streamable.py +38 -38
- chia/_tests/db/test_db_wrapper.py +13 -12
- chia/_tests/environments/common.py +2 -2
- chia/_tests/environments/full_node.py +2 -2
- chia/_tests/environments/wallet.py +109 -48
- chia/_tests/farmer_harvester/test_farmer.py +35 -35
- chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
- chia/_tests/generator/test_compression.py +13 -30
- chia/_tests/generator/test_generator_types.py +3 -3
- chia/_tests/generator/test_rom.py +7 -9
- chia/_tests/plot_sync/test_delta.py +2 -3
- chia/_tests/plot_sync/test_plot_sync.py +25 -24
- chia/_tests/plot_sync/test_receiver.py +9 -9
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +27 -26
- chia/_tests/plot_sync/util.py +2 -1
- chia/_tests/plotting/test_plot_manager.py +54 -11
- chia/_tests/plotting/util.py +2 -3
- chia/_tests/pools/test_pool_cli_parsing.py +128 -0
- chia/_tests/pools/test_pool_cmdline.py +993 -15
- chia/_tests/pools/test_pool_config.py +3 -5
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
- chia/_tests/pools/test_pool_rpc.py +203 -90
- chia/_tests/pools/test_pool_wallet.py +12 -8
- chia/_tests/pools/test_wallet_pool_store.py +3 -3
- chia/_tests/process_junit.py +16 -17
- chia/_tests/rpc/test_rpc_client.py +59 -2
- chia/_tests/rpc/test_rpc_server.py +183 -0
- chia/_tests/simulation/test_simulation.py +5 -5
- chia/_tests/simulation/test_simulator.py +8 -10
- chia/_tests/simulation/test_start_simulator.py +5 -4
- chia/_tests/timelord/test_new_peak.py +19 -19
- chia/_tests/tools/test_run_block.py +1 -2
- chia/_tests/tools/test_virtual_project.py +591 -0
- chia/_tests/util/benchmark_cost.py +9 -9
- chia/_tests/util/benchmarks.py +1 -2
- chia/_tests/util/blockchain.py +12 -11
- chia/_tests/util/blockchain_mock.py +15 -15
- chia/_tests/util/build_network_protocol_files.py +12 -12
- chia/_tests/util/db_connection.py +3 -2
- chia/_tests/util/full_sync.py +14 -6
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/generator_tools_testing.py +5 -7
- chia/_tests/util/get_name_puzzle_conditions.py +52 -0
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +59 -106
- chia/_tests/util/network_protocol_data.py +7 -9
- chia/_tests/util/protocol_messages_json.py +112 -111
- chia/_tests/util/rpc.py +3 -0
- chia/_tests/util/run_block.py +16 -16
- chia/_tests/util/setup_nodes.py +25 -23
- chia/{clvm → _tests/util}/spend_sim.py +59 -55
- chia/_tests/util/split_managers.py +12 -9
- chia/_tests/util/temp_file.py +1 -1
- chia/_tests/util/test_action_scope.py +2 -1
- chia/_tests/util/test_async_pool.py +8 -8
- chia/_tests/util/test_build_job_matrix.py +2 -3
- chia/_tests/util/test_condition_tools.py +4 -6
- chia/_tests/util/test_config.py +5 -5
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +19 -11
- chia/_tests/util/test_limited_semaphore.py +4 -3
- chia/_tests/util/test_logging_filter.py +2 -3
- chia/_tests/util/test_misc.py +29 -28
- chia/_tests/util/test_network.py +32 -31
- chia/_tests/util/test_network_protocol_files.py +2 -3
- chia/_tests/util/test_network_protocol_json.py +1 -0
- chia/_tests/util/test_network_protocol_test.py +18 -19
- chia/_tests/util/test_paginator.py +3 -4
- chia/_tests/util/test_pprint.py +1 -1
- chia/_tests/util/test_priority_mutex.py +18 -17
- chia/_tests/util/test_recursive_replace.py +2 -2
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/test_timing.py +1 -1
- chia/_tests/util/test_trusted_peer.py +2 -2
- chia/_tests/util/time_out_assert.py +43 -6
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
- chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
- chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
- chia/_tests/wallet/conftest.py +135 -74
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
- chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
- chia/_tests/wallet/did_wallet/test_did.py +1277 -474
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
- chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
- chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
- chia/_tests/wallet/test_address_type.py +20 -20
- chia/_tests/wallet/test_clvm_streamable.py +5 -5
- chia/_tests/wallet/test_coin_management.py +354 -0
- chia/_tests/wallet/test_coin_selection.py +34 -35
- chia/_tests/wallet/test_conditions.py +28 -16
- chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
- chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
- chia/_tests/wallet/test_nft_store.py +1 -2
- chia/_tests/wallet/test_notifications.py +2 -2
- chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
- chia/_tests/wallet/test_puzzle_store.py +2 -3
- chia/_tests/wallet/test_sign_coin_spends.py +3 -3
- chia/_tests/wallet/test_signer_protocol.py +33 -34
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
- chia/_tests/wallet/test_taproot.py +1 -1
- chia/_tests/wallet/test_transaction_store.py +23 -19
- chia/_tests/wallet/test_util.py +36 -32
- chia/_tests/wallet/test_wallet.py +37 -37
- chia/_tests/wallet/test_wallet_action_scope.py +8 -8
- chia/_tests/wallet/test_wallet_blockchain.py +4 -6
- chia/_tests/wallet/test_wallet_coin_store.py +34 -34
- chia/_tests/wallet/test_wallet_node.py +69 -72
- chia/_tests/wallet/test_wallet_retry.py +3 -3
- chia/_tests/wallet/test_wallet_state_manager.py +12 -5
- chia/_tests/wallet/test_wallet_trade_store.py +2 -2
- chia/_tests/wallet/test_wallet_utils.py +5 -4
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
- chia/_tests/wallet/wallet_block_tools.py +27 -27
- chia/_tests/weight_proof/test_weight_proof.py +30 -30
- chia/apis.py +19 -0
- chia/cmds/beta.py +8 -7
- chia/cmds/beta_funcs.py +15 -11
- chia/cmds/check_wallet_db.py +29 -27
- chia/cmds/chia.py +17 -9
- chia/cmds/cmd_classes.py +87 -79
- chia/cmds/cmd_helpers.py +242 -0
- chia/cmds/cmds_util.py +56 -66
- chia/cmds/coin_funcs.py +168 -153
- chia/cmds/coins.py +156 -194
- chia/cmds/configure.py +4 -3
- chia/cmds/dao.py +89 -33
- chia/cmds/dao_funcs.py +55 -33
- chia/cmds/data.py +7 -6
- chia/cmds/data_funcs.py +26 -21
- chia/cmds/db.py +4 -3
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev.py +2 -0
- chia/cmds/farm.py +18 -5
- chia/cmds/farm_funcs.py +17 -24
- chia/cmds/gh.py +275 -0
- chia/cmds/init.py +4 -11
- chia/cmds/init_funcs.py +9 -9
- chia/cmds/installers.py +5 -3
- chia/cmds/keys.py +56 -39
- chia/cmds/keys_funcs.py +30 -31
- chia/cmds/netspace.py +6 -3
- chia/cmds/netspace_funcs.py +3 -2
- chia/cmds/param_types.py +16 -6
- chia/cmds/passphrase.py +8 -7
- chia/cmds/passphrase_funcs.py +7 -61
- chia/cmds/peer.py +2 -1
- chia/cmds/peer_funcs.py +5 -5
- chia/cmds/plotnft.py +207 -153
- chia/cmds/plotnft_funcs.py +205 -174
- chia/cmds/plots.py +14 -6
- chia/cmds/plotters.py +2 -1
- chia/cmds/rpc.py +48 -28
- chia/cmds/show.py +2 -1
- chia/cmds/show_funcs.py +7 -6
- chia/cmds/signer.py +50 -58
- chia/cmds/sim.py +22 -14
- chia/cmds/sim_funcs.py +11 -11
- chia/cmds/start.py +3 -3
- chia/cmds/start_funcs.py +9 -12
- chia/cmds/stop.py +4 -3
- chia/cmds/units.py +1 -3
- chia/cmds/wallet.py +252 -96
- chia/cmds/wallet_funcs.py +217 -143
- chia/consensus/block_body_validation.py +133 -86
- chia/consensus/block_creation.py +42 -21
- chia/consensus/block_header_validation.py +32 -37
- chia/consensus/block_record.py +1 -2
- chia/consensus/blockchain.py +167 -180
- chia/consensus/blockchain_interface.py +10 -10
- chia/consensus/constants.py +2 -2
- chia/consensus/default_constants.py +3 -4
- chia/consensus/difficulty_adjustment.py +5 -5
- chia/consensus/find_fork_point.py +5 -5
- chia/consensus/full_block_to_block_record.py +4 -4
- chia/consensus/get_block_challenge.py +2 -2
- chia/consensus/get_block_generator.py +4 -3
- chia/consensus/multiprocess_validation.py +207 -304
- chia/consensus/vdf_info_computation.py +3 -3
- chia/daemon/client.py +46 -27
- chia/daemon/keychain_proxy.py +10 -9
- chia/daemon/keychain_server.py +18 -18
- chia/daemon/server.py +103 -113
- chia/daemon/windows_signal.py +2 -2
- chia/data_layer/data_layer.py +64 -76
- chia/data_layer/data_layer_api.py +8 -0
- chia/data_layer/data_layer_errors.py +3 -3
- chia/data_layer/data_layer_server.py +2 -2
- chia/data_layer/data_layer_util.py +71 -71
- chia/data_layer/data_layer_wallet.py +63 -67
- chia/data_layer/data_store.py +72 -72
- chia/data_layer/dl_wallet_store.py +10 -10
- chia/data_layer/download_data.py +5 -5
- chia/data_layer/s3_plugin_service.py +9 -9
- chia/data_layer/util/benchmark.py +0 -1
- chia/data_layer/util/plugin.py +2 -3
- chia/farmer/farmer.py +46 -43
- chia/farmer/farmer_api.py +27 -21
- chia/full_node/block_height_map.py +6 -6
- chia/full_node/block_store.py +41 -35
- chia/full_node/coin_store.py +42 -41
- chia/full_node/fee_estimate.py +2 -2
- chia/full_node/fee_estimation.py +1 -2
- chia/full_node/fee_history.py +5 -6
- chia/full_node/fee_tracker.py +24 -24
- chia/full_node/full_node.py +574 -300
- chia/full_node/full_node_api.py +181 -130
- chia/full_node/full_node_store.py +43 -43
- chia/full_node/hint_management.py +4 -4
- chia/full_node/hint_store.py +9 -10
- chia/full_node/mempool.py +25 -19
- chia/full_node/mempool_check_conditions.py +11 -42
- chia/full_node/mempool_manager.py +48 -53
- chia/full_node/pending_tx_cache.py +9 -9
- chia/full_node/subscriptions.py +23 -24
- chia/full_node/sync_store.py +8 -7
- chia/full_node/tx_processing_queue.py +3 -3
- chia/full_node/util/__init__.py +0 -0
- chia/full_node/weight_proof.py +79 -78
- chia/harvester/harvester.py +9 -8
- chia/harvester/harvester_api.py +19 -13
- chia/introducer/introducer.py +7 -5
- chia/introducer/introducer_api.py +9 -3
- chia/legacy/keyring.py +6 -5
- chia/plot_sync/delta.py +8 -8
- chia/plot_sync/receiver.py +12 -11
- chia/plot_sync/sender.py +15 -12
- chia/plotters/bladebit.py +12 -12
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +8 -8
- chia/plotters/plotters.py +6 -6
- chia/plotters/plotters_util.py +6 -4
- chia/plotting/cache.py +8 -7
- chia/plotting/check_plots.py +8 -8
- chia/plotting/create_plots.py +6 -6
- chia/plotting/manager.py +22 -22
- chia/plotting/util.py +31 -19
- chia/pools/pool_config.py +7 -7
- chia/pools/pool_puzzles.py +16 -16
- chia/pools/pool_wallet.py +64 -57
- chia/pools/pool_wallet_info.py +3 -3
- chia/protocols/full_node_protocol.py +3 -3
- chia/protocols/harvester_protocol.py +12 -12
- chia/protocols/introducer_protocol.py +1 -2
- chia/protocols/protocol_message_types.py +4 -4
- chia/protocols/protocol_state_machine.py +2 -2
- chia/protocols/protocol_timing.py +1 -0
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +2 -2
- chia/protocols/wallet_protocol.py +33 -33
- chia/rpc/crawler_rpc_api.py +12 -7
- chia/rpc/data_layer_rpc_api.py +49 -44
- chia/rpc/data_layer_rpc_client.py +41 -41
- chia/rpc/data_layer_rpc_util.py +7 -11
- chia/rpc/farmer_rpc_api.py +32 -27
- chia/rpc/farmer_rpc_client.py +14 -14
- chia/rpc/full_node_rpc_api.py +53 -48
- chia/rpc/full_node_rpc_client.py +30 -30
- chia/rpc/harvester_rpc_api.py +16 -11
- chia/rpc/harvester_rpc_client.py +6 -6
- chia/rpc/rpc_client.py +34 -14
- chia/rpc/rpc_server.py +117 -43
- chia/rpc/timelord_rpc_api.py +9 -4
- chia/rpc/util.py +11 -211
- chia/rpc/wallet_request_types.py +276 -60
- chia/rpc/wallet_rpc_api.py +563 -399
- chia/rpc/wallet_rpc_client.py +220 -250
- chia/seeder/crawl_store.py +6 -8
- chia/seeder/crawler.py +23 -36
- chia/seeder/crawler_api.py +28 -22
- chia/seeder/dns_server.py +99 -50
- chia/seeder/start_crawler.py +13 -9
- chia/server/address_manager.py +19 -19
- chia/server/address_manager_store.py +17 -17
- chia/server/api_protocol.py +106 -1
- chia/server/capabilities.py +3 -3
- chia/server/chia_policy.py +17 -16
- chia/server/introducer_peers.py +3 -3
- chia/server/node_discovery.py +34 -38
- chia/server/rate_limit_numbers.py +26 -16
- chia/server/rate_limits.py +67 -27
- chia/server/server.py +52 -31
- chia/server/signal_handlers.py +6 -3
- chia/server/ssl_context.py +5 -5
- chia/server/start_data_layer.py +37 -23
- chia/server/start_farmer.py +28 -16
- chia/server/start_full_node.py +29 -23
- chia/server/start_harvester.py +28 -15
- chia/server/start_introducer.py +27 -15
- chia/server/start_service.py +17 -29
- chia/server/start_timelord.py +25 -18
- chia/server/start_wallet.py +22 -18
- chia/server/upnp.py +4 -3
- chia/server/ws_connection.py +68 -54
- chia/simulator/add_blocks_in_batches.py +54 -0
- chia/simulator/block_tools.py +65 -64
- chia/simulator/full_node_simulator.py +66 -74
- chia/simulator/setup_services.py +10 -9
- chia/simulator/simulator_full_node_rpc_api.py +12 -14
- chia/simulator/simulator_full_node_rpc_client.py +3 -5
- chia/simulator/simulator_test_tools.py +8 -7
- chia/simulator/socket.py +1 -4
- chia/simulator/ssl_certs.py +5 -5
- chia/simulator/ssl_certs_1.py +2 -4
- chia/simulator/ssl_certs_10.py +2 -4
- chia/simulator/ssl_certs_2.py +2 -4
- chia/simulator/ssl_certs_3.py +2 -4
- chia/simulator/ssl_certs_4.py +2 -4
- chia/simulator/ssl_certs_5.py +2 -4
- chia/simulator/ssl_certs_6.py +2 -4
- chia/simulator/ssl_certs_7.py +2 -4
- chia/simulator/ssl_certs_8.py +2 -4
- chia/simulator/ssl_certs_9.py +2 -4
- chia/simulator/start_simulator.py +14 -6
- chia/simulator/wallet_tools.py +21 -20
- chia/ssl/create_ssl.py +11 -11
- chia/timelord/iters_from_block.py +2 -2
- chia/timelord/timelord.py +57 -33
- chia/timelord/timelord_api.py +12 -6
- chia/timelord/timelord_launcher.py +10 -8
- chia/timelord/timelord_state.py +5 -5
- chia/types/block_protocol.py +2 -2
- chia/types/blockchain_format/coin.py +3 -3
- chia/types/blockchain_format/program.py +17 -18
- chia/types/blockchain_format/tree_hash.py +9 -9
- chia/types/coin_spend.py +8 -8
- chia/types/condition_with_args.py +1 -2
- chia/types/eligible_coin_spends.py +16 -15
- chia/types/generator_types.py +1 -2
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +7 -7
- chia/types/mempool_submission_status.py +2 -2
- chia/types/peer_info.py +1 -1
- chia/types/spend_bundle.py +1 -2
- chia/types/transaction_queue_entry.py +2 -2
- chia/types/unfinished_header_block.py +2 -2
- chia/types/validation_state.py +14 -0
- chia/types/weight_proof.py +5 -6
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +6 -4
- chia/util/augmented_chain.py +13 -9
- chia/util/batches.py +5 -2
- chia/util/bech32m.py +14 -11
- chia/util/beta_metrics.py +5 -4
- chia/util/block_cache.py +5 -5
- chia/util/byte_types.py +2 -0
- chia/util/check_fork_next_block.py +3 -2
- chia/util/chia_logging.py +41 -21
- chia/util/collection.py +3 -3
- chia/util/condition_tools.py +18 -18
- chia/util/config.py +26 -25
- chia/util/cpu.py +2 -0
- chia/util/db_synchronous.py +2 -0
- chia/util/db_version.py +2 -0
- chia/util/db_wrapper.py +13 -10
- chia/util/default_root.py +17 -0
- chia/util/dump_keyring.py +6 -6
- chia/util/errors.py +5 -3
- chia/util/file_keyring.py +22 -33
- chia/util/files.py +2 -0
- chia/util/full_block_utils.py +31 -7
- chia/util/generator_tools.py +18 -8
- chia/util/hash.py +3 -1
- chia/util/initial-config.yaml +19 -0
- chia/util/inline_executor.py +2 -0
- chia/util/ip_address.py +39 -0
- chia/util/json_util.py +0 -4
- chia/util/keychain.py +27 -24
- chia/util/keyring_wrapper.py +65 -4
- chia/util/limited_semaphore.py +3 -1
- chia/util/lock.py +4 -2
- chia/util/log_exceptions.py +5 -2
- chia/util/logging.py +3 -1
- chia/util/lru_cache.py +2 -0
- chia/util/math.py +4 -4
- chia/util/network.py +15 -73
- chia/util/paginator.py +3 -1
- chia/util/path.py +2 -0
- chia/util/permissions.py +3 -2
- chia/util/prev_transaction_block.py +1 -3
- chia/util/priority_mutex.py +6 -3
- chia/util/profiler.py +7 -4
- chia/util/recursive_replace.py +2 -0
- chia/util/safe_cancel_task.py +2 -0
- chia/util/service_groups.py +2 -2
- chia/util/setproctitle.py +2 -0
- chia/util/significant_bits.py +2 -0
- chia/util/ssl_check.py +11 -11
- chia/util/streamable.py +44 -56
- chia/util/task_referencer.py +59 -0
- chia/util/task_timing.py +22 -18
- chia/util/timing.py +4 -1
- chia/util/vdf_prover.py +2 -3
- chia/util/virtual_project_analysis.py +540 -0
- chia/util/ws_message.py +6 -6
- chia/wallet/cat_wallet/cat_info.py +3 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
- chia/wallet/cat_wallet/cat_utils.py +5 -4
- chia/wallet/cat_wallet/cat_wallet.py +56 -70
- chia/wallet/cat_wallet/dao_cat_info.py +3 -3
- chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
- chia/wallet/cat_wallet/lineage_store.py +2 -2
- chia/wallet/coin_selection.py +15 -15
- chia/wallet/conditions.py +257 -71
- chia/wallet/dao_wallet/dao_info.py +4 -4
- chia/wallet/dao_wallet/dao_utils.py +43 -42
- chia/wallet/dao_wallet/dao_wallet.py +66 -68
- chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
- chia/wallet/derive_keys.py +11 -11
- chia/wallet/did_wallet/did_info.py +3 -3
- chia/wallet/did_wallet/did_wallet.py +56 -47
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/nft_info.py +4 -4
- chia/wallet/nft_wallet/nft_puzzles.py +16 -16
- chia/wallet/nft_wallet/nft_wallet.py +90 -89
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
- chia/wallet/nft_wallet/uncurry_nft.py +2 -2
- chia/wallet/notification_manager.py +5 -5
- chia/wallet/notification_store.py +6 -6
- chia/wallet/outer_puzzles.py +2 -2
- chia/wallet/payment.py +4 -5
- chia/wallet/puzzle_drivers.py +4 -4
- chia/wallet/puzzles/clawback/drivers.py +5 -5
- chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
- chia/wallet/puzzles/load_clvm.py +2 -3
- chia/wallet/puzzles/p2_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
- chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
- chia/wallet/puzzles/puzzle_utils.py +7 -7
- chia/wallet/puzzles/singleton_top_layer.py +6 -5
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
- chia/wallet/puzzles/tails.py +34 -30
- chia/wallet/signer_protocol.py +7 -8
- chia/wallet/singleton.py +4 -4
- chia/wallet/trade_manager.py +155 -141
- chia/wallet/trade_record.py +5 -5
- chia/wallet/trading/offer.py +100 -101
- chia/wallet/trading/trade_store.py +14 -14
- chia/wallet/transaction_record.py +31 -16
- chia/wallet/util/address_type.py +4 -4
- chia/wallet/util/blind_signer_tl.py +8 -12
- chia/wallet/util/clvm_streamable.py +15 -15
- chia/wallet/util/compute_hints.py +5 -5
- chia/wallet/util/compute_memos.py +4 -6
- chia/wallet/util/curry_and_treehash.py +3 -2
- chia/wallet/util/debug_spend_bundle.py +6 -8
- chia/wallet/util/merkle_tree.py +10 -10
- chia/wallet/util/merkle_utils.py +10 -10
- chia/wallet/util/new_peak_queue.py +3 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/{util → wallet/util}/pprint.py +2 -3
- chia/wallet/util/puzzle_compression.py +3 -4
- chia/wallet/util/puzzle_decorator.py +10 -10
- chia/wallet/util/query_filter.py +9 -10
- chia/wallet/util/tx_config.py +12 -12
- chia/wallet/util/wallet_sync_utils.py +24 -21
- chia/wallet/util/wallet_types.py +9 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
- chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
- chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
- chia/wallet/vc_wallet/vc_drivers.py +16 -16
- chia/wallet/vc_wallet/vc_store.py +9 -9
- chia/wallet/vc_wallet/vc_wallet.py +35 -35
- chia/wallet/wallet.py +54 -54
- chia/wallet/wallet_action_scope.py +14 -13
- chia/wallet/wallet_blockchain.py +10 -10
- chia/wallet/wallet_coin_record.py +2 -2
- chia/wallet/wallet_coin_store.py +10 -10
- chia/wallet/wallet_info.py +1 -2
- chia/wallet/wallet_interested_store.py +5 -5
- chia/wallet/wallet_nft_store.py +6 -6
- chia/wallet/wallet_node.py +72 -76
- chia/wallet/wallet_node_api.py +33 -27
- chia/wallet/wallet_pool_store.py +1 -2
- chia/wallet/wallet_protocol.py +15 -15
- chia/wallet/wallet_puzzle_store.py +35 -4
- chia/wallet/wallet_retry_store.py +2 -2
- chia/wallet/wallet_singleton_store.py +10 -9
- chia/wallet/wallet_spend_bundle.py +4 -20
- chia/wallet/wallet_state_manager.py +223 -224
- chia/wallet/wallet_transaction_store.py +44 -18
- chia/wallet/wallet_user_store.py +2 -2
- chia/wallet/wallet_weight_proof_handler.py +2 -2
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
- mozilla-ca/cacert.pem +32 -87
- chia/_tests/cmds/wallet/test_coins.py +0 -195
- chia/consensus/block_root_validation.py +0 -46
- chia/util/api_decorators.py +0 -89
- chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from enum import IntEnum
|
|
5
|
-
from typing import
|
|
5
|
+
from typing import Optional
|
|
6
6
|
|
|
7
7
|
import chia_rs
|
|
8
8
|
|
|
@@ -100,7 +100,7 @@ class RejectHeaderRequest(Streamable):
|
|
|
100
100
|
class RequestRemovals(Streamable):
|
|
101
101
|
height: uint32
|
|
102
102
|
header_hash: bytes32
|
|
103
|
-
coin_names: Optional[
|
|
103
|
+
coin_names: Optional[list[bytes32]]
|
|
104
104
|
|
|
105
105
|
|
|
106
106
|
@streamable
|
|
@@ -108,8 +108,8 @@ class RequestRemovals(Streamable):
|
|
|
108
108
|
class RespondRemovals(Streamable):
|
|
109
109
|
height: uint32
|
|
110
110
|
header_hash: bytes32
|
|
111
|
-
coins:
|
|
112
|
-
proofs: Optional[
|
|
111
|
+
coins: list[tuple[bytes32, Optional[Coin]]]
|
|
112
|
+
proofs: Optional[list[tuple[bytes32, bytes]]]
|
|
113
113
|
|
|
114
114
|
|
|
115
115
|
@streamable
|
|
@@ -124,7 +124,7 @@ class RejectRemovalsRequest(Streamable):
|
|
|
124
124
|
class RequestAdditions(Streamable):
|
|
125
125
|
height: uint32
|
|
126
126
|
header_hash: Optional[bytes32]
|
|
127
|
-
puzzle_hashes: Optional[
|
|
127
|
+
puzzle_hashes: Optional[list[bytes32]]
|
|
128
128
|
|
|
129
129
|
|
|
130
130
|
@streamable
|
|
@@ -132,8 +132,8 @@ class RequestAdditions(Streamable):
|
|
|
132
132
|
class RespondAdditions(Streamable):
|
|
133
133
|
height: uint32
|
|
134
134
|
header_hash: bytes32
|
|
135
|
-
coins:
|
|
136
|
-
proofs: Optional[
|
|
135
|
+
coins: list[tuple[bytes32, list[Coin]]]
|
|
136
|
+
proofs: Optional[list[tuple[bytes32, bytes, Optional[bytes]]]]
|
|
137
137
|
|
|
138
138
|
|
|
139
139
|
@streamable
|
|
@@ -148,7 +148,7 @@ class RejectAdditionsRequest(Streamable):
|
|
|
148
148
|
class RespondBlockHeaders(Streamable):
|
|
149
149
|
start_height: uint32
|
|
150
150
|
end_height: uint32
|
|
151
|
-
header_blocks:
|
|
151
|
+
header_blocks: list[HeaderBlock]
|
|
152
152
|
|
|
153
153
|
|
|
154
154
|
@streamable
|
|
@@ -185,7 +185,7 @@ class RejectHeaderBlocks(Streamable):
|
|
|
185
185
|
class RespondHeaderBlocks(Streamable):
|
|
186
186
|
start_height: uint32
|
|
187
187
|
end_height: uint32
|
|
188
|
-
header_blocks:
|
|
188
|
+
header_blocks: list[HeaderBlock]
|
|
189
189
|
|
|
190
190
|
|
|
191
191
|
# This class is implemented in Rust
|
|
@@ -200,7 +200,7 @@ class RespondHeaderBlocks(Streamable):
|
|
|
200
200
|
@streamable
|
|
201
201
|
@dataclass(frozen=True)
|
|
202
202
|
class RegisterForPhUpdates(Streamable):
|
|
203
|
-
puzzle_hashes:
|
|
203
|
+
puzzle_hashes: list[bytes32]
|
|
204
204
|
min_height: uint32
|
|
205
205
|
|
|
206
206
|
|
|
@@ -208,24 +208,24 @@ class RegisterForPhUpdates(Streamable):
|
|
|
208
208
|
# @streamable
|
|
209
209
|
# @dataclass(frozen=True)
|
|
210
210
|
# class RespondToPhUpdates(Streamable):
|
|
211
|
-
# puzzle_hashes:
|
|
211
|
+
# puzzle_hashes: list[bytes32]
|
|
212
212
|
# min_height: uint32
|
|
213
|
-
# coin_states:
|
|
213
|
+
# coin_states: list[CoinState]
|
|
214
214
|
|
|
215
215
|
|
|
216
216
|
@streamable
|
|
217
217
|
@dataclass(frozen=True)
|
|
218
218
|
class RegisterForCoinUpdates(Streamable):
|
|
219
|
-
coin_ids:
|
|
219
|
+
coin_ids: list[bytes32]
|
|
220
220
|
min_height: uint32
|
|
221
221
|
|
|
222
222
|
|
|
223
223
|
@streamable
|
|
224
224
|
@dataclass(frozen=True)
|
|
225
225
|
class RespondToCoinUpdates(Streamable):
|
|
226
|
-
coin_ids:
|
|
226
|
+
coin_ids: list[bytes32]
|
|
227
227
|
min_height: uint32
|
|
228
|
-
coin_states:
|
|
228
|
+
coin_states: list[CoinState]
|
|
229
229
|
|
|
230
230
|
|
|
231
231
|
@streamable
|
|
@@ -234,7 +234,7 @@ class CoinStateUpdate(Streamable):
|
|
|
234
234
|
height: uint32
|
|
235
235
|
fork_height: uint32
|
|
236
236
|
peak_hash: bytes32
|
|
237
|
-
items:
|
|
237
|
+
items: list[CoinState]
|
|
238
238
|
|
|
239
239
|
|
|
240
240
|
@streamable
|
|
@@ -246,7 +246,7 @@ class RequestChildren(Streamable):
|
|
|
246
246
|
@streamable
|
|
247
247
|
@dataclass(frozen=True)
|
|
248
248
|
class RespondChildren(Streamable):
|
|
249
|
-
coin_states:
|
|
249
|
+
coin_states: list[CoinState]
|
|
250
250
|
|
|
251
251
|
|
|
252
252
|
@streamable
|
|
@@ -259,18 +259,18 @@ class RequestSESInfo(Streamable):
|
|
|
259
259
|
@streamable
|
|
260
260
|
@dataclass(frozen=True)
|
|
261
261
|
class RespondSESInfo(Streamable):
|
|
262
|
-
reward_chain_hash:
|
|
263
|
-
heights:
|
|
262
|
+
reward_chain_hash: list[bytes32]
|
|
263
|
+
heights: list[list[uint32]]
|
|
264
264
|
|
|
265
265
|
|
|
266
266
|
@streamable
|
|
267
267
|
@dataclass(frozen=True)
|
|
268
268
|
class RequestFeeEstimates(Streamable):
|
|
269
269
|
"""
|
|
270
|
-
time_targets (
|
|
270
|
+
time_targets (list[uint64]): Epoch timestamps in seconds to estimate FeeRates for.
|
|
271
271
|
"""
|
|
272
272
|
|
|
273
|
-
time_targets:
|
|
273
|
+
time_targets: list[uint64]
|
|
274
274
|
|
|
275
275
|
|
|
276
276
|
@streamable
|
|
@@ -282,25 +282,25 @@ class RespondFeeEstimates(Streamable):
|
|
|
282
282
|
@streamable
|
|
283
283
|
@dataclass(frozen=True)
|
|
284
284
|
class RequestRemovePuzzleSubscriptions(Streamable):
|
|
285
|
-
puzzle_hashes: Optional[
|
|
285
|
+
puzzle_hashes: Optional[list[bytes32]]
|
|
286
286
|
|
|
287
287
|
|
|
288
288
|
@streamable
|
|
289
289
|
@dataclass(frozen=True)
|
|
290
290
|
class RespondRemovePuzzleSubscriptions(Streamable):
|
|
291
|
-
puzzle_hashes:
|
|
291
|
+
puzzle_hashes: list[bytes32]
|
|
292
292
|
|
|
293
293
|
|
|
294
294
|
@streamable
|
|
295
295
|
@dataclass(frozen=True)
|
|
296
296
|
class RequestRemoveCoinSubscriptions(Streamable):
|
|
297
|
-
coin_ids: Optional[
|
|
297
|
+
coin_ids: Optional[list[bytes32]]
|
|
298
298
|
|
|
299
299
|
|
|
300
300
|
@streamable
|
|
301
301
|
@dataclass(frozen=True)
|
|
302
302
|
class RespondRemoveCoinSubscriptions(Streamable):
|
|
303
|
-
coin_ids:
|
|
303
|
+
coin_ids: list[bytes32]
|
|
304
304
|
|
|
305
305
|
|
|
306
306
|
@streamable
|
|
@@ -315,7 +315,7 @@ class CoinStateFilters(Streamable):
|
|
|
315
315
|
@streamable
|
|
316
316
|
@dataclass(frozen=True)
|
|
317
317
|
class RequestPuzzleState(Streamable):
|
|
318
|
-
puzzle_hashes:
|
|
318
|
+
puzzle_hashes: list[bytes32]
|
|
319
319
|
previous_height: Optional[uint32]
|
|
320
320
|
header_hash: bytes32
|
|
321
321
|
filters: CoinStateFilters
|
|
@@ -325,11 +325,11 @@ class RequestPuzzleState(Streamable):
|
|
|
325
325
|
@streamable
|
|
326
326
|
@dataclass(frozen=True)
|
|
327
327
|
class RespondPuzzleState(Streamable):
|
|
328
|
-
puzzle_hashes:
|
|
328
|
+
puzzle_hashes: list[bytes32]
|
|
329
329
|
height: uint32
|
|
330
330
|
header_hash: bytes32
|
|
331
331
|
is_finished: bool
|
|
332
|
-
coin_states:
|
|
332
|
+
coin_states: list[CoinState]
|
|
333
333
|
|
|
334
334
|
|
|
335
335
|
@streamable
|
|
@@ -341,7 +341,7 @@ class RejectPuzzleState(Streamable):
|
|
|
341
341
|
@streamable
|
|
342
342
|
@dataclass(frozen=True)
|
|
343
343
|
class RequestCoinState(Streamable):
|
|
344
|
-
coin_ids:
|
|
344
|
+
coin_ids: list[bytes32]
|
|
345
345
|
previous_height: Optional[uint32]
|
|
346
346
|
header_hash: bytes32
|
|
347
347
|
subscribe: bool
|
|
@@ -350,8 +350,8 @@ class RequestCoinState(Streamable):
|
|
|
350
350
|
@streamable
|
|
351
351
|
@dataclass(frozen=True)
|
|
352
352
|
class RespondCoinState(Streamable):
|
|
353
|
-
coin_ids:
|
|
354
|
-
coin_states:
|
|
353
|
+
coin_ids: list[bytes32]
|
|
354
|
+
coin_states: list[CoinState]
|
|
355
355
|
|
|
356
356
|
|
|
357
357
|
@streamable
|
|
@@ -375,13 +375,13 @@ class RemovedMempoolItem(Streamable):
|
|
|
375
375
|
@streamable
|
|
376
376
|
@dataclass(frozen=True)
|
|
377
377
|
class MempoolItemsAdded(Streamable):
|
|
378
|
-
transaction_ids:
|
|
378
|
+
transaction_ids: list[bytes32]
|
|
379
379
|
|
|
380
380
|
|
|
381
381
|
@streamable
|
|
382
382
|
@dataclass(frozen=True)
|
|
383
383
|
class MempoolItemsRemoved(Streamable):
|
|
384
|
-
removed_items:
|
|
384
|
+
removed_items: list[RemovedMempoolItem]
|
|
385
385
|
|
|
386
386
|
|
|
387
387
|
@streamable
|
chia/rpc/crawler_rpc_api.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import ipaddress
|
|
4
|
-
from typing import Any,
|
|
4
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
|
|
5
5
|
|
|
6
6
|
from chia.rpc.rpc_server import Endpoint, EndpointResult
|
|
7
7
|
from chia.seeder.crawler import Crawler
|
|
@@ -9,28 +9,33 @@ from chia.util.ws_message import WsRpcMessage, create_payload_dict
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class CrawlerRpcApi:
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from chia.rpc.rpc_server import RpcApiProtocol
|
|
14
|
+
|
|
15
|
+
_protocol_check: ClassVar[RpcApiProtocol] = cast("CrawlerRpcApi", None)
|
|
16
|
+
|
|
12
17
|
def __init__(self, crawler: Crawler):
|
|
13
18
|
self.service = crawler
|
|
14
19
|
self.service_name = "chia_crawler"
|
|
15
20
|
|
|
16
|
-
def get_routes(self) ->
|
|
21
|
+
def get_routes(self) -> dict[str, Endpoint]:
|
|
17
22
|
return {
|
|
18
23
|
"/get_peer_counts": self.get_peer_counts,
|
|
19
24
|
"/get_ips_after_timestamp": self.get_ips_after_timestamp,
|
|
20
25
|
}
|
|
21
26
|
|
|
22
|
-
async def _state_changed(self, change: str, change_data: Optional[
|
|
27
|
+
async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]] = None) -> list[WsRpcMessage]:
|
|
23
28
|
payloads = []
|
|
24
29
|
|
|
25
30
|
if change_data is None:
|
|
26
31
|
change_data = await self.get_peer_counts({})
|
|
27
32
|
|
|
28
|
-
if change in
|
|
33
|
+
if change in {"crawl_batch_completed", "loaded_initial_peers"}:
|
|
29
34
|
payloads.append(create_payload_dict(change, change_data, self.service_name, "metrics"))
|
|
30
35
|
|
|
31
36
|
return payloads
|
|
32
37
|
|
|
33
|
-
async def get_peer_counts(self, _request:
|
|
38
|
+
async def get_peer_counts(self, _request: dict[str, Any]) -> EndpointResult:
|
|
34
39
|
ipv6_addresses_count = 0
|
|
35
40
|
for host in self.service.best_timestamp_per_peer.keys():
|
|
36
41
|
try:
|
|
@@ -54,7 +59,7 @@ class CrawlerRpcApi:
|
|
|
54
59
|
}
|
|
55
60
|
return data
|
|
56
61
|
|
|
57
|
-
async def get_ips_after_timestamp(self, _request:
|
|
62
|
+
async def get_ips_after_timestamp(self, _request: dict[str, Any]) -> EndpointResult:
|
|
58
63
|
after = _request.get("after", None)
|
|
59
64
|
if after is None:
|
|
60
65
|
raise ValueError("`after` is required and must be a unix timestamp")
|
|
@@ -62,7 +67,7 @@ class CrawlerRpcApi:
|
|
|
62
67
|
offset = _request.get("offset", 0)
|
|
63
68
|
limit = _request.get("limit", 10000)
|
|
64
69
|
|
|
65
|
-
matched_ips:
|
|
70
|
+
matched_ips: list[str] = []
|
|
66
71
|
for ip, timestamp in self.service.best_timestamp_per_peer.items():
|
|
67
72
|
if timestamp > after:
|
|
68
73
|
matched_ips.append(ip)
|
chia/rpc/data_layer_rpc_api.py
CHANGED
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import TYPE_CHECKING, Any,
|
|
5
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Optional, Union, cast
|
|
6
6
|
|
|
7
7
|
from chia.data_layer.data_layer_errors import OfferIntegrityError
|
|
8
8
|
from chia.data_layer.data_layer_util import (
|
|
@@ -44,9 +44,9 @@ if TYPE_CHECKING:
|
|
|
44
44
|
from chia.data_layer.data_layer import DataLayer
|
|
45
45
|
|
|
46
46
|
|
|
47
|
-
def process_change(change:
|
|
47
|
+
def process_change(change: dict[str, Any]) -> dict[str, Any]:
|
|
48
48
|
# TODO: A full class would likely be nice for this so downstream doesn't
|
|
49
|
-
# have to deal with maybe-present attributes or
|
|
49
|
+
# have to deal with maybe-present attributes or dict[str, Any] hints.
|
|
50
50
|
reference_node_hash = change.get("reference_node_hash")
|
|
51
51
|
if reference_node_hash is not None:
|
|
52
52
|
reference_node_hash = bytes32.from_hexstr(reference_node_hash)
|
|
@@ -68,20 +68,20 @@ def process_change(change: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
|
|
71
|
-
def process_change_multistore(update:
|
|
71
|
+
def process_change_multistore(update: dict[str, Any]) -> dict[str, Any]:
|
|
72
72
|
store_id = update.get("store_id")
|
|
73
73
|
if store_id is None:
|
|
74
74
|
raise Exception("Each update must specify a store_id")
|
|
75
75
|
changelist = update.get("changelist")
|
|
76
76
|
if changelist is None:
|
|
77
77
|
raise Exception("Each update must specify a changelist")
|
|
78
|
-
res:
|
|
78
|
+
res: dict[str, Any] = {}
|
|
79
79
|
res["store_id"] = bytes32.from_hexstr(store_id)
|
|
80
80
|
res["changelist"] = [process_change(change) for change in changelist]
|
|
81
81
|
return res
|
|
82
82
|
|
|
83
83
|
|
|
84
|
-
def get_fee(config:
|
|
84
|
+
def get_fee(config: dict[str, Any], request: dict[str, Any]) -> uint64:
|
|
85
85
|
fee = request.get("fee")
|
|
86
86
|
if fee is None:
|
|
87
87
|
fee = 0 # DL no longer reads the fee from the config
|
|
@@ -89,12 +89,17 @@ def get_fee(config: Dict[str, Any], request: Dict[str, Any]) -> uint64:
|
|
|
89
89
|
|
|
90
90
|
|
|
91
91
|
class DataLayerRpcApi:
|
|
92
|
+
if TYPE_CHECKING:
|
|
93
|
+
from chia.rpc.rpc_server import RpcApiProtocol
|
|
94
|
+
|
|
95
|
+
_protocol_check: ClassVar[RpcApiProtocol] = cast("DataLayerRpcApi", None)
|
|
96
|
+
|
|
92
97
|
# TODO: other RPC APIs do not accept a wallet and the service start does not expect to provide one
|
|
93
98
|
def __init__(self, data_layer: DataLayer): # , wallet: DataLayerWallet):
|
|
94
99
|
self.service: DataLayer = data_layer
|
|
95
100
|
self.service_name = "chia_data_layer"
|
|
96
101
|
|
|
97
|
-
def get_routes(self) ->
|
|
102
|
+
def get_routes(self) -> dict[str, Endpoint]:
|
|
98
103
|
return {
|
|
99
104
|
"/wallet_log_in": self.wallet_log_in,
|
|
100
105
|
"/create_data_store": self.create_data_store,
|
|
@@ -133,17 +138,17 @@ class DataLayerRpcApi:
|
|
|
133
138
|
"/verify_proof": self.verify_proof,
|
|
134
139
|
}
|
|
135
140
|
|
|
136
|
-
async def _state_changed(self, change: str, change_data: Optional[
|
|
141
|
+
async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]]) -> list[WsRpcMessage]:
|
|
137
142
|
return []
|
|
138
143
|
|
|
139
|
-
async def wallet_log_in(self, request:
|
|
144
|
+
async def wallet_log_in(self, request: dict[str, Any]) -> EndpointResult:
|
|
140
145
|
if self.service is None:
|
|
141
146
|
raise Exception("Data layer not created")
|
|
142
147
|
fingerprint = cast(int, request["fingerprint"])
|
|
143
148
|
await self.service.wallet_log_in(fingerprint=fingerprint)
|
|
144
149
|
return {}
|
|
145
150
|
|
|
146
|
-
async def create_data_store(self, request:
|
|
151
|
+
async def create_data_store(self, request: dict[str, Any]) -> EndpointResult:
|
|
147
152
|
if self.service is None:
|
|
148
153
|
raise Exception("Data layer not created")
|
|
149
154
|
fee = get_fee(self.service.config, request)
|
|
@@ -154,13 +159,13 @@ class DataLayerRpcApi:
|
|
|
154
159
|
else:
|
|
155
160
|
return {"id": value.hex()}
|
|
156
161
|
|
|
157
|
-
async def get_owned_stores(self, request:
|
|
162
|
+
async def get_owned_stores(self, request: dict[str, Any]) -> EndpointResult:
|
|
158
163
|
if self.service is None:
|
|
159
164
|
raise Exception("Data layer not created")
|
|
160
165
|
singleton_records = await self.service.get_owned_stores()
|
|
161
166
|
return {"store_ids": [singleton.launcher_id.hex() for singleton in singleton_records]}
|
|
162
167
|
|
|
163
|
-
async def get_value(self, request:
|
|
168
|
+
async def get_value(self, request: dict[str, Any]) -> EndpointResult:
|
|
164
169
|
store_id = bytes32.from_hexstr(request["id"])
|
|
165
170
|
key = hexstr_to_bytes(request["key"])
|
|
166
171
|
# NOTE: being outside the rpc, this retains the none-means-unspecified semantics
|
|
@@ -178,7 +183,7 @@ class DataLayerRpcApi:
|
|
|
178
183
|
hex = value.hex()
|
|
179
184
|
return {"value": hex}
|
|
180
185
|
|
|
181
|
-
async def get_keys(self, request:
|
|
186
|
+
async def get_keys(self, request: dict[str, Any]) -> EndpointResult:
|
|
182
187
|
store_id = bytes32.from_hexstr(request["id"])
|
|
183
188
|
# NOTE: being outside the rpc, this retains the none-means-unspecified semantics
|
|
184
189
|
root_hash: Optional[str] = request.get("root_hash")
|
|
@@ -199,7 +204,7 @@ class DataLayerRpcApi:
|
|
|
199
204
|
keys = keys_paginated.keys
|
|
200
205
|
|
|
201
206
|
# NOTE: here we do support zeros as the empty root
|
|
202
|
-
if keys == [] and resolved_root_hash is not unspecified and resolved_root_hash != bytes32
|
|
207
|
+
if keys == [] and resolved_root_hash is not unspecified and resolved_root_hash != bytes32.zeros:
|
|
203
208
|
raise Exception(f"Can't find keys for {resolved_root_hash}")
|
|
204
209
|
|
|
205
210
|
response: EndpointResult = {"keys": [f"0x{key.hex()}" for key in keys]}
|
|
@@ -215,7 +220,7 @@ class DataLayerRpcApi:
|
|
|
215
220
|
|
|
216
221
|
return response
|
|
217
222
|
|
|
218
|
-
async def get_keys_values(self, request:
|
|
223
|
+
async def get_keys_values(self, request: dict[str, Any]) -> EndpointResult:
|
|
219
224
|
store_id = bytes32.from_hexstr(request["id"])
|
|
220
225
|
# NOTE: being outside the rpc, this retains the none-means-unspecified semantics
|
|
221
226
|
root_hash: Optional[str] = request.get("root_hash")
|
|
@@ -239,7 +244,7 @@ class DataLayerRpcApi:
|
|
|
239
244
|
|
|
240
245
|
json_nodes = [recurse_jsonify(dataclasses.asdict(node)) for node in keys_values]
|
|
241
246
|
# NOTE: here we do support zeros as the empty root
|
|
242
|
-
if not json_nodes and resolved_root_hash is not unspecified and resolved_root_hash != bytes32
|
|
247
|
+
if not json_nodes and resolved_root_hash is not unspecified and resolved_root_hash != bytes32.zeros:
|
|
243
248
|
raise Exception(f"Can't find keys and values for {resolved_root_hash}")
|
|
244
249
|
|
|
245
250
|
response: EndpointResult = {"keys_values": json_nodes}
|
|
@@ -255,7 +260,7 @@ class DataLayerRpcApi:
|
|
|
255
260
|
|
|
256
261
|
return response
|
|
257
262
|
|
|
258
|
-
async def get_ancestors(self, request:
|
|
263
|
+
async def get_ancestors(self, request: dict[str, Any]) -> EndpointResult:
|
|
259
264
|
store_id = bytes32.from_hexstr(request["id"])
|
|
260
265
|
node_hash = bytes32.from_hexstr(request["hash"])
|
|
261
266
|
if self.service is None:
|
|
@@ -263,7 +268,7 @@ class DataLayerRpcApi:
|
|
|
263
268
|
value = await self.service.get_ancestors(node_hash, store_id)
|
|
264
269
|
return {"ancestors": value}
|
|
265
270
|
|
|
266
|
-
async def batch_update(self, request:
|
|
271
|
+
async def batch_update(self, request: dict[str, Any]) -> EndpointResult:
|
|
267
272
|
"""
|
|
268
273
|
id - the id of the store we are operating on
|
|
269
274
|
changelist - a list of changes to apply on store
|
|
@@ -285,7 +290,7 @@ class DataLayerRpcApi:
|
|
|
285
290
|
raise Exception("Transaction submitted on chain, but submit_on_chain set to False")
|
|
286
291
|
return {}
|
|
287
292
|
|
|
288
|
-
async def multistore_batch_update(self, request:
|
|
293
|
+
async def multistore_batch_update(self, request: dict[str, Any]) -> EndpointResult:
|
|
289
294
|
fee = get_fee(self.service.config, request)
|
|
290
295
|
store_updates = [process_change_multistore(update) for update in request["store_updates"]]
|
|
291
296
|
submit_on_chain = request.get("submit_on_chain", True)
|
|
@@ -301,18 +306,18 @@ class DataLayerRpcApi:
|
|
|
301
306
|
raise Exception("Transaction submitted on chain, but submit_on_chain set to False")
|
|
302
307
|
return {}
|
|
303
308
|
|
|
304
|
-
async def submit_pending_root(self, request:
|
|
309
|
+
async def submit_pending_root(self, request: dict[str, Any]) -> EndpointResult:
|
|
305
310
|
store_id = bytes32.from_hexstr(request["id"])
|
|
306
311
|
fee = get_fee(self.service.config, request)
|
|
307
312
|
transaction_record = await self.service.submit_pending_root(store_id, uint64(fee))
|
|
308
313
|
return {"tx_id": transaction_record.name}
|
|
309
314
|
|
|
310
|
-
async def submit_all_pending_roots(self, request:
|
|
315
|
+
async def submit_all_pending_roots(self, request: dict[str, Any]) -> EndpointResult:
|
|
311
316
|
fee = get_fee(self.service.config, request)
|
|
312
317
|
transaction_records = await self.service.submit_all_pending_roots(uint64(fee))
|
|
313
318
|
return {"tx_id": [transaction_record.name for transaction_record in transaction_records]}
|
|
314
319
|
|
|
315
|
-
async def insert(self, request:
|
|
320
|
+
async def insert(self, request: dict[str, Any]) -> EndpointResult:
|
|
316
321
|
"""
|
|
317
322
|
rows_to_add a list of clvm objects as bytes to add to table
|
|
318
323
|
rows_to_remove a list of row hashes to remove
|
|
@@ -329,7 +334,7 @@ class DataLayerRpcApi:
|
|
|
329
334
|
assert transaction_record is not None
|
|
330
335
|
return {"tx_id": transaction_record.name}
|
|
331
336
|
|
|
332
|
-
async def delete_key(self, request:
|
|
337
|
+
async def delete_key(self, request: dict[str, Any]) -> EndpointResult:
|
|
333
338
|
"""
|
|
334
339
|
rows_to_add a list of clvm objects as bytes to add to table
|
|
335
340
|
rows_to_remove a list of row hashes to remove
|
|
@@ -345,7 +350,7 @@ class DataLayerRpcApi:
|
|
|
345
350
|
assert transaction_record is not None
|
|
346
351
|
return {"tx_id": transaction_record.name}
|
|
347
352
|
|
|
348
|
-
async def get_root(self, request:
|
|
353
|
+
async def get_root(self, request: dict[str, Any]) -> EndpointResult:
|
|
349
354
|
"""get hash of latest tree root"""
|
|
350
355
|
store_id = bytes32.from_hexstr(request["id"])
|
|
351
356
|
# todo input checks
|
|
@@ -356,7 +361,7 @@ class DataLayerRpcApi:
|
|
|
356
361
|
raise Exception(f"Failed to get root for {store_id.hex()}")
|
|
357
362
|
return {"hash": rec.root, "confirmed": rec.confirmed, "timestamp": rec.timestamp}
|
|
358
363
|
|
|
359
|
-
async def get_local_root(self, request:
|
|
364
|
+
async def get_local_root(self, request: dict[str, Any]) -> EndpointResult:
|
|
360
365
|
"""get hash of latest tree root saved in our local datastore"""
|
|
361
366
|
store_id = bytes32.from_hexstr(request["id"])
|
|
362
367
|
# todo input checks
|
|
@@ -365,7 +370,7 @@ class DataLayerRpcApi:
|
|
|
365
370
|
res = await self.service.get_local_root(store_id)
|
|
366
371
|
return {"hash": res}
|
|
367
372
|
|
|
368
|
-
async def get_roots(self, request:
|
|
373
|
+
async def get_roots(self, request: dict[str, Any]) -> EndpointResult:
|
|
369
374
|
"""
|
|
370
375
|
get state hashes for a list of roots
|
|
371
376
|
"""
|
|
@@ -381,7 +386,7 @@ class DataLayerRpcApi:
|
|
|
381
386
|
roots.append({"id": id_bytes, "hash": rec.root, "confirmed": rec.confirmed, "timestamp": rec.timestamp})
|
|
382
387
|
return {"root_hashes": roots}
|
|
383
388
|
|
|
384
|
-
async def subscribe(self, request:
|
|
389
|
+
async def subscribe(self, request: dict[str, Any]) -> EndpointResult:
|
|
385
390
|
"""
|
|
386
391
|
subscribe to singleton
|
|
387
392
|
"""
|
|
@@ -396,7 +401,7 @@ class DataLayerRpcApi:
|
|
|
396
401
|
await self.service.subscribe(store_id=store_id_bytes, urls=urls)
|
|
397
402
|
return {}
|
|
398
403
|
|
|
399
|
-
async def unsubscribe(self, request:
|
|
404
|
+
async def unsubscribe(self, request: dict[str, Any]) -> EndpointResult:
|
|
400
405
|
"""
|
|
401
406
|
unsubscribe from singleton
|
|
402
407
|
"""
|
|
@@ -410,16 +415,16 @@ class DataLayerRpcApi:
|
|
|
410
415
|
await self.service.unsubscribe(store_id_bytes, retain_data)
|
|
411
416
|
return {}
|
|
412
417
|
|
|
413
|
-
async def subscriptions(self, request:
|
|
418
|
+
async def subscriptions(self, request: dict[str, Any]) -> EndpointResult:
|
|
414
419
|
"""
|
|
415
420
|
List current subscriptions
|
|
416
421
|
"""
|
|
417
422
|
if self.service is None:
|
|
418
423
|
raise Exception("Data layer not created")
|
|
419
|
-
subscriptions:
|
|
424
|
+
subscriptions: list[Subscription] = await self.service.get_subscriptions()
|
|
420
425
|
return {"store_ids": [sub.store_id.hex() for sub in subscriptions]}
|
|
421
426
|
|
|
422
|
-
async def remove_subscriptions(self, request:
|
|
427
|
+
async def remove_subscriptions(self, request: dict[str, Any]) -> EndpointResult:
|
|
423
428
|
if self.service is None:
|
|
424
429
|
raise Exception("Data layer not created")
|
|
425
430
|
store_id = request.get("id")
|
|
@@ -430,7 +435,7 @@ class DataLayerRpcApi:
|
|
|
430
435
|
await self.service.remove_subscriptions(store_id=store_id_bytes, urls=urls)
|
|
431
436
|
return {}
|
|
432
437
|
|
|
433
|
-
async def add_missing_files(self, request:
|
|
438
|
+
async def add_missing_files(self, request: dict[str, Any]) -> EndpointResult:
|
|
434
439
|
"""
|
|
435
440
|
complete the data server files.
|
|
436
441
|
"""
|
|
@@ -438,7 +443,7 @@ class DataLayerRpcApi:
|
|
|
438
443
|
store_ids = request["ids"]
|
|
439
444
|
ids_bytes = [bytes32.from_hexstr(id) for id in store_ids]
|
|
440
445
|
else:
|
|
441
|
-
subscriptions:
|
|
446
|
+
subscriptions: list[Subscription] = await self.service.get_subscriptions()
|
|
442
447
|
ids_bytes = [subscription.store_id for subscription in subscriptions]
|
|
443
448
|
overwrite = request.get("overwrite", False)
|
|
444
449
|
foldername: Optional[Path] = None
|
|
@@ -448,7 +453,7 @@ class DataLayerRpcApi:
|
|
|
448
453
|
await self.service.add_missing_files(store_id, overwrite, foldername)
|
|
449
454
|
return {}
|
|
450
455
|
|
|
451
|
-
async def get_root_history(self, request:
|
|
456
|
+
async def get_root_history(self, request: dict[str, Any]) -> EndpointResult:
|
|
452
457
|
"""
|
|
453
458
|
get history of state hashes for a store
|
|
454
459
|
"""
|
|
@@ -457,12 +462,12 @@ class DataLayerRpcApi:
|
|
|
457
462
|
store_id = request["id"]
|
|
458
463
|
id_bytes = bytes32.from_hexstr(store_id)
|
|
459
464
|
records = await self.service.get_root_history(id_bytes)
|
|
460
|
-
res:
|
|
465
|
+
res: list[dict[str, Any]] = []
|
|
461
466
|
for rec in records:
|
|
462
467
|
res.insert(0, {"root_hash": rec.root, "confirmed": rec.confirmed, "timestamp": rec.timestamp})
|
|
463
468
|
return {"root_history": res}
|
|
464
469
|
|
|
465
|
-
async def get_kv_diff(self, request:
|
|
470
|
+
async def get_kv_diff(self, request: dict[str, Any]) -> EndpointResult:
|
|
466
471
|
"""
|
|
467
472
|
get kv diff between two root hashes
|
|
468
473
|
"""
|
|
@@ -476,7 +481,7 @@ class DataLayerRpcApi:
|
|
|
476
481
|
hash_2_bytes = bytes32.from_hexstr(hash_2)
|
|
477
482
|
page = request.get("page", None)
|
|
478
483
|
max_page_size = request.get("max_page_size", None)
|
|
479
|
-
res:
|
|
484
|
+
res: list[dict[str, Any]] = []
|
|
480
485
|
|
|
481
486
|
if page is None:
|
|
482
487
|
records_dict = await self.service.get_kv_diff(id_bytes, hash_1_bytes, hash_2_bytes)
|
|
@@ -501,7 +506,7 @@ class DataLayerRpcApi:
|
|
|
501
506
|
|
|
502
507
|
return response
|
|
503
508
|
|
|
504
|
-
async def add_mirror(self, request:
|
|
509
|
+
async def add_mirror(self, request: dict[str, Any]) -> EndpointResult:
|
|
505
510
|
store_id = request["id"]
|
|
506
511
|
id_bytes = bytes32.from_hexstr(store_id)
|
|
507
512
|
urls = request["urls"]
|
|
@@ -510,17 +515,17 @@ class DataLayerRpcApi:
|
|
|
510
515
|
await self.service.add_mirror(id_bytes, urls, amount, fee)
|
|
511
516
|
return {}
|
|
512
517
|
|
|
513
|
-
async def delete_mirror(self, request:
|
|
518
|
+
async def delete_mirror(self, request: dict[str, Any]) -> EndpointResult:
|
|
514
519
|
coin_id = request["coin_id"]
|
|
515
520
|
coin_id_bytes = bytes32.from_hexstr(coin_id)
|
|
516
521
|
fee = get_fee(self.service.config, request)
|
|
517
522
|
await self.service.delete_mirror(coin_id_bytes, fee)
|
|
518
523
|
return {}
|
|
519
524
|
|
|
520
|
-
async def get_mirrors(self, request:
|
|
525
|
+
async def get_mirrors(self, request: dict[str, Any]) -> EndpointResult:
|
|
521
526
|
store_id = request["id"]
|
|
522
527
|
id_bytes = bytes32.from_hexstr(store_id)
|
|
523
|
-
mirrors:
|
|
528
|
+
mirrors: list[Mirror] = await self.service.get_mirrors(id_bytes)
|
|
524
529
|
return {"mirrors": [mirror.to_json_dict() for mirror in mirrors]}
|
|
525
530
|
|
|
526
531
|
@marshal() # type: ignore[arg-type]
|
|
@@ -566,7 +571,7 @@ class DataLayerRpcApi:
|
|
|
566
571
|
|
|
567
572
|
return CancelOfferResponse(success=True)
|
|
568
573
|
|
|
569
|
-
async def get_sync_status(self, request:
|
|
574
|
+
async def get_sync_status(self, request: dict[str, Any]) -> EndpointResult:
|
|
570
575
|
store_id = request["id"]
|
|
571
576
|
id_bytes = bytes32.from_hexstr(store_id)
|
|
572
577
|
if self.service is None:
|
|
@@ -582,7 +587,7 @@ class DataLayerRpcApi:
|
|
|
582
587
|
}
|
|
583
588
|
}
|
|
584
589
|
|
|
585
|
-
async def check_plugins(self, request:
|
|
590
|
+
async def check_plugins(self, request: dict[str, Any]) -> EndpointResult:
|
|
586
591
|
if self.service is None:
|
|
587
592
|
raise Exception("Data layer not created")
|
|
588
593
|
plugin_status = await self.service.check_plugins()
|
|
@@ -601,7 +606,7 @@ class DataLayerRpcApi:
|
|
|
601
606
|
if root is None:
|
|
602
607
|
raise ValueError("no root")
|
|
603
608
|
|
|
604
|
-
all_proofs:
|
|
609
|
+
all_proofs: list[HashOnlyProof] = []
|
|
605
610
|
for key in request.keys:
|
|
606
611
|
node = await self.service.data_store.get_node_by_key(store_id=request.store_id, key=key)
|
|
607
612
|
pi = await self.service.data_store.get_proof_of_inclusion_by_hash(
|