chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5__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/blockchain/blockchain_test_utils.py +2 -3
- chia/_tests/blockchain/test_augmented_chain.py +2 -3
- chia/_tests/blockchain/test_blockchain.py +261 -44
- chia/_tests/blockchain/test_blockchain_transactions.py +4 -3
- chia/_tests/blockchain/test_build_chains.py +197 -1
- chia/_tests/blockchain/test_get_block_generator.py +1 -1
- chia/_tests/blockchain/test_lookup_fork_chain.py +1 -1
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +3 -4
- chia/_tests/clvm/test_message_conditions.py +2 -2
- chia/_tests/clvm/test_puzzle_compression.py +2 -3
- chia/_tests/clvm/test_puzzles.py +1 -2
- chia/_tests/clvm/test_singletons.py +2 -3
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +30 -25
- chia/_tests/cmds/test_dev_gh.py +1 -1
- chia/_tests/cmds/test_farm_cmd.py +1 -1
- chia/_tests/cmds/test_show.py +1 -2
- chia/_tests/cmds/wallet/test_did.py +101 -56
- chia/_tests/cmds/wallet/test_nft.py +109 -84
- chia/_tests/cmds/wallet/test_notifications.py +1 -1
- chia/_tests/cmds/wallet/test_offer.toffer +1 -1
- chia/_tests/cmds/wallet/test_vcs.py +8 -8
- chia/_tests/cmds/wallet/test_wallet.py +100 -46
- chia/_tests/conftest.py +31 -20
- chia/_tests/connection_utils.py +1 -1
- chia/_tests/core/consensus/stores/__init__.py +0 -0
- chia/_tests/core/consensus/stores/test_coin_store_protocol.py +40 -0
- chia/_tests/core/consensus/test_block_creation.py +2 -31
- chia/_tests/core/consensus/test_pot_iterations.py +38 -3
- chia/_tests/core/custom_types/test_proof_of_space.py +154 -26
- chia/_tests/core/custom_types/test_spend_bundle.py +2 -3
- chia/_tests/core/daemon/test_daemon.py +80 -0
- chia/_tests/core/data_layer/test_data_layer.py +1 -1
- chia/_tests/core/data_layer/test_data_layer_util.py +1 -1
- chia/_tests/core/data_layer/test_data_rpc.py +14 -10
- chia/_tests/core/data_layer/test_data_store.py +5 -5
- chia/_tests/core/farmer/test_farmer_api.py +2 -2
- chia/_tests/core/full_node/full_sync/test_full_sync.py +446 -406
- chia/_tests/core/full_node/ram_db.py +3 -1
- chia/_tests/core/full_node/stores/test_block_store.py +28 -16
- chia/_tests/core/full_node/stores/test_coin_store.py +277 -185
- chia/_tests/core/full_node/stores/test_full_node_store.py +11 -4
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_address_manager.py +200 -27
- chia/_tests/core/full_node/test_block_height_map.py +2 -2
- chia/_tests/core/full_node/test_conditions.py +7 -6
- chia/_tests/core/full_node/test_full_node.py +456 -40
- chia/_tests/core/full_node/test_generator_tools.py +32 -2
- chia/_tests/core/full_node/test_hint_management.py +1 -1
- chia/_tests/core/full_node/test_node_load.py +20 -21
- chia/_tests/core/full_node/test_performance.py +3 -4
- chia/_tests/core/full_node/test_prev_tx_block.py +43 -0
- chia/_tests/core/full_node/test_subscriptions.py +1 -2
- chia/_tests/core/full_node/test_transactions.py +9 -5
- chia/_tests/core/full_node/test_tx_processing_queue.py +1 -2
- chia/_tests/core/large_block.py +1 -2
- chia/_tests/core/make_block_generator.py +3 -4
- chia/_tests/core/mempool/test_mempool.py +36 -86
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +1 -1
- chia/_tests/core/mempool/test_mempool_item_queries.py +1 -3
- chia/_tests/core/mempool/test_mempool_manager.py +529 -69
- chia/_tests/core/mempool/test_mempool_performance.py +3 -2
- chia/_tests/core/mempool/test_singleton_fast_forward.py +61 -132
- chia/_tests/core/server/flood.py +1 -1
- chia/_tests/core/server/test_dos.py +1 -1
- chia/_tests/core/server/test_node_discovery.py +41 -27
- chia/_tests/core/server/test_rate_limits.py +1 -1
- chia/_tests/core/server/test_server.py +1 -1
- chia/_tests/core/services/test_services.py +5 -5
- chia/_tests/core/ssl/test_ssl.py +1 -1
- chia/_tests/core/test_cost_calculation.py +6 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_crawler_rpc.py +1 -1
- chia/_tests/core/test_db_conversion.py +3 -1
- chia/_tests/core/test_db_validation.py +5 -3
- chia/_tests/core/test_farmer_harvester_rpc.py +15 -15
- chia/_tests/core/test_filter.py +4 -1
- chia/_tests/core/test_full_node_rpc.py +99 -82
- chia/_tests/core/test_program.py +2 -2
- chia/_tests/core/util/test_block_cache.py +1 -1
- chia/_tests/core/util/test_keychain.py +2 -2
- chia/_tests/core/util/test_lockfile.py +1 -1
- chia/_tests/core/util/test_log_exceptions.py +5 -5
- chia/_tests/core/util/test_streamable.py +81 -22
- chia/_tests/db/test_db_wrapper.py +1 -3
- chia/_tests/environments/wallet.py +5 -5
- chia/_tests/farmer_harvester/test_farmer.py +9 -7
- chia/_tests/farmer_harvester/test_farmer_harvester.py +11 -4
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +15 -9
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +1 -2
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +7 -5
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -1
- chia/_tests/generator/test_compression.py +1 -2
- chia/_tests/generator/test_rom.py +8 -4
- chia/_tests/plot_sync/test_plot_sync.py +3 -3
- chia/_tests/plot_sync/test_receiver.py +3 -3
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +3 -3
- chia/_tests/plot_sync/util.py +2 -2
- chia/_tests/pools/test_pool_cmdline.py +48 -21
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +2 -3
- chia/_tests/pools/test_pool_rpc.py +237 -105
- chia/_tests/pools/test_pool_wallet.py +11 -2
- chia/_tests/pools/test_wallet_pool_store.py +5 -4
- chia/_tests/rpc/test_rpc_client.py +1 -1
- chia/_tests/simulation/test_simulation.py +13 -8
- chia/_tests/simulation/test_simulator.py +2 -2
- chia/_tests/timelord/test_new_peak.py +191 -47
- chia/_tests/timelord/test_timelord.py +1 -1
- chia/_tests/tools/test_full_sync.py +0 -2
- chia/_tests/tools/test_run_block.py +3 -1
- chia/_tests/util/benchmark_cost.py +3 -3
- chia/_tests/util/benchmarks.py +2 -2
- chia/_tests/util/blockchain.py +11 -5
- chia/_tests/util/blockchain_mock.py +1 -4
- chia/_tests/util/coin_store.py +29 -0
- chia/_tests/util/constants.py +2 -18
- chia/_tests/util/full_sync.py +3 -3
- chia/_tests/util/generator_tools_testing.py +2 -3
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +33 -31
- chia/_tests/util/network_protocol_data.py +19 -17
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +3 -1
- chia/_tests/util/run_block.py +2 -2
- chia/_tests/util/setup_nodes.py +7 -7
- chia/_tests/util/spend_sim.py +47 -55
- chia/_tests/util/test_condition_tools.py +5 -4
- chia/_tests/util/test_config.py +2 -2
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +12 -14
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_paginator.py +4 -4
- chia/_tests/util/test_priority_mutex.py +2 -2
- chia/_tests/util/test_replace_str_to_bytes.py +15 -5
- chia/_tests/util/test_ssl_check.py +1 -1
- chia/_tests/util/test_testnet_overrides.py +13 -3
- chia/_tests/util/time_out_assert.py +4 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -2
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +352 -432
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +3 -6
- chia/_tests/wallet/cat_wallet/test_trades.py +53 -77
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -1
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +3 -3
- chia/_tests/wallet/clawback/test_clawback_metadata.py +4 -2
- chia/_tests/wallet/conftest.py +11 -12
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +11 -4
- chia/_tests/wallet/db_wallet/test_dl_offers.py +433 -130
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +3 -3
- chia/_tests/wallet/did_wallet/test_did.py +2132 -2000
- chia/_tests/wallet/nft_wallet/config.py +1 -1
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1610 -742
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +486 -907
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +4 -4
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +517 -294
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +133 -62
- chia/_tests/wallet/rpc/test_wallet_rpc.py +495 -265
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +10 -6
- chia/_tests/wallet/sync/test_wallet_sync.py +89 -60
- chia/_tests/wallet/test_clvm_casts.py +88 -0
- chia/_tests/wallet/test_coin_management.py +1 -1
- chia/_tests/wallet/test_coin_selection.py +1 -1
- chia/_tests/wallet/test_conditions.py +1 -1
- chia/_tests/wallet/test_new_wallet_protocol.py +13 -11
- chia/_tests/wallet/test_notifications.py +5 -3
- chia/_tests/wallet/test_sign_coin_spends.py +6 -6
- chia/_tests/wallet/test_signer_protocol.py +13 -12
- chia/_tests/wallet/test_singleton.py +1 -1
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +5 -7
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +108 -29
- chia/_tests/wallet/test_wallet_action_scope.py +9 -2
- chia/_tests/wallet/test_wallet_blockchain.py +2 -3
- chia/_tests/wallet/test_wallet_key_val_store.py +1 -2
- chia/_tests/wallet/test_wallet_node.py +2 -4
- chia/_tests/wallet/test_wallet_retry.py +4 -2
- chia/_tests/wallet/test_wallet_state_manager.py +191 -5
- chia/_tests/wallet/test_wallet_test_framework.py +1 -1
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +8 -8
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -12
- chia/_tests/wallet/wallet_block_tools.py +6 -6
- chia/_tests/weight_proof/test_weight_proof.py +10 -48
- chia/apis.py +1 -1
- chia/cmds/beta.py +1 -1
- chia/cmds/chia.py +9 -9
- chia/cmds/cmd_classes.py +12 -11
- chia/cmds/cmd_helpers.py +1 -1
- chia/cmds/cmds_util.py +12 -9
- chia/cmds/coin_funcs.py +2 -2
- chia/cmds/configure.py +2 -2
- chia/cmds/data.py +0 -2
- chia/cmds/data_funcs.py +1 -1
- chia/cmds/db_validate_func.py +1 -2
- chia/cmds/dev/__init__.py +0 -0
- chia/cmds/dev/data.py +273 -0
- chia/cmds/{gh.py → dev/gh.py} +5 -5
- chia/cmds/dev/main.py +22 -0
- chia/cmds/dev/mempool.py +78 -0
- chia/cmds/dev/mempool_funcs.py +63 -0
- chia/cmds/farm_funcs.py +5 -4
- chia/cmds/init_funcs.py +11 -11
- chia/cmds/keys.py +2 -2
- chia/cmds/keys_funcs.py +4 -4
- chia/cmds/netspace_funcs.py +1 -1
- chia/cmds/peer_funcs.py +2 -2
- chia/cmds/plotnft_funcs.py +72 -26
- chia/cmds/rpc.py +1 -1
- chia/cmds/show_funcs.py +5 -5
- chia/cmds/signer.py +8 -7
- chia/cmds/sim_funcs.py +8 -9
- chia/cmds/wallet.py +2 -2
- chia/cmds/wallet_funcs.py +165 -131
- chia/{util → consensus}/augmented_chain.py +1 -2
- chia/consensus/block_body_validation.py +54 -40
- chia/consensus/block_creation.py +42 -76
- chia/consensus/block_header_validation.py +32 -26
- chia/consensus/block_record.py +0 -3
- chia/consensus/blockchain.py +23 -32
- chia/consensus/blockchain_interface.py +1 -5
- chia/consensus/check_time_locks.py +57 -0
- chia/consensus/coin_store_protocol.py +151 -0
- chia/consensus/coinbase.py +0 -6
- chia/consensus/condition_costs.py +4 -0
- chia/{util → consensus}/condition_tools.py +4 -5
- chia/consensus/cost_calculator.py +1 -1
- chia/consensus/default_constants.py +32 -9
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +1 -2
- chia/consensus/find_fork_point.py +1 -3
- chia/consensus/full_block_to_block_record.py +1 -6
- chia/{util → consensus}/generator_tools.py +1 -3
- chia/consensus/get_block_challenge.py +30 -7
- chia/consensus/make_sub_epoch_summary.py +1 -5
- chia/consensus/multiprocess_validation.py +21 -20
- chia/consensus/pot_iterations.py +74 -13
- chia/{util → consensus}/prev_transaction_block.py +1 -1
- chia/consensus/vdf_info_computation.py +1 -3
- chia/daemon/keychain_proxy.py +5 -5
- chia/daemon/server.py +22 -5
- chia/data_layer/data_layer.py +92 -51
- chia/{rpc → data_layer}/data_layer_rpc_api.py +1 -1
- chia/{rpc → data_layer}/data_layer_rpc_util.py +3 -6
- chia/data_layer/data_layer_util.py +4 -6
- chia/data_layer/data_layer_wallet.py +42 -69
- chia/data_layer/dl_wallet_store.py +12 -6
- chia/data_layer/download_data.py +3 -3
- chia/data_layer/s3_plugin_service.py +0 -1
- chia/farmer/farmer.py +3 -4
- chia/farmer/farmer_api.py +11 -7
- chia/{rpc → farmer}/farmer_rpc_client.py +1 -1
- chia/full_node/block_height_map.py +7 -6
- chia/full_node/block_store.py +5 -7
- chia/full_node/bundle_tools.py +1 -2
- chia/full_node/coin_store.py +153 -124
- chia/{types → full_node}/eligible_coin_spends.py +39 -70
- chia/full_node/fee_estimator.py +1 -1
- chia/full_node/fee_estimator_interface.py +0 -8
- chia/full_node/fee_tracker.py +25 -25
- chia/full_node/full_node.py +70 -53
- chia/full_node/full_node_api.py +57 -40
- chia/{rpc → full_node}/full_node_rpc_api.py +87 -8
- chia/{rpc → full_node}/full_node_rpc_client.py +7 -6
- chia/full_node/full_node_store.py +23 -8
- chia/full_node/mempool.py +206 -53
- chia/full_node/mempool_check_conditions.py +20 -63
- chia/full_node/mempool_manager.py +47 -45
- chia/full_node/subscriptions.py +1 -3
- chia/full_node/tx_processing_queue.py +50 -3
- chia/full_node/weight_proof.py +46 -37
- chia/harvester/harvester.py +1 -1
- chia/harvester/harvester_api.py +22 -7
- chia/introducer/introducer.py +1 -1
- chia/introducer/introducer_api.py +1 -1
- chia/plot_sync/exceptions.py +1 -1
- chia/plot_sync/receiver.py +1 -1
- chia/plot_sync/sender.py +2 -2
- chia/pools/pool_puzzles.py +13 -18
- chia/pools/pool_wallet.py +23 -46
- chia/protocols/farmer_protocol.py +11 -3
- chia/protocols/full_node_protocol.py +1 -4
- chia/protocols/harvester_protocol.py +3 -3
- chia/protocols/pool_protocol.py +1 -2
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +1 -3
- chia/protocols/wallet_protocol.py +3 -3
- chia/rpc/rpc_client.py +7 -8
- chia/rpc/rpc_server.py +3 -3
- chia/rpc/util.py +3 -1
- chia/seeder/crawler.py +1 -1
- chia/seeder/crawler_api.py +1 -1
- chia/seeder/dns_server.py +2 -0
- chia/seeder/start_crawler.py +3 -3
- chia/server/address_manager.py +286 -38
- chia/server/address_manager_store.py +0 -215
- chia/{types → server}/aliases.py +7 -7
- chia/server/api_protocol.py +1 -1
- chia/server/chia_policy.py +1 -1
- chia/server/node_discovery.py +76 -113
- chia/server/rate_limits.py +1 -1
- chia/server/resolve_peer_info.py +43 -0
- chia/server/server.py +5 -5
- chia/server/start_data_layer.py +4 -4
- chia/server/start_farmer.py +5 -4
- chia/server/start_full_node.py +5 -4
- chia/server/start_harvester.py +7 -5
- chia/server/start_introducer.py +2 -2
- chia/server/start_service.py +1 -1
- chia/server/start_timelord.py +7 -5
- chia/server/start_wallet.py +7 -5
- chia/server/ws_connection.py +1 -1
- chia/simulator/add_blocks_in_batches.py +2 -2
- chia/simulator/block_tools.py +245 -201
- chia/simulator/full_node_simulator.py +38 -10
- chia/simulator/setup_services.py +12 -12
- chia/simulator/simulator_full_node_rpc_api.py +2 -2
- chia/simulator/simulator_full_node_rpc_client.py +2 -2
- chia/simulator/simulator_test_tools.py +2 -2
- chia/simulator/start_simulator.py +1 -1
- chia/simulator/wallet_tools.py +10 -18
- chia/ssl/create_ssl.py +1 -1
- chia/timelord/iters_from_block.py +14 -14
- chia/timelord/timelord.py +15 -11
- chia/timelord/timelord_api.py +14 -2
- chia/timelord/timelord_state.py +20 -14
- chia/types/blockchain_format/program.py +53 -10
- chia/types/blockchain_format/proof_of_space.py +73 -19
- chia/types/coin_spend.py +3 -56
- chia/types/generator_types.py +28 -0
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +12 -7
- chia/types/unfinished_header_block.py +1 -2
- chia/types/validation_state.py +1 -2
- chia/types/weight_proof.py +1 -3
- chia/util/action_scope.py +3 -3
- chia/util/block_cache.py +1 -2
- chia/util/byte_types.py +1 -1
- chia/util/casts.py +21 -0
- chia/util/config.py +0 -37
- chia/util/db_wrapper.py +8 -1
- chia/util/errors.py +3 -2
- chia/util/initial-config.yaml +21 -5
- chia/util/keychain.py +6 -7
- chia/util/keyring_wrapper.py +5 -5
- chia/util/limited_semaphore.py +1 -1
- chia/util/priority_mutex.py +1 -1
- chia/util/streamable.py +63 -5
- chia/util/task_timing.py +1 -1
- chia/util/virtual_project_analysis.py +1 -1
- chia/wallet/cat_wallet/cat_info.py +7 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +9 -5
- chia/wallet/cat_wallet/cat_utils.py +1 -1
- chia/wallet/cat_wallet/cat_wallet.py +44 -36
- chia/wallet/cat_wallet/lineage_store.py +7 -0
- chia/wallet/cat_wallet/r_cat_wallet.py +274 -0
- chia/wallet/conditions.py +5 -10
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -4
- chia/wallet/derivation_record.py +33 -0
- chia/wallet/derive_keys.py +3 -3
- chia/wallet/did_wallet/did_info.py +12 -3
- chia/wallet/did_wallet/did_wallet.py +132 -101
- chia/wallet/did_wallet/did_wallet_puzzles.py +9 -9
- chia/wallet/driver_protocol.py +3 -1
- chia/{types/spend_bundle.py → wallet/estimate_fees.py} +2 -7
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
- chia/wallet/nft_wallet/nft_wallet.py +69 -112
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +6 -4
- chia/wallet/nft_wallet/transfer_program_puzzle.py +4 -2
- chia/wallet/nft_wallet/uncurry_nft.py +4 -6
- chia/wallet/notification_manager.py +2 -3
- chia/wallet/outer_puzzles.py +7 -2
- chia/wallet/puzzle_drivers.py +1 -1
- chia/wallet/puzzles/clawback/drivers.py +5 -4
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -1
- chia/wallet/puzzles/singleton_top_layer.py +2 -1
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +2 -1
- chia/wallet/puzzles/tails.py +1 -3
- chia/wallet/signer_protocol.py +5 -6
- chia/wallet/singleton.py +5 -4
- chia/wallet/singleton_record.py +1 -1
- chia/wallet/trade_manager.py +18 -20
- chia/wallet/trade_record.py +3 -6
- chia/wallet/trading/offer.py +12 -13
- chia/wallet/uncurried_puzzle.py +2 -2
- chia/wallet/util/compute_additions.py +58 -0
- chia/wallet/util/compute_hints.py +3 -3
- chia/wallet/util/compute_memos.py +4 -4
- chia/wallet/util/curry_and_treehash.py +2 -1
- chia/wallet/util/debug_spend_bundle.py +1 -1
- chia/wallet/util/merkle_tree.py +1 -1
- chia/wallet/util/peer_request_cache.py +1 -2
- chia/wallet/util/tx_config.py +3 -8
- chia/wallet/util/wallet_sync_utils.py +10 -5
- chia/wallet/util/wallet_types.py +1 -0
- chia/wallet/vc_wallet/cr_cat_drivers.py +17 -18
- chia/wallet/vc_wallet/cr_cat_wallet.py +30 -28
- chia/wallet/vc_wallet/cr_outer_puzzle.py +5 -3
- chia/wallet/vc_wallet/vc_drivers.py +50 -8
- chia/wallet/vc_wallet/vc_store.py +3 -5
- chia/wallet/vc_wallet/vc_wallet.py +15 -22
- chia/wallet/wallet.py +36 -46
- chia/wallet/wallet_action_scope.py +73 -4
- chia/wallet/wallet_blockchain.py +1 -3
- chia/wallet/wallet_interested_store.py +1 -1
- chia/wallet/wallet_nft_store.py +3 -3
- chia/wallet/wallet_node.py +17 -16
- chia/wallet/wallet_node_api.py +4 -5
- chia/wallet/wallet_pool_store.py +1 -1
- chia/wallet/wallet_protocol.py +2 -0
- chia/wallet/wallet_puzzle_store.py +1 -1
- chia/{rpc → wallet}/wallet_request_types.py +670 -81
- chia/{rpc → wallet}/wallet_rpc_api.py +735 -766
- chia/{rpc → wallet}/wallet_rpc_client.py +268 -420
- chia/wallet/wallet_singleton_store.py +8 -7
- chia/wallet/wallet_spend_bundle.py +4 -3
- chia/wallet/wallet_state_manager.py +320 -191
- chia/wallet/wallet_weight_proof_handler.py +1 -2
- chia/wallet/wsm_apis.py +98 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/METADATA +7 -7
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/RECORD +443 -436
- mozilla-ca/cacert.pem +3 -165
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +0 -145
- chia/cmds/dev.py +0 -18
- chia/types/blockchain_format/slots.py +0 -9
- chia/types/blockchain_format/sub_epoch_summary.py +0 -5
- chia/types/end_of_slot_bundle.py +0 -5
- chia/types/full_block.py +0 -5
- chia/types/header_block.py +0 -5
- chia/types/spend_bundle_conditions.py +0 -7
- chia/types/transaction_queue_entry.py +0 -56
- chia/types/unfinished_block.py +0 -5
- /chia/cmds/{installers.py → dev/installers.py} +0 -0
- /chia/cmds/{sim.py → dev/sim.py} +0 -0
- /chia/{util → cmds}/dump_keyring.py +0 -0
- /chia/{full_node → consensus}/signage_point.py +0 -0
- /chia/{rpc → data_layer}/data_layer_rpc_client.py +0 -0
- /chia/{rpc → farmer}/farmer_rpc_api.py +0 -0
- /chia/{util → full_node}/full_block_utils.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_api.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_client.py +0 -0
- /chia/{full_node → protocols}/fee_estimate.py +0 -0
- /chia/{server → protocols}/outbound_message.py +0 -0
- /chia/{rpc → seeder}/crawler_rpc_api.py +0 -0
- /chia/{util → simulator}/vdf_prover.py +0 -0
- /chia/{util → ssl}/ssl_check.py +0 -0
- /chia/{rpc → timelord}/timelord_rpc_api.py +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/entry_points.txt +0 -0
chia/wallet/wallet.py
CHANGED
|
@@ -4,7 +4,7 @@ import logging
|
|
|
4
4
|
import time
|
|
5
5
|
from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
|
|
6
6
|
|
|
7
|
-
from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
|
|
7
|
+
from chia_rs import AugSchemeMPL, CoinSpend, G1Element, G2Element, PrivateKey
|
|
8
8
|
from chia_rs.sized_bytes import bytes32
|
|
9
9
|
from chia_rs.sized_ints import uint32, uint64, uint128
|
|
10
10
|
from typing_extensions import Unpack
|
|
@@ -12,7 +12,7 @@ from typing_extensions import Unpack
|
|
|
12
12
|
from chia.types.blockchain_format.coin import Coin
|
|
13
13
|
from chia.types.blockchain_format.program import Program
|
|
14
14
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
15
|
-
from chia.types.coin_spend import
|
|
15
|
+
from chia.types.coin_spend import make_spend
|
|
16
16
|
from chia.types.signing_mode import CHIP_0002_SIGN_MESSAGE_PREFIX, SigningMode
|
|
17
17
|
from chia.util.hash import std_hash
|
|
18
18
|
from chia.util.streamable import Streamable
|
|
@@ -177,38 +177,6 @@ class Wallet:
|
|
|
177
177
|
public_key = await self.wallet_state_manager.get_public_key(puzzle_hash)
|
|
178
178
|
return puzzle_for_pk(G1Element.from_bytes(public_key))
|
|
179
179
|
|
|
180
|
-
async def get_new_puzzle(self) -> Program:
|
|
181
|
-
dr = await self.wallet_state_manager.get_unused_derivation_record(self.id())
|
|
182
|
-
puzzle = puzzle_for_pk(dr.pubkey)
|
|
183
|
-
return puzzle
|
|
184
|
-
|
|
185
|
-
async def get_puzzle(self, new: bool) -> Program:
|
|
186
|
-
if new:
|
|
187
|
-
return await self.get_new_puzzle()
|
|
188
|
-
else:
|
|
189
|
-
record: Optional[
|
|
190
|
-
DerivationRecord
|
|
191
|
-
] = await self.wallet_state_manager.get_current_derivation_record_for_wallet(self.id())
|
|
192
|
-
if record is None:
|
|
193
|
-
return await self.get_new_puzzle() # pragma: no cover
|
|
194
|
-
puzzle = puzzle_for_pk(record.pubkey)
|
|
195
|
-
return puzzle
|
|
196
|
-
|
|
197
|
-
async def get_puzzle_hash(self, new: bool) -> bytes32:
|
|
198
|
-
if new:
|
|
199
|
-
return await self.get_new_puzzlehash()
|
|
200
|
-
else:
|
|
201
|
-
record: Optional[
|
|
202
|
-
DerivationRecord
|
|
203
|
-
] = await self.wallet_state_manager.get_current_derivation_record_for_wallet(self.id())
|
|
204
|
-
if record is None:
|
|
205
|
-
return await self.get_new_puzzlehash()
|
|
206
|
-
return record.puzzle_hash
|
|
207
|
-
|
|
208
|
-
async def get_new_puzzlehash(self) -> bytes32:
|
|
209
|
-
puzhash = (await self.wallet_state_manager.get_unused_derivation_record(self.id())).puzzle_hash
|
|
210
|
-
return puzhash
|
|
211
|
-
|
|
212
180
|
def make_solution(
|
|
213
181
|
self,
|
|
214
182
|
primaries: list[CreateCoin],
|
|
@@ -272,6 +240,8 @@ class Wallet:
|
|
|
272
240
|
negative_change_allowed: bool = False,
|
|
273
241
|
puzzle_decorator_override: Optional[list[dict[str, Any]]] = None,
|
|
274
242
|
extra_conditions: tuple[Condition, ...] = tuple(),
|
|
243
|
+
reserve_fee: Optional[uint64] = None,
|
|
244
|
+
preferred_change_puzzle_hash: Optional[bytes32] = None,
|
|
275
245
|
) -> list[CoinSpend]:
|
|
276
246
|
"""
|
|
277
247
|
Generates a unsigned transaction in form of List(Puzzle, Solutions)
|
|
@@ -338,15 +308,22 @@ class Wallet:
|
|
|
338
308
|
]
|
|
339
309
|
|
|
340
310
|
if change > 0:
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
311
|
+
change_puzzle_hash = (
|
|
312
|
+
preferred_change_puzzle_hash
|
|
313
|
+
if preferred_change_puzzle_hash is not None
|
|
314
|
+
else await action_scope.get_puzzle_hash(self.wallet_state_manager)
|
|
315
|
+
)
|
|
316
|
+
for primary in primaries:
|
|
317
|
+
if change_puzzle_hash == primary.puzzle_hash and change == primary.amount:
|
|
318
|
+
if preferred_change_puzzle_hash is not None:
|
|
319
|
+
raise ValueError(
|
|
320
|
+
"A `preferred_change_puzzle_hash` was specified that would make a duplicate output"
|
|
321
|
+
)
|
|
322
|
+
# We cannot create two coins has same id, create a new puzhash for the change:
|
|
323
|
+
change_puzzle_hash = await action_scope.get_puzzle_hash(
|
|
324
|
+
self.wallet_state_manager, override_reuse_puzhash_with=False
|
|
325
|
+
)
|
|
326
|
+
break
|
|
350
327
|
primaries.append(CreateCoin(change_puzzle_hash, uint64(change)))
|
|
351
328
|
message_list: list[bytes32] = [c.name() for c in coins]
|
|
352
329
|
for primary in primaries:
|
|
@@ -355,7 +332,7 @@ class Wallet:
|
|
|
355
332
|
puzzle: Program = await self.puzzle_for_puzzle_hash(coin.puzzle_hash)
|
|
356
333
|
solution: Program = self.make_solution(
|
|
357
334
|
primaries=primaries,
|
|
358
|
-
fee=fee,
|
|
335
|
+
fee=fee if reserve_fee is None else reserve_fee,
|
|
359
336
|
conditions=(*extra_conditions, CreateCoinAnnouncement(message)),
|
|
360
337
|
)
|
|
361
338
|
solution = decorator_manager.solve(inner_puzzle, target_primaries, solution)
|
|
@@ -416,6 +393,8 @@ class Wallet:
|
|
|
416
393
|
origin_id: Optional[bytes32] = kwargs.get("origin_id", None)
|
|
417
394
|
negative_change_allowed: bool = kwargs.get("negative_change_allowed", False)
|
|
418
395
|
puzzle_decorator_override: Optional[list[dict[str, Any]]] = kwargs.get("puzzle_decorator_override", None)
|
|
396
|
+
reserve_fee: Optional[uint64] = kwargs.get("reserve_fee", None)
|
|
397
|
+
preferred_change_puzzle_hash: Optional[bytes32] = kwargs.get("preferred_change_puzzle_hash", None)
|
|
419
398
|
"""
|
|
420
399
|
Use this to generate transaction.
|
|
421
400
|
Note: this must be called under a wallet state manager lock
|
|
@@ -435,6 +414,8 @@ class Wallet:
|
|
|
435
414
|
negative_change_allowed,
|
|
436
415
|
puzzle_decorator_override=puzzle_decorator_override,
|
|
437
416
|
extra_conditions=extra_conditions,
|
|
417
|
+
reserve_fee=reserve_fee,
|
|
418
|
+
preferred_change_puzzle_hash=preferred_change_puzzle_hash,
|
|
438
419
|
)
|
|
439
420
|
assert len(transaction) > 0
|
|
440
421
|
spend_bundle = WalletSpendBundle(transaction, G2Element())
|
|
@@ -477,16 +458,22 @@ class Wallet:
|
|
|
477
458
|
self,
|
|
478
459
|
fee: uint64,
|
|
479
460
|
action_scope: WalletActionScope,
|
|
461
|
+
coins: Optional[set[Coin]] = None,
|
|
480
462
|
extra_conditions: tuple[Condition, ...] = tuple(),
|
|
463
|
+
reserve_fee: Optional[uint64] = None,
|
|
464
|
+
preferred_change_puzzle_hash: Optional[bytes32] = None,
|
|
481
465
|
) -> None:
|
|
482
|
-
|
|
466
|
+
if coins is None:
|
|
467
|
+
coins = await self.select_coins(fee, action_scope)
|
|
483
468
|
await self.generate_signed_transaction(
|
|
484
469
|
[],
|
|
485
470
|
[],
|
|
486
471
|
action_scope,
|
|
487
472
|
fee=fee,
|
|
488
|
-
coins=
|
|
473
|
+
coins=coins,
|
|
489
474
|
extra_conditions=extra_conditions,
|
|
475
|
+
reserve_fee=reserve_fee,
|
|
476
|
+
preferred_change_puzzle_hash=preferred_change_puzzle_hash,
|
|
490
477
|
)
|
|
491
478
|
|
|
492
479
|
async def get_coins_to_offer(
|
|
@@ -522,6 +509,9 @@ class Wallet:
|
|
|
522
509
|
return True
|
|
523
510
|
return False
|
|
524
511
|
|
|
512
|
+
def hardened_pubkey_for_path(self, path: list[int]) -> G1Element:
|
|
513
|
+
return _derive_path(self.wallet_state_manager.get_master_private_key(), path).get_g1()
|
|
514
|
+
|
|
525
515
|
async def sum_hint_for_pubkey(self, pk: bytes) -> Optional[SumHint]:
|
|
526
516
|
pk_parsed: G1Element = G1Element.from_bytes(pk)
|
|
527
517
|
dr: Optional[DerivationRecord] = await self.wallet_state_manager.puzzle_store.record_for_puzzle_hash(
|
|
@@ -3,16 +3,22 @@ from __future__ import annotations
|
|
|
3
3
|
import contextlib
|
|
4
4
|
from collections.abc import AsyncIterator
|
|
5
5
|
from dataclasses import dataclass, field, replace
|
|
6
|
-
from typing import TYPE_CHECKING, Optional, cast, final
|
|
6
|
+
from typing import TYPE_CHECKING, Callable, Optional, cast, final
|
|
7
|
+
|
|
8
|
+
from chia_rs.chia_rs import G1Element
|
|
9
|
+
from chia_rs.sized_bytes import bytes32
|
|
7
10
|
|
|
8
11
|
from chia.data_layer.singleton_record import SingletonRecord
|
|
9
12
|
from chia.types.blockchain_format.coin import Coin
|
|
13
|
+
from chia.types.blockchain_format.program import Program
|
|
10
14
|
from chia.util.action_scope import ActionScope
|
|
11
15
|
from chia.util.streamable import Streamable, streamable
|
|
16
|
+
from chia.wallet.derivation_record import DerivationRecord
|
|
12
17
|
from chia.wallet.signer_protocol import SigningResponse
|
|
13
18
|
from chia.wallet.transaction_record import TransactionRecord
|
|
14
19
|
from chia.wallet.util.tx_config import TXConfig
|
|
15
20
|
from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
|
21
|
+
from chia.wallet.wsm_apis import GetUnusedDerivationRecordResult, StreambleGetUnusedDerivationRecordResult
|
|
16
22
|
|
|
17
23
|
if TYPE_CHECKING:
|
|
18
24
|
# Avoid a circular import here
|
|
@@ -27,6 +33,7 @@ class _StreamableWalletSideEffects(Streamable):
|
|
|
27
33
|
extra_spends: list[WalletSpendBundle]
|
|
28
34
|
selected_coins: list[Coin]
|
|
29
35
|
singleton_records: list[SingletonRecord]
|
|
36
|
+
get_unused_derivation_record_result: Optional[StreambleGetUnusedDerivationRecordResult]
|
|
30
37
|
|
|
31
38
|
|
|
32
39
|
@dataclass
|
|
@@ -36,6 +43,7 @@ class WalletSideEffects:
|
|
|
36
43
|
extra_spends: list[WalletSpendBundle] = field(default_factory=list)
|
|
37
44
|
selected_coins: list[Coin] = field(default_factory=list)
|
|
38
45
|
singleton_records: list[SingletonRecord] = field(default_factory=list)
|
|
46
|
+
get_unused_derivation_record_result: Optional[StreambleGetUnusedDerivationRecordResult] = None
|
|
39
47
|
|
|
40
48
|
def __bytes__(self) -> bytes:
|
|
41
49
|
return bytes(_StreamableWalletSideEffects(**self.__dict__))
|
|
@@ -54,6 +62,7 @@ class WalletActionConfig:
|
|
|
54
62
|
additional_signing_responses: list[SigningResponse]
|
|
55
63
|
extra_spends: list[WalletSpendBundle]
|
|
56
64
|
tx_config: TXConfig
|
|
65
|
+
puzzle_for_pk: Callable[[G1Element], Program]
|
|
57
66
|
|
|
58
67
|
def adjust_for_side_effects(self, side_effects: WalletSideEffects) -> WalletActionConfig:
|
|
59
68
|
return replace(
|
|
@@ -65,7 +74,59 @@ class WalletActionConfig:
|
|
|
65
74
|
)
|
|
66
75
|
|
|
67
76
|
|
|
68
|
-
WalletActionScope
|
|
77
|
+
class WalletActionScope(ActionScope[WalletSideEffects, WalletActionConfig]):
|
|
78
|
+
async def _get_unused_derivation_path(
|
|
79
|
+
self, wallet_state_manager: WalletStateManager
|
|
80
|
+
) -> GetUnusedDerivationRecordResult:
|
|
81
|
+
async with self.use() as interface:
|
|
82
|
+
result = await wallet_state_manager._get_unused_derivation_record(
|
|
83
|
+
wallet_state_manager.main_wallet.id(),
|
|
84
|
+
previous_result=interface.side_effects.get_unused_derivation_record_result.to_standard()
|
|
85
|
+
if interface.side_effects.get_unused_derivation_record_result is not None
|
|
86
|
+
else None,
|
|
87
|
+
)
|
|
88
|
+
interface.side_effects.get_unused_derivation_record_result = (
|
|
89
|
+
StreambleGetUnusedDerivationRecordResult.from_standard(result)
|
|
90
|
+
)
|
|
91
|
+
return result
|
|
92
|
+
|
|
93
|
+
async def _get_new_puzzle(self, wallet_state_manager: WalletStateManager) -> Program:
|
|
94
|
+
puzzle = self.config.puzzle_for_pk((await self._get_unused_derivation_path(wallet_state_manager)).record.pubkey)
|
|
95
|
+
return puzzle
|
|
96
|
+
|
|
97
|
+
async def _get_new_puzzle_hash(self, wallet_state_manager: WalletStateManager) -> bytes32:
|
|
98
|
+
return (await self._get_unused_derivation_path(wallet_state_manager)).record.puzzle_hash
|
|
99
|
+
|
|
100
|
+
async def get_puzzle(
|
|
101
|
+
self, wallet_state_manager: WalletStateManager, override_reuse_puzhash_with: Optional[bool] = None
|
|
102
|
+
) -> Program:
|
|
103
|
+
if (
|
|
104
|
+
self.config.tx_config.reuse_puzhash or override_reuse_puzhash_with is True
|
|
105
|
+
) and override_reuse_puzhash_with is not False:
|
|
106
|
+
record: Optional[DerivationRecord] = await wallet_state_manager.get_current_derivation_record_for_wallet(
|
|
107
|
+
wallet_state_manager.main_wallet.id()
|
|
108
|
+
)
|
|
109
|
+
if record is None:
|
|
110
|
+
return await self._get_new_puzzle(wallet_state_manager) # pragma: no cover
|
|
111
|
+
puzzle = self.config.puzzle_for_pk(record.pubkey)
|
|
112
|
+
return puzzle
|
|
113
|
+
else:
|
|
114
|
+
return await self._get_new_puzzle(wallet_state_manager)
|
|
115
|
+
|
|
116
|
+
async def get_puzzle_hash(
|
|
117
|
+
self, wallet_state_manager: WalletStateManager, override_reuse_puzhash_with: Optional[bool] = None
|
|
118
|
+
) -> bytes32:
|
|
119
|
+
if (
|
|
120
|
+
self.config.tx_config.reuse_puzhash or override_reuse_puzhash_with is True
|
|
121
|
+
) and override_reuse_puzhash_with is not False:
|
|
122
|
+
record: Optional[DerivationRecord] = await wallet_state_manager.get_current_derivation_record_for_wallet(
|
|
123
|
+
wallet_state_manager.main_wallet.id()
|
|
124
|
+
)
|
|
125
|
+
if record is None:
|
|
126
|
+
return await self._get_new_puzzle_hash(wallet_state_manager) # pragma: no cover
|
|
127
|
+
return record.puzzle_hash
|
|
128
|
+
else:
|
|
129
|
+
return await self._get_new_puzzle_hash(wallet_state_manager)
|
|
69
130
|
|
|
70
131
|
|
|
71
132
|
@contextlib.asynccontextmanager
|
|
@@ -77,10 +138,16 @@ async def new_wallet_action_scope(
|
|
|
77
138
|
sign: Optional[bool] = None,
|
|
78
139
|
additional_signing_responses: list[SigningResponse] = [],
|
|
79
140
|
extra_spends: list[WalletSpendBundle] = [],
|
|
141
|
+
puzzle_for_pk: Optional[Callable[[G1Element], Program]] = None,
|
|
80
142
|
) -> AsyncIterator[WalletActionScope]:
|
|
81
|
-
|
|
143
|
+
if puzzle_for_pk is None:
|
|
144
|
+
puzzle_for_pk = wallet_state_manager.main_wallet.puzzle_for_pk
|
|
145
|
+
assert puzzle_for_pk is not None
|
|
146
|
+
async with WalletActionScope.new_scope(
|
|
82
147
|
WalletSideEffects,
|
|
83
|
-
WalletActionConfig(
|
|
148
|
+
WalletActionConfig(
|
|
149
|
+
push, merge_spends, sign, additional_signing_responses, extra_spends, tx_config, puzzle_for_pk
|
|
150
|
+
),
|
|
84
151
|
) as self:
|
|
85
152
|
self = cast(WalletActionScope, self)
|
|
86
153
|
async with self.use() as interface:
|
|
@@ -98,3 +165,5 @@ async def new_wallet_action_scope(
|
|
|
98
165
|
extra_spends=self.side_effects.extra_spends,
|
|
99
166
|
singleton_records=self.side_effects.singleton_records,
|
|
100
167
|
)
|
|
168
|
+
if push and self.side_effects.get_unused_derivation_record_result is not None:
|
|
169
|
+
await self.side_effects.get_unused_derivation_record_result.to_standard().commit(wallet_state_manager)
|
chia/wallet/wallet_blockchain.py
CHANGED
|
@@ -3,16 +3,14 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
from typing import TYPE_CHECKING, ClassVar, Optional, cast
|
|
5
5
|
|
|
6
|
-
from chia_rs import ConsensusConstants
|
|
6
|
+
from chia_rs import BlockRecord, ConsensusConstants, HeaderBlock
|
|
7
7
|
from chia_rs.sized_bytes import bytes32
|
|
8
8
|
from chia_rs.sized_ints import uint32, uint64
|
|
9
9
|
|
|
10
10
|
from chia.consensus.block_header_validation import validate_finished_header_block
|
|
11
|
-
from chia.consensus.block_record import BlockRecord
|
|
12
11
|
from chia.consensus.blockchain import AddBlockResult
|
|
13
12
|
from chia.consensus.find_fork_point import find_fork_point_in_chain
|
|
14
13
|
from chia.consensus.full_block_to_block_record import block_to_block_record
|
|
15
|
-
from chia.types.header_block import HeaderBlock
|
|
16
14
|
from chia.types.validation_state import ValidationState
|
|
17
15
|
from chia.types.weight_proof import WeightProof
|
|
18
16
|
from chia.util.errors import Err
|
|
@@ -2,10 +2,10 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import Optional
|
|
4
4
|
|
|
5
|
+
from chia_rs import CoinState
|
|
5
6
|
from chia_rs.sized_bytes import bytes32
|
|
6
7
|
from chia_rs.sized_ints import uint32
|
|
7
8
|
|
|
8
|
-
from chia.protocols.wallet_protocol import CoinState
|
|
9
9
|
from chia.util.db_wrapper import DBWrapper2
|
|
10
10
|
|
|
11
11
|
|
chia/wallet/wallet_nft_store.py
CHANGED
|
@@ -3,10 +3,11 @@ from __future__ import annotations
|
|
|
3
3
|
import json
|
|
4
4
|
import logging
|
|
5
5
|
from sqlite3 import Row
|
|
6
|
-
from typing import Optional,
|
|
6
|
+
from typing import Optional, Union
|
|
7
7
|
|
|
8
8
|
from chia_rs.sized_bytes import bytes32
|
|
9
9
|
from chia_rs.sized_ints import uint32
|
|
10
|
+
from typing_extensions import Self
|
|
10
11
|
|
|
11
12
|
from chia.types.blockchain_format.coin import Coin
|
|
12
13
|
from chia.types.blockchain_format.program import Program
|
|
@@ -15,7 +16,6 @@ from chia.wallet.lineage_proof import LineageProof
|
|
|
15
16
|
from chia.wallet.nft_wallet.nft_info import DEFAULT_STATUS, IN_TRANSACTION_STATUS, NFTCoinInfo
|
|
16
17
|
|
|
17
18
|
log = logging.getLogger(__name__)
|
|
18
|
-
_T_WalletNftStore = TypeVar("_T_WalletNftStore", bound="WalletNftStore")
|
|
19
19
|
REMOVE_BUFF_BLOCKS = 1000
|
|
20
20
|
NFT_COIN_INFO_COLUMNS = "nft_id, coin, lineage_proof, mint_height, status, full_puzzle, latest_height, minter_did"
|
|
21
21
|
|
|
@@ -42,7 +42,7 @@ class WalletNftStore:
|
|
|
42
42
|
db_wrapper: DBWrapper2
|
|
43
43
|
|
|
44
44
|
@classmethod
|
|
45
|
-
async def create(cls
|
|
45
|
+
async def create(cls, db_wrapper: DBWrapper2) -> Self:
|
|
46
46
|
self = cls()
|
|
47
47
|
self.db_wrapper = db_wrapper
|
|
48
48
|
async with self.db_wrapper.writer_maybe_transaction() as conn:
|
chia/wallet/wallet_node.py
CHANGED
|
@@ -14,7 +14,7 @@ from pathlib import Path
|
|
|
14
14
|
from typing import TYPE_CHECKING, Any, ClassVar, Literal, Optional, Union, cast, overload
|
|
15
15
|
|
|
16
16
|
import aiosqlite
|
|
17
|
-
from chia_rs import AugSchemeMPL, ConsensusConstants, G1Element, G2Element, PrivateKey
|
|
17
|
+
from chia_rs import AugSchemeMPL, CoinState, ConsensusConstants, G1Element, G2Element, HeaderBlock, PrivateKey
|
|
18
18
|
from chia_rs.sized_bytes import bytes32
|
|
19
19
|
from chia_rs.sized_ints import uint16, uint32, uint64, uint128
|
|
20
20
|
from packaging.version import Version
|
|
@@ -23,9 +23,9 @@ from chia.consensus.blockchain import AddBlockResult
|
|
|
23
23
|
from chia.daemon.keychain_proxy import KeychainProxy, connect_to_keychain_and_validate, wrap_local_keychain
|
|
24
24
|
from chia.full_node.full_node_api import FullNodeAPI
|
|
25
25
|
from chia.protocols.full_node_protocol import RequestProofOfWeight, RespondProofOfWeight
|
|
26
|
+
from chia.protocols.outbound_message import Message, NodeType, make_msg
|
|
26
27
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
27
28
|
from chia.protocols.wallet_protocol import (
|
|
28
|
-
CoinState,
|
|
29
29
|
CoinStateUpdate,
|
|
30
30
|
NewPeakWallet,
|
|
31
31
|
RegisterForCoinUpdates,
|
|
@@ -38,11 +38,9 @@ from chia.protocols.wallet_protocol import (
|
|
|
38
38
|
)
|
|
39
39
|
from chia.rpc.rpc_server import StateChangedProtocol, default_get_connections
|
|
40
40
|
from chia.server.node_discovery import WalletPeers
|
|
41
|
-
from chia.server.outbound_message import Message, NodeType, make_msg
|
|
42
41
|
from chia.server.server import ChiaServer
|
|
43
42
|
from chia.server.ws_connection import WSChiaConnection
|
|
44
43
|
from chia.types.blockchain_format.coin import Coin
|
|
45
|
-
from chia.types.header_block import HeaderBlock
|
|
46
44
|
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
47
45
|
from chia.types.weight_proof import WeightProof
|
|
48
46
|
from chia.util.batches import to_batches
|
|
@@ -202,7 +200,7 @@ class WalletNode:
|
|
|
202
200
|
else:
|
|
203
201
|
self._keychain_proxy = await connect_to_keychain_and_validate(self.root_path, self.log)
|
|
204
202
|
if not self._keychain_proxy:
|
|
205
|
-
raise KeychainProxyConnectionFailure
|
|
203
|
+
raise KeychainProxyConnectionFailure
|
|
206
204
|
return self._keychain_proxy
|
|
207
205
|
|
|
208
206
|
def get_cache_for_peer(self, peer: WSChiaConnection) -> PeerRequestCache:
|
|
@@ -470,7 +468,8 @@ class WalletNode:
|
|
|
470
468
|
async with self.wallet_state_manager.puzzle_store.lock:
|
|
471
469
|
index = await self.wallet_state_manager.puzzle_store.get_last_derivation_path()
|
|
472
470
|
if index is None or index < self.wallet_state_manager.initial_num_public_keys - 1:
|
|
473
|
-
await self.wallet_state_manager.create_more_puzzle_hashes(from_zero=True)
|
|
471
|
+
result = await self.wallet_state_manager.create_more_puzzle_hashes(from_zero=True)
|
|
472
|
+
await result.commit(self.wallet_state_manager)
|
|
474
473
|
|
|
475
474
|
if self.wallet_peers is None:
|
|
476
475
|
self.initialize_wallet_peers()
|
|
@@ -708,15 +707,16 @@ class WalletNode:
|
|
|
708
707
|
testing = self.config.get("testing", False)
|
|
709
708
|
if self.wallet_peers is None and connect_to_unknown_peers and not testing:
|
|
710
709
|
self.wallet_peers = WalletPeers(
|
|
711
|
-
self.server,
|
|
712
|
-
self.config["target_peer_count"],
|
|
713
|
-
self.root_path
|
|
714
|
-
self.config
|
|
715
|
-
self.config
|
|
716
|
-
self.config["
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
710
|
+
server=self.server,
|
|
711
|
+
target_outbound_count=self.config["target_peer_count"],
|
|
712
|
+
peers_file_path=self.root_path
|
|
713
|
+
/ Path(self.config.get("wallet_peers_file_path", "wallet/db/wallet_peers.dat")),
|
|
714
|
+
introducer_info=self.config["introducer_peer"],
|
|
715
|
+
dns_servers=self.config.get("dns_servers", ["dns-introducer.chia.net"]),
|
|
716
|
+
peer_connect_interval=self.config["peer_connect_interval"],
|
|
717
|
+
selected_network=network_name,
|
|
718
|
+
default_port=default_port,
|
|
719
|
+
log=self.log,
|
|
720
720
|
)
|
|
721
721
|
create_referenced_task(self.wallet_peers.start())
|
|
722
722
|
|
|
@@ -828,7 +828,8 @@ class WalletNode:
|
|
|
828
828
|
min_height_for_subscriptions = fork_height if use_delta_sync else 0
|
|
829
829
|
already_checked_ph: set[bytes32] = set()
|
|
830
830
|
while not self._shut_down:
|
|
831
|
-
await self.wallet_state_manager.create_more_puzzle_hashes()
|
|
831
|
+
result = await self.wallet_state_manager.create_more_puzzle_hashes()
|
|
832
|
+
await result.commit(self.wallet_state_manager)
|
|
832
833
|
all_puzzle_hashes = await self.get_puzzle_hashes_to_subscribe()
|
|
833
834
|
not_checked_puzzle_hashes = set(all_puzzle_hashes) - already_checked_ph
|
|
834
835
|
if not_checked_puzzle_hashes == set():
|
chia/wallet/wallet_node_api.py
CHANGED
|
@@ -3,9 +3,11 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
from typing import TYPE_CHECKING, ClassVar, cast
|
|
5
5
|
|
|
6
|
+
from chia_rs import RespondToPhUpdates
|
|
7
|
+
|
|
6
8
|
from chia.protocols import full_node_protocol, introducer_protocol, wallet_protocol
|
|
9
|
+
from chia.protocols.outbound_message import NodeType
|
|
7
10
|
from chia.server.api_protocol import ApiMetadata
|
|
8
|
-
from chia.server.outbound_message import NodeType
|
|
9
11
|
from chia.server.ws_connection import WSChiaConnection
|
|
10
12
|
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
11
13
|
from chia.util.errors import Err
|
|
@@ -37,14 +39,12 @@ class WalletNodeAPI:
|
|
|
37
39
|
"""
|
|
38
40
|
The full node has rejected our request for removals.
|
|
39
41
|
"""
|
|
40
|
-
pass
|
|
41
42
|
|
|
42
43
|
@metadata.request()
|
|
43
44
|
async def reject_additions_request(self, response: wallet_protocol.RejectAdditionsRequest):
|
|
44
45
|
"""
|
|
45
46
|
The full node has rejected our request for additions.
|
|
46
47
|
"""
|
|
47
|
-
pass
|
|
48
48
|
|
|
49
49
|
@metadata.request(peer_required=True, execute_task=True)
|
|
50
50
|
async def new_peak_wallet(self, peak: wallet_protocol.NewPeakWallet, peer: WSChiaConnection):
|
|
@@ -81,7 +81,6 @@ class WalletNodeAPI:
|
|
|
81
81
|
"""
|
|
82
82
|
The full node has rejected our request for a header.
|
|
83
83
|
"""
|
|
84
|
-
pass
|
|
85
84
|
|
|
86
85
|
@metadata.request()
|
|
87
86
|
async def respond_block_header(self, response: wallet_protocol.RespondBlockHeader):
|
|
@@ -187,7 +186,7 @@ class WalletNodeAPI:
|
|
|
187
186
|
# subclass, as you might expect it wouldn't be. Maybe we can get the
|
|
188
187
|
# protocol working right back at the api.request definition.
|
|
189
188
|
@metadata.request() # type: ignore[type-var]
|
|
190
|
-
async def respond_to_ph_updates(self, request:
|
|
189
|
+
async def respond_to_ph_updates(self, request: RespondToPhUpdates):
|
|
191
190
|
pass
|
|
192
191
|
|
|
193
192
|
@metadata.request()
|
chia/wallet/wallet_pool_store.py
CHANGED
chia/wallet/wallet_protocol.py
CHANGED
|
@@ -102,3 +102,5 @@ class GSTOptionalArgs(TypedDict):
|
|
|
102
102
|
origin_id: NotRequired[Optional[bytes32]]
|
|
103
103
|
negative_change_allowed: NotRequired[bool]
|
|
104
104
|
puzzle_decorator_override: NotRequired[Optional[list[dict[str, Any]]]]
|
|
105
|
+
reserve_fee: NotRequired[Optional[uint64]]
|
|
106
|
+
preferred_change_puzzle_hash: NotRequired[Optional[bytes32]]
|
|
@@ -380,7 +380,7 @@ class WalletPuzzleStore:
|
|
|
380
380
|
pass
|
|
381
381
|
self.last_derivation_index = None
|
|
382
382
|
|
|
383
|
-
async def
|
|
383
|
+
async def get_used_count(self, wallet_id: uint32) -> int:
|
|
384
384
|
"""
|
|
385
385
|
Returns a count of unused derivation indexes
|
|
386
386
|
"""
|