chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/blockchain/blockchain_test_utils.py +2 -3
- chia/_tests/blockchain/test_augmented_chain.py +2 -3
- chia/_tests/blockchain/test_blockchain.py +261 -44
- chia/_tests/blockchain/test_blockchain_transactions.py +4 -3
- chia/_tests/blockchain/test_build_chains.py +197 -1
- chia/_tests/blockchain/test_get_block_generator.py +1 -1
- chia/_tests/blockchain/test_lookup_fork_chain.py +1 -1
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +3 -4
- chia/_tests/clvm/test_message_conditions.py +2 -2
- chia/_tests/clvm/test_puzzle_compression.py +2 -3
- chia/_tests/clvm/test_puzzles.py +1 -2
- chia/_tests/clvm/test_singletons.py +2 -3
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +30 -25
- chia/_tests/cmds/test_dev_gh.py +1 -1
- chia/_tests/cmds/test_farm_cmd.py +1 -1
- chia/_tests/cmds/test_show.py +1 -2
- chia/_tests/cmds/wallet/test_did.py +101 -56
- chia/_tests/cmds/wallet/test_nft.py +109 -84
- chia/_tests/cmds/wallet/test_notifications.py +1 -1
- chia/_tests/cmds/wallet/test_offer.toffer +1 -1
- chia/_tests/cmds/wallet/test_vcs.py +8 -8
- chia/_tests/cmds/wallet/test_wallet.py +100 -46
- chia/_tests/conftest.py +31 -20
- chia/_tests/connection_utils.py +1 -1
- chia/_tests/core/consensus/stores/__init__.py +0 -0
- chia/_tests/core/consensus/stores/test_coin_store_protocol.py +40 -0
- chia/_tests/core/consensus/test_block_creation.py +2 -31
- chia/_tests/core/consensus/test_pot_iterations.py +38 -3
- chia/_tests/core/custom_types/test_proof_of_space.py +154 -26
- chia/_tests/core/custom_types/test_spend_bundle.py +2 -3
- chia/_tests/core/daemon/test_daemon.py +80 -0
- chia/_tests/core/data_layer/test_data_layer.py +1 -1
- chia/_tests/core/data_layer/test_data_layer_util.py +1 -1
- chia/_tests/core/data_layer/test_data_rpc.py +14 -10
- chia/_tests/core/data_layer/test_data_store.py +5 -5
- chia/_tests/core/farmer/test_farmer_api.py +2 -2
- chia/_tests/core/full_node/full_sync/test_full_sync.py +446 -406
- chia/_tests/core/full_node/ram_db.py +3 -1
- chia/_tests/core/full_node/stores/test_block_store.py +28 -16
- chia/_tests/core/full_node/stores/test_coin_store.py +277 -185
- chia/_tests/core/full_node/stores/test_full_node_store.py +11 -4
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_address_manager.py +200 -27
- chia/_tests/core/full_node/test_block_height_map.py +2 -2
- chia/_tests/core/full_node/test_conditions.py +7 -6
- chia/_tests/core/full_node/test_full_node.py +456 -40
- chia/_tests/core/full_node/test_generator_tools.py +32 -2
- chia/_tests/core/full_node/test_hint_management.py +1 -1
- chia/_tests/core/full_node/test_node_load.py +20 -21
- chia/_tests/core/full_node/test_performance.py +3 -4
- chia/_tests/core/full_node/test_prev_tx_block.py +43 -0
- chia/_tests/core/full_node/test_subscriptions.py +1 -2
- chia/_tests/core/full_node/test_transactions.py +9 -5
- chia/_tests/core/full_node/test_tx_processing_queue.py +1 -2
- chia/_tests/core/large_block.py +1 -2
- chia/_tests/core/make_block_generator.py +3 -4
- chia/_tests/core/mempool/test_mempool.py +36 -86
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +1 -1
- chia/_tests/core/mempool/test_mempool_item_queries.py +1 -3
- chia/_tests/core/mempool/test_mempool_manager.py +529 -69
- chia/_tests/core/mempool/test_mempool_performance.py +3 -2
- chia/_tests/core/mempool/test_singleton_fast_forward.py +61 -132
- chia/_tests/core/server/flood.py +1 -1
- chia/_tests/core/server/test_dos.py +1 -1
- chia/_tests/core/server/test_node_discovery.py +41 -27
- chia/_tests/core/server/test_rate_limits.py +1 -1
- chia/_tests/core/server/test_server.py +1 -1
- chia/_tests/core/services/test_services.py +5 -5
- chia/_tests/core/ssl/test_ssl.py +1 -1
- chia/_tests/core/test_cost_calculation.py +6 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_crawler_rpc.py +1 -1
- chia/_tests/core/test_db_conversion.py +3 -1
- chia/_tests/core/test_db_validation.py +5 -3
- chia/_tests/core/test_farmer_harvester_rpc.py +15 -15
- chia/_tests/core/test_filter.py +4 -1
- chia/_tests/core/test_full_node_rpc.py +99 -82
- chia/_tests/core/test_program.py +2 -2
- chia/_tests/core/util/test_block_cache.py +1 -1
- chia/_tests/core/util/test_keychain.py +2 -2
- chia/_tests/core/util/test_lockfile.py +1 -1
- chia/_tests/core/util/test_log_exceptions.py +5 -5
- chia/_tests/core/util/test_streamable.py +81 -22
- chia/_tests/db/test_db_wrapper.py +1 -3
- chia/_tests/environments/wallet.py +5 -5
- chia/_tests/farmer_harvester/test_farmer.py +9 -7
- chia/_tests/farmer_harvester/test_farmer_harvester.py +11 -4
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +15 -9
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +1 -2
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +7 -5
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -1
- chia/_tests/generator/test_compression.py +1 -2
- chia/_tests/generator/test_rom.py +8 -4
- chia/_tests/plot_sync/test_plot_sync.py +3 -3
- chia/_tests/plot_sync/test_receiver.py +3 -3
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +3 -3
- chia/_tests/plot_sync/util.py +2 -2
- chia/_tests/pools/test_pool_cmdline.py +48 -21
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +2 -3
- chia/_tests/pools/test_pool_rpc.py +237 -105
- chia/_tests/pools/test_pool_wallet.py +11 -2
- chia/_tests/pools/test_wallet_pool_store.py +5 -4
- chia/_tests/rpc/test_rpc_client.py +1 -1
- chia/_tests/simulation/test_simulation.py +13 -8
- chia/_tests/simulation/test_simulator.py +2 -2
- chia/_tests/timelord/test_new_peak.py +191 -47
- chia/_tests/timelord/test_timelord.py +1 -1
- chia/_tests/tools/test_full_sync.py +0 -2
- chia/_tests/tools/test_run_block.py +3 -1
- chia/_tests/util/benchmark_cost.py +3 -3
- chia/_tests/util/benchmarks.py +2 -2
- chia/_tests/util/blockchain.py +11 -5
- chia/_tests/util/blockchain_mock.py +1 -4
- chia/_tests/util/coin_store.py +29 -0
- chia/_tests/util/constants.py +2 -18
- chia/_tests/util/full_sync.py +3 -3
- chia/_tests/util/generator_tools_testing.py +2 -3
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +33 -31
- chia/_tests/util/network_protocol_data.py +19 -17
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +3 -1
- chia/_tests/util/run_block.py +2 -2
- chia/_tests/util/setup_nodes.py +7 -7
- chia/_tests/util/spend_sim.py +47 -55
- chia/_tests/util/test_condition_tools.py +5 -4
- chia/_tests/util/test_config.py +2 -2
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +12 -14
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_paginator.py +4 -4
- chia/_tests/util/test_priority_mutex.py +2 -2
- chia/_tests/util/test_replace_str_to_bytes.py +15 -5
- chia/_tests/util/test_ssl_check.py +1 -1
- chia/_tests/util/test_testnet_overrides.py +13 -3
- chia/_tests/util/time_out_assert.py +4 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -2
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +352 -432
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +3 -6
- chia/_tests/wallet/cat_wallet/test_trades.py +53 -77
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -1
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +3 -3
- chia/_tests/wallet/clawback/test_clawback_metadata.py +4 -2
- chia/_tests/wallet/conftest.py +11 -12
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +11 -4
- chia/_tests/wallet/db_wallet/test_dl_offers.py +433 -130
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +3 -3
- chia/_tests/wallet/did_wallet/test_did.py +2132 -2000
- chia/_tests/wallet/nft_wallet/config.py +1 -1
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1610 -742
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +486 -907
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +4 -4
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +517 -294
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +133 -62
- chia/_tests/wallet/rpc/test_wallet_rpc.py +495 -265
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +10 -6
- chia/_tests/wallet/sync/test_wallet_sync.py +89 -60
- chia/_tests/wallet/test_clvm_casts.py +88 -0
- chia/_tests/wallet/test_coin_management.py +1 -1
- chia/_tests/wallet/test_coin_selection.py +1 -1
- chia/_tests/wallet/test_conditions.py +1 -1
- chia/_tests/wallet/test_new_wallet_protocol.py +13 -11
- chia/_tests/wallet/test_notifications.py +5 -3
- chia/_tests/wallet/test_sign_coin_spends.py +6 -6
- chia/_tests/wallet/test_signer_protocol.py +13 -12
- chia/_tests/wallet/test_singleton.py +1 -1
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +5 -7
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +108 -29
- chia/_tests/wallet/test_wallet_action_scope.py +9 -2
- chia/_tests/wallet/test_wallet_blockchain.py +2 -3
- chia/_tests/wallet/test_wallet_key_val_store.py +1 -2
- chia/_tests/wallet/test_wallet_node.py +2 -4
- chia/_tests/wallet/test_wallet_retry.py +4 -2
- chia/_tests/wallet/test_wallet_state_manager.py +191 -5
- chia/_tests/wallet/test_wallet_test_framework.py +1 -1
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +8 -8
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -12
- chia/_tests/wallet/wallet_block_tools.py +6 -6
- chia/_tests/weight_proof/test_weight_proof.py +10 -48
- chia/apis.py +1 -1
- chia/cmds/beta.py +1 -1
- chia/cmds/chia.py +9 -9
- chia/cmds/cmd_classes.py +12 -11
- chia/cmds/cmd_helpers.py +1 -1
- chia/cmds/cmds_util.py +12 -9
- chia/cmds/coin_funcs.py +2 -2
- chia/cmds/configure.py +2 -2
- chia/cmds/data.py +0 -2
- chia/cmds/data_funcs.py +1 -1
- chia/cmds/db_validate_func.py +1 -2
- chia/cmds/dev/__init__.py +0 -0
- chia/cmds/dev/data.py +273 -0
- chia/cmds/{gh.py → dev/gh.py} +5 -5
- chia/cmds/dev/main.py +22 -0
- chia/cmds/dev/mempool.py +78 -0
- chia/cmds/dev/mempool_funcs.py +63 -0
- chia/cmds/farm_funcs.py +5 -4
- chia/cmds/init_funcs.py +11 -11
- chia/cmds/keys.py +2 -2
- chia/cmds/keys_funcs.py +4 -4
- chia/cmds/netspace_funcs.py +1 -1
- chia/cmds/peer_funcs.py +2 -2
- chia/cmds/plotnft_funcs.py +72 -26
- chia/cmds/rpc.py +1 -1
- chia/cmds/show_funcs.py +5 -5
- chia/cmds/signer.py +8 -7
- chia/cmds/sim_funcs.py +8 -9
- chia/cmds/wallet.py +2 -2
- chia/cmds/wallet_funcs.py +165 -131
- chia/{util → consensus}/augmented_chain.py +1 -2
- chia/consensus/block_body_validation.py +54 -40
- chia/consensus/block_creation.py +42 -76
- chia/consensus/block_header_validation.py +32 -26
- chia/consensus/block_record.py +0 -3
- chia/consensus/blockchain.py +23 -32
- chia/consensus/blockchain_interface.py +1 -5
- chia/consensus/check_time_locks.py +57 -0
- chia/consensus/coin_store_protocol.py +151 -0
- chia/consensus/coinbase.py +0 -6
- chia/consensus/condition_costs.py +4 -0
- chia/{util → consensus}/condition_tools.py +4 -5
- chia/consensus/cost_calculator.py +1 -1
- chia/consensus/default_constants.py +32 -9
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +1 -2
- chia/consensus/find_fork_point.py +1 -3
- chia/consensus/full_block_to_block_record.py +1 -6
- chia/{util → consensus}/generator_tools.py +1 -3
- chia/consensus/get_block_challenge.py +30 -7
- chia/consensus/make_sub_epoch_summary.py +1 -5
- chia/consensus/multiprocess_validation.py +21 -20
- chia/consensus/pot_iterations.py +74 -13
- chia/{util → consensus}/prev_transaction_block.py +1 -1
- chia/consensus/vdf_info_computation.py +1 -3
- chia/daemon/keychain_proxy.py +5 -5
- chia/daemon/server.py +22 -5
- chia/data_layer/data_layer.py +92 -51
- chia/{rpc → data_layer}/data_layer_rpc_api.py +1 -1
- chia/{rpc → data_layer}/data_layer_rpc_util.py +3 -6
- chia/data_layer/data_layer_util.py +4 -6
- chia/data_layer/data_layer_wallet.py +42 -69
- chia/data_layer/dl_wallet_store.py +12 -6
- chia/data_layer/download_data.py +3 -3
- chia/data_layer/s3_plugin_service.py +0 -1
- chia/farmer/farmer.py +3 -4
- chia/farmer/farmer_api.py +11 -7
- chia/{rpc → farmer}/farmer_rpc_client.py +1 -1
- chia/full_node/block_height_map.py +7 -6
- chia/full_node/block_store.py +5 -7
- chia/full_node/bundle_tools.py +1 -2
- chia/full_node/coin_store.py +153 -124
- chia/{types → full_node}/eligible_coin_spends.py +39 -70
- chia/full_node/fee_estimator.py +1 -1
- chia/full_node/fee_estimator_interface.py +0 -8
- chia/full_node/fee_tracker.py +25 -25
- chia/full_node/full_node.py +70 -53
- chia/full_node/full_node_api.py +57 -40
- chia/{rpc → full_node}/full_node_rpc_api.py +87 -8
- chia/{rpc → full_node}/full_node_rpc_client.py +7 -6
- chia/full_node/full_node_store.py +23 -8
- chia/full_node/mempool.py +206 -53
- chia/full_node/mempool_check_conditions.py +20 -63
- chia/full_node/mempool_manager.py +47 -45
- chia/full_node/subscriptions.py +1 -3
- chia/full_node/tx_processing_queue.py +50 -3
- chia/full_node/weight_proof.py +46 -37
- chia/harvester/harvester.py +1 -1
- chia/harvester/harvester_api.py +22 -7
- chia/introducer/introducer.py +1 -1
- chia/introducer/introducer_api.py +1 -1
- chia/plot_sync/exceptions.py +1 -1
- chia/plot_sync/receiver.py +1 -1
- chia/plot_sync/sender.py +2 -2
- chia/pools/pool_puzzles.py +13 -18
- chia/pools/pool_wallet.py +23 -46
- chia/protocols/farmer_protocol.py +11 -3
- chia/protocols/full_node_protocol.py +1 -4
- chia/protocols/harvester_protocol.py +3 -3
- chia/protocols/pool_protocol.py +1 -2
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +1 -3
- chia/protocols/wallet_protocol.py +3 -3
- chia/rpc/rpc_client.py +7 -8
- chia/rpc/rpc_server.py +3 -3
- chia/rpc/util.py +3 -1
- chia/seeder/crawler.py +1 -1
- chia/seeder/crawler_api.py +1 -1
- chia/seeder/dns_server.py +2 -0
- chia/seeder/start_crawler.py +3 -3
- chia/server/address_manager.py +286 -38
- chia/server/address_manager_store.py +0 -215
- chia/{types → server}/aliases.py +7 -7
- chia/server/api_protocol.py +1 -1
- chia/server/chia_policy.py +1 -1
- chia/server/node_discovery.py +76 -113
- chia/server/rate_limits.py +1 -1
- chia/server/resolve_peer_info.py +43 -0
- chia/server/server.py +5 -5
- chia/server/start_data_layer.py +4 -4
- chia/server/start_farmer.py +5 -4
- chia/server/start_full_node.py +5 -4
- chia/server/start_harvester.py +7 -5
- chia/server/start_introducer.py +2 -2
- chia/server/start_service.py +1 -1
- chia/server/start_timelord.py +7 -5
- chia/server/start_wallet.py +7 -5
- chia/server/ws_connection.py +1 -1
- chia/simulator/add_blocks_in_batches.py +2 -2
- chia/simulator/block_tools.py +245 -201
- chia/simulator/full_node_simulator.py +38 -10
- chia/simulator/setup_services.py +12 -12
- chia/simulator/simulator_full_node_rpc_api.py +2 -2
- chia/simulator/simulator_full_node_rpc_client.py +2 -2
- chia/simulator/simulator_test_tools.py +2 -2
- chia/simulator/start_simulator.py +1 -1
- chia/simulator/wallet_tools.py +10 -18
- chia/ssl/create_ssl.py +1 -1
- chia/timelord/iters_from_block.py +14 -14
- chia/timelord/timelord.py +15 -11
- chia/timelord/timelord_api.py +14 -2
- chia/timelord/timelord_state.py +20 -14
- chia/types/blockchain_format/program.py +53 -10
- chia/types/blockchain_format/proof_of_space.py +73 -19
- chia/types/coin_spend.py +3 -56
- chia/types/generator_types.py +28 -0
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +12 -7
- chia/types/unfinished_header_block.py +1 -2
- chia/types/validation_state.py +1 -2
- chia/types/weight_proof.py +1 -3
- chia/util/action_scope.py +3 -3
- chia/util/block_cache.py +1 -2
- chia/util/byte_types.py +1 -1
- chia/util/casts.py +21 -0
- chia/util/config.py +0 -37
- chia/util/db_wrapper.py +8 -1
- chia/util/errors.py +3 -2
- chia/util/initial-config.yaml +21 -5
- chia/util/keychain.py +6 -7
- chia/util/keyring_wrapper.py +5 -5
- chia/util/limited_semaphore.py +1 -1
- chia/util/priority_mutex.py +1 -1
- chia/util/streamable.py +63 -5
- chia/util/task_timing.py +1 -1
- chia/util/virtual_project_analysis.py +1 -1
- chia/wallet/cat_wallet/cat_info.py +7 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +9 -5
- chia/wallet/cat_wallet/cat_utils.py +1 -1
- chia/wallet/cat_wallet/cat_wallet.py +44 -36
- chia/wallet/cat_wallet/lineage_store.py +7 -0
- chia/wallet/cat_wallet/r_cat_wallet.py +274 -0
- chia/wallet/conditions.py +5 -10
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -4
- chia/wallet/derivation_record.py +33 -0
- chia/wallet/derive_keys.py +3 -3
- chia/wallet/did_wallet/did_info.py +12 -3
- chia/wallet/did_wallet/did_wallet.py +132 -101
- chia/wallet/did_wallet/did_wallet_puzzles.py +9 -9
- chia/wallet/driver_protocol.py +3 -1
- chia/{types/spend_bundle.py → wallet/estimate_fees.py} +2 -7
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
- chia/wallet/nft_wallet/nft_wallet.py +69 -112
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +6 -4
- chia/wallet/nft_wallet/transfer_program_puzzle.py +4 -2
- chia/wallet/nft_wallet/uncurry_nft.py +4 -6
- chia/wallet/notification_manager.py +2 -3
- chia/wallet/outer_puzzles.py +7 -2
- chia/wallet/puzzle_drivers.py +1 -1
- chia/wallet/puzzles/clawback/drivers.py +5 -4
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -1
- chia/wallet/puzzles/singleton_top_layer.py +2 -1
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +2 -1
- chia/wallet/puzzles/tails.py +1 -3
- chia/wallet/signer_protocol.py +5 -6
- chia/wallet/singleton.py +5 -4
- chia/wallet/singleton_record.py +1 -1
- chia/wallet/trade_manager.py +18 -20
- chia/wallet/trade_record.py +3 -6
- chia/wallet/trading/offer.py +12 -13
- chia/wallet/uncurried_puzzle.py +2 -2
- chia/wallet/util/compute_additions.py +58 -0
- chia/wallet/util/compute_hints.py +3 -3
- chia/wallet/util/compute_memos.py +4 -4
- chia/wallet/util/curry_and_treehash.py +2 -1
- chia/wallet/util/debug_spend_bundle.py +1 -1
- chia/wallet/util/merkle_tree.py +1 -1
- chia/wallet/util/peer_request_cache.py +1 -2
- chia/wallet/util/tx_config.py +3 -8
- chia/wallet/util/wallet_sync_utils.py +10 -5
- chia/wallet/util/wallet_types.py +1 -0
- chia/wallet/vc_wallet/cr_cat_drivers.py +17 -18
- chia/wallet/vc_wallet/cr_cat_wallet.py +30 -28
- chia/wallet/vc_wallet/cr_outer_puzzle.py +5 -3
- chia/wallet/vc_wallet/vc_drivers.py +50 -8
- chia/wallet/vc_wallet/vc_store.py +3 -5
- chia/wallet/vc_wallet/vc_wallet.py +15 -22
- chia/wallet/wallet.py +36 -46
- chia/wallet/wallet_action_scope.py +73 -4
- chia/wallet/wallet_blockchain.py +1 -3
- chia/wallet/wallet_interested_store.py +1 -1
- chia/wallet/wallet_nft_store.py +3 -3
- chia/wallet/wallet_node.py +17 -16
- chia/wallet/wallet_node_api.py +4 -5
- chia/wallet/wallet_pool_store.py +1 -1
- chia/wallet/wallet_protocol.py +2 -0
- chia/wallet/wallet_puzzle_store.py +1 -1
- chia/{rpc → wallet}/wallet_request_types.py +670 -81
- chia/{rpc → wallet}/wallet_rpc_api.py +735 -766
- chia/{rpc → wallet}/wallet_rpc_client.py +268 -420
- chia/wallet/wallet_singleton_store.py +8 -7
- chia/wallet/wallet_spend_bundle.py +4 -3
- chia/wallet/wallet_state_manager.py +320 -191
- chia/wallet/wallet_weight_proof_handler.py +1 -2
- chia/wallet/wsm_apis.py +98 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/METADATA +7 -7
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/RECORD +443 -436
- mozilla-ca/cacert.pem +3 -165
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +0 -145
- chia/cmds/dev.py +0 -18
- chia/types/blockchain_format/slots.py +0 -9
- chia/types/blockchain_format/sub_epoch_summary.py +0 -5
- chia/types/end_of_slot_bundle.py +0 -5
- chia/types/full_block.py +0 -5
- chia/types/header_block.py +0 -5
- chia/types/spend_bundle_conditions.py +0 -7
- chia/types/transaction_queue_entry.py +0 -56
- chia/types/unfinished_block.py +0 -5
- /chia/cmds/{installers.py → dev/installers.py} +0 -0
- /chia/cmds/{sim.py → dev/sim.py} +0 -0
- /chia/{util → cmds}/dump_keyring.py +0 -0
- /chia/{full_node → consensus}/signage_point.py +0 -0
- /chia/{rpc → data_layer}/data_layer_rpc_client.py +0 -0
- /chia/{rpc → farmer}/farmer_rpc_api.py +0 -0
- /chia/{util → full_node}/full_block_utils.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_api.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_client.py +0 -0
- /chia/{full_node → protocols}/fee_estimate.py +0 -0
- /chia/{server → protocols}/outbound_message.py +0 -0
- /chia/{rpc → seeder}/crawler_rpc_api.py +0 -0
- /chia/{util → simulator}/vdf_prover.py +0 -0
- /chia/{util → ssl}/ssl_check.py +0 -0
- /chia/{rpc → timelord}/timelord_rpc_api.py +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/entry_points.txt +0 -0
|
@@ -6,7 +6,7 @@ from collections.abc import AsyncIterator
|
|
|
6
6
|
from typing import Optional
|
|
7
7
|
|
|
8
8
|
import pytest
|
|
9
|
-
from chia_rs import ConsensusConstants
|
|
9
|
+
from chia_rs import ConsensusConstants, FullBlock, UnfinishedBlock
|
|
10
10
|
from chia_rs.sized_bytes import bytes32
|
|
11
11
|
from chia_rs.sized_ints import uint8, uint16, uint32, uint64, uint128
|
|
12
12
|
|
|
@@ -20,14 +20,12 @@ from chia.consensus.difficulty_adjustment import get_next_sub_slot_iters_and_dif
|
|
|
20
20
|
from chia.consensus.find_fork_point import find_fork_point_in_chain
|
|
21
21
|
from chia.consensus.multiprocess_validation import PreValidationResult
|
|
22
22
|
from chia.consensus.pot_iterations import is_overflow_block
|
|
23
|
+
from chia.consensus.signage_point import SignagePoint
|
|
23
24
|
from chia.full_node.full_node_store import FullNodeStore, UnfinishedBlockEntry, find_best_block
|
|
24
|
-
from chia.full_node.signage_point import SignagePoint
|
|
25
25
|
from chia.protocols import timelord_protocol
|
|
26
26
|
from chia.protocols.timelord_protocol import NewInfusionPointVDF
|
|
27
27
|
from chia.simulator.block_tools import BlockTools, create_block_tools_async, get_signage_point, make_unfinished_block
|
|
28
28
|
from chia.simulator.keyring import TempKeyring
|
|
29
|
-
from chia.types.full_block import FullBlock
|
|
30
|
-
from chia.types.unfinished_block import UnfinishedBlock
|
|
31
29
|
from chia.util.hash import std_hash
|
|
32
30
|
from chia.util.recursive_replace import recursive_replace
|
|
33
31
|
|
|
@@ -675,6 +673,8 @@ async def test_basic_store(
|
|
|
675
673
|
)
|
|
676
674
|
assert sp.cc_vdf is not None
|
|
677
675
|
saved_sp_hash = sp.cc_vdf.output.get_hash()
|
|
676
|
+
saved_index = uint8(i)
|
|
677
|
+
saved_challenge = sp.cc_vdf.challenge
|
|
678
678
|
assert store.new_signage_point(uint8(i), blockchain, peak, peak.sub_slot_iters, sp)
|
|
679
679
|
|
|
680
680
|
# Test adding future signage point (bad)
|
|
@@ -728,7 +728,10 @@ async def test_basic_store(
|
|
|
728
728
|
# Get signage point by hash
|
|
729
729
|
assert saved_sp_hash is not None
|
|
730
730
|
assert store.get_signage_point(saved_sp_hash) is not None
|
|
731
|
+
assert store.get_signage_point_by_index_and_cc_output(saved_sp_hash, saved_challenge, saved_index) is not None
|
|
732
|
+
|
|
731
733
|
assert store.get_signage_point(std_hash(b"2")) is None
|
|
734
|
+
assert store.get_signage_point_by_index_and_cc_output(std_hash(b"2"), saved_challenge, saved_index) is None
|
|
732
735
|
|
|
733
736
|
# Test adding signage points before genesis
|
|
734
737
|
store.initialize_genesis_sub_slot()
|
|
@@ -1026,6 +1029,10 @@ async def test_basic_store(
|
|
|
1026
1029
|
assert sp_to_check is not None
|
|
1027
1030
|
assert sp_to_check.cc_vdf is not None
|
|
1028
1031
|
fetched = store.get_signage_point(sp_to_check.cc_vdf.output.get_hash())
|
|
1032
|
+
fetched_new = store.get_signage_point_by_index_and_cc_output(
|
|
1033
|
+
sp_to_check.cc_vdf.output.get_hash(), sp_to_check.cc_vdf.challenge, uint8(sp_index)
|
|
1034
|
+
)
|
|
1035
|
+
assert fetched_new == fetched
|
|
1029
1036
|
assert (fetched is None) == is_none
|
|
1030
1037
|
if fetched is not None:
|
|
1031
1038
|
assert fetched == sp_to_check
|
|
@@ -5,7 +5,6 @@ import logging
|
|
|
5
5
|
import pytest
|
|
6
6
|
from chia_rs.sized_bytes import bytes32
|
|
7
7
|
from chia_rs.sized_ints import uint64
|
|
8
|
-
from clvm.casts import int_to_bytes
|
|
9
8
|
|
|
10
9
|
from chia._tests.util.db_connection import DBConnection
|
|
11
10
|
from chia.full_node.hint_store import HintStore
|
|
@@ -16,6 +15,7 @@ from chia.simulator.wallet_tools import WalletTool
|
|
|
16
15
|
from chia.types.blockchain_format.coin import Coin
|
|
17
16
|
from chia.types.condition_opcodes import ConditionOpcode
|
|
18
17
|
from chia.types.condition_with_args import ConditionWithArgs
|
|
18
|
+
from chia.util.casts import int_to_bytes
|
|
19
19
|
|
|
20
20
|
log = logging.getLogger(__name__)
|
|
21
21
|
|
|
@@ -91,7 +91,7 @@ async def test_duplicates(db_version: int) -> None:
|
|
|
91
91
|
hint_0 = 32 * b"\0"
|
|
92
92
|
coin_id_0 = bytes32(32 * b"\4")
|
|
93
93
|
|
|
94
|
-
for i in range(
|
|
94
|
+
for i in range(2):
|
|
95
95
|
hints = [(coin_id_0, hint_0), (coin_id_0, hint_0)]
|
|
96
96
|
await hint_store.add_hints(hints)
|
|
97
97
|
coins_for_hint_0 = await hint_store.get_coin_ids(hint_0)
|
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import contextlib
|
|
4
|
+
import io
|
|
3
5
|
import math
|
|
4
6
|
import time
|
|
5
7
|
from pathlib import Path
|
|
6
8
|
|
|
7
9
|
import pytest
|
|
8
|
-
from chia_rs.sized_ints import uint16, uint64
|
|
9
|
-
|
|
10
|
-
from chia.server.address_manager import
|
|
11
|
-
|
|
10
|
+
from chia_rs.sized_ints import uint16, uint32, uint64
|
|
11
|
+
|
|
12
|
+
from chia.server.address_manager import (
|
|
13
|
+
BUCKET_SIZE,
|
|
14
|
+
NEW_BUCKET_COUNT,
|
|
15
|
+
AddressManager,
|
|
16
|
+
ExtendedPeerInfo,
|
|
17
|
+
)
|
|
18
|
+
from chia.server.address_manager_store import PeerDataSerialization
|
|
12
19
|
from chia.types.peer_info import PeerInfo, TimestampedPeerInfo
|
|
20
|
+
from chia.util.files import write_file_async
|
|
13
21
|
|
|
14
22
|
|
|
15
23
|
class AddressManagerTest(AddressManager):
|
|
@@ -526,13 +534,35 @@ class TestPeerManager:
|
|
|
526
534
|
await addrman.resolve_tried_collisions()
|
|
527
535
|
assert await addrman.select_tried_collision() is None
|
|
528
536
|
|
|
537
|
+
async def check_retrieved_peers(self, wanted_peers: list[ExtendedPeerInfo], addrman: AddressManager) -> bool:
|
|
538
|
+
retrieved_peers = []
|
|
539
|
+
for _ in range(50):
|
|
540
|
+
peer = await addrman.select_peer()
|
|
541
|
+
if peer not in retrieved_peers:
|
|
542
|
+
retrieved_peers.append(peer)
|
|
543
|
+
if len(retrieved_peers) == 3:
|
|
544
|
+
break
|
|
545
|
+
if len(retrieved_peers) != 3: # pragma: no cover
|
|
546
|
+
return False # pragma: no cover
|
|
547
|
+
recovered = 0
|
|
548
|
+
for target_peer in wanted_peers:
|
|
549
|
+
for current_peer in retrieved_peers:
|
|
550
|
+
if (
|
|
551
|
+
current_peer is not None
|
|
552
|
+
and current_peer.peer_info == target_peer.peer_info
|
|
553
|
+
and current_peer.src == target_peer.src
|
|
554
|
+
and current_peer.timestamp == target_peer.timestamp
|
|
555
|
+
):
|
|
556
|
+
recovered += 1
|
|
557
|
+
return recovered == 3
|
|
558
|
+
|
|
529
559
|
@pytest.mark.anyio
|
|
530
560
|
# use tmp_path pytest fixture to create a temporary directory
|
|
531
561
|
async def test_serialization(self, tmp_path: Path):
|
|
532
562
|
addrman = AddressManagerTest()
|
|
533
563
|
now = int(math.floor(time.time()))
|
|
534
564
|
t_peer1 = TimestampedPeerInfo("250.7.1.1", uint16(8333), uint64(now - 10000))
|
|
535
|
-
t_peer2 = TimestampedPeerInfo("
|
|
565
|
+
t_peer2 = TimestampedPeerInfo("1050:0000:0000:0000:0005:0600:300c:326b", uint16(9999), uint64(now - 20000))
|
|
536
566
|
t_peer3 = TimestampedPeerInfo("250.7.3.3", uint16(9999), uint64(now - 30000))
|
|
537
567
|
source = PeerInfo("252.5.1.1", uint16(8333))
|
|
538
568
|
await addrman.add_to_new_table([t_peer1, t_peer2, t_peer3], source)
|
|
@@ -542,36 +572,84 @@ class TestPeerManager:
|
|
|
542
572
|
if peers_dat_filename.exists():
|
|
543
573
|
peers_dat_filename.unlink()
|
|
544
574
|
# Write out the serialized peer data
|
|
545
|
-
|
|
575
|
+
serialised_bytes = addrman.serialize_bytes()
|
|
576
|
+
await write_file_async(peers_dat_filename, serialised_bytes, file_mode=0o644)
|
|
546
577
|
# Read in the serialized peer data
|
|
547
|
-
addrman2 = await
|
|
548
|
-
|
|
549
|
-
retrieved_peers = []
|
|
550
|
-
for _ in range(50):
|
|
551
|
-
peer = await addrman2.select_peer()
|
|
552
|
-
if peer not in retrieved_peers:
|
|
553
|
-
retrieved_peers.append(peer)
|
|
554
|
-
if len(retrieved_peers) == 3:
|
|
555
|
-
break
|
|
556
|
-
assert len(retrieved_peers) == 3
|
|
578
|
+
addrman2 = await AddressManager.create_address_manager(peers_dat_filename)
|
|
557
579
|
wanted_peers = [
|
|
558
580
|
ExtendedPeerInfo(t_peer1, source),
|
|
559
581
|
ExtendedPeerInfo(t_peer2, source),
|
|
560
582
|
ExtendedPeerInfo(t_peer3, source),
|
|
561
583
|
]
|
|
562
|
-
|
|
563
|
-
for target_peer in wanted_peers:
|
|
564
|
-
for current_peer in retrieved_peers:
|
|
565
|
-
if (
|
|
566
|
-
current_peer is not None
|
|
567
|
-
and current_peer.peer_info == target_peer.peer_info
|
|
568
|
-
and current_peer.src == target_peer.src
|
|
569
|
-
and current_peer.timestamp == target_peer.timestamp
|
|
570
|
-
):
|
|
571
|
-
recovered += 1
|
|
572
|
-
assert recovered == 3
|
|
584
|
+
assert await self.check_retrieved_peers(wanted_peers, addrman2)
|
|
573
585
|
peers_dat_filename.unlink()
|
|
574
586
|
|
|
587
|
+
@pytest.mark.anyio
|
|
588
|
+
async def test_bad_ip_encoding(self, tmp_path: Path):
|
|
589
|
+
addrman = AddressManagerTest()
|
|
590
|
+
now = int(math.floor(time.time()))
|
|
591
|
+
t_peer1 = TimestampedPeerInfo("250.7.1.1", uint16(8333), uint64(now - 10000))
|
|
592
|
+
t_peer2 = TimestampedPeerInfo("1050:0000:0000:0000:0005:0600:300c:326b", uint16(9999), uint64(now - 20000))
|
|
593
|
+
t_peer3 = TimestampedPeerInfo("250.7.3.3", uint16(9999), uint64(now - 30000))
|
|
594
|
+
source = PeerInfo("252.5.1.1", uint16(8333))
|
|
595
|
+
await addrman.add_to_new_table([t_peer1, t_peer2, t_peer3], source)
|
|
596
|
+
await addrman.mark_good(PeerInfo("250.7.1.1", uint16(8333)))
|
|
597
|
+
|
|
598
|
+
peers_dat_filename = tmp_path / "peers.dat"
|
|
599
|
+
with contextlib.suppress(FileNotFoundError):
|
|
600
|
+
peers_dat_filename.unlink()
|
|
601
|
+
# Write out the serialized peer data but use a bad IP type
|
|
602
|
+
out = io.BytesIO()
|
|
603
|
+
nodes = io.BytesIO()
|
|
604
|
+
trieds = io.BytesIO()
|
|
605
|
+
new_table = io.BytesIO()
|
|
606
|
+
unique_ids: dict[int, int] = {}
|
|
607
|
+
count_ids: int = 0
|
|
608
|
+
|
|
609
|
+
for node_id, info in addrman.map_info.items():
|
|
610
|
+
unique_ids[node_id] = count_ids
|
|
611
|
+
if info.ref_count > 0:
|
|
612
|
+
assert count_ids != addrman.new_count
|
|
613
|
+
nodes.write(b"\x02") # this is the bad byte
|
|
614
|
+
nodes.write(info.peer_info._ip._inner.packed)
|
|
615
|
+
info.peer_info.port.stream(nodes)
|
|
616
|
+
uint64(info.timestamp).stream(nodes)
|
|
617
|
+
nodes.write(info.encode_ip_type(info.src._ip))
|
|
618
|
+
nodes.write(info.src._ip._inner.packed)
|
|
619
|
+
info.src.port.stream(nodes)
|
|
620
|
+
count_ids += 1
|
|
621
|
+
if info.is_tried:
|
|
622
|
+
info.stream(nodes)
|
|
623
|
+
|
|
624
|
+
out.write(addrman.key.to_bytes(32, byteorder="big"))
|
|
625
|
+
uint64(count_ids).stream(out)
|
|
626
|
+
|
|
627
|
+
count = 0
|
|
628
|
+
for bucket in range(NEW_BUCKET_COUNT):
|
|
629
|
+
for i in range(BUCKET_SIZE):
|
|
630
|
+
if addrman.new_matrix[bucket][i] != -1:
|
|
631
|
+
count += 1
|
|
632
|
+
uint64(unique_ids[addrman.new_matrix[bucket][i]]).stream(new_table)
|
|
633
|
+
uint64(bucket).stream(new_table)
|
|
634
|
+
|
|
635
|
+
# give ourselves a clue how long the new_table is
|
|
636
|
+
uint32(count).stream(out)
|
|
637
|
+
out.write(new_table.getvalue())
|
|
638
|
+
|
|
639
|
+
out.write(nodes.getvalue())
|
|
640
|
+
out.write(trieds.getvalue())
|
|
641
|
+
await write_file_async(peers_dat_filename, out.getvalue(), file_mode=0o644)
|
|
642
|
+
addrman2 = await AddressManager.create_address_manager(peers_dat_filename)
|
|
643
|
+
assert len(addrman2.map_info) == 0
|
|
644
|
+
|
|
645
|
+
@pytest.mark.anyio
|
|
646
|
+
async def test_load_missing_file(self, tmp_path: Path):
|
|
647
|
+
peers_dat_filename = tmp_path / "peers.dat"
|
|
648
|
+
with contextlib.suppress(FileNotFoundError):
|
|
649
|
+
peers_dat_filename.unlink()
|
|
650
|
+
addrman = await AddressManager.create_address_manager(peers_dat_filename)
|
|
651
|
+
assert isinstance(addrman, AddressManager)
|
|
652
|
+
|
|
575
653
|
@pytest.mark.anyio
|
|
576
654
|
async def test_cleanup(self):
|
|
577
655
|
addrman = AddressManagerTest()
|
|
@@ -586,3 +664,98 @@ class TestPeerManager:
|
|
|
586
664
|
await addrman.attempt(PeerInfo(peer1.host, peer1.port), True, time.time() - 61)
|
|
587
665
|
addrman.cleanup(7 * 3600 * 24, 5)
|
|
588
666
|
assert await addrman.size() == 1
|
|
667
|
+
|
|
668
|
+
@pytest.mark.anyio
|
|
669
|
+
async def test_migration(self, tmp_path):
|
|
670
|
+
# the old serialize function
|
|
671
|
+
async def old_serialize(address_manager: AddressManager, peers_file_path: Path) -> None:
|
|
672
|
+
"""
|
|
673
|
+
Serialize the address manager's peer data to a file.
|
|
674
|
+
"""
|
|
675
|
+
metadata: list[tuple[str, str]] = []
|
|
676
|
+
nodes: list[tuple[int, ExtendedPeerInfo]] = []
|
|
677
|
+
new_table_entries: list[tuple[int, int]] = []
|
|
678
|
+
unique_ids: dict[int, int] = {}
|
|
679
|
+
count_ids: int = 0
|
|
680
|
+
|
|
681
|
+
metadata.append(("key", str(address_manager.key)))
|
|
682
|
+
|
|
683
|
+
for node_id, info in address_manager.map_info.items():
|
|
684
|
+
unique_ids[node_id] = count_ids
|
|
685
|
+
if info.ref_count > 0:
|
|
686
|
+
assert count_ids != address_manager.new_count
|
|
687
|
+
nodes.append((count_ids, info))
|
|
688
|
+
count_ids += 1
|
|
689
|
+
metadata.append(("new_count", str(count_ids)))
|
|
690
|
+
|
|
691
|
+
tried_ids = 0
|
|
692
|
+
for node_id, info in address_manager.map_info.items():
|
|
693
|
+
if info.is_tried:
|
|
694
|
+
assert info is not None
|
|
695
|
+
assert tried_ids != address_manager.tried_count
|
|
696
|
+
nodes.append((count_ids, info))
|
|
697
|
+
count_ids += 1
|
|
698
|
+
tried_ids += 1
|
|
699
|
+
metadata.append(("tried_count", str(tried_ids)))
|
|
700
|
+
|
|
701
|
+
for bucket in range(NEW_BUCKET_COUNT):
|
|
702
|
+
for i in range(BUCKET_SIZE):
|
|
703
|
+
if address_manager.new_matrix[bucket][i] != -1:
|
|
704
|
+
index = unique_ids[address_manager.new_matrix[bucket][i]]
|
|
705
|
+
new_table_entries.append((index, bucket))
|
|
706
|
+
|
|
707
|
+
# Ensure the parent directory exists
|
|
708
|
+
peers_file_path.parent.mkdir(parents=True, exist_ok=True)
|
|
709
|
+
|
|
710
|
+
transformed_nodes: list[tuple[uint64, str]] = []
|
|
711
|
+
transformed_new_table: list[tuple[uint64, uint64]] = []
|
|
712
|
+
|
|
713
|
+
# these lines used to be in another function that was only called as part of the serialization
|
|
714
|
+
# I've inlined them here for clarity
|
|
715
|
+
|
|
716
|
+
for index, [node_id, peer_info] in enumerate(nodes):
|
|
717
|
+
transformed_nodes.append((uint64(node_id), peer_info.to_string()))
|
|
718
|
+
|
|
719
|
+
for index, [node_id, bucket_id] in enumerate(new_table_entries):
|
|
720
|
+
transformed_new_table.append((uint64(node_id), uint64(bucket_id)))
|
|
721
|
+
|
|
722
|
+
# this was also previously its own function, now inlined
|
|
723
|
+
serialized_bytes: bytes = bytes(PeerDataSerialization(metadata, transformed_nodes, transformed_new_table))
|
|
724
|
+
await write_file_async(peers_file_path, serialized_bytes, file_mode=0o644)
|
|
725
|
+
|
|
726
|
+
# create a file with the old serialization, then migrate to new serialization
|
|
727
|
+
addrman = AddressManagerTest()
|
|
728
|
+
now = int(math.floor(time.time()))
|
|
729
|
+
t_peer1 = TimestampedPeerInfo("250.7.1.1", uint16(8333), uint64(now - 10000))
|
|
730
|
+
t_peer2 = TimestampedPeerInfo("1050:0000:0000:0000:0005:0600:300c:326b", uint16(9999), uint64(now - 20000))
|
|
731
|
+
t_peer3 = TimestampedPeerInfo("250.7.3.3", uint16(9999), uint64(now - 30000))
|
|
732
|
+
source = PeerInfo("252.5.1.1", uint16(8333))
|
|
733
|
+
await addrman.add_to_new_table([t_peer1, t_peer2, t_peer3], source)
|
|
734
|
+
await addrman.mark_good(PeerInfo("250.7.1.1", uint16(8333)))
|
|
735
|
+
|
|
736
|
+
peers_dat_filename = tmp_path / "peers.dat"
|
|
737
|
+
with contextlib.suppress(FileNotFoundError):
|
|
738
|
+
peers_dat_filename.unlink()
|
|
739
|
+
# Write out the serialized peer data in the old format
|
|
740
|
+
await old_serialize(addrman, peers_dat_filename)
|
|
741
|
+
|
|
742
|
+
# Load the old serialization
|
|
743
|
+
addrman2 = await AddressManager.create_address_manager(peers_dat_filename)
|
|
744
|
+
wanted_peers = [
|
|
745
|
+
ExtendedPeerInfo(t_peer1, source),
|
|
746
|
+
ExtendedPeerInfo(t_peer2, source),
|
|
747
|
+
ExtendedPeerInfo(t_peer3, source),
|
|
748
|
+
]
|
|
749
|
+
assert await self.check_retrieved_peers(wanted_peers, addrman2)
|
|
750
|
+
|
|
751
|
+
# Delete the old serialization
|
|
752
|
+
peers_dat_filename = tmp_path / "peers.dat"
|
|
753
|
+
if peers_dat_filename.exists():
|
|
754
|
+
peers_dat_filename.unlink()
|
|
755
|
+
|
|
756
|
+
# Create the new serialization (this would happen automatically through scheduled task)
|
|
757
|
+
serialised_bytes = addrman.serialize_bytes()
|
|
758
|
+
await write_file_async(peers_dat_filename, serialised_bytes, file_mode=0o644)
|
|
759
|
+
# Load and check the new serialization
|
|
760
|
+
addrman3 = await AddressManager.create_address_manager(peers_dat_filename)
|
|
761
|
+
assert await self.check_retrieved_peers(wanted_peers, addrman3)
|
|
@@ -6,12 +6,12 @@ from pathlib import Path
|
|
|
6
6
|
from typing import Optional
|
|
7
7
|
|
|
8
8
|
import pytest
|
|
9
|
+
from chia_rs import SubEpochSummary
|
|
9
10
|
from chia_rs.sized_bytes import bytes32
|
|
10
11
|
from chia_rs.sized_ints import uint8, uint32
|
|
11
12
|
|
|
12
13
|
from chia._tests.util.db_connection import DBConnection
|
|
13
14
|
from chia.full_node.block_height_map import BlockHeightMap, SesCache
|
|
14
|
-
from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
|
|
15
15
|
from chia.util.db_wrapper import DBWrapper2
|
|
16
16
|
from chia.util.files import write_file_async
|
|
17
17
|
|
|
@@ -511,7 +511,7 @@ class TestBlockHeightMap:
|
|
|
511
511
|
assert len(new_heights) == 4000 * 32
|
|
512
512
|
# pytest doesn't behave very well comparing large buffers
|
|
513
513
|
# (when the test fails). Compare small portions at a time instead
|
|
514
|
-
for idx in range(
|
|
514
|
+
for idx in range(2000):
|
|
515
515
|
assert new_heights[idx * 32 : idx * 32 + 32] == gen_block_hash(idx)
|
|
516
516
|
|
|
517
517
|
|
|
@@ -9,14 +9,14 @@ import logging
|
|
|
9
9
|
from typing import Optional
|
|
10
10
|
|
|
11
11
|
import pytest
|
|
12
|
-
from chia_rs import AugSchemeMPL, G2Element
|
|
12
|
+
from chia_rs import AugSchemeMPL, FullBlock, G2Element, SpendBundle
|
|
13
13
|
from chia_rs.sized_ints import uint32, uint64
|
|
14
|
-
from clvm.casts import int_to_bytes
|
|
15
14
|
from clvm_tools.binutils import assemble
|
|
16
15
|
|
|
17
16
|
from chia._tests.blockchain.blockchain_test_utils import _validate_and_add_block
|
|
18
17
|
from chia._tests.conftest import ConsensusMode
|
|
19
18
|
from chia._tests.core.full_node.ram_db import create_ram_blockchain
|
|
19
|
+
from chia.consensus.condition_tools import agg_sig_additional_data
|
|
20
20
|
from chia.simulator.block_tools import BlockTools
|
|
21
21
|
from chia.simulator.keyring import TempKeyring
|
|
22
22
|
from chia.types.blockchain_format.program import Program
|
|
@@ -24,9 +24,7 @@ from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
|
24
24
|
from chia.types.coin_record import CoinRecord
|
|
25
25
|
from chia.types.coin_spend import make_spend
|
|
26
26
|
from chia.types.condition_opcodes import ConditionOpcode
|
|
27
|
-
from chia.
|
|
28
|
-
from chia.types.spend_bundle import SpendBundle
|
|
29
|
-
from chia.util.condition_tools import agg_sig_additional_data
|
|
27
|
+
from chia.util.casts import int_to_bytes
|
|
30
28
|
from chia.util.errors import Err
|
|
31
29
|
from chia.wallet.conditions import AssertCoinAnnouncement, AssertPuzzleAnnouncement
|
|
32
30
|
|
|
@@ -106,7 +104,7 @@ async def check_conditions(
|
|
|
106
104
|
blocks = await initial_blocks(bt)
|
|
107
105
|
coin = blocks[spend_reward_index].get_included_reward_coins()[0]
|
|
108
106
|
|
|
109
|
-
coin_spend = make_spend(coin, EASY_PUZZLE,
|
|
107
|
+
coin_spend = make_spend(coin, EASY_PUZZLE, condition_solution)
|
|
110
108
|
spend_bundle = SpendBundle([coin_spend], aggsig)
|
|
111
109
|
|
|
112
110
|
# now let's try to create a block with the spend bundle and ensure that it doesn't validate
|
|
@@ -358,6 +356,9 @@ class TestConditions:
|
|
|
358
356
|
("", "(66 0x3f {msg} {coin})", "(67 0x3f {msg} {coin})", 513, Err.TOO_MANY_ANNOUNCEMENTS),
|
|
359
357
|
],
|
|
360
358
|
)
|
|
359
|
+
@pytest.mark.limit_consensus_modes(
|
|
360
|
+
allowed=[ConsensusMode.HARD_FORK_2_0], reason="announce conditions limit was removed in hard-fork 3.0"
|
|
361
|
+
)
|
|
361
362
|
async def test_announce_conditions_limit(
|
|
362
363
|
self,
|
|
363
364
|
consensus_mode: ConsensusMode,
|