chia-blockchain 2.5.4rc1__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 +53 -47
- 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.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/METADATA +7 -7
- {chia_blockchain-2.5.4rc1.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.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/entry_points.txt +0 -0
chia/wallet/signer_protocol.py
CHANGED
|
@@ -2,13 +2,12 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
|
|
5
|
+
from chia_rs import CoinSpend
|
|
5
6
|
from chia_rs.sized_bytes import bytes32
|
|
6
7
|
from chia_rs.sized_ints import uint64
|
|
7
8
|
|
|
8
9
|
from chia.types.blockchain_format.coin import Coin as _Coin
|
|
9
10
|
from chia.types.blockchain_format.program import Program
|
|
10
|
-
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
11
|
-
from chia.types.coin_spend import CoinSpend
|
|
12
11
|
from chia.util.streamable import Streamable
|
|
13
12
|
from chia.wallet.util.clvm_streamable import clvm_streamable
|
|
14
13
|
|
|
@@ -39,8 +38,8 @@ class Spend(Streamable):
|
|
|
39
38
|
coin_spend.coin.puzzle_hash,
|
|
40
39
|
uint64(coin_spend.coin.amount),
|
|
41
40
|
),
|
|
42
|
-
coin_spend.puzzle_reveal
|
|
43
|
-
coin_spend.solution
|
|
41
|
+
Program.from_serialized(coin_spend.puzzle_reveal),
|
|
42
|
+
Program.from_serialized(coin_spend.solution),
|
|
44
43
|
)
|
|
45
44
|
|
|
46
45
|
def as_coin_spend(self) -> CoinSpend:
|
|
@@ -50,8 +49,8 @@ class Spend(Streamable):
|
|
|
50
49
|
self.coin.puzzle_hash,
|
|
51
50
|
self.coin.amount,
|
|
52
51
|
),
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
self.puzzle.to_serialized(),
|
|
53
|
+
self.solution.to_serialized(),
|
|
55
54
|
)
|
|
56
55
|
|
|
57
56
|
|
chia/wallet/singleton.py
CHANGED
|
@@ -8,12 +8,13 @@ from chia_puzzles_py.programs import (
|
|
|
8
8
|
SINGLETON_TOP_LAYER_V1_1,
|
|
9
9
|
SINGLETON_TOP_LAYER_V1_1_HASH,
|
|
10
10
|
)
|
|
11
|
+
from chia_rs import CoinSpend
|
|
11
12
|
from chia_rs.sized_bytes import bytes32
|
|
12
13
|
|
|
13
14
|
from chia.types.blockchain_format.coin import Coin
|
|
14
|
-
from chia.types.blockchain_format.program import Program
|
|
15
|
+
from chia.types.blockchain_format.program import Program, uncurry
|
|
15
16
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
16
|
-
from chia.
|
|
17
|
+
from chia.wallet.util.compute_additions import compute_additions
|
|
17
18
|
from chia.wallet.util.curry_and_treehash import (
|
|
18
19
|
calculate_hash_of_quoted_mod_hash,
|
|
19
20
|
curry_and_treehash,
|
|
@@ -36,7 +37,7 @@ def get_inner_puzzle_from_singleton(puzzle: Union[Program, SerializedProgram]) -
|
|
|
36
37
|
:param puzzle: Singleton puzzle
|
|
37
38
|
:return: Inner puzzle
|
|
38
39
|
"""
|
|
39
|
-
r =
|
|
40
|
+
r = uncurry(puzzle)
|
|
40
41
|
if r is None:
|
|
41
42
|
return None
|
|
42
43
|
inner_f, args = r
|
|
@@ -52,7 +53,7 @@ def get_singleton_id_from_puzzle(puzzle: Union[Program, SerializedProgram]) -> O
|
|
|
52
53
|
:param puzzle: Singleton puzzle
|
|
53
54
|
:return: Inner puzzle
|
|
54
55
|
"""
|
|
55
|
-
r =
|
|
56
|
+
r = uncurry(puzzle)
|
|
56
57
|
if r is None:
|
|
57
58
|
return None # pragma: no cover
|
|
58
59
|
inner_f, args = r
|
chia/wallet/singleton_record.py
CHANGED
|
@@ -3,11 +3,11 @@ from __future__ import annotations
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from typing import Any, Optional
|
|
5
5
|
|
|
6
|
+
from chia_rs import CoinSpend
|
|
6
7
|
from chia_rs.sized_bytes import bytes32
|
|
7
8
|
from chia_rs.sized_ints import uint32
|
|
8
9
|
|
|
9
10
|
from chia.types.blockchain_format.coin import Coin
|
|
10
|
-
from chia.types.coin_spend import CoinSpend
|
|
11
11
|
from chia.wallet.lineage_proof import LineageProof
|
|
12
12
|
|
|
13
13
|
|
chia/wallet/trade_manager.py
CHANGED
|
@@ -6,16 +6,15 @@ import time
|
|
|
6
6
|
from collections import deque
|
|
7
7
|
from typing import TYPE_CHECKING, Any, Optional, Union
|
|
8
8
|
|
|
9
|
+
from chia_rs import CoinState
|
|
9
10
|
from chia_rs.sized_bytes import bytes32
|
|
10
11
|
from chia_rs.sized_ints import uint32, uint64
|
|
11
12
|
from typing_extensions import Literal
|
|
12
13
|
|
|
13
14
|
from chia.data_layer.data_layer_wallet import DataLayerWallet
|
|
14
|
-
from chia.protocols.wallet_protocol import CoinState
|
|
15
15
|
from chia.server.ws_connection import WSChiaConnection
|
|
16
16
|
from chia.types.blockchain_format.coin import Coin, coin_as_list
|
|
17
|
-
from chia.types.blockchain_format.program import Program
|
|
18
|
-
from chia.types.spend_bundle import estimate_fees
|
|
17
|
+
from chia.types.blockchain_format.program import Program, run
|
|
19
18
|
from chia.util.db_wrapper import DBWrapper2
|
|
20
19
|
from chia.util.hash import std_hash
|
|
21
20
|
from chia.wallet.cat_wallet.cat_wallet import CATWallet
|
|
@@ -29,6 +28,7 @@ from chia.wallet.conditions import (
|
|
|
29
28
|
parse_timelock_info,
|
|
30
29
|
)
|
|
31
30
|
from chia.wallet.db_wallet.db_wallet_puzzles import ACS_MU_PH
|
|
31
|
+
from chia.wallet.estimate_fees import estimate_fees
|
|
32
32
|
from chia.wallet.nft_wallet.nft_wallet import NFTWallet
|
|
33
33
|
from chia.wallet.outer_puzzles import AssetType
|
|
34
34
|
from chia.wallet.puzzle_drivers import PuzzleInfo, Solver
|
|
@@ -122,7 +122,7 @@ class TradeManager:
|
|
|
122
122
|
) -> set[bytes32]:
|
|
123
123
|
"""
|
|
124
124
|
Returns list of coins we want to check if they are included in filter,
|
|
125
|
-
These will include coins that belong to us and coins that
|
|
125
|
+
These will include coins that belong to us and coins that on other side of trade
|
|
126
126
|
"""
|
|
127
127
|
coin_ids = await self.trade_store.get_coin_ids_of_interest_with_trade_statuses(
|
|
128
128
|
trade_statuses=[TradeStatus.PENDING_ACCEPT, TradeStatus.PENDING_CONFIRM, TradeStatus.PENDING_CANCEL]
|
|
@@ -301,9 +301,7 @@ class TradeManager:
|
|
|
301
301
|
self.log.error(f"Cannot find wallet for offer {trade.trade_id}, skip cancellation.")
|
|
302
302
|
continue
|
|
303
303
|
|
|
304
|
-
new_ph = await
|
|
305
|
-
new=(not action_scope.config.tx_config.reuse_puzhash)
|
|
306
|
-
)
|
|
304
|
+
new_ph = await action_scope.get_puzzle_hash(self.wallet_state_manager)
|
|
307
305
|
|
|
308
306
|
if len(trade_records) > 1 or len(cancellation_coins) > 1:
|
|
309
307
|
announcement_conditions: tuple[Condition, ...] = (
|
|
@@ -498,18 +496,11 @@ class TradeManager:
|
|
|
498
496
|
if amount > 0:
|
|
499
497
|
# this is what we are receiving in the trade
|
|
500
498
|
memos: list[bytes] = []
|
|
499
|
+
p2_ph = await action_scope.get_puzzle_hash(self.wallet_state_manager)
|
|
501
500
|
if isinstance(id, int):
|
|
502
501
|
wallet_id = uint32(id)
|
|
503
502
|
wallet = self.wallet_state_manager.wallets.get(wallet_id)
|
|
504
|
-
assert isinstance(wallet, (
|
|
505
|
-
if isinstance(wallet, Wallet):
|
|
506
|
-
p2_ph: bytes32 = await wallet.get_puzzle_hash(
|
|
507
|
-
new=not action_scope.config.tx_config.reuse_puzhash
|
|
508
|
-
)
|
|
509
|
-
else:
|
|
510
|
-
p2_ph = await wallet.standard_wallet.get_puzzle_hash(
|
|
511
|
-
new=not action_scope.config.tx_config.reuse_puzhash
|
|
512
|
-
)
|
|
503
|
+
assert isinstance(wallet, (Wallet, CATWallet))
|
|
513
504
|
if wallet.type() != WalletType.STANDARD_WALLET:
|
|
514
505
|
if callable(getattr(wallet, "get_asset_id", None)): # ATTENTION: new wallets
|
|
515
506
|
assert isinstance(wallet, CATWallet)
|
|
@@ -520,9 +511,6 @@ class TradeManager:
|
|
|
520
511
|
f"Cannot request assets from wallet id {wallet.id()} without more information"
|
|
521
512
|
)
|
|
522
513
|
else:
|
|
523
|
-
p2_ph = await self.wallet_state_manager.main_wallet.get_puzzle_hash(
|
|
524
|
-
new=not action_scope.config.tx_config.reuse_puzhash
|
|
525
|
-
)
|
|
526
514
|
asset_id = id
|
|
527
515
|
wallet = await self.wallet_state_manager.get_wallet_for_asset_id(asset_id.hex())
|
|
528
516
|
memos = [p2_ph]
|
|
@@ -716,7 +704,7 @@ class TradeManager:
|
|
|
716
704
|
parse_conditions_non_consensus(
|
|
717
705
|
condition
|
|
718
706
|
for spend in final_spend_bundle.coin_spends
|
|
719
|
-
for condition in spend.puzzle_reveal.
|
|
707
|
+
for condition in run(spend.puzzle_reveal, Program.from_serialized(spend.solution)).as_iter()
|
|
720
708
|
)
|
|
721
709
|
)
|
|
722
710
|
# this executes the puzzles again
|
|
@@ -874,6 +862,16 @@ class TradeManager:
|
|
|
874
862
|
complete_offer, valid_spend_solver = await self.check_for_final_modifications(
|
|
875
863
|
Offer.aggregate([offer, take_offer]), solver, inner_action_scope
|
|
876
864
|
)
|
|
865
|
+
|
|
866
|
+
async with action_scope.use() as interface:
|
|
867
|
+
if interface.side_effects.get_unused_derivation_record_result is not None:
|
|
868
|
+
# This error is of a protection against potential misues of this band-aid solution.
|
|
869
|
+
# We should put more thought into how sub-action scopes are generated and what effects
|
|
870
|
+
# we might want to push. A ticket to this respect can be found [CHIA-2984].
|
|
871
|
+
raise ValueError("Cannot use `respond_to_offer` with existing puzzle hash generation")
|
|
872
|
+
interface.side_effects.get_unused_derivation_record_result = (
|
|
873
|
+
inner_action_scope.side_effects.get_unused_derivation_record_result
|
|
874
|
+
)
|
|
877
875
|
self.log.info("COMPLETE OFFER: %s", complete_offer.to_bech32())
|
|
878
876
|
assert complete_offer.is_valid()
|
|
879
877
|
final_spend_bundle: WalletSpendBundle = complete_offer.to_valid_spend(
|
chia/wallet/trade_record.py
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Any, Optional
|
|
4
|
+
from typing import Any, Optional
|
|
5
5
|
|
|
6
6
|
from chia_rs.sized_bytes import bytes32
|
|
7
7
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
8
|
+
from typing_extensions import Self
|
|
8
9
|
|
|
9
10
|
from chia.types.blockchain_format.coin import Coin
|
|
10
11
|
from chia.util.streamable import Streamable, streamable
|
|
@@ -12,8 +13,6 @@ from chia.wallet.conditions import ConditionValidTimes
|
|
|
12
13
|
from chia.wallet.trading.offer import Offer
|
|
13
14
|
from chia.wallet.trading.trade_status import TradeStatus
|
|
14
15
|
|
|
15
|
-
_T_TradeRecord = TypeVar("_T_TradeRecord", bound="TradeRecordOld")
|
|
16
|
-
|
|
17
16
|
|
|
18
17
|
@streamable
|
|
19
18
|
@dataclass(frozen=True)
|
|
@@ -51,9 +50,7 @@ class TradeRecordOld(Streamable):
|
|
|
51
50
|
return formatted
|
|
52
51
|
|
|
53
52
|
@classmethod
|
|
54
|
-
def from_json_dict_convenience(
|
|
55
|
-
cls: type[_T_TradeRecord], record: dict[str, Any], offer: str = ""
|
|
56
|
-
) -> _T_TradeRecord:
|
|
53
|
+
def from_json_dict_convenience(cls, record: dict[str, Any], offer: str = "") -> Self:
|
|
57
54
|
new_record = record.copy()
|
|
58
55
|
new_record["status"] = TradeStatus[record["status"]].value
|
|
59
56
|
del new_record["summary"]
|
chia/wallet/trading/offer.py
CHANGED
|
@@ -4,15 +4,15 @@ from dataclasses import dataclass, field
|
|
|
4
4
|
from typing import Any, BinaryIO, Optional, Union
|
|
5
5
|
|
|
6
6
|
from chia_puzzles_py.programs import SETTLEMENT_PAYMENT, SETTLEMENT_PAYMENT_HASH
|
|
7
|
-
from chia_rs import G2Element
|
|
7
|
+
from chia_rs import CoinSpend, G2Element
|
|
8
8
|
from chia_rs.sized_bytes import bytes32
|
|
9
9
|
from chia_rs.sized_ints import uint64
|
|
10
10
|
from clvm_tools.binutils import disassemble
|
|
11
11
|
|
|
12
12
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
13
13
|
from chia.types.blockchain_format.coin import Coin, coin_as_list
|
|
14
|
-
from chia.types.blockchain_format.program import INFINITE_COST, Program
|
|
15
|
-
from chia.types.coin_spend import
|
|
14
|
+
from chia.types.blockchain_format.program import INFINITE_COST, Program, run_with_cost, uncurry
|
|
15
|
+
from chia.types.coin_spend import make_spend
|
|
16
16
|
from chia.util.bech32m import bech32_decode, bech32_encode, convertbits
|
|
17
17
|
from chia.util.errors import Err, ValidationError
|
|
18
18
|
from chia.util.streamable import parse_rust
|
|
@@ -43,6 +43,8 @@ from chia.wallet.util.puzzle_compression import (
|
|
|
43
43
|
)
|
|
44
44
|
from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
|
45
45
|
|
|
46
|
+
OfferSummary = dict[Union[int, bytes32], int]
|
|
47
|
+
|
|
46
48
|
OFFER_MOD = Program.from_bytes(SETTLEMENT_PAYMENT)
|
|
47
49
|
OFFER_MOD_HASH = bytes32(SETTLEMENT_PAYMENT_HASH)
|
|
48
50
|
|
|
@@ -170,7 +172,7 @@ class Offer:
|
|
|
170
172
|
max_cost = int(DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM)
|
|
171
173
|
for cs in self._bundle.coin_spends:
|
|
172
174
|
try:
|
|
173
|
-
cost, conds = cs.puzzle_reveal
|
|
175
|
+
cost, conds = run_with_cost(cs.puzzle_reveal, max_cost, cs.solution)
|
|
174
176
|
max_cost -= cost
|
|
175
177
|
conditions[cs.coin] = parse_conditions_non_consensus(conds.as_iter())
|
|
176
178
|
except Exception: # pragma: no cover
|
|
@@ -227,13 +229,13 @@ class Offer:
|
|
|
227
229
|
coins_for_this_spend: list[Coin] = []
|
|
228
230
|
|
|
229
231
|
parent_puzzle: UncurriedPuzzle = uncurry_puzzle(parent_spend.puzzle_reveal)
|
|
230
|
-
parent_solution
|
|
232
|
+
parent_solution = Program.from_serialized(parent_spend.solution)
|
|
231
233
|
additions: list[Coin] = self._additions[parent_spend.coin]
|
|
232
234
|
|
|
233
235
|
puzzle_driver = match_puzzle(parent_puzzle)
|
|
234
236
|
if puzzle_driver is not None:
|
|
235
237
|
asset_id = create_asset_id(puzzle_driver)
|
|
236
|
-
inner_puzzle: Optional[Program] = get_inner_puzzle(puzzle_driver, parent_puzzle)
|
|
238
|
+
inner_puzzle: Optional[Program] = get_inner_puzzle(puzzle_driver, parent_puzzle, parent_solution)
|
|
237
239
|
inner_solution: Optional[Program] = get_inner_solution(puzzle_driver, parent_solution)
|
|
238
240
|
assert inner_puzzle is not None and inner_solution is not None
|
|
239
241
|
|
|
@@ -259,10 +261,7 @@ class Offer:
|
|
|
259
261
|
matching_spend_additions = [
|
|
260
262
|
a
|
|
261
263
|
for a in matching_spend_additions
|
|
262
|
-
if a.puzzle_hash
|
|
263
|
-
== construct_puzzle(puzzle_driver, OFFER_MOD_HASH).get_tree_hash_precalc( # type: ignore
|
|
264
|
-
OFFER_MOD_HASH
|
|
265
|
-
)
|
|
264
|
+
if a.puzzle_hash == construct_puzzle(puzzle_driver, OFFER_MOD).get_tree_hash()
|
|
266
265
|
]
|
|
267
266
|
if len(matching_spend_additions) == expected_num_matches:
|
|
268
267
|
coins_for_this_spend.extend(matching_spend_additions)
|
|
@@ -412,7 +411,7 @@ class Offer:
|
|
|
412
411
|
coin_names.append(name)
|
|
413
412
|
dependencies[name] = []
|
|
414
413
|
announcements[name] = []
|
|
415
|
-
conditions: Program = spend.puzzle_reveal
|
|
414
|
+
conditions: Program = run_with_cost(spend.puzzle_reveal, INFINITE_COST, spend.solution)[1]
|
|
416
415
|
for condition in conditions.as_iter():
|
|
417
416
|
if condition.first() == 60: # create coin announcement
|
|
418
417
|
announcements[name].append(
|
|
@@ -626,7 +625,7 @@ class Offer:
|
|
|
626
625
|
asset_id = None
|
|
627
626
|
if coin_spend.coin.parent_coin_info == bytes32.zeros:
|
|
628
627
|
notarized_payments: list[NotarizedPayment] = []
|
|
629
|
-
for payment_group in coin_spend.solution
|
|
628
|
+
for payment_group in Program.from_serialized(coin_spend.solution).as_iter():
|
|
630
629
|
nonce = bytes32(payment_group.first().as_atom())
|
|
631
630
|
payment_args_list = payment_group.rest().as_iter()
|
|
632
631
|
notarized_payments.extend(
|
|
@@ -652,7 +651,7 @@ class Offer:
|
|
|
652
651
|
def compress(self, version: Optional[int] = None) -> bytes:
|
|
653
652
|
as_spend_bundle = self.to_spend_bundle()
|
|
654
653
|
if version is None:
|
|
655
|
-
mods: list[bytes] = [bytes(s.puzzle_reveal
|
|
654
|
+
mods: list[bytes] = [bytes(uncurry(s.puzzle_reveal)[0]) for s in as_spend_bundle.coin_spends]
|
|
656
655
|
version = max(lowest_best_version(mods), 6) # Clients lower than version 6 should not be able to parse
|
|
657
656
|
return compress_object_with_puzzles(bytes(as_spend_bundle), version)
|
|
658
657
|
|
chia/wallet/uncurried_puzzle.py
CHANGED
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from typing import Union
|
|
5
5
|
|
|
6
|
-
from chia.types.blockchain_format.program import Program
|
|
6
|
+
from chia.types.blockchain_format.program import Program, uncurry
|
|
7
7
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
8
8
|
|
|
9
9
|
|
|
@@ -14,4 +14,4 @@ class UncurriedPuzzle:
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def uncurry_puzzle(puzzle: Union[Program, SerializedProgram]) -> UncurriedPuzzle:
|
|
17
|
-
return UncurriedPuzzle(*
|
|
17
|
+
return UncurriedPuzzle(*uncurry(puzzle))
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from chia_rs import CoinSpend
|
|
4
|
+
from chia_rs.sized_ints import uint64
|
|
5
|
+
|
|
6
|
+
from chia.consensus.condition_costs import ConditionCost
|
|
7
|
+
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
8
|
+
from chia.types.blockchain_format.coin import Coin
|
|
9
|
+
from chia.types.blockchain_format.program import Program, run_with_cost
|
|
10
|
+
from chia.types.condition_opcodes import ConditionOpcode
|
|
11
|
+
from chia.util.errors import Err, ValidationError
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def compute_additions_with_cost(
|
|
15
|
+
cs: CoinSpend,
|
|
16
|
+
*,
|
|
17
|
+
max_cost: int = DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM,
|
|
18
|
+
) -> tuple[list[Coin], int]:
|
|
19
|
+
"""
|
|
20
|
+
Run the puzzle in the specified CoinSpend and return the cost and list of
|
|
21
|
+
coins created by the puzzle, i.e. additions. If the cost (CLVM- and
|
|
22
|
+
condition cost) exceeds the specified max_cost, the function fails with a
|
|
23
|
+
ValidationError exception. Byte cost is not included since at this point the
|
|
24
|
+
puzzle and solution may have been decompressed, the true byte-cost can only be
|
|
25
|
+
measured at the block generator level.
|
|
26
|
+
"""
|
|
27
|
+
parent_id = cs.coin.name()
|
|
28
|
+
ret: list[Coin] = []
|
|
29
|
+
cost, r = run_with_cost(cs.puzzle_reveal, max_cost, cs.solution)
|
|
30
|
+
for cond in Program.to(r).as_iter():
|
|
31
|
+
if cost > max_cost:
|
|
32
|
+
raise ValidationError(Err.BLOCK_COST_EXCEEDS_MAX, "compute_additions() for CoinSpend")
|
|
33
|
+
atoms = cond.as_iter()
|
|
34
|
+
op = next(atoms).atom
|
|
35
|
+
if op in {
|
|
36
|
+
ConditionOpcode.AGG_SIG_PARENT,
|
|
37
|
+
ConditionOpcode.AGG_SIG_PUZZLE,
|
|
38
|
+
ConditionOpcode.AGG_SIG_AMOUNT,
|
|
39
|
+
ConditionOpcode.AGG_SIG_PUZZLE_AMOUNT,
|
|
40
|
+
ConditionOpcode.AGG_SIG_PARENT_AMOUNT,
|
|
41
|
+
ConditionOpcode.AGG_SIG_PARENT_PUZZLE,
|
|
42
|
+
ConditionOpcode.AGG_SIG_UNSAFE,
|
|
43
|
+
ConditionOpcode.AGG_SIG_ME,
|
|
44
|
+
}:
|
|
45
|
+
cost += ConditionCost.AGG_SIG.value
|
|
46
|
+
continue
|
|
47
|
+
if op != ConditionOpcode.CREATE_COIN.value:
|
|
48
|
+
continue
|
|
49
|
+
cost += ConditionCost.CREATE_COIN.value
|
|
50
|
+
puzzle_hash = next(atoms).as_atom()
|
|
51
|
+
amount = uint64(next(atoms).as_int())
|
|
52
|
+
ret.append(Coin(parent_id, puzzle_hash, uint64(amount)))
|
|
53
|
+
|
|
54
|
+
return ret, cost
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def compute_additions(cs: CoinSpend, *, max_cost: int = DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM) -> list[Coin]:
|
|
58
|
+
return compute_additions_with_cost(cs, max_cost=max_cost)[0]
|
|
@@ -3,14 +3,14 @@ from __future__ import annotations
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from typing import Optional
|
|
5
5
|
|
|
6
|
+
from chia_rs import CoinSpend
|
|
6
7
|
from chia_rs.sized_bytes import bytes32
|
|
7
8
|
from chia_rs.sized_ints import uint64
|
|
8
9
|
|
|
9
10
|
from chia.consensus.condition_costs import ConditionCost
|
|
10
11
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
11
12
|
from chia.types.blockchain_format.coin import Coin
|
|
12
|
-
from chia.types.blockchain_format.program import Program
|
|
13
|
-
from chia.types.coin_spend import CoinSpend
|
|
13
|
+
from chia.types.blockchain_format.program import Program, run_with_cost
|
|
14
14
|
from chia.types.condition_opcodes import ConditionOpcode
|
|
15
15
|
from chia.util.errors import Err, ValidationError
|
|
16
16
|
|
|
@@ -26,7 +26,7 @@ def compute_spend_hints_and_additions(
|
|
|
26
26
|
*,
|
|
27
27
|
max_cost: int = DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM,
|
|
28
28
|
) -> tuple[dict[bytes32, HintedCoin], int]:
|
|
29
|
-
cost, result_program = cs.puzzle_reveal
|
|
29
|
+
cost, result_program = run_with_cost(cs.puzzle_reveal, max_cost, cs.solution)
|
|
30
30
|
|
|
31
31
|
hinted_coins: dict[bytes32, HintedCoin] = {}
|
|
32
32
|
for condition in result_program.as_iter():
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from chia_rs import CoinSpend
|
|
3
4
|
from chia_rs.sized_bytes import bytes32
|
|
4
5
|
from chia_rs.sized_ints import uint64
|
|
5
|
-
from clvm.casts import int_from_bytes
|
|
6
6
|
|
|
7
7
|
from chia.types.blockchain_format.coin import Coin
|
|
8
|
-
from chia.types.blockchain_format.program import INFINITE_COST
|
|
9
|
-
from chia.types.coin_spend import CoinSpend
|
|
8
|
+
from chia.types.blockchain_format.program import INFINITE_COST, run_with_cost
|
|
10
9
|
from chia.types.condition_opcodes import ConditionOpcode
|
|
10
|
+
from chia.util.casts import int_from_bytes
|
|
11
11
|
from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
def compute_memos_for_spend(coin_spend: CoinSpend) -> dict[bytes32, list[bytes]]:
|
|
15
|
-
_, result = coin_spend.puzzle_reveal
|
|
15
|
+
_, result = run_with_cost(coin_spend.puzzle_reveal, INFINITE_COST, coin_spend.solution)
|
|
16
16
|
memos: dict[bytes32, list[bytes]] = {}
|
|
17
17
|
for condition in result.as_python():
|
|
18
18
|
if condition[0] == ConditionOpcode.CREATE_COIN and len(condition) >= 4:
|
|
@@ -4,11 +4,11 @@ from chia_rs import AugSchemeMPL
|
|
|
4
4
|
from clvm.operators import KEYWORD_FROM_ATOM
|
|
5
5
|
from clvm_tools.binutils import disassemble as bu_disassemble
|
|
6
6
|
|
|
7
|
+
from chia.consensus.condition_tools import conditions_dict_for_solution, pkm_pairs_for_conditions_dict
|
|
7
8
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
8
9
|
from chia.types.blockchain_format.coin import Coin
|
|
9
10
|
from chia.types.blockchain_format.program import INFINITE_COST, Program
|
|
10
11
|
from chia.types.condition_opcodes import ConditionOpcode
|
|
11
|
-
from chia.util.condition_tools import conditions_dict_for_solution, pkm_pairs_for_conditions_dict
|
|
12
12
|
from chia.util.hash import std_hash
|
|
13
13
|
from chia.wallet.uncurried_puzzle import UncurriedPuzzle
|
|
14
14
|
|
chia/wallet/util/merkle_tree.py
CHANGED
|
@@ -3,11 +3,10 @@ from __future__ import annotations
|
|
|
3
3
|
import asyncio
|
|
4
4
|
from typing import Any, Optional
|
|
5
5
|
|
|
6
|
+
from chia_rs import CoinState, HeaderBlock
|
|
6
7
|
from chia_rs.sized_bytes import bytes32
|
|
7
8
|
from chia_rs.sized_ints import uint32, uint64
|
|
8
9
|
|
|
9
|
-
from chia.protocols.wallet_protocol import CoinState
|
|
10
|
-
from chia.types.header_block import HeaderBlock
|
|
11
10
|
from chia.util.hash import std_hash
|
|
12
11
|
from chia.util.lru_cache import LRUCache
|
|
13
12
|
|
chia/wallet/util/tx_config.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
|
-
from typing import Any, Optional
|
|
4
|
+
from typing import Any, Optional
|
|
5
5
|
|
|
6
6
|
from chia_rs import ConsensusConstants
|
|
7
7
|
from chia_rs.sized_bytes import bytes32
|
|
8
8
|
from chia_rs.sized_ints import uint64
|
|
9
|
-
from typing_extensions import NotRequired, TypedDict, Unpack
|
|
9
|
+
from typing_extensions import NotRequired, Self, TypedDict, Unpack
|
|
10
10
|
|
|
11
11
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
12
12
|
from chia.types.blockchain_format.coin import Coin
|
|
@@ -66,9 +66,6 @@ class AutofillArgs(TypedDict):
|
|
|
66
66
|
logged_in_fingerprint: NotRequired[int]
|
|
67
67
|
|
|
68
68
|
|
|
69
|
-
_T_CoinSelectionConfigLoader = TypeVar("_T_CoinSelectionConfigLoader", bound="CoinSelectionConfigLoader")
|
|
70
|
-
|
|
71
|
-
|
|
72
69
|
@streamable
|
|
73
70
|
@dataclasses.dataclass(frozen=True)
|
|
74
71
|
class CoinSelectionConfigLoader(Streamable):
|
|
@@ -90,9 +87,7 @@ class CoinSelectionConfigLoader(Streamable):
|
|
|
90
87
|
)
|
|
91
88
|
|
|
92
89
|
@classmethod
|
|
93
|
-
def from_json_dict(
|
|
94
|
-
cls: type[_T_CoinSelectionConfigLoader], json_dict: dict[str, Any]
|
|
95
|
-
) -> _T_CoinSelectionConfigLoader:
|
|
90
|
+
def from_json_dict(cls, json_dict: dict[str, Any]) -> Self:
|
|
96
91
|
if "excluded_coins" in json_dict:
|
|
97
92
|
excluded_coins: list[Coin] = [Coin.from_json_dict(c) for c in json_dict["excluded_coins"]]
|
|
98
93
|
excluded_coin_ids: list[str] = [c.name().hex() for c in excluded_coins]
|
|
@@ -5,14 +5,21 @@ import logging
|
|
|
5
5
|
import random
|
|
6
6
|
from typing import Any, Optional, Union
|
|
7
7
|
|
|
8
|
-
from chia_rs import
|
|
8
|
+
from chia_rs import (
|
|
9
|
+
CoinSpend,
|
|
10
|
+
CoinState,
|
|
11
|
+
HeaderBlock,
|
|
12
|
+
RespondToPhUpdates,
|
|
13
|
+
compute_merkle_set_root,
|
|
14
|
+
confirm_included_already_hashed,
|
|
15
|
+
confirm_not_included_already_hashed,
|
|
16
|
+
)
|
|
9
17
|
from chia_rs.sized_bytes import bytes32
|
|
10
18
|
from chia_rs.sized_ints import uint32
|
|
11
19
|
|
|
12
20
|
from chia.full_node.full_node_api import FullNodeAPI
|
|
13
21
|
from chia.protocols.shared_protocol import Capability
|
|
14
22
|
from chia.protocols.wallet_protocol import (
|
|
15
|
-
CoinState,
|
|
16
23
|
RegisterForCoinUpdates,
|
|
17
24
|
RegisterForPhUpdates,
|
|
18
25
|
RejectAdditionsRequest,
|
|
@@ -30,12 +37,10 @@ from chia.protocols.wallet_protocol import (
|
|
|
30
37
|
RespondPuzzleSolution,
|
|
31
38
|
RespondRemovals,
|
|
32
39
|
RespondToCoinUpdates,
|
|
33
|
-
RespondToPhUpdates,
|
|
34
40
|
)
|
|
35
41
|
from chia.server.ws_connection import WSChiaConnection
|
|
36
42
|
from chia.types.blockchain_format.coin import Coin, hash_coin_ids
|
|
37
|
-
from chia.types.coin_spend import
|
|
38
|
-
from chia.types.header_block import HeaderBlock
|
|
43
|
+
from chia.types.coin_spend import make_spend
|
|
39
44
|
from chia.util.task_referencer import create_referenced_task
|
|
40
45
|
from chia.wallet.util.peer_request_cache import PeerRequestCache
|
|
41
46
|
|