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/wallet/wallet_node_api.py
CHANGED
|
@@ -1,19 +1,26 @@
|
|
|
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.protocols import full_node_protocol, introducer_protocol, wallet_protocol
|
|
7
|
+
from chia.server.api_protocol import ApiMetadata
|
|
6
8
|
from chia.server.outbound_message import NodeType
|
|
7
9
|
from chia.server.ws_connection import WSChiaConnection
|
|
8
10
|
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
9
|
-
from chia.util.api_decorators import api_request
|
|
10
11
|
from chia.util.errors import Err
|
|
11
12
|
from chia.wallet.wallet_node import WalletNode
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
class WalletNodeAPI:
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
from chia.server.api_protocol import ApiProtocol
|
|
18
|
+
|
|
19
|
+
_protocol_check: ClassVar[ApiProtocol] = cast("WalletNodeAPI", None)
|
|
20
|
+
|
|
15
21
|
log: logging.Logger
|
|
16
22
|
wallet_node: WalletNode
|
|
23
|
+
metadata: ClassVar[ApiMetadata] = ApiMetadata()
|
|
17
24
|
|
|
18
25
|
def __init__(self, wallet_node) -> None:
|
|
19
26
|
self.log = logging.getLogger(__name__)
|
|
@@ -22,7 +29,7 @@ class WalletNodeAPI:
|
|
|
22
29
|
def ready(self) -> bool:
|
|
23
30
|
return self.wallet_node.logged_in
|
|
24
31
|
|
|
25
|
-
@
|
|
32
|
+
@metadata.request(peer_required=True)
|
|
26
33
|
async def respond_removals(self, response: wallet_protocol.RespondRemovals, peer: WSChiaConnection):
|
|
27
34
|
pass
|
|
28
35
|
|
|
@@ -32,14 +39,14 @@ class WalletNodeAPI:
|
|
|
32
39
|
"""
|
|
33
40
|
pass
|
|
34
41
|
|
|
35
|
-
@
|
|
42
|
+
@metadata.request()
|
|
36
43
|
async def reject_additions_request(self, response: wallet_protocol.RejectAdditionsRequest):
|
|
37
44
|
"""
|
|
38
45
|
The full node has rejected our request for additions.
|
|
39
46
|
"""
|
|
40
47
|
pass
|
|
41
48
|
|
|
42
|
-
@
|
|
49
|
+
@metadata.request(peer_required=True, execute_task=True)
|
|
43
50
|
async def new_peak_wallet(self, peak: wallet_protocol.NewPeakWallet, peer: WSChiaConnection):
|
|
44
51
|
"""
|
|
45
52
|
The full node sent as a new peak
|
|
@@ -69,26 +76,26 @@ class WalletNodeAPI:
|
|
|
69
76
|
|
|
70
77
|
await self.wallet_node.new_peak_queue.new_peak_wallet(peak, peer)
|
|
71
78
|
|
|
72
|
-
@
|
|
79
|
+
@metadata.request()
|
|
73
80
|
async def reject_header_request(self, response: wallet_protocol.RejectHeaderRequest):
|
|
74
81
|
"""
|
|
75
82
|
The full node has rejected our request for a header.
|
|
76
83
|
"""
|
|
77
84
|
pass
|
|
78
85
|
|
|
79
|
-
@
|
|
86
|
+
@metadata.request()
|
|
80
87
|
async def respond_block_header(self, response: wallet_protocol.RespondBlockHeader):
|
|
81
88
|
pass
|
|
82
89
|
|
|
83
|
-
@
|
|
90
|
+
@metadata.request(peer_required=True)
|
|
84
91
|
async def respond_additions(self, response: wallet_protocol.RespondAdditions, peer: WSChiaConnection):
|
|
85
92
|
pass
|
|
86
93
|
|
|
87
|
-
@
|
|
94
|
+
@metadata.request()
|
|
88
95
|
async def respond_proof_of_weight(self, response: full_node_protocol.RespondProofOfWeight):
|
|
89
96
|
pass
|
|
90
97
|
|
|
91
|
-
@
|
|
98
|
+
@metadata.request(peer_required=True)
|
|
92
99
|
async def transaction_ack(self, ack: wallet_protocol.TransactionAck, peer: WSChiaConnection):
|
|
93
100
|
"""
|
|
94
101
|
This is an ack for our previous SendTransaction call. This removes the transaction from
|
|
@@ -128,7 +135,7 @@ class WalletNodeAPI:
|
|
|
128
135
|
else:
|
|
129
136
|
await wallet_state_manager.remove_from_queue(ack.txid, name, status, None)
|
|
130
137
|
|
|
131
|
-
@
|
|
138
|
+
@metadata.request(peer_required=True)
|
|
132
139
|
async def respond_peers_introducer(
|
|
133
140
|
self, request: introducer_protocol.RespondPeersIntroducer, peer: WSChiaConnection
|
|
134
141
|
):
|
|
@@ -138,7 +145,7 @@ class WalletNodeAPI:
|
|
|
138
145
|
if peer is not None and peer.connection_type is NodeType.INTRODUCER:
|
|
139
146
|
await peer.close()
|
|
140
147
|
|
|
141
|
-
@
|
|
148
|
+
@metadata.request(peer_required=True)
|
|
142
149
|
async def respond_peers(self, request: full_node_protocol.RespondPeers, peer: WSChiaConnection):
|
|
143
150
|
if self.wallet_node.wallet_peers is None:
|
|
144
151
|
return None
|
|
@@ -148,54 +155,53 @@ class WalletNodeAPI:
|
|
|
148
155
|
|
|
149
156
|
return None
|
|
150
157
|
|
|
151
|
-
@
|
|
158
|
+
@metadata.request()
|
|
152
159
|
async def respond_puzzle_solution(self, request: wallet_protocol.RespondPuzzleSolution):
|
|
153
160
|
self.log.error("Unexpected message `respond_puzzle_solution`. Peer might be slow to respond")
|
|
154
|
-
return None
|
|
155
161
|
|
|
156
|
-
@
|
|
162
|
+
@metadata.request()
|
|
157
163
|
async def reject_puzzle_solution(self, request: wallet_protocol.RejectPuzzleSolution):
|
|
158
164
|
self.log.warning(f"Reject puzzle solution: {request}")
|
|
159
165
|
|
|
160
|
-
@
|
|
166
|
+
@metadata.request()
|
|
161
167
|
async def respond_header_blocks(self, request: wallet_protocol.RespondHeaderBlocks):
|
|
162
168
|
pass
|
|
163
169
|
|
|
164
|
-
@
|
|
170
|
+
@metadata.request()
|
|
165
171
|
async def respond_block_headers(self, request: wallet_protocol.RespondBlockHeaders):
|
|
166
172
|
pass
|
|
167
173
|
|
|
168
|
-
@
|
|
174
|
+
@metadata.request()
|
|
169
175
|
async def reject_header_blocks(self, request: wallet_protocol.RejectHeaderBlocks):
|
|
170
176
|
self.log.warning(f"Reject header blocks: {request}")
|
|
171
177
|
|
|
172
|
-
@
|
|
178
|
+
@metadata.request()
|
|
173
179
|
async def reject_block_headers(self, request: wallet_protocol.RejectBlockHeaders):
|
|
174
180
|
pass
|
|
175
181
|
|
|
176
|
-
@
|
|
182
|
+
@metadata.request(peer_required=True, execute_task=True)
|
|
177
183
|
async def coin_state_update(self, request: wallet_protocol.CoinStateUpdate, peer: WSChiaConnection):
|
|
178
184
|
await self.wallet_node.new_peak_queue.full_node_state_updated(request, peer)
|
|
179
185
|
|
|
180
186
|
# TODO: Review this hinting issue around this rust type not being a Streamable
|
|
181
187
|
# subclass, as you might expect it wouldn't be. Maybe we can get the
|
|
182
|
-
# protocol working right back at the
|
|
183
|
-
@
|
|
184
|
-
async def
|
|
188
|
+
# protocol working right back at the api.request definition.
|
|
189
|
+
@metadata.request() # type: ignore[type-var]
|
|
190
|
+
async def respond_to_ph_updates(self, request: wallet_protocol.RespondToPhUpdates):
|
|
185
191
|
pass
|
|
186
192
|
|
|
187
|
-
@
|
|
188
|
-
async def
|
|
193
|
+
@metadata.request()
|
|
194
|
+
async def respond_to_coin_updates(self, request: wallet_protocol.RespondToCoinUpdates):
|
|
189
195
|
pass
|
|
190
196
|
|
|
191
|
-
@
|
|
197
|
+
@metadata.request()
|
|
192
198
|
async def respond_children(self, request: wallet_protocol.RespondChildren):
|
|
193
199
|
pass
|
|
194
200
|
|
|
195
|
-
@
|
|
201
|
+
@metadata.request()
|
|
196
202
|
async def respond_ses_hashes(self, request: wallet_protocol.RespondSESInfo):
|
|
197
203
|
pass
|
|
198
204
|
|
|
199
|
-
@
|
|
205
|
+
@metadata.request()
|
|
200
206
|
async def respond_blocks(self, request: full_node_protocol.RespondBlocks) -> None:
|
|
201
207
|
pass
|
chia/wallet/wallet_pool_store.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import List, Tuple
|
|
5
4
|
|
|
6
5
|
from chia.types.coin_spend import CoinSpend
|
|
7
6
|
from chia.util.db_wrapper import DBWrapper2
|
|
@@ -89,7 +88,7 @@ class WalletPoolStore:
|
|
|
89
88
|
)
|
|
90
89
|
await cursor.close()
|
|
91
90
|
|
|
92
|
-
async def get_spends_for_wallet(self, wallet_id: int) ->
|
|
91
|
+
async def get_spends_for_wallet(self, wallet_id: int) -> list[tuple[uint32, CoinSpend]]:
|
|
93
92
|
"""
|
|
94
93
|
Retrieves all entries for a wallet ID.
|
|
95
94
|
"""
|
chia/wallet/wallet_protocol.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import TYPE_CHECKING,
|
|
3
|
+
from typing import TYPE_CHECKING, Optional, TypeVar
|
|
4
4
|
|
|
5
5
|
from chia_rs import G1Element
|
|
6
6
|
from typing_extensions import NotRequired, Protocol, TypedDict
|
|
@@ -20,32 +20,34 @@ from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
|
|
20
20
|
if TYPE_CHECKING:
|
|
21
21
|
from chia.wallet.wallet_state_manager import WalletStateManager
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
T_contra = TypeVar("T_contra", contravariant=True)
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
class WalletProtocol(Protocol[
|
|
26
|
+
class WalletProtocol(Protocol[T_contra]):
|
|
27
27
|
@classmethod
|
|
28
28
|
def type(cls) -> WalletType: ...
|
|
29
29
|
|
|
30
30
|
def id(self) -> uint32: ...
|
|
31
31
|
|
|
32
|
-
async def coin_added(
|
|
32
|
+
async def coin_added(
|
|
33
|
+
self, coin: Coin, height: uint32, peer: WSChiaConnection, coin_data: Optional[T_contra]
|
|
34
|
+
) -> None: ...
|
|
33
35
|
|
|
34
36
|
async def select_coins(
|
|
35
37
|
self,
|
|
36
38
|
amount: uint64,
|
|
37
39
|
action_scope: WalletActionScope,
|
|
38
|
-
) ->
|
|
40
|
+
) -> set[Coin]: ...
|
|
39
41
|
|
|
40
|
-
async def get_confirmed_balance(self, record_list: Optional[
|
|
42
|
+
async def get_confirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128: ...
|
|
41
43
|
|
|
42
|
-
async def get_unconfirmed_balance(self, unspent_records: Optional[
|
|
44
|
+
async def get_unconfirmed_balance(self, unspent_records: Optional[set[WalletCoinRecord]] = None) -> uint128: ...
|
|
43
45
|
|
|
44
|
-
async def get_spendable_balance(self, unspent_records: Optional[
|
|
46
|
+
async def get_spendable_balance(self, unspent_records: Optional[set[WalletCoinRecord]] = None) -> uint128: ...
|
|
45
47
|
|
|
46
48
|
async def get_pending_change_balance(self) -> uint64: ...
|
|
47
49
|
|
|
48
|
-
async def get_max_send_amount(self, records: Optional[
|
|
50
|
+
async def get_max_send_amount(self, records: Optional[set[WalletCoinRecord]] = None) -> uint128: ...
|
|
49
51
|
|
|
50
52
|
# not all wallet supports this. To signal support, make
|
|
51
53
|
# require_derivation_paths() return true
|
|
@@ -58,9 +60,7 @@ class WalletProtocol(Protocol[T]):
|
|
|
58
60
|
async def match_hinted_coin(self, coin: Coin, hint: bytes32) -> bool: ...
|
|
59
61
|
|
|
60
62
|
wallet_info: WalletInfo
|
|
61
|
-
|
|
62
|
-
# unable to process this
|
|
63
|
-
wallet_state_manager: WalletStateManager # pylint: disable=used-before-assignment
|
|
63
|
+
wallet_state_manager: WalletStateManager
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
class GSTOptionalArgs(TypedDict):
|
|
@@ -71,14 +71,14 @@ class GSTOptionalArgs(TypedDict):
|
|
|
71
71
|
add_pending_singleton: NotRequired[bool]
|
|
72
72
|
announce_new_state: NotRequired[bool]
|
|
73
73
|
# CATWallet
|
|
74
|
-
cat_discrepancy: NotRequired[Optional[
|
|
74
|
+
cat_discrepancy: NotRequired[Optional[tuple[int, Program, Program]]]
|
|
75
75
|
# NFTWallet
|
|
76
76
|
nft_coin: NotRequired[Optional[NFTCoinInfo]]
|
|
77
77
|
new_owner: NotRequired[Optional[bytes]]
|
|
78
78
|
new_did_inner_hash: NotRequired[Optional[bytes]]
|
|
79
79
|
trade_prices_list: NotRequired[Optional[Program]]
|
|
80
|
-
additional_bundles: NotRequired[
|
|
81
|
-
metadata_update: NotRequired[Optional[
|
|
80
|
+
additional_bundles: NotRequired[list[WalletSpendBundle]]
|
|
81
|
+
metadata_update: NotRequired[Optional[tuple[str, str]]]
|
|
82
82
|
# CR-CAT Wallet
|
|
83
83
|
add_authorizations_to_cr_cats: NotRequired[bool]
|
|
84
84
|
# VCWallet
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import logging
|
|
5
|
-
from typing import
|
|
5
|
+
from typing import Optional
|
|
6
6
|
|
|
7
7
|
from chia_rs import G1Element
|
|
8
8
|
|
|
@@ -27,7 +27,7 @@ class WalletPuzzleStore:
|
|
|
27
27
|
db_wrapper: DBWrapper2
|
|
28
28
|
wallet_identifier_cache: LRUCache
|
|
29
29
|
# maps wallet_id -> last_derivation_index
|
|
30
|
-
last_wallet_derivation_index:
|
|
30
|
+
last_wallet_derivation_index: dict[uint32, uint32]
|
|
31
31
|
last_derivation_index: Optional[uint32]
|
|
32
32
|
|
|
33
33
|
@classmethod
|
|
@@ -68,7 +68,7 @@ class WalletPuzzleStore:
|
|
|
68
68
|
self.last_wallet_derivation_index = {}
|
|
69
69
|
return self
|
|
70
70
|
|
|
71
|
-
async def add_derivation_paths(self, records:
|
|
71
|
+
async def add_derivation_paths(self, records: list[DerivationRecord]) -> None:
|
|
72
72
|
"""
|
|
73
73
|
Insert many derivation paths into the database.
|
|
74
74
|
"""
|
|
@@ -267,7 +267,7 @@ class WalletPuzzleStore:
|
|
|
267
267
|
|
|
268
268
|
return None
|
|
269
269
|
|
|
270
|
-
async def get_all_puzzle_hashes(self, wallet_id: Optional[int] = None) ->
|
|
270
|
+
async def get_all_puzzle_hashes(self, wallet_id: Optional[int] = None) -> set[bytes32]:
|
|
271
271
|
"""
|
|
272
272
|
Return a set containing all puzzle_hashes we generated.
|
|
273
273
|
"""
|
|
@@ -343,6 +343,22 @@ class WalletPuzzleStore:
|
|
|
343
343
|
|
|
344
344
|
return None
|
|
345
345
|
|
|
346
|
+
async def get_unused_derivation_path_for_wallet(self, wallet_id: uint32) -> Optional[uint32]:
|
|
347
|
+
"""
|
|
348
|
+
Returns the first unused derivation path by derivation_index.
|
|
349
|
+
"""
|
|
350
|
+
async with self.db_wrapper.reader_no_transaction() as conn:
|
|
351
|
+
row = await execute_fetchone(
|
|
352
|
+
conn,
|
|
353
|
+
"SELECT MIN(derivation_index) FROM derivation_paths WHERE wallet_id=? AND used=0 AND hardened=0;",
|
|
354
|
+
(wallet_id,),
|
|
355
|
+
)
|
|
356
|
+
|
|
357
|
+
if row is not None and row[0] is not None:
|
|
358
|
+
return uint32(row[0])
|
|
359
|
+
|
|
360
|
+
return None
|
|
361
|
+
|
|
346
362
|
async def delete_wallet(self, wallet_id: uint32) -> None:
|
|
347
363
|
async with self.db_wrapper.writer_maybe_transaction() as conn:
|
|
348
364
|
# First fetch all puzzle hashes since we need them to drop them from the cache
|
|
@@ -363,3 +379,18 @@ class WalletPuzzleStore:
|
|
|
363
379
|
except KeyError:
|
|
364
380
|
pass
|
|
365
381
|
self.last_derivation_index = None
|
|
382
|
+
|
|
383
|
+
async def get_unused_count(self, wallet_id: uint32) -> int:
|
|
384
|
+
"""
|
|
385
|
+
Returns a count of unused derivation indexes
|
|
386
|
+
"""
|
|
387
|
+
|
|
388
|
+
async with self.db_wrapper.reader_no_transaction() as conn:
|
|
389
|
+
row = await execute_fetchone(
|
|
390
|
+
conn,
|
|
391
|
+
"SELECT COUNT(*) FROM derivation_paths WHERE wallet_id=? AND used=1",
|
|
392
|
+
(wallet_id,),
|
|
393
|
+
)
|
|
394
|
+
row_count = 0 if row is None else row[0]
|
|
395
|
+
|
|
396
|
+
return row_count
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import Optional
|
|
4
4
|
|
|
5
5
|
from chia_rs import CoinState
|
|
6
6
|
|
|
@@ -30,7 +30,7 @@ class WalletRetryStore:
|
|
|
30
30
|
|
|
31
31
|
return self
|
|
32
32
|
|
|
33
|
-
async def get_all_states_to_retry(self) ->
|
|
33
|
+
async def get_all_states_to_retry(self) -> list[tuple[CoinState, bytes32, uint32]]:
|
|
34
34
|
"""
|
|
35
35
|
Return all states that were failed to sync
|
|
36
36
|
"""
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import json
|
|
4
4
|
import logging
|
|
5
5
|
from sqlite3 import Row
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import Optional, TypeVar, Union
|
|
7
7
|
|
|
8
8
|
from clvm.casts import int_from_bytes
|
|
9
9
|
|
|
@@ -28,7 +28,7 @@ class WalletSingletonStore:
|
|
|
28
28
|
db_wrapper: DBWrapper2
|
|
29
29
|
|
|
30
30
|
@classmethod
|
|
31
|
-
async def create(cls:
|
|
31
|
+
async def create(cls: type[_T_WalletSingletonStore], wrapper: DBWrapper2) -> _T_WalletSingletonStore:
|
|
32
32
|
self = cls()
|
|
33
33
|
self.db_wrapper = wrapper
|
|
34
34
|
|
|
@@ -102,7 +102,9 @@ class WalletSingletonStore:
|
|
|
102
102
|
coin_state.puzzle_reveal, coin_state.solution, DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM
|
|
103
103
|
)
|
|
104
104
|
|
|
105
|
-
cc_cond =
|
|
105
|
+
cc_cond = next(
|
|
106
|
+
cond for cond in conditions[ConditionOpcode.CREATE_COIN] if int_from_bytes(cond.vars[1]) % 2 == 1
|
|
107
|
+
)
|
|
106
108
|
|
|
107
109
|
coin = Coin(coin_state.coin.name(), cc_cond.vars[0], uint64(int_from_bytes(cc_cond.vars[1])))
|
|
108
110
|
inner_puz = get_inner_puzzle_from_singleton(coin_state.puzzle_reveal)
|
|
@@ -125,7 +127,6 @@ class WalletSingletonStore:
|
|
|
125
127
|
current_records = await self.get_records_by_coin_id(coin_state.coin.name())
|
|
126
128
|
if len(current_records) > 0:
|
|
127
129
|
await self.delete_singleton_by_coin_id(coin_state.coin.name(), block_height)
|
|
128
|
-
return
|
|
129
130
|
|
|
130
131
|
def _to_singleton_record(self, row: Row) -> SingletonRecord:
|
|
131
132
|
return SingletonRecord(
|
|
@@ -183,7 +184,7 @@ class WalletSingletonStore:
|
|
|
183
184
|
)
|
|
184
185
|
return c.rowcount > 0
|
|
185
186
|
|
|
186
|
-
async def get_records_by_wallet_id(self, wallet_id: int) ->
|
|
187
|
+
async def get_records_by_wallet_id(self, wallet_id: int) -> list[SingletonRecord]:
|
|
187
188
|
"""
|
|
188
189
|
Retrieves all entries for a wallet ID.
|
|
189
190
|
"""
|
|
@@ -195,7 +196,7 @@ class WalletSingletonStore:
|
|
|
195
196
|
)
|
|
196
197
|
return [self._to_singleton_record(row) for row in rows]
|
|
197
198
|
|
|
198
|
-
async def get_records_by_coin_id(self, coin_id: bytes32) ->
|
|
199
|
+
async def get_records_by_coin_id(self, coin_id: bytes32) -> list[SingletonRecord]:
|
|
199
200
|
"""
|
|
200
201
|
Retrieves all entries for a coin ID.
|
|
201
202
|
"""
|
|
@@ -207,7 +208,7 @@ class WalletSingletonStore:
|
|
|
207
208
|
)
|
|
208
209
|
return [self._to_singleton_record(row) for row in rows]
|
|
209
210
|
|
|
210
|
-
async def get_records_by_singleton_id(self, singleton_id: bytes32) ->
|
|
211
|
+
async def get_records_by_singleton_id(self, singleton_id: bytes32) -> list[SingletonRecord]:
|
|
211
212
|
"""
|
|
212
213
|
Retrieves all entries for a singleton ID.
|
|
213
214
|
"""
|
|
@@ -234,7 +235,7 @@ class WalletSingletonStore:
|
|
|
234
235
|
|
|
235
236
|
async def count(self, wallet_id: Optional[uint32] = None) -> int:
|
|
236
237
|
sql = "SELECT COUNT(singleton_id) FROM singletons WHERE removed_height=0"
|
|
237
|
-
params:
|
|
238
|
+
params: list[uint32] = []
|
|
238
239
|
if wallet_id is not None:
|
|
239
240
|
sql += " AND wallet_id=?"
|
|
240
241
|
params.append(wallet_id)
|
|
@@ -246,7 +247,7 @@ class WalletSingletonStore:
|
|
|
246
247
|
|
|
247
248
|
async def is_empty(self, wallet_id: Optional[uint32] = None) -> bool:
|
|
248
249
|
sql = "SELECT 1 FROM singletons WHERE removed_height=0"
|
|
249
|
-
params:
|
|
250
|
+
params: list[Union[uint32, bytes32]] = []
|
|
250
251
|
if wallet_id is not None:
|
|
251
252
|
sql += " AND wallet_id=?"
|
|
252
253
|
params.append(wallet_id)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Sequence
|
|
4
4
|
|
|
5
5
|
from chia_rs import AugSchemeMPL, G2Element
|
|
6
6
|
|
|
@@ -11,26 +11,10 @@ from chia.wallet.util.debug_spend_bundle import debug_spend_bundle
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class WalletSpendBundle(SpendBundle):
|
|
14
|
-
|
|
15
|
-
@classmethod
|
|
16
|
-
def from_bytes(cls, bytes: bytes) -> WalletSpendBundle:
|
|
17
|
-
sb = SpendBundle.from_bytes(bytes)
|
|
18
|
-
return cls(sb.coin_spends, sb.aggregated_signature)
|
|
19
|
-
|
|
20
|
-
@classmethod
|
|
21
|
-
def parse_rust(cls, blob: bytes, flag: bool = False) -> Tuple[WalletSpendBundle, int]:
|
|
22
|
-
bundle, advance = super(WalletSpendBundle, WalletSpendBundle).parse_rust(blob)
|
|
23
|
-
return cls(bundle.coin_spends, bundle.aggregated_signature), advance
|
|
24
|
-
|
|
25
|
-
@classmethod
|
|
26
|
-
def from_json_dict(cls, json_dict: Dict[str, Any]) -> WalletSpendBundle:
|
|
27
|
-
sb = SpendBundle.from_json_dict(json_dict)
|
|
28
|
-
return cls(sb.coin_spends, sb.aggregated_signature)
|
|
29
|
-
|
|
30
14
|
@classmethod
|
|
31
|
-
def aggregate(cls, spend_bundles:
|
|
32
|
-
coin_spends:
|
|
33
|
-
sigs:
|
|
15
|
+
def aggregate(cls, spend_bundles: Sequence[T_SpendBundle]) -> WalletSpendBundle:
|
|
16
|
+
coin_spends: list[CoinSpend] = []
|
|
17
|
+
sigs: list[G2Element] = []
|
|
34
18
|
for bundle in spend_bundles:
|
|
35
19
|
coin_spends += bundle.coin_spends
|
|
36
20
|
sigs.append(bundle.aggregated_signature)
|