chia-blockchain 2.5.0rc1__py3-none-any.whl → 2.5.1__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/README.md +1 -1
- chia/_tests/blockchain/blockchain_test_utils.py +24 -26
- chia/_tests/blockchain/test_augmented_chain.py +6 -8
- chia/_tests/blockchain/test_blockchain.py +409 -307
- chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
- chia/_tests/blockchain/test_build_chains.py +11 -13
- chia/_tests/blockchain/test_get_block_generator.py +8 -8
- chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
- chia/_tests/build-init-files.py +3 -4
- chia/_tests/build-job-matrix.py +9 -9
- chia/_tests/check_sql_statements.py +2 -3
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +7 -5
- chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
- chia/_tests/clvm/test_condition_codes.py +2 -2
- chia/_tests/clvm/test_curry_and_treehash.py +2 -4
- chia/_tests/clvm/test_message_conditions.py +184 -0
- chia/_tests/clvm/test_puzzle_compression.py +1 -2
- chia/_tests/clvm/test_puzzle_drivers.py +3 -3
- chia/_tests/clvm/test_puzzles.py +13 -18
- chia/_tests/clvm/test_singletons.py +17 -17
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +42 -45
- chia/_tests/cmds/conftest.py +2 -2
- chia/_tests/cmds/test_click_types.py +21 -16
- chia/_tests/cmds/test_cmd_framework.py +255 -35
- chia/_tests/cmds/test_cmds_util.py +2 -2
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_dev_gh.py +131 -0
- chia/_tests/cmds/test_farm_cmd.py +1 -2
- chia/_tests/cmds/test_show.py +6 -6
- chia/_tests/cmds/test_tx_config_args.py +2 -1
- chia/_tests/cmds/wallet/test_dao.py +23 -23
- chia/_tests/cmds/wallet/test_did.py +29 -29
- chia/_tests/cmds/wallet/test_nft.py +24 -23
- chia/_tests/cmds/wallet/test_notifications.py +8 -8
- chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
- chia/_tests/cmds/wallet/test_vcs.py +97 -73
- chia/_tests/cmds/wallet/test_wallet.py +74 -75
- chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
- chia/_tests/conftest.py +153 -38
- chia/_tests/connection_utils.py +7 -6
- chia/_tests/core/cmds/test_beta.py +3 -3
- chia/_tests/core/cmds/test_keys.py +6 -6
- chia/_tests/core/cmds/test_wallet.py +3 -3
- chia/_tests/core/consensus/test_block_creation.py +3 -5
- chia/_tests/core/custom_types/test_coin.py +1 -3
- chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
- chia/_tests/core/daemon/test_daemon.py +58 -58
- chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
- chia/_tests/core/data_layer/conftest.py +4 -3
- chia/_tests/core/data_layer/test_data_cli.py +1 -2
- chia/_tests/core/data_layer/test_data_layer.py +5 -5
- chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
- chia/_tests/core/data_layer/test_data_rpc.py +75 -93
- chia/_tests/core/data_layer/test_data_store.py +38 -37
- chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
- chia/_tests/core/data_layer/util.py +11 -10
- chia/_tests/core/farmer/test_farmer_api.py +6 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
- chia/_tests/core/full_node/ram_db.py +2 -2
- chia/_tests/core/full_node/stores/test_block_store.py +113 -11
- chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
- chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
- chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
- chia/_tests/core/full_node/test_address_manager.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +1 -1
- chia/_tests/core/full_node/test_conditions.py +10 -12
- chia/_tests/core/full_node/test_full_node.py +2077 -1822
- chia/_tests/core/full_node/test_generator_tools.py +4 -4
- chia/_tests/core/full_node/test_hint_management.py +2 -2
- chia/_tests/core/full_node/test_performance.py +2 -5
- chia/_tests/core/full_node/test_subscriptions.py +4 -4
- chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
- chia/_tests/core/make_block_generator.py +5 -7
- chia/_tests/core/mempool/test_mempool.py +205 -208
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
- chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
- chia/_tests/core/mempool/test_mempool_manager.py +109 -80
- chia/_tests/core/mempool/test_mempool_performance.py +3 -4
- chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
- chia/_tests/core/server/flood.py +6 -4
- chia/_tests/core/server/serve.py +10 -7
- chia/_tests/core/server/test_api_protocol.py +21 -0
- chia/_tests/core/server/test_capabilities.py +3 -5
- chia/_tests/core/server/test_dos.py +15 -16
- chia/_tests/core/server/test_loop.py +14 -10
- chia/_tests/core/server/test_node_discovery.py +1 -2
- chia/_tests/core/server/test_rate_limits.py +156 -44
- chia/_tests/core/server/test_server.py +8 -7
- chia/_tests/core/services/test_services.py +59 -37
- chia/_tests/core/ssl/test_ssl.py +5 -3
- chia/_tests/core/test_cost_calculation.py +5 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_db_conversion.py +5 -4
- chia/_tests/core/test_db_validation.py +6 -5
- chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
- chia/_tests/core/test_filter.py +3 -5
- chia/_tests/core/test_full_node_rpc.py +64 -90
- chia/_tests/core/test_merkle_set.py +10 -10
- chia/_tests/core/test_program.py +2 -4
- chia/_tests/core/test_rpc_util.py +1 -2
- chia/_tests/core/test_seeder.py +124 -12
- chia/_tests/core/util/test_block_cache.py +5 -5
- chia/_tests/core/util/test_cached_bls.py +3 -3
- chia/_tests/core/util/test_config.py +13 -13
- chia/_tests/core/util/test_files.py +2 -2
- chia/_tests/core/util/test_jsonify.py +9 -9
- chia/_tests/core/util/test_keychain.py +13 -5
- chia/_tests/core/util/test_keyring_wrapper.py +6 -5
- chia/_tests/core/util/test_log_exceptions.py +3 -3
- chia/_tests/core/util/test_streamable.py +38 -38
- chia/_tests/db/test_db_wrapper.py +13 -12
- chia/_tests/environments/common.py +2 -2
- chia/_tests/environments/full_node.py +2 -2
- chia/_tests/environments/wallet.py +109 -48
- chia/_tests/farmer_harvester/test_farmer.py +35 -35
- chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
- chia/_tests/generator/test_compression.py +13 -30
- chia/_tests/generator/test_generator_types.py +3 -3
- chia/_tests/generator/test_rom.py +7 -9
- chia/_tests/plot_sync/test_delta.py +2 -3
- chia/_tests/plot_sync/test_plot_sync.py +25 -24
- chia/_tests/plot_sync/test_receiver.py +9 -9
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +27 -26
- chia/_tests/plot_sync/util.py +2 -1
- chia/_tests/plotting/test_plot_manager.py +54 -11
- chia/_tests/plotting/util.py +2 -3
- chia/_tests/pools/test_pool_cli_parsing.py +128 -0
- chia/_tests/pools/test_pool_cmdline.py +993 -15
- chia/_tests/pools/test_pool_config.py +3 -5
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
- chia/_tests/pools/test_pool_rpc.py +203 -90
- chia/_tests/pools/test_pool_wallet.py +12 -8
- chia/_tests/pools/test_wallet_pool_store.py +3 -3
- chia/_tests/process_junit.py +16 -17
- chia/_tests/rpc/test_rpc_client.py +59 -2
- chia/_tests/rpc/test_rpc_server.py +183 -0
- chia/_tests/simulation/test_simulation.py +5 -5
- chia/_tests/simulation/test_simulator.py +8 -10
- chia/_tests/simulation/test_start_simulator.py +5 -4
- chia/_tests/timelord/test_new_peak.py +19 -19
- chia/_tests/tools/test_run_block.py +1 -2
- chia/_tests/tools/test_virtual_project.py +591 -0
- chia/_tests/util/benchmark_cost.py +9 -9
- chia/_tests/util/benchmarks.py +1 -2
- chia/_tests/util/blockchain.py +12 -11
- chia/_tests/util/blockchain_mock.py +15 -15
- chia/_tests/util/build_network_protocol_files.py +12 -12
- chia/_tests/util/db_connection.py +3 -2
- chia/_tests/util/full_sync.py +14 -6
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/generator_tools_testing.py +5 -7
- chia/_tests/util/get_name_puzzle_conditions.py +52 -0
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +59 -106
- chia/_tests/util/network_protocol_data.py +7 -9
- chia/_tests/util/protocol_messages_json.py +112 -111
- chia/_tests/util/rpc.py +3 -0
- chia/_tests/util/run_block.py +16 -16
- chia/_tests/util/setup_nodes.py +25 -23
- chia/{clvm → _tests/util}/spend_sim.py +59 -55
- chia/_tests/util/split_managers.py +12 -9
- chia/_tests/util/temp_file.py +1 -1
- chia/_tests/util/test_action_scope.py +2 -1
- chia/_tests/util/test_async_pool.py +8 -8
- chia/_tests/util/test_build_job_matrix.py +2 -3
- chia/_tests/util/test_condition_tools.py +4 -6
- chia/_tests/util/test_config.py +5 -5
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +19 -11
- chia/_tests/util/test_limited_semaphore.py +4 -3
- chia/_tests/util/test_logging_filter.py +2 -3
- chia/_tests/util/test_misc.py +29 -28
- chia/_tests/util/test_network.py +32 -31
- chia/_tests/util/test_network_protocol_files.py +2 -3
- chia/_tests/util/test_network_protocol_json.py +1 -0
- chia/_tests/util/test_network_protocol_test.py +18 -19
- chia/_tests/util/test_paginator.py +3 -4
- chia/_tests/util/test_pprint.py +1 -1
- chia/_tests/util/test_priority_mutex.py +18 -17
- chia/_tests/util/test_recursive_replace.py +2 -2
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/test_timing.py +1 -1
- chia/_tests/util/test_trusted_peer.py +2 -2
- chia/_tests/util/time_out_assert.py +43 -6
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
- chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
- chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
- chia/_tests/wallet/conftest.py +135 -74
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
- chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
- chia/_tests/wallet/did_wallet/test_did.py +1277 -474
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
- chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
- chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
- chia/_tests/wallet/test_address_type.py +20 -20
- chia/_tests/wallet/test_clvm_streamable.py +5 -5
- chia/_tests/wallet/test_coin_management.py +354 -0
- chia/_tests/wallet/test_coin_selection.py +34 -35
- chia/_tests/wallet/test_conditions.py +28 -16
- chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
- chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
- chia/_tests/wallet/test_nft_store.py +1 -2
- chia/_tests/wallet/test_notifications.py +2 -2
- chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
- chia/_tests/wallet/test_puzzle_store.py +2 -3
- chia/_tests/wallet/test_sign_coin_spends.py +3 -3
- chia/_tests/wallet/test_signer_protocol.py +33 -34
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
- chia/_tests/wallet/test_taproot.py +1 -1
- chia/_tests/wallet/test_transaction_store.py +23 -19
- chia/_tests/wallet/test_util.py +36 -32
- chia/_tests/wallet/test_wallet.py +37 -37
- chia/_tests/wallet/test_wallet_action_scope.py +8 -8
- chia/_tests/wallet/test_wallet_blockchain.py +4 -6
- chia/_tests/wallet/test_wallet_coin_store.py +34 -34
- chia/_tests/wallet/test_wallet_node.py +69 -72
- chia/_tests/wallet/test_wallet_retry.py +3 -3
- chia/_tests/wallet/test_wallet_state_manager.py +12 -5
- chia/_tests/wallet/test_wallet_trade_store.py +2 -2
- chia/_tests/wallet/test_wallet_utils.py +5 -4
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
- chia/_tests/wallet/wallet_block_tools.py +27 -27
- chia/_tests/weight_proof/test_weight_proof.py +30 -30
- chia/apis.py +19 -0
- chia/cmds/beta.py +8 -7
- chia/cmds/beta_funcs.py +15 -11
- chia/cmds/check_wallet_db.py +29 -27
- chia/cmds/chia.py +17 -9
- chia/cmds/cmd_classes.py +87 -79
- chia/cmds/cmd_helpers.py +242 -0
- chia/cmds/cmds_util.py +56 -66
- chia/cmds/coin_funcs.py +168 -153
- chia/cmds/coins.py +156 -194
- chia/cmds/configure.py +4 -3
- chia/cmds/dao.py +89 -33
- chia/cmds/dao_funcs.py +55 -33
- chia/cmds/data.py +7 -6
- chia/cmds/data_funcs.py +26 -21
- chia/cmds/db.py +4 -3
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev.py +2 -0
- chia/cmds/farm.py +18 -5
- chia/cmds/farm_funcs.py +17 -24
- chia/cmds/gh.py +275 -0
- chia/cmds/init.py +4 -11
- chia/cmds/init_funcs.py +9 -9
- chia/cmds/installers.py +5 -3
- chia/cmds/keys.py +56 -39
- chia/cmds/keys_funcs.py +30 -31
- chia/cmds/netspace.py +6 -3
- chia/cmds/netspace_funcs.py +3 -2
- chia/cmds/param_types.py +16 -6
- chia/cmds/passphrase.py +8 -7
- chia/cmds/passphrase_funcs.py +7 -61
- chia/cmds/peer.py +2 -1
- chia/cmds/peer_funcs.py +5 -5
- chia/cmds/plotnft.py +207 -153
- chia/cmds/plotnft_funcs.py +205 -174
- chia/cmds/plots.py +14 -6
- chia/cmds/plotters.py +2 -1
- chia/cmds/rpc.py +48 -28
- chia/cmds/show.py +2 -1
- chia/cmds/show_funcs.py +7 -6
- chia/cmds/signer.py +50 -58
- chia/cmds/sim.py +22 -14
- chia/cmds/sim_funcs.py +11 -11
- chia/cmds/start.py +3 -3
- chia/cmds/start_funcs.py +9 -12
- chia/cmds/stop.py +4 -3
- chia/cmds/units.py +1 -3
- chia/cmds/wallet.py +252 -96
- chia/cmds/wallet_funcs.py +217 -143
- chia/consensus/block_body_validation.py +133 -86
- chia/consensus/block_creation.py +42 -21
- chia/consensus/block_header_validation.py +32 -37
- chia/consensus/block_record.py +1 -2
- chia/consensus/blockchain.py +167 -180
- chia/consensus/blockchain_interface.py +10 -10
- chia/consensus/constants.py +2 -2
- chia/consensus/default_constants.py +3 -4
- chia/consensus/difficulty_adjustment.py +5 -5
- chia/consensus/find_fork_point.py +5 -5
- chia/consensus/full_block_to_block_record.py +4 -4
- chia/consensus/get_block_challenge.py +2 -2
- chia/consensus/get_block_generator.py +4 -3
- chia/consensus/multiprocess_validation.py +207 -304
- chia/consensus/vdf_info_computation.py +3 -3
- chia/daemon/client.py +46 -27
- chia/daemon/keychain_proxy.py +10 -9
- chia/daemon/keychain_server.py +18 -18
- chia/daemon/server.py +103 -113
- chia/daemon/windows_signal.py +2 -2
- chia/data_layer/data_layer.py +64 -76
- chia/data_layer/data_layer_api.py +8 -0
- chia/data_layer/data_layer_errors.py +3 -3
- chia/data_layer/data_layer_server.py +2 -2
- chia/data_layer/data_layer_util.py +71 -71
- chia/data_layer/data_layer_wallet.py +63 -67
- chia/data_layer/data_store.py +72 -72
- chia/data_layer/dl_wallet_store.py +10 -10
- chia/data_layer/download_data.py +5 -5
- chia/data_layer/s3_plugin_service.py +9 -9
- chia/data_layer/util/benchmark.py +0 -1
- chia/data_layer/util/plugin.py +2 -3
- chia/farmer/farmer.py +46 -43
- chia/farmer/farmer_api.py +27 -21
- chia/full_node/block_height_map.py +6 -6
- chia/full_node/block_store.py +41 -35
- chia/full_node/coin_store.py +42 -41
- chia/full_node/fee_estimate.py +2 -2
- chia/full_node/fee_estimation.py +1 -2
- chia/full_node/fee_history.py +5 -6
- chia/full_node/fee_tracker.py +24 -24
- chia/full_node/full_node.py +574 -300
- chia/full_node/full_node_api.py +181 -130
- chia/full_node/full_node_store.py +43 -43
- chia/full_node/hint_management.py +4 -4
- chia/full_node/hint_store.py +9 -10
- chia/full_node/mempool.py +25 -19
- chia/full_node/mempool_check_conditions.py +11 -42
- chia/full_node/mempool_manager.py +48 -53
- chia/full_node/pending_tx_cache.py +9 -9
- chia/full_node/subscriptions.py +23 -24
- chia/full_node/sync_store.py +8 -7
- chia/full_node/tx_processing_queue.py +3 -3
- chia/full_node/util/__init__.py +0 -0
- chia/full_node/weight_proof.py +79 -78
- chia/harvester/harvester.py +9 -8
- chia/harvester/harvester_api.py +19 -13
- chia/introducer/introducer.py +7 -5
- chia/introducer/introducer_api.py +9 -3
- chia/legacy/keyring.py +6 -5
- chia/plot_sync/delta.py +8 -8
- chia/plot_sync/receiver.py +12 -11
- chia/plot_sync/sender.py +15 -12
- chia/plotters/bladebit.py +12 -12
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +8 -8
- chia/plotters/plotters.py +6 -6
- chia/plotters/plotters_util.py +6 -4
- chia/plotting/cache.py +8 -7
- chia/plotting/check_plots.py +8 -8
- chia/plotting/create_plots.py +6 -6
- chia/plotting/manager.py +22 -22
- chia/plotting/util.py +31 -19
- chia/pools/pool_config.py +7 -7
- chia/pools/pool_puzzles.py +16 -16
- chia/pools/pool_wallet.py +64 -57
- chia/pools/pool_wallet_info.py +3 -3
- chia/protocols/full_node_protocol.py +3 -3
- chia/protocols/harvester_protocol.py +12 -12
- chia/protocols/introducer_protocol.py +1 -2
- chia/protocols/protocol_message_types.py +4 -4
- chia/protocols/protocol_state_machine.py +2 -2
- chia/protocols/protocol_timing.py +1 -0
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +2 -2
- chia/protocols/wallet_protocol.py +33 -33
- chia/rpc/crawler_rpc_api.py +12 -7
- chia/rpc/data_layer_rpc_api.py +49 -44
- chia/rpc/data_layer_rpc_client.py +41 -41
- chia/rpc/data_layer_rpc_util.py +7 -11
- chia/rpc/farmer_rpc_api.py +32 -27
- chia/rpc/farmer_rpc_client.py +14 -14
- chia/rpc/full_node_rpc_api.py +53 -48
- chia/rpc/full_node_rpc_client.py +30 -30
- chia/rpc/harvester_rpc_api.py +16 -11
- chia/rpc/harvester_rpc_client.py +6 -6
- chia/rpc/rpc_client.py +34 -14
- chia/rpc/rpc_server.py +117 -43
- chia/rpc/timelord_rpc_api.py +9 -4
- chia/rpc/util.py +11 -211
- chia/rpc/wallet_request_types.py +276 -60
- chia/rpc/wallet_rpc_api.py +563 -399
- chia/rpc/wallet_rpc_client.py +220 -250
- chia/seeder/crawl_store.py +6 -8
- chia/seeder/crawler.py +23 -36
- chia/seeder/crawler_api.py +28 -22
- chia/seeder/dns_server.py +99 -50
- chia/seeder/start_crawler.py +13 -9
- chia/server/address_manager.py +19 -19
- chia/server/address_manager_store.py +17 -17
- chia/server/api_protocol.py +106 -1
- chia/server/capabilities.py +3 -3
- chia/server/chia_policy.py +17 -16
- chia/server/introducer_peers.py +3 -3
- chia/server/node_discovery.py +34 -38
- chia/server/rate_limit_numbers.py +26 -16
- chia/server/rate_limits.py +67 -27
- chia/server/server.py +52 -31
- chia/server/signal_handlers.py +6 -3
- chia/server/ssl_context.py +5 -5
- chia/server/start_data_layer.py +37 -23
- chia/server/start_farmer.py +28 -16
- chia/server/start_full_node.py +29 -23
- chia/server/start_harvester.py +28 -15
- chia/server/start_introducer.py +27 -15
- chia/server/start_service.py +17 -29
- chia/server/start_timelord.py +25 -18
- chia/server/start_wallet.py +22 -18
- chia/server/upnp.py +4 -3
- chia/server/ws_connection.py +68 -54
- chia/simulator/add_blocks_in_batches.py +54 -0
- chia/simulator/block_tools.py +65 -64
- chia/simulator/full_node_simulator.py +66 -74
- chia/simulator/setup_services.py +10 -9
- chia/simulator/simulator_full_node_rpc_api.py +12 -14
- chia/simulator/simulator_full_node_rpc_client.py +3 -5
- chia/simulator/simulator_test_tools.py +8 -7
- chia/simulator/socket.py +1 -4
- chia/simulator/ssl_certs.py +5 -5
- chia/simulator/ssl_certs_1.py +2 -4
- chia/simulator/ssl_certs_10.py +2 -4
- chia/simulator/ssl_certs_2.py +2 -4
- chia/simulator/ssl_certs_3.py +2 -4
- chia/simulator/ssl_certs_4.py +2 -4
- chia/simulator/ssl_certs_5.py +2 -4
- chia/simulator/ssl_certs_6.py +2 -4
- chia/simulator/ssl_certs_7.py +2 -4
- chia/simulator/ssl_certs_8.py +2 -4
- chia/simulator/ssl_certs_9.py +2 -4
- chia/simulator/start_simulator.py +14 -6
- chia/simulator/wallet_tools.py +21 -20
- chia/ssl/create_ssl.py +11 -11
- chia/timelord/iters_from_block.py +2 -2
- chia/timelord/timelord.py +57 -33
- chia/timelord/timelord_api.py +12 -6
- chia/timelord/timelord_launcher.py +10 -8
- chia/timelord/timelord_state.py +5 -5
- chia/types/block_protocol.py +2 -2
- chia/types/blockchain_format/coin.py +3 -3
- chia/types/blockchain_format/program.py +17 -18
- chia/types/blockchain_format/tree_hash.py +9 -9
- chia/types/coin_spend.py +8 -8
- chia/types/condition_with_args.py +1 -2
- chia/types/eligible_coin_spends.py +16 -15
- chia/types/generator_types.py +1 -2
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +7 -7
- chia/types/mempool_submission_status.py +2 -2
- chia/types/peer_info.py +1 -1
- chia/types/spend_bundle.py +1 -2
- chia/types/transaction_queue_entry.py +2 -2
- chia/types/unfinished_header_block.py +2 -2
- chia/types/validation_state.py +14 -0
- chia/types/weight_proof.py +5 -6
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +6 -4
- chia/util/augmented_chain.py +13 -9
- chia/util/batches.py +5 -2
- chia/util/bech32m.py +14 -11
- chia/util/beta_metrics.py +5 -4
- chia/util/block_cache.py +5 -5
- chia/util/byte_types.py +2 -0
- chia/util/check_fork_next_block.py +3 -2
- chia/util/chia_logging.py +41 -21
- chia/util/collection.py +3 -3
- chia/util/condition_tools.py +18 -18
- chia/util/config.py +26 -25
- chia/util/cpu.py +2 -0
- chia/util/db_synchronous.py +2 -0
- chia/util/db_version.py +2 -0
- chia/util/db_wrapper.py +13 -10
- chia/util/default_root.py +17 -0
- chia/util/dump_keyring.py +6 -6
- chia/util/errors.py +5 -3
- chia/util/file_keyring.py +22 -33
- chia/util/files.py +2 -0
- chia/util/full_block_utils.py +31 -7
- chia/util/generator_tools.py +18 -8
- chia/util/hash.py +3 -1
- chia/util/initial-config.yaml +19 -0
- chia/util/inline_executor.py +2 -0
- chia/util/ip_address.py +39 -0
- chia/util/json_util.py +0 -4
- chia/util/keychain.py +27 -24
- chia/util/keyring_wrapper.py +65 -4
- chia/util/limited_semaphore.py +3 -1
- chia/util/lock.py +4 -2
- chia/util/log_exceptions.py +5 -2
- chia/util/logging.py +3 -1
- chia/util/lru_cache.py +2 -0
- chia/util/math.py +4 -4
- chia/util/network.py +15 -73
- chia/util/paginator.py +3 -1
- chia/util/path.py +2 -0
- chia/util/permissions.py +3 -2
- chia/util/prev_transaction_block.py +1 -3
- chia/util/priority_mutex.py +6 -3
- chia/util/profiler.py +7 -4
- chia/util/recursive_replace.py +2 -0
- chia/util/safe_cancel_task.py +2 -0
- chia/util/service_groups.py +2 -2
- chia/util/setproctitle.py +2 -0
- chia/util/significant_bits.py +2 -0
- chia/util/ssl_check.py +11 -11
- chia/util/streamable.py +44 -56
- chia/util/task_referencer.py +59 -0
- chia/util/task_timing.py +22 -18
- chia/util/timing.py +4 -1
- chia/util/vdf_prover.py +2 -3
- chia/util/virtual_project_analysis.py +540 -0
- chia/util/ws_message.py +6 -6
- chia/wallet/cat_wallet/cat_info.py +3 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
- chia/wallet/cat_wallet/cat_utils.py +5 -4
- chia/wallet/cat_wallet/cat_wallet.py +56 -70
- chia/wallet/cat_wallet/dao_cat_info.py +3 -3
- chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
- chia/wallet/cat_wallet/lineage_store.py +2 -2
- chia/wallet/coin_selection.py +15 -15
- chia/wallet/conditions.py +257 -71
- chia/wallet/dao_wallet/dao_info.py +4 -4
- chia/wallet/dao_wallet/dao_utils.py +43 -42
- chia/wallet/dao_wallet/dao_wallet.py +66 -68
- chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
- chia/wallet/derive_keys.py +11 -11
- chia/wallet/did_wallet/did_info.py +3 -3
- chia/wallet/did_wallet/did_wallet.py +56 -47
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/nft_info.py +4 -4
- chia/wallet/nft_wallet/nft_puzzles.py +16 -16
- chia/wallet/nft_wallet/nft_wallet.py +90 -89
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
- chia/wallet/nft_wallet/uncurry_nft.py +2 -2
- chia/wallet/notification_manager.py +5 -5
- chia/wallet/notification_store.py +6 -6
- chia/wallet/outer_puzzles.py +2 -2
- chia/wallet/payment.py +4 -5
- chia/wallet/puzzle_drivers.py +4 -4
- chia/wallet/puzzles/clawback/drivers.py +5 -5
- chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
- chia/wallet/puzzles/load_clvm.py +2 -3
- chia/wallet/puzzles/p2_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
- chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
- chia/wallet/puzzles/puzzle_utils.py +7 -7
- chia/wallet/puzzles/singleton_top_layer.py +6 -5
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
- chia/wallet/puzzles/tails.py +34 -30
- chia/wallet/signer_protocol.py +7 -8
- chia/wallet/singleton.py +4 -4
- chia/wallet/trade_manager.py +155 -141
- chia/wallet/trade_record.py +5 -5
- chia/wallet/trading/offer.py +100 -101
- chia/wallet/trading/trade_store.py +14 -14
- chia/wallet/transaction_record.py +31 -16
- chia/wallet/util/address_type.py +4 -4
- chia/wallet/util/blind_signer_tl.py +8 -12
- chia/wallet/util/clvm_streamable.py +15 -15
- chia/wallet/util/compute_hints.py +5 -5
- chia/wallet/util/compute_memos.py +4 -6
- chia/wallet/util/curry_and_treehash.py +3 -2
- chia/wallet/util/debug_spend_bundle.py +6 -8
- chia/wallet/util/merkle_tree.py +10 -10
- chia/wallet/util/merkle_utils.py +10 -10
- chia/wallet/util/new_peak_queue.py +3 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/{util → wallet/util}/pprint.py +2 -3
- chia/wallet/util/puzzle_compression.py +3 -4
- chia/wallet/util/puzzle_decorator.py +10 -10
- chia/wallet/util/query_filter.py +9 -10
- chia/wallet/util/tx_config.py +12 -12
- chia/wallet/util/wallet_sync_utils.py +24 -21
- chia/wallet/util/wallet_types.py +9 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
- chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
- chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
- chia/wallet/vc_wallet/vc_drivers.py +16 -16
- chia/wallet/vc_wallet/vc_store.py +9 -9
- chia/wallet/vc_wallet/vc_wallet.py +35 -35
- chia/wallet/wallet.py +54 -54
- chia/wallet/wallet_action_scope.py +14 -13
- chia/wallet/wallet_blockchain.py +10 -10
- chia/wallet/wallet_coin_record.py +2 -2
- chia/wallet/wallet_coin_store.py +10 -10
- chia/wallet/wallet_info.py +1 -2
- chia/wallet/wallet_interested_store.py +5 -5
- chia/wallet/wallet_nft_store.py +6 -6
- chia/wallet/wallet_node.py +72 -76
- chia/wallet/wallet_node_api.py +33 -27
- chia/wallet/wallet_pool_store.py +1 -2
- chia/wallet/wallet_protocol.py +15 -15
- chia/wallet/wallet_puzzle_store.py +35 -4
- chia/wallet/wallet_retry_store.py +2 -2
- chia/wallet/wallet_singleton_store.py +10 -9
- chia/wallet/wallet_spend_bundle.py +4 -20
- chia/wallet/wallet_state_manager.py +223 -224
- chia/wallet/wallet_transaction_store.py +44 -18
- chia/wallet/wallet_user_store.py +2 -2
- chia/wallet/wallet_weight_proof_handler.py +2 -2
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/WHEEL +1 -1
- mozilla-ca/cacert.pem +32 -87
- chia/_tests/cmds/wallet/test_coins.py +0 -195
- chia/consensus/block_root_validation.py +0 -46
- chia/util/api_decorators.py +0 -89
- chia_blockchain-2.5.0rc1.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import datetime
|
|
4
|
-
from typing import
|
|
4
|
+
from typing import Union
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
7
|
|
|
@@ -20,11 +20,11 @@ from chia.wallet.wallet import Wallet
|
|
|
20
20
|
|
|
21
21
|
@pytest.mark.anyio
|
|
22
22
|
async def test_protocol_messages(
|
|
23
|
-
simulator_and_wallet:
|
|
24
|
-
|
|
25
|
-
]
|
|
23
|
+
simulator_and_wallet: tuple[
|
|
24
|
+
list[Union[FullNodeAPI, FullNodeSimulator]], list[tuple[Wallet, ChiaServer]], BlockTools
|
|
25
|
+
],
|
|
26
26
|
) -> None:
|
|
27
|
-
full_nodes,
|
|
27
|
+
full_nodes, _wallets, bt = simulator_and_wallet
|
|
28
28
|
a_wallet = bt.get_pool_wallet_tool()
|
|
29
29
|
reward_ph = a_wallet.get_new_puzzlehash()
|
|
30
30
|
blocks = bt.get_consecutive_blocks(
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import List
|
|
4
|
-
|
|
5
3
|
from chia_rs import AugSchemeMPL, Coin, Program
|
|
6
4
|
from chia_rs.sized_bytes import bytes32
|
|
7
5
|
from chia_rs.sized_ints import uint32, uint64
|
|
8
6
|
|
|
9
7
|
from chia._tests.core.mempool.test_mempool_manager import TEST_HEIGHT, make_bundle_spends_map_and_fee
|
|
8
|
+
from chia._tests.util.get_name_puzzle_conditions import get_name_puzzle_conditions
|
|
10
9
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
11
10
|
from chia.full_node.bitcoin_fee_estimator import create_bitcoin_fee_estimator
|
|
12
11
|
from chia.full_node.bundle_tools import simple_solution_generator
|
|
13
12
|
from chia.full_node.fee_estimation import MempoolInfo
|
|
14
13
|
from chia.full_node.mempool import Mempool
|
|
15
|
-
from chia.full_node.mempool_check_conditions import get_name_puzzle_conditions
|
|
16
14
|
from chia.types.blockchain_format.program import INFINITE_COST
|
|
17
15
|
from chia.types.clvm_cost import CLVMCost
|
|
18
16
|
from chia.types.coin_spend import CoinSpend
|
|
@@ -43,7 +41,7 @@ OTHER_COIN_3 = Coin(bytes32(b"5" * 32), OTHER_PUZZLE_HASH, uint64(1000))
|
|
|
43
41
|
EMPTY_SIGNATURE = AugSchemeMPL.aggregate([])
|
|
44
42
|
|
|
45
43
|
|
|
46
|
-
def make_item(coin_spends:
|
|
44
|
+
def make_item(coin_spends: list[CoinSpend]) -> MempoolItem:
|
|
47
45
|
spend_bundle = SpendBundle(coin_spends, EMPTY_SIGNATURE)
|
|
48
46
|
generator = simple_solution_generator(spend_bundle)
|
|
49
47
|
npc_result = get_name_puzzle_conditions(
|
|
@@ -2,7 +2,8 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
import logging
|
|
5
|
-
from
|
|
5
|
+
from collections.abc import Awaitable, Collection
|
|
6
|
+
from typing import Any, Callable, ClassVar, Optional
|
|
6
7
|
|
|
7
8
|
import pytest
|
|
8
9
|
from chia_rs import ELIGIBLE_FOR_DEDUP, ELIGIBLE_FOR_FF, AugSchemeMPL, G2Element, get_conditions_from_spendbundle
|
|
@@ -11,6 +12,7 @@ from chiabip158 import PyBIP158
|
|
|
11
12
|
from chia._tests.conftest import ConsensusMode
|
|
12
13
|
from chia._tests.util.misc import invariant_check_mempool
|
|
13
14
|
from chia._tests.util.setup_nodes import OldSimulatorsAndWallets, setup_simulators_and_wallets
|
|
15
|
+
from chia.consensus.condition_costs import ConditionCost
|
|
14
16
|
from chia.consensus.constants import ConsensusConstants
|
|
15
17
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
16
18
|
from chia.full_node.mempool import MAX_SKIPPED_ITEMS, PRIORITY_TX_THRESHOLD
|
|
@@ -96,19 +98,19 @@ class TestBlockRecord:
|
|
|
96
98
|
return self.timestamp is not None
|
|
97
99
|
|
|
98
100
|
|
|
99
|
-
async def zero_calls_get_coin_records(coin_ids: Collection[bytes32]) ->
|
|
101
|
+
async def zero_calls_get_coin_records(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
|
|
100
102
|
assert len(coin_ids) == 0
|
|
101
103
|
return []
|
|
102
104
|
|
|
103
105
|
|
|
104
|
-
async def get_coin_records_for_test_coins(coin_ids: Collection[bytes32]) ->
|
|
106
|
+
async def get_coin_records_for_test_coins(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
|
|
105
107
|
test_coin_records = {
|
|
106
108
|
TEST_COIN_ID: TEST_COIN_RECORD,
|
|
107
109
|
TEST_COIN_ID2: TEST_COIN_RECORD2,
|
|
108
110
|
TEST_COIN_ID3: TEST_COIN_RECORD3,
|
|
109
111
|
}
|
|
110
112
|
|
|
111
|
-
ret:
|
|
113
|
+
ret: list[CoinRecord] = []
|
|
112
114
|
for name in coin_ids:
|
|
113
115
|
r = test_coin_records.get(name)
|
|
114
116
|
if r is not None:
|
|
@@ -131,7 +133,7 @@ def create_test_block_record(*, height: uint32 = TEST_HEIGHT, timestamp: uint64
|
|
|
131
133
|
|
|
132
134
|
|
|
133
135
|
async def instantiate_mempool_manager(
|
|
134
|
-
get_coin_records: Callable[[Collection[bytes32]], Awaitable[
|
|
136
|
+
get_coin_records: Callable[[Collection[bytes32]], Awaitable[list[CoinRecord]]],
|
|
135
137
|
*,
|
|
136
138
|
block_height: uint32 = TEST_HEIGHT,
|
|
137
139
|
block_timestamp: uint64 = TEST_TIMESTAMP,
|
|
@@ -147,11 +149,11 @@ async def instantiate_mempool_manager(
|
|
|
147
149
|
|
|
148
150
|
async def setup_mempool_with_coins(
|
|
149
151
|
*,
|
|
150
|
-
coin_amounts:
|
|
152
|
+
coin_amounts: list[int],
|
|
151
153
|
max_block_clvm_cost: Optional[int] = None,
|
|
152
154
|
max_tx_clvm_cost: Optional[uint64] = None,
|
|
153
155
|
mempool_block_buffer: Optional[int] = None,
|
|
154
|
-
) ->
|
|
156
|
+
) -> tuple[MempoolManager, list[Coin]]:
|
|
155
157
|
coins = []
|
|
156
158
|
test_coin_records = {}
|
|
157
159
|
for amount in coin_amounts:
|
|
@@ -159,8 +161,8 @@ async def setup_mempool_with_coins(
|
|
|
159
161
|
coins.append(coin)
|
|
160
162
|
test_coin_records[coin.name()] = CoinRecord(coin, uint32(0), uint32(0), False, uint64(0))
|
|
161
163
|
|
|
162
|
-
async def get_coin_records(coin_ids: Collection[bytes32]) ->
|
|
163
|
-
ret:
|
|
164
|
+
async def get_coin_records(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
|
|
165
|
+
ret: list[CoinRecord] = []
|
|
164
166
|
for name in coin_ids:
|
|
165
167
|
r = test_coin_records.get(name)
|
|
166
168
|
if r is not None:
|
|
@@ -169,7 +171,7 @@ async def setup_mempool_with_coins(
|
|
|
169
171
|
|
|
170
172
|
constants = DEFAULT_CONSTANTS
|
|
171
173
|
if max_block_clvm_cost is not None:
|
|
172
|
-
constants = constants.replace(MAX_BLOCK_COST_CLVM=uint64(max_block_clvm_cost))
|
|
174
|
+
constants = constants.replace(MAX_BLOCK_COST_CLVM=uint64(max_block_clvm_cost + TEST_BLOCK_OVERHEAD))
|
|
173
175
|
if mempool_block_buffer is not None:
|
|
174
176
|
constants = constants.replace(MEMPOOL_BLOCK_BUFFER=uint8(mempool_block_buffer))
|
|
175
177
|
mempool_manager = await instantiate_mempool_manager(
|
|
@@ -191,7 +193,7 @@ def make_test_conds(
|
|
|
191
193
|
before_seconds_relative: Optional[int] = None,
|
|
192
194
|
before_seconds_absolute: Optional[int] = None,
|
|
193
195
|
cost: int = 0,
|
|
194
|
-
spend_ids:
|
|
196
|
+
spend_ids: list[bytes32] = [TEST_COIN_ID],
|
|
195
197
|
) -> SpendBundleConditions:
|
|
196
198
|
return SpendBundleConditions(
|
|
197
199
|
[
|
|
@@ -228,55 +230,57 @@ def make_test_conds(
|
|
|
228
230
|
0,
|
|
229
231
|
0,
|
|
230
232
|
False,
|
|
233
|
+
0,
|
|
234
|
+
0,
|
|
231
235
|
)
|
|
232
236
|
|
|
233
237
|
|
|
234
238
|
class TestCheckTimeLocks:
|
|
235
|
-
COIN_CONFIRMED_HEIGHT = uint32(10)
|
|
236
|
-
COIN_TIMESTAMP = uint64(10000)
|
|
237
|
-
PREV_BLOCK_HEIGHT = uint32(15)
|
|
238
|
-
PREV_BLOCK_TIMESTAMP = uint64(10150)
|
|
239
|
+
COIN_CONFIRMED_HEIGHT: ClassVar[uint32] = uint32(10)
|
|
240
|
+
COIN_TIMESTAMP: ClassVar[uint64] = uint64(10000)
|
|
241
|
+
PREV_BLOCK_HEIGHT: ClassVar[uint32] = uint32(15)
|
|
242
|
+
PREV_BLOCK_TIMESTAMP: ClassVar[uint64] = uint64(10150)
|
|
239
243
|
|
|
240
|
-
COIN_RECORD = CoinRecord(
|
|
244
|
+
COIN_RECORD: ClassVar[CoinRecord] = CoinRecord(
|
|
241
245
|
TEST_COIN,
|
|
242
246
|
confirmed_block_index=uint32(COIN_CONFIRMED_HEIGHT),
|
|
243
247
|
spent_block_index=uint32(0),
|
|
244
248
|
coinbase=False,
|
|
245
249
|
timestamp=COIN_TIMESTAMP,
|
|
246
250
|
)
|
|
247
|
-
REMOVALS:
|
|
251
|
+
REMOVALS: ClassVar[dict[bytes32, CoinRecord]] = {TEST_COIN.name(): COIN_RECORD}
|
|
248
252
|
|
|
249
253
|
@pytest.mark.parametrize(
|
|
250
254
|
"conds,expected",
|
|
251
255
|
[
|
|
252
256
|
(make_test_conds(height_relative=5), None),
|
|
253
257
|
(make_test_conds(height_relative=6), Err.ASSERT_HEIGHT_RELATIVE_FAILED),
|
|
254
|
-
(make_test_conds(height_absolute=
|
|
255
|
-
(make_test_conds(height_absolute=
|
|
258
|
+
(make_test_conds(height_absolute=PREV_BLOCK_HEIGHT), None),
|
|
259
|
+
(make_test_conds(height_absolute=uint32(PREV_BLOCK_HEIGHT + 1)), Err.ASSERT_HEIGHT_ABSOLUTE_FAILED),
|
|
256
260
|
(make_test_conds(seconds_relative=150), None),
|
|
257
261
|
(make_test_conds(seconds_relative=151), Err.ASSERT_SECONDS_RELATIVE_FAILED),
|
|
258
|
-
(make_test_conds(seconds_absolute=
|
|
259
|
-
(make_test_conds(seconds_absolute=
|
|
262
|
+
(make_test_conds(seconds_absolute=PREV_BLOCK_TIMESTAMP), None),
|
|
263
|
+
(make_test_conds(seconds_absolute=uint64(PREV_BLOCK_TIMESTAMP + 1)), Err.ASSERT_SECONDS_ABSOLUTE_FAILED),
|
|
260
264
|
# the coin's confirmed height is 10
|
|
261
265
|
(make_test_conds(birth_height=9), Err.ASSERT_MY_BIRTH_HEIGHT_FAILED),
|
|
262
266
|
(make_test_conds(birth_height=10), None),
|
|
263
267
|
(make_test_conds(birth_height=11), Err.ASSERT_MY_BIRTH_HEIGHT_FAILED),
|
|
264
268
|
# coin timestamp is 10000
|
|
265
|
-
(make_test_conds(birth_seconds=
|
|
266
|
-
(make_test_conds(birth_seconds=
|
|
267
|
-
(make_test_conds(birth_seconds=
|
|
269
|
+
(make_test_conds(birth_seconds=uint64(COIN_TIMESTAMP - 1)), Err.ASSERT_MY_BIRTH_SECONDS_FAILED),
|
|
270
|
+
(make_test_conds(birth_seconds=COIN_TIMESTAMP), None),
|
|
271
|
+
(make_test_conds(birth_seconds=uint64(COIN_TIMESTAMP + 1)), Err.ASSERT_MY_BIRTH_SECONDS_FAILED),
|
|
268
272
|
# the coin is 5 blocks old in this test
|
|
269
273
|
(make_test_conds(before_height_relative=5), Err.ASSERT_BEFORE_HEIGHT_RELATIVE_FAILED),
|
|
270
274
|
(make_test_conds(before_height_relative=6), None),
|
|
271
275
|
# The block height is 15
|
|
272
|
-
(make_test_conds(before_height_absolute=
|
|
273
|
-
(make_test_conds(before_height_absolute=
|
|
276
|
+
(make_test_conds(before_height_absolute=PREV_BLOCK_HEIGHT), Err.ASSERT_BEFORE_HEIGHT_ABSOLUTE_FAILED),
|
|
277
|
+
(make_test_conds(before_height_absolute=uint64(PREV_BLOCK_HEIGHT + 1)), None),
|
|
274
278
|
# the coin is 150 seconds old in this test
|
|
275
279
|
(make_test_conds(before_seconds_relative=150), Err.ASSERT_BEFORE_SECONDS_RELATIVE_FAILED),
|
|
276
280
|
(make_test_conds(before_seconds_relative=151), None),
|
|
277
281
|
# The block timestamp is 10150
|
|
278
|
-
(make_test_conds(before_seconds_absolute=
|
|
279
|
-
(make_test_conds(before_seconds_absolute=
|
|
282
|
+
(make_test_conds(before_seconds_absolute=PREV_BLOCK_TIMESTAMP), Err.ASSERT_BEFORE_SECONDS_ABSOLUTE_FAILED),
|
|
283
|
+
(make_test_conds(before_seconds_absolute=uint64(PREV_BLOCK_TIMESTAMP + 1)), None),
|
|
280
284
|
],
|
|
281
285
|
)
|
|
282
286
|
def test_conditions(
|
|
@@ -286,7 +290,7 @@ class TestCheckTimeLocks:
|
|
|
286
290
|
) -> None:
|
|
287
291
|
assert (
|
|
288
292
|
mempool_check_time_locks(
|
|
289
|
-
self.REMOVALS,
|
|
293
|
+
dict(self.REMOVALS),
|
|
290
294
|
conds,
|
|
291
295
|
self.PREV_BLOCK_HEIGHT,
|
|
292
296
|
self.PREV_BLOCK_TIMESTAMP,
|
|
@@ -379,7 +383,7 @@ def test_compute_assert_height(conds: SpendBundleConditions, expected: TimelockC
|
|
|
379
383
|
|
|
380
384
|
|
|
381
385
|
def spend_bundle_from_conditions(
|
|
382
|
-
conditions:
|
|
386
|
+
conditions: list[list[Any]], coin: Coin = TEST_COIN, aggsig: G2Element = G2Element()
|
|
383
387
|
) -> SpendBundle:
|
|
384
388
|
solution = SerializedProgram.to(conditions)
|
|
385
389
|
coin_spend = make_spend(coin, IDENTITY_PUZZLE, solution)
|
|
@@ -388,7 +392,7 @@ def spend_bundle_from_conditions(
|
|
|
388
392
|
|
|
389
393
|
async def add_spendbundle(
|
|
390
394
|
mempool_manager: MempoolManager, sb: SpendBundle, sb_name: bytes32
|
|
391
|
-
) ->
|
|
395
|
+
) -> tuple[Optional[uint64], MempoolInclusionStatus, Optional[Err]]:
|
|
392
396
|
sbc = await mempool_manager.pre_validate_spendbundle(sb, sb_name)
|
|
393
397
|
ret = await mempool_manager.add_spend_bundle(sb, sbc, sb_name, TEST_HEIGHT)
|
|
394
398
|
invariant_check_mempool(mempool_manager.mempool)
|
|
@@ -397,10 +401,10 @@ async def add_spendbundle(
|
|
|
397
401
|
|
|
398
402
|
async def generate_and_add_spendbundle(
|
|
399
403
|
mempool_manager: MempoolManager,
|
|
400
|
-
conditions:
|
|
404
|
+
conditions: list[list[Any]],
|
|
401
405
|
coin: Coin = TEST_COIN,
|
|
402
406
|
aggsig: G2Element = G2Element(),
|
|
403
|
-
) ->
|
|
407
|
+
) -> tuple[SpendBundle, bytes32, tuple[Optional[uint64], MempoolInclusionStatus, Optional[Err]]]:
|
|
404
408
|
sb = spend_bundle_from_conditions(conditions, coin, aggsig)
|
|
405
409
|
sb_name = sb.name()
|
|
406
410
|
result = await add_spendbundle(mempool_manager, sb, sb_name)
|
|
@@ -409,9 +413,9 @@ async def generate_and_add_spendbundle(
|
|
|
409
413
|
|
|
410
414
|
def make_bundle_spends_map_and_fee(
|
|
411
415
|
spend_bundle: SpendBundle, conds: SpendBundleConditions
|
|
412
|
-
) ->
|
|
413
|
-
bundle_coin_spends:
|
|
414
|
-
eligibility_and_additions:
|
|
416
|
+
) -> tuple[dict[bytes32, BundleCoinSpend], uint64]:
|
|
417
|
+
bundle_coin_spends: dict[bytes32, BundleCoinSpend] = {}
|
|
418
|
+
eligibility_and_additions: dict[bytes32, EligibilityAndAdditions] = {}
|
|
415
419
|
removals_amount = 0
|
|
416
420
|
additions_amount = 0
|
|
417
421
|
for spend in conds.spends:
|
|
@@ -551,7 +555,7 @@ async def test_reserve_fee_condition() -> None:
|
|
|
551
555
|
|
|
552
556
|
@pytest.mark.anyio
|
|
553
557
|
async def test_unknown_unspent() -> None:
|
|
554
|
-
async def get_coin_records(_: Collection[bytes32]) ->
|
|
558
|
+
async def get_coin_records(_: Collection[bytes32]) -> list[CoinRecord]:
|
|
555
559
|
return []
|
|
556
560
|
|
|
557
561
|
mempool_manager = await instantiate_mempool_manager(get_coin_records)
|
|
@@ -598,7 +602,7 @@ async def test_sb_twice_with_eligible_coin_and_different_spends_order() -> None:
|
|
|
598
602
|
sk = AugSchemeMPL.key_gen(b"6" * 32)
|
|
599
603
|
g1 = sk.get_g1()
|
|
600
604
|
sig = AugSchemeMPL.sign(sk, IDENTITY_PUZZLE_HASH, g1)
|
|
601
|
-
sb2_conditions:
|
|
605
|
+
sb2_conditions: list[list[Any]] = [
|
|
602
606
|
[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, 3],
|
|
603
607
|
[ConditionOpcode.AGG_SIG_UNSAFE, bytes(g1), IDENTITY_PUZZLE_HASH],
|
|
604
608
|
]
|
|
@@ -726,7 +730,7 @@ def test_optional_max() -> None:
|
|
|
726
730
|
|
|
727
731
|
|
|
728
732
|
def mk_item(
|
|
729
|
-
coins:
|
|
733
|
+
coins: list[Coin],
|
|
730
734
|
*,
|
|
731
735
|
cost: int = 1,
|
|
732
736
|
fee: int = 0,
|
|
@@ -762,8 +766,8 @@ def mk_item(
|
|
|
762
766
|
)
|
|
763
767
|
|
|
764
768
|
|
|
765
|
-
def make_test_coins() ->
|
|
766
|
-
ret:
|
|
769
|
+
def make_test_coins() -> list[Coin]:
|
|
770
|
+
ret: list[Coin] = []
|
|
767
771
|
for i in range(5):
|
|
768
772
|
ret.append(Coin(height_hash(i), height_hash(i + 100), uint64(i * 100)))
|
|
769
773
|
return ret
|
|
@@ -904,7 +908,7 @@ coins = make_test_coins()
|
|
|
904
908
|
),
|
|
905
909
|
],
|
|
906
910
|
)
|
|
907
|
-
def test_can_replace(existing_items:
|
|
911
|
+
def test_can_replace(existing_items: list[MempoolItem], new_item: MempoolItem, expected: bool) -> None:
|
|
908
912
|
removals = {c.name() for c in new_item.spend_bundle.removals()}
|
|
909
913
|
assert can_replace(existing_items, removals, new_item) == expected
|
|
910
914
|
|
|
@@ -956,10 +960,10 @@ async def test_get_items_not_in_filter() -> None:
|
|
|
956
960
|
|
|
957
961
|
@pytest.mark.anyio
|
|
958
962
|
async def test_total_mempool_fees() -> None:
|
|
959
|
-
coin_records:
|
|
963
|
+
coin_records: dict[bytes32, CoinRecord] = {}
|
|
960
964
|
|
|
961
|
-
async def get_coin_records(coin_ids: Collection[bytes32]) ->
|
|
962
|
-
ret:
|
|
965
|
+
async def get_coin_records(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
|
|
966
|
+
ret: list[CoinRecord] = []
|
|
963
967
|
for name in coin_ids:
|
|
964
968
|
r = coin_records.get(name)
|
|
965
969
|
if r is not None:
|
|
@@ -997,7 +1001,7 @@ async def test_create_bundle_from_mempool(reverse_tx_order: bool) -> None:
|
|
|
997
1001
|
async def get_unspent_lineage_info_for_puzzle_hash(_: bytes32) -> Optional[UnspentLineageInfo]:
|
|
998
1002
|
assert False # pragma: no cover
|
|
999
1003
|
|
|
1000
|
-
async def make_coin_spends(coins:
|
|
1004
|
+
async def make_coin_spends(coins: list[Coin], *, high_fees: bool = True) -> list[CoinSpend]:
|
|
1001
1005
|
spends_list = []
|
|
1002
1006
|
for i in range(0, len(coins)):
|
|
1003
1007
|
coin_spend = make_spend(
|
|
@@ -1010,7 +1014,7 @@ async def test_create_bundle_from_mempool(reverse_tx_order: bool) -> None:
|
|
|
1010
1014
|
spends_list.append(coin_spend)
|
|
1011
1015
|
return spends_list
|
|
1012
1016
|
|
|
1013
|
-
async def send_spends_to_mempool(coin_spends:
|
|
1017
|
+
async def send_spends_to_mempool(coin_spends: list[CoinSpend]) -> None:
|
|
1014
1018
|
g2 = G2Element()
|
|
1015
1019
|
for cs in coin_spends:
|
|
1016
1020
|
sb = SpendBundle([cs], g2)
|
|
@@ -1035,36 +1039,63 @@ async def test_create_bundle_from_mempool(reverse_tx_order: bool) -> None:
|
|
|
1035
1039
|
@pytest.mark.parametrize("num_skipped_items", [PRIORITY_TX_THRESHOLD, MAX_SKIPPED_ITEMS])
|
|
1036
1040
|
@pytest.mark.anyio
|
|
1037
1041
|
async def test_create_bundle_from_mempool_on_max_cost(num_skipped_items: int, caplog: pytest.LogCaptureFixture) -> None:
|
|
1042
|
+
"""
|
|
1043
|
+
This test exercises the path where an item's inclusion would exceed the
|
|
1044
|
+
maximum cumulative cost, so it gets skipped as a result.
|
|
1045
|
+
|
|
1046
|
+
NOTE:
|
|
1047
|
+
1. After PRIORITY_TX_THRESHOLD, we skip items with eligible coins.
|
|
1048
|
+
2. After skipping MAX_SKIPPED_ITEMS, we stop processing further items.
|
|
1049
|
+
"""
|
|
1050
|
+
|
|
1038
1051
|
async def get_unspent_lineage_info_for_puzzle_hash(_: bytes32) -> Optional[UnspentLineageInfo]:
|
|
1039
1052
|
assert False # pragma: no cover
|
|
1040
1053
|
|
|
1041
|
-
|
|
1042
|
-
# maximum cumulative cost, so it gets skipped as a result
|
|
1054
|
+
MAX_BLOCK_CLVM_COST = 550_000_000
|
|
1043
1055
|
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1056
|
+
mempool_manager, coins = await setup_mempool_with_coins(
|
|
1057
|
+
coin_amounts=list(range(1_000_000_000, 1_000_000_030)),
|
|
1058
|
+
max_block_clvm_cost=MAX_BLOCK_CLVM_COST,
|
|
1059
|
+
max_tx_clvm_cost=uint64(MAX_BLOCK_CLVM_COST),
|
|
1060
|
+
mempool_block_buffer=20,
|
|
1061
|
+
)
|
|
1047
1062
|
|
|
1048
1063
|
async def make_and_send_big_cost_sb(coin: Coin) -> None:
|
|
1064
|
+
"""
|
|
1065
|
+
Creates a spend bundle with a big enough cost that gets it close to the
|
|
1066
|
+
maximum block clvm cost limit.
|
|
1067
|
+
"""
|
|
1049
1068
|
conditions = []
|
|
1050
1069
|
sk = AugSchemeMPL.key_gen(b"7" * 32)
|
|
1051
1070
|
g1 = sk.get_g1()
|
|
1052
1071
|
sig = AugSchemeMPL.sign(sk, IDENTITY_PUZZLE_HASH, g1)
|
|
1053
1072
|
aggsig = G2Element()
|
|
1054
|
-
|
|
1073
|
+
# Let's get as close to `MAX_BLOCK_CLVM_COST` (550_000_000) as possible.
|
|
1074
|
+
# We start by accounting for execution cost
|
|
1075
|
+
spend_bundle_cost = 44
|
|
1076
|
+
# And then the created coin
|
|
1077
|
+
conditions.append([ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, coin.amount - 10_000_000])
|
|
1078
|
+
TEST_CREATE_COIN_SPEND_BYTESIZE = 93
|
|
1079
|
+
TEST_CREATE_COIN_CONDITION_COST = (
|
|
1080
|
+
ConditionCost.CREATE_COIN.value + TEST_CREATE_COIN_SPEND_BYTESIZE * DEFAULT_CONSTANTS.COST_PER_BYTE
|
|
1081
|
+
)
|
|
1082
|
+
spend_bundle_cost += TEST_CREATE_COIN_CONDITION_COST
|
|
1083
|
+
# We're using agg sig conditions to increase the spend bundle's cost
|
|
1084
|
+
# and reach our target cost.
|
|
1085
|
+
TEST_AGG_SIG_SPEND_BYTESIZE = 88
|
|
1086
|
+
TEST_AGGSIG_CONDITION_COST = (
|
|
1087
|
+
ConditionCost.AGG_SIG.value + TEST_AGG_SIG_SPEND_BYTESIZE * DEFAULT_CONSTANTS.COST_PER_BYTE
|
|
1088
|
+
)
|
|
1089
|
+
while spend_bundle_cost + TEST_AGGSIG_CONDITION_COST < MAX_BLOCK_CLVM_COST:
|
|
1055
1090
|
conditions.append([ConditionOpcode.AGG_SIG_UNSAFE, g1, IDENTITY_PUZZLE_HASH])
|
|
1056
1091
|
aggsig += sig
|
|
1057
|
-
|
|
1058
|
-
#
|
|
1092
|
+
spend_bundle_cost += TEST_AGGSIG_CONDITION_COST
|
|
1093
|
+
# We now have a spend bundle with a big enough cost that gets it close to the limit
|
|
1059
1094
|
_, _, res = await generate_and_add_spendbundle(mempool_manager, conditions, coin, aggsig)
|
|
1060
|
-
|
|
1095
|
+
cost, status, _ = res
|
|
1096
|
+
assert status == MempoolInclusionStatus.SUCCESS
|
|
1097
|
+
assert cost == spend_bundle_cost
|
|
1061
1098
|
|
|
1062
|
-
mempool_manager, coins = await setup_mempool_with_coins(
|
|
1063
|
-
coin_amounts=list(range(1_000_000_000, 1_000_000_030)),
|
|
1064
|
-
max_block_clvm_cost=550_000_000,
|
|
1065
|
-
max_tx_clvm_cost=uint64(550_000_000),
|
|
1066
|
-
mempool_block_buffer=20,
|
|
1067
|
-
)
|
|
1068
1099
|
# Create the spend bundles with a big enough cost that they get close to the limit
|
|
1069
1100
|
for i in range(num_skipped_items):
|
|
1070
1101
|
await make_and_send_big_cost_sb(coins[i])
|
|
@@ -1149,9 +1180,9 @@ async def test_create_bundle_from_mempool_on_max_cost(num_skipped_items: int, ca
|
|
|
1149
1180
|
async def test_assert_before_expiration(
|
|
1150
1181
|
opcode: ConditionOpcode, arg: int, expect_eviction: bool, expect_limit: Optional[int]
|
|
1151
1182
|
) -> None:
|
|
1152
|
-
async def get_coin_records(coin_ids: Collection[bytes32]) ->
|
|
1183
|
+
async def get_coin_records(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
|
|
1153
1184
|
all_coins = {TEST_COIN.name(): CoinRecord(TEST_COIN, uint32(5), uint32(0), False, uint64(9900))}
|
|
1154
|
-
ret:
|
|
1185
|
+
ret: list[CoinRecord] = []
|
|
1155
1186
|
for name in coin_ids:
|
|
1156
1187
|
r = all_coins.get(name)
|
|
1157
1188
|
if r is not None:
|
|
@@ -1187,9 +1218,9 @@ async def test_assert_before_expiration(
|
|
|
1187
1218
|
assert expect_limit is not None
|
|
1188
1219
|
item = mempool_manager.get_mempool_item(bundle_name)
|
|
1189
1220
|
assert item is not None
|
|
1190
|
-
if opcode in
|
|
1221
|
+
if opcode in {co.ASSERT_BEFORE_SECONDS_ABSOLUTE, co.ASSERT_BEFORE_SECONDS_RELATIVE}:
|
|
1191
1222
|
assert item.assert_before_seconds == expect_limit
|
|
1192
|
-
elif opcode in
|
|
1223
|
+
elif opcode in {co.ASSERT_BEFORE_HEIGHT_ABSOLUTE, co.ASSERT_BEFORE_HEIGHT_RELATIVE}:
|
|
1193
1224
|
assert item.assert_before_height == expect_limit
|
|
1194
1225
|
else:
|
|
1195
1226
|
assert False
|
|
@@ -1209,7 +1240,7 @@ def make_test_spendbundle(coin: Coin, *, fee: int = 0, eligible_spend: bool = Fa
|
|
|
1209
1240
|
async def send_spendbundle(
|
|
1210
1241
|
mempool_manager: MempoolManager,
|
|
1211
1242
|
sb: SpendBundle,
|
|
1212
|
-
expected_result:
|
|
1243
|
+
expected_result: tuple[MempoolInclusionStatus, Optional[Err]] = (MempoolInclusionStatus.SUCCESS, None),
|
|
1213
1244
|
) -> None:
|
|
1214
1245
|
result = await add_spendbundle(mempool_manager, sb, sb.name())
|
|
1215
1246
|
assert (result[1], result[2]) == expected_result
|
|
@@ -1220,7 +1251,7 @@ async def make_and_send_spendbundle(
|
|
|
1220
1251
|
coin: Coin,
|
|
1221
1252
|
*,
|
|
1222
1253
|
fee: int = 0,
|
|
1223
|
-
expected_result:
|
|
1254
|
+
expected_result: tuple[MempoolInclusionStatus, Optional[Err]] = (MempoolInclusionStatus.SUCCESS, None),
|
|
1224
1255
|
) -> SpendBundle:
|
|
1225
1256
|
sb = make_test_spendbundle(coin, fee=fee)
|
|
1226
1257
|
await send_spendbundle(mempool_manager, sb, expected_result)
|
|
@@ -1529,8 +1560,8 @@ async def test_coin_spending_different_ways_then_finding_it_spent_in_new_peak(ne
|
|
|
1529
1560
|
coin_id = coin.name()
|
|
1530
1561
|
test_coin_records = {coin_id: CoinRecord(coin, uint32(0), uint32(0), False, uint64(0))}
|
|
1531
1562
|
|
|
1532
|
-
async def get_coin_records(coin_ids: Collection[bytes32]) ->
|
|
1533
|
-
ret:
|
|
1563
|
+
async def get_coin_records(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
|
|
1564
|
+
ret: list[CoinRecord] = []
|
|
1534
1565
|
for name in coin_ids:
|
|
1535
1566
|
r = test_coin_records.get(name)
|
|
1536
1567
|
if r is not None:
|
|
@@ -1592,7 +1623,7 @@ async def test_identical_spend_aggregation_e2e(
|
|
|
1592
1623
|
def get_sb_names_by_coin_id(
|
|
1593
1624
|
full_node_api: FullNodeSimulator,
|
|
1594
1625
|
spent_coin_id: bytes32,
|
|
1595
|
-
) ->
|
|
1626
|
+
) -> set[bytes32]:
|
|
1596
1627
|
return {
|
|
1597
1628
|
i.spend_bundle_name
|
|
1598
1629
|
for i in full_node_api.full_node.mempool_manager.mempool.get_items_by_coin_id(spent_coin_id)
|
|
@@ -1616,7 +1647,7 @@ async def test_identical_spend_aggregation_e2e(
|
|
|
1616
1647
|
|
|
1617
1648
|
async def make_setup_and_coins(
|
|
1618
1649
|
full_node_api: FullNodeSimulator, wallet_node: WalletNode
|
|
1619
|
-
) ->
|
|
1650
|
+
) -> tuple[Wallet, list[WalletCoinRecord], bytes32]:
|
|
1620
1651
|
wallet = wallet_node.wallet_state_manager.main_wallet
|
|
1621
1652
|
ph = await wallet.get_new_puzzlehash()
|
|
1622
1653
|
phs = [await wallet.get_new_puzzlehash() for _ in range(3)]
|
|
@@ -1712,7 +1743,7 @@ async def test_identical_spend_aggregation_e2e(
|
|
|
1712
1743
|
assert tx_f.spend_bundle is not None
|
|
1713
1744
|
# Create transaction E now that spends e_coin to create another eligible
|
|
1714
1745
|
# coin as well as the announcement consumed by D and F
|
|
1715
|
-
conditions:
|
|
1746
|
+
conditions: list[list[Any]] = [
|
|
1716
1747
|
[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, 42],
|
|
1717
1748
|
[ConditionOpcode.CREATE_COIN_ANNOUNCEMENT, message],
|
|
1718
1749
|
]
|
|
@@ -1898,7 +1929,7 @@ async def test_identical_spend_aggregation_e2e(
|
|
|
1898
1929
|
),
|
|
1899
1930
|
],
|
|
1900
1931
|
)
|
|
1901
|
-
async def test_mempool_timelocks(cond1:
|
|
1932
|
+
async def test_mempool_timelocks(cond1: list[object], cond2: list[object], expected: Optional[Err]) -> None:
|
|
1902
1933
|
coins = []
|
|
1903
1934
|
test_coin_records = {}
|
|
1904
1935
|
|
|
@@ -1909,8 +1940,8 @@ async def test_mempool_timelocks(cond1: List[object], cond2: List[object], expec
|
|
|
1909
1940
|
coins.append(coin)
|
|
1910
1941
|
test_coin_records[coin.name()] = CoinRecord(coin, uint32(20), uint32(0), False, uint64(2000))
|
|
1911
1942
|
|
|
1912
|
-
async def get_coin_records(coin_ids: Collection[bytes32]) ->
|
|
1913
|
-
ret:
|
|
1943
|
+
async def get_coin_records(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
|
|
1944
|
+
ret: list[CoinRecord] = []
|
|
1914
1945
|
for name in coin_ids:
|
|
1915
1946
|
r = test_coin_records.get(name)
|
|
1916
1947
|
if r is not None:
|
|
@@ -1987,7 +2018,7 @@ async def test_fill_rate_block_validation(
|
|
|
1987
2018
|
|
|
1988
2019
|
async def fill_mempool_with_test_sbs(
|
|
1989
2020
|
full_node_api: FullNodeSimulator,
|
|
1990
|
-
) ->
|
|
2021
|
+
) -> list[tuple[bytes32, SerializedProgram, bytes32]]:
|
|
1991
2022
|
coins_and_puzzles = []
|
|
1992
2023
|
# Create different puzzles and use different (parent) coins to reduce
|
|
1993
2024
|
# the effects of block compression as much as possible.
|
|
@@ -2015,9 +2046,7 @@ async def test_fill_rate_block_validation(
|
|
|
2015
2046
|
# and without them we won't be able to get the test bundle in.
|
|
2016
2047
|
# This defaults to `MAX_BLOCK_COST_CLVM // 2`
|
|
2017
2048
|
full_node_api.full_node._mempool_manager.max_tx_clvm_cost = max_block_clvm_cost
|
|
2018
|
-
# This defaults to `MAX_BLOCK_COST_CLVM
|
|
2019
|
-
# TODO: Revisit this when we eventually raise the fille rate to 100%
|
|
2020
|
-
# and `BLOCK_SIZE_LIMIT_FACTOR` is no longer relevant.
|
|
2049
|
+
# This defaults to `MAX_BLOCK_COST_CLVM - BLOCK_OVERHEAD`
|
|
2021
2050
|
full_node_api.full_node._mempool_manager.mempool.mempool_info = dataclasses.replace(
|
|
2022
2051
|
full_node_api.full_node._mempool_manager.mempool.mempool_info,
|
|
2023
2052
|
max_block_clvm_cost=CLVMCost(max_block_clvm_cost),
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import List
|
|
4
|
-
|
|
5
3
|
import pytest
|
|
6
4
|
|
|
7
|
-
from chia._tests.util.misc import BenchmarkRunner,
|
|
5
|
+
from chia._tests.util.misc import BenchmarkRunner, wallet_height_at_least
|
|
8
6
|
from chia._tests.util.setup_nodes import OldSimulatorsAndWallets
|
|
9
7
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
8
|
+
from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
|
|
10
9
|
from chia.types.full_block import FullBlock
|
|
11
10
|
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
12
11
|
from chia.types.peer_info import PeerInfo
|
|
@@ -24,7 +23,7 @@ async def wallet_balance_at_least(wallet_node: WalletNode, balance: uint128) ->
|
|
|
24
23
|
@pytest.mark.anyio
|
|
25
24
|
async def test_mempool_update_performance(
|
|
26
25
|
wallet_nodes_mempool_perf: OldSimulatorsAndWallets,
|
|
27
|
-
default_400_blocks:
|
|
26
|
+
default_400_blocks: list[FullBlock],
|
|
28
27
|
self_hostname: str,
|
|
29
28
|
benchmark_runner: BenchmarkRunner,
|
|
30
29
|
) -> None:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
|
-
from typing import Any,
|
|
4
|
+
from typing import Any, Optional
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
7
|
from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
|
|
@@ -17,7 +17,7 @@ from chia._tests.core.mempool.test_mempool_manager import (
|
|
|
17
17
|
spend_bundle_from_conditions,
|
|
18
18
|
)
|
|
19
19
|
from chia._tests.util.key_tool import KeyTool
|
|
20
|
-
from chia.
|
|
20
|
+
from chia._tests.util.spend_sim import SimClient, SpendSim, sim_and_client
|
|
21
21
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
22
22
|
from chia.types.blockchain_format.coin import Coin
|
|
23
23
|
from chia.types.blockchain_format.program import Program
|
|
@@ -206,7 +206,7 @@ def test_perform_the_fast_forward() -> None:
|
|
|
206
206
|
parent_parent_id=test_child_coin.parent_coin_info,
|
|
207
207
|
)
|
|
208
208
|
# Start from a fresh state of fast forward spends
|
|
209
|
-
fast_forward_spends:
|
|
209
|
+
fast_forward_spends: dict[bytes32, UnspentLineageInfo] = {}
|
|
210
210
|
# Perform the fast forward on the test coin (the grandparent)
|
|
211
211
|
new_coin_spend, patched_additions = perform_the_fast_forward(
|
|
212
212
|
test_unspent_lineage_info, test_spend_data, fast_forward_spends
|
|
@@ -246,14 +246,14 @@ def sign_delegated_puz(del_puz: Program, coin: Coin) -> G2Element:
|
|
|
246
246
|
async def make_and_send_spend_bundle(
|
|
247
247
|
sim: SpendSim,
|
|
248
248
|
sim_client: SimClient,
|
|
249
|
-
coin_spends:
|
|
249
|
+
coin_spends: list[CoinSpend],
|
|
250
250
|
is_eligible_for_ff: bool = True,
|
|
251
251
|
*,
|
|
252
252
|
is_launcher_coin: bool = False,
|
|
253
253
|
signing_puzzle: Optional[Program] = None,
|
|
254
254
|
signing_coin: Optional[Coin] = None,
|
|
255
255
|
aggsig: G2Element = G2Element(),
|
|
256
|
-
) ->
|
|
256
|
+
) -> tuple[MempoolInclusionStatus, Optional[Err]]:
|
|
257
257
|
if is_launcher_coin or not is_eligible_for_ff:
|
|
258
258
|
assert signing_puzzle is not None
|
|
259
259
|
assert signing_coin is not None
|
|
@@ -268,7 +268,7 @@ async def make_and_send_spend_bundle(
|
|
|
268
268
|
return status, error
|
|
269
269
|
|
|
270
270
|
|
|
271
|
-
async def get_singleton_and_remaining_coins(sim: SpendSim) ->
|
|
271
|
+
async def get_singleton_and_remaining_coins(sim: SpendSim) -> tuple[Coin, list[Coin]]:
|
|
272
272
|
coins = await sim.all_non_reward_coins()
|
|
273
273
|
singletons = [coin for coin in coins if coin.amount & 1]
|
|
274
274
|
assert len(singletons) == 1
|
|
@@ -281,9 +281,9 @@ def make_singleton_coin_spend(
|
|
|
281
281
|
parent_coin_spend: CoinSpend,
|
|
282
282
|
coin_to_spend: Coin,
|
|
283
283
|
inner_puzzle: Program,
|
|
284
|
-
inner_conditions:
|
|
284
|
+
inner_conditions: list[list[Any]],
|
|
285
285
|
is_eve_spend: bool = False,
|
|
286
|
-
) ->
|
|
286
|
+
) -> tuple[CoinSpend, Program]:
|
|
287
287
|
lineage_proof = singleton_top_layer.lineage_proof_for_coinsol(parent_coin_spend)
|
|
288
288
|
delegated_puzzle = Program.to((1, inner_conditions))
|
|
289
289
|
inner_solution = Program.to([[], delegated_puzzle, []])
|
|
@@ -300,7 +300,7 @@ def make_singleton_coin_spend(
|
|
|
300
300
|
|
|
301
301
|
async def prepare_singleton_eve(
|
|
302
302
|
sim: SpendSim, sim_client: SimClient, is_eligible_for_ff: bool, start_amount: uint64, singleton_amount: uint64
|
|
303
|
-
) ->
|
|
303
|
+
) -> tuple[Program, CoinSpend, Program]:
|
|
304
304
|
# Generate starting info
|
|
305
305
|
key_lookup = KeyTool()
|
|
306
306
|
pk = G1Element.from_bytes(public_key_for_index(1, key_lookup))
|
|
@@ -350,7 +350,7 @@ async def prepare_singleton_eve(
|
|
|
350
350
|
|
|
351
351
|
async def prepare_and_test_singleton(
|
|
352
352
|
sim: SpendSim, sim_client: SimClient, is_eligible_for_ff: bool, start_amount: uint64, singleton_amount: uint64
|
|
353
|
-
) ->
|
|
353
|
+
) -> tuple[Coin, CoinSpend, Program, Coin]:
|
|
354
354
|
inner_puzzle, eve_coin_spend, eve_signing_puzzle = await prepare_singleton_eve(
|
|
355
355
|
sim, sim_client, is_eligible_for_ff, start_amount, singleton_amount
|
|
356
356
|
)
|
|
@@ -407,7 +407,7 @@ async def test_singleton_fast_forward_different_block(is_eligible_for_ff: bool)
|
|
|
407
407
|
sk = AugSchemeMPL.key_gen(b"1" * 32)
|
|
408
408
|
g1 = sk.get_g1()
|
|
409
409
|
sig = AugSchemeMPL.sign(sk, b"foobar", g1)
|
|
410
|
-
inner_conditions:
|
|
410
|
+
inner_conditions: list[list[Any]] = [
|
|
411
411
|
[ConditionOpcode.AGG_SIG_UNSAFE, bytes(g1), b"foobar"],
|
|
412
412
|
[ConditionOpcode.CREATE_COIN, inner_puzzle_hash, SINGLETON_CHILD_AMOUNT],
|
|
413
413
|
]
|
|
@@ -501,7 +501,7 @@ async def test_singleton_fast_forward_same_block() -> None:
|
|
|
501
501
|
sk = AugSchemeMPL.key_gen(b"9" * 32)
|
|
502
502
|
g1 = sk.get_g1()
|
|
503
503
|
sig = AugSchemeMPL.sign(sk, b"foobar", g1)
|
|
504
|
-
inner_conditions:
|
|
504
|
+
inner_conditions: list[list[Any]] = [
|
|
505
505
|
[ConditionOpcode.AGG_SIG_UNSAFE, bytes(g1), b"foobar"],
|
|
506
506
|
[ConditionOpcode.CREATE_COIN, inner_puzzle_hash, SINGLETON_CHILD_AMOUNT],
|
|
507
507
|
]
|