chia-blockchain 2.5.4rc1__py3-none-any.whl → 2.5.5rc1__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 +305 -184
- 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 +32 -42
- 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 +273 -0
- chia/wallet/conditions.py +5 -10
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -4
- chia/wallet/derivation_record.py +33 -0
- chia/wallet/derive_keys.py +3 -3
- chia/wallet/did_wallet/did_info.py +12 -3
- chia/wallet/did_wallet/did_wallet.py +132 -101
- chia/wallet/did_wallet/did_wallet_puzzles.py +9 -9
- chia/wallet/driver_protocol.py +3 -1
- chia/{types/spend_bundle.py → wallet/estimate_fees.py} +2 -7
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
- chia/wallet/nft_wallet/nft_wallet.py +69 -112
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +6 -4
- chia/wallet/nft_wallet/transfer_program_puzzle.py +4 -2
- chia/wallet/nft_wallet/uncurry_nft.py +4 -6
- chia/wallet/notification_manager.py +2 -3
- chia/wallet/outer_puzzles.py +7 -2
- chia/wallet/puzzle_drivers.py +1 -1
- chia/wallet/puzzles/clawback/drivers.py +5 -4
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -1
- chia/wallet/puzzles/singleton_top_layer.py +2 -1
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +2 -1
- chia/wallet/puzzles/tails.py +1 -3
- chia/wallet/signer_protocol.py +5 -6
- chia/wallet/singleton.py +5 -4
- chia/wallet/singleton_record.py +1 -1
- chia/wallet/trade_manager.py +18 -20
- chia/wallet/trade_record.py +3 -6
- chia/wallet/trading/offer.py +12 -13
- chia/wallet/uncurried_puzzle.py +2 -2
- chia/wallet/util/compute_additions.py +58 -0
- chia/wallet/util/compute_hints.py +3 -3
- chia/wallet/util/compute_memos.py +4 -4
- chia/wallet/util/curry_and_treehash.py +2 -1
- chia/wallet/util/debug_spend_bundle.py +1 -1
- chia/wallet/util/merkle_tree.py +1 -1
- chia/wallet/util/peer_request_cache.py +1 -2
- chia/wallet/util/tx_config.py +3 -8
- chia/wallet/util/wallet_sync_utils.py +10 -5
- chia/wallet/util/wallet_types.py +1 -0
- chia/wallet/vc_wallet/cr_cat_drivers.py +17 -18
- chia/wallet/vc_wallet/cr_cat_wallet.py +30 -28
- chia/wallet/vc_wallet/cr_outer_puzzle.py +5 -3
- chia/wallet/vc_wallet/vc_drivers.py +50 -8
- chia/wallet/vc_wallet/vc_store.py +3 -5
- chia/wallet/vc_wallet/vc_wallet.py +15 -22
- chia/wallet/wallet.py +36 -46
- chia/wallet/wallet_action_scope.py +73 -4
- chia/wallet/wallet_blockchain.py +1 -3
- chia/wallet/wallet_interested_store.py +1 -1
- chia/wallet/wallet_nft_store.py +3 -3
- chia/wallet/wallet_node.py +17 -16
- chia/wallet/wallet_node_api.py +4 -5
- chia/wallet/wallet_pool_store.py +1 -1
- chia/wallet/wallet_protocol.py +2 -0
- chia/wallet/wallet_puzzle_store.py +1 -1
- chia/{rpc → wallet}/wallet_request_types.py +670 -81
- chia/{rpc → wallet}/wallet_rpc_api.py +735 -766
- chia/{rpc → wallet}/wallet_rpc_client.py +268 -420
- chia/wallet/wallet_singleton_store.py +8 -7
- chia/wallet/wallet_spend_bundle.py +4 -3
- chia/wallet/wallet_state_manager.py +320 -191
- chia/wallet/wallet_weight_proof_handler.py +1 -2
- chia/wallet/wsm_apis.py +98 -0
- {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5rc1.dist-info}/METADATA +7 -7
- {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5rc1.dist-info}/RECORD +443 -436
- mozilla-ca/cacert.pem +3 -165
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +0 -145
- chia/cmds/dev.py +0 -18
- chia/types/blockchain_format/slots.py +0 -9
- chia/types/blockchain_format/sub_epoch_summary.py +0 -5
- chia/types/end_of_slot_bundle.py +0 -5
- chia/types/full_block.py +0 -5
- chia/types/header_block.py +0 -5
- chia/types/spend_bundle_conditions.py +0 -7
- chia/types/transaction_queue_entry.py +0 -56
- chia/types/unfinished_block.py +0 -5
- /chia/cmds/{installers.py → dev/installers.py} +0 -0
- /chia/cmds/{sim.py → dev/sim.py} +0 -0
- /chia/{util → cmds}/dump_keyring.py +0 -0
- /chia/{full_node → consensus}/signage_point.py +0 -0
- /chia/{rpc → data_layer}/data_layer_rpc_client.py +0 -0
- /chia/{rpc → farmer}/farmer_rpc_api.py +0 -0
- /chia/{util → full_node}/full_block_utils.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_api.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_client.py +0 -0
- /chia/{full_node → protocols}/fee_estimate.py +0 -0
- /chia/{server → protocols}/outbound_message.py +0 -0
- /chia/{rpc → seeder}/crawler_rpc_api.py +0 -0
- /chia/{util → simulator}/vdf_prover.py +0 -0
- /chia/{util → ssl}/ssl_check.py +0 -0
- /chia/{rpc → timelord}/timelord_rpc_api.py +0 -0
- {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5rc1.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5rc1.dist-info}/entry_points.txt +0 -0
|
@@ -11,6 +11,7 @@ from chia_rs.sized_bytes import bytes32
|
|
|
11
11
|
|
|
12
12
|
from chia._tests.util.benchmarks import rand_g1, rand_hash
|
|
13
13
|
from chia.pools.pool_wallet import PoolWallet
|
|
14
|
+
from chia.wallet.wallet_action_scope import WalletActionScope
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
@dataclass
|
|
@@ -54,6 +55,14 @@ class MockPoolWalletInfo:
|
|
|
54
55
|
current: MockPoolState
|
|
55
56
|
|
|
56
57
|
|
|
58
|
+
@dataclass
|
|
59
|
+
class MockActionScope:
|
|
60
|
+
payout_instructions_ph: bytes32
|
|
61
|
+
|
|
62
|
+
async def get_puzzle_hash(self, wallet_state_manager: Any) -> bytes32:
|
|
63
|
+
return self.payout_instructions_ph
|
|
64
|
+
|
|
65
|
+
|
|
57
66
|
@pytest.mark.anyio
|
|
58
67
|
async def test_update_pool_config_new_config(monkeypatch: Any) -> None:
|
|
59
68
|
"""
|
|
@@ -108,7 +117,7 @@ async def test_update_pool_config_new_config(monkeypatch: Any) -> None:
|
|
|
108
117
|
wallet_id=MagicMock(),
|
|
109
118
|
)
|
|
110
119
|
|
|
111
|
-
await wallet.update_pool_config()
|
|
120
|
+
await wallet.update_pool_config(cast(WalletActionScope, MockActionScope(payout_instructions_ph)))
|
|
112
121
|
|
|
113
122
|
assert len(updated_configs) == 1
|
|
114
123
|
assert updated_configs[0].launcher_id == launcher_id
|
|
@@ -191,7 +200,7 @@ async def test_update_pool_config_existing_payout_instructions(monkeypatch: Any)
|
|
|
191
200
|
wallet_id=MagicMock(),
|
|
192
201
|
)
|
|
193
202
|
|
|
194
|
-
await wallet.update_pool_config()
|
|
203
|
+
await wallet.update_pool_config(MagicMock())
|
|
195
204
|
|
|
196
205
|
assert len(updated_configs) == 1
|
|
197
206
|
assert updated_configs[0].launcher_id == launcher_id
|
|
@@ -5,6 +5,7 @@ from dataclasses import dataclass, field
|
|
|
5
5
|
from typing import Optional
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
|
+
from chia_rs import CoinSpend
|
|
8
9
|
from chia_rs.sized_bytes import bytes32
|
|
9
10
|
from chia_rs.sized_ints import uint32, uint64
|
|
10
11
|
from clvm_tools import binutils
|
|
@@ -12,8 +13,8 @@ from clvm_tools import binutils
|
|
|
12
13
|
from chia._tests.util.db_connection import DBConnection
|
|
13
14
|
from chia.types.blockchain_format.coin import Coin
|
|
14
15
|
from chia.types.blockchain_format.program import Program
|
|
15
|
-
from chia.types.
|
|
16
|
-
from chia.
|
|
16
|
+
from chia.types.coin_spend import make_spend
|
|
17
|
+
from chia.wallet.util.compute_additions import compute_additions
|
|
17
18
|
from chia.wallet.wallet_pool_store import WalletPoolStore
|
|
18
19
|
|
|
19
20
|
|
|
@@ -30,8 +31,8 @@ def make_child_solution(
|
|
|
30
31
|
new_coin = compute_additions(coin_spend)[0]
|
|
31
32
|
sol: CoinSpend = make_spend(
|
|
32
33
|
new_coin,
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
puzzle_prog,
|
|
35
|
+
solution_prog,
|
|
35
36
|
)
|
|
36
37
|
return sol
|
|
37
38
|
|
|
@@ -9,9 +9,9 @@ import pytest
|
|
|
9
9
|
from chia_rs.sized_ints import uint16
|
|
10
10
|
|
|
11
11
|
from chia._tests.util.misc import Marks, RecordingWebServer, datacases
|
|
12
|
+
from chia.protocols.outbound_message import NodeType
|
|
12
13
|
from chia.rpc.rpc_client import ResponseFailureError, RpcClient
|
|
13
14
|
from chia.rpc.rpc_server import RpcServer
|
|
14
|
-
from chia.server.outbound_message import NodeType
|
|
15
15
|
|
|
16
16
|
non_fetch_client_methods = {
|
|
17
17
|
RpcClient.create,
|
|
@@ -10,6 +10,7 @@ import dns.rdatatype
|
|
|
10
10
|
import dns.rdtypes.IN.A
|
|
11
11
|
import dns.rdtypes.IN.AAAA
|
|
12
12
|
import pytest
|
|
13
|
+
from chia_rs import BlockRecord
|
|
13
14
|
from chia_rs.sized_bytes import bytes32
|
|
14
15
|
from chia_rs.sized_ints import uint8, uint16, uint32, uint64
|
|
15
16
|
|
|
@@ -17,12 +18,11 @@ from chia._tests.core.node_height import node_height_at_least
|
|
|
17
18
|
from chia._tests.util.setup_nodes import FullSystem, OldSimulatorsAndWallets
|
|
18
19
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
19
20
|
from chia.cmds.units import units
|
|
20
|
-
from chia.consensus.block_record import BlockRecord
|
|
21
21
|
from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
|
|
22
22
|
from chia.daemon.server import WebSocketServer
|
|
23
23
|
from chia.full_node.full_node import FullNode
|
|
24
24
|
from chia.full_node.full_node_api import FullNodeAPI
|
|
25
|
-
from chia.
|
|
25
|
+
from chia.protocols.outbound_message import NodeType
|
|
26
26
|
from chia.server.server import ChiaServer
|
|
27
27
|
from chia.simulator.block_tools import BlockTools, create_block_tools_async, test_constants
|
|
28
28
|
from chia.simulator.full_node_simulator import FullNodeSimulator
|
|
@@ -43,10 +43,11 @@ test_constants_modified = test_constants.replace(
|
|
|
43
43
|
WEIGHT_PROOF_THRESHOLD=uint8(2),
|
|
44
44
|
WEIGHT_PROOF_RECENT_BLOCKS=uint32(350),
|
|
45
45
|
MAX_SUB_SLOT_BLOCKS=uint32(50),
|
|
46
|
-
NUM_SPS_SUB_SLOT=
|
|
46
|
+
NUM_SPS_SUB_SLOT=uint8(32), # Must be a power of 2
|
|
47
47
|
EPOCH_BLOCKS=uint32(280),
|
|
48
48
|
SUB_SLOT_ITERS_STARTING=uint64(2**20),
|
|
49
|
-
|
|
49
|
+
NUMBER_ZERO_BITS_PLOT_FILTER_V1=uint8(5),
|
|
50
|
+
NUMBER_ZERO_BITS_PLOT_FILTER_V2=uint8(5),
|
|
50
51
|
)
|
|
51
52
|
|
|
52
53
|
|
|
@@ -211,7 +212,9 @@ class TestSimulation:
|
|
|
211
212
|
wallet_node, server_2 = wallets[0]
|
|
212
213
|
wallet_node_2, _server_3 = wallets[1]
|
|
213
214
|
wallet = wallet_node.wallet_state_manager.main_wallet
|
|
214
|
-
|
|
215
|
+
wallet_2 = wallet_node_2.wallet_state_manager.main_wallet
|
|
216
|
+
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
217
|
+
ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
215
218
|
wallet_node.config["trusted_peers"] = {}
|
|
216
219
|
wallet_node_2.config["trusted_peers"] = {}
|
|
217
220
|
|
|
@@ -227,10 +230,12 @@ class TestSimulation:
|
|
|
227
230
|
|
|
228
231
|
await time_out_assert(10, wallet.get_confirmed_balance, funds)
|
|
229
232
|
await time_out_assert(5, wallet.get_unconfirmed_balance, funds)
|
|
233
|
+
async with wallet_2.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
234
|
+
ph_2 = await action_scope.get_puzzle_hash(wallet_2.wallet_state_manager)
|
|
230
235
|
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
231
236
|
await wallet.generate_signed_transaction(
|
|
232
237
|
[uint64(10)],
|
|
233
|
-
[
|
|
238
|
+
[ph_2],
|
|
234
239
|
action_scope,
|
|
235
240
|
uint64(0),
|
|
236
241
|
)
|
|
@@ -406,7 +411,7 @@ class TestSimulation:
|
|
|
406
411
|
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
407
412
|
await wallet.generate_signed_transaction(
|
|
408
413
|
amounts=[uint64(tx_amount)],
|
|
409
|
-
puzzle_hashes=[await
|
|
414
|
+
puzzle_hashes=[await action_scope.get_puzzle_hash(wallet.wallet_state_manager)],
|
|
410
415
|
action_scope=action_scope,
|
|
411
416
|
coins={coin},
|
|
412
417
|
)
|
|
@@ -455,7 +460,7 @@ class TestSimulation:
|
|
|
455
460
|
for coin in coins:
|
|
456
461
|
await wallet.generate_signed_transaction(
|
|
457
462
|
amounts=[uint64(tx_amount)],
|
|
458
|
-
puzzle_hashes=[await
|
|
463
|
+
puzzle_hashes=[await action_scope.get_puzzle_hash(wallet.wallet_state_manager)],
|
|
459
464
|
action_scope=action_scope,
|
|
460
465
|
coins={coin},
|
|
461
466
|
)
|
|
@@ -128,7 +128,7 @@ async def test_wait_transaction_records_entered_mempool(
|
|
|
128
128
|
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
129
129
|
await wallet.generate_signed_transaction(
|
|
130
130
|
amounts=[uint64(tx_amount)],
|
|
131
|
-
puzzle_hashes=[await
|
|
131
|
+
puzzle_hashes=[await action_scope.get_puzzle_hash(wallet.wallet_state_manager)],
|
|
132
132
|
action_scope=action_scope,
|
|
133
133
|
coins={coin},
|
|
134
134
|
)
|
|
@@ -164,7 +164,7 @@ async def test_process_transaction_records(
|
|
|
164
164
|
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
165
165
|
await wallet.generate_signed_transaction(
|
|
166
166
|
amounts=[uint64(tx_amount)],
|
|
167
|
-
puzzle_hashes=[await
|
|
167
|
+
puzzle_hashes=[await action_scope.get_puzzle_hash(wallet.wallet_state_manager)],
|
|
168
168
|
action_scope=action_scope,
|
|
169
169
|
coins={coin},
|
|
170
170
|
)
|
|
@@ -3,65 +3,94 @@ from __future__ import annotations
|
|
|
3
3
|
from typing import Optional
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
|
+
from chia_rs import BlockRecord, FullBlock, SubEpochSummary, UnfinishedBlock
|
|
6
7
|
from chia_rs.sized_bytes import bytes32
|
|
7
|
-
from chia_rs.sized_ints import uint128
|
|
8
|
+
from chia_rs.sized_ints import uint64, uint128
|
|
8
9
|
|
|
9
10
|
from chia._tests.blockchain.blockchain_test_utils import _validate_and_add_block
|
|
10
11
|
from chia._tests.util.blockchain import create_blockchain
|
|
11
12
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
12
|
-
from chia.consensus.block_record import BlockRecord
|
|
13
13
|
from chia.consensus.blockchain import Blockchain
|
|
14
14
|
from chia.consensus.difficulty_adjustment import get_next_sub_slot_iters_and_difficulty
|
|
15
15
|
from chia.consensus.make_sub_epoch_summary import next_sub_epoch_summary
|
|
16
16
|
from chia.protocols import timelord_protocol
|
|
17
|
+
from chia.server.aliases import FullNodeService
|
|
17
18
|
from chia.server.server import ChiaServer
|
|
18
19
|
from chia.simulator.block_tools import BlockTools
|
|
19
20
|
from chia.simulator.full_node_simulator import FullNodeSimulator
|
|
21
|
+
from chia.simulator.wallet_tools import WalletTool
|
|
20
22
|
from chia.timelord.timelord_api import TimelordAPI
|
|
21
|
-
from chia.types.aliases import FullNodeService
|
|
22
|
-
from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
|
|
23
|
-
from chia.types.full_block import FullBlock
|
|
24
|
-
from chia.types.unfinished_block import UnfinishedBlock
|
|
25
23
|
|
|
26
24
|
|
|
27
25
|
class TestNewPeak:
|
|
28
26
|
@pytest.mark.anyio
|
|
29
27
|
async def test_timelord_new_peak_basic(
|
|
30
|
-
self,
|
|
28
|
+
self,
|
|
29
|
+
timelord: tuple[TimelordAPI, ChiaServer],
|
|
30
|
+
default_1000_blocks: list[FullBlock],
|
|
31
|
+
one_node: tuple[list[FullNodeService], list[FullNodeSimulator], BlockTools],
|
|
31
32
|
) -> None:
|
|
33
|
+
[full_node_service], _, bt = one_node
|
|
34
|
+
full_node = full_node_service._node
|
|
32
35
|
async with create_blockchain(bt.constants, 2) as (b1, _):
|
|
33
36
|
async with create_blockchain(bt.constants, 2) as (b2, _):
|
|
34
37
|
timelord_api, _ = timelord
|
|
35
38
|
for block in default_1000_blocks:
|
|
36
39
|
await _validate_and_add_block(b1, block)
|
|
37
40
|
await _validate_and_add_block(b2, block)
|
|
41
|
+
await full_node.add_block(block)
|
|
38
42
|
|
|
39
43
|
peak = timelord_peak_from_block(b1, default_1000_blocks[-1])
|
|
40
44
|
assert peak is not None
|
|
41
45
|
assert timelord_api.timelord.new_peak is None
|
|
42
46
|
await timelord_api.new_peak_timelord(peak)
|
|
43
|
-
|
|
44
|
-
assert timelord_api.timelord.
|
|
47
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
48
|
+
assert timelord_api.timelord.last_state.peak is not None
|
|
49
|
+
assert (
|
|
50
|
+
timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
|
|
51
|
+
== peak.reward_chain_block.get_hash()
|
|
52
|
+
)
|
|
45
53
|
blocks = bt.get_consecutive_blocks(1, default_1000_blocks)
|
|
46
54
|
await _validate_and_add_block(b1, blocks[-1])
|
|
47
55
|
await _validate_and_add_block(b2, blocks[-1])
|
|
48
56
|
|
|
49
57
|
await timelord_api.new_peak_timelord(timelord_peak_from_block(b1, blocks[-1]))
|
|
50
|
-
|
|
58
|
+
await full_node.add_block(blocks[-1])
|
|
59
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
60
|
+
assert timelord_api.timelord.last_state.peak is not None
|
|
61
|
+
assert (
|
|
62
|
+
timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
|
|
63
|
+
== blocks[-1].reward_chain_block.get_hash()
|
|
64
|
+
)
|
|
65
|
+
fn_peak = full_node.blockchain.get_peak()
|
|
66
|
+
assert fn_peak is not None and fn_peak.header_hash == blocks[-1].header_hash
|
|
51
67
|
|
|
52
68
|
blocks_1 = bt.get_consecutive_blocks(2, blocks)
|
|
53
69
|
await _validate_and_add_block(b1, blocks_1[-2])
|
|
54
70
|
await _validate_and_add_block(b1, blocks_1[-1])
|
|
55
71
|
await timelord_api.new_peak_timelord(timelord_peak_from_block(b1, blocks_1[-2]))
|
|
72
|
+
await full_node.add_block(blocks_1[-2])
|
|
56
73
|
await timelord_api.new_peak_timelord(timelord_peak_from_block(b1, blocks_1[-1]))
|
|
57
|
-
|
|
74
|
+
await full_node.add_block(blocks_1[-1])
|
|
75
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
76
|
+
assert timelord_api.timelord.last_state.peak is not None
|
|
77
|
+
assert (
|
|
78
|
+
timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
|
|
79
|
+
== blocks_1[-1].reward_chain_block.get_hash()
|
|
80
|
+
)
|
|
81
|
+
fn_peak = full_node.blockchain.get_peak()
|
|
82
|
+
assert fn_peak is not None and fn_peak.header_hash == blocks_1[-1].header_hash
|
|
58
83
|
|
|
59
84
|
# new unknown peak, weight less then curr peak
|
|
60
85
|
blocks_2 = bt.get_consecutive_blocks(1, blocks)
|
|
61
86
|
await _validate_and_add_block(b2, blocks_2[-1])
|
|
62
87
|
await timelord_api.new_peak_timelord(timelord_peak_from_block(b2, blocks_2[-1]))
|
|
88
|
+
await full_node.add_block(blocks_2[-1])
|
|
89
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
63
90
|
assert timelord_api.timelord.last_state.last_weight == blocks_1[-1].weight
|
|
64
91
|
assert timelord_api.timelord.last_state.total_iters == blocks_1[-1].reward_chain_block.total_iters
|
|
92
|
+
fn_peak = full_node.blockchain.get_peak()
|
|
93
|
+
assert fn_peak is not None and fn_peak.header_hash == blocks_1[-1].header_hash
|
|
65
94
|
|
|
66
95
|
@pytest.mark.anyio
|
|
67
96
|
async def test_timelord_new_peak_unfinished_not_orphaned(
|
|
@@ -87,14 +116,11 @@ class TestNewPeak:
|
|
|
87
116
|
await _validate_and_add_block(b1, block_2)
|
|
88
117
|
|
|
89
118
|
block_record = b1.block_record(block_2.header_hash)
|
|
90
|
-
sub_slot_iters, difficulty = get_next_sub_slot_iters_and_difficulty(
|
|
91
|
-
bt.constants, len(block_1.finished_sub_slots) > 0, b1.block_record(block_1.prev_header_hash), b1
|
|
92
|
-
)
|
|
93
119
|
|
|
94
120
|
timelord_unf_block = timelord_protocol.NewUnfinishedBlockTimelord(
|
|
95
121
|
block_1.reward_chain_block.get_unfinished(),
|
|
96
|
-
|
|
97
|
-
sub_slot_iters,
|
|
122
|
+
uint64(block_record.weight - default_1000_blocks[-1].weight),
|
|
123
|
+
block_record.sub_slot_iters,
|
|
98
124
|
block_1.foliage,
|
|
99
125
|
next_sub_epoch_summary(bt.constants, b1, block_record.required_iters, block_1, True),
|
|
100
126
|
await get_rc_prev(b1, block_1),
|
|
@@ -106,7 +132,7 @@ class TestNewPeak:
|
|
|
106
132
|
assert timelord_unf_block.reward_chain_block.total_iters <= new_peak.reward_chain_block.total_iters
|
|
107
133
|
await timelord_api.new_peak_timelord(new_peak)
|
|
108
134
|
|
|
109
|
-
await time_out_assert(60,
|
|
135
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
110
136
|
|
|
111
137
|
assert (
|
|
112
138
|
timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
|
|
@@ -135,8 +161,11 @@ class TestNewPeak:
|
|
|
135
161
|
assert timelord_api.timelord.new_peak is None
|
|
136
162
|
await timelord_api.new_peak_timelord(peak)
|
|
137
163
|
assert timelord_api.timelord.new_peak is not None
|
|
164
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
165
|
+
assert timelord_api.timelord.last_state.peak is not None
|
|
138
166
|
assert (
|
|
139
|
-
timelord_api.timelord.
|
|
167
|
+
timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
|
|
168
|
+
== peak.reward_chain_block.get_hash()
|
|
140
169
|
)
|
|
141
170
|
|
|
142
171
|
# make two new blocks on tip, block_2 has higher total iterations
|
|
@@ -154,17 +183,11 @@ class TestNewPeak:
|
|
|
154
183
|
await _validate_and_add_block(b2, block_2)
|
|
155
184
|
|
|
156
185
|
block_record_1 = b1.block_record(block_1.header_hash)
|
|
157
|
-
sub_slot_iters, difficulty = get_next_sub_slot_iters_and_difficulty(
|
|
158
|
-
bt.constants,
|
|
159
|
-
len(block_1.finished_sub_slots) > 0,
|
|
160
|
-
b1.block_record(block_1.prev_header_hash),
|
|
161
|
-
b1,
|
|
162
|
-
)
|
|
163
186
|
|
|
164
187
|
timelord_unf_block = timelord_protocol.NewUnfinishedBlockTimelord(
|
|
165
188
|
block_1.reward_chain_block.get_unfinished(),
|
|
166
|
-
|
|
167
|
-
sub_slot_iters,
|
|
189
|
+
uint64(block_record_1.weight - default_1000_blocks[-1].weight),
|
|
190
|
+
block_record_1.sub_slot_iters,
|
|
168
191
|
block_1.foliage,
|
|
169
192
|
next_sub_epoch_summary(bt.constants, b1, block_record_1.required_iters, block_1, True),
|
|
170
193
|
await get_rc_prev(b1, block_1),
|
|
@@ -177,7 +200,7 @@ class TestNewPeak:
|
|
|
177
200
|
# add block_2 peak and make sure we skip it and prefer to finish block_1
|
|
178
201
|
assert timelord_unf_block.reward_chain_block.total_iters <= new_peak.reward_chain_block.total_iters
|
|
179
202
|
await timelord_api.new_peak_timelord(new_peak)
|
|
180
|
-
await time_out_assert(60,
|
|
203
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
181
204
|
|
|
182
205
|
# check that peak did not change
|
|
183
206
|
assert (
|
|
@@ -238,15 +261,22 @@ class TestNewPeak:
|
|
|
238
261
|
assert peak is not None
|
|
239
262
|
assert timelord_api.timelord.new_peak is None
|
|
240
263
|
await timelord_api.new_peak_timelord(peak)
|
|
241
|
-
|
|
264
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
265
|
+
assert timelord_api.timelord.last_state.peak is not None
|
|
242
266
|
assert (
|
|
243
|
-
timelord_api.timelord.
|
|
267
|
+
timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
|
|
268
|
+
== peak.reward_chain_block.get_hash()
|
|
244
269
|
)
|
|
245
270
|
|
|
246
271
|
# make two new blocks on tip
|
|
247
272
|
block_1 = bt.get_consecutive_blocks(1, default_1000_blocks, time_per_block=9, force_overflow=True)[-1]
|
|
248
273
|
block_2 = bt.get_consecutive_blocks(
|
|
249
|
-
1,
|
|
274
|
+
1,
|
|
275
|
+
default_1000_blocks,
|
|
276
|
+
seed=b"data",
|
|
277
|
+
time_per_block=50,
|
|
278
|
+
skip_slots=1,
|
|
279
|
+
min_signage_point=block_1.reward_chain_block.signage_point_index,
|
|
250
280
|
)[-1]
|
|
251
281
|
# make sure block_2 has higher iterations
|
|
252
282
|
assert block_2.total_iters >= block_1.total_iters
|
|
@@ -275,9 +305,10 @@ class TestNewPeak:
|
|
|
275
305
|
assert timelord_api.timelord.overflow_blocks[-1].get_hash() == timelord_unf_block.get_hash()
|
|
276
306
|
new_peak = timelord_peak_from_block(b2, block_2)
|
|
277
307
|
assert timelord_unf_block.reward_chain_block.total_iters <= new_peak.reward_chain_block.total_iters
|
|
308
|
+
assert block_1.reward_chain_block.get_hash() != new_peak.reward_chain_block.get_hash()
|
|
278
309
|
await timelord_api.new_peak_timelord(new_peak)
|
|
279
310
|
|
|
280
|
-
await time_out_assert(60,
|
|
311
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
281
312
|
|
|
282
313
|
assert (
|
|
283
314
|
timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
|
|
@@ -286,22 +317,30 @@ class TestNewPeak:
|
|
|
286
317
|
|
|
287
318
|
@pytest.mark.anyio
|
|
288
319
|
async def test_timelord_new_peak_unfinished_eos(
|
|
289
|
-
self,
|
|
320
|
+
self,
|
|
321
|
+
one_node: tuple[list[FullNodeService], list[FullNodeSimulator], BlockTools],
|
|
322
|
+
timelord: tuple[TimelordAPI, ChiaServer],
|
|
323
|
+
default_1000_blocks: list[FullBlock],
|
|
290
324
|
) -> None:
|
|
325
|
+
[full_node_service], _, bt = one_node
|
|
326
|
+
full_node = full_node_service._node
|
|
291
327
|
async with create_blockchain(bt.constants, 2) as (b1, _):
|
|
292
328
|
async with create_blockchain(bt.constants, 2) as (b2, _):
|
|
293
329
|
timelord_api, _ = timelord
|
|
294
330
|
for block in default_1000_blocks:
|
|
295
331
|
await _validate_and_add_block(b1, block)
|
|
296
332
|
await _validate_and_add_block(b2, block)
|
|
333
|
+
await full_node.add_block(block)
|
|
297
334
|
|
|
298
335
|
peak = timelord_peak_from_block(b1, default_1000_blocks[-1])
|
|
299
336
|
assert peak is not None
|
|
300
337
|
assert timelord_api.timelord.new_peak is None
|
|
301
338
|
await timelord_api.new_peak_timelord(peak)
|
|
302
|
-
|
|
339
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
340
|
+
assert timelord_api.timelord.last_state.peak is not None
|
|
303
341
|
assert (
|
|
304
|
-
timelord_api.timelord.
|
|
342
|
+
timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
|
|
343
|
+
== peak.reward_chain_block.get_hash()
|
|
305
344
|
)
|
|
306
345
|
|
|
307
346
|
# make two new blocks on tip, block_2 is in a new slot
|
|
@@ -315,19 +354,15 @@ class TestNewPeak:
|
|
|
315
354
|
|
|
316
355
|
await _validate_and_add_block(b1, block_1)
|
|
317
356
|
await _validate_and_add_block(b2, block_2)
|
|
357
|
+
await full_node.add_block(block_2)
|
|
358
|
+
fn_peak = full_node.blockchain.get_peak()
|
|
359
|
+
assert fn_peak is not None and fn_peak.header_hash == block_2.header_hash
|
|
318
360
|
|
|
319
361
|
block_record = b2.block_record(block_2.header_hash)
|
|
320
|
-
sub_slot_iters, difficulty = get_next_sub_slot_iters_and_difficulty(
|
|
321
|
-
bt.constants,
|
|
322
|
-
len(block_2.finished_sub_slots) > 0,
|
|
323
|
-
b1.block_record(block_2.prev_header_hash),
|
|
324
|
-
b1,
|
|
325
|
-
)
|
|
326
|
-
|
|
327
362
|
timelord_unf_block = timelord_protocol.NewUnfinishedBlockTimelord(
|
|
328
363
|
block_2.reward_chain_block.get_unfinished(),
|
|
329
|
-
|
|
330
|
-
sub_slot_iters,
|
|
364
|
+
uint64(block_record.weight - default_1000_blocks[-1].weight),
|
|
365
|
+
block_record.sub_slot_iters,
|
|
331
366
|
block_2.foliage,
|
|
332
367
|
next_sub_epoch_summary(bt.constants, b1, block_record.required_iters, block_2, True),
|
|
333
368
|
await get_rc_prev(b2, block_2),
|
|
@@ -340,7 +375,8 @@ class TestNewPeak:
|
|
|
340
375
|
new_peak = timelord_peak_from_block(b1, block_1)
|
|
341
376
|
assert timelord_unf_block.reward_chain_block.total_iters >= new_peak.reward_chain_block.total_iters
|
|
342
377
|
await timelord_api.new_peak_timelord(new_peak)
|
|
343
|
-
await
|
|
378
|
+
await full_node.add_block(block_1)
|
|
379
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
344
380
|
|
|
345
381
|
# make sure we switch to lower iteration peak
|
|
346
382
|
assert (
|
|
@@ -348,6 +384,9 @@ class TestNewPeak:
|
|
|
348
384
|
== new_peak.reward_chain_block.get_hash()
|
|
349
385
|
)
|
|
350
386
|
|
|
387
|
+
fn_peak = full_node.blockchain.get_peak()
|
|
388
|
+
assert fn_peak is not None and fn_peak.header_hash == block_1.header_hash
|
|
389
|
+
|
|
351
390
|
@pytest.mark.anyio
|
|
352
391
|
async def test_timelord_new_peak_node_sync(
|
|
353
392
|
self,
|
|
@@ -373,7 +412,7 @@ class TestNewPeak:
|
|
|
373
412
|
assert (
|
|
374
413
|
timelord_api.timelord.new_peak.reward_chain_block.get_hash() == peak.reward_chain_block.get_hash()
|
|
375
414
|
)
|
|
376
|
-
await time_out_assert(60,
|
|
415
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
377
416
|
# make two new blocks on tip, block_2 has higher total iterations
|
|
378
417
|
block_1 = bt.get_consecutive_blocks(1, default_1000_blocks)[-1]
|
|
379
418
|
block_2 = bt.get_consecutive_blocks(
|
|
@@ -394,7 +433,7 @@ class TestNewPeak:
|
|
|
394
433
|
assert timelord_api.timelord.new_peak is not None
|
|
395
434
|
assert peak.header_hash == block_2.header_hash
|
|
396
435
|
assert peak_tl.reward_chain_block.get_hash() == peak.reward_chain_block.get_hash()
|
|
397
|
-
await time_out_assert(60,
|
|
436
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
398
437
|
|
|
399
438
|
await full_node.add_block(block_1)
|
|
400
439
|
await _validate_and_add_block(b1, block_1)
|
|
@@ -406,6 +445,111 @@ class TestNewPeak:
|
|
|
406
445
|
peak_tl = timelord_api.timelord.new_peak
|
|
407
446
|
assert peak_tl.reward_chain_block.get_hash() == peak.reward_chain_block.get_hash()
|
|
408
447
|
|
|
448
|
+
@pytest.mark.anyio
|
|
449
|
+
@pytest.mark.parametrize("different_foliage", [False, True])
|
|
450
|
+
async def test_timelord_new_peak_is_in_unfinished_cache(
|
|
451
|
+
self,
|
|
452
|
+
one_node: tuple[list[FullNodeService], list[FullNodeSimulator], BlockTools],
|
|
453
|
+
timelord: tuple[TimelordAPI, ChiaServer],
|
|
454
|
+
default_1000_blocks: list[FullBlock],
|
|
455
|
+
different_foliage: bool,
|
|
456
|
+
) -> None:
|
|
457
|
+
_, _, bt = one_node
|
|
458
|
+
wallet = WalletTool(bt.constants)
|
|
459
|
+
coinbase_puzzlehash = wallet.get_new_puzzlehash()
|
|
460
|
+
timelord_api, _ = timelord
|
|
461
|
+
blocks = bt.get_consecutive_blocks(
|
|
462
|
+
num_blocks=10,
|
|
463
|
+
block_list_input=default_1000_blocks,
|
|
464
|
+
skip_overflow=True,
|
|
465
|
+
force_overflow=False,
|
|
466
|
+
farmer_reward_puzzle_hash=coinbase_puzzlehash,
|
|
467
|
+
guarantee_transaction_block=True,
|
|
468
|
+
)
|
|
469
|
+
async with create_blockchain(bt.constants, 2) as (b1, _):
|
|
470
|
+
for block in blocks:
|
|
471
|
+
await _validate_and_add_block(b1, block)
|
|
472
|
+
|
|
473
|
+
peak = timelord_peak_from_block(b1, blocks[-1])
|
|
474
|
+
assert peak is not None and timelord_api.timelord.new_peak is None
|
|
475
|
+
await timelord_api.new_peak_timelord(peak)
|
|
476
|
+
assert timelord_api.timelord.new_peak is not None
|
|
477
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
478
|
+
assert (
|
|
479
|
+
timelord_api.timelord.last_state.peak is not None
|
|
480
|
+
and timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
|
|
481
|
+
== peak.reward_chain_block.get_hash()
|
|
482
|
+
)
|
|
483
|
+
|
|
484
|
+
block_1 = bt.get_consecutive_blocks(
|
|
485
|
+
block_list_input=blocks,
|
|
486
|
+
num_blocks=1,
|
|
487
|
+
farmer_reward_puzzle_hash=coinbase_puzzlehash,
|
|
488
|
+
guarantee_transaction_block=True,
|
|
489
|
+
skip_overflow=True,
|
|
490
|
+
)[-1]
|
|
491
|
+
|
|
492
|
+
await _validate_and_add_block(b1, block_1)
|
|
493
|
+
block_record_1 = b1.block_record(block_1.header_hash)
|
|
494
|
+
if len(block_1.finished_sub_slots) > 0:
|
|
495
|
+
timelord_api.timelord.last_state.set_state(block_1.finished_sub_slots[-1])
|
|
496
|
+
|
|
497
|
+
block_1_diffrent_foliage = None
|
|
498
|
+
if not different_foliage:
|
|
499
|
+
timelord_unf_block = timelord_protocol.NewUnfinishedBlockTimelord(
|
|
500
|
+
block_1.reward_chain_block.get_unfinished(),
|
|
501
|
+
uint64(block_record_1.weight - blocks[-1].weight),
|
|
502
|
+
block_record_1.sub_slot_iters,
|
|
503
|
+
block_1.foliage,
|
|
504
|
+
next_sub_epoch_summary(bt.constants, b1, block_record_1.required_iters, block_1, True),
|
|
505
|
+
await get_rc_prev(b1, block_1),
|
|
506
|
+
)
|
|
507
|
+
else:
|
|
508
|
+
spend_coin = None
|
|
509
|
+
for coin in blocks[-8].get_included_reward_coins():
|
|
510
|
+
if coin.puzzle_hash == coinbase_puzzlehash:
|
|
511
|
+
spend_coin = coin
|
|
512
|
+
|
|
513
|
+
assert spend_coin is not None
|
|
514
|
+
sb = wallet.generate_signed_transaction(uint64(1000), bytes32(b"0" * 32), spend_coin)
|
|
515
|
+
block_1_diffrent_foliage = bt.get_consecutive_blocks(
|
|
516
|
+
block_list_input=blocks,
|
|
517
|
+
num_blocks=1,
|
|
518
|
+
farmer_reward_puzzle_hash=coinbase_puzzlehash,
|
|
519
|
+
guarantee_transaction_block=True,
|
|
520
|
+
transaction_data=sb,
|
|
521
|
+
skip_overflow=True,
|
|
522
|
+
)[-1]
|
|
523
|
+
assert block_1_diffrent_foliage.header_hash != block_1.header_hash
|
|
524
|
+
timelord_unf_block = timelord_protocol.NewUnfinishedBlockTimelord(
|
|
525
|
+
block_1_diffrent_foliage.reward_chain_block.get_unfinished(),
|
|
526
|
+
uint64(block_1_diffrent_foliage.weight - blocks[-1].weight),
|
|
527
|
+
block_record_1.sub_slot_iters,
|
|
528
|
+
block_1_diffrent_foliage.foliage,
|
|
529
|
+
next_sub_epoch_summary(bt.constants, b1, block_record_1.required_iters, block_1, True),
|
|
530
|
+
await get_rc_prev(b1, block_1),
|
|
531
|
+
)
|
|
532
|
+
|
|
533
|
+
await timelord_api.new_unfinished_block_timelord(timelord_unf_block)
|
|
534
|
+
assert timelord_api.timelord.unfinished_blocks[-1].get_hash() == timelord_unf_block.get_hash()
|
|
535
|
+
assert (
|
|
536
|
+
timelord_api.timelord.unfinished_blocks[-1].reward_chain_block.get_hash()
|
|
537
|
+
== timelord_unf_block.reward_chain_block.get_hash()
|
|
538
|
+
)
|
|
539
|
+
|
|
540
|
+
new_peak = timelord_peak_from_block(b1, block_1)
|
|
541
|
+
assert timelord_unf_block.reward_chain_block.total_iters == new_peak.reward_chain_block.total_iters
|
|
542
|
+
await timelord_api.new_peak_timelord(new_peak)
|
|
543
|
+
await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
|
|
544
|
+
|
|
545
|
+
# check that peak was not skipped
|
|
546
|
+
assert (
|
|
547
|
+
timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
|
|
548
|
+
== new_peak.reward_chain_block.get_hash()
|
|
549
|
+
)
|
|
550
|
+
# check unfinished block_1 is not in cache
|
|
551
|
+
assert len(timelord_api.timelord.unfinished_blocks) == 0
|
|
552
|
+
|
|
409
553
|
|
|
410
554
|
async def get_rc_prev(blockchain: Blockchain, block: FullBlock) -> bytes32:
|
|
411
555
|
if block.reward_chain_block.signage_point_index == 0:
|
|
@@ -491,5 +635,5 @@ def timelord_peak_from_block(
|
|
|
491
635
|
)
|
|
492
636
|
|
|
493
637
|
|
|
494
|
-
def
|
|
638
|
+
def tl_new_peak_is_none(timelord: TimelordAPI) -> bool:
|
|
495
639
|
return timelord.timelord.new_peak is None
|
|
@@ -33,7 +33,9 @@ constants = DEFAULT_CONSTANTS.replace(
|
|
|
33
33
|
"d23da14695a188ae5708dd152263c4db883eb27edeb936178d4d988b8f3ce5fc"
|
|
34
34
|
),
|
|
35
35
|
MEMPOOL_BLOCK_BUFFER=uint8(10),
|
|
36
|
-
|
|
36
|
+
MIN_PLOT_SIZE_V1=uint8(18),
|
|
37
|
+
# TODO: todo_v2_plots decide on v2 test plot k-size
|
|
38
|
+
MIN_PLOT_SIZE_V2=uint8(18),
|
|
37
39
|
)
|
|
38
40
|
retire_bytes = (
|
|
39
41
|
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
|
@@ -115,7 +115,7 @@ if __name__ == "__main__":
|
|
|
115
115
|
seeded_random = random.Random()
|
|
116
116
|
seeded_random.seed(a=0, version=2)
|
|
117
117
|
|
|
118
|
-
for i in range(
|
|
118
|
+
for i in range(1000):
|
|
119
119
|
private_key: PrivateKey = master_sk_to_wallet_sk(secret_key, uint32(i))
|
|
120
120
|
public_key = private_key.get_g1()
|
|
121
121
|
solution = wallet_tool.make_solution(
|
|
@@ -134,7 +134,7 @@ if __name__ == "__main__":
|
|
|
134
134
|
# Run Puzzle 1000 times
|
|
135
135
|
puzzle_start = time.time()
|
|
136
136
|
clvm_cost = 0
|
|
137
|
-
for i in range(
|
|
137
|
+
for i in range(1000):
|
|
138
138
|
cost_run, _ = puzzles[i].run_with_cost(INFINITE_COST, solutions[i])
|
|
139
139
|
clvm_cost += cost_run
|
|
140
140
|
|
|
@@ -152,7 +152,7 @@ if __name__ == "__main__":
|
|
|
152
152
|
# Run AggSig 1000 times
|
|
153
153
|
agg_sig_start = time.time()
|
|
154
154
|
agg_sig_cost = 0
|
|
155
|
-
for i in range(
|
|
155
|
+
for i in range(1000):
|
|
156
156
|
valid = AugSchemeMPL.verify(public_key, message, signature)
|
|
157
157
|
assert valid
|
|
158
158
|
agg_sig_cost += 20
|