chia-blockchain 2.5.4rc2__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 +26 -40
- chia/full_node/subscriptions.py +1 -3
- chia/full_node/tx_processing_queue.py +50 -3
- chia/full_node/weight_proof.py +46 -37
- chia/harvester/harvester.py +1 -1
- chia/harvester/harvester_api.py +22 -7
- chia/introducer/introducer.py +1 -1
- chia/introducer/introducer_api.py +1 -1
- chia/plot_sync/exceptions.py +1 -1
- chia/plot_sync/receiver.py +1 -1
- chia/plot_sync/sender.py +2 -2
- chia/pools/pool_puzzles.py +13 -18
- chia/pools/pool_wallet.py +23 -46
- chia/protocols/farmer_protocol.py +11 -3
- chia/protocols/full_node_protocol.py +1 -4
- chia/protocols/harvester_protocol.py +3 -3
- chia/protocols/pool_protocol.py +1 -2
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +1 -3
- chia/protocols/wallet_protocol.py +3 -3
- chia/rpc/rpc_client.py +7 -8
- chia/rpc/rpc_server.py +3 -3
- chia/rpc/util.py +3 -1
- chia/seeder/crawler.py +1 -1
- chia/seeder/crawler_api.py +1 -1
- chia/seeder/dns_server.py +2 -0
- chia/seeder/start_crawler.py +3 -3
- chia/server/address_manager.py +286 -38
- chia/server/address_manager_store.py +0 -215
- chia/{types → server}/aliases.py +7 -7
- chia/server/api_protocol.py +1 -1
- chia/server/chia_policy.py +1 -1
- chia/server/node_discovery.py +76 -113
- chia/server/rate_limits.py +1 -1
- chia/server/resolve_peer_info.py +43 -0
- chia/server/server.py +5 -5
- chia/server/start_data_layer.py +4 -4
- chia/server/start_farmer.py +5 -4
- chia/server/start_full_node.py +5 -4
- chia/server/start_harvester.py +7 -5
- chia/server/start_introducer.py +2 -2
- chia/server/start_service.py +1 -1
- chia/server/start_timelord.py +7 -5
- chia/server/start_wallet.py +7 -5
- chia/server/ws_connection.py +1 -1
- chia/simulator/add_blocks_in_batches.py +2 -2
- chia/simulator/block_tools.py +245 -201
- chia/simulator/full_node_simulator.py +38 -10
- chia/simulator/setup_services.py +12 -12
- chia/simulator/simulator_full_node_rpc_api.py +2 -2
- chia/simulator/simulator_full_node_rpc_client.py +2 -2
- chia/simulator/simulator_test_tools.py +2 -2
- chia/simulator/start_simulator.py +1 -1
- chia/simulator/wallet_tools.py +10 -18
- chia/ssl/create_ssl.py +1 -1
- chia/timelord/iters_from_block.py +14 -14
- chia/timelord/timelord.py +15 -11
- chia/timelord/timelord_api.py +14 -2
- chia/timelord/timelord_state.py +20 -14
- chia/types/blockchain_format/program.py +53 -10
- chia/types/blockchain_format/proof_of_space.py +73 -19
- chia/types/coin_spend.py +3 -56
- chia/types/generator_types.py +28 -0
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +12 -7
- chia/types/unfinished_header_block.py +1 -2
- chia/types/validation_state.py +1 -2
- chia/types/weight_proof.py +1 -3
- chia/util/action_scope.py +3 -3
- chia/util/block_cache.py +1 -2
- chia/util/byte_types.py +1 -1
- chia/util/casts.py +21 -0
- chia/util/config.py +0 -37
- chia/util/db_wrapper.py +8 -1
- chia/util/errors.py +3 -2
- chia/util/initial-config.yaml +21 -5
- chia/util/keychain.py +6 -7
- chia/util/keyring_wrapper.py +5 -5
- chia/util/limited_semaphore.py +1 -1
- chia/util/priority_mutex.py +1 -1
- chia/util/streamable.py +63 -5
- chia/util/task_timing.py +1 -1
- chia/util/virtual_project_analysis.py +1 -1
- chia/wallet/cat_wallet/cat_info.py +7 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +9 -5
- chia/wallet/cat_wallet/cat_utils.py +1 -1
- chia/wallet/cat_wallet/cat_wallet.py +44 -36
- chia/wallet/cat_wallet/lineage_store.py +7 -0
- chia/wallet/cat_wallet/r_cat_wallet.py +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.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/METADATA +7 -7
- {chia_blockchain-2.5.4rc2.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.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/entry_points.txt +0 -0
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import pytest
|
|
4
|
+
from chia_rs import Program as SerializedProgram
|
|
5
|
+
from chia_rs import SpendBundleConditions, SpendConditions
|
|
3
6
|
from chia_rs.sized_bytes import bytes32
|
|
4
7
|
from chia_rs.sized_ints import uint32, uint64
|
|
5
8
|
|
|
9
|
+
from chia.consensus.generator_tools import tx_removals_and_additions
|
|
10
|
+
from chia.full_node.mempool_check_conditions import get_spends_for_block, get_spends_for_block_with_conditions
|
|
11
|
+
from chia.simulator.block_tools import test_constants
|
|
6
12
|
from chia.types.blockchain_format.coin import Coin
|
|
7
|
-
from chia.types.
|
|
8
|
-
from chia.util.generator_tools import tx_removals_and_additions
|
|
13
|
+
from chia.types.generator_types import BlockGenerator
|
|
9
14
|
from chia.util.hash import std_hash
|
|
10
15
|
|
|
11
16
|
coin_ids = [std_hash(i.to_bytes(4, "big")) for i in range(10)]
|
|
@@ -36,6 +41,8 @@ spends: list[SpendConditions] = [
|
|
|
36
41
|
[],
|
|
37
42
|
[],
|
|
38
43
|
0,
|
|
44
|
+
execution_cost=0,
|
|
45
|
+
condition_cost=0,
|
|
39
46
|
),
|
|
40
47
|
SpendConditions(
|
|
41
48
|
coin_ids[1],
|
|
@@ -61,6 +68,8 @@ spends: list[SpendConditions] = [
|
|
|
61
68
|
[],
|
|
62
69
|
[],
|
|
63
70
|
0,
|
|
71
|
+
execution_cost=0,
|
|
72
|
+
condition_cost=0,
|
|
64
73
|
),
|
|
65
74
|
]
|
|
66
75
|
|
|
@@ -81,3 +90,24 @@ def test_tx_removals_and_additions() -> None:
|
|
|
81
90
|
|
|
82
91
|
def test_empty_conditions() -> None:
|
|
83
92
|
assert tx_removals_and_additions(None) == ([], [])
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
# this is a malicious generator which should fail
|
|
96
|
+
TEST_GENERATOR = BlockGenerator(
|
|
97
|
+
SerializedProgram.fromhex(
|
|
98
|
+
"ff02ffff01ff02ffff01ff04ffff04ffff04ffff01a00101010101010101010101010101010101010101010101010101010101010101ffff04ffff04ffff0101ffff02ff02ffff04ff02ffff04ff05ffff04ff0bffff04ff17ff80808080808080ffff01ff7bffff80ffff018080808080ff8080ff8080ffff04ffff01ff02ffff03ff17ffff01ff04ff05ffff04ff0bffff02ff02ffff04ff02ffff04ff05ffff04ff0bffff04ffff11ff17ffff010180ff8080808080808080ff8080ff0180ff018080ffff04ffff01ff42ff24ff8568656c6c6fffa0010101010101010101010101010101010101010101010101010101010101010180ffff04ffff01ff43ff24ff8568656c6c6fffa0010101010101010101010101010101010101010101010101010101010101010180ffff04ffff01830f4240ff0180808080"
|
|
99
|
+
),
|
|
100
|
+
[],
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def test_get_spends_for_block(caplog: pytest.LogCaptureFixture) -> None:
|
|
105
|
+
conditions = get_spends_for_block(TEST_GENERATOR, 100, test_constants)
|
|
106
|
+
assert conditions == []
|
|
107
|
+
assert "get_spends_for_block() encountered a puzzle we couldn't serialize: " in caplog.text
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def test_get_spends_for_block_with_conditions(caplog: pytest.LogCaptureFixture) -> None:
|
|
111
|
+
conditions = get_spends_for_block_with_conditions(TEST_GENERATOR, 100, test_constants)
|
|
112
|
+
assert conditions == []
|
|
113
|
+
assert "get_spends_for_block_with_conditions() encountered a puzzle we couldn't serialize: " in caplog.text
|
|
@@ -3,11 +3,11 @@ from __future__ import annotations
|
|
|
3
3
|
from typing import Optional
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
|
+
from chia_rs import BlockRecord
|
|
6
7
|
from chia_rs.sized_bytes import bytes32
|
|
7
8
|
from chia_rs.sized_ints import uint32, uint64
|
|
8
9
|
|
|
9
10
|
from chia._tests.blockchain.blockchain_test_utils import _validate_and_add_block
|
|
10
|
-
from chia.consensus.block_record import BlockRecord
|
|
11
11
|
from chia.consensus.blockchain import Blockchain, StateChangeSummary
|
|
12
12
|
from chia.full_node.hint_management import get_hints_and_subscription_coin_ids
|
|
13
13
|
from chia.simulator.block_tools import BlockTools
|
|
@@ -8,27 +8,26 @@ from chia._tests.util.time_out_assert import time_out_assert
|
|
|
8
8
|
from chia.types.peer_info import PeerInfo
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
)
|
|
11
|
+
@pytest.mark.anyio
|
|
12
|
+
async def test_blocks_load(two_nodes, self_hostname, benchmark_runner: BenchmarkRunner):
|
|
13
|
+
num_blocks = 50
|
|
14
|
+
full_node_1, full_node_2, server_1, server_2, bt = two_nodes
|
|
15
|
+
blocks = bt.get_consecutive_blocks(num_blocks)
|
|
16
|
+
await full_node_1.full_node.add_block(blocks[0])
|
|
17
|
+
await time_out_assert(10, node_height_at_least, True, full_node_1, 0)
|
|
18
|
+
await server_2.start_client(
|
|
19
|
+
PeerInfo(self_hostname, server_1.get_port()), on_connect=full_node_2.full_node.on_connect
|
|
20
|
+
)
|
|
22
21
|
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
async def num_connections():
|
|
23
|
+
return len(server_2.get_connections())
|
|
25
24
|
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
await time_out_assert(10, num_connections, 1)
|
|
26
|
+
await time_out_assert(10, node_height_at_least, True, full_node_2, 0)
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
with benchmark_runner.assert_runtime(seconds=100) as runtime_results_future:
|
|
29
|
+
for i in range(1, num_blocks):
|
|
30
|
+
await full_node_1.full_node.add_block(blocks[i])
|
|
31
|
+
await full_node_2.full_node.add_block(blocks[i])
|
|
32
|
+
runtime_results = runtime_results_future.result(timeout=0)
|
|
33
|
+
print(f"Time taken to process {num_blocks} is {runtime_results.duration}")
|
|
@@ -4,20 +4,19 @@ import logging
|
|
|
4
4
|
import random
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
|
+
from chia_rs import BlockRecord, UnfinishedBlock
|
|
7
8
|
from chia_rs.sized_ints import uint64
|
|
8
|
-
from clvm.casts import int_to_bytes
|
|
9
9
|
|
|
10
10
|
from chia._tests.connection_utils import add_dummy_connection
|
|
11
11
|
from chia._tests.core.full_node.stores.test_coin_store import get_future_reward_coins
|
|
12
12
|
from chia._tests.core.node_height import node_height_at_least
|
|
13
13
|
from chia._tests.util.misc import BenchmarkRunner
|
|
14
14
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
15
|
-
from chia.consensus.block_record import BlockRecord
|
|
16
15
|
from chia.consensus.pot_iterations import is_overflow_block
|
|
17
16
|
from chia.protocols import full_node_protocol as fnp
|
|
18
17
|
from chia.types.condition_opcodes import ConditionOpcode
|
|
19
18
|
from chia.types.condition_with_args import ConditionWithArgs
|
|
20
|
-
from chia.
|
|
19
|
+
from chia.util.casts import int_to_bytes
|
|
21
20
|
|
|
22
21
|
log = logging.getLogger(__name__)
|
|
23
22
|
|
|
@@ -123,7 +122,7 @@ class TestPerformance:
|
|
|
123
122
|
curr: BlockRecord = peak
|
|
124
123
|
while not curr.is_transaction_block:
|
|
125
124
|
curr = full_node_1.full_node.blockchain.block_record(curr.prev_hash)
|
|
126
|
-
mempool_bundle =
|
|
125
|
+
mempool_bundle = full_node_1.full_node.mempool_manager.create_bundle_from_mempool(curr.header_hash)
|
|
127
126
|
if mempool_bundle is None:
|
|
128
127
|
spend_bundle = None
|
|
129
128
|
else:
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from chia_rs.sized_ints import uint32
|
|
4
|
+
|
|
5
|
+
from chia.consensus.generator_tools import get_block_header
|
|
6
|
+
from chia.consensus.get_block_challenge import prev_tx_block
|
|
7
|
+
from chia.simulator.block_tools import BlockTools, load_block_list
|
|
8
|
+
from chia.util.block_cache import BlockCache
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def test_prev_tx_block_none() -> None:
|
|
12
|
+
# If prev_b is None, should return 0
|
|
13
|
+
assert prev_tx_block(BlockCache({}), None) == uint32(0)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def test_prev_tx_block_blockrecord_tx(bt: BlockTools) -> None:
|
|
17
|
+
# If prev_b is BlockRecord and prev_transaction_block_hash is not None, return its height
|
|
18
|
+
block_list = bt.get_consecutive_blocks(
|
|
19
|
+
10,
|
|
20
|
+
block_list_input=[],
|
|
21
|
+
guarantee_transaction_block=True,
|
|
22
|
+
)
|
|
23
|
+
_, _, blocks = load_block_list(block_list, bt.constants)
|
|
24
|
+
assert prev_tx_block(BlockCache(blocks), block_list[-1]) == uint32(9)
|
|
25
|
+
assert prev_tx_block(BlockCache(blocks), blocks[block_list[-1].header_hash]) == uint32(9)
|
|
26
|
+
assert prev_tx_block(BlockCache(blocks), get_block_header(block_list[-1])) == uint32(9)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_prev_tx_block_blockrecord_not_tx(bt: BlockTools) -> None:
|
|
30
|
+
# If prev_b is BlockRecord and prev_transaction_block_hash is not None, return its height
|
|
31
|
+
block_list = bt.get_consecutive_blocks(
|
|
32
|
+
8,
|
|
33
|
+
block_list_input=[],
|
|
34
|
+
guarantee_transaction_block=True,
|
|
35
|
+
)
|
|
36
|
+
block_list = bt.get_consecutive_blocks(
|
|
37
|
+
2,
|
|
38
|
+
block_list_input=block_list,
|
|
39
|
+
)
|
|
40
|
+
_, _, blocks = load_block_list(block_list, bt.constants)
|
|
41
|
+
assert prev_tx_block(BlockCache(blocks), block_list[-1]) == uint32(7)
|
|
42
|
+
assert prev_tx_block(BlockCache(blocks), blocks[block_list[-1].header_hash]) == uint32(7)
|
|
43
|
+
assert prev_tx_block(BlockCache(blocks), get_block_header(block_list[-1])) == uint32(7)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from chia_rs import AugSchemeMPL, Coin, CoinSpend, G2Element, Program
|
|
3
|
+
from chia_rs import AugSchemeMPL, Coin, CoinSpend, G2Element, Program, SpendBundle
|
|
4
4
|
from chia_rs.sized_bytes import bytes32
|
|
5
5
|
from chia_rs.sized_ints import uint32, uint64
|
|
6
6
|
|
|
@@ -9,7 +9,6 @@ from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
|
9
9
|
from chia.full_node.bundle_tools import simple_solution_generator
|
|
10
10
|
from chia.full_node.subscriptions import PeerSubscriptions, peers_for_spend_bundle
|
|
11
11
|
from chia.types.blockchain_format.program import INFINITE_COST
|
|
12
|
-
from chia.types.spend_bundle import SpendBundle
|
|
13
12
|
|
|
14
13
|
IDENTITY_PUZZLE = Program.to(1)
|
|
15
14
|
IDENTITY_PUZZLE_HASH = IDENTITY_PUZZLE.get_tree_hash()
|
|
@@ -5,11 +5,11 @@ import random
|
|
|
5
5
|
from typing import Optional
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
|
+
from chia_rs import BlockRecord
|
|
8
9
|
from chia_rs.sized_bytes import bytes32
|
|
9
10
|
from chia_rs.sized_ints import uint32
|
|
10
11
|
|
|
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.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
|
|
14
14
|
from chia.full_node.full_node_api import FullNodeAPI
|
|
15
15
|
from chia.simulator.simulator_protocol import FarmNewBlockProtocol
|
|
@@ -25,7 +25,8 @@ async def test_wallet_coinbase(simulator_and_wallet, self_hostname):
|
|
|
25
25
|
full_node_server = full_node_api.server
|
|
26
26
|
wallet_node, server_2 = wallets[0]
|
|
27
27
|
wallet = wallet_node.wallet_state_manager.main_wallet
|
|
28
|
-
|
|
28
|
+
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
29
|
+
ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
29
30
|
|
|
30
31
|
await server_2.start_client(PeerInfo(self_hostname, full_node_server.get_port()), None)
|
|
31
32
|
for i in range(num_blocks):
|
|
@@ -54,8 +55,10 @@ async def test_tx_propagation(three_nodes_two_wallets, self_hostname, seeded_ran
|
|
|
54
55
|
full_node_api_2 = full_nodes[2]
|
|
55
56
|
server_2 = full_node_api_2.server
|
|
56
57
|
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
59
|
+
ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
|
|
60
|
+
async with wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
61
|
+
ph1 = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
|
|
59
62
|
|
|
60
63
|
#
|
|
61
64
|
# wallet0 <-> sever0 <-> server1 <-> server2 <-> wallet1
|
|
@@ -134,7 +137,8 @@ async def test_mempool_tx_sync(three_nodes_two_wallets, self_hostname, seeded_ra
|
|
|
134
137
|
full_node_api_2 = full_nodes[2]
|
|
135
138
|
server_2 = full_node_api_2.server
|
|
136
139
|
|
|
137
|
-
|
|
140
|
+
async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
141
|
+
ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
|
|
138
142
|
|
|
139
143
|
# wallet0 <-> sever0 <-> server1
|
|
140
144
|
|
|
@@ -9,8 +9,7 @@ from typing import Optional, cast
|
|
|
9
9
|
import pytest
|
|
10
10
|
from chia_rs.sized_bytes import bytes32
|
|
11
11
|
|
|
12
|
-
from chia.full_node.tx_processing_queue import TransactionQueue, TransactionQueueFull
|
|
13
|
-
from chia.types.transaction_queue_entry import TransactionQueueEntry
|
|
12
|
+
from chia.full_node.tx_processing_queue import TransactionQueue, TransactionQueueEntry, TransactionQueueFull
|
|
14
13
|
from chia.util.task_referencer import create_referenced_task
|
|
15
14
|
|
|
16
15
|
log = logging.getLogger(__name__)
|
chia/_tests/core/large_block.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from chia_rs import G1Element, G2Element, PrivateKey
|
|
3
|
+
from chia_rs import G1Element, G2Element, PrivateKey, SpendBundle
|
|
4
4
|
from chia_rs.sized_bytes import bytes32
|
|
5
5
|
from chia_rs.sized_ints import uint64
|
|
6
6
|
|
|
@@ -11,7 +11,6 @@ from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
|
11
11
|
from chia.types.coin_spend import make_spend
|
|
12
12
|
from chia.types.condition_opcodes import ConditionOpcode
|
|
13
13
|
from chia.types.generator_types import BlockGenerator
|
|
14
|
-
from chia.types.spend_bundle import SpendBundle
|
|
15
14
|
from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import puzzle_for_pk, solution_for_conditions
|
|
16
15
|
|
|
17
16
|
GROUP_ORDER = 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001
|
|
@@ -25,7 +24,7 @@ def int_to_public_key(index: int) -> G1Element:
|
|
|
25
24
|
|
|
26
25
|
def puzzle_hash_for_index(index: int, puzzle_hash_db: dict[bytes32, SerializedProgram]) -> bytes32:
|
|
27
26
|
public_key: G1Element = int_to_public_key(index)
|
|
28
|
-
puzzle =
|
|
27
|
+
puzzle = puzzle_for_pk(public_key).to_serialized()
|
|
29
28
|
puzzle_hash: bytes32 = puzzle.get_tree_hash()
|
|
30
29
|
puzzle_hash_db[puzzle_hash] = puzzle
|
|
31
30
|
return puzzle_hash
|
|
@@ -57,7 +56,7 @@ def make_spend_bundle(count: int) -> SpendBundle:
|
|
|
57
56
|
for coin in coins:
|
|
58
57
|
puzzle_reveal = puzzle_hash_db[coin.puzzle_hash]
|
|
59
58
|
conditions = conditions_for_payment(coin)
|
|
60
|
-
solution =
|
|
59
|
+
solution = solution_for_conditions(conditions).to_serialized()
|
|
61
60
|
coin_spend = make_spend(coin, puzzle_reveal, solution)
|
|
62
61
|
coin_spends.append(coin_spend)
|
|
63
62
|
|
|
@@ -7,18 +7,18 @@ from typing import Callable, Optional
|
|
|
7
7
|
|
|
8
8
|
import pytest
|
|
9
9
|
from chia_rs import (
|
|
10
|
-
ELIGIBLE_FOR_FF,
|
|
11
|
-
ENABLE_KECCAK,
|
|
12
10
|
ENABLE_KECCAK_OPS_OUTSIDE_GUARD,
|
|
13
11
|
AugSchemeMPL,
|
|
12
|
+
CoinSpend,
|
|
13
|
+
FullBlock,
|
|
14
14
|
G1Element,
|
|
15
15
|
G2Element,
|
|
16
|
-
|
|
16
|
+
SpendBundle,
|
|
17
|
+
SpendBundleConditions,
|
|
17
18
|
run_block_generator2,
|
|
18
19
|
)
|
|
19
20
|
from chia_rs.sized_bytes import bytes32
|
|
20
21
|
from chia_rs.sized_ints import uint32, uint64
|
|
21
|
-
from clvm.casts import int_to_bytes
|
|
22
22
|
from clvm_tools import binutils
|
|
23
23
|
from clvm_tools.binutils import assemble
|
|
24
24
|
|
|
@@ -42,6 +42,7 @@ from chia.consensus.condition_costs import ConditionCost
|
|
|
42
42
|
from chia.consensus.cost_calculator import NPCResult
|
|
43
43
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
44
44
|
from chia.full_node.bitcoin_fee_estimator import create_bitcoin_fee_estimator
|
|
45
|
+
from chia.full_node.eligible_coin_spends import run_for_cost
|
|
45
46
|
from chia.full_node.fee_estimation import EmptyMempoolInfo, MempoolInfo
|
|
46
47
|
from chia.full_node.full_node_api import FullNodeAPI
|
|
47
48
|
from chia.full_node.mempool import Mempool
|
|
@@ -49,9 +50,9 @@ from chia.full_node.mempool_check_conditions import get_puzzle_and_solution_for_
|
|
|
49
50
|
from chia.full_node.mempool_manager import MEMPOOL_MIN_FEE_INCREASE, LineageInfoCache
|
|
50
51
|
from chia.full_node.pending_tx_cache import ConflictTxCache, PendingTxCache
|
|
51
52
|
from chia.protocols import full_node_protocol, wallet_protocol
|
|
53
|
+
from chia.protocols.outbound_message import Message
|
|
52
54
|
from chia.protocols.wallet_protocol import TransactionAck
|
|
53
55
|
from chia.server.api_protocol import ApiMetadata
|
|
54
|
-
from chia.server.outbound_message import Message
|
|
55
56
|
from chia.server.server import ChiaServer
|
|
56
57
|
from chia.server.ws_connection import WSChiaConnection
|
|
57
58
|
from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
|
|
@@ -63,21 +64,19 @@ from chia.types.blockchain_format.coin import Coin
|
|
|
63
64
|
from chia.types.blockchain_format.program import Program
|
|
64
65
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
65
66
|
from chia.types.clvm_cost import CLVMCost
|
|
66
|
-
from chia.types.coin_spend import
|
|
67
|
+
from chia.types.coin_spend import make_spend
|
|
67
68
|
from chia.types.condition_opcodes import ConditionOpcode
|
|
68
69
|
from chia.types.condition_with_args import ConditionWithArgs
|
|
69
|
-
from chia.types.eligible_coin_spends import UnspentLineageInfo, run_for_cost
|
|
70
70
|
from chia.types.fee_rate import FeeRate
|
|
71
|
-
from chia.types.full_block import FullBlock
|
|
72
71
|
from chia.types.generator_types import BlockGenerator
|
|
73
72
|
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
74
|
-
from chia.types.mempool_item import MempoolItem
|
|
75
|
-
from chia.
|
|
76
|
-
from chia.types.spend_bundle_conditions import SpendBundleConditions
|
|
73
|
+
from chia.types.mempool_item import MempoolItem, UnspentLineageInfo
|
|
74
|
+
from chia.util.casts import int_to_bytes
|
|
77
75
|
from chia.util.errors import Err
|
|
78
76
|
from chia.util.hash import std_hash
|
|
79
77
|
from chia.util.recursive_replace import recursive_replace
|
|
80
78
|
from chia.wallet.conditions import AssertCoinAnnouncement, AssertPuzzleAnnouncement
|
|
79
|
+
from chia.wallet.estimate_fees import estimate_fees
|
|
81
80
|
|
|
82
81
|
BURN_PUZZLE_HASH = bytes32(b"0" * 32)
|
|
83
82
|
BURN_PUZZLE_HASH_2 = bytes32(b"1" * 32)
|
|
@@ -1153,7 +1152,7 @@ class TestMempoolManager:
|
|
|
1153
1152
|
assert sb1 is None
|
|
1154
1153
|
assert status == MempoolInclusionStatus.FAILED
|
|
1155
1154
|
|
|
1156
|
-
for i in range(
|
|
1155
|
+
for i in range(4):
|
|
1157
1156
|
await full_node_1.farm_new_transaction_block(FarmNewBlockProtocol(bytes32(32 * b"0")))
|
|
1158
1157
|
|
|
1159
1158
|
tx2: full_node_protocol.RespondTransaction = full_node_protocol.RespondTransaction(spend_bundle1)
|
|
@@ -2864,10 +2863,10 @@ class TestMaliciousGenerators:
|
|
|
2864
2863
|
c = cs.coin
|
|
2865
2864
|
coin_0 = Coin(c.parent_coin_info, bytes32([1] * 32), c.amount)
|
|
2866
2865
|
coin_spend_0 = make_spend(coin_0, cs.puzzle_reveal, cs.solution)
|
|
2867
|
-
new_bundle = recursive_replace(spend_bundle, "coin_spends", [coin_spend_0
|
|
2866
|
+
new_bundle = recursive_replace(spend_bundle, "coin_spends", [coin_spend_0, *spend_bundle.coin_spends[1:]])
|
|
2868
2867
|
assert spend_bundle is not None
|
|
2869
2868
|
res = await full_node_1.full_node.add_transaction(new_bundle, new_bundle.name(), test=True)
|
|
2870
|
-
assert res == (MempoolInclusionStatus.FAILED, Err.
|
|
2869
|
+
assert res == (MempoolInclusionStatus.FAILED, Err.WRONG_PUZZLE_HASH)
|
|
2871
2870
|
|
|
2872
2871
|
|
|
2873
2872
|
coins = make_test_coins()
|
|
@@ -2932,10 +2931,8 @@ def test_items_by_feerate(items: list[MempoolItem], expected: list[Coin]) -> Non
|
|
|
2932
2931
|
last_fpc = mi.fee_per_cost
|
|
2933
2932
|
|
|
2934
2933
|
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
@pytest.mark.anyio
|
|
2938
|
-
async def test_skip_error_items() -> None:
|
|
2934
|
+
@pytest.mark.parametrize("old", [True, False])
|
|
2935
|
+
def test_timeout(old: bool) -> None:
|
|
2939
2936
|
fee_estimator = create_bitcoin_fee_estimator(uint64(11000000000))
|
|
2940
2937
|
mempool_info = MempoolInfo(
|
|
2941
2938
|
CLVMCost(uint64(11000000000 * 3)),
|
|
@@ -2944,25 +2941,16 @@ async def test_skip_error_items() -> None:
|
|
|
2944
2941
|
)
|
|
2945
2942
|
mempool = Mempool(mempool_info, fee_estimator)
|
|
2946
2943
|
|
|
2947
|
-
# all 50 items support fast forward
|
|
2948
2944
|
for i in range(50):
|
|
2949
|
-
item = mk_item(coins[i : i + 1], flags=[
|
|
2945
|
+
item = mk_item(coins[i : i + 1], flags=[0], fee=0, cost=50)
|
|
2950
2946
|
add_info = mempool.add_to_pool(item)
|
|
2951
2947
|
assert add_info.error is None
|
|
2952
2948
|
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
async def local_get_unspent_lineage_info(ph: bytes32) -> Optional[UnspentLineageInfo]:
|
|
2956
|
-
nonlocal called
|
|
2957
|
-
called += 1
|
|
2958
|
-
raise RuntimeError("failed to find fast forward coin")
|
|
2959
|
-
|
|
2960
|
-
result = await mempool.create_block_generator(local_get_unspent_lineage_info, DEFAULT_CONSTANTS, uint32(10))
|
|
2961
|
-
assert result is not None
|
|
2962
|
-
generator, _, _, _ = result
|
|
2949
|
+
create_block = mempool.create_block_generator if old else mempool.create_block_generator2
|
|
2963
2950
|
|
|
2964
|
-
|
|
2965
|
-
|
|
2951
|
+
# the timeout is set to 0, we should *always* fail with a timeout
|
|
2952
|
+
generator = create_block(DEFAULT_CONSTANTS, uint32(10), 0.0)
|
|
2953
|
+
assert generator is None
|
|
2966
2954
|
|
|
2967
2955
|
|
|
2968
2956
|
def rand_hash() -> bytes32:
|
|
@@ -3146,11 +3134,7 @@ def make_test_spendbundle(coin: Coin, *, fee: int = 0, with_higher_cost: bool =
|
|
|
3146
3134
|
return sb
|
|
3147
3135
|
|
|
3148
3136
|
|
|
3149
|
-
|
|
3150
|
-
async def test_aggregating_on_a_solution_then_a_more_cost_saving_one_appears() -> None:
|
|
3151
|
-
async def get_unspent_lineage_info_for_puzzle_hash(_: bytes32) -> Optional[UnspentLineageInfo]:
|
|
3152
|
-
assert False # pragma: no cover
|
|
3153
|
-
|
|
3137
|
+
def test_aggregating_on_a_solution_then_a_more_cost_saving_one_appears() -> None:
|
|
3154
3138
|
def agg_and_add_sb_returning_cost_info(mempool: Mempool, spend_bundles: list[SpendBundle]) -> uint64:
|
|
3155
3139
|
sb = SpendBundle.aggregate(spend_bundles)
|
|
3156
3140
|
mi = mempool_item_from_spendbundle(sb)
|
|
@@ -3181,9 +3165,7 @@ async def test_aggregating_on_a_solution_then_a_more_cost_saving_one_appears() -
|
|
|
3181
3165
|
sb_low_rate = make_test_spendbundle(coins[2], fee=highest_fee // 5)
|
|
3182
3166
|
saved_cost_on_solution_A = agg_and_add_sb_returning_cost_info(mempool, [sb_A, sb_low_rate])
|
|
3183
3167
|
invariant_check_mempool(mempool)
|
|
3184
|
-
result =
|
|
3185
|
-
get_unspent_lineage_info_for_puzzle_hash, test_constants, uint32(0)
|
|
3186
|
-
)
|
|
3168
|
+
result = mempool.create_bundle_from_mempool_items(test_constants, uint32(0))
|
|
3187
3169
|
assert result is not None
|
|
3188
3170
|
agg, _ = result
|
|
3189
3171
|
# Make sure both items would be processed
|
|
@@ -3202,9 +3184,7 @@ async def test_aggregating_on_a_solution_then_a_more_cost_saving_one_appears() -
|
|
|
3202
3184
|
# If we process everything now, the 3 x ~3 FPC items get skipped because
|
|
3203
3185
|
# sb_A1 gets picked before them (~10 FPC), so from then on only sb_A2 (~2 FPC)
|
|
3204
3186
|
# would get picked
|
|
3205
|
-
result =
|
|
3206
|
-
get_unspent_lineage_info_for_puzzle_hash, test_constants, uint32(0)
|
|
3207
|
-
)
|
|
3187
|
+
result = mempool.create_bundle_from_mempool_items(test_constants, uint32(0))
|
|
3208
3188
|
assert result is not None
|
|
3209
3189
|
agg, _ = result
|
|
3210
3190
|
# The 3 items got skipped here
|
|
@@ -3221,11 +3201,8 @@ def test_get_puzzle_and_solution_for_coin_failure() -> None:
|
|
|
3221
3201
|
get_puzzle_and_solution_for_coin(BlockGenerator(SerializedProgram.to(None), []), TEST_COIN, 0, test_constants)
|
|
3222
3202
|
|
|
3223
3203
|
|
|
3224
|
-
@pytest.mark.
|
|
3225
|
-
|
|
3226
|
-
async def get_unspent_lineage_info_for_puzzle_hash(_: bytes32) -> Optional[UnspentLineageInfo]:
|
|
3227
|
-
assert False # pragma: no cover
|
|
3228
|
-
|
|
3204
|
+
@pytest.mark.parametrize("old", [True, False])
|
|
3205
|
+
def test_create_block_generator(old: bool) -> None:
|
|
3229
3206
|
mempool_info = MempoolInfo(
|
|
3230
3207
|
CLVMCost(uint64(11000000000 * 3)),
|
|
3231
3208
|
FeeRate(uint64(1000000)),
|
|
@@ -3247,21 +3224,20 @@ async def test_create_block_generator() -> None:
|
|
|
3247
3224
|
mempool.add_to_pool(mi)
|
|
3248
3225
|
invariant_check_mempool(mempool)
|
|
3249
3226
|
|
|
3250
|
-
|
|
3251
|
-
|
|
3252
|
-
generator
|
|
3253
|
-
|
|
3254
|
-
assert set(additions) == expected_additions
|
|
3227
|
+
create_block = mempool.create_block_generator if old else mempool.create_block_generator2
|
|
3228
|
+
generator = create_block(test_constants, uint32(0), 10.0)
|
|
3229
|
+
assert generator is not None
|
|
3255
3230
|
|
|
3256
|
-
assert
|
|
3257
|
-
assert
|
|
3231
|
+
assert set(generator.additions) == expected_additions
|
|
3232
|
+
assert len(generator.additions) == len(expected_additions)
|
|
3233
|
+
assert generator.signature == expected_signature
|
|
3258
3234
|
|
|
3259
3235
|
err, conds = run_block_generator2(
|
|
3260
3236
|
bytes(generator.program),
|
|
3261
3237
|
generator.generator_refs,
|
|
3262
3238
|
test_constants.MAX_BLOCK_COST_CLVM,
|
|
3263
3239
|
0,
|
|
3264
|
-
signature,
|
|
3240
|
+
generator.signature,
|
|
3265
3241
|
None,
|
|
3266
3242
|
test_constants,
|
|
3267
3243
|
)
|
|
@@ -3278,26 +3254,14 @@ async def test_create_block_generator() -> None:
|
|
|
3278
3254
|
assert Coin(spend.coin_id, add2[0], uint64(add2[1])) in expected_additions
|
|
3279
3255
|
num_additions += 1
|
|
3280
3256
|
|
|
3281
|
-
assert num_additions == len(additions)
|
|
3257
|
+
assert num_additions == len(generator.additions)
|
|
3282
3258
|
invariant_check_mempool(mempool)
|
|
3283
3259
|
|
|
3284
3260
|
|
|
3285
|
-
def test_flags_for_height() -> None:
|
|
3286
|
-
# the keccak operator is supposed to be enabled at soft-fork 6 height
|
|
3287
|
-
flags = get_flags_for_height_and_constants(DEFAULT_CONSTANTS.SOFT_FORK6_HEIGHT, DEFAULT_CONSTANTS)
|
|
3288
|
-
print(f"{flags:x}")
|
|
3289
|
-
assert (flags & ENABLE_KECCAK) != 0
|
|
3290
|
-
|
|
3291
|
-
flags = get_flags_for_height_and_constants(DEFAULT_CONSTANTS.SOFT_FORK6_HEIGHT - 1, DEFAULT_CONSTANTS)
|
|
3292
|
-
print(f"{flags:x}")
|
|
3293
|
-
assert (flags & ENABLE_KECCAK) == 0
|
|
3294
|
-
|
|
3295
|
-
|
|
3296
3261
|
def test_keccak() -> None:
|
|
3297
3262
|
# the keccak operator is 62. The assemble() function doesn't support it
|
|
3298
3263
|
# (yet)
|
|
3299
3264
|
|
|
3300
|
-
# keccak256 is available when the softfork has activated
|
|
3301
3265
|
keccak_prg = Program.to(
|
|
3302
3266
|
assemble(
|
|
3303
3267
|
"(softfork (q . 1134) (q . 1) (q a (i "
|
|
@@ -3308,11 +3272,6 @@ def test_keccak() -> None:
|
|
|
3308
3272
|
)
|
|
3309
3273
|
)
|
|
3310
3274
|
|
|
3311
|
-
cost, ret = keccak_prg.run_with_flags(1215, ENABLE_KECCAK, [])
|
|
3312
|
-
assert cost == 1215
|
|
3313
|
-
assert ret.atom == b""
|
|
3314
|
-
|
|
3315
|
-
# keccak is ignored when the softfork has not activated
|
|
3316
3275
|
cost, ret = keccak_prg.run_with_flags(1215, 0, [])
|
|
3317
3276
|
assert cost == 1215
|
|
3318
3277
|
assert ret.atom == b""
|
|
@@ -3327,12 +3286,7 @@ def test_keccak() -> None:
|
|
|
3327
3286
|
)
|
|
3328
3287
|
)
|
|
3329
3288
|
with pytest.raises(ValueError, match="clvm raise"):
|
|
3330
|
-
keccak_prg.run_with_flags(1215,
|
|
3331
|
-
|
|
3332
|
-
# keccak is ignored when the softfork has not activated
|
|
3333
|
-
cost, ret = keccak_prg.run_with_flags(1215, 0, [])
|
|
3334
|
-
assert cost == 1215
|
|
3335
|
-
assert ret.atom == b""
|
|
3289
|
+
keccak_prg.run_with_flags(1215, 0, [])
|
|
3336
3290
|
|
|
3337
3291
|
# === HARD FORK ===
|
|
3338
3292
|
# new operators *outside* the softfork guard
|
|
@@ -3346,7 +3300,7 @@ def test_keccak() -> None:
|
|
|
3346
3300
|
)
|
|
3347
3301
|
)
|
|
3348
3302
|
|
|
3349
|
-
cost, ret = keccak_prg.run_with_flags(994,
|
|
3303
|
+
cost, ret = keccak_prg.run_with_flags(994, ENABLE_KECCAK_OPS_OUTSIDE_GUARD, [])
|
|
3350
3304
|
assert cost == 994
|
|
3351
3305
|
assert ret.atom == b""
|
|
3352
3306
|
|
|
@@ -3356,11 +3310,7 @@ async def test_lineage_cache(seeded_random: random.Random) -> None:
|
|
|
3356
3310
|
called = 0
|
|
3357
3311
|
|
|
3358
3312
|
info1 = UnspentLineageInfo(
|
|
3359
|
-
bytes32.random(seeded_random),
|
|
3360
|
-
uint64.from_bytes(seeded_random.randbytes(8)),
|
|
3361
|
-
bytes32.random(seeded_random),
|
|
3362
|
-
uint64.from_bytes(seeded_random.randbytes(8)),
|
|
3363
|
-
bytes32.random(seeded_random),
|
|
3313
|
+
bytes32.random(seeded_random), bytes32.random(seeded_random), bytes32.random(seeded_random)
|
|
3364
3314
|
)
|
|
3365
3315
|
|
|
3366
3316
|
async def callback1(ph: bytes32) -> Optional[UnspentLineageInfo]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from chia_rs import AugSchemeMPL, Coin, Program
|
|
3
|
+
from chia_rs import AugSchemeMPL, Coin, CoinSpend, Program, SpendBundle
|
|
4
4
|
from chia_rs.sized_bytes import bytes32
|
|
5
5
|
from chia_rs.sized_ints import uint32, uint64
|
|
6
6
|
|
|
@@ -13,10 +13,8 @@ from chia.full_node.fee_estimation import MempoolInfo
|
|
|
13
13
|
from chia.full_node.mempool import Mempool
|
|
14
14
|
from chia.types.blockchain_format.program import INFINITE_COST
|
|
15
15
|
from chia.types.clvm_cost import CLVMCost
|
|
16
|
-
from chia.types.coin_spend import CoinSpend
|
|
17
16
|
from chia.types.fee_rate import FeeRate
|
|
18
17
|
from chia.types.mempool_item import MempoolItem
|
|
19
|
-
from chia.types.spend_bundle import SpendBundle
|
|
20
18
|
|
|
21
19
|
MEMPOOL_INFO = MempoolInfo(
|
|
22
20
|
max_size_in_cost=CLVMCost(uint64(INFINITE_COST * 10)),
|