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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
-
from typing import Any,
|
|
4
|
+
from typing import Any, Optional
|
|
5
5
|
|
|
6
6
|
from chia.protocols.wallet_protocol import CoinState
|
|
7
7
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
@@ -13,15 +13,15 @@ from chia.util.lru_cache import LRUCache
|
|
|
13
13
|
|
|
14
14
|
class PeerRequestCache:
|
|
15
15
|
_blocks: LRUCache[uint32, HeaderBlock] # height -> HeaderBlock
|
|
16
|
-
_block_requests: LRUCache[
|
|
16
|
+
_block_requests: LRUCache[tuple[uint32, uint32], asyncio.Task[Any]] # (start, end) -> Task
|
|
17
17
|
_states_validated: LRUCache[bytes32, Optional[uint32]] # coin state hash -> last change height, or None for reorg
|
|
18
18
|
_timestamps: LRUCache[uint32, uint64] # block height -> timestamp
|
|
19
19
|
_blocks_validated: LRUCache[bytes32, uint32] # header_hash -> height
|
|
20
20
|
_block_signatures_validated: LRUCache[bytes32, uint32] # sig_hash -> height
|
|
21
|
-
_additions_in_block: LRUCache[
|
|
21
|
+
_additions_in_block: LRUCache[tuple[bytes32, bytes32], uint32] # header_hash, puzzle_hash -> height
|
|
22
22
|
# The wallet gets the state update before receiving the block. In untrusted mode the block is required for the
|
|
23
23
|
# coin state validation, so we cache them before we apply them once we received the block.
|
|
24
|
-
_race_cache:
|
|
24
|
+
_race_cache: dict[uint32, set[CoinState]]
|
|
25
25
|
|
|
26
26
|
def __init__(self) -> None:
|
|
27
27
|
self._blocks = LRUCache(100)
|
|
@@ -91,7 +91,7 @@ class PeerRequestCache:
|
|
|
91
91
|
def in_additions_in_block(self, header_hash: bytes32, addition_ph: bytes32) -> bool:
|
|
92
92
|
return self._additions_in_block.get((header_hash, addition_ph)) is not None
|
|
93
93
|
|
|
94
|
-
def add_states_to_race_cache(self, coin_states:
|
|
94
|
+
def add_states_to_race_cache(self, coin_states: list[CoinState]) -> None:
|
|
95
95
|
for coin_state in coin_states:
|
|
96
96
|
created_height = 0 if coin_state.created_height is None else coin_state.created_height
|
|
97
97
|
spent_height = 0 if coin_state.spent_height is None else coin_state.spent_height
|
|
@@ -99,7 +99,7 @@ class PeerRequestCache:
|
|
|
99
99
|
race_cache = self._race_cache.setdefault(max_height, set())
|
|
100
100
|
race_cache.add(coin_state)
|
|
101
101
|
|
|
102
|
-
def get_race_cache(self, height: int) ->
|
|
102
|
+
def get_race_cache(self, height: int) -> set[CoinState]:
|
|
103
103
|
return self._race_cache[uint32(height)]
|
|
104
104
|
|
|
105
105
|
def rollback_race_cache(self, *, fork_height: int) -> None:
|
|
@@ -120,7 +120,7 @@ class PeerRequestCache:
|
|
|
120
120
|
new_blocks.put(k, v)
|
|
121
121
|
self._blocks = new_blocks
|
|
122
122
|
|
|
123
|
-
new_block_requests: LRUCache[
|
|
123
|
+
new_block_requests: LRUCache[tuple[uint32, uint32], asyncio.Task[Any]] = LRUCache(self._block_requests.capacity)
|
|
124
124
|
for (start_h, end_h), fetch_task in self._block_requests.cache.items():
|
|
125
125
|
if start_h <= height and end_h <= height:
|
|
126
126
|
new_block_requests.put((start_h, end_h), fetch_task)
|
|
@@ -150,7 +150,7 @@ class PeerRequestCache:
|
|
|
150
150
|
new_block_signatures_validated.put(sig_hash, h)
|
|
151
151
|
self._block_signatures_validated = new_block_signatures_validated
|
|
152
152
|
|
|
153
|
-
new_additions_in_block: LRUCache[
|
|
153
|
+
new_additions_in_block: LRUCache[tuple[bytes32, bytes32], uint32] = LRUCache(self._additions_in_block.capacity)
|
|
154
154
|
for (hh, ph), h in self._additions_in_block.cache.items():
|
|
155
155
|
if h <= height:
|
|
156
156
|
new_additions_in_block.put((hh, ph), h)
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import List
|
|
5
4
|
|
|
6
5
|
|
|
7
6
|
@dataclass
|
|
@@ -16,7 +15,7 @@ class Range:
|
|
|
16
15
|
return f"{self.first} to {self.last}"
|
|
17
16
|
|
|
18
17
|
|
|
19
|
-
def int_list_to_ranges(array:
|
|
18
|
+
def int_list_to_ranges(array: list[int]) -> list[Range]:
|
|
20
19
|
if len(array) == 0:
|
|
21
20
|
return []
|
|
22
21
|
sorted_array = sorted(array)
|
|
@@ -36,5 +35,5 @@ def int_list_to_ranges(array: List[int]) -> List[Range]:
|
|
|
36
35
|
return ranges
|
|
37
36
|
|
|
38
37
|
|
|
39
|
-
def print_compact_ranges(array:
|
|
38
|
+
def print_compact_ranges(array: list[int]) -> str:
|
|
40
39
|
return str(int_list_to_ranges(array))
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import zlib
|
|
4
|
-
from typing import List
|
|
5
4
|
|
|
6
5
|
from chia.types.blockchain_format.program import Program
|
|
7
6
|
from chia.wallet.cat_wallet.cat_utils import CAT_MOD
|
|
@@ -17,11 +16,11 @@ from chia.wallet.puzzles.load_clvm import load_clvm_maybe_recompile
|
|
|
17
16
|
|
|
18
17
|
# Need the legacy CAT mod for zlib backwards compatibility
|
|
19
18
|
LEGACY_CAT_MOD = Program.fromhex(
|
|
20
|
-
"ff02ffff01ff02ff5effff04ff02ffff04ffff04ff05ffff04ffff0bff2cff0580ffff04ff0bff80808080ffff04ffff02ff17ff2f80ffff04ff5fffff04ffff02ff2effff04ff02ffff04ff17ff80808080ffff04ffff0bff82027fff82057fff820b7f80ffff04ff81bfffff04ff82017fffff04ff8202ffffff04ff8205ffffff04ff820bffff80808080808080808080808080ffff04ffff01ffffffff81ca3dff46ff0233ffff3c04ff01ff0181cbffffff02ff02ffff03ff05ffff01ff02ff32ffff04ff02ffff04ff0dffff04ffff0bff22ffff0bff2cff3480ffff0bff22ffff0bff22ffff0bff2cff5c80ff0980ffff0bff22ff0bffff0bff2cff8080808080ff8080808080ffff010b80ff0180ffff02ffff03ff0bffff01ff02ffff03ffff09ffff02ff2effff04ff02ffff04ff13ff80808080ff820b9f80ffff01ff02ff26ffff04ff02ffff04ffff02ff13ffff04ff5fffff04ff17ffff04ff2fffff04ff81bfffff04ff82017fffff04ff1bff8080808080808080ffff04ff82017fff8080808080ffff01ff088080ff0180ffff01ff02ffff03ff17ffff01ff02ffff03ffff20ff81bf80ffff0182017fffff01ff088080ff0180ffff01ff088080ff018080ff0180ffff04ffff04ff05ff2780ffff04ffff10ff0bff5780ff778080ff02ffff03ff05ffff01ff02ffff03ffff09ffff02ffff03ffff09ff11ff7880ffff0159ff8080ff0180ffff01818f80ffff01ff02ff7affff04ff02ffff04ff0dffff04ff0bffff04ffff04ff81b9ff82017980ff808080808080ffff01ff02ff5affff04ff02ffff04ffff02ffff03ffff09ff11ff7880ffff01ff04ff78ffff04ffff02ff36ffff04ff02ffff04ff13ffff04ff29ffff04ffff0bff2cff5b80ffff04ff2bff80808080808080ff398080ffff01ff02ffff03ffff09ff11ff2480ffff01ff04ff24ffff04ffff0bff20ff2980ff398080ffff010980ff018080ff0180ffff04ffff02ffff03ffff09ff11ff7880ffff0159ff8080ff0180ffff04ffff02ff7affff04ff02ffff04ff0dffff04ff0bffff04ff17ff808080808080ff80808080808080ff0180ffff01ff04ff80ffff04ff80ff17808080ff0180ffffff02ffff03ff05ffff01ff04ff09ffff02ff26ffff04ff02ffff04ff0dffff04ff0bff808080808080ffff010b80ff0180ff0bff22ffff0bff2cff5880ffff0bff22ffff0bff22ffff0bff2cff5c80ff0580ffff0bff22ffff02ff32ffff04ff02ffff04ff07ffff04ffff0bff2cff2c80ff8080808080ffff0bff2cff8080808080ffff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff2effff04ff02ffff04ff09ff80808080ffff02ff2effff04ff02ffff04ff0dff8080808080ffff01ff0bff2cff058080ff0180ffff04ffff04ff28ffff04ff5fff808080ffff02ff7effff04ff02ffff04ffff04ffff04ff2fff0580ffff04ff5fff82017f8080ffff04ffff02ff7affff04ff02ffff04ff0bffff04ff05ffff01ff808080808080ffff04ff17ffff04ff81bfffff04ff82017fffff04ffff0bff8204ffffff02ff36ffff04ff02ffff04ff09ffff04ff820affffff04ffff0bff2cff2d80ffff04ff15ff80808080808080ff8216ff80ffff04ff8205ffffff04ff820bffff808080808080808080808080ff02ff2affff04ff02ffff04ff5fffff04ff3bffff04ffff02ffff03ff17ffff01ff09ff2dffff0bff27ffff02ff36ffff04ff02ffff04ff29ffff04ff57ffff04ffff0bff2cff81b980ffff04ff59ff80808080808080ff81b78080ff8080ff0180ffff04ff17ffff04ff05ffff04ff8202ffffff04ffff04ffff04ff24ffff04ffff0bff7cff2fff82017f80ff808080ffff04ffff04ff30ffff04ffff0bff81bfffff0bff7cff15ffff10ff82017fffff11ff8202dfff2b80ff8202ff808080ff808080ff138080ff80808080808080808080ff018080"
|
|
19
|
+
"ff02ffff01ff02ff5effff04ff02ffff04ffff04ff05ffff04ffff0bff2cff0580ffff04ff0bff80808080ffff04ffff02ff17ff2f80ffff04ff5fffff04ffff02ff2effff04ff02ffff04ff17ff80808080ffff04ffff0bff82027fff82057fff820b7f80ffff04ff81bfffff04ff82017fffff04ff8202ffffff04ff8205ffffff04ff820bffff80808080808080808080808080ffff04ffff01ffffffff81ca3dff46ff0233ffff3c04ff01ff0181cbffffff02ff02ffff03ff05ffff01ff02ff32ffff04ff02ffff04ff0dffff04ffff0bff22ffff0bff2cff3480ffff0bff22ffff0bff22ffff0bff2cff5c80ff0980ffff0bff22ff0bffff0bff2cff8080808080ff8080808080ffff010b80ff0180ffff02ffff03ff0bffff01ff02ffff03ffff09ffff02ff2effff04ff02ffff04ff13ff80808080ff820b9f80ffff01ff02ff26ffff04ff02ffff04ffff02ff13ffff04ff5fffff04ff17ffff04ff2fffff04ff81bfffff04ff82017fffff04ff1bff8080808080808080ffff04ff82017fff8080808080ffff01ff088080ff0180ffff01ff02ffff03ff17ffff01ff02ffff03ffff20ff81bf80ffff0182017fffff01ff088080ff0180ffff01ff088080ff018080ff0180ffff04ffff04ff05ff2780ffff04ffff10ff0bff5780ff778080ff02ffff03ff05ffff01ff02ffff03ffff09ffff02ffff03ffff09ff11ff7880ffff0159ff8080ff0180ffff01818f80ffff01ff02ff7affff04ff02ffff04ff0dffff04ff0bffff04ffff04ff81b9ff82017980ff808080808080ffff01ff02ff5affff04ff02ffff04ffff02ffff03ffff09ff11ff7880ffff01ff04ff78ffff04ffff02ff36ffff04ff02ffff04ff13ffff04ff29ffff04ffff0bff2cff5b80ffff04ff2bff80808080808080ff398080ffff01ff02ffff03ffff09ff11ff2480ffff01ff04ff24ffff04ffff0bff20ff2980ff398080ffff010980ff018080ff0180ffff04ffff02ffff03ffff09ff11ff7880ffff0159ff8080ff0180ffff04ffff02ff7affff04ff02ffff04ff0dffff04ff0bffff04ff17ff808080808080ff80808080808080ff0180ffff01ff04ff80ffff04ff80ff17808080ff0180ffffff02ffff03ff05ffff01ff04ff09ffff02ff26ffff04ff02ffff04ff0dffff04ff0bff808080808080ffff010b80ff0180ff0bff22ffff0bff2cff5880ffff0bff22ffff0bff22ffff0bff2cff5c80ff0580ffff0bff22ffff02ff32ffff04ff02ffff04ff07ffff04ffff0bff2cff2c80ff8080808080ffff0bff2cff8080808080ffff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff2effff04ff02ffff04ff09ff80808080ffff02ff2effff04ff02ffff04ff0dff8080808080ffff01ff0bff2cff058080ff0180ffff04ffff04ff28ffff04ff5fff808080ffff02ff7effff04ff02ffff04ffff04ffff04ff2fff0580ffff04ff5fff82017f8080ffff04ffff02ff7affff04ff02ffff04ff0bffff04ff05ffff01ff808080808080ffff04ff17ffff04ff81bfffff04ff82017fffff04ffff0bff8204ffffff02ff36ffff04ff02ffff04ff09ffff04ff820affffff04ffff0bff2cff2d80ffff04ff15ff80808080808080ff8216ff80ffff04ff8205ffffff04ff820bffff808080808080808080808080ff02ff2affff04ff02ffff04ff5fffff04ff3bffff04ffff02ffff03ff17ffff01ff09ff2dffff0bff27ffff02ff36ffff04ff02ffff04ff29ffff04ff57ffff04ffff0bff2cff81b980ffff04ff59ff80808080808080ff81b78080ff8080ff0180ffff04ff17ffff04ff05ffff04ff8202ffffff04ffff04ffff04ff24ffff04ffff0bff7cff2fff82017f80ff808080ffff04ffff04ff30ffff04ffff0bff81bfffff0bff7cff15ffff10ff82017fffff11ff8202dfff2b80ff8202ff808080ff808080ff138080ff80808080808080808080ff018080"
|
|
21
20
|
)
|
|
22
21
|
|
|
23
22
|
OFFER_MOD_OLD = Program.fromhex(
|
|
24
|
-
"ff02ffff01ff02ff0affff04ff02ffff04ff03ff80808080ffff04ffff01ffff333effff02ffff03ff05ffff01ff04ffff04ff0cffff04ffff02ff1effff04ff02ffff04ff09ff80808080ff808080ffff02ff16ffff04ff02ffff04ff19ffff04ffff02ff0affff04ff02ffff04ff0dff80808080ff808080808080ff8080ff0180ffff02ffff03ff05ffff01ff04ffff04ff08ff0980ffff02ff16ffff04ff02ffff04ff0dffff04ff0bff808080808080ffff010b80ff0180ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff1effff04ff02ffff04ff09ff80808080ffff02ff1effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080"
|
|
23
|
+
"ff02ffff01ff02ff0affff04ff02ffff04ff03ff80808080ffff04ffff01ffff333effff02ffff03ff05ffff01ff04ffff04ff0cffff04ffff02ff1effff04ff02ffff04ff09ff80808080ff808080ffff02ff16ffff04ff02ffff04ff19ffff04ffff02ff0affff04ff02ffff04ff0dff80808080ff808080808080ff8080ff0180ffff02ffff03ff05ffff01ff04ffff04ff08ff0980ffff02ff16ffff04ff02ffff04ff0dffff04ff0bff808080808080ffff010b80ff0180ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff1effff04ff02ffff04ff09ff80808080ffff02ff1effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080"
|
|
25
24
|
)
|
|
26
25
|
OFFER_MOD = load_clvm_maybe_recompile("settlement_payments.clsp")
|
|
27
26
|
|
|
@@ -85,7 +84,7 @@ def compress_object_with_puzzles(object_bytes: bytes, version: int) -> bytes:
|
|
|
85
84
|
return version_blob + compressed_object_blob
|
|
86
85
|
|
|
87
86
|
|
|
88
|
-
def lowest_best_version(puzzle_list:
|
|
87
|
+
def lowest_best_version(puzzle_list: list[bytes], max_version: int = len(ZDICT)) -> int:
|
|
89
88
|
highest_version = 1
|
|
90
89
|
for mod in puzzle_list:
|
|
91
90
|
for version, dict in enumerate(ZDICT):
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import Any
|
|
4
|
+
from typing import Any
|
|
5
5
|
|
|
6
6
|
from typing_extensions import Protocol
|
|
7
7
|
|
|
@@ -14,27 +14,27 @@ from chia.wallet.util.puzzle_decorator_type import PuzzleDecoratorType
|
|
|
14
14
|
|
|
15
15
|
class PuzzleDecoratorProtocol(Protocol):
|
|
16
16
|
@staticmethod
|
|
17
|
-
def create(config:
|
|
17
|
+
def create(config: dict[str, Any]) -> PuzzleDecoratorProtocol: ...
|
|
18
18
|
|
|
19
19
|
def decorate(self, inner_puzzle: Program) -> Program: ...
|
|
20
20
|
|
|
21
21
|
def decorate_target_puzzle_hash(
|
|
22
22
|
self, inner_puzzle: Program, target_puzzle_hash: bytes32
|
|
23
|
-
) ->
|
|
23
|
+
) -> tuple[Program, bytes32]: ...
|
|
24
24
|
|
|
25
25
|
def decorate_memos(
|
|
26
|
-
self, inner_puzzle: Program, target_puzzle_hash: bytes32, memos:
|
|
27
|
-
) ->
|
|
26
|
+
self, inner_puzzle: Program, target_puzzle_hash: bytes32, memos: list[bytes]
|
|
27
|
+
) -> tuple[Program, list[bytes]]: ...
|
|
28
28
|
|
|
29
|
-
def solve(self, puzzle: Program, primaries:
|
|
29
|
+
def solve(self, puzzle: Program, primaries: list[Payment], inner_solution: Program) -> tuple[Program, Program]: ...
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class PuzzleDecoratorManager:
|
|
33
|
-
decorator_list:
|
|
33
|
+
decorator_list: list[PuzzleDecoratorProtocol]
|
|
34
34
|
log: logging.Logger
|
|
35
35
|
|
|
36
36
|
@staticmethod
|
|
37
|
-
def create(config:
|
|
37
|
+
def create(config: list[dict[str, Any]]) -> PuzzleDecoratorManager:
|
|
38
38
|
"""
|
|
39
39
|
Create a new puzzle decorator manager
|
|
40
40
|
:param config: Config
|
|
@@ -75,7 +75,7 @@ class PuzzleDecoratorManager:
|
|
|
75
75
|
inner_puzzle, target_puzzle_hash = decorator.decorate_target_puzzle_hash(inner_puzzle, target_puzzle_hash)
|
|
76
76
|
return target_puzzle_hash
|
|
77
77
|
|
|
78
|
-
def solve(self, inner_puzzle: Program, primaries:
|
|
78
|
+
def solve(self, inner_puzzle: Program, primaries: list[Payment], inner_solution: Program) -> Program:
|
|
79
79
|
"""
|
|
80
80
|
Generate the solution of the puzzle
|
|
81
81
|
:param inner_puzzle: Inner puzzle
|
|
@@ -87,7 +87,7 @@ class PuzzleDecoratorManager:
|
|
|
87
87
|
inner_puzzle, inner_solution = decorator.solve(inner_puzzle, primaries, inner_solution)
|
|
88
88
|
return inner_solution
|
|
89
89
|
|
|
90
|
-
def decorate_memos(self, inner_puzzle: Program, target_puzzle_hash: bytes32, memos:
|
|
90
|
+
def decorate_memos(self, inner_puzzle: Program, target_puzzle_hash: bytes32, memos: list[bytes]) -> list[bytes]:
|
|
91
91
|
"""
|
|
92
92
|
Decorate a memo list
|
|
93
93
|
:param inner_puzzle: Inner puzzle
|
chia/wallet/util/query_filter.py
CHANGED
|
@@ -2,7 +2,6 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from enum import IntEnum
|
|
5
|
-
from typing import List
|
|
6
5
|
|
|
7
6
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
8
7
|
from chia.util.ints import uint8, uint64
|
|
@@ -18,43 +17,43 @@ class FilterMode(IntEnum):
|
|
|
18
17
|
@streamable
|
|
19
18
|
@dataclass(frozen=True)
|
|
20
19
|
class TransactionTypeFilter(Streamable):
|
|
21
|
-
values:
|
|
20
|
+
values: list[uint8]
|
|
22
21
|
mode: uint8 # FilterMode
|
|
23
22
|
|
|
24
23
|
@classmethod
|
|
25
|
-
def include(cls, values:
|
|
24
|
+
def include(cls, values: list[TransactionType]) -> TransactionTypeFilter:
|
|
26
25
|
return cls([uint8(t.value) for t in values], uint8(FilterMode.include))
|
|
27
26
|
|
|
28
27
|
@classmethod
|
|
29
|
-
def exclude(cls, values:
|
|
28
|
+
def exclude(cls, values: list[TransactionType]) -> TransactionTypeFilter:
|
|
30
29
|
return cls([uint8(t.value) for t in values], uint8(FilterMode.exclude))
|
|
31
30
|
|
|
32
31
|
|
|
33
32
|
@streamable
|
|
34
33
|
@dataclass(frozen=True)
|
|
35
34
|
class AmountFilter(Streamable):
|
|
36
|
-
values:
|
|
35
|
+
values: list[uint64]
|
|
37
36
|
mode: uint8 # FilterMode
|
|
38
37
|
|
|
39
38
|
@classmethod
|
|
40
|
-
def include(cls, values:
|
|
39
|
+
def include(cls, values: list[uint64]) -> AmountFilter:
|
|
41
40
|
return cls(values, mode=uint8(FilterMode.include))
|
|
42
41
|
|
|
43
42
|
@classmethod
|
|
44
|
-
def exclude(cls, values:
|
|
43
|
+
def exclude(cls, values: list[uint64]) -> AmountFilter:
|
|
45
44
|
return cls(values, mode=uint8(FilterMode.exclude))
|
|
46
45
|
|
|
47
46
|
|
|
48
47
|
@streamable
|
|
49
48
|
@dataclass(frozen=True)
|
|
50
49
|
class HashFilter(Streamable):
|
|
51
|
-
values:
|
|
50
|
+
values: list[bytes32]
|
|
52
51
|
mode: uint8 # FilterMode
|
|
53
52
|
|
|
54
53
|
@classmethod
|
|
55
|
-
def include(cls, values:
|
|
54
|
+
def include(cls, values: list[bytes32]) -> HashFilter:
|
|
56
55
|
return cls(values, mode=uint8(FilterMode.include))
|
|
57
56
|
|
|
58
57
|
@classmethod
|
|
59
|
-
def exclude(cls, values:
|
|
58
|
+
def exclude(cls, values: list[bytes32]) -> HashFilter:
|
|
60
59
|
return cls(values, mode=uint8(FilterMode.exclude))
|
chia/wallet/util/tx_config.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
|
-
from typing import Any,
|
|
4
|
+
from typing import Any, Optional, TypeVar
|
|
5
5
|
|
|
6
6
|
from typing_extensions import NotRequired, TypedDict, Unpack
|
|
7
7
|
|
|
@@ -17,10 +17,10 @@ from chia.util.streamable import Streamable, streamable
|
|
|
17
17
|
class CoinSelectionConfig:
|
|
18
18
|
min_coin_amount: uint64
|
|
19
19
|
max_coin_amount: uint64
|
|
20
|
-
excluded_coin_amounts:
|
|
21
|
-
excluded_coin_ids:
|
|
20
|
+
excluded_coin_amounts: list[uint64]
|
|
21
|
+
excluded_coin_ids: list[bytes32]
|
|
22
22
|
|
|
23
|
-
def to_json_dict(self) ->
|
|
23
|
+
def to_json_dict(self) -> dict[str, Any]:
|
|
24
24
|
return CoinSelectionConfigLoader(
|
|
25
25
|
self.min_coin_amount,
|
|
26
26
|
self.max_coin_amount,
|
|
@@ -46,7 +46,7 @@ class TXConfig(CoinSelectionConfig):
|
|
|
46
46
|
self.excluded_coin_ids,
|
|
47
47
|
)
|
|
48
48
|
|
|
49
|
-
def to_json_dict(self) ->
|
|
49
|
+
def to_json_dict(self) -> dict[str, Any]:
|
|
50
50
|
return TXConfigLoader(
|
|
51
51
|
self.min_coin_amount,
|
|
52
52
|
self.max_coin_amount,
|
|
@@ -62,7 +62,7 @@ class TXConfig(CoinSelectionConfig):
|
|
|
62
62
|
|
|
63
63
|
class AutofillArgs(TypedDict):
|
|
64
64
|
constants: ConsensusConstants
|
|
65
|
-
config: NotRequired[
|
|
65
|
+
config: NotRequired[dict[str, Any]]
|
|
66
66
|
logged_in_fingerprint: NotRequired[int]
|
|
67
67
|
|
|
68
68
|
|
|
@@ -74,8 +74,8 @@ _T_CoinSelectionConfigLoader = TypeVar("_T_CoinSelectionConfigLoader", bound="Co
|
|
|
74
74
|
class CoinSelectionConfigLoader(Streamable):
|
|
75
75
|
min_coin_amount: Optional[uint64] = None
|
|
76
76
|
max_coin_amount: Optional[uint64] = None
|
|
77
|
-
excluded_coin_amounts: Optional[
|
|
78
|
-
excluded_coin_ids: Optional[
|
|
77
|
+
excluded_coin_amounts: Optional[list[uint64]] = None
|
|
78
|
+
excluded_coin_ids: Optional[list[bytes32]] = None
|
|
79
79
|
|
|
80
80
|
def autofill(
|
|
81
81
|
self,
|
|
@@ -91,11 +91,11 @@ class CoinSelectionConfigLoader(Streamable):
|
|
|
91
91
|
|
|
92
92
|
@classmethod
|
|
93
93
|
def from_json_dict(
|
|
94
|
-
cls:
|
|
94
|
+
cls: type[_T_CoinSelectionConfigLoader], json_dict: dict[str, Any]
|
|
95
95
|
) -> _T_CoinSelectionConfigLoader:
|
|
96
96
|
if "excluded_coins" in json_dict:
|
|
97
|
-
excluded_coins:
|
|
98
|
-
excluded_coin_ids:
|
|
97
|
+
excluded_coins: list[Coin] = [Coin.from_json_dict(c) for c in json_dict["excluded_coins"]]
|
|
98
|
+
excluded_coin_ids: list[str] = [c.name().hex() for c in excluded_coins]
|
|
99
99
|
if "excluded_coin_ids" in json_dict:
|
|
100
100
|
json_dict["excluded_coin_ids"] = [*excluded_coin_ids, *json_dict["excluded_coin_ids"]]
|
|
101
101
|
else:
|
|
@@ -118,7 +118,7 @@ class TXConfigLoader(CoinSelectionConfigLoader):
|
|
|
118
118
|
) -> TXConfig:
|
|
119
119
|
constants: ConsensusConstants = kwargs["constants"]
|
|
120
120
|
if self.reuse_puzhash is None:
|
|
121
|
-
config:
|
|
121
|
+
config: dict[str, Any] = kwargs.get("config", {})
|
|
122
122
|
logged_in_fingerprint: int = kwargs.get("logged_in_fingerprint", -1)
|
|
123
123
|
reuse_puzhash_config = config.get("reuse_public_key_for_change", None)
|
|
124
124
|
if reuse_puzhash_config is None:
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import logging
|
|
5
5
|
import random
|
|
6
|
-
from typing import Any,
|
|
6
|
+
from typing import Any, Optional, Union
|
|
7
7
|
|
|
8
8
|
from chia_rs import compute_merkle_set_root, confirm_included_already_hashed, confirm_not_included_already_hashed
|
|
9
9
|
|
|
@@ -36,6 +36,7 @@ from chia.types.blockchain_format.sized_bytes import bytes32
|
|
|
36
36
|
from chia.types.coin_spend import CoinSpend, make_spend
|
|
37
37
|
from chia.types.header_block import HeaderBlock
|
|
38
38
|
from chia.util.ints import uint32
|
|
39
|
+
from chia.util.task_referencer import create_referenced_task
|
|
39
40
|
from chia.wallet.util.peer_request_cache import PeerRequestCache
|
|
40
41
|
|
|
41
42
|
log = logging.getLogger(__name__)
|
|
@@ -46,48 +47,48 @@ class PeerRequestException(Exception):
|
|
|
46
47
|
|
|
47
48
|
|
|
48
49
|
async def subscribe_to_phs(
|
|
49
|
-
puzzle_hashes:
|
|
50
|
+
puzzle_hashes: list[bytes32],
|
|
50
51
|
peer: WSChiaConnection,
|
|
51
52
|
min_height: int,
|
|
52
|
-
) ->
|
|
53
|
+
) -> list[CoinState]:
|
|
53
54
|
"""
|
|
54
55
|
Tells full nodes that we are interested in puzzle hashes, and returns the response.
|
|
55
56
|
"""
|
|
56
57
|
msg = RegisterForPhUpdates(puzzle_hashes, uint32(max(min_height, uint32(0))))
|
|
57
58
|
all_coins_state: Optional[RespondToPhUpdates] = await peer.call_api(
|
|
58
|
-
FullNodeAPI.
|
|
59
|
+
FullNodeAPI.register_for_ph_updates, msg, timeout=300
|
|
59
60
|
)
|
|
60
61
|
if all_coins_state is None:
|
|
61
|
-
raise ValueError(f"None response from peer {peer.peer_info.host} for
|
|
62
|
+
raise ValueError(f"None response from peer {peer.peer_info.host} for register_for_ph_updates")
|
|
62
63
|
return all_coins_state.coin_states
|
|
63
64
|
|
|
64
65
|
|
|
65
66
|
async def subscribe_to_coin_updates(
|
|
66
|
-
coin_names:
|
|
67
|
+
coin_names: list[bytes32],
|
|
67
68
|
peer: WSChiaConnection,
|
|
68
69
|
min_height: int,
|
|
69
|
-
) ->
|
|
70
|
+
) -> list[CoinState]:
|
|
70
71
|
"""
|
|
71
72
|
Tells full nodes that we are interested in coin ids, and returns the response.
|
|
72
73
|
"""
|
|
73
74
|
msg = RegisterForCoinUpdates(coin_names, uint32(max(0, min_height)))
|
|
74
75
|
all_coins_state: Optional[RespondToCoinUpdates] = await peer.call_api(
|
|
75
|
-
FullNodeAPI.
|
|
76
|
+
FullNodeAPI.register_for_coin_updates, msg, timeout=300
|
|
76
77
|
)
|
|
77
78
|
|
|
78
79
|
if all_coins_state is None:
|
|
79
|
-
raise ValueError(f"None response from peer {peer.peer_info.host} for
|
|
80
|
+
raise ValueError(f"None response from peer {peer.peer_info.host} for register_for_coin_updates")
|
|
80
81
|
return all_coins_state.coin_states
|
|
81
82
|
|
|
82
83
|
|
|
83
84
|
def validate_additions(
|
|
84
|
-
coins:
|
|
85
|
-
proofs: Optional[
|
|
85
|
+
coins: list[tuple[bytes32, list[Coin]]],
|
|
86
|
+
proofs: Optional[list[tuple[bytes32, bytes, Optional[bytes]]]],
|
|
86
87
|
root: bytes32,
|
|
87
88
|
) -> bool:
|
|
88
89
|
if proofs is None:
|
|
89
90
|
# Verify root
|
|
90
|
-
additions_merkle_items:
|
|
91
|
+
additions_merkle_items: list[bytes32] = []
|
|
91
92
|
|
|
92
93
|
# Addition Merkle set contains puzzlehash and hash of all coins with that puzzlehash
|
|
93
94
|
for puzzle_hash, coins_l in coins:
|
|
@@ -100,7 +101,7 @@ def validate_additions(
|
|
|
100
101
|
else:
|
|
101
102
|
for i in range(len(coins)):
|
|
102
103
|
assert coins[i][0] == proofs[i][0]
|
|
103
|
-
coin_list_1:
|
|
104
|
+
coin_list_1: list[Coin] = coins[i][1]
|
|
104
105
|
puzzle_hash_proof: Optional[bytes] = proofs[i][1]
|
|
105
106
|
coin_list_proof: Optional[bytes] = proofs[i][2]
|
|
106
107
|
if len(coin_list_1) == 0:
|
|
@@ -143,7 +144,7 @@ def validate_additions(
|
|
|
143
144
|
|
|
144
145
|
|
|
145
146
|
def validate_removals(
|
|
146
|
-
coins:
|
|
147
|
+
coins: list[tuple[bytes32, Optional[Coin]]], proofs: Optional[list[tuple[bytes32, bytes]]], root: bytes32
|
|
147
148
|
) -> bool:
|
|
148
149
|
if proofs is None:
|
|
149
150
|
# If there are no proofs, it means all removals were returned in the response.
|
|
@@ -235,7 +236,7 @@ def last_change_height_cs(cs: CoinState) -> uint32:
|
|
|
235
236
|
return uint32(0)
|
|
236
237
|
|
|
237
238
|
|
|
238
|
-
def sort_coin_states(coin_states:
|
|
239
|
+
def sort_coin_states(coin_states: set[CoinState]) -> list[CoinState]:
|
|
239
240
|
return sorted(
|
|
240
241
|
coin_states,
|
|
241
242
|
key=lambda coin_state: (
|
|
@@ -248,7 +249,7 @@ def sort_coin_states(coin_states: Set[CoinState]) -> List[CoinState]:
|
|
|
248
249
|
|
|
249
250
|
async def request_header_blocks(
|
|
250
251
|
peer: WSChiaConnection, start_height: uint32, end_height: uint32
|
|
251
|
-
) -> Optional[
|
|
252
|
+
) -> Optional[list[HeaderBlock]]:
|
|
252
253
|
if Capability.BLOCK_HEADERS in peer.peer_capabilities:
|
|
253
254
|
response = await peer.call_api(
|
|
254
255
|
FullNodeAPI.request_block_headers, RequestBlockHeaders(start_height, end_height, False)
|
|
@@ -262,7 +263,7 @@ async def request_header_blocks(
|
|
|
262
263
|
|
|
263
264
|
|
|
264
265
|
async def _fetch_header_blocks_inner(
|
|
265
|
-
all_peers:
|
|
266
|
+
all_peers: list[tuple[WSChiaConnection, bool]],
|
|
266
267
|
request_start: uint32,
|
|
267
268
|
request_end: uint32,
|
|
268
269
|
) -> Optional[Union[RespondHeaderBlocks, RespondBlockHeaders]]:
|
|
@@ -298,9 +299,9 @@ async def fetch_header_blocks_in_range(
|
|
|
298
299
|
start: uint32,
|
|
299
300
|
end: uint32,
|
|
300
301
|
peer_request_cache: PeerRequestCache,
|
|
301
|
-
all_peers:
|
|
302
|
-
) -> Optional[
|
|
303
|
-
blocks:
|
|
302
|
+
all_peers: list[tuple[WSChiaConnection, bool]],
|
|
303
|
+
) -> Optional[list[HeaderBlock]]:
|
|
304
|
+
blocks: list[HeaderBlock] = []
|
|
304
305
|
for i in range(start - (start % 32), end + 1, 32):
|
|
305
306
|
request_start = min(uint32(i), end)
|
|
306
307
|
request_end = min(uint32(i + 31), end)
|
|
@@ -316,7 +317,9 @@ async def fetch_header_blocks_in_range(
|
|
|
316
317
|
res_h_blocks = await res_h_blocks_task
|
|
317
318
|
else:
|
|
318
319
|
log.debug(f"Fetching: {start}-{end}")
|
|
319
|
-
res_h_blocks_task =
|
|
320
|
+
res_h_blocks_task = create_referenced_task(
|
|
321
|
+
_fetch_header_blocks_inner(all_peers, request_start, request_end)
|
|
322
|
+
)
|
|
320
323
|
peer_request_cache.add_to_block_requests(request_start, request_end, res_h_blocks_task)
|
|
321
324
|
res_h_blocks = await res_h_blocks_task
|
|
322
325
|
if res_h_blocks is None:
|
chia/wallet/util/wallet_types.py
CHANGED
|
@@ -30,6 +30,13 @@ class WalletType(IntEnum):
|
|
|
30
30
|
DAO_CAT = 15
|
|
31
31
|
CRCAT = 57
|
|
32
32
|
|
|
33
|
+
def to_json_dict(self) -> str:
|
|
34
|
+
# yes, this isn't a `dict`, but it is json and
|
|
35
|
+
# unfortunately the magic method name is misleading
|
|
36
|
+
# not sure this code is used
|
|
37
|
+
# TODO: determine if this code is used and if not, remove it
|
|
38
|
+
return self.name
|
|
39
|
+
|
|
33
40
|
|
|
34
41
|
class CoinType(IntEnum):
|
|
35
42
|
NORMAL = 0
|
|
@@ -44,7 +51,7 @@ class RemarkDataType(IntEnum):
|
|
|
44
51
|
CLAWBACK = 2
|
|
45
52
|
|
|
46
53
|
|
|
47
|
-
|
|
54
|
+
T_contra = TypeVar("T_contra", contravariant=True)
|
|
48
55
|
|
|
49
56
|
|
|
50
57
|
@dataclass(frozen=True)
|
|
@@ -53,7 +60,7 @@ class WalletIdentifier:
|
|
|
53
60
|
type: WalletType
|
|
54
61
|
|
|
55
62
|
@classmethod
|
|
56
|
-
def create(cls, wallet: WalletProtocol[
|
|
63
|
+
def create(cls, wallet: WalletProtocol[T_contra]) -> WalletIdentifier:
|
|
57
64
|
return cls(wallet.id(), wallet.type())
|
|
58
65
|
|
|
59
66
|
|