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
|
@@ -2,17 +2,16 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from collections.abc import AsyncIterator
|
|
4
4
|
from contextlib import asynccontextmanager
|
|
5
|
+
from dataclasses import dataclass
|
|
5
6
|
|
|
6
7
|
import pytest
|
|
7
|
-
from chia_rs import G2Element
|
|
8
|
+
from chia_rs import CoinState, G2Element
|
|
8
9
|
from chia_rs.sized_bytes import bytes32
|
|
9
10
|
from chia_rs.sized_ints import uint32, uint64
|
|
10
11
|
|
|
11
12
|
from chia._tests.environments.wallet import WalletStateTransition, WalletTestFramework
|
|
12
13
|
from chia._tests.util.setup_nodes import OldSimulatorsAndWallets
|
|
13
|
-
from chia.protocols.
|
|
14
|
-
from chia.rpc.wallet_request_types import PushTransactions
|
|
15
|
-
from chia.server.outbound_message import NodeType
|
|
14
|
+
from chia.protocols.outbound_message import NodeType
|
|
16
15
|
from chia.types.blockchain_format.coin import Coin
|
|
17
16
|
from chia.types.blockchain_format.program import Program
|
|
18
17
|
from chia.types.coin_spend import make_spend
|
|
@@ -22,6 +21,8 @@ from chia.wallet.derive_keys import master_sk_to_wallet_sk, master_sk_to_wallet_
|
|
|
22
21
|
from chia.wallet.transaction_record import TransactionRecord
|
|
23
22
|
from chia.wallet.util.transaction_type import TransactionType
|
|
24
23
|
from chia.wallet.util.wallet_types import WalletType
|
|
24
|
+
from chia.wallet.wallet_request_types import PushTransactions
|
|
25
|
+
from chia.wallet.wallet_rpc_api import MAX_DERIVATION_INDEX_DELTA
|
|
25
26
|
from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
|
26
27
|
from chia.wallet.wallet_state_manager import WalletStateManager
|
|
27
28
|
|
|
@@ -221,7 +222,7 @@ async def test_confirming_txs_not_ours(wallet_environments: WalletTestFramework)
|
|
|
221
222
|
async with env_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=False) as action_scope:
|
|
222
223
|
await env_1.xch_wallet.generate_signed_transaction(
|
|
223
224
|
[uint64(1)],
|
|
224
|
-
[await
|
|
225
|
+
[await action_scope.get_puzzle_hash(env_1.wallet_state_manager)],
|
|
225
226
|
action_scope,
|
|
226
227
|
)
|
|
227
228
|
|
|
@@ -257,3 +258,188 @@ async def test_confirming_txs_not_ours(wallet_environments: WalletTestFramework)
|
|
|
257
258
|
),
|
|
258
259
|
]
|
|
259
260
|
)
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
@dataclass
|
|
264
|
+
class PuzzleHashState:
|
|
265
|
+
highest_index: int
|
|
266
|
+
used_up_to_index: int
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
@pytest.mark.parametrize(
|
|
270
|
+
"wallet_environments",
|
|
271
|
+
[{"num_environments": 1, "blocks_needed": [1], "trusted": True, "reuse_puzhash": True}],
|
|
272
|
+
indirect=True,
|
|
273
|
+
)
|
|
274
|
+
@pytest.mark.limit_consensus_modes(reason="irrelevant")
|
|
275
|
+
@pytest.mark.anyio
|
|
276
|
+
async def test_puzzle_hash_requests(wallet_environments: WalletTestFramework) -> None:
|
|
277
|
+
wsm = wallet_environments.environments[0].wallet_state_manager
|
|
278
|
+
|
|
279
|
+
async def get_puzzle_hash_state() -> PuzzleHashState:
|
|
280
|
+
last_index = await wsm.puzzle_store.get_last_derivation_path_for_wallet(wsm.main_wallet.id())
|
|
281
|
+
assert last_index is not None
|
|
282
|
+
return PuzzleHashState(
|
|
283
|
+
last_index,
|
|
284
|
+
int((await wsm.puzzle_store.get_used_count(wsm.main_wallet.id())) / 2) - 1, # hardened + unhardened
|
|
285
|
+
)
|
|
286
|
+
|
|
287
|
+
expected_state = await get_puzzle_hash_state()
|
|
288
|
+
|
|
289
|
+
# `create_more_puzzle_hashes`
|
|
290
|
+
# No-op
|
|
291
|
+
result = await wsm.create_more_puzzle_hashes()
|
|
292
|
+
await result.commit(wsm)
|
|
293
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
294
|
+
|
|
295
|
+
# Ensure the window continues to expand
|
|
296
|
+
await wsm.puzzle_store.set_used_up_to(uint32(expected_state.used_up_to_index + 1))
|
|
297
|
+
result = await wsm.create_more_puzzle_hashes()
|
|
298
|
+
await result.commit(wsm)
|
|
299
|
+
expected_state = PuzzleHashState(expected_state.highest_index + 1, expected_state.used_up_to_index + 1)
|
|
300
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
301
|
+
|
|
302
|
+
# Explicitly make 1 extra
|
|
303
|
+
result = await wsm.create_more_puzzle_hashes(num_additional_phs=wsm.initial_num_public_keys + 1)
|
|
304
|
+
await result.commit(wsm)
|
|
305
|
+
expected_state = PuzzleHashState(expected_state.highest_index + 1, expected_state.used_up_to_index)
|
|
306
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
307
|
+
|
|
308
|
+
# Make sure window doesn't expand on next use
|
|
309
|
+
await wsm.puzzle_store.set_used_up_to(uint32(expected_state.used_up_to_index + 1))
|
|
310
|
+
result = await wsm.create_more_puzzle_hashes()
|
|
311
|
+
await result.commit(wsm)
|
|
312
|
+
expected_state = PuzzleHashState(expected_state.highest_index, expected_state.used_up_to_index + 1)
|
|
313
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
314
|
+
|
|
315
|
+
# Make sure `up_to_index` works
|
|
316
|
+
result = await wsm.create_more_puzzle_hashes(
|
|
317
|
+
up_to_index=uint32(expected_state.highest_index + 100), mark_existing_as_used=False
|
|
318
|
+
)
|
|
319
|
+
await result.commit(wsm)
|
|
320
|
+
expected_state = PuzzleHashState(
|
|
321
|
+
expected_state.highest_index + 100 + wsm.initial_num_public_keys, expected_state.used_up_to_index
|
|
322
|
+
)
|
|
323
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
324
|
+
|
|
325
|
+
# Make sure `mark_existing_as_used` works
|
|
326
|
+
result = await wsm.create_more_puzzle_hashes(
|
|
327
|
+
up_to_index=uint32(expected_state.highest_index + 1), mark_existing_as_used=True
|
|
328
|
+
)
|
|
329
|
+
await result.commit(wsm)
|
|
330
|
+
expected_state = PuzzleHashState(
|
|
331
|
+
expected_state.highest_index + 1 + wsm.initial_num_public_keys, expected_state.highest_index
|
|
332
|
+
)
|
|
333
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
334
|
+
|
|
335
|
+
# Test basic transactionality
|
|
336
|
+
result = await wsm.create_more_puzzle_hashes(
|
|
337
|
+
up_to_index=uint32(expected_state.highest_index + 1), mark_existing_as_used=False
|
|
338
|
+
)
|
|
339
|
+
result = await wsm.create_more_puzzle_hashes(
|
|
340
|
+
num_additional_phs=(expected_state.highest_index - expected_state.used_up_to_index)
|
|
341
|
+
+ wsm.initial_num_public_keys
|
|
342
|
+
+ 1,
|
|
343
|
+
mark_existing_as_used=False,
|
|
344
|
+
previous_result=result,
|
|
345
|
+
)
|
|
346
|
+
await result.commit(wsm)
|
|
347
|
+
expected_state = PuzzleHashState(
|
|
348
|
+
expected_state.highest_index + 1 + wsm.initial_num_public_keys + 1, expected_state.used_up_to_index
|
|
349
|
+
)
|
|
350
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
351
|
+
|
|
352
|
+
# Test error using two different "config"s
|
|
353
|
+
result = await wsm.create_more_puzzle_hashes(mark_existing_as_used=False)
|
|
354
|
+
with pytest.raises(ValueError, match="different configuration"):
|
|
355
|
+
await wsm.create_more_puzzle_hashes(mark_existing_as_used=True, previous_result=result)
|
|
356
|
+
|
|
357
|
+
# Test generation with no local data
|
|
358
|
+
await wsm.puzzle_store.delete_wallet(wsm.main_wallet.id())
|
|
359
|
+
result = await wsm.create_more_puzzle_hashes()
|
|
360
|
+
await result.commit(wsm)
|
|
361
|
+
expected_state = PuzzleHashState(
|
|
362
|
+
wsm.initial_num_public_keys, -1
|
|
363
|
+
) # -1 being no puzzle hashes used, not even at index 0
|
|
364
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
365
|
+
|
|
366
|
+
# Test `from_zero` fills in gaps
|
|
367
|
+
async with wsm.puzzle_store.db_wrapper.writer() as conn:
|
|
368
|
+
await conn.execute(
|
|
369
|
+
"DELETE FROM derivation_paths WHERE derivation_index=?",
|
|
370
|
+
(0,),
|
|
371
|
+
)
|
|
372
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
373
|
+
assert (
|
|
374
|
+
len(list(await wsm.puzzle_store.get_all_puzzle_hashes())) == (expected_state.highest_index) * 2
|
|
375
|
+
) # 0 inclusive
|
|
376
|
+
result = await wsm.create_more_puzzle_hashes(
|
|
377
|
+
from_zero=True, mark_existing_as_used=False, up_to_index=uint32(expected_state.highest_index)
|
|
378
|
+
)
|
|
379
|
+
await result.commit(wsm)
|
|
380
|
+
expected_state = PuzzleHashState(expected_state.highest_index + wsm.initial_num_public_keys, -1)
|
|
381
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
382
|
+
assert len(list(await wsm.puzzle_store.get_all_puzzle_hashes())) == (expected_state.highest_index + 1) * 2
|
|
383
|
+
|
|
384
|
+
# `get_unused_derivation_record`
|
|
385
|
+
# Assert index increases
|
|
386
|
+
assert expected_state.highest_index > expected_state.used_up_to_index
|
|
387
|
+
await wsm.get_unused_derivation_record(wsm.main_wallet.id())
|
|
388
|
+
expected_state = PuzzleHashState(expected_state.highest_index, expected_state.used_up_to_index + 1)
|
|
389
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
390
|
+
|
|
391
|
+
# Assert more puzzle hashes get made
|
|
392
|
+
await wsm.puzzle_store.set_used_up_to(uint32(expected_state.highest_index))
|
|
393
|
+
await wsm.get_unused_derivation_record(wsm.main_wallet.id())
|
|
394
|
+
expected_state = PuzzleHashState(
|
|
395
|
+
expected_state.highest_index + wsm.initial_num_public_keys + 1, expected_state.highest_index + 1
|
|
396
|
+
)
|
|
397
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
398
|
+
|
|
399
|
+
# Test transactionality
|
|
400
|
+
previous_result = None
|
|
401
|
+
for _ in range(wsm.initial_num_public_keys): # all currently unused
|
|
402
|
+
previous_result = await wsm._get_unused_derivation_record(wsm.main_wallet.id(), previous_result=previous_result)
|
|
403
|
+
assert previous_result is not None
|
|
404
|
+
await previous_result.commit(wsm)
|
|
405
|
+
expected_state = PuzzleHashState(
|
|
406
|
+
expected_state.highest_index + wsm.initial_num_public_keys, expected_state.highest_index
|
|
407
|
+
)
|
|
408
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
409
|
+
|
|
410
|
+
# `extend_derivation_index`
|
|
411
|
+
# Check malformed request
|
|
412
|
+
rpc_client = wallet_environments.environments[0].rpc_client
|
|
413
|
+
with pytest.raises(ValueError):
|
|
414
|
+
await rpc_client.fetch("extend_derivation_index", {})
|
|
415
|
+
|
|
416
|
+
# Test no existing derivation paths
|
|
417
|
+
async with wsm.puzzle_store.db_wrapper.writer() as conn:
|
|
418
|
+
await conn.execute(
|
|
419
|
+
"DELETE FROM derivation_paths WHERE derivation_index=?",
|
|
420
|
+
(0,),
|
|
421
|
+
)
|
|
422
|
+
with pytest.raises(ValueError):
|
|
423
|
+
await rpc_client.extend_derivation_index(0)
|
|
424
|
+
|
|
425
|
+
# Reset to a normal state
|
|
426
|
+
await wsm.puzzle_store.delete_wallet(wsm.main_wallet.id())
|
|
427
|
+
result = await wsm.create_more_puzzle_hashes()
|
|
428
|
+
await result.commit(wsm)
|
|
429
|
+
expected_state = PuzzleHashState(wsm.initial_num_public_keys, -1)
|
|
430
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
431
|
+
|
|
432
|
+
# Test an index already created
|
|
433
|
+
with pytest.raises(ValueError):
|
|
434
|
+
await rpc_client.extend_derivation_index(0)
|
|
435
|
+
|
|
436
|
+
# Test an index too far in the future
|
|
437
|
+
with pytest.raises(ValueError):
|
|
438
|
+
await rpc_client.extend_derivation_index(MAX_DERIVATION_INDEX_DELTA + expected_state.highest_index + 1)
|
|
439
|
+
|
|
440
|
+
# Test the actual functionality
|
|
441
|
+
assert await rpc_client.extend_derivation_index(expected_state.highest_index + 5) == str(
|
|
442
|
+
expected_state.highest_index + 5
|
|
443
|
+
)
|
|
444
|
+
expected_state = PuzzleHashState(expected_state.highest_index + 5, expected_state.used_up_to_index)
|
|
445
|
+
assert await get_puzzle_hash_state() == expected_state
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import pytest
|
|
4
|
+
from chia_rs import BlockRecord
|
|
4
5
|
|
|
5
6
|
from chia._tests.environments.wallet import (
|
|
6
7
|
BalanceCheckingError,
|
|
@@ -8,7 +9,6 @@ from chia._tests.environments.wallet import (
|
|
|
8
9
|
WalletStateTransition,
|
|
9
10
|
WalletTestFramework,
|
|
10
11
|
)
|
|
11
|
-
from chia.consensus.block_record import BlockRecord
|
|
12
12
|
from chia.wallet.cat_wallet.cat_wallet import CATWallet
|
|
13
13
|
|
|
14
14
|
|
|
@@ -4,14 +4,14 @@ import itertools
|
|
|
4
4
|
from typing import Optional
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
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 uint32, uint64
|
|
10
10
|
|
|
11
11
|
from chia._tests.util.spend_sim import CostLogger, sim_and_client
|
|
12
12
|
from chia.types.blockchain_format.coin import Coin
|
|
13
|
-
from chia.types.blockchain_format.program import Program
|
|
14
|
-
from chia.types.coin_spend import
|
|
13
|
+
from chia.types.blockchain_format.program import Program, run
|
|
14
|
+
from chia.types.coin_spend import make_spend
|
|
15
15
|
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
16
16
|
from chia.util.errors import Err
|
|
17
17
|
from chia.util.hash import std_hash
|
|
@@ -301,10 +301,10 @@ async def test_did_tp(cost_logger: CostLogger) -> None:
|
|
|
301
301
|
|
|
302
302
|
remark_condition: Program = next(
|
|
303
303
|
condition
|
|
304
|
-
for condition in
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
.as_iter()
|
|
304
|
+
for condition in run(
|
|
305
|
+
successful_spend.coin_spends[0].puzzle_reveal,
|
|
306
|
+
Program.from_serialized(successful_spend.coin_spends[0].solution),
|
|
307
|
+
).as_iter()
|
|
308
308
|
if condition.first() == Program.to(1)
|
|
309
309
|
)
|
|
310
310
|
assert remark_condition == Program.to([1, (MOCK_LAUNCHER_ID, new_metadata), new_tp_hash])
|
|
@@ -399,7 +399,7 @@ async def test_revocation_layer(cost_logger: CostLogger) -> None:
|
|
|
399
399
|
@pytest.mark.parametrize("num_proofs", range(1, 6))
|
|
400
400
|
async def test_proofs_checker(cost_logger: CostLogger, num_proofs: int) -> None:
|
|
401
401
|
async with sim_and_client() as (sim, client):
|
|
402
|
-
flags: list[str] = [str(i) for i in range(
|
|
402
|
+
flags: list[str] = [str(i) for i in range(num_proofs)]
|
|
403
403
|
proofs_checker: ProofsChecker = ProofsChecker(flags)
|
|
404
404
|
|
|
405
405
|
# (mod (PROOFS_CHECKER proofs) (if (a PROOFS_CHECKER (list proofs)) () (x)))
|
|
@@ -12,8 +12,6 @@ from typing_extensions import Literal
|
|
|
12
12
|
|
|
13
13
|
from chia._tests.environments.wallet import WalletEnvironment, WalletStateTransition, WalletTestFramework
|
|
14
14
|
from chia._tests.util.time_out_assert import time_out_assert_not_none
|
|
15
|
-
from chia.rpc.wallet_request_types import VCAddProofs, VCGet, VCGetList, VCGetProofsForRoot, VCMint, VCRevoke, VCSpend
|
|
16
|
-
from chia.rpc.wallet_rpc_client import WalletRpcClient
|
|
17
15
|
from chia.simulator.full_node_simulator import FullNodeSimulator
|
|
18
16
|
from chia.types.blockchain_format.coin import coin_as_list
|
|
19
17
|
from chia.types.blockchain_format.program import Program
|
|
@@ -25,13 +23,23 @@ from chia.wallet.cat_wallet.cat_wallet import CATWallet
|
|
|
25
23
|
from chia.wallet.did_wallet.did_wallet import DIDWallet
|
|
26
24
|
from chia.wallet.util.query_filter import TransactionTypeFilter
|
|
27
25
|
from chia.wallet.util.transaction_type import TransactionType
|
|
28
|
-
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
|
|
26
|
+
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG, TXConfig
|
|
29
27
|
from chia.wallet.util.wallet_types import WalletType
|
|
30
28
|
from chia.wallet.vc_wallet.cr_cat_drivers import ProofsChecker, construct_cr_layer
|
|
31
29
|
from chia.wallet.vc_wallet.cr_cat_wallet import CRCATWallet
|
|
32
30
|
from chia.wallet.vc_wallet.vc_store import VCProofs, VCRecord
|
|
33
31
|
from chia.wallet.wallet import Wallet
|
|
34
32
|
from chia.wallet.wallet_node import WalletNode
|
|
33
|
+
from chia.wallet.wallet_request_types import (
|
|
34
|
+
VCAddProofs,
|
|
35
|
+
VCGet,
|
|
36
|
+
VCGetList,
|
|
37
|
+
VCGetProofsForRoot,
|
|
38
|
+
VCMint,
|
|
39
|
+
VCRevoke,
|
|
40
|
+
VCSpend,
|
|
41
|
+
)
|
|
42
|
+
from chia.wallet.wallet_rpc_client import WalletRpcClient
|
|
35
43
|
from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
|
36
44
|
|
|
37
45
|
|
|
@@ -41,11 +49,13 @@ async def mint_cr_cat(
|
|
|
41
49
|
wallet_node_0: WalletNode,
|
|
42
50
|
client_0: WalletRpcClient,
|
|
43
51
|
full_node_api: FullNodeSimulator,
|
|
52
|
+
tx_config: TXConfig,
|
|
44
53
|
authorized_providers: list[bytes32] = [],
|
|
45
54
|
tail: Program = Program.to(None),
|
|
46
55
|
proofs_checker: ProofsChecker = ProofsChecker(["foo", "bar"]),
|
|
47
56
|
) -> None:
|
|
48
|
-
|
|
57
|
+
async with wallet_0.wallet_state_manager.new_action_scope(tx_config, push=True) as action_scope:
|
|
58
|
+
our_puzzle = await action_scope.get_puzzle(wallet_0.wallet_state_manager)
|
|
49
59
|
cat_puzzle: Program = construct_cat_puzzle(
|
|
50
60
|
CAT_MOD,
|
|
51
61
|
tail.get_tree_hash(),
|
|
@@ -62,7 +72,7 @@ async def mint_cr_cat(
|
|
|
62
72
|
"amount": CAT_AMOUNT_0,
|
|
63
73
|
}
|
|
64
74
|
],
|
|
65
|
-
|
|
75
|
+
tx_config,
|
|
66
76
|
wallet_id=1,
|
|
67
77
|
)
|
|
68
78
|
).signed_tx
|
|
@@ -161,11 +171,13 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
|
|
|
161
171
|
)
|
|
162
172
|
|
|
163
173
|
# Mint a VC
|
|
174
|
+
async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
175
|
+
ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
|
|
164
176
|
vc_record = (
|
|
165
177
|
await client_0.vc_mint(
|
|
166
178
|
VCMint(
|
|
167
179
|
did_id=encode_puzzle_hash(did_id, "did"),
|
|
168
|
-
target_address=encode_puzzle_hash(
|
|
180
|
+
target_address=encode_puzzle_hash(ph, "txch"),
|
|
169
181
|
fee=uint64(1_750_000_000_000),
|
|
170
182
|
push=True,
|
|
171
183
|
),
|
|
@@ -311,7 +323,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
|
|
|
311
323
|
assert get_list_reponse.proof_dict[proof_root] == proofs.key_value_pairs
|
|
312
324
|
|
|
313
325
|
# Mint CR-CAT
|
|
314
|
-
await mint_cr_cat(1, wallet_0, wallet_node_0, client_0, full_node_api, [did_id])
|
|
326
|
+
await mint_cr_cat(1, wallet_0, wallet_node_0, client_0, full_node_api, wallet_environments.tx_config, [did_id])
|
|
315
327
|
await wallet_environments.process_pending_states(
|
|
316
328
|
[
|
|
317
329
|
WalletStateTransition(
|
|
@@ -360,7 +372,8 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
|
|
|
360
372
|
"flags_needed": cr_cat_wallet_0.info.proofs_checker.flags,
|
|
361
373
|
} == (await client_0.get_wallets(wallet_type=cr_cat_wallet_0.type()))[0]
|
|
362
374
|
assert await wallet_node_0.wallet_state_manager.get_wallet_for_asset_id(cr_cat_wallet_0.get_asset_id()) is not None
|
|
363
|
-
|
|
375
|
+
async with wallet_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
376
|
+
wallet_1_ph = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
|
|
364
377
|
wallet_1_addr = encode_puzzle_hash(wallet_1_ph, "txch")
|
|
365
378
|
txs = (
|
|
366
379
|
await client_0.cat_spend(
|
|
@@ -446,8 +459,10 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
|
|
|
446
459
|
assert len(pending_tx) == 1
|
|
447
460
|
|
|
448
461
|
# Send the VC to wallet_1 to use for the CR-CATs
|
|
462
|
+
async with wallet_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
463
|
+
ph = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
|
|
449
464
|
await client_0.vc_spend(
|
|
450
|
-
VCSpend(vc_id=vc_record.vc.launcher_id, new_puzhash=
|
|
465
|
+
VCSpend(vc_id=vc_record.vc.launcher_id, new_puzhash=ph, push=True),
|
|
451
466
|
wallet_environments.tx_config,
|
|
452
467
|
)
|
|
453
468
|
await wallet_environments.process_pending_states(
|
|
@@ -682,11 +697,13 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
|
|
|
682
697
|
)
|
|
683
698
|
did_id: bytes32 = bytes32.from_hexstr(did_wallet.get_my_DID())
|
|
684
699
|
|
|
700
|
+
async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
701
|
+
ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
|
|
685
702
|
vc_record = (
|
|
686
703
|
await client_0.vc_mint(
|
|
687
704
|
VCMint(
|
|
688
705
|
did_id=encode_puzzle_hash(did_id, "did"),
|
|
689
|
-
target_address=encode_puzzle_hash(
|
|
706
|
+
target_address=encode_puzzle_hash(ph, "txch"),
|
|
690
707
|
fee=uint64(200),
|
|
691
708
|
push=True,
|
|
692
709
|
),
|
|
@@ -720,7 +737,7 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
|
|
|
720
737
|
) as action_scope:
|
|
721
738
|
await (await wallet_node_0.wallet_state_manager.get_or_create_vc_wallet()).generate_signed_transaction(
|
|
722
739
|
[uint64(1)],
|
|
723
|
-
[await
|
|
740
|
+
[await action_scope.get_puzzle_hash(wallet_node_0.wallet_state_manager)],
|
|
724
741
|
action_scope,
|
|
725
742
|
vc_id=new_vc_record.vc.launcher_id,
|
|
726
743
|
new_proof_hash=bytes32.zeros,
|
|
@@ -815,7 +832,7 @@ async def test_cat_wallet_conversion(
|
|
|
815
832
|
)
|
|
816
833
|
|
|
817
834
|
did_id = bytes32.zeros
|
|
818
|
-
await mint_cr_cat(num_blocks, wallet_0, wallet_node_0, client_0, full_node_api, [did_id])
|
|
835
|
+
await mint_cr_cat(num_blocks, wallet_0, wallet_node_0, client_0, full_node_api, DEFAULT_TX_CONFIG, [did_id])
|
|
819
836
|
await full_node_api.farm_blocks_to_wallet(count=num_blocks, wallet=wallet_0)
|
|
820
837
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node_0, timeout=20)
|
|
821
838
|
|
|
@@ -4,23 +4,27 @@ import time
|
|
|
4
4
|
from typing import Any, Optional
|
|
5
5
|
|
|
6
6
|
from chia_rs import (
|
|
7
|
+
BlockRecord,
|
|
7
8
|
ConsensusConstants,
|
|
8
9
|
Foliage,
|
|
9
10
|
FoliageBlockData,
|
|
10
11
|
FoliageTransactionBlock,
|
|
12
|
+
FullBlock,
|
|
11
13
|
G1Element,
|
|
12
14
|
G2Element,
|
|
13
15
|
PoolTarget,
|
|
16
|
+
ProofOfSpace,
|
|
14
17
|
RewardChainBlock,
|
|
15
18
|
RewardChainBlockUnfinished,
|
|
19
|
+
SpendBundle,
|
|
16
20
|
TransactionsInfo,
|
|
21
|
+
UnfinishedBlock,
|
|
17
22
|
compute_merkle_set_root,
|
|
18
23
|
)
|
|
19
24
|
from chia_rs.sized_bytes import bytes32, bytes100
|
|
20
25
|
from chia_rs.sized_ints import uint8, uint32, uint64, uint128
|
|
21
26
|
from chiabip158 import PyBIP158
|
|
22
27
|
|
|
23
|
-
from chia.consensus.block_record import BlockRecord
|
|
24
28
|
from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
|
|
25
29
|
from chia.consensus.coinbase import create_farmer_coin, create_pool_coin
|
|
26
30
|
from chia.consensus.full_block_to_block_record import block_to_block_record
|
|
@@ -28,12 +32,8 @@ from chia.full_node.bundle_tools import simple_solution_generator
|
|
|
28
32
|
from chia.simulator.block_tools import BlockTools, compute_additions_unchecked
|
|
29
33
|
from chia.types.blockchain_format.classgroup import ClassgroupElement
|
|
30
34
|
from chia.types.blockchain_format.coin import Coin, hash_coin_ids
|
|
31
|
-
from chia.types.blockchain_format.proof_of_space import ProofOfSpace
|
|
32
35
|
from chia.types.blockchain_format.vdf import VDFInfo, VDFProof
|
|
33
|
-
from chia.types.full_block import FullBlock
|
|
34
36
|
from chia.types.generator_types import BlockGenerator
|
|
35
|
-
from chia.types.spend_bundle import SpendBundle
|
|
36
|
-
from chia.types.unfinished_block import UnfinishedBlock
|
|
37
37
|
from chia.util.block_cache import BlockCache
|
|
38
38
|
from chia.util.hash import std_hash
|
|
39
39
|
|
|
@@ -94,7 +94,7 @@ class WalletBlockTools(BlockTools):
|
|
|
94
94
|
latest_block = None
|
|
95
95
|
last_timestamp = uint64((int(time.time()) if genesis_timestamp is None else genesis_timestamp) - 20)
|
|
96
96
|
|
|
97
|
-
for _ in range(
|
|
97
|
+
for _ in range(num_blocks):
|
|
98
98
|
additions = []
|
|
99
99
|
removals = []
|
|
100
100
|
block_generator: Optional[BlockGenerator] = None
|
|
@@ -1,24 +1,16 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Optional
|
|
4
|
-
|
|
5
3
|
import pytest
|
|
6
|
-
from chia_rs import ConsensusConstants
|
|
4
|
+
from chia_rs import BlockRecord, ConsensusConstants, FullBlock, HeaderBlock, SubEpochSummary
|
|
7
5
|
from chia_rs.sized_bytes import bytes32
|
|
8
|
-
from chia_rs.sized_ints import
|
|
6
|
+
from chia_rs.sized_ints import uint32
|
|
9
7
|
|
|
10
8
|
from chia._tests.util.blockchain_mock import BlockchainMock
|
|
11
|
-
from chia.consensus.block_record import BlockRecord
|
|
12
|
-
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
13
9
|
from chia.consensus.full_block_to_block_record import block_to_block_record
|
|
14
|
-
from chia.consensus.
|
|
10
|
+
from chia.consensus.generator_tools import get_block_header
|
|
11
|
+
from chia.consensus.pot_iterations import validate_pospace_and_get_required_iters
|
|
15
12
|
from chia.full_node.weight_proof import WeightProofHandler, _map_sub_epoch_summaries, _validate_summaries_weight
|
|
16
13
|
from chia.simulator.block_tools import BlockTools
|
|
17
|
-
from chia.types.blockchain_format.proof_of_space import calculate_prefix_bits, verify_and_get_quality_string
|
|
18
|
-
from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
|
|
19
|
-
from chia.types.full_block import FullBlock
|
|
20
|
-
from chia.types.header_block import HeaderBlock
|
|
21
|
-
from chia.util.generator_tools import get_block_header
|
|
22
14
|
|
|
23
15
|
|
|
24
16
|
async def load_blocks_dont_validate(
|
|
@@ -48,22 +40,17 @@ async def load_blocks_dont_validate(
|
|
|
48
40
|
else:
|
|
49
41
|
cc_sp = block.reward_chain_block.challenge_chain_sp_vdf.output.get_hash()
|
|
50
42
|
|
|
51
|
-
|
|
52
|
-
block.reward_chain_block.proof_of_space,
|
|
43
|
+
required_iters = validate_pospace_and_get_required_iters(
|
|
53
44
|
constants,
|
|
45
|
+
block.reward_chain_block.proof_of_space,
|
|
54
46
|
block.reward_chain_block.pos_ss_cc_challenge_hash,
|
|
55
47
|
cc_sp,
|
|
56
|
-
|
|
57
|
-
)
|
|
58
|
-
assert quality_string is not None
|
|
59
|
-
|
|
60
|
-
required_iters: uint64 = calculate_iterations_quality(
|
|
61
|
-
constants.DIFFICULTY_CONSTANT_FACTOR,
|
|
62
|
-
quality_string,
|
|
63
|
-
block.reward_chain_block.proof_of_space.size,
|
|
48
|
+
block.height,
|
|
64
49
|
difficulty,
|
|
65
|
-
|
|
50
|
+
sub_slot_iters,
|
|
51
|
+
uint32(0), # prev_tx_block(blocks, prev_b), todo need to get height of prev tx block somehow here
|
|
66
52
|
)
|
|
53
|
+
assert required_iters is not None
|
|
67
54
|
|
|
68
55
|
sub_block = block_to_block_record(
|
|
69
56
|
constants,
|
|
@@ -501,28 +488,3 @@ class TestWeightProof:
|
|
|
501
488
|
valid, fork_point, _ = await wpf.validate_weight_proof(new_wp)
|
|
502
489
|
assert valid
|
|
503
490
|
assert fork_point != 0
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
@pytest.mark.parametrize("height,expected", [(0, 3), (5496000, 2), (10542000, 1), (15592000, 0), (20643000, 0)])
|
|
507
|
-
def test_calculate_prefix_bits_clamp_zero(height: uint32, expected: int) -> None:
|
|
508
|
-
constants = DEFAULT_CONSTANTS.replace(NUMBER_ZERO_BITS_PLOT_FILTER=uint8(3))
|
|
509
|
-
assert calculate_prefix_bits(constants, height) == expected
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
@pytest.mark.parametrize(
|
|
513
|
-
argnames=["height", "expected"],
|
|
514
|
-
argvalues=[
|
|
515
|
-
(0, 9),
|
|
516
|
-
(5495999, 9),
|
|
517
|
-
(5496000, 8),
|
|
518
|
-
(10541999, 8),
|
|
519
|
-
(10542000, 7),
|
|
520
|
-
(15591999, 7),
|
|
521
|
-
(15592000, 6),
|
|
522
|
-
(20642999, 6),
|
|
523
|
-
(20643000, 5),
|
|
524
|
-
],
|
|
525
|
-
)
|
|
526
|
-
def test_calculate_prefix_bits_default(height: uint32, expected: int) -> None:
|
|
527
|
-
constants = DEFAULT_CONSTANTS
|
|
528
|
-
assert calculate_prefix_bits(constants, height) == expected
|
chia/apis.py
CHANGED
|
@@ -4,8 +4,8 @@ from chia.farmer.farmer_api import FarmerAPI
|
|
|
4
4
|
from chia.full_node.full_node_api import FullNodeAPI
|
|
5
5
|
from chia.harvester.harvester_api import HarvesterAPI
|
|
6
6
|
from chia.introducer.introducer_api import IntroducerAPI
|
|
7
|
+
from chia.protocols.outbound_message import NodeType
|
|
7
8
|
from chia.server.api_protocol import ApiProtocol
|
|
8
|
-
from chia.server.outbound_message import NodeType
|
|
9
9
|
from chia.timelord.timelord_api import TimelordAPI
|
|
10
10
|
from chia.wallet.wallet_node_api import WalletNodeAPI
|
|
11
11
|
|
chia/cmds/beta.py
CHANGED
|
@@ -138,7 +138,7 @@ def prepare_submission_cmd(ctx: click.Context) -> None:
|
|
|
138
138
|
user_input = input("Select the version you want to prepare for submission: ")
|
|
139
139
|
try:
|
|
140
140
|
if int(user_input) <= 0:
|
|
141
|
-
raise IndexError
|
|
141
|
+
raise IndexError
|
|
142
142
|
prepare_result = available_results[int(user_input) - 1]
|
|
143
143
|
except IndexError:
|
|
144
144
|
raise click.ClickException(f"Invalid choice: {user_input}")
|
chia/cmds/chia.py
CHANGED
|
@@ -12,7 +12,7 @@ from chia.cmds.completion import completion
|
|
|
12
12
|
from chia.cmds.configure import configure_cmd
|
|
13
13
|
from chia.cmds.data import data_cmd
|
|
14
14
|
from chia.cmds.db import db_cmd
|
|
15
|
-
from chia.cmds.dev import dev_cmd
|
|
15
|
+
from chia.cmds.dev.main import dev_cmd
|
|
16
16
|
from chia.cmds.farm import farm_cmd
|
|
17
17
|
from chia.cmds.init import init_cmd
|
|
18
18
|
from chia.cmds.keys import keys_cmd
|
|
@@ -27,10 +27,10 @@ from chia.cmds.show import show_cmd
|
|
|
27
27
|
from chia.cmds.start import start_cmd
|
|
28
28
|
from chia.cmds.stop import stop_cmd
|
|
29
29
|
from chia.cmds.wallet import wallet_cmd
|
|
30
|
+
from chia.ssl.ssl_check import check_ssl
|
|
30
31
|
from chia.util.default_root import DEFAULT_KEYS_ROOT_PATH, resolve_root_path
|
|
31
32
|
from chia.util.errors import KeychainCurrentPassphraseIsInvalid
|
|
32
33
|
from chia.util.keychain import Keychain, set_keys_root_path
|
|
33
|
-
from chia.util.ssl_check import check_ssl
|
|
34
34
|
|
|
35
35
|
CONTEXT_SETTINGS = {
|
|
36
36
|
"help_option_names": ["-h", "--help"],
|
|
@@ -53,24 +53,24 @@ CONTEXT_SETTINGS = {
|
|
|
53
53
|
@click.option(
|
|
54
54
|
"--keys-root-path", default=DEFAULT_KEYS_ROOT_PATH, help="Keyring file root", type=click.Path(), show_default=True
|
|
55
55
|
)
|
|
56
|
-
@click.option("--passphrase-file", type=click.File("r"), help="File
|
|
56
|
+
@click.option("--passphrase-file", type=click.File("r"), help="File to read the keyring passphrase from")
|
|
57
57
|
@click.pass_context
|
|
58
58
|
def cli(
|
|
59
59
|
ctx: click.Context,
|
|
60
60
|
root_path: str,
|
|
61
|
-
keys_root_path:
|
|
61
|
+
keys_root_path: str,
|
|
62
62
|
passphrase_file: Optional[TextIOWrapper] = None,
|
|
63
63
|
) -> None:
|
|
64
64
|
from pathlib import Path
|
|
65
65
|
|
|
66
66
|
context = ChiaCliContext.set_default(ctx=ctx)
|
|
67
67
|
context.root_path = Path(root_path)
|
|
68
|
+
context.keys_root_path = Path(keys_root_path)
|
|
68
69
|
|
|
69
|
-
|
|
70
|
-
# scrubbed from the CLI options
|
|
71
|
-
if keys_root_path is not None:
|
|
72
|
-
set_keys_root_path(Path(keys_root_path))
|
|
70
|
+
set_keys_root_path(Path(keys_root_path))
|
|
73
71
|
|
|
72
|
+
# passphrase_file will be None if the passphrase options have been
|
|
73
|
+
# scrubbed from the CLI options
|
|
74
74
|
if passphrase_file is not None:
|
|
75
75
|
import sys
|
|
76
76
|
|
|
@@ -81,7 +81,7 @@ def cli(
|
|
|
81
81
|
if Keychain.master_passphrase_is_valid(passphrase):
|
|
82
82
|
cache_passphrase(passphrase)
|
|
83
83
|
else:
|
|
84
|
-
raise KeychainCurrentPassphraseIsInvalid
|
|
84
|
+
raise KeychainCurrentPassphraseIsInvalid
|
|
85
85
|
except KeychainCurrentPassphraseIsInvalid:
|
|
86
86
|
if Path(passphrase_file.name).is_file():
|
|
87
87
|
print(f'Invalid passphrase found in "{passphrase_file.name}"')
|