chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5rc2__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 +421 -69
- chia/_tests/core/mempool/test_mempool_performance.py +3 -2
- chia/_tests/core/mempool/test_singleton_fast_forward.py +60 -131
- 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 +143 -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 +26 -40
- 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.5rc2.dist-info}/METADATA +7 -7
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.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.5rc2.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/entry_points.txt +0 -0
|
@@ -3,10 +3,10 @@ from __future__ import annotations
|
|
|
3
3
|
import io
|
|
4
4
|
import re
|
|
5
5
|
from dataclasses import dataclass, field, fields
|
|
6
|
-
from typing import Any, Callable, Optional, get_type_hints
|
|
6
|
+
from typing import Any, Callable, ClassVar, Optional, get_type_hints
|
|
7
7
|
|
|
8
8
|
import pytest
|
|
9
|
-
from chia_rs import G1Element, SubEpochChallengeSegment
|
|
9
|
+
from chia_rs import FullBlock, G1Element, SubEpochChallengeSegment
|
|
10
10
|
from chia_rs.sized_bytes import bytes4, bytes32
|
|
11
11
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
12
12
|
from clvm_tools import binutils
|
|
@@ -16,7 +16,6 @@ from chia.protocols.wallet_protocol import RespondRemovals
|
|
|
16
16
|
from chia.simulator.block_tools import BlockTools, test_constants
|
|
17
17
|
from chia.types.blockchain_format.coin import Coin
|
|
18
18
|
from chia.types.blockchain_format.program import Program
|
|
19
|
-
from chia.types.full_block import FullBlock
|
|
20
19
|
from chia.util.streamable import (
|
|
21
20
|
ConversionError,
|
|
22
21
|
DefinitionError,
|
|
@@ -27,6 +26,7 @@ from chia.util.streamable import (
|
|
|
27
26
|
UnsupportedType,
|
|
28
27
|
function_to_parse_one_item,
|
|
29
28
|
function_to_stream_one_item,
|
|
29
|
+
is_type_Dict,
|
|
30
30
|
is_type_List,
|
|
31
31
|
is_type_SpecificOptional,
|
|
32
32
|
is_type_Tuple,
|
|
@@ -62,15 +62,6 @@ def test_float_not_supported() -> None:
|
|
|
62
62
|
a: float
|
|
63
63
|
|
|
64
64
|
|
|
65
|
-
def test_dict_not_suppported() -> None:
|
|
66
|
-
with pytest.raises(UnsupportedType):
|
|
67
|
-
|
|
68
|
-
@streamable
|
|
69
|
-
@dataclass(frozen=True)
|
|
70
|
-
class TestClassDict(Streamable):
|
|
71
|
-
a: dict[str, str]
|
|
72
|
-
|
|
73
|
-
|
|
74
65
|
@dataclass(frozen=True)
|
|
75
66
|
class DataclassOnly:
|
|
76
67
|
a: uint8
|
|
@@ -164,6 +155,28 @@ def test_convert_list_failures(input_dict: dict[str, Any], error: Any) -> None:
|
|
|
164
155
|
streamable_from_dict(ConvertListFailures, input_dict)
|
|
165
156
|
|
|
166
157
|
|
|
158
|
+
@streamable
|
|
159
|
+
@dataclass(frozen=True)
|
|
160
|
+
class ConvertDictFailures(Streamable):
|
|
161
|
+
a: dict[str, str]
|
|
162
|
+
b: dict[str, dict[str, str]]
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
@pytest.mark.parametrize(
|
|
166
|
+
"input_dict, error",
|
|
167
|
+
[
|
|
168
|
+
pytest.param({"a": [1, 1], "b": {"foo": [2, 2]}}, InvalidTypeError, id="a: invalid type list"),
|
|
169
|
+
pytest.param({"a": 1, "b": {"foo": "bar"}}, InvalidTypeError, id="a: invalid type int"),
|
|
170
|
+
pytest.param({"a": "11", "b": {"foo": "bar"}}, InvalidTypeError, id="a: invalid type str"),
|
|
171
|
+
pytest.param({"a": {"foo": "bar"}, "b": {1: {"foo": "bar"}}}, InvalidTypeError, id="b: invalid type int"),
|
|
172
|
+
pytest.param({"a": {"foo": "bar"}, "b": {"foo": {"foo": 1}}}, InvalidTypeError, id="b: invalid type int"),
|
|
173
|
+
],
|
|
174
|
+
)
|
|
175
|
+
def test_convert_dict_failures(input_dict: dict[str, Any], error: Any) -> None:
|
|
176
|
+
with pytest.raises(error):
|
|
177
|
+
streamable_from_dict(ConvertListFailures, input_dict)
|
|
178
|
+
|
|
179
|
+
|
|
167
180
|
@streamable
|
|
168
181
|
@dataclass(frozen=True)
|
|
169
182
|
class ConvertByteTypeFailures(Streamable):
|
|
@@ -320,16 +333,21 @@ class TestFromJsonDictDefaultValues(Streamable):
|
|
|
320
333
|
a: uint64 = uint64(1)
|
|
321
334
|
b: str = "default"
|
|
322
335
|
c: list[uint64] = field(default_factory=list)
|
|
336
|
+
d: dict[str, str] = field(default_factory=dict)
|
|
323
337
|
|
|
324
338
|
|
|
325
339
|
@pytest.mark.parametrize(
|
|
326
340
|
"input_dict, output_dict",
|
|
327
341
|
[
|
|
328
|
-
[{}, {"a": 1, "b": "default", "c": []}],
|
|
329
|
-
[{"a": 2}, {"a": 2, "b": "default", "c": []}],
|
|
330
|
-
[{"b": "not_default"}, {"a": 1, "b": "not_default", "c": []}],
|
|
331
|
-
[{"c": [1, 2]}, {"a": 1, "b": "default", "c": [1, 2]}],
|
|
332
|
-
[{"
|
|
342
|
+
[{}, {"a": 1, "b": "default", "c": [], "d": {}}],
|
|
343
|
+
[{"a": 2}, {"a": 2, "b": "default", "c": [], "d": {}}],
|
|
344
|
+
[{"b": "not_default"}, {"a": 1, "b": "not_default", "c": [], "d": {}}],
|
|
345
|
+
[{"c": [1, 2]}, {"a": 1, "b": "default", "c": [1, 2], "d": {}}],
|
|
346
|
+
[{"d": {"foo": "bar"}}, {"a": 1, "b": "default", "c": [], "d": {"foo": "bar"}}],
|
|
347
|
+
[
|
|
348
|
+
{"a": 2, "b": "not_default", "c": [1, 2], "d": {"foo": "bar"}},
|
|
349
|
+
{"a": 2, "b": "not_default", "c": [1, 2], "d": {"foo": "bar"}},
|
|
350
|
+
],
|
|
333
351
|
],
|
|
334
352
|
)
|
|
335
353
|
def test_from_json_dict_default_values(input_dict: dict[str, object], output_dict: dict[str, object]) -> None:
|
|
@@ -372,7 +390,7 @@ class PostInitTestClassBasic(Streamable):
|
|
|
372
390
|
@dataclass(frozen=True)
|
|
373
391
|
class PostInitTestClassBad(Streamable):
|
|
374
392
|
a: uint8
|
|
375
|
-
b = 0
|
|
393
|
+
b: ClassVar[uint8] = uint8(0)
|
|
376
394
|
|
|
377
395
|
|
|
378
396
|
@streamable
|
|
@@ -398,6 +416,13 @@ class PostInitTestClassTuple(Streamable):
|
|
|
398
416
|
b: tuple[tuple[uint8, str], bytes32]
|
|
399
417
|
|
|
400
418
|
|
|
419
|
+
@streamable
|
|
420
|
+
@dataclass(frozen=True)
|
|
421
|
+
class PostInitTestClassDict(Streamable):
|
|
422
|
+
a: dict[uint8, str]
|
|
423
|
+
b: dict[bytes32, dict[uint8, str]]
|
|
424
|
+
|
|
425
|
+
|
|
401
426
|
@pytest.mark.parametrize(
|
|
402
427
|
"test_class, args",
|
|
403
428
|
[
|
|
@@ -406,6 +431,7 @@ class PostInitTestClassTuple(Streamable):
|
|
|
406
431
|
(PostInitTestClassBad, (25,)),
|
|
407
432
|
(PostInitTestClassList, ([1, 2, 3], [[G1Element(), bytes(G1Element())], [bytes(G1Element())]])),
|
|
408
433
|
(PostInitTestClassTuple, ((1, "test"), ((200, "test_2"), b"\xba" * 32))),
|
|
434
|
+
(PostInitTestClassDict, ({1: "bar"}, {bytes32.zeros: {1: "bar"}})),
|
|
409
435
|
(PostInitTestClassOptional, (12, None, 13, None)),
|
|
410
436
|
],
|
|
411
437
|
)
|
|
@@ -421,6 +447,12 @@ def test_post_init_valid(test_class: type[Any], args: tuple[Any, ...]) -> None:
|
|
|
421
447
|
list_type = get_args(type_in)[0]
|
|
422
448
|
assert type(item) is list
|
|
423
449
|
return all(validate_item_type(list_type, list_item) for list_item in item)
|
|
450
|
+
if is_type_Dict(type_in):
|
|
451
|
+
[key_type, value_type] = get_args(type_in)
|
|
452
|
+
assert type(item) is dict
|
|
453
|
+
return validate_item_type(key_type, next(iter(item.keys()))) and validate_item_type(
|
|
454
|
+
value_type, next(iter(item.values()))
|
|
455
|
+
)
|
|
424
456
|
return isinstance(item, type_in)
|
|
425
457
|
|
|
426
458
|
test_object = test_class(*args)
|
|
@@ -464,9 +496,19 @@ def test_basic() -> None:
|
|
|
464
496
|
e: Optional[uint32]
|
|
465
497
|
f: Optional[uint32]
|
|
466
498
|
g: tuple[uint32, str, bytes]
|
|
499
|
+
h: dict[uint32, str]
|
|
467
500
|
|
|
468
501
|
# we want to test invalid here, hence the ignore.
|
|
469
|
-
a = TestClass(
|
|
502
|
+
a = TestClass(
|
|
503
|
+
uint32(24),
|
|
504
|
+
uint32(352),
|
|
505
|
+
[uint32(1), uint32(2), uint32(4)],
|
|
506
|
+
[[uint32(1), uint32(2), uint32(3)], [uint32(3), uint32(4)]],
|
|
507
|
+
uint32(728),
|
|
508
|
+
None,
|
|
509
|
+
(uint32(383), "hello", b"goodbye"),
|
|
510
|
+
{uint32(1): "foo"},
|
|
511
|
+
)
|
|
470
512
|
|
|
471
513
|
b: bytes = bytes(a)
|
|
472
514
|
assert a == TestClass.from_bytes(b)
|
|
@@ -801,7 +843,7 @@ class TestFromBytes:
|
|
|
801
843
|
class FailFromBytes:
|
|
802
844
|
@classmethod
|
|
803
845
|
def from_bytes(cls, b: bytes) -> FailFromBytes:
|
|
804
|
-
raise ValueError
|
|
846
|
+
raise ValueError
|
|
805
847
|
|
|
806
848
|
|
|
807
849
|
def test_parse_str() -> None:
|
|
@@ -869,10 +911,8 @@ def test_streamable_inheritance_missing() -> None:
|
|
|
869
911
|
[
|
|
870
912
|
(function_to_parse_one_item, float),
|
|
871
913
|
(function_to_parse_one_item, int),
|
|
872
|
-
(function_to_parse_one_item, dict),
|
|
873
914
|
(function_to_stream_one_item, float),
|
|
874
915
|
(function_to_stream_one_item, int),
|
|
875
|
-
(function_to_stream_one_item, dict),
|
|
876
916
|
(recurse_jsonify, 1.0),
|
|
877
917
|
(recurse_jsonify, recurse_jsonify),
|
|
878
918
|
],
|
|
@@ -880,3 +920,22 @@ def test_streamable_inheritance_missing() -> None:
|
|
|
880
920
|
def test_unsupported_types(method: Callable[[object], object], input_type: object) -> None:
|
|
881
921
|
with pytest.raises(UnsupportedType):
|
|
882
922
|
method(input_type)
|
|
923
|
+
|
|
924
|
+
|
|
925
|
+
@streamable
|
|
926
|
+
@dataclass(frozen=True)
|
|
927
|
+
class UnsupportedDictToSerialize(Streamable):
|
|
928
|
+
a: list[tuple[str, uint8]]
|
|
929
|
+
|
|
930
|
+
|
|
931
|
+
@streamable
|
|
932
|
+
@dataclass(frozen=True)
|
|
933
|
+
class UnsupportedDictToDeserialize(Streamable):
|
|
934
|
+
a: dict[str, uint8]
|
|
935
|
+
|
|
936
|
+
|
|
937
|
+
def test_duplicate_dict_key_error() -> None:
|
|
938
|
+
with pytest.raises(ValueError, match="duplicate dict keys"):
|
|
939
|
+
UnsupportedDictToDeserialize.from_bytes(
|
|
940
|
+
bytes(UnsupportedDictToSerialize([("foo", uint8(1)), ("foo", uint8(2))]))
|
|
941
|
+
)
|
|
@@ -24,8 +24,6 @@ if TYPE_CHECKING:
|
|
|
24
24
|
class UniqueError(Exception):
|
|
25
25
|
"""Used to uniquely trigger the exception path out of the context managers."""
|
|
26
26
|
|
|
27
|
-
pass
|
|
28
|
-
|
|
29
27
|
|
|
30
28
|
async def increment_counter(db_wrapper: DBWrapper2) -> None:
|
|
31
29
|
async with db_wrapper.writer_maybe_transaction() as connection:
|
|
@@ -427,7 +425,7 @@ async def test_cancelled_reader_does_not_cancel_writer() -> None:
|
|
|
427
425
|
|
|
428
426
|
with pytest.raises(UniqueError):
|
|
429
427
|
async with db_wrapper.reader() as _:
|
|
430
|
-
raise UniqueError
|
|
428
|
+
raise UniqueError
|
|
431
429
|
|
|
432
430
|
assert await query_value(connection=writer) == 1
|
|
433
431
|
|
|
@@ -14,10 +14,8 @@ from chia_rs.sized_ints import uint32, uint64
|
|
|
14
14
|
from chia._tests.environments.common import ServiceEnvironment
|
|
15
15
|
from chia.cmds.cmd_helpers import NeedsTXConfig, NeedsWalletRPC, TransactionEndpoint, TransactionsOut, WalletClientInfo
|
|
16
16
|
from chia.cmds.param_types import CliAmount, cli_amount_none
|
|
17
|
-
from chia.
|
|
17
|
+
from chia.full_node.full_node_rpc_client import FullNodeRpcClient
|
|
18
18
|
from chia.rpc.rpc_server import RpcServer
|
|
19
|
-
from chia.rpc.wallet_rpc_api import WalletRpcApi
|
|
20
|
-
from chia.rpc.wallet_rpc_client import WalletRpcClient
|
|
21
19
|
from chia.server.server import ChiaServer
|
|
22
20
|
from chia.server.start_service import Service
|
|
23
21
|
from chia.simulator.full_node_simulator import FullNodeSimulator
|
|
@@ -27,6 +25,8 @@ from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG, TXConfig
|
|
|
27
25
|
from chia.wallet.wallet import Wallet
|
|
28
26
|
from chia.wallet.wallet_node import Balance, WalletNode
|
|
29
27
|
from chia.wallet.wallet_node_api import WalletNodeAPI
|
|
28
|
+
from chia.wallet.wallet_rpc_api import WalletRpcApi
|
|
29
|
+
from chia.wallet.wallet_rpc_client import WalletRpcClient
|
|
30
30
|
from chia.wallet.wallet_state_manager import WalletStateManager
|
|
31
31
|
|
|
32
32
|
STANDARD_TX_ENDPOINT_ARGS: dict[str, Any] = TransactionEndpoint(
|
|
@@ -355,7 +355,7 @@ class WalletTestFramework:
|
|
|
355
355
|
for env in self.environments:
|
|
356
356
|
ph_indexes: dict[uint32, int] = {}
|
|
357
357
|
for wallet_id in env.wallet_state_manager.wallets:
|
|
358
|
-
ph_indexes[wallet_id] = await env.wallet_state_manager.puzzle_store.
|
|
358
|
+
ph_indexes[wallet_id] = await env.wallet_state_manager.puzzle_store.get_used_count(wallet_id)
|
|
359
359
|
puzzle_hash_indexes.append(ph_indexes)
|
|
360
360
|
|
|
361
361
|
pending_txs: list[list[LightTransactionRecord]] = []
|
|
@@ -426,5 +426,5 @@ class WalletTestFramework:
|
|
|
426
426
|
for env, ph_indexes_before in zip(self.environments, puzzle_hash_indexes):
|
|
427
427
|
for wallet_id, ph_index in zip(env.wallet_state_manager.wallets, ph_indexes_before):
|
|
428
428
|
assert ph_indexes_before[wallet_id] == (
|
|
429
|
-
await env.wallet_state_manager.puzzle_store.
|
|
429
|
+
await env.wallet_state_manager.puzzle_store.get_used_count(wallet_id)
|
|
430
430
|
)
|
|
@@ -9,10 +9,11 @@ from typing import Any, Optional, Union, cast
|
|
|
9
9
|
from unittest.mock import ANY
|
|
10
10
|
|
|
11
11
|
import pytest
|
|
12
|
-
from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
|
|
12
|
+
from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey, ProofOfSpace
|
|
13
13
|
from chia_rs.sized_bytes import bytes32
|
|
14
14
|
from chia_rs.sized_ints import uint8, uint16, uint32, uint64
|
|
15
15
|
from pytest_mock import MockerFixture
|
|
16
|
+
from typing_extensions import Self
|
|
16
17
|
from yarl import URL
|
|
17
18
|
|
|
18
19
|
from chia import __version__
|
|
@@ -24,11 +25,10 @@ from chia.pools.pool_config import PoolWalletConfig
|
|
|
24
25
|
from chia.protocols import farmer_protocol, harvester_protocol
|
|
25
26
|
from chia.protocols.harvester_protocol import NewProofOfSpace, RespondSignatures
|
|
26
27
|
from chia.protocols.pool_protocol import PoolErrorCode
|
|
28
|
+
from chia.server.aliases import FarmerService, HarvesterService
|
|
27
29
|
from chia.server.ws_connection import WSChiaConnection
|
|
28
30
|
from chia.simulator.block_tools import BlockTools
|
|
29
|
-
from chia.types.aliases import FarmerService, HarvesterService
|
|
30
31
|
from chia.types.blockchain_format.proof_of_space import (
|
|
31
|
-
ProofOfSpace,
|
|
32
32
|
generate_plot_public_key,
|
|
33
33
|
verify_and_get_quality_string,
|
|
34
34
|
)
|
|
@@ -571,13 +571,14 @@ async def test_farmer_new_proof_of_space_for_pool_stats(
|
|
|
571
571
|
sub_slot_iters=case.sub_slot_iters,
|
|
572
572
|
signage_point_index=case.signage_point_index,
|
|
573
573
|
peak_height=uint32(1),
|
|
574
|
+
last_tx_height=uint32(0),
|
|
574
575
|
)
|
|
575
576
|
pos = ProofOfSpace(
|
|
576
577
|
challenge=case.plot_challenge,
|
|
577
578
|
pool_public_key=case.pool_public_key,
|
|
578
579
|
pool_contract_puzzle_hash=case.pool_contract_puzzle_hash,
|
|
579
580
|
plot_public_key=case.plot_public_key,
|
|
580
|
-
|
|
581
|
+
version_and_size=case.plot_size,
|
|
581
582
|
proof=case.proof,
|
|
582
583
|
)
|
|
583
584
|
new_pos = NewProofOfSpace(
|
|
@@ -680,7 +681,7 @@ class DummyPoolResponse:
|
|
|
680
681
|
|
|
681
682
|
return json.dumps(json_dict)
|
|
682
683
|
|
|
683
|
-
async def __aenter__(self) ->
|
|
684
|
+
async def __aenter__(self) -> Self:
|
|
684
685
|
return self
|
|
685
686
|
|
|
686
687
|
async def __aexit__(
|
|
@@ -711,13 +712,14 @@ def create_valid_pos(farmer: Farmer) -> tuple[farmer_protocol.NewSignagePoint, P
|
|
|
711
712
|
sub_slot_iters=case.sub_slot_iters,
|
|
712
713
|
signage_point_index=case.signage_point_index,
|
|
713
714
|
peak_height=uint32(1),
|
|
715
|
+
last_tx_height=uint32(0),
|
|
714
716
|
)
|
|
715
717
|
pos = ProofOfSpace(
|
|
716
718
|
challenge=case.plot_challenge,
|
|
717
719
|
pool_public_key=case.pool_public_key,
|
|
718
720
|
pool_contract_puzzle_hash=case.pool_contract_puzzle_hash,
|
|
719
721
|
plot_public_key=case.plot_public_key,
|
|
720
|
-
|
|
722
|
+
version_and_size=case.plot_size,
|
|
721
723
|
proof=case.proof,
|
|
722
724
|
)
|
|
723
725
|
new_pos = NewProofOfSpace(
|
|
@@ -1003,7 +1005,7 @@ class DummyPoolInfoResponse:
|
|
|
1003
1005
|
|
|
1004
1006
|
return json.dumps(self.pool_info)
|
|
1005
1007
|
|
|
1006
|
-
async def __aenter__(self) ->
|
|
1008
|
+
async def __aenter__(self) -> Self:
|
|
1007
1009
|
return self
|
|
1008
1010
|
|
|
1009
1011
|
async def __aexit__(
|
|
@@ -15,13 +15,13 @@ from chia._tests.util.split_managers import split_async_manager
|
|
|
15
15
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
16
16
|
from chia.cmds.cmds_util import get_any_service_client
|
|
17
17
|
from chia.farmer.farmer import Farmer
|
|
18
|
+
from chia.harvester.harvester_rpc_client import HarvesterRpcClient
|
|
18
19
|
from chia.plotting.util import PlotsRefreshParameter
|
|
19
20
|
from chia.protocols import farmer_protocol, harvester_protocol
|
|
21
|
+
from chia.protocols.outbound_message import NodeType, make_msg
|
|
20
22
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
21
|
-
from chia.
|
|
22
|
-
from chia.server.outbound_message import NodeType, make_msg
|
|
23
|
+
from chia.server.aliases import FarmerService, HarvesterService
|
|
23
24
|
from chia.simulator.block_tools import BlockTools
|
|
24
|
-
from chia.types.aliases import FarmerService, HarvesterService
|
|
25
25
|
from chia.types.peer_info import UnresolvedPeerInfo
|
|
26
26
|
from chia.util.config import load_config
|
|
27
27
|
from chia.util.hash import std_hash
|
|
@@ -221,7 +221,14 @@ async def test_missing_signage_point(
|
|
|
221
221
|
def create_sp(index: int, challenge_hash: bytes32) -> tuple[uint64, farmer_protocol.NewSignagePoint]:
|
|
222
222
|
time = uint64(index + 1)
|
|
223
223
|
sp = farmer_protocol.NewSignagePoint(
|
|
224
|
-
challenge_hash,
|
|
224
|
+
challenge_hash,
|
|
225
|
+
std_hash(b"2"),
|
|
226
|
+
std_hash(b"3"),
|
|
227
|
+
uint64(1),
|
|
228
|
+
uint64(1000000),
|
|
229
|
+
uint8(index),
|
|
230
|
+
uint32(1),
|
|
231
|
+
uint32(0),
|
|
225
232
|
)
|
|
226
233
|
return time, sp
|
|
227
234
|
|
|
@@ -5,6 +5,7 @@ from pathlib import Path
|
|
|
5
5
|
from typing import Any, Optional
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
|
+
from chia_rs import FullBlock
|
|
8
9
|
from chia_rs.sized_bytes import bytes32
|
|
9
10
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
10
11
|
|
|
@@ -13,13 +14,12 @@ from chia._tests.core.test_farmer_harvester_rpc import wait_for_plot_sync
|
|
|
13
14
|
from chia._tests.util.setup_nodes import setup_farmer_multi_harvester
|
|
14
15
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
15
16
|
from chia.farmer.farmer_api import FarmerAPI
|
|
17
|
+
from chia.farmer.farmer_rpc_client import FarmerRpcClient
|
|
18
|
+
from chia.harvester.harvester_rpc_client import HarvesterRpcClient
|
|
16
19
|
from chia.protocols import farmer_protocol
|
|
17
|
-
from chia.
|
|
18
|
-
from chia.rpc.harvester_rpc_client import HarvesterRpcClient
|
|
20
|
+
from chia.server.aliases import HarvesterService
|
|
19
21
|
from chia.simulator.block_tools import create_block_tools_async, test_constants
|
|
20
|
-
from chia.types.aliases import HarvesterService
|
|
21
22
|
from chia.types.blockchain_format.proof_of_space import get_plot_id, passes_plot_filter
|
|
22
|
-
from chia.types.full_block import FullBlock
|
|
23
23
|
from chia.util.keychain import Keychain
|
|
24
24
|
|
|
25
25
|
|
|
@@ -56,7 +56,7 @@ async def farmer_harvester_with_filter_size_9(
|
|
|
56
56
|
return len(await farmer_rpc_cl.get_connections()) > 0
|
|
57
57
|
|
|
58
58
|
local_b_tools = await create_block_tools_async(
|
|
59
|
-
constants=test_constants.replace(
|
|
59
|
+
constants=test_constants.replace(NUMBER_ZERO_BITS_PLOT_FILTER_V1=uint8(9)), keychain=get_temp_keyring
|
|
60
60
|
)
|
|
61
61
|
new_config = local_b_tools._config
|
|
62
62
|
local_b_tools.change_config(new_config)
|
|
@@ -121,6 +121,7 @@ async def test_filter_prefix_bits_with_farmer_harvester(
|
|
|
121
121
|
sub_slot_iters=uint64(1000000),
|
|
122
122
|
signage_point_index=uint8(2),
|
|
123
123
|
peak_height=peak_height,
|
|
124
|
+
last_tx_height=uint32(0),
|
|
124
125
|
)
|
|
125
126
|
await farmer_api.new_signage_point(sp)
|
|
126
127
|
await time_out_assert(5, state_has_changed, True)
|
|
@@ -10,12 +10,21 @@ from os.path import dirname
|
|
|
10
10
|
from typing import Optional, Union, cast
|
|
11
11
|
|
|
12
12
|
import pytest
|
|
13
|
-
from chia_rs import
|
|
13
|
+
from chia_rs import (
|
|
14
|
+
ChallengeChainSubSlot,
|
|
15
|
+
FoliageBlockData,
|
|
16
|
+
FoliageTransactionBlock,
|
|
17
|
+
FullBlock,
|
|
18
|
+
G1Element,
|
|
19
|
+
ProofOfSpace,
|
|
20
|
+
RewardChainSubSlot,
|
|
21
|
+
)
|
|
14
22
|
from chia_rs.sized_bytes import bytes32
|
|
15
23
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
16
24
|
|
|
17
25
|
from chia._tests.util.misc import patch_request_handler
|
|
18
26
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
27
|
+
from chia.consensus.augmented_chain import AugmentedBlockchain
|
|
19
28
|
from chia.consensus.block_body_validation import ForkInfo
|
|
20
29
|
from chia.consensus.blockchain import AddBlockResult
|
|
21
30
|
from chia.consensus.difficulty_adjustment import get_next_sub_slot_iters_and_difficulty
|
|
@@ -28,20 +37,16 @@ from chia.harvester.harvester import Harvester
|
|
|
28
37
|
from chia.harvester.harvester_api import HarvesterAPI
|
|
29
38
|
from chia.protocols import farmer_protocol, full_node_protocol, harvester_protocol, timelord_protocol
|
|
30
39
|
from chia.protocols.harvester_protocol import ProofOfSpaceFeeInfo, RespondSignatures, SigningDataKind
|
|
40
|
+
from chia.protocols.outbound_message import Message, NodeType, make_msg
|
|
31
41
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
32
|
-
from chia.server.
|
|
42
|
+
from chia.server.aliases import FarmerService, FullNodeService, HarvesterService
|
|
33
43
|
from chia.server.server import ChiaServer
|
|
34
44
|
from chia.server.ws_connection import WSChiaConnection
|
|
35
45
|
from chia.simulator.block_tools import BlockTools
|
|
36
46
|
from chia.simulator.start_simulator import SimulatorFullNodeService
|
|
37
|
-
from chia.types.aliases import FarmerService, FullNodeService, HarvesterService
|
|
38
47
|
from chia.types.blockchain_format.classgroup import ClassgroupElement
|
|
39
|
-
from chia.types.blockchain_format.proof_of_space import ProofOfSpace
|
|
40
|
-
from chia.types.blockchain_format.slots import ChallengeChainSubSlot, RewardChainSubSlot
|
|
41
|
-
from chia.types.full_block import FullBlock
|
|
42
48
|
from chia.types.peer_info import UnresolvedPeerInfo
|
|
43
49
|
from chia.types.validation_state import ValidationState
|
|
44
|
-
from chia.util.augmented_chain import AugmentedBlockchain
|
|
45
50
|
from chia.util.bech32m import decode_puzzle_hash
|
|
46
51
|
from chia.util.hash import std_hash
|
|
47
52
|
|
|
@@ -72,7 +77,6 @@ async def test_harvester_receive_source_signing_data(
|
|
|
72
77
|
full_node_service_2,
|
|
73
78
|
_,
|
|
74
79
|
) = farmer_harvester_2_simulators_zero_bits_plot_filter
|
|
75
|
-
|
|
76
80
|
farmer: Farmer = farmer_service._node
|
|
77
81
|
harvester: Harvester = harvester_service._node
|
|
78
82
|
full_node_1: FullNode = full_node_service_1._node
|
|
@@ -101,6 +105,7 @@ async def test_harvester_receive_source_signing_data(
|
|
|
101
105
|
# so that we have blocks generated that have our farmer reward address, instead
|
|
102
106
|
# of the GENESIS_PRE_FARM_FARMER_PUZZLE_HASH.
|
|
103
107
|
await add_test_blocks_into_full_node(blocks, full_node_2)
|
|
108
|
+
await time_out_assert(60, full_node_2.blockchain.get_peak_height, blocks[-1].height)
|
|
104
109
|
|
|
105
110
|
validated_foliage_data = False
|
|
106
111
|
validated_foliage_transaction = False
|
|
@@ -359,6 +364,7 @@ def prepare_sp_and_pos_for_fee_test(
|
|
|
359
364
|
sub_slot_iters=uint64(0),
|
|
360
365
|
signage_point_index=uint8(0),
|
|
361
366
|
peak_height=uint32(1),
|
|
367
|
+
last_tx_height=uint32(0),
|
|
362
368
|
)
|
|
363
369
|
|
|
364
370
|
pos = harvester_protocol.NewProofOfSpace(
|
|
@@ -370,7 +376,7 @@ def prepare_sp_and_pos_for_fee_test(
|
|
|
370
376
|
pool_public_key=None,
|
|
371
377
|
pool_contract_puzzle_hash=None,
|
|
372
378
|
plot_public_key=pubkey,
|
|
373
|
-
|
|
379
|
+
version_and_size=uint8(32),
|
|
374
380
|
proof=proof,
|
|
375
381
|
),
|
|
376
382
|
signage_point_index=uint8(0),
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import types
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
|
-
from chia_rs import Coin
|
|
6
|
+
from chia_rs import Coin, SpendBundleConditions, SpendConditions
|
|
7
7
|
from chia_rs.sized_ints import uint32, uint64
|
|
8
8
|
|
|
9
9
|
from chia._tests.core.mempool.test_mempool_manager import (
|
|
@@ -28,7 +28,6 @@ from chia.simulator.wallet_tools import WalletTool
|
|
|
28
28
|
from chia.types.clvm_cost import CLVMCost
|
|
29
29
|
from chia.types.fee_rate import FeeRate, FeeRateV2
|
|
30
30
|
from chia.types.mempool_item import MempoolItem
|
|
31
|
-
from chia.types.spend_bundle_conditions import SpendBundleConditions, SpendConditions
|
|
32
31
|
|
|
33
32
|
|
|
34
33
|
def make_mempoolitem() -> MempoolItem:
|
|
@@ -4,19 +4,20 @@ import re
|
|
|
4
4
|
from typing import Any
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
|
+
from chia_rs import SpendBundle
|
|
7
8
|
from chia_rs.sized_bytes import bytes32
|
|
8
9
|
from chia_rs.sized_ints import uint64
|
|
9
10
|
|
|
10
|
-
from chia.
|
|
11
|
-
from chia.
|
|
11
|
+
from chia.full_node.full_node_rpc_api import FullNodeRpcApi
|
|
12
|
+
from chia.full_node.full_node_rpc_client import FullNodeRpcClient
|
|
13
|
+
from chia.server.aliases import WalletService
|
|
12
14
|
from chia.simulator.block_tools import BlockTools
|
|
13
15
|
from chia.simulator.full_node_simulator import FullNodeSimulator
|
|
14
16
|
from chia.simulator.simulator_protocol import FarmNewBlockProtocol
|
|
15
17
|
from chia.simulator.start_simulator import SimulatorFullNodeService
|
|
16
18
|
from chia.simulator.wallet_tools import WalletTool
|
|
17
|
-
from chia.types.aliases import WalletService
|
|
18
19
|
from chia.types.blockchain_format.coin import Coin
|
|
19
|
-
from chia.
|
|
20
|
+
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
@pytest.fixture(scope="function")
|
|
@@ -37,7 +38,8 @@ async def setup_node_and_rpc(
|
|
|
37
38
|
)
|
|
38
39
|
full_node_rpc_api = FullNodeRpcApi(full_node_api.full_node)
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
42
|
+
ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
41
43
|
|
|
42
44
|
for i in range(4):
|
|
43
45
|
await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
|
|
@@ -80,7 +80,7 @@ def test_steady_fee_pressure() -> None:
|
|
|
80
80
|
estimation = estimator.estimate_fee_rate(time_offset_seconds=time_offset_seconds * (height - start_from))
|
|
81
81
|
estimates_after.append(estimation)
|
|
82
82
|
|
|
83
|
-
block_estimates = [estimator.estimate_fee_rate_for_block(uint32(h + 1)) for h in range(
|
|
83
|
+
block_estimates = [estimator.estimate_fee_rate_for_block(uint32(h + 1)) for h in range(50)]
|
|
84
84
|
for idx, es_after in enumerate(estimates_after):
|
|
85
85
|
assert abs(es_after.mojos_per_clvm_cost - estimates_during[idx].mojos_per_clvm_cost) < 0.001
|
|
86
86
|
assert es_after.mojos_per_clvm_cost == block_estimates[idx].mojos_per_clvm_cost
|
|
@@ -12,14 +12,13 @@ from chia_puzzles_py.programs import (
|
|
|
12
12
|
DECOMPRESS_PUZZLE,
|
|
13
13
|
ROM_BOOTSTRAP_GENERATOR,
|
|
14
14
|
)
|
|
15
|
-
from chia_rs import serialized_length
|
|
15
|
+
from chia_rs import SpendBundle, serialized_length
|
|
16
16
|
from chia_rs.sized_ints import uint32
|
|
17
17
|
from clvm.serialize import sexp_from_stream
|
|
18
18
|
from clvm.SExp import SExp
|
|
19
19
|
from clvm_tools import binutils
|
|
20
20
|
|
|
21
21
|
from chia.types.blockchain_format.program import INFINITE_COST, Program
|
|
22
|
-
from chia.types.spend_bundle import SpendBundle
|
|
23
22
|
from chia.util.byte_types import hexstr_to_bytes
|
|
24
23
|
from chia.wallet.puzzles.load_clvm import load_clvm
|
|
25
24
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from chia_puzzles_py.programs import CHIALISP_DESERIALISATION, ROM_BOOTSTRAP_GENERATOR
|
|
4
|
+
from chia_rs import SpendConditions
|
|
4
5
|
from chia_rs.sized_bytes import bytes32
|
|
5
6
|
from chia_rs.sized_ints import uint32
|
|
6
7
|
from clvm.CLVMObject import CLVMStorage
|
|
@@ -10,10 +11,9 @@ from clvm_tools.clvmc import compile_clvm_text
|
|
|
10
11
|
from chia._tests.util.get_name_puzzle_conditions import get_name_puzzle_conditions
|
|
11
12
|
from chia.consensus.condition_costs import ConditionCost
|
|
12
13
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
13
|
-
from chia.types.blockchain_format.program import Program
|
|
14
|
+
from chia.types.blockchain_format.program import Program, run_with_cost
|
|
14
15
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
15
16
|
from chia.types.generator_types import BlockGenerator
|
|
16
|
-
from chia.types.spend_bundle_conditions import SpendConditions
|
|
17
17
|
|
|
18
18
|
DESERIALIZE_MOD = Program.from_bytes(CHIALISP_DESERIALISATION)
|
|
19
19
|
|
|
@@ -77,7 +77,7 @@ EXPECTED_OUTPUT = (
|
|
|
77
77
|
def run_generator(self: BlockGenerator) -> tuple[int, Program]:
|
|
78
78
|
"""This mode is meant for accepting possibly soft-forked transactions into the mempool"""
|
|
79
79
|
args = Program.to([self.generator_refs])
|
|
80
|
-
return
|
|
80
|
+
return run_with_cost(GENERATOR_MOD, MAX_COST, [self.program, args])
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
def as_atom_list(prg: CLVMStorage) -> list[bytes]:
|
|
@@ -110,7 +110,7 @@ class TestROM:
|
|
|
110
110
|
|
|
111
111
|
args = Program.to([DESERIALIZE_MOD, [FIRST_GENERATOR, SECOND_GENERATOR]])
|
|
112
112
|
sp = to_sp(COMPILED_GENERATOR_CODE)
|
|
113
|
-
cost, r =
|
|
113
|
+
cost, r = run_with_cost(sp, MAX_COST, args)
|
|
114
114
|
assert cost == EXPECTED_ABBREVIATED_COST
|
|
115
115
|
assert r.as_bin().hex() == EXPECTED_OUTPUT
|
|
116
116
|
|
|
@@ -155,6 +155,10 @@ class TestROM:
|
|
|
155
155
|
agg_sig_parent_amount=[],
|
|
156
156
|
agg_sig_parent_puzzle=[],
|
|
157
157
|
flags=0,
|
|
158
|
+
# in run_block_generator() we don't have access to separate
|
|
159
|
+
# execution cost, just in run_block_generator2()
|
|
160
|
+
execution_cost=0 if softfork_height < DEFAULT_CONSTANTS.HARD_FORK_HEIGHT else 44,
|
|
161
|
+
condition_cost=1800000,
|
|
158
162
|
)
|
|
159
163
|
|
|
160
164
|
assert npc_result.conds.spends == [spend]
|
|
@@ -29,8 +29,8 @@ from chia.plotting.manager import PlotManager
|
|
|
29
29
|
from chia.plotting.util import add_plot_directory, remove_plot_directory
|
|
30
30
|
from chia.protocols.harvester_protocol import Plot
|
|
31
31
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
32
|
+
from chia.server.aliases import FarmerService, HarvesterService
|
|
32
33
|
from chia.simulator.block_tools import BlockTools
|
|
33
|
-
from chia.types.aliases import FarmerService, HarvesterService
|
|
34
34
|
from chia.util.config import create_default_chia_config, lock_and_load_config, save_config
|
|
35
35
|
from chia.util.streamable import _T_Streamable
|
|
36
36
|
|
|
@@ -537,7 +537,7 @@ async def test_farmer_restart(environment: Environment) -> None:
|
|
|
537
537
|
# Load all directories for both harvesters
|
|
538
538
|
await add_and_validate_all_directories(env)
|
|
539
539
|
last_sync_ids: list[uint64] = []
|
|
540
|
-
for i in range(
|
|
540
|
+
for i in range(len(env.harvesters)):
|
|
541
541
|
last_sync_ids.append(env.harvesters[i].plot_sync_sender._last_sync_id)
|
|
542
542
|
# Stop the farmer and make sure both receivers get dropped and refreshing gets stopped on the harvesters
|
|
543
543
|
await env.split_farmer_service_manager.exit()
|
|
@@ -551,7 +551,7 @@ async def test_farmer_restart(environment: Environment) -> None:
|
|
|
551
551
|
assert len(env.farmer.plot_sync_receivers) == 2
|
|
552
552
|
# Do not use run_sync_test here, to have a more realistic test scenario just
|
|
553
553
|
# wait for the harvesters to be synced. The handshake should trigger re-sync.
|
|
554
|
-
for i in range(
|
|
554
|
+
for i in range(len(env.harvesters)):
|
|
555
555
|
harvester: Harvester = env.harvesters[i]
|
|
556
556
|
assert harvester.server is not None
|
|
557
557
|
receiver = env.farmer.plot_sync_receivers[harvester.server.node_id]
|
|
@@ -26,7 +26,7 @@ from chia.protocols.harvester_protocol import (
|
|
|
26
26
|
PlotSyncResponse,
|
|
27
27
|
PlotSyncStart,
|
|
28
28
|
)
|
|
29
|
-
from chia.
|
|
29
|
+
from chia.protocols.outbound_message import NodeType
|
|
30
30
|
from chia.util.streamable import _T_Streamable
|
|
31
31
|
|
|
32
32
|
log = logging.getLogger(__name__)
|
|
@@ -137,7 +137,7 @@ async def run_sync_step(receiver: Receiver, sync_step: SyncStepData) -> None:
|
|
|
137
137
|
assert len(step_data) == 10
|
|
138
138
|
# Invoke batches of: 1, 2, 3, 4 items and validate the data against plot store before and after
|
|
139
139
|
indexes = [0, 1, 3, 6, 10]
|
|
140
|
-
for i in range(
|
|
140
|
+
for i in range(len(indexes) - 1):
|
|
141
141
|
plots_processed_before = receiver.current_sync().plots_processed
|
|
142
142
|
invoke_data = step_data[indexes[i] : indexes[i + 1]]
|
|
143
143
|
pre_function_validate(receiver, invoke_data, sync_step.state)
|
|
@@ -166,7 +166,7 @@ def plot_sync_setup(seeded_random: random.Random) -> tuple[Receiver, list[SyncSt
|
|
|
166
166
|
receiver = Receiver(harvester_connection, dummy_callback) # type:ignore[arg-type]
|
|
167
167
|
|
|
168
168
|
# Create example plot data
|
|
169
|
-
path_list = [str(x) for x in range(
|
|
169
|
+
path_list = [str(x) for x in range(40)]
|
|
170
170
|
plot_info_list = [
|
|
171
171
|
Plot(
|
|
172
172
|
filename=str(x),
|