chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/README.md +1 -1
- chia/_tests/blockchain/blockchain_test_utils.py +24 -26
- chia/_tests/blockchain/test_augmented_chain.py +6 -8
- chia/_tests/blockchain/test_blockchain.py +409 -307
- chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
- chia/_tests/blockchain/test_build_chains.py +11 -13
- chia/_tests/blockchain/test_get_block_generator.py +8 -8
- chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
- chia/_tests/build-init-files.py +3 -4
- chia/_tests/build-job-matrix.py +9 -9
- chia/_tests/check_sql_statements.py +2 -3
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +7 -5
- chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
- chia/_tests/clvm/test_condition_codes.py +2 -2
- chia/_tests/clvm/test_curry_and_treehash.py +2 -4
- chia/_tests/clvm/test_message_conditions.py +184 -0
- chia/_tests/clvm/test_puzzle_compression.py +1 -2
- chia/_tests/clvm/test_puzzle_drivers.py +3 -3
- chia/_tests/clvm/test_puzzles.py +13 -18
- chia/_tests/clvm/test_singletons.py +17 -17
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +42 -45
- chia/_tests/cmds/conftest.py +2 -2
- chia/_tests/cmds/test_click_types.py +21 -16
- chia/_tests/cmds/test_cmd_framework.py +255 -35
- chia/_tests/cmds/test_cmds_util.py +2 -2
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_dev_gh.py +131 -0
- chia/_tests/cmds/test_farm_cmd.py +1 -2
- chia/_tests/cmds/test_show.py +6 -6
- chia/_tests/cmds/test_tx_config_args.py +2 -1
- chia/_tests/cmds/wallet/test_dao.py +23 -23
- chia/_tests/cmds/wallet/test_did.py +29 -29
- chia/_tests/cmds/wallet/test_nft.py +24 -23
- chia/_tests/cmds/wallet/test_notifications.py +8 -8
- chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
- chia/_tests/cmds/wallet/test_vcs.py +97 -73
- chia/_tests/cmds/wallet/test_wallet.py +74 -75
- chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
- chia/_tests/conftest.py +153 -38
- chia/_tests/connection_utils.py +7 -6
- chia/_tests/core/cmds/test_beta.py +3 -3
- chia/_tests/core/cmds/test_keys.py +6 -6
- chia/_tests/core/cmds/test_wallet.py +3 -3
- chia/_tests/core/consensus/test_block_creation.py +3 -5
- chia/_tests/core/custom_types/test_coin.py +1 -3
- chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
- chia/_tests/core/daemon/test_daemon.py +58 -58
- chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
- chia/_tests/core/data_layer/conftest.py +4 -3
- chia/_tests/core/data_layer/test_data_cli.py +1 -2
- chia/_tests/core/data_layer/test_data_layer.py +5 -5
- chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
- chia/_tests/core/data_layer/test_data_rpc.py +75 -93
- chia/_tests/core/data_layer/test_data_store.py +38 -37
- chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
- chia/_tests/core/data_layer/util.py +11 -10
- chia/_tests/core/farmer/test_farmer_api.py +6 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
- chia/_tests/core/full_node/ram_db.py +2 -2
- chia/_tests/core/full_node/stores/test_block_store.py +113 -11
- chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
- chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
- chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
- chia/_tests/core/full_node/test_address_manager.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +1 -1
- chia/_tests/core/full_node/test_conditions.py +10 -12
- chia/_tests/core/full_node/test_full_node.py +2077 -1822
- chia/_tests/core/full_node/test_generator_tools.py +4 -4
- chia/_tests/core/full_node/test_hint_management.py +2 -2
- chia/_tests/core/full_node/test_performance.py +2 -5
- chia/_tests/core/full_node/test_subscriptions.py +4 -4
- chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
- chia/_tests/core/make_block_generator.py +5 -7
- chia/_tests/core/mempool/test_mempool.py +205 -208
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
- chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
- chia/_tests/core/mempool/test_mempool_manager.py +109 -80
- chia/_tests/core/mempool/test_mempool_performance.py +3 -4
- chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
- chia/_tests/core/server/flood.py +6 -4
- chia/_tests/core/server/serve.py +10 -7
- chia/_tests/core/server/test_api_protocol.py +21 -0
- chia/_tests/core/server/test_capabilities.py +3 -5
- chia/_tests/core/server/test_dos.py +15 -16
- chia/_tests/core/server/test_loop.py +14 -10
- chia/_tests/core/server/test_node_discovery.py +1 -2
- chia/_tests/core/server/test_rate_limits.py +156 -44
- chia/_tests/core/server/test_server.py +8 -7
- chia/_tests/core/services/test_services.py +59 -37
- chia/_tests/core/ssl/test_ssl.py +5 -3
- chia/_tests/core/test_cost_calculation.py +5 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_db_conversion.py +5 -4
- chia/_tests/core/test_db_validation.py +6 -5
- chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
- chia/_tests/core/test_filter.py +3 -5
- chia/_tests/core/test_full_node_rpc.py +64 -90
- chia/_tests/core/test_merkle_set.py +10 -10
- chia/_tests/core/test_program.py +2 -4
- chia/_tests/core/test_rpc_util.py +1 -2
- chia/_tests/core/test_seeder.py +124 -12
- chia/_tests/core/util/test_block_cache.py +5 -5
- chia/_tests/core/util/test_cached_bls.py +3 -3
- chia/_tests/core/util/test_config.py +13 -13
- chia/_tests/core/util/test_files.py +2 -2
- chia/_tests/core/util/test_jsonify.py +9 -9
- chia/_tests/core/util/test_keychain.py +13 -5
- chia/_tests/core/util/test_keyring_wrapper.py +6 -5
- chia/_tests/core/util/test_log_exceptions.py +3 -3
- chia/_tests/core/util/test_streamable.py +38 -38
- chia/_tests/db/test_db_wrapper.py +13 -12
- chia/_tests/environments/common.py +2 -2
- chia/_tests/environments/full_node.py +2 -2
- chia/_tests/environments/wallet.py +109 -48
- chia/_tests/farmer_harvester/test_farmer.py +35 -35
- chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
- chia/_tests/generator/test_compression.py +13 -30
- chia/_tests/generator/test_generator_types.py +3 -3
- chia/_tests/generator/test_rom.py +7 -9
- chia/_tests/plot_sync/test_delta.py +2 -3
- chia/_tests/plot_sync/test_plot_sync.py +25 -24
- chia/_tests/plot_sync/test_receiver.py +9 -9
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +27 -26
- chia/_tests/plot_sync/util.py +2 -1
- chia/_tests/plotting/test_plot_manager.py +54 -11
- chia/_tests/plotting/util.py +2 -3
- chia/_tests/pools/test_pool_cli_parsing.py +128 -0
- chia/_tests/pools/test_pool_cmdline.py +993 -15
- chia/_tests/pools/test_pool_config.py +3 -5
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
- chia/_tests/pools/test_pool_rpc.py +203 -90
- chia/_tests/pools/test_pool_wallet.py +12 -8
- chia/_tests/pools/test_wallet_pool_store.py +3 -3
- chia/_tests/process_junit.py +16 -17
- chia/_tests/rpc/test_rpc_client.py +59 -2
- chia/_tests/rpc/test_rpc_server.py +183 -0
- chia/_tests/simulation/test_simulation.py +5 -5
- chia/_tests/simulation/test_simulator.py +8 -10
- chia/_tests/simulation/test_start_simulator.py +5 -4
- chia/_tests/timelord/test_new_peak.py +19 -19
- chia/_tests/tools/test_run_block.py +1 -2
- chia/_tests/tools/test_virtual_project.py +591 -0
- chia/_tests/util/benchmark_cost.py +9 -9
- chia/_tests/util/benchmarks.py +1 -2
- chia/_tests/util/blockchain.py +12 -11
- chia/_tests/util/blockchain_mock.py +15 -15
- chia/_tests/util/build_network_protocol_files.py +12 -12
- chia/_tests/util/db_connection.py +3 -2
- chia/_tests/util/full_sync.py +14 -6
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/generator_tools_testing.py +5 -7
- chia/_tests/util/get_name_puzzle_conditions.py +52 -0
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +59 -106
- chia/_tests/util/network_protocol_data.py +7 -9
- chia/_tests/util/protocol_messages_json.py +112 -111
- chia/_tests/util/rpc.py +3 -0
- chia/_tests/util/run_block.py +16 -16
- chia/_tests/util/setup_nodes.py +25 -23
- chia/{clvm → _tests/util}/spend_sim.py +59 -55
- chia/_tests/util/split_managers.py +12 -9
- chia/_tests/util/temp_file.py +1 -1
- chia/_tests/util/test_action_scope.py +2 -1
- chia/_tests/util/test_async_pool.py +8 -8
- chia/_tests/util/test_build_job_matrix.py +2 -3
- chia/_tests/util/test_condition_tools.py +4 -6
- chia/_tests/util/test_config.py +5 -5
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +19 -11
- chia/_tests/util/test_limited_semaphore.py +4 -3
- chia/_tests/util/test_logging_filter.py +2 -3
- chia/_tests/util/test_misc.py +29 -28
- chia/_tests/util/test_network.py +32 -31
- chia/_tests/util/test_network_protocol_files.py +2 -3
- chia/_tests/util/test_network_protocol_json.py +1 -0
- chia/_tests/util/test_network_protocol_test.py +18 -19
- chia/_tests/util/test_paginator.py +3 -4
- chia/_tests/util/test_pprint.py +1 -1
- chia/_tests/util/test_priority_mutex.py +18 -17
- chia/_tests/util/test_recursive_replace.py +2 -2
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/test_timing.py +1 -1
- chia/_tests/util/test_trusted_peer.py +2 -2
- chia/_tests/util/time_out_assert.py +43 -6
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
- chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
- chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
- chia/_tests/wallet/conftest.py +135 -74
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
- chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
- chia/_tests/wallet/did_wallet/test_did.py +1277 -474
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
- chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
- chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
- chia/_tests/wallet/test_address_type.py +20 -20
- chia/_tests/wallet/test_clvm_streamable.py +5 -5
- chia/_tests/wallet/test_coin_management.py +354 -0
- chia/_tests/wallet/test_coin_selection.py +34 -35
- chia/_tests/wallet/test_conditions.py +28 -16
- chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
- chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
- chia/_tests/wallet/test_nft_store.py +1 -2
- chia/_tests/wallet/test_notifications.py +2 -2
- chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
- chia/_tests/wallet/test_puzzle_store.py +2 -3
- chia/_tests/wallet/test_sign_coin_spends.py +3 -3
- chia/_tests/wallet/test_signer_protocol.py +33 -34
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
- chia/_tests/wallet/test_taproot.py +1 -1
- chia/_tests/wallet/test_transaction_store.py +23 -19
- chia/_tests/wallet/test_util.py +36 -32
- chia/_tests/wallet/test_wallet.py +37 -37
- chia/_tests/wallet/test_wallet_action_scope.py +8 -8
- chia/_tests/wallet/test_wallet_blockchain.py +4 -6
- chia/_tests/wallet/test_wallet_coin_store.py +34 -34
- chia/_tests/wallet/test_wallet_node.py +69 -72
- chia/_tests/wallet/test_wallet_retry.py +3 -3
- chia/_tests/wallet/test_wallet_state_manager.py +12 -5
- chia/_tests/wallet/test_wallet_trade_store.py +2 -2
- chia/_tests/wallet/test_wallet_utils.py +5 -4
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
- chia/_tests/wallet/wallet_block_tools.py +27 -27
- chia/_tests/weight_proof/test_weight_proof.py +30 -30
- chia/apis.py +19 -0
- chia/cmds/beta.py +8 -7
- chia/cmds/beta_funcs.py +15 -11
- chia/cmds/check_wallet_db.py +29 -27
- chia/cmds/chia.py +17 -9
- chia/cmds/cmd_classes.py +87 -79
- chia/cmds/cmd_helpers.py +242 -0
- chia/cmds/cmds_util.py +56 -66
- chia/cmds/coin_funcs.py +168 -153
- chia/cmds/coins.py +156 -194
- chia/cmds/configure.py +4 -3
- chia/cmds/dao.py +89 -33
- chia/cmds/dao_funcs.py +55 -33
- chia/cmds/data.py +7 -6
- chia/cmds/data_funcs.py +26 -21
- chia/cmds/db.py +4 -3
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev.py +2 -0
- chia/cmds/farm.py +18 -5
- chia/cmds/farm_funcs.py +17 -24
- chia/cmds/gh.py +275 -0
- chia/cmds/init.py +4 -11
- chia/cmds/init_funcs.py +9 -9
- chia/cmds/installers.py +5 -3
- chia/cmds/keys.py +56 -39
- chia/cmds/keys_funcs.py +30 -31
- chia/cmds/netspace.py +6 -3
- chia/cmds/netspace_funcs.py +3 -2
- chia/cmds/param_types.py +16 -6
- chia/cmds/passphrase.py +8 -7
- chia/cmds/passphrase_funcs.py +7 -61
- chia/cmds/peer.py +2 -1
- chia/cmds/peer_funcs.py +5 -5
- chia/cmds/plotnft.py +207 -153
- chia/cmds/plotnft_funcs.py +205 -174
- chia/cmds/plots.py +14 -6
- chia/cmds/plotters.py +2 -1
- chia/cmds/rpc.py +48 -28
- chia/cmds/show.py +2 -1
- chia/cmds/show_funcs.py +7 -6
- chia/cmds/signer.py +50 -58
- chia/cmds/sim.py +22 -14
- chia/cmds/sim_funcs.py +11 -11
- chia/cmds/start.py +3 -3
- chia/cmds/start_funcs.py +9 -12
- chia/cmds/stop.py +4 -3
- chia/cmds/units.py +1 -3
- chia/cmds/wallet.py +252 -96
- chia/cmds/wallet_funcs.py +217 -143
- chia/consensus/block_body_validation.py +133 -86
- chia/consensus/block_creation.py +42 -21
- chia/consensus/block_header_validation.py +32 -37
- chia/consensus/block_record.py +1 -2
- chia/consensus/blockchain.py +167 -180
- chia/consensus/blockchain_interface.py +10 -10
- chia/consensus/constants.py +2 -2
- chia/consensus/default_constants.py +3 -4
- chia/consensus/difficulty_adjustment.py +5 -5
- chia/consensus/find_fork_point.py +5 -5
- chia/consensus/full_block_to_block_record.py +4 -4
- chia/consensus/get_block_challenge.py +2 -2
- chia/consensus/get_block_generator.py +4 -3
- chia/consensus/multiprocess_validation.py +207 -304
- chia/consensus/vdf_info_computation.py +3 -3
- chia/daemon/client.py +46 -27
- chia/daemon/keychain_proxy.py +10 -9
- chia/daemon/keychain_server.py +18 -18
- chia/daemon/server.py +103 -113
- chia/daemon/windows_signal.py +2 -2
- chia/data_layer/data_layer.py +64 -76
- chia/data_layer/data_layer_api.py +8 -0
- chia/data_layer/data_layer_errors.py +3 -3
- chia/data_layer/data_layer_server.py +2 -2
- chia/data_layer/data_layer_util.py +71 -71
- chia/data_layer/data_layer_wallet.py +63 -67
- chia/data_layer/data_store.py +72 -72
- chia/data_layer/dl_wallet_store.py +10 -10
- chia/data_layer/download_data.py +5 -5
- chia/data_layer/s3_plugin_service.py +9 -9
- chia/data_layer/util/benchmark.py +0 -1
- chia/data_layer/util/plugin.py +2 -3
- chia/farmer/farmer.py +46 -43
- chia/farmer/farmer_api.py +27 -21
- chia/full_node/block_height_map.py +6 -6
- chia/full_node/block_store.py +41 -35
- chia/full_node/coin_store.py +42 -41
- chia/full_node/fee_estimate.py +2 -2
- chia/full_node/fee_estimation.py +1 -2
- chia/full_node/fee_history.py +5 -6
- chia/full_node/fee_tracker.py +24 -24
- chia/full_node/full_node.py +574 -300
- chia/full_node/full_node_api.py +181 -130
- chia/full_node/full_node_store.py +43 -43
- chia/full_node/hint_management.py +4 -4
- chia/full_node/hint_store.py +9 -10
- chia/full_node/mempool.py +25 -19
- chia/full_node/mempool_check_conditions.py +11 -42
- chia/full_node/mempool_manager.py +48 -53
- chia/full_node/pending_tx_cache.py +9 -9
- chia/full_node/subscriptions.py +23 -24
- chia/full_node/sync_store.py +8 -7
- chia/full_node/tx_processing_queue.py +3 -3
- chia/full_node/util/__init__.py +0 -0
- chia/full_node/weight_proof.py +79 -78
- chia/harvester/harvester.py +9 -8
- chia/harvester/harvester_api.py +19 -13
- chia/introducer/introducer.py +7 -5
- chia/introducer/introducer_api.py +9 -3
- chia/legacy/keyring.py +6 -5
- chia/plot_sync/delta.py +8 -8
- chia/plot_sync/receiver.py +12 -11
- chia/plot_sync/sender.py +15 -12
- chia/plotters/bladebit.py +12 -12
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +8 -8
- chia/plotters/plotters.py +6 -6
- chia/plotters/plotters_util.py +6 -4
- chia/plotting/cache.py +8 -7
- chia/plotting/check_plots.py +8 -8
- chia/plotting/create_plots.py +6 -6
- chia/plotting/manager.py +22 -22
- chia/plotting/util.py +31 -19
- chia/pools/pool_config.py +7 -7
- chia/pools/pool_puzzles.py +16 -16
- chia/pools/pool_wallet.py +64 -57
- chia/pools/pool_wallet_info.py +3 -3
- chia/protocols/full_node_protocol.py +3 -3
- chia/protocols/harvester_protocol.py +12 -12
- chia/protocols/introducer_protocol.py +1 -2
- chia/protocols/protocol_message_types.py +4 -4
- chia/protocols/protocol_state_machine.py +2 -2
- chia/protocols/protocol_timing.py +1 -0
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +2 -2
- chia/protocols/wallet_protocol.py +33 -33
- chia/rpc/crawler_rpc_api.py +12 -7
- chia/rpc/data_layer_rpc_api.py +49 -44
- chia/rpc/data_layer_rpc_client.py +41 -41
- chia/rpc/data_layer_rpc_util.py +7 -11
- chia/rpc/farmer_rpc_api.py +32 -27
- chia/rpc/farmer_rpc_client.py +14 -14
- chia/rpc/full_node_rpc_api.py +53 -48
- chia/rpc/full_node_rpc_client.py +30 -30
- chia/rpc/harvester_rpc_api.py +16 -11
- chia/rpc/harvester_rpc_client.py +6 -6
- chia/rpc/rpc_client.py +34 -14
- chia/rpc/rpc_server.py +117 -43
- chia/rpc/timelord_rpc_api.py +9 -4
- chia/rpc/util.py +11 -211
- chia/rpc/wallet_request_types.py +276 -60
- chia/rpc/wallet_rpc_api.py +563 -399
- chia/rpc/wallet_rpc_client.py +220 -250
- chia/seeder/crawl_store.py +6 -8
- chia/seeder/crawler.py +23 -36
- chia/seeder/crawler_api.py +28 -22
- chia/seeder/dns_server.py +99 -50
- chia/seeder/start_crawler.py +13 -9
- chia/server/address_manager.py +19 -19
- chia/server/address_manager_store.py +17 -17
- chia/server/api_protocol.py +106 -1
- chia/server/capabilities.py +3 -3
- chia/server/chia_policy.py +17 -16
- chia/server/introducer_peers.py +3 -3
- chia/server/node_discovery.py +34 -38
- chia/server/rate_limit_numbers.py +26 -16
- chia/server/rate_limits.py +67 -27
- chia/server/server.py +52 -31
- chia/server/signal_handlers.py +6 -3
- chia/server/ssl_context.py +5 -5
- chia/server/start_data_layer.py +37 -23
- chia/server/start_farmer.py +28 -16
- chia/server/start_full_node.py +29 -23
- chia/server/start_harvester.py +28 -15
- chia/server/start_introducer.py +27 -15
- chia/server/start_service.py +17 -29
- chia/server/start_timelord.py +25 -18
- chia/server/start_wallet.py +22 -18
- chia/server/upnp.py +4 -3
- chia/server/ws_connection.py +68 -54
- chia/simulator/add_blocks_in_batches.py +54 -0
- chia/simulator/block_tools.py +65 -64
- chia/simulator/full_node_simulator.py +66 -74
- chia/simulator/setup_services.py +10 -9
- chia/simulator/simulator_full_node_rpc_api.py +12 -14
- chia/simulator/simulator_full_node_rpc_client.py +3 -5
- chia/simulator/simulator_test_tools.py +8 -7
- chia/simulator/socket.py +1 -4
- chia/simulator/ssl_certs.py +5 -5
- chia/simulator/ssl_certs_1.py +2 -4
- chia/simulator/ssl_certs_10.py +2 -4
- chia/simulator/ssl_certs_2.py +2 -4
- chia/simulator/ssl_certs_3.py +2 -4
- chia/simulator/ssl_certs_4.py +2 -4
- chia/simulator/ssl_certs_5.py +2 -4
- chia/simulator/ssl_certs_6.py +2 -4
- chia/simulator/ssl_certs_7.py +2 -4
- chia/simulator/ssl_certs_8.py +2 -4
- chia/simulator/ssl_certs_9.py +2 -4
- chia/simulator/start_simulator.py +14 -6
- chia/simulator/wallet_tools.py +21 -20
- chia/ssl/create_ssl.py +11 -11
- chia/timelord/iters_from_block.py +2 -2
- chia/timelord/timelord.py +57 -33
- chia/timelord/timelord_api.py +12 -6
- chia/timelord/timelord_launcher.py +10 -8
- chia/timelord/timelord_state.py +5 -5
- chia/types/block_protocol.py +2 -2
- chia/types/blockchain_format/coin.py +3 -3
- chia/types/blockchain_format/program.py +17 -18
- chia/types/blockchain_format/tree_hash.py +9 -9
- chia/types/coin_spend.py +8 -8
- chia/types/condition_with_args.py +1 -2
- chia/types/eligible_coin_spends.py +16 -15
- chia/types/generator_types.py +1 -2
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +7 -7
- chia/types/mempool_submission_status.py +2 -2
- chia/types/peer_info.py +1 -1
- chia/types/spend_bundle.py +1 -2
- chia/types/transaction_queue_entry.py +2 -2
- chia/types/unfinished_header_block.py +2 -2
- chia/types/validation_state.py +14 -0
- chia/types/weight_proof.py +5 -6
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +6 -4
- chia/util/augmented_chain.py +13 -9
- chia/util/batches.py +5 -2
- chia/util/bech32m.py +14 -11
- chia/util/beta_metrics.py +5 -4
- chia/util/block_cache.py +5 -5
- chia/util/byte_types.py +2 -0
- chia/util/check_fork_next_block.py +3 -2
- chia/util/chia_logging.py +41 -21
- chia/util/collection.py +3 -3
- chia/util/condition_tools.py +18 -18
- chia/util/config.py +26 -25
- chia/util/cpu.py +2 -0
- chia/util/db_synchronous.py +2 -0
- chia/util/db_version.py +2 -0
- chia/util/db_wrapper.py +13 -10
- chia/util/default_root.py +17 -0
- chia/util/dump_keyring.py +6 -6
- chia/util/errors.py +5 -3
- chia/util/file_keyring.py +22 -33
- chia/util/files.py +2 -0
- chia/util/full_block_utils.py +31 -7
- chia/util/generator_tools.py +18 -8
- chia/util/hash.py +3 -1
- chia/util/initial-config.yaml +19 -0
- chia/util/inline_executor.py +2 -0
- chia/util/ip_address.py +39 -0
- chia/util/json_util.py +0 -4
- chia/util/keychain.py +27 -24
- chia/util/keyring_wrapper.py +65 -4
- chia/util/limited_semaphore.py +3 -1
- chia/util/lock.py +4 -2
- chia/util/log_exceptions.py +5 -2
- chia/util/logging.py +3 -1
- chia/util/lru_cache.py +2 -0
- chia/util/math.py +4 -4
- chia/util/network.py +15 -73
- chia/util/paginator.py +3 -1
- chia/util/path.py +2 -0
- chia/util/permissions.py +3 -2
- chia/util/prev_transaction_block.py +1 -3
- chia/util/priority_mutex.py +6 -3
- chia/util/profiler.py +7 -4
- chia/util/recursive_replace.py +2 -0
- chia/util/safe_cancel_task.py +2 -0
- chia/util/service_groups.py +2 -2
- chia/util/setproctitle.py +2 -0
- chia/util/significant_bits.py +2 -0
- chia/util/ssl_check.py +11 -11
- chia/util/streamable.py +44 -56
- chia/util/task_referencer.py +59 -0
- chia/util/task_timing.py +22 -18
- chia/util/timing.py +4 -1
- chia/util/vdf_prover.py +2 -3
- chia/util/virtual_project_analysis.py +540 -0
- chia/util/ws_message.py +6 -6
- chia/wallet/cat_wallet/cat_info.py +3 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
- chia/wallet/cat_wallet/cat_utils.py +5 -4
- chia/wallet/cat_wallet/cat_wallet.py +56 -70
- chia/wallet/cat_wallet/dao_cat_info.py +3 -3
- chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
- chia/wallet/cat_wallet/lineage_store.py +2 -2
- chia/wallet/coin_selection.py +15 -15
- chia/wallet/conditions.py +257 -71
- chia/wallet/dao_wallet/dao_info.py +4 -4
- chia/wallet/dao_wallet/dao_utils.py +43 -42
- chia/wallet/dao_wallet/dao_wallet.py +66 -68
- chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
- chia/wallet/derive_keys.py +11 -11
- chia/wallet/did_wallet/did_info.py +3 -3
- chia/wallet/did_wallet/did_wallet.py +56 -47
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/nft_info.py +4 -4
- chia/wallet/nft_wallet/nft_puzzles.py +16 -16
- chia/wallet/nft_wallet/nft_wallet.py +90 -89
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
- chia/wallet/nft_wallet/uncurry_nft.py +2 -2
- chia/wallet/notification_manager.py +5 -5
- chia/wallet/notification_store.py +6 -6
- chia/wallet/outer_puzzles.py +2 -2
- chia/wallet/payment.py +4 -5
- chia/wallet/puzzle_drivers.py +4 -4
- chia/wallet/puzzles/clawback/drivers.py +5 -5
- chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
- chia/wallet/puzzles/load_clvm.py +2 -3
- chia/wallet/puzzles/p2_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
- chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
- chia/wallet/puzzles/puzzle_utils.py +7 -7
- chia/wallet/puzzles/singleton_top_layer.py +6 -5
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
- chia/wallet/puzzles/tails.py +34 -30
- chia/wallet/signer_protocol.py +7 -8
- chia/wallet/singleton.py +4 -4
- chia/wallet/trade_manager.py +155 -141
- chia/wallet/trade_record.py +5 -5
- chia/wallet/trading/offer.py +100 -101
- chia/wallet/trading/trade_store.py +14 -14
- chia/wallet/transaction_record.py +31 -16
- chia/wallet/util/address_type.py +4 -4
- chia/wallet/util/blind_signer_tl.py +8 -12
- chia/wallet/util/clvm_streamable.py +15 -15
- chia/wallet/util/compute_hints.py +5 -5
- chia/wallet/util/compute_memos.py +4 -6
- chia/wallet/util/curry_and_treehash.py +3 -2
- chia/wallet/util/debug_spend_bundle.py +6 -8
- chia/wallet/util/merkle_tree.py +10 -10
- chia/wallet/util/merkle_utils.py +10 -10
- chia/wallet/util/new_peak_queue.py +3 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/{util → wallet/util}/pprint.py +2 -3
- chia/wallet/util/puzzle_compression.py +3 -4
- chia/wallet/util/puzzle_decorator.py +10 -10
- chia/wallet/util/query_filter.py +9 -10
- chia/wallet/util/tx_config.py +12 -12
- chia/wallet/util/wallet_sync_utils.py +24 -21
- chia/wallet/util/wallet_types.py +9 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
- chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
- chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
- chia/wallet/vc_wallet/vc_drivers.py +16 -16
- chia/wallet/vc_wallet/vc_store.py +9 -9
- chia/wallet/vc_wallet/vc_wallet.py +35 -35
- chia/wallet/wallet.py +54 -54
- chia/wallet/wallet_action_scope.py +14 -13
- chia/wallet/wallet_blockchain.py +10 -10
- chia/wallet/wallet_coin_record.py +2 -2
- chia/wallet/wallet_coin_store.py +10 -10
- chia/wallet/wallet_info.py +1 -2
- chia/wallet/wallet_interested_store.py +5 -5
- chia/wallet/wallet_nft_store.py +6 -6
- chia/wallet/wallet_node.py +72 -76
- chia/wallet/wallet_node_api.py +33 -27
- chia/wallet/wallet_pool_store.py +1 -2
- chia/wallet/wallet_protocol.py +15 -15
- chia/wallet/wallet_puzzle_store.py +35 -4
- chia/wallet/wallet_retry_store.py +2 -2
- chia/wallet/wallet_singleton_store.py +10 -9
- chia/wallet/wallet_spend_bundle.py +4 -20
- chia/wallet/wallet_state_manager.py +223 -224
- chia/wallet/wallet_transaction_store.py +44 -18
- chia/wallet/wallet_user_store.py +2 -2
- chia/wallet/wallet_weight_proof_handler.py +2 -2
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
- mozilla-ca/cacert.pem +32 -87
- chia/_tests/cmds/wallet/test_coins.py +0 -195
- chia/consensus/block_root_validation.py +0 -46
- chia/util/api_decorators.py +0 -89
- chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
chia/daemon/windows_signal.py
CHANGED
|
@@ -21,8 +21,8 @@ else:
|
|
|
21
21
|
import threading
|
|
22
22
|
|
|
23
23
|
sigmap = {
|
|
24
|
-
signal.SIGINT: signal.CTRL_C_EVENT,
|
|
25
|
-
signal.SIGBREAK: signal.CTRL_BREAK_EVENT,
|
|
24
|
+
signal.SIGINT: signal.CTRL_C_EVENT,
|
|
25
|
+
signal.SIGBREAK: signal.CTRL_BREAK_EVENT,
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
def kill(pid: int, signum: signal.Signals) -> None:
|
chia/data_layer/data_layer.py
CHANGED
|
@@ -10,22 +10,9 @@ import os
|
|
|
10
10
|
import random
|
|
11
11
|
import time
|
|
12
12
|
import traceback
|
|
13
|
+
from collections.abc import AsyncIterator, Awaitable
|
|
13
14
|
from pathlib import Path
|
|
14
|
-
from typing import
|
|
15
|
-
TYPE_CHECKING,
|
|
16
|
-
Any,
|
|
17
|
-
AsyncIterator,
|
|
18
|
-
Awaitable,
|
|
19
|
-
ClassVar,
|
|
20
|
-
Dict,
|
|
21
|
-
List,
|
|
22
|
-
Optional,
|
|
23
|
-
Set,
|
|
24
|
-
Tuple,
|
|
25
|
-
Union,
|
|
26
|
-
cast,
|
|
27
|
-
final,
|
|
28
|
-
)
|
|
15
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Optional, Union, cast, final
|
|
29
16
|
|
|
30
17
|
import aiohttp
|
|
31
18
|
|
|
@@ -76,13 +63,14 @@ from chia.types.blockchain_format.sized_bytes import bytes32
|
|
|
76
63
|
from chia.util.async_pool import Job, QueuedAsyncPool
|
|
77
64
|
from chia.util.ints import uint32, uint64
|
|
78
65
|
from chia.util.path import path_from_root
|
|
66
|
+
from chia.util.task_referencer import create_referenced_task
|
|
79
67
|
from chia.wallet.trade_record import TradeRecord
|
|
80
68
|
from chia.wallet.trading.offer import Offer as TradingOffer
|
|
81
69
|
from chia.wallet.transaction_record import TransactionRecord
|
|
82
70
|
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
|
|
83
71
|
|
|
84
72
|
|
|
85
|
-
async def get_plugin_info(plugin_remote: PluginRemote) ->
|
|
73
|
+
async def get_plugin_info(plugin_remote: PluginRemote) -> tuple[PluginRemote, dict[str, Any]]:
|
|
86
74
|
try:
|
|
87
75
|
async with aiohttp.ClientSession() as session:
|
|
88
76
|
async with session.post(
|
|
@@ -107,17 +95,17 @@ class DataLayer:
|
|
|
107
95
|
_protocol_check: ClassVar[RpcServiceProtocol] = cast("DataLayer", None)
|
|
108
96
|
|
|
109
97
|
db_path: Path
|
|
110
|
-
config:
|
|
98
|
+
config: dict[str, Any]
|
|
111
99
|
root_path: Path
|
|
112
100
|
log: logging.Logger
|
|
113
101
|
wallet_rpc_init: Awaitable[WalletRpcClient]
|
|
114
|
-
downloaders:
|
|
115
|
-
uploaders:
|
|
102
|
+
downloaders: list[PluginRemote]
|
|
103
|
+
uploaders: list[PluginRemote]
|
|
116
104
|
maximum_full_file_count: int
|
|
117
105
|
server_files_location: Path
|
|
118
|
-
unsubscribe_data_queue:
|
|
106
|
+
unsubscribe_data_queue: list[UnsubscribeData]
|
|
119
107
|
_server: Optional[ChiaServer] = None
|
|
120
|
-
none_bytes: bytes32 = bytes32
|
|
108
|
+
none_bytes: bytes32 = bytes32.zeros
|
|
121
109
|
initialized: bool = False
|
|
122
110
|
_data_store: Optional[DataStore] = None
|
|
123
111
|
state_changed_callback: Optional[StateChangedProtocol] = None
|
|
@@ -161,11 +149,11 @@ class DataLayer:
|
|
|
161
149
|
@classmethod
|
|
162
150
|
def create(
|
|
163
151
|
cls,
|
|
164
|
-
config:
|
|
152
|
+
config: dict[str, Any],
|
|
165
153
|
root_path: Path,
|
|
166
154
|
wallet_rpc_init: Awaitable[WalletRpcClient],
|
|
167
|
-
downloaders:
|
|
168
|
-
uploaders:
|
|
155
|
+
downloaders: list[PluginRemote],
|
|
156
|
+
uploaders: list[PluginRemote], # dont add FilesystemUploader to this, it is the default uploader
|
|
169
157
|
name: Optional[str] = None,
|
|
170
158
|
) -> DataLayer:
|
|
171
159
|
if name == "":
|
|
@@ -213,7 +201,7 @@ class DataLayer:
|
|
|
213
201
|
self._wallet_rpc = await self.wallet_rpc_init
|
|
214
202
|
|
|
215
203
|
await self._data_store.migrate_db()
|
|
216
|
-
self.periodically_manage_data_task =
|
|
204
|
+
self.periodically_manage_data_task = create_referenced_task(self.periodically_manage_data())
|
|
217
205
|
try:
|
|
218
206
|
yield
|
|
219
207
|
finally:
|
|
@@ -236,7 +224,7 @@ class DataLayer:
|
|
|
236
224
|
async def on_connect(self, connection: WSChiaConnection) -> None:
|
|
237
225
|
pass
|
|
238
226
|
|
|
239
|
-
def get_connections(self, request_node_type: Optional[NodeType]) ->
|
|
227
|
+
def get_connections(self, request_node_type: Optional[NodeType]) -> list[dict[str, Any]]:
|
|
240
228
|
return default_get_connections(server=self.server, request_node_type=request_node_type)
|
|
241
229
|
|
|
242
230
|
def set_server(self, server: ChiaServer) -> None:
|
|
@@ -250,9 +238,7 @@ class DataLayer:
|
|
|
250
238
|
|
|
251
239
|
return result.fingerprint
|
|
252
240
|
|
|
253
|
-
async def create_store(
|
|
254
|
-
self, fee: uint64, root: bytes32 = bytes32([0] * 32)
|
|
255
|
-
) -> Tuple[List[TransactionRecord], bytes32]:
|
|
241
|
+
async def create_store(self, fee: uint64, root: bytes32 = bytes32.zeros) -> tuple[list[TransactionRecord], bytes32]:
|
|
256
242
|
txs, store_id = await self.wallet_rpc.create_new_dl(root, fee)
|
|
257
243
|
res = await self.data_store.create_tree(store_id=store_id)
|
|
258
244
|
if res is None:
|
|
@@ -263,7 +249,7 @@ class DataLayer:
|
|
|
263
249
|
async def batch_update(
|
|
264
250
|
self,
|
|
265
251
|
store_id: bytes32,
|
|
266
|
-
changelist:
|
|
252
|
+
changelist: list[dict[str, Any]],
|
|
267
253
|
fee: uint64,
|
|
268
254
|
submit_on_chain: bool = True,
|
|
269
255
|
) -> Optional[TransactionRecord]:
|
|
@@ -287,11 +273,11 @@ class DataLayer:
|
|
|
287
273
|
|
|
288
274
|
async def multistore_batch_update(
|
|
289
275
|
self,
|
|
290
|
-
store_updates:
|
|
276
|
+
store_updates: list[dict[str, Any]],
|
|
291
277
|
fee: uint64,
|
|
292
278
|
submit_on_chain: bool = True,
|
|
293
|
-
) ->
|
|
294
|
-
store_ids:
|
|
279
|
+
) -> list[TransactionRecord]:
|
|
280
|
+
store_ids: set[bytes32] = set()
|
|
295
281
|
for update in store_updates:
|
|
296
282
|
store_id = update["store_id"]
|
|
297
283
|
changelist = update["changelist"]
|
|
@@ -306,7 +292,7 @@ class DataLayer:
|
|
|
306
292
|
await self.data_store.clean_node_table()
|
|
307
293
|
|
|
308
294
|
if submit_on_chain:
|
|
309
|
-
update_dictionary:
|
|
295
|
+
update_dictionary: dict[bytes32, bytes32] = {}
|
|
310
296
|
for store_id in store_ids:
|
|
311
297
|
await self._update_confirmation_status(store_id=store_id)
|
|
312
298
|
root_hash = await self._get_publishable_root_hash(store_id=store_id)
|
|
@@ -332,9 +318,9 @@ class DataLayer:
|
|
|
332
318
|
await self.data_store.change_root_status(pending_root, Status.PENDING)
|
|
333
319
|
return await self.publish_update(store_id, fee)
|
|
334
320
|
|
|
335
|
-
async def submit_all_pending_roots(self, fee: uint64) ->
|
|
321
|
+
async def submit_all_pending_roots(self, fee: uint64) -> list[TransactionRecord]:
|
|
336
322
|
pending_roots = await self.data_store.get_all_pending_batches_roots()
|
|
337
|
-
update_dictionary:
|
|
323
|
+
update_dictionary: dict[bytes32, bytes32] = {}
|
|
338
324
|
if len(pending_roots) == 0:
|
|
339
325
|
raise Exception("No pending roots found to submit")
|
|
340
326
|
for pending_root in pending_roots:
|
|
@@ -347,7 +333,7 @@ class DataLayer:
|
|
|
347
333
|
async def batch_insert(
|
|
348
334
|
self,
|
|
349
335
|
store_id: bytes32,
|
|
350
|
-
changelist:
|
|
336
|
+
changelist: list[dict[str, Any]],
|
|
351
337
|
status: Status = Status.PENDING,
|
|
352
338
|
enable_batch_autoinsert: Optional[bool] = None,
|
|
353
339
|
) -> bytes32:
|
|
@@ -359,7 +345,7 @@ class DataLayer:
|
|
|
359
345
|
raise Exception("Already have a pending root waiting for confirmation.")
|
|
360
346
|
|
|
361
347
|
# check before any DL changes that this singleton is currently owned by this wallet
|
|
362
|
-
singleton_records:
|
|
348
|
+
singleton_records: list[SingletonRecord] = await self.get_owned_stores()
|
|
363
349
|
if not any(store_id == singleton.launcher_id for singleton in singleton_records):
|
|
364
350
|
raise ValueError(f"Singleton with launcher ID {store_id} is not owned by DL Wallet")
|
|
365
351
|
|
|
@@ -417,7 +403,7 @@ class DataLayer:
|
|
|
417
403
|
self,
|
|
418
404
|
store_id: bytes32,
|
|
419
405
|
root_hash: Union[bytes32, Unspecified],
|
|
420
|
-
) ->
|
|
406
|
+
) -> list[TerminalNode]:
|
|
421
407
|
await self._update_confirmation_status(store_id=store_id)
|
|
422
408
|
|
|
423
409
|
res = await self.data_store.get_keys_values(store_id, root_hash)
|
|
@@ -439,7 +425,7 @@ class DataLayer:
|
|
|
439
425
|
res = await self.data_store.get_keys_values_paginated(store_id, page, max_page_size, root_hash)
|
|
440
426
|
return res
|
|
441
427
|
|
|
442
|
-
async def get_keys(self, store_id: bytes32, root_hash: Union[bytes32, Unspecified]) ->
|
|
428
|
+
async def get_keys(self, store_id: bytes32, root_hash: Union[bytes32, Unspecified]) -> list[bytes]:
|
|
443
429
|
await self._update_confirmation_status(store_id=store_id)
|
|
444
430
|
|
|
445
431
|
res = await self.data_store.get_keys(store_id, root_hash)
|
|
@@ -459,7 +445,7 @@ class DataLayer:
|
|
|
459
445
|
res = await self.data_store.get_keys_paginated(store_id, page, max_page_size, root_hash)
|
|
460
446
|
return res
|
|
461
447
|
|
|
462
|
-
async def get_ancestors(self, node_hash: bytes32, store_id: bytes32) ->
|
|
448
|
+
async def get_ancestors(self, node_hash: bytes32, store_id: bytes32) -> list[InternalNode]:
|
|
463
449
|
await self._update_confirmation_status(store_id=store_id)
|
|
464
450
|
|
|
465
451
|
res = await self.data_store.get_ancestors(node_hash=node_hash, store_id=store_id)
|
|
@@ -482,7 +468,7 @@ class DataLayer:
|
|
|
482
468
|
return None
|
|
483
469
|
return res.node_hash
|
|
484
470
|
|
|
485
|
-
async def get_root_history(self, store_id: bytes32) ->
|
|
471
|
+
async def get_root_history(self, store_id: bytes32) -> list[SingletonRecord]:
|
|
486
472
|
records = await self.wallet_rpc.dl_history(store_id)
|
|
487
473
|
if records is None:
|
|
488
474
|
self.log.error(f"Failed to get root history for {store_id.hex()}")
|
|
@@ -793,7 +779,7 @@ class DataLayer:
|
|
|
793
779
|
else:
|
|
794
780
|
self.log.debug(f"uploaded to uploader {uploader}")
|
|
795
781
|
|
|
796
|
-
async def subscribe(self, store_id: bytes32, urls:
|
|
782
|
+
async def subscribe(self, store_id: bytes32, urls: list[str]) -> Subscription:
|
|
797
783
|
parsed_urls = [url.rstrip("/") for url in urls]
|
|
798
784
|
subscription = Subscription(store_id, [ServerInfo(url, 0, 0) for url in parsed_urls])
|
|
799
785
|
await self.wallet_rpc.dl_track_new(subscription.store_id)
|
|
@@ -802,7 +788,7 @@ class DataLayer:
|
|
|
802
788
|
self.log.info(f"Done adding subscription: {subscription.store_id}")
|
|
803
789
|
return subscription
|
|
804
790
|
|
|
805
|
-
async def remove_subscriptions(self, store_id: bytes32, urls:
|
|
791
|
+
async def remove_subscriptions(self, store_id: bytes32, urls: list[str]) -> None:
|
|
806
792
|
parsed_urls = [url.rstrip("/") for url in urls]
|
|
807
793
|
async with self.subscription_lock:
|
|
808
794
|
await self.data_store.remove_subscriptions(store_id, parsed_urls)
|
|
@@ -821,7 +807,7 @@ class DataLayer:
|
|
|
821
807
|
subscriptions = await self.data_store.get_subscriptions()
|
|
822
808
|
if store_id not in (subscription.store_id for subscription in subscriptions):
|
|
823
809
|
raise RuntimeError("No subscription found for the given store_id.")
|
|
824
|
-
paths:
|
|
810
|
+
paths: list[Path] = []
|
|
825
811
|
if await self.data_store.store_id_exists(store_id) and not retain_data:
|
|
826
812
|
generation = await self.data_store.get_tree_generation(store_id)
|
|
827
813
|
all_roots = await self.data_store.get_roots_between(store_id, 1, generation + 1)
|
|
@@ -860,11 +846,11 @@ class DataLayer:
|
|
|
860
846
|
except FileNotFoundError:
|
|
861
847
|
pass
|
|
862
848
|
|
|
863
|
-
async def get_subscriptions(self) ->
|
|
849
|
+
async def get_subscriptions(self) -> list[Subscription]:
|
|
864
850
|
async with self.subscription_lock:
|
|
865
851
|
return await self.data_store.get_subscriptions()
|
|
866
852
|
|
|
867
|
-
async def add_mirror(self, store_id: bytes32, urls:
|
|
853
|
+
async def add_mirror(self, store_id: bytes32, urls: list[str], amount: uint64, fee: uint64) -> None:
|
|
868
854
|
if not urls:
|
|
869
855
|
raise RuntimeError("URL list can't be empty")
|
|
870
856
|
bytes_urls = [bytes(url, "utf8") for url in urls]
|
|
@@ -873,22 +859,22 @@ class DataLayer:
|
|
|
873
859
|
async def delete_mirror(self, coin_id: bytes32, fee: uint64) -> None:
|
|
874
860
|
await self.wallet_rpc.dl_delete_mirror(coin_id, fee)
|
|
875
861
|
|
|
876
|
-
async def get_mirrors(self, store_id: bytes32) ->
|
|
877
|
-
mirrors:
|
|
862
|
+
async def get_mirrors(self, store_id: bytes32) -> list[Mirror]:
|
|
863
|
+
mirrors: list[Mirror] = await self.wallet_rpc.dl_get_mirrors(store_id)
|
|
878
864
|
return [mirror for mirror in mirrors if mirror.urls]
|
|
879
865
|
|
|
880
866
|
async def update_subscriptions_from_wallet(self, store_id: bytes32) -> None:
|
|
881
|
-
mirrors:
|
|
882
|
-
urls:
|
|
867
|
+
mirrors: list[Mirror] = await self.wallet_rpc.dl_get_mirrors(store_id)
|
|
868
|
+
urls: list[str] = []
|
|
883
869
|
for mirror in mirrors:
|
|
884
|
-
urls
|
|
870
|
+
urls += [url.decode("utf8") for url in mirror.urls]
|
|
885
871
|
urls = [url.rstrip("/") for url in urls]
|
|
886
872
|
await self.data_store.update_subscriptions_from_wallet(store_id, urls)
|
|
887
873
|
|
|
888
|
-
async def get_owned_stores(self) ->
|
|
874
|
+
async def get_owned_stores(self) -> list[SingletonRecord]:
|
|
889
875
|
return await self.wallet_rpc.dl_owned_singletons()
|
|
890
876
|
|
|
891
|
-
async def get_kv_diff(self, store_id: bytes32, hash_1: bytes32, hash_2: bytes32) ->
|
|
877
|
+
async def get_kv_diff(self, store_id: bytes32, hash_1: bytes32, hash_2: bytes32) -> set[DiffData]:
|
|
892
878
|
return await self.data_store.get_kv_diff(store_id, hash_1, hash_2)
|
|
893
879
|
|
|
894
880
|
async def get_kv_diff_paginated(
|
|
@@ -935,10 +921,14 @@ class DataLayer:
|
|
|
935
921
|
# Need this to make sure we process updates and generate DAT files
|
|
936
922
|
try:
|
|
937
923
|
owned_stores = await self.get_owned_stores()
|
|
938
|
-
except ValueError:
|
|
924
|
+
except (ValueError, aiohttp.client_exceptions.ClientConnectorError):
|
|
939
925
|
# Sometimes the DL wallet isn't available, so we can't get the owned stores.
|
|
940
926
|
# We'll try again next time.
|
|
941
927
|
owned_stores = []
|
|
928
|
+
except Exception as e:
|
|
929
|
+
self.log.error(f"Exception while fetching owned stores: {type(e)} {e} {traceback.format_exc()}")
|
|
930
|
+
owned_stores = []
|
|
931
|
+
|
|
942
932
|
subscription_store_ids = {subscription.store_id for subscription in subscriptions}
|
|
943
933
|
for record in owned_stores:
|
|
944
934
|
store_id = record.launcher_id
|
|
@@ -1006,10 +996,10 @@ class DataLayer:
|
|
|
1006
996
|
async def build_offer_changelist(
|
|
1007
997
|
self,
|
|
1008
998
|
store_id: bytes32,
|
|
1009
|
-
inclusions:
|
|
1010
|
-
) ->
|
|
999
|
+
inclusions: tuple[KeyValue, ...],
|
|
1000
|
+
) -> list[dict[str, Any]]:
|
|
1011
1001
|
async with self.data_store.transaction():
|
|
1012
|
-
changelist:
|
|
1002
|
+
changelist: list[dict[str, Any]] = []
|
|
1013
1003
|
for entry in inclusions:
|
|
1014
1004
|
try:
|
|
1015
1005
|
existing_value = await self.get_value(store_id=store_id, key=entry.key)
|
|
@@ -1039,12 +1029,12 @@ class DataLayer:
|
|
|
1039
1029
|
|
|
1040
1030
|
return changelist
|
|
1041
1031
|
|
|
1042
|
-
async def process_offered_stores(self, offer_stores:
|
|
1032
|
+
async def process_offered_stores(self, offer_stores: tuple[OfferStore, ...]) -> dict[bytes32, StoreProofs]:
|
|
1043
1033
|
for offer_store in offer_stores:
|
|
1044
1034
|
await self._update_confirmation_status(store_id=offer_store.store_id)
|
|
1045
1035
|
|
|
1046
1036
|
async with self.data_store.transaction():
|
|
1047
|
-
our_store_proofs:
|
|
1037
|
+
our_store_proofs: dict[bytes32, StoreProofs] = {}
|
|
1048
1038
|
for offer_store in offer_stores:
|
|
1049
1039
|
changelist = await self.build_offer_changelist(
|
|
1050
1040
|
store_id=offer_store.store_id,
|
|
@@ -1066,7 +1056,7 @@ class DataLayer:
|
|
|
1066
1056
|
if new_root_hash is None:
|
|
1067
1057
|
raise Exception("only inserts are supported so a None root hash should not be possible")
|
|
1068
1058
|
|
|
1069
|
-
proofs:
|
|
1059
|
+
proofs: list[Proof] = []
|
|
1070
1060
|
for entry in offer_store.inclusions:
|
|
1071
1061
|
node_hash = await self.get_key_value_hash(
|
|
1072
1062
|
store_id=offer_store.store_id,
|
|
@@ -1098,21 +1088,20 @@ class DataLayer:
|
|
|
1098
1088
|
|
|
1099
1089
|
async def make_offer(
|
|
1100
1090
|
self,
|
|
1101
|
-
maker:
|
|
1102
|
-
taker:
|
|
1091
|
+
maker: tuple[OfferStore, ...],
|
|
1092
|
+
taker: tuple[OfferStore, ...],
|
|
1103
1093
|
fee: uint64,
|
|
1104
1094
|
) -> Offer:
|
|
1105
1095
|
async with self.data_store.transaction():
|
|
1106
1096
|
our_store_proofs = await self.process_offered_stores(offer_stores=maker)
|
|
1107
1097
|
|
|
1108
|
-
offer_dict:
|
|
1098
|
+
offer_dict: dict[Union[uint32, str], int] = {
|
|
1109
1099
|
**{offer_store.store_id.hex(): -1 for offer_store in maker},
|
|
1110
1100
|
**{offer_store.store_id.hex(): 1 for offer_store in taker},
|
|
1111
1101
|
}
|
|
1112
1102
|
|
|
1113
|
-
solver:
|
|
1114
|
-
"0x"
|
|
1115
|
-
+ our_offer_store.store_id.hex(): {
|
|
1103
|
+
solver: dict[str, Any] = {
|
|
1104
|
+
"0x" + our_offer_store.store_id.hex(): {
|
|
1116
1105
|
"new_root": "0x" + our_store_proofs[our_offer_store.store_id].proofs[0].root().hex(),
|
|
1117
1106
|
"dependencies": [
|
|
1118
1107
|
{
|
|
@@ -1158,8 +1147,8 @@ class DataLayer:
|
|
|
1158
1147
|
async def take_offer(
|
|
1159
1148
|
self,
|
|
1160
1149
|
offer_bytes: bytes,
|
|
1161
|
-
taker:
|
|
1162
|
-
maker:
|
|
1150
|
+
taker: tuple[OfferStore, ...],
|
|
1151
|
+
maker: tuple[StoreProofs, ...],
|
|
1163
1152
|
fee: uint64,
|
|
1164
1153
|
) -> TradeRecord:
|
|
1165
1154
|
async with self.data_store.transaction():
|
|
@@ -1170,10 +1159,10 @@ class DataLayer:
|
|
|
1170
1159
|
|
|
1171
1160
|
verify_offer(maker=maker, taker=taker, summary=summary)
|
|
1172
1161
|
|
|
1173
|
-
all_store_proofs:
|
|
1162
|
+
all_store_proofs: dict[bytes32, StoreProofs] = {
|
|
1174
1163
|
store_proofs.proofs[0].root(): store_proofs for store_proofs in [*maker, *our_store_proofs.values()]
|
|
1175
1164
|
}
|
|
1176
|
-
proofs_of_inclusion:
|
|
1165
|
+
proofs_of_inclusion: list[tuple[str, str, list[str]]] = []
|
|
1177
1166
|
for root, store_proofs in all_store_proofs.items():
|
|
1178
1167
|
for proof in store_proofs.proofs:
|
|
1179
1168
|
layers = [
|
|
@@ -1194,11 +1183,10 @@ class DataLayer:
|
|
|
1194
1183
|
)
|
|
1195
1184
|
)
|
|
1196
1185
|
|
|
1197
|
-
solver:
|
|
1186
|
+
solver: dict[str, Any] = {
|
|
1198
1187
|
"proofs_of_inclusion": proofs_of_inclusion,
|
|
1199
1188
|
**{
|
|
1200
|
-
"0x"
|
|
1201
|
-
+ our_offer_store.store_id.hex(): {
|
|
1189
|
+
"0x" + our_offer_store.store_id.hex(): {
|
|
1202
1190
|
"new_root": "0x" + root.hex(),
|
|
1203
1191
|
"dependencies": [
|
|
1204
1192
|
{
|
|
@@ -1232,7 +1220,7 @@ class DataLayer:
|
|
|
1232
1220
|
return trade_record
|
|
1233
1221
|
|
|
1234
1222
|
async def cancel_offer(self, trade_id: bytes32, secure: bool, fee: uint64) -> None:
|
|
1235
|
-
store_ids:
|
|
1223
|
+
store_ids: list[bytes32] = []
|
|
1236
1224
|
|
|
1237
1225
|
if not secure:
|
|
1238
1226
|
trade_record = await self.wallet_rpc.get_offer(trade_id=trade_id, file_contents=True)
|
|
@@ -1270,7 +1258,7 @@ class DataLayer:
|
|
|
1270
1258
|
target_generation=singleton_record.generation,
|
|
1271
1259
|
)
|
|
1272
1260
|
|
|
1273
|
-
async def get_uploaders(self, store_id: bytes32) ->
|
|
1261
|
+
async def get_uploaders(self, store_id: bytes32) -> list[PluginRemote]:
|
|
1274
1262
|
uploaders = []
|
|
1275
1263
|
for uploader in self.uploaders:
|
|
1276
1264
|
async with aiohttp.ClientSession() as session:
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
+
from typing import TYPE_CHECKING, ClassVar, cast
|
|
4
5
|
|
|
5
6
|
from chia.data_layer.data_layer import DataLayer
|
|
7
|
+
from chia.server.api_protocol import ApiMetadata
|
|
6
8
|
from chia.server.server import ChiaServer
|
|
7
9
|
|
|
8
10
|
|
|
9
11
|
class DataLayerAPI:
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from chia.server.api_protocol import ApiProtocol
|
|
14
|
+
|
|
15
|
+
_protocol_check: ClassVar[ApiProtocol] = cast("DataLayerAPI", None)
|
|
16
|
+
|
|
10
17
|
log: logging.Logger
|
|
11
18
|
data_layer: DataLayer
|
|
19
|
+
metadata: ClassVar[ApiMetadata] = ApiMetadata()
|
|
12
20
|
|
|
13
21
|
def __init__(self, data_layer: DataLayer) -> None:
|
|
14
22
|
self.log = logging.getLogger(__name__)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Iterable
|
|
4
4
|
|
|
5
5
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ def build_message_with_hashes(message: str, bytes_objects: Iterable[bytes]) -> s
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class TreeGenerationIncrementingError(IntegrityError):
|
|
17
|
-
def __init__(self, store_ids:
|
|
17
|
+
def __init__(self, store_ids: list[bytes32]) -> None:
|
|
18
18
|
super().__init__(
|
|
19
19
|
build_message_with_hashes(
|
|
20
20
|
message="Found trees with generations not properly incrementing:",
|
|
@@ -24,7 +24,7 @@ class TreeGenerationIncrementingError(IntegrityError):
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class NodeHashError(IntegrityError):
|
|
27
|
-
def __init__(self, node_hashes:
|
|
27
|
+
def __init__(self, node_hashes: list[bytes32]) -> None:
|
|
28
28
|
super().__init__(
|
|
29
29
|
build_message_with_hashes(
|
|
30
30
|
message="Found nodes with incorrect hashes:",
|
|
@@ -7,7 +7,7 @@ import sys
|
|
|
7
7
|
from dataclasses import dataclass, field
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
from types import FrameType
|
|
10
|
-
from typing import Any,
|
|
10
|
+
from typing import Any, Optional
|
|
11
11
|
|
|
12
12
|
import click
|
|
13
13
|
from aiohttp import web
|
|
@@ -35,7 +35,7 @@ log = logging.getLogger(__name__)
|
|
|
35
35
|
@dataclass
|
|
36
36
|
class DataLayerServer:
|
|
37
37
|
root_path: Path
|
|
38
|
-
config:
|
|
38
|
+
config: dict[str, Any]
|
|
39
39
|
log: logging.Logger
|
|
40
40
|
shutdown_event: asyncio.Event
|
|
41
41
|
webserver: Optional[WebServer] = None
|