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
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import pytest
|
|
4
|
+
from chia_rs import FullBlock
|
|
4
5
|
from chia_rs.sized_ints import uint64, uint128
|
|
5
6
|
|
|
6
7
|
from chia._tests.util.misc import BenchmarkRunner, wallet_height_at_least
|
|
7
8
|
from chia._tests.util.setup_nodes import OldSimulatorsAndWallets
|
|
8
9
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
9
10
|
from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
|
|
10
|
-
from chia.types.full_block import FullBlock
|
|
11
11
|
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
12
12
|
from chia.types.peer_info import PeerInfo
|
|
13
13
|
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
|
|
@@ -43,7 +43,8 @@ async def test_mempool_update_performance(
|
|
|
43
43
|
fee_amount = uint64(2213)
|
|
44
44
|
await time_out_assert(30, wallet_balance_at_least, True, wallet_node, send_amount + fee_amount)
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
47
|
+
ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
47
48
|
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=False, sign=True) as action_scope:
|
|
48
49
|
await wallet.generate_signed_transaction([send_amount], [ph], action_scope, fee_amount)
|
|
49
50
|
[big_transaction] = action_scope.side_effects.transactions
|
|
@@ -5,7 +5,7 @@ import dataclasses
|
|
|
5
5
|
from typing import Any, Optional
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
|
-
from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
|
|
8
|
+
from chia_rs import AugSchemeMPL, CoinSpend, G1Element, G2Element, PrivateKey, SpendBundle
|
|
9
9
|
from chia_rs.sized_bytes import bytes32
|
|
10
10
|
from chia_rs.sized_ints import uint64
|
|
11
11
|
from chiabip158 import PyBIP158
|
|
@@ -23,31 +23,28 @@ from chia._tests.core.mempool.test_mempool_manager import (
|
|
|
23
23
|
from chia._tests.util.key_tool import KeyTool
|
|
24
24
|
from chia._tests.util.spend_sim import SimClient, SpendSim, sim_and_client
|
|
25
25
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
26
|
+
from chia.full_node.eligible_coin_spends import (
|
|
27
|
+
SingletonFastForward,
|
|
28
|
+
perform_the_fast_forward,
|
|
29
|
+
)
|
|
26
30
|
from chia.types.blockchain_format.coin import Coin
|
|
27
31
|
from chia.types.blockchain_format.program import Program
|
|
28
32
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
29
|
-
from chia.types.coin_spend import
|
|
33
|
+
from chia.types.coin_spend import make_spend
|
|
30
34
|
from chia.types.condition_opcodes import ConditionOpcode
|
|
31
|
-
from chia.types.eligible_coin_spends import EligibleCoinSpends, UnspentLineageInfo, perform_the_fast_forward
|
|
32
35
|
from chia.types.internal_mempool_item import InternalMempoolItem
|
|
33
36
|
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
34
|
-
from chia.types.mempool_item import BundleCoinSpend
|
|
35
|
-
from chia.types.spend_bundle import SpendBundle
|
|
37
|
+
from chia.types.mempool_item import BundleCoinSpend, UnspentLineageInfo
|
|
36
38
|
from chia.util.errors import Err
|
|
37
39
|
from chia.wallet.puzzles import p2_conditions, p2_delegated_puzzle_or_hidden_puzzle
|
|
38
40
|
from chia.wallet.puzzles import singleton_top_layer_v1_1 as singleton_top_layer
|
|
39
41
|
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
async def test_process_fast_forward_spends_nothing_to_do() -> None:
|
|
43
|
+
def test_process_fast_forward_spends_nothing_to_do() -> None:
|
|
43
44
|
"""
|
|
44
45
|
This tests the case when we don't have an eligible coin, so there is
|
|
45
46
|
nothing to fast forward and the item remains unchanged
|
|
46
47
|
"""
|
|
47
|
-
|
|
48
|
-
async def get_unspent_lineage_info_for_puzzle_hash(_: bytes32) -> Optional[UnspentLineageInfo]:
|
|
49
|
-
assert False # pragma: no cover
|
|
50
|
-
|
|
51
48
|
sk = AugSchemeMPL.key_gen(b"b" * 32)
|
|
52
49
|
g1 = sk.get_g1()
|
|
53
50
|
sig = AugSchemeMPL.sign(sk, b"foobar", g1)
|
|
@@ -58,50 +55,37 @@ async def test_process_fast_forward_spends_nothing_to_do() -> None:
|
|
|
58
55
|
assert item.bundle_coin_spends[TEST_COIN_ID].eligible_for_fast_forward is False
|
|
59
56
|
internal_mempool_item = InternalMempoolItem(sb, item.conds, item.height_added_to_mempool, item.bundle_coin_spends)
|
|
60
57
|
original_version = dataclasses.replace(internal_mempool_item)
|
|
61
|
-
|
|
62
|
-
bundle_coin_spends =
|
|
63
|
-
mempool_item=internal_mempool_item,
|
|
64
|
-
get_unspent_lineage_info_for_puzzle_hash=get_unspent_lineage_info_for_puzzle_hash,
|
|
65
|
-
height=TEST_HEIGHT,
|
|
66
|
-
constants=DEFAULT_CONSTANTS,
|
|
58
|
+
singleton_ff = SingletonFastForward()
|
|
59
|
+
bundle_coin_spends = singleton_ff.process_fast_forward_spends(
|
|
60
|
+
mempool_item=internal_mempool_item, height=TEST_HEIGHT, constants=DEFAULT_CONSTANTS
|
|
67
61
|
)
|
|
68
|
-
assert
|
|
62
|
+
assert singleton_ff == SingletonFastForward()
|
|
69
63
|
assert bundle_coin_spends == original_version.bundle_coin_spends
|
|
70
64
|
|
|
71
65
|
|
|
72
|
-
|
|
73
|
-
async def test_process_fast_forward_spends_unknown_ff() -> None:
|
|
66
|
+
def test_process_fast_forward_spends_unknown_ff() -> None:
|
|
74
67
|
"""
|
|
75
68
|
This tests the case when we process for the first time but we are unable
|
|
76
|
-
to lookup the latest version from the
|
|
69
|
+
to lookup the latest version from the item's latest singleton lineage
|
|
77
70
|
"""
|
|
78
|
-
|
|
79
|
-
async def get_unspent_lineage_info_for_puzzle_hash(puzzle_hash: bytes32) -> Optional[UnspentLineageInfo]:
|
|
80
|
-
if puzzle_hash == IDENTITY_PUZZLE_HASH:
|
|
81
|
-
return None
|
|
82
|
-
assert False # pragma: no cover
|
|
83
|
-
|
|
84
71
|
test_coin = Coin(TEST_COIN_ID, IDENTITY_PUZZLE_HASH, uint64(1))
|
|
85
72
|
conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, 1]]
|
|
86
73
|
sb = spend_bundle_from_conditions(conditions, test_coin)
|
|
87
74
|
item = mempool_item_from_spendbundle(sb)
|
|
88
75
|
# The coin is eligible for fast forward
|
|
89
76
|
assert item.bundle_coin_spends[test_coin.name()].eligible_for_fast_forward is True
|
|
77
|
+
item.bundle_coin_spends[test_coin.name()].latest_singleton_lineage = None
|
|
90
78
|
internal_mempool_item = InternalMempoolItem(sb, item.conds, item.height_added_to_mempool, item.bundle_coin_spends)
|
|
91
|
-
|
|
79
|
+
singleton_ff = SingletonFastForward()
|
|
92
80
|
# We have no fast forward records yet, so we'll process this coin for the
|
|
93
|
-
# first time here, but the
|
|
81
|
+
# first time here, but the item's latest singleton lineage returns None
|
|
94
82
|
with pytest.raises(ValueError, match="Cannot proceed with singleton spend fast forward."):
|
|
95
|
-
|
|
96
|
-
mempool_item=internal_mempool_item,
|
|
97
|
-
get_unspent_lineage_info_for_puzzle_hash=get_unspent_lineage_info_for_puzzle_hash,
|
|
98
|
-
height=TEST_HEIGHT,
|
|
99
|
-
constants=DEFAULT_CONSTANTS,
|
|
83
|
+
singleton_ff.process_fast_forward_spends(
|
|
84
|
+
mempool_item=internal_mempool_item, height=TEST_HEIGHT, constants=DEFAULT_CONSTANTS
|
|
100
85
|
)
|
|
101
86
|
|
|
102
87
|
|
|
103
|
-
|
|
104
|
-
async def test_process_fast_forward_spends_latest_unspent() -> None:
|
|
88
|
+
def test_process_fast_forward_spends_latest_unspent() -> None:
|
|
105
89
|
"""
|
|
106
90
|
This tests the case when we are the latest singleton version already, so
|
|
107
91
|
we don't need to fast forward, we just need to set the next version from
|
|
@@ -110,18 +94,9 @@ async def test_process_fast_forward_spends_latest_unspent() -> None:
|
|
|
110
94
|
test_amount = uint64(3)
|
|
111
95
|
test_coin = Coin(TEST_COIN_ID, IDENTITY_PUZZLE_HASH, test_amount)
|
|
112
96
|
test_unspent_lineage_info = UnspentLineageInfo(
|
|
113
|
-
coin_id=test_coin.name(),
|
|
114
|
-
coin_amount=test_coin.amount,
|
|
115
|
-
parent_id=test_coin.parent_coin_info,
|
|
116
|
-
parent_amount=test_coin.amount,
|
|
117
|
-
parent_parent_id=TEST_COIN_ID,
|
|
97
|
+
coin_id=test_coin.name(), parent_id=test_coin.parent_coin_info, parent_parent_id=TEST_COIN_ID
|
|
118
98
|
)
|
|
119
99
|
|
|
120
|
-
async def get_unspent_lineage_info_for_puzzle_hash(puzzle_hash: bytes32) -> Optional[UnspentLineageInfo]:
|
|
121
|
-
if puzzle_hash == IDENTITY_PUZZLE_HASH:
|
|
122
|
-
return test_unspent_lineage_info
|
|
123
|
-
assert False # pragma: no cover
|
|
124
|
-
|
|
125
100
|
# At this point, spends are considered *potentially* eligible for singleton
|
|
126
101
|
# fast forward mainly when their amount is odd and they don't have conditions
|
|
127
102
|
# that disqualify them
|
|
@@ -129,27 +104,21 @@ async def test_process_fast_forward_spends_latest_unspent() -> None:
|
|
|
129
104
|
sb = spend_bundle_from_conditions(conditions, test_coin)
|
|
130
105
|
item = mempool_item_from_spendbundle(sb)
|
|
131
106
|
assert item.bundle_coin_spends[test_coin.name()].eligible_for_fast_forward is True
|
|
107
|
+
item.bundle_coin_spends[test_coin.name()].latest_singleton_lineage = test_unspent_lineage_info
|
|
132
108
|
internal_mempool_item = InternalMempoolItem(sb, item.conds, item.height_added_to_mempool, item.bundle_coin_spends)
|
|
133
109
|
original_version = dataclasses.replace(internal_mempool_item)
|
|
134
|
-
|
|
135
|
-
bundle_coin_spends =
|
|
136
|
-
mempool_item=internal_mempool_item,
|
|
137
|
-
get_unspent_lineage_info_for_puzzle_hash=get_unspent_lineage_info_for_puzzle_hash,
|
|
138
|
-
height=TEST_HEIGHT,
|
|
139
|
-
constants=DEFAULT_CONSTANTS,
|
|
110
|
+
singleton_ff = SingletonFastForward()
|
|
111
|
+
bundle_coin_spends = singleton_ff.process_fast_forward_spends(
|
|
112
|
+
mempool_item=internal_mempool_item, height=TEST_HEIGHT, constants=DEFAULT_CONSTANTS
|
|
140
113
|
)
|
|
141
114
|
child_coin = item.bundle_coin_spends[test_coin.name()].additions[0]
|
|
142
115
|
expected_fast_forward_spends = {
|
|
143
116
|
IDENTITY_PUZZLE_HASH: UnspentLineageInfo(
|
|
144
|
-
coin_id=child_coin.name(),
|
|
145
|
-
coin_amount=child_coin.amount,
|
|
146
|
-
parent_id=test_coin.name(),
|
|
147
|
-
parent_amount=test_coin.amount,
|
|
148
|
-
parent_parent_id=test_coin.parent_coin_info,
|
|
117
|
+
coin_id=child_coin.name(), parent_id=test_coin.name(), parent_parent_id=test_coin.parent_coin_info
|
|
149
118
|
)
|
|
150
119
|
}
|
|
151
120
|
# We have set the next version from our additions to chain ff spends
|
|
152
|
-
assert
|
|
121
|
+
assert singleton_ff.fast_forward_spends == expected_fast_forward_spends
|
|
153
122
|
# We didn't need to fast forward the item so it stays as is
|
|
154
123
|
assert bundle_coin_spends == original_version.bundle_coin_spends
|
|
155
124
|
|
|
@@ -202,9 +171,7 @@ def test_perform_the_fast_forward() -> None:
|
|
|
202
171
|
test_spend_data = BundleCoinSpend(test_coin_spend, False, True, [test_child_coin])
|
|
203
172
|
test_unspent_lineage_info = UnspentLineageInfo(
|
|
204
173
|
coin_id=latest_unspent_coin.name(),
|
|
205
|
-
coin_amount=latest_unspent_coin.amount,
|
|
206
174
|
parent_id=latest_unspent_coin.parent_coin_info,
|
|
207
|
-
parent_amount=test_child_coin.amount,
|
|
208
175
|
parent_parent_id=test_child_coin.parent_coin_info,
|
|
209
176
|
)
|
|
210
177
|
# Start from a fresh state of fast forward spends
|
|
@@ -227,9 +194,7 @@ def test_perform_the_fast_forward() -> None:
|
|
|
227
194
|
# (previously latest unspent)
|
|
228
195
|
expected_unspent_lineage_info = UnspentLineageInfo(
|
|
229
196
|
coin_id=expected_child_coin.name(),
|
|
230
|
-
coin_amount=expected_child_coin.amount,
|
|
231
197
|
parent_id=latest_unspent_coin.name(),
|
|
232
|
-
parent_amount=latest_unspent_coin.amount,
|
|
233
198
|
parent_parent_id=latest_unspent_coin.parent_coin_info,
|
|
234
199
|
)
|
|
235
200
|
assert fast_forward_spends == {test_ph: expected_unspent_lineage_info}
|
|
@@ -292,16 +257,16 @@ def make_singleton_coin_spend(
|
|
|
292
257
|
solution = singleton_top_layer.solution_for_singleton(lineage_proof, uint64(coin_to_spend.amount), inner_solution)
|
|
293
258
|
if is_eve_spend:
|
|
294
259
|
# Parent here is the launcher coin
|
|
295
|
-
puzzle_reveal =
|
|
296
|
-
|
|
297
|
-
)
|
|
260
|
+
puzzle_reveal = singleton_top_layer.puzzle_for_singleton(
|
|
261
|
+
parent_coin_spend.coin.name(), inner_puzzle
|
|
262
|
+
).to_serialized()
|
|
298
263
|
else:
|
|
299
264
|
puzzle_reveal = parent_coin_spend.puzzle_reveal
|
|
300
265
|
return make_spend(coin_to_spend, puzzle_reveal, solution), delegated_puzzle
|
|
301
266
|
|
|
302
267
|
|
|
303
268
|
async def prepare_singleton_eve(
|
|
304
|
-
sim: SpendSim, sim_client: SimClient, is_eligible_for_ff: bool,
|
|
269
|
+
sim: SpendSim, sim_client: SimClient, is_eligible_for_ff: bool, singleton_amount: uint64
|
|
305
270
|
) -> tuple[Program, CoinSpend, Program]:
|
|
306
271
|
# Generate starting info
|
|
307
272
|
key_lookup = KeyTool()
|
|
@@ -319,11 +284,11 @@ async def prepare_singleton_eve(
|
|
|
319
284
|
starting_coin = records[0].coin
|
|
320
285
|
# Launching
|
|
321
286
|
conditions, launcher_coin_spend = singleton_top_layer.launch_conditions_and_coinsol(
|
|
322
|
-
coin=starting_coin, inner_puzzle=inner_puzzle, comment=[], amount=
|
|
287
|
+
coin=starting_coin, inner_puzzle=inner_puzzle, comment=[], amount=singleton_amount
|
|
323
288
|
)
|
|
324
289
|
# Keep a remaining coin with an even amount
|
|
325
290
|
conditions.append(
|
|
326
|
-
Program.to([ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, starting_coin.amount -
|
|
291
|
+
Program.to([ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, starting_coin.amount - singleton_amount - 1])
|
|
327
292
|
)
|
|
328
293
|
# Create a solution for standard transaction
|
|
329
294
|
delegated_puzzle = p2_conditions.puzzle_for_conditions(conditions)
|
|
@@ -351,10 +316,10 @@ async def prepare_singleton_eve(
|
|
|
351
316
|
|
|
352
317
|
|
|
353
318
|
async def prepare_and_test_singleton(
|
|
354
|
-
sim: SpendSim, sim_client: SimClient, is_eligible_for_ff: bool,
|
|
319
|
+
sim: SpendSim, sim_client: SimClient, is_eligible_for_ff: bool, singleton_amount: uint64
|
|
355
320
|
) -> tuple[Coin, CoinSpend, Program, Coin]:
|
|
356
321
|
inner_puzzle, eve_coin_spend, eve_signing_puzzle = await prepare_singleton_eve(
|
|
357
|
-
sim, sim_client, is_eligible_for_ff,
|
|
322
|
+
sim, sim_client, is_eligible_for_ff, singleton_amount
|
|
358
323
|
)
|
|
359
324
|
# At this point we don't have any unspent singleton
|
|
360
325
|
singleton_puzzle_hash = eve_coin_spend.coin.puzzle_hash
|
|
@@ -374,11 +339,7 @@ async def prepare_and_test_singleton(
|
|
|
374
339
|
singleton_puzzle_hash
|
|
375
340
|
)
|
|
376
341
|
assert unspent_lineage_info == UnspentLineageInfo(
|
|
377
|
-
coin_id=singleton.name(),
|
|
378
|
-
coin_amount=singleton.amount,
|
|
379
|
-
parent_id=eve_coin.name(),
|
|
380
|
-
parent_amount=eve_coin.amount,
|
|
381
|
-
parent_parent_id=eve_coin.parent_coin_info,
|
|
342
|
+
coin_id=singleton.name(), parent_id=eve_coin.name(), parent_parent_id=eve_coin.parent_coin_info
|
|
382
343
|
)
|
|
383
344
|
return singleton, eve_coin_spend, inner_puzzle, remaining_coin
|
|
384
345
|
|
|
@@ -393,7 +354,7 @@ async def test_singleton_fast_forward_solo() -> None:
|
|
|
393
354
|
SINGLETON_AMOUNT = uint64(1337)
|
|
394
355
|
async with sim_and_client() as (sim, sim_client):
|
|
395
356
|
singleton, eve_coin_spend, inner_puzzle, _ = await prepare_and_test_singleton(
|
|
396
|
-
sim, sim_client, True, SINGLETON_AMOUNT
|
|
357
|
+
sim, sim_client, True, SINGLETON_AMOUNT
|
|
397
358
|
)
|
|
398
359
|
singleton_puzzle_hash = eve_coin_spend.coin.puzzle_hash
|
|
399
360
|
inner_puzzle_hash = inner_puzzle.get_tree_hash()
|
|
@@ -410,9 +371,7 @@ async def test_singleton_fast_forward_solo() -> None:
|
|
|
410
371
|
assert singleton_child.amount == SINGLETON_AMOUNT
|
|
411
372
|
assert unspent_lineage_info == UnspentLineageInfo(
|
|
412
373
|
coin_id=singleton_child.name(),
|
|
413
|
-
coin_amount=singleton_child.amount,
|
|
414
374
|
parent_id=eve_coin_spend.coin.name(),
|
|
415
|
-
parent_amount=singleton.amount,
|
|
416
375
|
parent_parent_id=eve_coin_spend.coin.parent_coin_info,
|
|
417
376
|
)
|
|
418
377
|
|
|
@@ -434,12 +393,10 @@ async def test_singleton_fast_forward_different_block(is_eligible_for_ff: bool)
|
|
|
434
393
|
get properly fast forwarded to the latest unspent (when it's eligible) or
|
|
435
394
|
get correctly rejected as a double spend (when it's not eligible)
|
|
436
395
|
"""
|
|
437
|
-
|
|
438
|
-
# We're decrementing the next iteration's amount for testing purposes
|
|
439
|
-
SINGLETON_AMOUNT = uint64(1335)
|
|
396
|
+
SINGLETON_AMOUNT = uint64(1337)
|
|
440
397
|
async with sim_and_client() as (sim, sim_client):
|
|
441
398
|
singleton, eve_coin_spend, inner_puzzle, remaining_coin = await prepare_and_test_singleton(
|
|
442
|
-
sim, sim_client, is_eligible_for_ff,
|
|
399
|
+
sim, sim_client, is_eligible_for_ff, SINGLETON_AMOUNT
|
|
443
400
|
)
|
|
444
401
|
# Let's spend this first version, to create a bigger singleton child
|
|
445
402
|
singleton_puzzle_hash = eve_coin_spend.coin.puzzle_hash
|
|
@@ -456,8 +413,8 @@ async def test_singleton_fast_forward_different_block(is_eligible_for_ff: bool)
|
|
|
456
413
|
eve_coin_spend, singleton, inner_puzzle, inner_conditions
|
|
457
414
|
)
|
|
458
415
|
# Spend also a remaining coin
|
|
459
|
-
remaining_spend_solution = SerializedProgram.
|
|
460
|
-
|
|
416
|
+
remaining_spend_solution = SerializedProgram.to(
|
|
417
|
+
[[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, remaining_coin.amount]]
|
|
461
418
|
)
|
|
462
419
|
remaining_coin_spend = CoinSpend(remaining_coin, IDENTITY_PUZZLE, remaining_spend_solution)
|
|
463
420
|
await make_and_send_spend_bundle(
|
|
@@ -475,15 +432,11 @@ async def test_singleton_fast_forward_different_block(is_eligible_for_ff: bool)
|
|
|
475
432
|
singleton_child, [remaining_coin] = await get_singleton_and_remaining_coins(sim)
|
|
476
433
|
assert singleton_child.amount == SINGLETON_AMOUNT
|
|
477
434
|
assert unspent_lineage_info == UnspentLineageInfo(
|
|
478
|
-
coin_id=singleton_child.name(),
|
|
479
|
-
coin_amount=singleton_child.amount,
|
|
480
|
-
parent_id=singleton.name(),
|
|
481
|
-
parent_amount=singleton.amount,
|
|
482
|
-
parent_parent_id=eve_coin_spend.coin.name(),
|
|
435
|
+
coin_id=singleton_child.name(), parent_id=singleton.name(), parent_parent_id=eve_coin_spend.coin.name()
|
|
483
436
|
)
|
|
484
437
|
# Now let's spend the first version again (despite being already spent by now)
|
|
485
|
-
remaining_spend_solution = SerializedProgram.
|
|
486
|
-
|
|
438
|
+
remaining_spend_solution = SerializedProgram.to(
|
|
439
|
+
[[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, remaining_coin.amount]]
|
|
487
440
|
)
|
|
488
441
|
remaining_coin_spend = CoinSpend(remaining_coin, IDENTITY_PUZZLE, remaining_spend_solution)
|
|
489
442
|
status, error = await make_and_send_spend_bundle(
|
|
@@ -506,11 +459,7 @@ async def test_singleton_fast_forward_different_block(is_eligible_for_ff: bool)
|
|
|
506
459
|
)
|
|
507
460
|
singleton_grandchild, [remaining_coin] = await get_singleton_and_remaining_coins(sim)
|
|
508
461
|
assert unspent_lineage_info == UnspentLineageInfo(
|
|
509
|
-
coin_id=singleton_grandchild.name(),
|
|
510
|
-
coin_amount=singleton_grandchild.amount,
|
|
511
|
-
parent_id=singleton_child.name(),
|
|
512
|
-
parent_amount=singleton_child.amount,
|
|
513
|
-
parent_parent_id=singleton.name(),
|
|
462
|
+
coin_id=singleton_grandchild.name(), parent_id=singleton_child.name(), parent_parent_id=singleton.name()
|
|
514
463
|
)
|
|
515
464
|
else:
|
|
516
465
|
# As this singleton is not eligible for fast forward, attempting to
|
|
@@ -526,12 +475,10 @@ async def test_singleton_fast_forward_same_block() -> None:
|
|
|
526
475
|
singleton version, all in the same block, to make sure they get properly
|
|
527
476
|
fast forwarded and chained down to a latest unspent version
|
|
528
477
|
"""
|
|
529
|
-
|
|
530
|
-
# We're decrementing the next iteration's amount for testing purposes
|
|
531
|
-
SINGLETON_AMOUNT = uint64(1335)
|
|
478
|
+
SINGLETON_AMOUNT = uint64(1337)
|
|
532
479
|
async with sim_and_client() as (sim, sim_client):
|
|
533
480
|
singleton, eve_coin_spend, inner_puzzle, remaining_coin = await prepare_and_test_singleton(
|
|
534
|
-
sim, sim_client, True,
|
|
481
|
+
sim, sim_client, True, SINGLETON_AMOUNT
|
|
535
482
|
)
|
|
536
483
|
# Let's spend this first version, to create a bigger singleton child
|
|
537
484
|
singleton_puzzle_hash = eve_coin_spend.coin.puzzle_hash
|
|
@@ -547,8 +494,8 @@ async def test_singleton_fast_forward_same_block() -> None:
|
|
|
547
494
|
# Spend also a remaining coin. Change amount to create a new coin ID.
|
|
548
495
|
# The test assumes any odd amount is a singleton, so we must keep it
|
|
549
496
|
# even
|
|
550
|
-
remaining_spend_solution = SerializedProgram.
|
|
551
|
-
|
|
497
|
+
remaining_spend_solution = SerializedProgram.to(
|
|
498
|
+
[[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, remaining_coin.amount - 2]]
|
|
552
499
|
)
|
|
553
500
|
remaining_coin_spend = CoinSpend(remaining_coin, IDENTITY_PUZZLE, remaining_spend_solution)
|
|
554
501
|
await make_and_send_spend_bundle(sim, sim_client, [remaining_coin_spend, singleton_coin_spend], aggsig=sig)
|
|
@@ -558,11 +505,7 @@ async def test_singleton_fast_forward_same_block() -> None:
|
|
|
558
505
|
singleton_child, [remaining_coin] = await get_singleton_and_remaining_coins(sim)
|
|
559
506
|
assert singleton_child.amount == SINGLETON_AMOUNT
|
|
560
507
|
assert unspent_lineage_info == UnspentLineageInfo(
|
|
561
|
-
coin_id=singleton_child.name(),
|
|
562
|
-
coin_amount=singleton_child.amount,
|
|
563
|
-
parent_id=singleton.name(),
|
|
564
|
-
parent_amount=singleton.amount,
|
|
565
|
-
parent_parent_id=eve_coin_spend.coin.name(),
|
|
508
|
+
coin_id=singleton_child.name(), parent_id=singleton.name(), parent_parent_id=eve_coin_spend.coin.name()
|
|
566
509
|
)
|
|
567
510
|
# Now let's send 3 arbitrary spends of the already spent singleton in
|
|
568
511
|
# one block. They should all properly fast forward
|
|
@@ -596,14 +539,8 @@ async def test_singleton_fast_forward_same_block() -> None:
|
|
|
596
539
|
assert unspent_lineage_info is not None
|
|
597
540
|
# The unspent coin ID should reflect the latest version
|
|
598
541
|
assert unspent_lineage_info.coin_id == latest_singleton.name()
|
|
599
|
-
# The latest version should have the last random amount
|
|
600
|
-
assert latest_singleton.amount == SINGLETON_AMOUNT
|
|
601
|
-
# The unspent coin amount should reflect the latest version
|
|
602
|
-
assert unspent_lineage_info.coin_amount == latest_singleton.amount
|
|
603
542
|
# The unspent parent ID should reflect the latest version's parent
|
|
604
543
|
assert unspent_lineage_info.parent_id == latest_singleton.parent_coin_info
|
|
605
|
-
# The one before it should have the second last random amount
|
|
606
|
-
assert unspent_lineage_info.parent_amount == SINGLETON_AMOUNT
|
|
607
544
|
|
|
608
545
|
|
|
609
546
|
@pytest.mark.anyio
|
|
@@ -615,7 +552,7 @@ async def test_mempool_items_immutability_on_ff() -> None:
|
|
|
615
552
|
SINGLETON_AMOUNT = uint64(1337)
|
|
616
553
|
async with sim_and_client() as (sim, sim_client):
|
|
617
554
|
singleton, eve_coin_spend, inner_puzzle, remaining_coin = await prepare_and_test_singleton(
|
|
618
|
-
sim, sim_client, True, SINGLETON_AMOUNT
|
|
555
|
+
sim, sim_client, True, SINGLETON_AMOUNT
|
|
619
556
|
)
|
|
620
557
|
singleton_name = singleton.name()
|
|
621
558
|
singleton_puzzle_hash = eve_coin_spend.coin.puzzle_hash
|
|
@@ -630,8 +567,8 @@ async def test_mempool_items_immutability_on_ff() -> None:
|
|
|
630
567
|
singleton_coin_spend, singleton_signing_puzzle = make_singleton_coin_spend(
|
|
631
568
|
eve_coin_spend, singleton, inner_puzzle, inner_conditions
|
|
632
569
|
)
|
|
633
|
-
remaining_spend_solution = SerializedProgram.
|
|
634
|
-
|
|
570
|
+
remaining_spend_solution = SerializedProgram.to(
|
|
571
|
+
[[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, remaining_coin.amount]]
|
|
635
572
|
)
|
|
636
573
|
remaining_coin_spend = CoinSpend(remaining_coin, IDENTITY_PUZZLE, remaining_spend_solution)
|
|
637
574
|
await make_and_send_spend_bundle(
|
|
@@ -649,16 +586,12 @@ async def test_mempool_items_immutability_on_ff() -> None:
|
|
|
649
586
|
singleton_child_name = singleton_child.name()
|
|
650
587
|
assert singleton_child.amount == SINGLETON_AMOUNT
|
|
651
588
|
assert unspent_lineage_info == UnspentLineageInfo(
|
|
652
|
-
coin_id=singleton_child_name,
|
|
653
|
-
coin_amount=singleton_child.amount,
|
|
654
|
-
parent_id=singleton_name,
|
|
655
|
-
parent_amount=singleton.amount,
|
|
656
|
-
parent_parent_id=eve_coin_spend.coin.name(),
|
|
589
|
+
coin_id=singleton_child_name, parent_id=singleton_name, parent_parent_id=eve_coin_spend.coin.name()
|
|
657
590
|
)
|
|
658
591
|
# Now let's spend the first version again (despite being already spent
|
|
659
592
|
# by now) to exercise its fast forward.
|
|
660
|
-
remaining_spend_solution = SerializedProgram.
|
|
661
|
-
|
|
593
|
+
remaining_spend_solution = SerializedProgram.to(
|
|
594
|
+
[[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, remaining_coin.amount]]
|
|
662
595
|
)
|
|
663
596
|
remaining_coin_spend = CoinSpend(remaining_coin, IDENTITY_PUZZLE, remaining_spend_solution)
|
|
664
597
|
sb = SpendBundle([remaining_coin_spend, singleton_coin_spend], sig)
|
|
@@ -669,9 +602,7 @@ async def test_mempool_items_immutability_on_ff() -> None:
|
|
|
669
602
|
original_item = copy.copy(sim_client.service.mempool_manager.get_mempool_item(sb_name))
|
|
670
603
|
original_filter = sim_client.service.mempool_manager.get_filter()
|
|
671
604
|
# Let's trigger the fast forward by creating a mempool bundle
|
|
672
|
-
result =
|
|
673
|
-
sim_client.service.block_records[-1].header_hash,
|
|
674
|
-
)
|
|
605
|
+
result = sim.mempool_manager.create_bundle_from_mempool(sim_client.service.block_records[-1].header_hash)
|
|
675
606
|
assert result is not None
|
|
676
607
|
bundle, _ = result
|
|
677
608
|
# Make sure the mempool bundle we created contains the result of our
|
|
@@ -694,11 +625,11 @@ async def test_double_spend_ff_spend_no_latest_unspent() -> None:
|
|
|
694
625
|
This test covers the scenario where we receive a spend bundle with a
|
|
695
626
|
singleton fast forward spend that has currently no unspent coin.
|
|
696
627
|
"""
|
|
697
|
-
|
|
628
|
+
singleton_amount = uint64(1337)
|
|
698
629
|
async with sim_and_client() as (sim, sim_client):
|
|
699
630
|
# Prepare a singleton spend
|
|
700
631
|
singleton, eve_coin_spend, inner_puzzle, _ = await prepare_and_test_singleton(
|
|
701
|
-
sim, sim_client, True,
|
|
632
|
+
sim, sim_client, True, singleton_amount=singleton_amount
|
|
702
633
|
)
|
|
703
634
|
singleton_name = singleton.name()
|
|
704
635
|
singleton_puzzle_hash = eve_coin_spend.coin.puzzle_hash
|
|
@@ -708,7 +639,7 @@ async def test_double_spend_ff_spend_no_latest_unspent() -> None:
|
|
|
708
639
|
sig = AugSchemeMPL.sign(sk, b"foobar", g1)
|
|
709
640
|
inner_conditions: list[list[Any]] = [
|
|
710
641
|
[ConditionOpcode.AGG_SIG_UNSAFE, bytes(g1), b"foobar"],
|
|
711
|
-
[ConditionOpcode.CREATE_COIN, inner_puzzle_hash,
|
|
642
|
+
[ConditionOpcode.CREATE_COIN, inner_puzzle_hash, singleton_amount],
|
|
712
643
|
]
|
|
713
644
|
singleton_coin_spend, _ = make_singleton_coin_spend(eve_coin_spend, singleton, inner_puzzle, inner_conditions)
|
|
714
645
|
# Get its current latest unspent info
|
|
@@ -717,9 +648,7 @@ async def test_double_spend_ff_spend_no_latest_unspent() -> None:
|
|
|
717
648
|
)
|
|
718
649
|
assert unspent_lineage_info == UnspentLineageInfo(
|
|
719
650
|
coin_id=singleton_name,
|
|
720
|
-
coin_amount=test_amount,
|
|
721
651
|
parent_id=eve_coin_spend.coin.name(),
|
|
722
|
-
parent_amount=eve_coin_spend.coin.amount,
|
|
723
652
|
parent_parent_id=eve_coin_spend.coin.parent_coin_info,
|
|
724
653
|
)
|
|
725
654
|
# Let's remove this latest unspent coin from the coin store
|
chia/_tests/core/server/flood.py
CHANGED
|
@@ -69,7 +69,7 @@ async def main() -> None:
|
|
|
69
69
|
logger = create_logger(file=file)
|
|
70
70
|
|
|
71
71
|
async def f() -> None:
|
|
72
|
-
await asyncio.gather(*[tcp_echo_client(task_counter=f"{i}", logger=logger) for i in range(
|
|
72
|
+
await asyncio.gather(*[tcp_echo_client(task_counter=f"{i}", logger=logger) for i in range(NUM_CLIENTS)])
|
|
73
73
|
|
|
74
74
|
task = create_referenced_task(f())
|
|
75
75
|
try:
|
|
@@ -13,9 +13,9 @@ from chia_rs.sized_ints import uint8, uint16, uint64
|
|
|
13
13
|
import chia.server.server
|
|
14
14
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
15
15
|
from chia.protocols import full_node_protocol
|
|
16
|
+
from chia.protocols.outbound_message import Message, make_msg
|
|
16
17
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
17
18
|
from chia.protocols.shared_protocol import Capability, Handshake
|
|
18
|
-
from chia.server.outbound_message import Message, make_msg
|
|
19
19
|
from chia.server.rate_limits import RateLimiter
|
|
20
20
|
from chia.server.server import ChiaServer
|
|
21
21
|
from chia.server.ws_connection import WSChiaConnection
|
|
@@ -20,15 +20,15 @@ async def test_enable_private_networks(
|
|
|
20
20
|
|
|
21
21
|
# Missing `enable_private_networks` config entry in introducer_peer should default to False for back compat
|
|
22
22
|
discovery0 = FullNodeDiscovery(
|
|
23
|
-
chia_server,
|
|
24
|
-
0,
|
|
25
|
-
SIMULATOR_ROOT_PATH / Path(chia_server.config["peers_file_path"]),
|
|
26
|
-
{"host": "introducer.chia.net", "port": 8444},
|
|
27
|
-
[],
|
|
28
|
-
0,
|
|
29
|
-
chia_server.config["selected_network"],
|
|
30
|
-
None,
|
|
31
|
-
Logger("node_discovery_tests"),
|
|
23
|
+
server=chia_server,
|
|
24
|
+
target_outbound_count=0,
|
|
25
|
+
peers_file_path=SIMULATOR_ROOT_PATH / Path(chia_server.config["peers_file_path"]),
|
|
26
|
+
introducer_info={"host": "introducer.chia.net", "port": 8444},
|
|
27
|
+
dns_servers=[],
|
|
28
|
+
peer_connect_interval=0,
|
|
29
|
+
selected_network=chia_server.config["selected_network"],
|
|
30
|
+
default_port=None,
|
|
31
|
+
log=Logger("node_discovery_tests"),
|
|
32
32
|
)
|
|
33
33
|
assert discovery0 is not None
|
|
34
34
|
assert discovery0.enable_private_networks is False
|
|
@@ -36,17 +36,31 @@ async def test_enable_private_networks(
|
|
|
36
36
|
assert discovery0.address_manager is not None
|
|
37
37
|
assert discovery0.address_manager.allow_private_subnets is False
|
|
38
38
|
|
|
39
|
+
# Missing `default_port` but known selected_network should automatically pick a port
|
|
40
|
+
discovery0 = FullNodeDiscovery(
|
|
41
|
+
server=chia_server,
|
|
42
|
+
target_outbound_count=0,
|
|
43
|
+
peers_file_path=SIMULATOR_ROOT_PATH / Path(chia_server.config["peers_file_path"]),
|
|
44
|
+
introducer_info={"host": "introducer.chia.net", "port": 8444},
|
|
45
|
+
dns_servers=[],
|
|
46
|
+
peer_connect_interval=0,
|
|
47
|
+
selected_network="testnet7",
|
|
48
|
+
default_port=None,
|
|
49
|
+
log=Logger("node_discovery_tests"),
|
|
50
|
+
)
|
|
51
|
+
assert discovery0.default_port == 58444
|
|
52
|
+
|
|
39
53
|
# Test with enable_private_networks set to False in Config
|
|
40
54
|
discovery1 = FullNodeDiscovery(
|
|
41
|
-
chia_server,
|
|
42
|
-
0,
|
|
43
|
-
SIMULATOR_ROOT_PATH / Path(chia_server.config["peers_file_path"]),
|
|
44
|
-
{"host": "introducer.chia.net", "port": 8444, "enable_private_networks": False},
|
|
45
|
-
[],
|
|
46
|
-
0,
|
|
47
|
-
chia_server.config["selected_network"],
|
|
48
|
-
None,
|
|
49
|
-
Logger("node_discovery_tests"),
|
|
55
|
+
server=chia_server,
|
|
56
|
+
target_outbound_count=0,
|
|
57
|
+
peers_file_path=SIMULATOR_ROOT_PATH / Path(chia_server.config["peers_file_path"]),
|
|
58
|
+
introducer_info={"host": "introducer.chia.net", "port": 8444, "enable_private_networks": False},
|
|
59
|
+
dns_servers=[],
|
|
60
|
+
peer_connect_interval=0,
|
|
61
|
+
selected_network=chia_server.config["selected_network"],
|
|
62
|
+
default_port=None,
|
|
63
|
+
log=Logger("node_discovery_tests"),
|
|
50
64
|
)
|
|
51
65
|
assert discovery1 is not None
|
|
52
66
|
assert discovery1.enable_private_networks is False
|
|
@@ -56,15 +70,15 @@ async def test_enable_private_networks(
|
|
|
56
70
|
|
|
57
71
|
# Test with enable_private_networks set to True in Config
|
|
58
72
|
discovery2 = FullNodeDiscovery(
|
|
59
|
-
chia_server,
|
|
60
|
-
0,
|
|
61
|
-
SIMULATOR_ROOT_PATH / Path(chia_server.config["peers_file_path"]),
|
|
62
|
-
{"host": "introducer.chia.net", "port": 8444, "enable_private_networks": True},
|
|
63
|
-
[],
|
|
64
|
-
0,
|
|
65
|
-
chia_server.config["selected_network"],
|
|
66
|
-
None,
|
|
67
|
-
Logger("node_discovery_tests"),
|
|
73
|
+
server=chia_server,
|
|
74
|
+
target_outbound_count=0,
|
|
75
|
+
peers_file_path=SIMULATOR_ROOT_PATH / Path(chia_server.config["peers_file_path"]),
|
|
76
|
+
introducer_info={"host": "introducer.chia.net", "port": 8444, "enable_private_networks": True},
|
|
77
|
+
dns_servers=[],
|
|
78
|
+
peer_connect_interval=0,
|
|
79
|
+
selected_network=chia_server.config["selected_network"],
|
|
80
|
+
default_port=None,
|
|
81
|
+
log=Logger("node_discovery_tests"),
|
|
68
82
|
)
|
|
69
83
|
assert discovery2 is not None
|
|
70
84
|
assert discovery2.enable_private_networks is True
|
|
@@ -8,9 +8,9 @@ from chia_rs.sized_ints import uint32
|
|
|
8
8
|
from chia._tests.conftest import node_with_params
|
|
9
9
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
10
10
|
from chia.protocols.full_node_protocol import RejectBlock, RejectBlocks, RespondBlock, RespondBlocks
|
|
11
|
+
from chia.protocols.outbound_message import make_msg
|
|
11
12
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
12
13
|
from chia.protocols.shared_protocol import Capability
|
|
13
|
-
from chia.server.outbound_message import make_msg
|
|
14
14
|
from chia.server.rate_limit_numbers import compose_rate_limits, get_rate_limits_to_use
|
|
15
15
|
from chia.server.rate_limit_numbers import rate_limits as rl_numbers
|
|
16
16
|
from chia.server.rate_limits import RateLimiter
|
|
@@ -15,11 +15,11 @@ from chia._tests.util.setup_nodes import SimulatorsAndWalletsServices
|
|
|
15
15
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
16
16
|
from chia.full_node.full_node_api import FullNodeAPI
|
|
17
17
|
from chia.protocols.full_node_protocol import RejectBlock, RequestBlock, RequestTransaction
|
|
18
|
+
from chia.protocols.outbound_message import NodeType, make_msg
|
|
18
19
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
19
20
|
from chia.protocols.shared_protocol import Error, protocol_version
|
|
20
21
|
from chia.protocols.wallet_protocol import RejectHeaderRequest
|
|
21
22
|
from chia.server.api_protocol import ApiMetadata
|
|
22
|
-
from chia.server.outbound_message import NodeType, make_msg
|
|
23
23
|
from chia.server.server import ChiaServer
|
|
24
24
|
from chia.server.start_full_node import create_full_node_service
|
|
25
25
|
from chia.server.start_wallet import create_wallet_service
|
|
@@ -17,15 +17,15 @@ from typing_extensions import Protocol
|
|
|
17
17
|
from chia._tests.core.data_layer.util import ChiaRoot
|
|
18
18
|
from chia._tests.util.misc import closing_chia_root_popen
|
|
19
19
|
from chia.daemon.client import DaemonProxy, connect_to_daemon_and_validate
|
|
20
|
-
from chia.
|
|
21
|
-
from chia.
|
|
22
|
-
from chia.
|
|
23
|
-
from chia.
|
|
20
|
+
from chia.data_layer.data_layer_rpc_client import DataLayerRpcClient
|
|
21
|
+
from chia.farmer.farmer_rpc_client import FarmerRpcClient
|
|
22
|
+
from chia.full_node.full_node_rpc_client import FullNodeRpcClient
|
|
23
|
+
from chia.harvester.harvester_rpc_client import HarvesterRpcClient
|
|
24
24
|
from chia.rpc.rpc_client import RpcClient
|
|
25
|
-
from chia.rpc.wallet_rpc_client import WalletRpcClient
|
|
26
25
|
from chia.simulator.socket import find_available_listen_port
|
|
27
26
|
from chia.util.config import lock_and_load_config, save_config
|
|
28
27
|
from chia.util.timing import adjusted_timeout
|
|
28
|
+
from chia.wallet.wallet_rpc_client import WalletRpcClient
|
|
29
29
|
|
|
30
30
|
if sys.platform == "win32" or sys.platform == "cygwin":
|
|
31
31
|
termination_signals = [signal.SIGBREAK, signal.SIGINT, signal.SIGTERM]
|
chia/_tests/core/ssl/test_ssl.py
CHANGED
|
@@ -10,8 +10,8 @@ import pytest
|
|
|
10
10
|
from chia_rs.sized_bytes import bytes32
|
|
11
11
|
|
|
12
12
|
from chia.apis import ApiProtocolRegistry
|
|
13
|
+
from chia.protocols.outbound_message import NodeType
|
|
13
14
|
from chia.protocols.shared_protocol import default_capabilities
|
|
14
|
-
from chia.server.outbound_message import NodeType
|
|
15
15
|
from chia.server.server import ChiaServer, ssl_context_for_client
|
|
16
16
|
from chia.server.ssl_context import chia_ssl_ca_paths, private_ssl_ca_paths
|
|
17
17
|
from chia.server.ws_connection import WSChiaConnection
|