chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__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.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.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.0rc2.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
import logging
|
|
5
5
|
import random
|
|
6
|
-
from typing import Callable,
|
|
6
|
+
from typing import Callable, Optional
|
|
7
7
|
|
|
8
8
|
import pytest
|
|
9
9
|
from chia_rs import G1Element, G2Element, get_flags_for_height_and_constants
|
|
@@ -24,6 +24,7 @@ from chia._tests.core.mempool.test_mempool_manager import (
|
|
|
24
24
|
spend_bundle_from_conditions,
|
|
25
25
|
)
|
|
26
26
|
from chia._tests.core.node_height import node_height_at_least
|
|
27
|
+
from chia._tests.util.get_name_puzzle_conditions import get_name_puzzle_conditions
|
|
27
28
|
from chia._tests.util.misc import BenchmarkRunner, invariant_check_mempool
|
|
28
29
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
29
30
|
from chia.consensus.condition_costs import ConditionCost
|
|
@@ -33,14 +34,16 @@ from chia.full_node.bitcoin_fee_estimator import create_bitcoin_fee_estimator
|
|
|
33
34
|
from chia.full_node.fee_estimation import EmptyMempoolInfo, MempoolInfo
|
|
34
35
|
from chia.full_node.full_node_api import FullNodeAPI
|
|
35
36
|
from chia.full_node.mempool import Mempool
|
|
36
|
-
from chia.full_node.mempool_check_conditions import
|
|
37
|
+
from chia.full_node.mempool_check_conditions import get_puzzle_and_solution_for_coin
|
|
37
38
|
from chia.full_node.mempool_manager import MEMPOOL_MIN_FEE_INCREASE
|
|
38
39
|
from chia.full_node.pending_tx_cache import ConflictTxCache, PendingTxCache
|
|
39
40
|
from chia.protocols import full_node_protocol, wallet_protocol
|
|
40
41
|
from chia.protocols.wallet_protocol import TransactionAck
|
|
42
|
+
from chia.server.api_protocol import ApiMetadata
|
|
41
43
|
from chia.server.outbound_message import Message
|
|
42
44
|
from chia.server.server import ChiaServer
|
|
43
45
|
from chia.server.ws_connection import WSChiaConnection
|
|
46
|
+
from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
|
|
44
47
|
from chia.simulator.block_tools import BlockTools, test_constants
|
|
45
48
|
from chia.simulator.full_node_simulator import FullNodeSimulator
|
|
46
49
|
from chia.simulator.simulator_protocol import FarmNewBlockProtocol
|
|
@@ -61,7 +64,6 @@ from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
|
61
64
|
from chia.types.mempool_item import MempoolItem
|
|
62
65
|
from chia.types.spend_bundle import SpendBundle, estimate_fees
|
|
63
66
|
from chia.types.spend_bundle_conditions import SpendBundleConditions
|
|
64
|
-
from chia.util.api_decorators import api_request
|
|
65
67
|
from chia.util.errors import Err
|
|
66
68
|
from chia.util.hash import std_hash
|
|
67
69
|
from chia.util.ints import uint32, uint64
|
|
@@ -90,7 +92,7 @@ def wallet_a(bt: BlockTools) -> WalletTool:
|
|
|
90
92
|
def generate_test_spend_bundle(
|
|
91
93
|
wallet: WalletTool,
|
|
92
94
|
coin: Coin,
|
|
93
|
-
condition_dic: Optional[
|
|
95
|
+
condition_dic: Optional[dict[ConditionOpcode, list[ConditionWithArgs]]] = None,
|
|
94
96
|
fee: uint64 = uint64(0),
|
|
95
97
|
amount: uint64 = uint64(1000),
|
|
96
98
|
new_puzzle_hash: bytes32 = BURN_PUZZLE_HASH,
|
|
@@ -109,7 +111,7 @@ def make_item(
|
|
|
109
111
|
return MempoolItem(
|
|
110
112
|
SpendBundle([], G2Element()),
|
|
111
113
|
fee,
|
|
112
|
-
SpendBundleConditions([], 0, 0, 0, None, None, [], cost, 0, 0, False),
|
|
114
|
+
SpendBundleConditions([], 0, 0, 0, None, None, [], cost, 0, 0, False, 0, 0),
|
|
113
115
|
spend_bundle_name,
|
|
114
116
|
uint32(0),
|
|
115
117
|
assert_height,
|
|
@@ -307,9 +309,9 @@ class TestPendingTxCache:
|
|
|
307
309
|
class TestMempool:
|
|
308
310
|
@pytest.mark.anyio
|
|
309
311
|
async def test_basic_mempool(
|
|
310
|
-
self, one_node_one_block:
|
|
312
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
311
313
|
) -> None:
|
|
312
|
-
full_node_1,
|
|
314
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
313
315
|
|
|
314
316
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
315
317
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
@@ -328,14 +330,19 @@ class TestMempool:
|
|
|
328
330
|
assert spend_bundle is not None
|
|
329
331
|
|
|
330
332
|
|
|
331
|
-
|
|
333
|
+
metadata = ApiMetadata()
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
# this (method'ish) function is not designed per normal uses so allowing the ignore
|
|
337
|
+
# for the different return type. normal is Optional[Message]
|
|
338
|
+
@metadata.request(peer_required=True, bytes_required=True) # type: ignore[type-var]
|
|
332
339
|
async def respond_transaction(
|
|
333
340
|
self: FullNodeAPI,
|
|
334
341
|
tx: full_node_protocol.RespondTransaction,
|
|
335
342
|
peer: WSChiaConnection,
|
|
336
343
|
tx_bytes: bytes = b"",
|
|
337
344
|
test: bool = False,
|
|
338
|
-
) ->
|
|
345
|
+
) -> tuple[MempoolInclusionStatus, Optional[Err]]:
|
|
339
346
|
"""
|
|
340
347
|
Receives a full transaction from peer.
|
|
341
348
|
If tx is added to mempool, send tx_id to others. (new_transaction)
|
|
@@ -367,8 +374,7 @@ async def next_block(full_node_1: FullNodeSimulator, wallet_a: WalletTool, bt: B
|
|
|
367
374
|
time_per_block=10,
|
|
368
375
|
)
|
|
369
376
|
|
|
370
|
-
|
|
371
|
-
await full_node_1.full_node.add_block(block)
|
|
377
|
+
await add_blocks_in_batches(blocks, full_node_1.full_node)
|
|
372
378
|
|
|
373
379
|
await time_out_assert(60, node_height_at_least, True, full_node_1, start_height + 1)
|
|
374
380
|
return blocks[-1].get_included_reward_coins()[0]
|
|
@@ -394,11 +400,11 @@ class TestMempoolManager:
|
|
|
394
400
|
@pytest.mark.anyio
|
|
395
401
|
async def test_basic_mempool_manager(
|
|
396
402
|
self,
|
|
397
|
-
two_nodes_one_block:
|
|
403
|
+
two_nodes_one_block: tuple[FullNodeSimulator, FullNodeSimulator, ChiaServer, ChiaServer, BlockTools],
|
|
398
404
|
wallet_a: WalletTool,
|
|
399
405
|
self_hostname: str,
|
|
400
406
|
) -> None:
|
|
401
|
-
full_node_1,
|
|
407
|
+
full_node_1, _full_node_2, server_1, server_2, bt = two_nodes_one_block
|
|
402
408
|
|
|
403
409
|
peer = await connect_and_get_peer(server_1, server_2, self_hostname)
|
|
404
410
|
|
|
@@ -455,7 +461,7 @@ class TestMempoolManager:
|
|
|
455
461
|
)
|
|
456
462
|
async def test_ephemeral_timelock(
|
|
457
463
|
self,
|
|
458
|
-
one_node_one_block:
|
|
464
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
459
465
|
wallet_a: WalletTool,
|
|
460
466
|
opcode: ConditionOpcode,
|
|
461
467
|
lock_value: int,
|
|
@@ -473,10 +479,10 @@ class TestMempoolManager:
|
|
|
473
479
|
bundle = SpendBundle.aggregate([tx1, tx2])
|
|
474
480
|
return bundle
|
|
475
481
|
|
|
476
|
-
full_node_1,
|
|
482
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
477
483
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
478
484
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
479
|
-
|
|
485
|
+
_blocks, bundle, status, err = await self.condition_tester2(one_node_one_block, wallet_a, test_fun)
|
|
480
486
|
mempool_bundle = full_node_1.full_node.mempool_manager.get_spendbundle(bundle.name())
|
|
481
487
|
|
|
482
488
|
print(f"opcode={opcode} timelock_value={lock_value} expected={expected} status={status}")
|
|
@@ -495,7 +501,7 @@ class TestMempoolManager:
|
|
|
495
501
|
# another spend, even though the assert condition is duplicated 100 times
|
|
496
502
|
@pytest.mark.anyio
|
|
497
503
|
async def test_coin_announcement_duplicate_consumed(
|
|
498
|
-
self, one_node_one_block:
|
|
504
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
499
505
|
) -> None:
|
|
500
506
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
501
507
|
announce = AssertCoinAnnouncement(asserted_id=coin_2.name(), asserted_msg=b"test")
|
|
@@ -509,8 +515,8 @@ class TestMempoolManager:
|
|
|
509
515
|
bundle = SpendBundle.aggregate([spend_bundle1, spend_bundle2])
|
|
510
516
|
return bundle
|
|
511
517
|
|
|
512
|
-
full_node_1,
|
|
513
|
-
|
|
518
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
519
|
+
_blocks, bundle, status, err = await self.condition_tester2(one_node_one_block, wallet_a, test_fun)
|
|
514
520
|
mempool_bundle = full_node_1.full_node.mempool_manager.get_spendbundle(bundle.name())
|
|
515
521
|
|
|
516
522
|
assert err is None
|
|
@@ -521,7 +527,7 @@ class TestMempoolManager:
|
|
|
521
527
|
# another spend, even though the create announcement is duplicated 100 times
|
|
522
528
|
@pytest.mark.anyio
|
|
523
529
|
async def test_coin_duplicate_announcement_consumed(
|
|
524
|
-
self, one_node_one_block:
|
|
530
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
525
531
|
) -> None:
|
|
526
532
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
527
533
|
announce = AssertCoinAnnouncement(asserted_id=coin_2.name(), asserted_msg=b"test")
|
|
@@ -535,8 +541,8 @@ class TestMempoolManager:
|
|
|
535
541
|
bundle = SpendBundle.aggregate([spend_bundle1, spend_bundle2])
|
|
536
542
|
return bundle
|
|
537
543
|
|
|
538
|
-
full_node_1,
|
|
539
|
-
|
|
544
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
545
|
+
_blocks, bundle, status, err = await self.condition_tester2(one_node_one_block, wallet_a, test_fun)
|
|
540
546
|
mempool_bundle = full_node_1.full_node.mempool_manager.get_spendbundle(bundle.name())
|
|
541
547
|
|
|
542
548
|
assert err is None
|
|
@@ -546,12 +552,12 @@ class TestMempoolManager:
|
|
|
546
552
|
@pytest.mark.anyio
|
|
547
553
|
async def test_double_spend(
|
|
548
554
|
self,
|
|
549
|
-
two_nodes_one_block:
|
|
555
|
+
two_nodes_one_block: tuple[FullNodeSimulator, FullNodeSimulator, ChiaServer, ChiaServer, BlockTools],
|
|
550
556
|
wallet_a: WalletTool,
|
|
551
557
|
self_hostname: str,
|
|
552
558
|
) -> None:
|
|
553
559
|
reward_ph = wallet_a.get_new_puzzlehash()
|
|
554
|
-
full_node_1,
|
|
560
|
+
full_node_1, _full_node_2, server_1, server_2, bt = two_nodes_one_block
|
|
555
561
|
blocks = await full_node_1.get_all_full_blocks()
|
|
556
562
|
start_height = blocks[-1].height
|
|
557
563
|
blocks = bt.get_consecutive_blocks(
|
|
@@ -563,8 +569,7 @@ class TestMempoolManager:
|
|
|
563
569
|
)
|
|
564
570
|
peer = await connect_and_get_peer(server_1, server_2, self_hostname)
|
|
565
571
|
|
|
566
|
-
|
|
567
|
-
await full_node_1.full_node.add_block(block)
|
|
572
|
+
await add_blocks_in_batches(blocks, full_node_1.full_node)
|
|
568
573
|
await time_out_assert(60, node_height_at_least, True, full_node_1, start_height + 3)
|
|
569
574
|
|
|
570
575
|
spend_bundle1 = generate_test_spend_bundle(wallet_a, blocks[-1].get_included_reward_coins()[0])
|
|
@@ -594,7 +599,7 @@ class TestMempoolManager:
|
|
|
594
599
|
|
|
595
600
|
@pytest.mark.anyio
|
|
596
601
|
async def test_double_spend_with_higher_fee(
|
|
597
|
-
self, one_node_one_block:
|
|
602
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
598
603
|
) -> None:
|
|
599
604
|
full_node_1, _, bt = one_node_one_block
|
|
600
605
|
blocks = await full_node_1.get_all_full_blocks()
|
|
@@ -609,8 +614,7 @@ class TestMempoolManager:
|
|
|
609
614
|
)
|
|
610
615
|
|
|
611
616
|
invariant_check_mempool(full_node_1.full_node.mempool_manager.mempool)
|
|
612
|
-
|
|
613
|
-
await full_node_1.full_node.add_block(block)
|
|
617
|
+
await add_blocks_in_batches(blocks, full_node_1.full_node)
|
|
614
618
|
await time_out_assert(60, node_height_at_least, True, full_node_1, start_height + 3)
|
|
615
619
|
|
|
616
620
|
coins = iter(blocks[-1].get_included_reward_coins())
|
|
@@ -677,11 +681,11 @@ class TestMempoolManager:
|
|
|
677
681
|
|
|
678
682
|
@pytest.mark.anyio
|
|
679
683
|
async def test_invalid_signature(
|
|
680
|
-
self, one_node_one_block:
|
|
684
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
681
685
|
) -> None:
|
|
682
686
|
reward_ph = wallet_a.get_new_puzzlehash()
|
|
683
687
|
|
|
684
|
-
full_node_1,
|
|
688
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
685
689
|
blocks = await full_node_1.get_all_full_blocks()
|
|
686
690
|
start_height = blocks[-1].height if len(blocks) > 0 else -1
|
|
687
691
|
blocks = bt.get_consecutive_blocks(
|
|
@@ -692,8 +696,7 @@ class TestMempoolManager:
|
|
|
692
696
|
pool_reward_puzzle_hash=reward_ph,
|
|
693
697
|
)
|
|
694
698
|
|
|
695
|
-
|
|
696
|
-
await full_node_1.full_node.add_block(block)
|
|
699
|
+
await add_blocks_in_batches(blocks, full_node_1.full_node)
|
|
697
700
|
await time_out_assert(60, node_height_at_least, True, full_node_1, start_height + 3)
|
|
698
701
|
|
|
699
702
|
coins = iter(blocks[-1].get_included_reward_coins())
|
|
@@ -711,13 +714,13 @@ class TestMempoolManager:
|
|
|
711
714
|
|
|
712
715
|
async def condition_tester(
|
|
713
716
|
self,
|
|
714
|
-
one_node_one_block:
|
|
717
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
715
718
|
wallet_a: WalletTool,
|
|
716
|
-
dic:
|
|
719
|
+
dic: dict[ConditionOpcode, list[ConditionWithArgs]],
|
|
717
720
|
fee: int = 0,
|
|
718
721
|
num_blocks: int = 3,
|
|
719
722
|
coin: Optional[Coin] = None,
|
|
720
|
-
) ->
|
|
723
|
+
) -> tuple[list[FullBlock], SpendBundle, WSChiaConnection, MempoolInclusionStatus, Optional[Err]]:
|
|
721
724
|
reward_ph = wallet_a.get_new_puzzlehash()
|
|
722
725
|
full_node_1, server_1, bt = one_node_one_block
|
|
723
726
|
blocks = await full_node_1.get_all_full_blocks()
|
|
@@ -737,13 +740,12 @@ class TestMempoolManager:
|
|
|
737
740
|
else:
|
|
738
741
|
raise Exception("dummy peer not found")
|
|
739
742
|
|
|
740
|
-
|
|
741
|
-
await full_node_1.full_node.add_block(block)
|
|
743
|
+
await add_blocks_in_batches(blocks, full_node_1.full_node)
|
|
742
744
|
|
|
743
745
|
await time_out_assert(60, node_height_at_least, True, full_node_1, start_height + num_blocks)
|
|
744
746
|
|
|
745
747
|
spend_bundle1 = generate_test_spend_bundle(
|
|
746
|
-
wallet_a, coin or
|
|
748
|
+
wallet_a, coin or blocks[-num_blocks + 2].get_included_reward_coins()[0], dic, uint64(fee)
|
|
747
749
|
)
|
|
748
750
|
|
|
749
751
|
assert spend_bundle1 is not None
|
|
@@ -756,10 +758,10 @@ class TestMempoolManager:
|
|
|
756
758
|
@pytest.mark.anyio
|
|
757
759
|
async def condition_tester2(
|
|
758
760
|
self,
|
|
759
|
-
node_server_bt:
|
|
761
|
+
node_server_bt: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
760
762
|
wallet_a: WalletTool,
|
|
761
763
|
test_fun: Callable[[Coin, Coin], SpendBundle],
|
|
762
|
-
) ->
|
|
764
|
+
) -> tuple[list[FullBlock], SpendBundle, MempoolInclusionStatus, Optional[Err]]:
|
|
763
765
|
reward_ph = wallet_a.get_new_puzzlehash()
|
|
764
766
|
full_node_1, server_1, bt = node_server_bt
|
|
765
767
|
blocks = await full_node_1.get_all_full_blocks()
|
|
@@ -780,8 +782,7 @@ class TestMempoolManager:
|
|
|
780
782
|
else:
|
|
781
783
|
raise Exception("dummy peer not found")
|
|
782
784
|
|
|
783
|
-
|
|
784
|
-
await full_node_1.full_node.add_block(block)
|
|
785
|
+
await add_blocks_in_batches(blocks, full_node_1.full_node)
|
|
785
786
|
|
|
786
787
|
await time_out_assert(60, node_height_at_least, True, full_node_1, start_height + 3)
|
|
787
788
|
|
|
@@ -797,9 +798,9 @@ class TestMempoolManager:
|
|
|
797
798
|
|
|
798
799
|
@pytest.mark.anyio
|
|
799
800
|
async def test_invalid_block_index(
|
|
800
|
-
self, one_node_one_block:
|
|
801
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
801
802
|
) -> None:
|
|
802
|
-
full_node_1,
|
|
803
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
803
804
|
blocks = await full_node_1.get_all_full_blocks()
|
|
804
805
|
start_height = blocks[-1].height
|
|
805
806
|
cvp = ConditionWithArgs(
|
|
@@ -807,7 +808,7 @@ class TestMempoolManager:
|
|
|
807
808
|
[int_to_bytes(start_height + 5)],
|
|
808
809
|
)
|
|
809
810
|
dic = {ConditionOpcode.ASSERT_HEIGHT_ABSOLUTE: [cvp]}
|
|
810
|
-
blocks, spend_bundle1,
|
|
811
|
+
blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
811
812
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
812
813
|
assert sb1 is None
|
|
813
814
|
# the transaction may become valid later
|
|
@@ -816,12 +817,12 @@ class TestMempoolManager:
|
|
|
816
817
|
|
|
817
818
|
@pytest.mark.anyio
|
|
818
819
|
async def test_block_index_missing_arg(
|
|
819
|
-
self, one_node_one_block:
|
|
820
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
820
821
|
) -> None:
|
|
821
|
-
full_node_1,
|
|
822
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
822
823
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_HEIGHT_ABSOLUTE, [])
|
|
823
824
|
dic = {ConditionOpcode.ASSERT_HEIGHT_ABSOLUTE: [cvp]}
|
|
824
|
-
|
|
825
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
825
826
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
826
827
|
assert sb1 is None
|
|
827
828
|
# the transaction may become valid later
|
|
@@ -830,12 +831,12 @@ class TestMempoolManager:
|
|
|
830
831
|
|
|
831
832
|
@pytest.mark.anyio
|
|
832
833
|
async def test_correct_block_index(
|
|
833
|
-
self, one_node_one_block:
|
|
834
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
834
835
|
) -> None:
|
|
835
|
-
full_node_1,
|
|
836
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
836
837
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_HEIGHT_ABSOLUTE, [int_to_bytes(1)])
|
|
837
838
|
dic = {ConditionOpcode.ASSERT_HEIGHT_ABSOLUTE: [cvp]}
|
|
838
|
-
|
|
839
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
839
840
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
840
841
|
assert err is None
|
|
841
842
|
assert sb1 == spend_bundle1
|
|
@@ -843,14 +844,14 @@ class TestMempoolManager:
|
|
|
843
844
|
|
|
844
845
|
@pytest.mark.anyio
|
|
845
846
|
async def test_block_index_garbage(
|
|
846
|
-
self, one_node_one_block:
|
|
847
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
847
848
|
) -> None:
|
|
848
|
-
full_node_1,
|
|
849
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
849
850
|
# garbage at the end of the argument list is ignored in consensus mode,
|
|
850
851
|
# but not in mempool-mode
|
|
851
852
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_HEIGHT_ABSOLUTE, [int_to_bytes(1), b"garbage"])
|
|
852
853
|
dic = {ConditionOpcode.ASSERT_HEIGHT_ABSOLUTE: [cvp]}
|
|
853
|
-
|
|
854
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
854
855
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
855
856
|
assert err is Err.INVALID_CONDITION
|
|
856
857
|
assert sb1 is None
|
|
@@ -858,12 +859,12 @@ class TestMempoolManager:
|
|
|
858
859
|
|
|
859
860
|
@pytest.mark.anyio
|
|
860
861
|
async def test_negative_block_index(
|
|
861
|
-
self, one_node_one_block:
|
|
862
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
862
863
|
) -> None:
|
|
863
|
-
full_node_1,
|
|
864
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
864
865
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_HEIGHT_ABSOLUTE, [int_to_bytes(-1)])
|
|
865
866
|
dic = {ConditionOpcode.ASSERT_HEIGHT_ABSOLUTE: [cvp]}
|
|
866
|
-
|
|
867
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
867
868
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
868
869
|
assert err is None
|
|
869
870
|
assert sb1 == spend_bundle1
|
|
@@ -871,12 +872,12 @@ class TestMempoolManager:
|
|
|
871
872
|
|
|
872
873
|
@pytest.mark.anyio
|
|
873
874
|
async def test_invalid_block_age(
|
|
874
|
-
self, one_node_one_block:
|
|
875
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
875
876
|
) -> None:
|
|
876
|
-
full_node_1,
|
|
877
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
877
878
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_HEIGHT_RELATIVE, [int_to_bytes(5)])
|
|
878
879
|
dic = {cvp.opcode: [cvp]}
|
|
879
|
-
|
|
880
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
880
881
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
881
882
|
assert err == Err.ASSERT_HEIGHT_RELATIVE_FAILED
|
|
882
883
|
assert sb1 is None
|
|
@@ -885,12 +886,12 @@ class TestMempoolManager:
|
|
|
885
886
|
|
|
886
887
|
@pytest.mark.anyio
|
|
887
888
|
async def test_block_age_missing_arg(
|
|
888
|
-
self, one_node_one_block:
|
|
889
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
889
890
|
) -> None:
|
|
890
|
-
full_node_1,
|
|
891
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
891
892
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_HEIGHT_RELATIVE, [])
|
|
892
893
|
dic = {cvp.opcode: [cvp]}
|
|
893
|
-
|
|
894
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
894
895
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
895
896
|
assert err == Err.INVALID_CONDITION
|
|
896
897
|
assert sb1 is None
|
|
@@ -899,12 +900,12 @@ class TestMempoolManager:
|
|
|
899
900
|
|
|
900
901
|
@pytest.mark.anyio
|
|
901
902
|
async def test_correct_block_age(
|
|
902
|
-
self, one_node_one_block:
|
|
903
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
903
904
|
) -> None:
|
|
904
|
-
full_node_1,
|
|
905
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
905
906
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_HEIGHT_RELATIVE, [int_to_bytes(1)])
|
|
906
907
|
dic = {cvp.opcode: [cvp]}
|
|
907
|
-
|
|
908
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
908
909
|
one_node_one_block, wallet_a, dic, num_blocks=4
|
|
909
910
|
)
|
|
910
911
|
|
|
@@ -915,14 +916,14 @@ class TestMempoolManager:
|
|
|
915
916
|
|
|
916
917
|
@pytest.mark.anyio
|
|
917
918
|
async def test_block_age_garbage(
|
|
918
|
-
self, one_node_one_block:
|
|
919
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
919
920
|
) -> None:
|
|
920
|
-
full_node_1,
|
|
921
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
921
922
|
# garbage at the end of the argument list is ignored in consensus mode,
|
|
922
923
|
# but not in mempool mode
|
|
923
924
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_HEIGHT_RELATIVE, [int_to_bytes(1), b"garbage"])
|
|
924
925
|
dic = {cvp.opcode: [cvp]}
|
|
925
|
-
|
|
926
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
926
927
|
one_node_one_block, wallet_a, dic, num_blocks=4
|
|
927
928
|
)
|
|
928
929
|
|
|
@@ -933,12 +934,12 @@ class TestMempoolManager:
|
|
|
933
934
|
|
|
934
935
|
@pytest.mark.anyio
|
|
935
936
|
async def test_negative_block_age(
|
|
936
|
-
self, one_node_one_block:
|
|
937
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
937
938
|
) -> None:
|
|
938
|
-
full_node_1,
|
|
939
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
939
940
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_HEIGHT_RELATIVE, [int_to_bytes(-1)])
|
|
940
941
|
dic = {cvp.opcode: [cvp]}
|
|
941
|
-
|
|
942
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
942
943
|
one_node_one_block, wallet_a, dic, num_blocks=4
|
|
943
944
|
)
|
|
944
945
|
|
|
@@ -949,16 +950,16 @@ class TestMempoolManager:
|
|
|
949
950
|
|
|
950
951
|
@pytest.mark.anyio
|
|
951
952
|
async def test_correct_my_id(
|
|
952
|
-
self, one_node_one_block:
|
|
953
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
953
954
|
) -> None:
|
|
954
|
-
full_node_1,
|
|
955
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
955
956
|
|
|
956
957
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
957
958
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
958
959
|
coin = await next_block(full_node_1, wallet_a, bt)
|
|
959
960
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_COIN_ID, [coin.name()])
|
|
960
961
|
dic = {cvp.opcode: [cvp]}
|
|
961
|
-
|
|
962
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
962
963
|
one_node_one_block, wallet_a, dic, coin=coin
|
|
963
964
|
)
|
|
964
965
|
|
|
@@ -969,9 +970,9 @@ class TestMempoolManager:
|
|
|
969
970
|
|
|
970
971
|
@pytest.mark.anyio
|
|
971
972
|
async def test_my_id_garbage(
|
|
972
|
-
self, one_node_one_block:
|
|
973
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
973
974
|
) -> None:
|
|
974
|
-
full_node_1,
|
|
975
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
975
976
|
|
|
976
977
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
977
978
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
@@ -980,7 +981,7 @@ class TestMempoolManager:
|
|
|
980
981
|
# but not in mempool mode
|
|
981
982
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_COIN_ID, [coin.name(), b"garbage"])
|
|
982
983
|
dic = {cvp.opcode: [cvp]}
|
|
983
|
-
|
|
984
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
984
985
|
one_node_one_block, wallet_a, dic, coin=coin
|
|
985
986
|
)
|
|
986
987
|
|
|
@@ -991,9 +992,9 @@ class TestMempoolManager:
|
|
|
991
992
|
|
|
992
993
|
@pytest.mark.anyio
|
|
993
994
|
async def test_invalid_my_id(
|
|
994
|
-
self, one_node_one_block:
|
|
995
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
995
996
|
) -> None:
|
|
996
|
-
full_node_1,
|
|
997
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
997
998
|
|
|
998
999
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
999
1000
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
@@ -1001,7 +1002,7 @@ class TestMempoolManager:
|
|
|
1001
1002
|
coin_2 = await next_block(full_node_1, wallet_a, bt)
|
|
1002
1003
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_COIN_ID, [coin_2.name()])
|
|
1003
1004
|
dic = {cvp.opcode: [cvp]}
|
|
1004
|
-
|
|
1005
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
1005
1006
|
one_node_one_block, wallet_a, dic, coin=coin
|
|
1006
1007
|
)
|
|
1007
1008
|
|
|
@@ -1012,12 +1013,12 @@ class TestMempoolManager:
|
|
|
1012
1013
|
|
|
1013
1014
|
@pytest.mark.anyio
|
|
1014
1015
|
async def test_my_id_missing_arg(
|
|
1015
|
-
self, one_node_one_block:
|
|
1016
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1016
1017
|
) -> None:
|
|
1017
|
-
full_node_1,
|
|
1018
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1018
1019
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_COIN_ID, [])
|
|
1019
1020
|
dic = {cvp.opcode: [cvp]}
|
|
1020
|
-
|
|
1021
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
1021
1022
|
|
|
1022
1023
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
1023
1024
|
assert err == Err.INVALID_CONDITION
|
|
@@ -1026,7 +1027,7 @@ class TestMempoolManager:
|
|
|
1026
1027
|
|
|
1027
1028
|
@pytest.mark.anyio
|
|
1028
1029
|
async def test_assert_time_exceeds(
|
|
1029
|
-
self, one_node_one_block:
|
|
1030
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1030
1031
|
) -> None:
|
|
1031
1032
|
full_node_1, _, _ = one_node_one_block
|
|
1032
1033
|
blockchain_peak = full_node_1.full_node.blockchain.get_peak()
|
|
@@ -1045,7 +1046,7 @@ class TestMempoolManager:
|
|
|
1045
1046
|
|
|
1046
1047
|
@pytest.mark.anyio
|
|
1047
1048
|
async def test_assert_time_fail(
|
|
1048
|
-
self, one_node_one_block:
|
|
1049
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1049
1050
|
) -> None:
|
|
1050
1051
|
full_node_1, _, _ = one_node_one_block
|
|
1051
1052
|
blockchain_peak = full_node_1.full_node.blockchain.get_peak()
|
|
@@ -1055,7 +1056,7 @@ class TestMempoolManager:
|
|
|
1055
1056
|
|
|
1056
1057
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_SECONDS_ABSOLUTE, [int_to_bytes(time_now)])
|
|
1057
1058
|
dic = {cvp.opcode: [cvp]}
|
|
1058
|
-
_, spend_bundle1,
|
|
1059
|
+
_, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
1059
1060
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
1060
1061
|
assert err == Err.ASSERT_SECONDS_ABSOLUTE_FAILED
|
|
1061
1062
|
assert sb1 is None
|
|
@@ -1063,7 +1064,7 @@ class TestMempoolManager:
|
|
|
1063
1064
|
|
|
1064
1065
|
@pytest.mark.anyio
|
|
1065
1066
|
async def test_assert_height_pending(
|
|
1066
|
-
self, one_node_one_block:
|
|
1067
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1067
1068
|
) -> None:
|
|
1068
1069
|
full_node_1, _, _ = one_node_one_block
|
|
1069
1070
|
blockchain_peak = full_node_1.full_node.blockchain.get_peak()
|
|
@@ -1080,14 +1081,14 @@ class TestMempoolManager:
|
|
|
1080
1081
|
|
|
1081
1082
|
@pytest.mark.anyio
|
|
1082
1083
|
async def test_assert_time_negative(
|
|
1083
|
-
self, one_node_one_block:
|
|
1084
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1084
1085
|
) -> None:
|
|
1085
|
-
full_node_1,
|
|
1086
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1086
1087
|
time_now = -1
|
|
1087
1088
|
|
|
1088
1089
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_SECONDS_ABSOLUTE, [int_to_bytes(time_now)])
|
|
1089
1090
|
dic = {cvp.opcode: [cvp]}
|
|
1090
|
-
|
|
1091
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
1091
1092
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
1092
1093
|
assert err is None
|
|
1093
1094
|
assert sb1 == spend_bundle1
|
|
@@ -1095,13 +1096,13 @@ class TestMempoolManager:
|
|
|
1095
1096
|
|
|
1096
1097
|
@pytest.mark.anyio
|
|
1097
1098
|
async def test_assert_time_missing_arg(
|
|
1098
|
-
self, one_node_one_block:
|
|
1099
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1099
1100
|
) -> None:
|
|
1100
|
-
full_node_1,
|
|
1101
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1101
1102
|
|
|
1102
1103
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_SECONDS_ABSOLUTE, [])
|
|
1103
1104
|
dic = {cvp.opcode: [cvp]}
|
|
1104
|
-
|
|
1105
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
1105
1106
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
1106
1107
|
assert err == Err.INVALID_CONDITION
|
|
1107
1108
|
assert sb1 is None
|
|
@@ -1109,7 +1110,7 @@ class TestMempoolManager:
|
|
|
1109
1110
|
|
|
1110
1111
|
@pytest.mark.anyio
|
|
1111
1112
|
async def test_assert_time_garbage(
|
|
1112
|
-
self, one_node_one_block:
|
|
1113
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1113
1114
|
) -> None:
|
|
1114
1115
|
full_node_1, _, _ = one_node_one_block
|
|
1115
1116
|
blockchain_peak = full_node_1.full_node.blockchain.get_peak()
|
|
@@ -1129,14 +1130,14 @@ class TestMempoolManager:
|
|
|
1129
1130
|
|
|
1130
1131
|
@pytest.mark.anyio
|
|
1131
1132
|
async def test_assert_time_relative_exceeds(
|
|
1132
|
-
self, one_node_one_block:
|
|
1133
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1133
1134
|
) -> None:
|
|
1134
|
-
full_node_1,
|
|
1135
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1135
1136
|
time_relative = 3
|
|
1136
1137
|
|
|
1137
1138
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_SECONDS_RELATIVE, [int_to_bytes(time_relative)])
|
|
1138
1139
|
dic = {cvp.opcode: [cvp]}
|
|
1139
|
-
|
|
1140
|
+
_blocks, spend_bundle1, peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
1140
1141
|
|
|
1141
1142
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
1142
1143
|
assert err == Err.ASSERT_SECONDS_RELATIVE_FAILED
|
|
@@ -1157,16 +1158,16 @@ class TestMempoolManager:
|
|
|
1157
1158
|
|
|
1158
1159
|
@pytest.mark.anyio
|
|
1159
1160
|
async def test_assert_time_relative_garbage(
|
|
1160
|
-
self, one_node_one_block:
|
|
1161
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1161
1162
|
) -> None:
|
|
1162
|
-
full_node_1,
|
|
1163
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1163
1164
|
time_relative = 0
|
|
1164
1165
|
|
|
1165
1166
|
# garbage at the end of the arguments is ignored in consensus mode, but
|
|
1166
1167
|
# not in mempool mode
|
|
1167
1168
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_SECONDS_RELATIVE, [int_to_bytes(time_relative), b"garbage"])
|
|
1168
1169
|
dic = {cvp.opcode: [cvp]}
|
|
1169
|
-
|
|
1170
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
1170
1171
|
|
|
1171
1172
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
1172
1173
|
assert err is Err.INVALID_CONDITION
|
|
@@ -1175,13 +1176,13 @@ class TestMempoolManager:
|
|
|
1175
1176
|
|
|
1176
1177
|
@pytest.mark.anyio
|
|
1177
1178
|
async def test_assert_time_relative_missing_arg(
|
|
1178
|
-
self, one_node_one_block:
|
|
1179
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1179
1180
|
) -> None:
|
|
1180
|
-
full_node_1,
|
|
1181
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1181
1182
|
|
|
1182
1183
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_SECONDS_RELATIVE, [])
|
|
1183
1184
|
dic = {cvp.opcode: [cvp]}
|
|
1184
|
-
|
|
1185
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
1185
1186
|
|
|
1186
1187
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
1187
1188
|
assert err == Err.INVALID_CONDITION
|
|
@@ -1190,14 +1191,14 @@ class TestMempoolManager:
|
|
|
1190
1191
|
|
|
1191
1192
|
@pytest.mark.anyio
|
|
1192
1193
|
async def test_assert_time_relative_negative(
|
|
1193
|
-
self, one_node_one_block:
|
|
1194
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1194
1195
|
) -> None:
|
|
1195
|
-
full_node_1,
|
|
1196
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1196
1197
|
time_relative = -3
|
|
1197
1198
|
|
|
1198
1199
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_SECONDS_RELATIVE, [int_to_bytes(time_relative)])
|
|
1199
1200
|
dic = {cvp.opcode: [cvp]}
|
|
1200
|
-
|
|
1201
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
1201
1202
|
|
|
1202
1203
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
1203
1204
|
assert err is None
|
|
@@ -1207,7 +1208,7 @@ class TestMempoolManager:
|
|
|
1207
1208
|
# ensure one spend can assert a coin announcement from another spend
|
|
1208
1209
|
@pytest.mark.anyio
|
|
1209
1210
|
async def test_correct_coin_announcement_consumed(
|
|
1210
|
-
self, one_node_one_block:
|
|
1211
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1211
1212
|
) -> None:
|
|
1212
1213
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
1213
1214
|
announce = AssertCoinAnnouncement(asserted_id=coin_2.name(), asserted_msg=b"test")
|
|
@@ -1221,8 +1222,8 @@ class TestMempoolManager:
|
|
|
1221
1222
|
bundle = SpendBundle.aggregate([spend_bundle1, spend_bundle2])
|
|
1222
1223
|
return bundle
|
|
1223
1224
|
|
|
1224
|
-
full_node_1,
|
|
1225
|
-
|
|
1225
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1226
|
+
_blocks, bundle, status, err = await self.condition_tester2(one_node_one_block, wallet_a, test_fun)
|
|
1226
1227
|
mempool_bundle = full_node_1.full_node.mempool_manager.get_spendbundle(bundle.name())
|
|
1227
1228
|
|
|
1228
1229
|
assert err is None
|
|
@@ -1246,7 +1247,7 @@ class TestMempoolManager:
|
|
|
1246
1247
|
announce_garbage: bool,
|
|
1247
1248
|
expected: Optional[Err],
|
|
1248
1249
|
expected_included: MempoolInclusionStatus,
|
|
1249
|
-
one_node_one_block:
|
|
1250
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
1250
1251
|
wallet_a: WalletTool,
|
|
1251
1252
|
) -> None:
|
|
1252
1253
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
@@ -1270,8 +1271,8 @@ class TestMempoolManager:
|
|
|
1270
1271
|
bundle = SpendBundle.aggregate([spend_bundle1, spend_bundle2])
|
|
1271
1272
|
return bundle
|
|
1272
1273
|
|
|
1273
|
-
full_node_1,
|
|
1274
|
-
|
|
1274
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1275
|
+
_blocks, bundle, status, err = await self.condition_tester2(one_node_one_block, wallet_a, test_fun)
|
|
1275
1276
|
|
|
1276
1277
|
assert err is expected
|
|
1277
1278
|
assert status == expected_included
|
|
@@ -1281,7 +1282,7 @@ class TestMempoolManager:
|
|
|
1281
1282
|
|
|
1282
1283
|
@pytest.mark.anyio
|
|
1283
1284
|
async def test_coin_announcement_missing_arg(
|
|
1284
|
-
self, one_node_one_block:
|
|
1285
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1285
1286
|
) -> None:
|
|
1286
1287
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
1287
1288
|
# missing arg here
|
|
@@ -1303,7 +1304,7 @@ class TestMempoolManager:
|
|
|
1303
1304
|
|
|
1304
1305
|
@pytest.mark.anyio
|
|
1305
1306
|
async def test_coin_announcement_missing_arg2(
|
|
1306
|
-
self, one_node_one_block:
|
|
1307
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1307
1308
|
) -> None:
|
|
1308
1309
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
1309
1310
|
announce = AssertCoinAnnouncement(asserted_id=coin_2.name(), asserted_msg=b"test")
|
|
@@ -1326,7 +1327,7 @@ class TestMempoolManager:
|
|
|
1326
1327
|
|
|
1327
1328
|
@pytest.mark.anyio
|
|
1328
1329
|
async def test_coin_announcement_too_big(
|
|
1329
|
-
self, one_node_one_block:
|
|
1330
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1330
1331
|
) -> None:
|
|
1331
1332
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
1332
1333
|
announce = AssertCoinAnnouncement(asserted_id=coin_2.name(), asserted_msg=bytes([1] * 10000))
|
|
@@ -1362,7 +1363,7 @@ class TestMempoolManager:
|
|
|
1362
1363
|
# create announcement
|
|
1363
1364
|
@pytest.mark.anyio
|
|
1364
1365
|
async def test_invalid_coin_announcement_rejected(
|
|
1365
|
-
self, one_node_one_block:
|
|
1366
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1366
1367
|
) -> None:
|
|
1367
1368
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
1368
1369
|
announce = AssertCoinAnnouncement(asserted_id=coin_2.name(), asserted_msg=b"test")
|
|
@@ -1392,7 +1393,7 @@ class TestMempoolManager:
|
|
|
1392
1393
|
|
|
1393
1394
|
@pytest.mark.anyio
|
|
1394
1395
|
async def test_invalid_coin_announcement_rejected_two(
|
|
1395
|
-
self, one_node_one_block:
|
|
1396
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1396
1397
|
) -> None:
|
|
1397
1398
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
1398
1399
|
announce = AssertCoinAnnouncement(asserted_id=coin_1.name(), asserted_msg=b"test")
|
|
@@ -1419,7 +1420,7 @@ class TestMempoolManager:
|
|
|
1419
1420
|
|
|
1420
1421
|
@pytest.mark.anyio
|
|
1421
1422
|
async def test_correct_puzzle_announcement(
|
|
1422
|
-
self, one_node_one_block:
|
|
1423
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1423
1424
|
) -> None:
|
|
1424
1425
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
1425
1426
|
announce = AssertPuzzleAnnouncement(asserted_ph=coin_2.puzzle_hash, asserted_msg=bytes(0x80))
|
|
@@ -1459,7 +1460,7 @@ class TestMempoolManager:
|
|
|
1459
1460
|
announce_garbage: bool,
|
|
1460
1461
|
expected: Optional[Err],
|
|
1461
1462
|
expected_included: MempoolInclusionStatus,
|
|
1462
|
-
one_node_one_block:
|
|
1463
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
1463
1464
|
wallet_a: WalletTool,
|
|
1464
1465
|
) -> None:
|
|
1465
1466
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
@@ -1494,7 +1495,7 @@ class TestMempoolManager:
|
|
|
1494
1495
|
|
|
1495
1496
|
@pytest.mark.anyio
|
|
1496
1497
|
async def test_puzzle_announcement_missing_arg(
|
|
1497
|
-
self, one_node_one_block:
|
|
1498
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1498
1499
|
) -> None:
|
|
1499
1500
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
1500
1501
|
# missing arg here
|
|
@@ -1521,7 +1522,7 @@ class TestMempoolManager:
|
|
|
1521
1522
|
|
|
1522
1523
|
@pytest.mark.anyio
|
|
1523
1524
|
async def test_puzzle_announcement_missing_arg2(
|
|
1524
|
-
self, one_node_one_block:
|
|
1525
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1525
1526
|
) -> None:
|
|
1526
1527
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
1527
1528
|
announce = AssertPuzzleAnnouncement(asserted_ph=coin_2.puzzle_hash, asserted_msg=b"test")
|
|
@@ -1549,7 +1550,7 @@ class TestMempoolManager:
|
|
|
1549
1550
|
|
|
1550
1551
|
@pytest.mark.anyio
|
|
1551
1552
|
async def test_invalid_puzzle_announcement_rejected(
|
|
1552
|
-
self, one_node_one_block:
|
|
1553
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1553
1554
|
) -> None:
|
|
1554
1555
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
1555
1556
|
announce = AssertPuzzleAnnouncement(asserted_ph=coin_2.puzzle_hash, asserted_msg=bytes("test", "utf-8"))
|
|
@@ -1579,7 +1580,7 @@ class TestMempoolManager:
|
|
|
1579
1580
|
|
|
1580
1581
|
@pytest.mark.anyio
|
|
1581
1582
|
async def test_invalid_puzzle_announcement_rejected_two(
|
|
1582
|
-
self, one_node_one_block:
|
|
1583
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1583
1584
|
) -> None:
|
|
1584
1585
|
def test_fun(coin_1: Coin, coin_2: Coin) -> SpendBundle:
|
|
1585
1586
|
announce = AssertPuzzleAnnouncement(asserted_ph=coin_2.puzzle_hash, asserted_msg=bytes(0x80))
|
|
@@ -1609,12 +1610,12 @@ class TestMempoolManager:
|
|
|
1609
1610
|
|
|
1610
1611
|
@pytest.mark.anyio
|
|
1611
1612
|
async def test_assert_fee_condition(
|
|
1612
|
-
self, one_node_one_block:
|
|
1613
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1613
1614
|
) -> None:
|
|
1614
|
-
full_node_1,
|
|
1615
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1615
1616
|
cvp = ConditionWithArgs(ConditionOpcode.RESERVE_FEE, [int_to_bytes(10)])
|
|
1616
1617
|
dic = {cvp.opcode: [cvp]}
|
|
1617
|
-
|
|
1618
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
1618
1619
|
one_node_one_block, wallet_a, dic, fee=10
|
|
1619
1620
|
)
|
|
1620
1621
|
mempool_bundle = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
@@ -1625,14 +1626,14 @@ class TestMempoolManager:
|
|
|
1625
1626
|
|
|
1626
1627
|
@pytest.mark.anyio
|
|
1627
1628
|
async def test_assert_fee_condition_garbage(
|
|
1628
|
-
self, one_node_one_block:
|
|
1629
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1629
1630
|
) -> None:
|
|
1630
|
-
full_node_1,
|
|
1631
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1631
1632
|
# garbage at the end of the arguments is ignored in consensus mode, but
|
|
1632
1633
|
# not in mempool mode
|
|
1633
1634
|
cvp = ConditionWithArgs(ConditionOpcode.RESERVE_FEE, [int_to_bytes(10), b"garbage"])
|
|
1634
1635
|
dic = {cvp.opcode: [cvp]}
|
|
1635
|
-
|
|
1636
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
1636
1637
|
one_node_one_block, wallet_a, dic, fee=10
|
|
1637
1638
|
)
|
|
1638
1639
|
mempool_bundle = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
@@ -1643,12 +1644,12 @@ class TestMempoolManager:
|
|
|
1643
1644
|
|
|
1644
1645
|
@pytest.mark.anyio
|
|
1645
1646
|
async def test_assert_fee_condition_missing_arg(
|
|
1646
|
-
self, one_node_one_block:
|
|
1647
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1647
1648
|
) -> None:
|
|
1648
|
-
full_node_1,
|
|
1649
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1649
1650
|
cvp = ConditionWithArgs(ConditionOpcode.RESERVE_FEE, [])
|
|
1650
1651
|
dic = {cvp.opcode: [cvp]}
|
|
1651
|
-
|
|
1652
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
1652
1653
|
one_node_one_block, wallet_a, dic, fee=10
|
|
1653
1654
|
)
|
|
1654
1655
|
mempool_bundle = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
@@ -1659,12 +1660,12 @@ class TestMempoolManager:
|
|
|
1659
1660
|
|
|
1660
1661
|
@pytest.mark.anyio
|
|
1661
1662
|
async def test_assert_fee_condition_negative_fee(
|
|
1662
|
-
self, one_node_one_block:
|
|
1663
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1663
1664
|
) -> None:
|
|
1664
|
-
full_node_1,
|
|
1665
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
1665
1666
|
cvp = ConditionWithArgs(ConditionOpcode.RESERVE_FEE, [int_to_bytes(-1)])
|
|
1666
1667
|
dic = {cvp.opcode: [cvp]}
|
|
1667
|
-
blocks, spend_bundle1,
|
|
1668
|
+
blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
1668
1669
|
one_node_one_block, wallet_a, dic, fee=10
|
|
1669
1670
|
)
|
|
1670
1671
|
assert err == Err.RESERVE_FEE_CONDITION_FAILED
|
|
@@ -1679,12 +1680,12 @@ class TestMempoolManager:
|
|
|
1679
1680
|
|
|
1680
1681
|
@pytest.mark.anyio
|
|
1681
1682
|
async def test_assert_fee_condition_fee_too_large(
|
|
1682
|
-
self, one_node_one_block:
|
|
1683
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1683
1684
|
) -> None:
|
|
1684
|
-
full_node_1,
|
|
1685
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
1685
1686
|
cvp = ConditionWithArgs(ConditionOpcode.RESERVE_FEE, [int_to_bytes(2**64)])
|
|
1686
1687
|
dic = {cvp.opcode: [cvp]}
|
|
1687
|
-
blocks, spend_bundle1,
|
|
1688
|
+
blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
1688
1689
|
one_node_one_block, wallet_a, dic, fee=10
|
|
1689
1690
|
)
|
|
1690
1691
|
assert err == Err.RESERVE_FEE_CONDITION_FAILED
|
|
@@ -1699,13 +1700,15 @@ class TestMempoolManager:
|
|
|
1699
1700
|
|
|
1700
1701
|
@pytest.mark.anyio
|
|
1701
1702
|
async def test_assert_fee_condition_wrong_fee(
|
|
1702
|
-
self, one_node_one_block:
|
|
1703
|
+
self, one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools], wallet_a: WalletTool
|
|
1703
1704
|
) -> None:
|
|
1704
|
-
full_node_1,
|
|
1705
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1705
1706
|
|
|
1706
1707
|
cvp = ConditionWithArgs(ConditionOpcode.RESERVE_FEE, [int_to_bytes(10)])
|
|
1707
1708
|
dic = {cvp.opcode: [cvp]}
|
|
1708
|
-
|
|
1709
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
1710
|
+
one_node_one_block, wallet_a, dic, fee=9
|
|
1711
|
+
)
|
|
1709
1712
|
mempool_bundle = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
1710
1713
|
|
|
1711
1714
|
assert err == Err.RESERVE_FEE_CONDITION_FAILED
|
|
@@ -1715,7 +1718,7 @@ class TestMempoolManager:
|
|
|
1715
1718
|
@pytest.mark.anyio
|
|
1716
1719
|
async def test_stealing_fee(
|
|
1717
1720
|
self,
|
|
1718
|
-
two_nodes_one_block:
|
|
1721
|
+
two_nodes_one_block: tuple[FullNodeSimulator, FullNodeSimulator, ChiaServer, ChiaServer, BlockTools],
|
|
1719
1722
|
wallet_a: WalletTool,
|
|
1720
1723
|
) -> None:
|
|
1721
1724
|
reward_ph = wallet_a.get_new_puzzlehash()
|
|
@@ -1732,8 +1735,7 @@ class TestMempoolManager:
|
|
|
1732
1735
|
|
|
1733
1736
|
peer = await connect_and_get_peer(server_1, server_2, bt.config["self_hostname"])
|
|
1734
1737
|
|
|
1735
|
-
|
|
1736
|
-
await full_node_1.full_node.add_block(block)
|
|
1738
|
+
await add_blocks_in_batches(blocks, full_node_1.full_node)
|
|
1737
1739
|
|
|
1738
1740
|
await time_out_assert(60, node_height_at_least, True, full_node_1, start_height + 5)
|
|
1739
1741
|
|
|
@@ -1776,7 +1778,7 @@ class TestMempoolManager:
|
|
|
1776
1778
|
@pytest.mark.anyio
|
|
1777
1779
|
async def test_double_spend_same_bundle(
|
|
1778
1780
|
self,
|
|
1779
|
-
two_nodes_one_block:
|
|
1781
|
+
two_nodes_one_block: tuple[FullNodeSimulator, FullNodeSimulator, ChiaServer, ChiaServer, BlockTools],
|
|
1780
1782
|
wallet_a: WalletTool,
|
|
1781
1783
|
) -> None:
|
|
1782
1784
|
reward_ph = wallet_a.get_new_puzzlehash()
|
|
@@ -1791,8 +1793,7 @@ class TestMempoolManager:
|
|
|
1791
1793
|
pool_reward_puzzle_hash=reward_ph,
|
|
1792
1794
|
)
|
|
1793
1795
|
|
|
1794
|
-
|
|
1795
|
-
await full_node_1.full_node.add_block(block)
|
|
1796
|
+
await add_blocks_in_batches(blocks, full_node_1.full_node)
|
|
1796
1797
|
|
|
1797
1798
|
await time_out_assert(60, node_height_at_least, True, full_node_1, start_height + 3)
|
|
1798
1799
|
# coin = blocks[-1].get_included_reward_coins()[0]
|
|
@@ -1825,11 +1826,11 @@ class TestMempoolManager:
|
|
|
1825
1826
|
@pytest.mark.anyio
|
|
1826
1827
|
async def test_agg_sig_condition(
|
|
1827
1828
|
self,
|
|
1828
|
-
one_node_one_block:
|
|
1829
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
1829
1830
|
wallet_a: WalletTool,
|
|
1830
1831
|
) -> None:
|
|
1831
1832
|
reward_ph = wallet_a.get_new_puzzlehash()
|
|
1832
|
-
full_node_1,
|
|
1833
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
1833
1834
|
blocks = await full_node_1.get_all_full_blocks()
|
|
1834
1835
|
start_height = blocks[-1].height
|
|
1835
1836
|
blocks = bt.get_consecutive_blocks(
|
|
@@ -1840,15 +1841,14 @@ class TestMempoolManager:
|
|
|
1840
1841
|
pool_reward_puzzle_hash=reward_ph,
|
|
1841
1842
|
)
|
|
1842
1843
|
|
|
1843
|
-
|
|
1844
|
-
await full_node_1.full_node.add_block(block)
|
|
1844
|
+
await add_blocks_in_batches(blocks, full_node_1.full_node)
|
|
1845
1845
|
|
|
1846
1846
|
await time_out_assert(60, node_height_at_least, True, full_node_1, start_height + 3)
|
|
1847
1847
|
|
|
1848
1848
|
coin = await next_block(full_node_1, wallet_a, bt)
|
|
1849
1849
|
# coin = blocks[-1].get_included_reward_coins()[0]
|
|
1850
1850
|
spend_bundle_0 = generate_test_spend_bundle(wallet_a, coin)
|
|
1851
|
-
unsigned:
|
|
1851
|
+
unsigned: list[CoinSpend] = spend_bundle_0.coin_spends
|
|
1852
1852
|
|
|
1853
1853
|
assert len(unsigned) == 1
|
|
1854
1854
|
# coin_spend: CoinSpend = unsigned[0]
|
|
@@ -1874,17 +1874,17 @@ class TestMempoolManager:
|
|
|
1874
1874
|
@pytest.mark.anyio
|
|
1875
1875
|
async def test_correct_my_parent(
|
|
1876
1876
|
self,
|
|
1877
|
-
one_node_one_block:
|
|
1877
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
1878
1878
|
wallet_a: WalletTool,
|
|
1879
1879
|
) -> None:
|
|
1880
|
-
full_node_1,
|
|
1880
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
1881
1881
|
|
|
1882
1882
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
1883
1883
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
1884
1884
|
coin = await next_block(full_node_1, wallet_a, bt)
|
|
1885
1885
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_PARENT_ID, [coin.parent_coin_info])
|
|
1886
1886
|
dic = {cvp.opcode: [cvp]}
|
|
1887
|
-
|
|
1887
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
1888
1888
|
one_node_one_block, wallet_a, dic, coin=coin
|
|
1889
1889
|
)
|
|
1890
1890
|
|
|
@@ -1897,10 +1897,10 @@ class TestMempoolManager:
|
|
|
1897
1897
|
@pytest.mark.anyio
|
|
1898
1898
|
async def test_my_parent_garbage(
|
|
1899
1899
|
self,
|
|
1900
|
-
one_node_one_block:
|
|
1900
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
1901
1901
|
wallet_a: WalletTool,
|
|
1902
1902
|
) -> None:
|
|
1903
|
-
full_node_1,
|
|
1903
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
1904
1904
|
|
|
1905
1905
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
1906
1906
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
@@ -1909,7 +1909,7 @@ class TestMempoolManager:
|
|
|
1909
1909
|
# but not in mempool mode
|
|
1910
1910
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_PARENT_ID, [coin.parent_coin_info, b"garbage"])
|
|
1911
1911
|
dic = {cvp.opcode: [cvp]}
|
|
1912
|
-
|
|
1912
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
1913
1913
|
one_node_one_block, wallet_a, dic, coin=coin
|
|
1914
1914
|
)
|
|
1915
1915
|
|
|
@@ -1922,13 +1922,13 @@ class TestMempoolManager:
|
|
|
1922
1922
|
@pytest.mark.anyio
|
|
1923
1923
|
async def test_my_parent_missing_arg(
|
|
1924
1924
|
self,
|
|
1925
|
-
one_node_one_block:
|
|
1925
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
1926
1926
|
wallet_a: WalletTool,
|
|
1927
1927
|
) -> None:
|
|
1928
|
-
full_node_1,
|
|
1928
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
1929
1929
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_PARENT_ID, [])
|
|
1930
1930
|
dic = {cvp.opcode: [cvp]}
|
|
1931
|
-
|
|
1931
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
1932
1932
|
|
|
1933
1933
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
1934
1934
|
|
|
@@ -1939,10 +1939,10 @@ class TestMempoolManager:
|
|
|
1939
1939
|
@pytest.mark.anyio
|
|
1940
1940
|
async def test_invalid_my_parent(
|
|
1941
1941
|
self,
|
|
1942
|
-
one_node_one_block:
|
|
1942
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
1943
1943
|
wallet_a: WalletTool,
|
|
1944
1944
|
) -> None:
|
|
1945
|
-
full_node_1,
|
|
1945
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
1946
1946
|
|
|
1947
1947
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
1948
1948
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
@@ -1950,7 +1950,7 @@ class TestMempoolManager:
|
|
|
1950
1950
|
coin_2 = await next_block(full_node_1, wallet_a, bt)
|
|
1951
1951
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_PARENT_ID, [coin_2.parent_coin_info])
|
|
1952
1952
|
dic = {cvp.opcode: [cvp]}
|
|
1953
|
-
|
|
1953
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
1954
1954
|
one_node_one_block, wallet_a, dic, coin=coin
|
|
1955
1955
|
)
|
|
1956
1956
|
|
|
@@ -1963,17 +1963,17 @@ class TestMempoolManager:
|
|
|
1963
1963
|
@pytest.mark.anyio
|
|
1964
1964
|
async def test_correct_my_puzhash(
|
|
1965
1965
|
self,
|
|
1966
|
-
one_node_one_block:
|
|
1966
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
1967
1967
|
wallet_a: WalletTool,
|
|
1968
1968
|
) -> None:
|
|
1969
|
-
full_node_1,
|
|
1969
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
1970
1970
|
|
|
1971
1971
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
1972
1972
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
1973
1973
|
coin = await next_block(full_node_1, wallet_a, bt)
|
|
1974
1974
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_PUZZLEHASH, [coin.puzzle_hash])
|
|
1975
1975
|
dic = {cvp.opcode: [cvp]}
|
|
1976
|
-
|
|
1976
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
1977
1977
|
one_node_one_block, wallet_a, dic, coin=coin
|
|
1978
1978
|
)
|
|
1979
1979
|
|
|
@@ -1986,10 +1986,10 @@ class TestMempoolManager:
|
|
|
1986
1986
|
@pytest.mark.anyio
|
|
1987
1987
|
async def test_my_puzhash_garbage(
|
|
1988
1988
|
self,
|
|
1989
|
-
one_node_one_block:
|
|
1989
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
1990
1990
|
wallet_a: WalletTool,
|
|
1991
1991
|
) -> None:
|
|
1992
|
-
full_node_1,
|
|
1992
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
1993
1993
|
|
|
1994
1994
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
1995
1995
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
@@ -1997,7 +1997,7 @@ class TestMempoolManager:
|
|
|
1997
1997
|
# garbage at the end of the arguments list is allowed but stripped
|
|
1998
1998
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_PUZZLEHASH, [coin.puzzle_hash, b"garbage"])
|
|
1999
1999
|
dic = {cvp.opcode: [cvp]}
|
|
2000
|
-
|
|
2000
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
2001
2001
|
one_node_one_block, wallet_a, dic, coin=coin
|
|
2002
2002
|
)
|
|
2003
2003
|
|
|
@@ -2010,13 +2010,13 @@ class TestMempoolManager:
|
|
|
2010
2010
|
@pytest.mark.anyio
|
|
2011
2011
|
async def test_my_puzhash_missing_arg(
|
|
2012
2012
|
self,
|
|
2013
|
-
one_node_one_block:
|
|
2013
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
2014
2014
|
wallet_a: WalletTool,
|
|
2015
2015
|
) -> None:
|
|
2016
|
-
full_node_1,
|
|
2016
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
2017
2017
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_PUZZLEHASH, [])
|
|
2018
2018
|
dic = {cvp.opcode: [cvp]}
|
|
2019
|
-
|
|
2019
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
2020
2020
|
|
|
2021
2021
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
2022
2022
|
|
|
@@ -2027,17 +2027,17 @@ class TestMempoolManager:
|
|
|
2027
2027
|
@pytest.mark.anyio
|
|
2028
2028
|
async def test_invalid_my_puzhash(
|
|
2029
2029
|
self,
|
|
2030
|
-
one_node_one_block:
|
|
2030
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
2031
2031
|
wallet_a: WalletTool,
|
|
2032
2032
|
) -> None:
|
|
2033
|
-
full_node_1,
|
|
2033
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
2034
2034
|
|
|
2035
2035
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
2036
2036
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
2037
2037
|
coin = await next_block(full_node_1, wallet_a, bt)
|
|
2038
2038
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_PUZZLEHASH, [Program.to([]).get_tree_hash()])
|
|
2039
2039
|
dic = {cvp.opcode: [cvp]}
|
|
2040
|
-
|
|
2040
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
2041
2041
|
one_node_one_block, wallet_a, dic, coin=coin
|
|
2042
2042
|
)
|
|
2043
2043
|
|
|
@@ -2050,17 +2050,17 @@ class TestMempoolManager:
|
|
|
2050
2050
|
@pytest.mark.anyio
|
|
2051
2051
|
async def test_correct_my_amount(
|
|
2052
2052
|
self,
|
|
2053
|
-
one_node_one_block:
|
|
2053
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
2054
2054
|
wallet_a: WalletTool,
|
|
2055
2055
|
) -> None:
|
|
2056
|
-
full_node_1,
|
|
2056
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
2057
2057
|
|
|
2058
2058
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
2059
2059
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
2060
2060
|
coin = await next_block(full_node_1, wallet_a, bt)
|
|
2061
2061
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_AMOUNT, [int_to_bytes(coin.amount)])
|
|
2062
2062
|
dic = {cvp.opcode: [cvp]}
|
|
2063
|
-
|
|
2063
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
2064
2064
|
one_node_one_block, wallet_a, dic, coin=coin
|
|
2065
2065
|
)
|
|
2066
2066
|
|
|
@@ -2073,10 +2073,10 @@ class TestMempoolManager:
|
|
|
2073
2073
|
@pytest.mark.anyio
|
|
2074
2074
|
async def test_my_amount_garbage(
|
|
2075
2075
|
self,
|
|
2076
|
-
one_node_one_block:
|
|
2076
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
2077
2077
|
wallet_a: WalletTool,
|
|
2078
2078
|
) -> None:
|
|
2079
|
-
full_node_1,
|
|
2079
|
+
full_node_1, _server_1, bt = one_node_one_block
|
|
2080
2080
|
|
|
2081
2081
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
2082
2082
|
_ = await next_block(full_node_1, wallet_a, bt)
|
|
@@ -2085,7 +2085,7 @@ class TestMempoolManager:
|
|
|
2085
2085
|
# but not in mempool mode
|
|
2086
2086
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_AMOUNT, [int_to_bytes(coin.amount), b"garbage"])
|
|
2087
2087
|
dic = {cvp.opcode: [cvp]}
|
|
2088
|
-
|
|
2088
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(
|
|
2089
2089
|
one_node_one_block, wallet_a, dic, coin=coin
|
|
2090
2090
|
)
|
|
2091
2091
|
|
|
@@ -2098,13 +2098,13 @@ class TestMempoolManager:
|
|
|
2098
2098
|
@pytest.mark.anyio
|
|
2099
2099
|
async def test_my_amount_missing_arg(
|
|
2100
2100
|
self,
|
|
2101
|
-
one_node_one_block:
|
|
2101
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
2102
2102
|
wallet_a: WalletTool,
|
|
2103
2103
|
) -> None:
|
|
2104
|
-
full_node_1,
|
|
2104
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
2105
2105
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_AMOUNT, [])
|
|
2106
2106
|
dic = {cvp.opcode: [cvp]}
|
|
2107
|
-
|
|
2107
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
2108
2108
|
|
|
2109
2109
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
2110
2110
|
|
|
@@ -2115,13 +2115,13 @@ class TestMempoolManager:
|
|
|
2115
2115
|
@pytest.mark.anyio
|
|
2116
2116
|
async def test_invalid_my_amount(
|
|
2117
2117
|
self,
|
|
2118
|
-
one_node_one_block:
|
|
2118
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
2119
2119
|
wallet_a: WalletTool,
|
|
2120
2120
|
) -> None:
|
|
2121
|
-
full_node_1,
|
|
2121
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
2122
2122
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_AMOUNT, [int_to_bytes(1000)])
|
|
2123
2123
|
dic = {cvp.opcode: [cvp]}
|
|
2124
|
-
|
|
2124
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
2125
2125
|
|
|
2126
2126
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
2127
2127
|
|
|
@@ -2132,13 +2132,13 @@ class TestMempoolManager:
|
|
|
2132
2132
|
@pytest.mark.anyio
|
|
2133
2133
|
async def test_negative_my_amount(
|
|
2134
2134
|
self,
|
|
2135
|
-
one_node_one_block:
|
|
2135
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
2136
2136
|
wallet_a: WalletTool,
|
|
2137
2137
|
) -> None:
|
|
2138
|
-
full_node_1,
|
|
2138
|
+
full_node_1, _server_1, _bt = one_node_one_block
|
|
2139
2139
|
cvp = ConditionWithArgs(ConditionOpcode.ASSERT_MY_AMOUNT, [int_to_bytes(-1)])
|
|
2140
2140
|
dic = {cvp.opcode: [cvp]}
|
|
2141
|
-
|
|
2141
|
+
_blocks, spend_bundle1, _peer, status, err = await self.condition_tester(one_node_one_block, wallet_a, dic)
|
|
2142
2142
|
|
|
2143
2143
|
sb1 = full_node_1.full_node.mempool_manager.get_spendbundle(spend_bundle1.name())
|
|
2144
2144
|
|
|
@@ -2149,7 +2149,7 @@ class TestMempoolManager:
|
|
|
2149
2149
|
@pytest.mark.anyio
|
|
2150
2150
|
async def test_my_amount_too_large(
|
|
2151
2151
|
self,
|
|
2152
|
-
one_node_one_block:
|
|
2152
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
2153
2153
|
wallet_a: WalletTool,
|
|
2154
2154
|
) -> None:
|
|
2155
2155
|
full_node_1, _, _ = one_node_one_block
|
|
@@ -2227,7 +2227,7 @@ class TestGeneratorConditions:
|
|
|
2227
2227
|
# note how the list of conditions isn't correctly terminated with a
|
|
2228
2228
|
# NIL atom. This is a failure
|
|
2229
2229
|
npc_result = generator_condition_tester("(80 50) . 3", height=softfork_height)
|
|
2230
|
-
assert npc_result.error in
|
|
2230
|
+
assert npc_result.error in {Err.INVALID_CONDITION.value, Err.GENERATOR_RUNTIME_ERROR.value}
|
|
2231
2231
|
|
|
2232
2232
|
@pytest.mark.parametrize(
|
|
2233
2233
|
"opcode",
|
|
@@ -2341,7 +2341,7 @@ class TestGeneratorConditions:
|
|
|
2341
2341
|
max_cost=generator_base_cost + 95 * COST_PER_BYTE + ConditionCost.CREATE_COIN.value - 1,
|
|
2342
2342
|
height=softfork_height,
|
|
2343
2343
|
)
|
|
2344
|
-
assert npc_result.error in
|
|
2344
|
+
assert npc_result.error in {Err.BLOCK_COST_EXCEEDS_MAX.value, Err.INVALID_BLOCK_COST.value}
|
|
2345
2345
|
|
|
2346
2346
|
@pytest.mark.parametrize(
|
|
2347
2347
|
"condition",
|
|
@@ -2383,11 +2383,11 @@ class TestGeneratorConditions:
|
|
|
2383
2383
|
max_cost=generator_base_cost + 117 * COST_PER_BYTE + expected_cost - 1,
|
|
2384
2384
|
height=softfork_height,
|
|
2385
2385
|
)
|
|
2386
|
-
assert npc_result.error in
|
|
2386
|
+
assert npc_result.error in {
|
|
2387
2387
|
Err.GENERATOR_RUNTIME_ERROR.value,
|
|
2388
2388
|
Err.BLOCK_COST_EXCEEDS_MAX.value,
|
|
2389
2389
|
Err.INVALID_BLOCK_COST.value,
|
|
2390
|
-
|
|
2390
|
+
}
|
|
2391
2391
|
|
|
2392
2392
|
@pytest.mark.parametrize(
|
|
2393
2393
|
"condition",
|
|
@@ -2834,7 +2834,7 @@ class TestMaliciousGenerators:
|
|
|
2834
2834
|
@pytest.mark.anyio
|
|
2835
2835
|
async def test_invalid_coin_spend_coin(
|
|
2836
2836
|
self,
|
|
2837
|
-
one_node_one_block:
|
|
2837
|
+
one_node_one_block: tuple[FullNodeSimulator, ChiaServer, BlockTools],
|
|
2838
2838
|
wallet_a: WalletTool,
|
|
2839
2839
|
) -> None:
|
|
2840
2840
|
full_node_1, _, bt = one_node_one_block
|
|
@@ -2846,8 +2846,7 @@ class TestMaliciousGenerators:
|
|
|
2846
2846
|
pool_reward_puzzle_hash=reward_ph,
|
|
2847
2847
|
)
|
|
2848
2848
|
|
|
2849
|
-
|
|
2850
|
-
await full_node_1.full_node.add_block(block)
|
|
2849
|
+
await add_blocks_in_batches(blocks, full_node_1.full_node)
|
|
2851
2850
|
|
|
2852
2851
|
await time_out_assert(60, node_height_at_least, True, full_node_1, blocks[-1].height)
|
|
2853
2852
|
|
|
@@ -2900,7 +2899,7 @@ coins = make_test_coins()
|
|
|
2900
2899
|
),
|
|
2901
2900
|
],
|
|
2902
2901
|
)
|
|
2903
|
-
def test_items_by_feerate(items:
|
|
2902
|
+
def test_items_by_feerate(items: list[MempoolItem], expected: list[Coin]) -> None:
|
|
2904
2903
|
fee_estimator = create_bitcoin_fee_estimator(uint64(11000000000))
|
|
2905
2904
|
|
|
2906
2905
|
mempool_info = MempoolInfo(
|
|
@@ -2953,7 +2952,7 @@ def item_cost(cost: int, fee_rate: float) -> MempoolItem:
|
|
|
2953
2952
|
([75, 15, 9], 10, [10, 75, 15]),
|
|
2954
2953
|
],
|
|
2955
2954
|
)
|
|
2956
|
-
def test_full_mempool(items:
|
|
2955
|
+
def test_full_mempool(items: list[int], add: int, expected: list[int]) -> None:
|
|
2957
2956
|
fee_estimator = create_bitcoin_fee_estimator(uint64(11000000000))
|
|
2958
2957
|
|
|
2959
2958
|
mempool_info = MempoolInfo(
|
|
@@ -3000,7 +2999,7 @@ def test_full_mempool(items: List[int], add: int, expected: List[int]) -> None:
|
|
|
3000
2999
|
([10, 11, 12, 13, 50], [10, 11, 12, 13], False),
|
|
3001
3000
|
],
|
|
3002
3001
|
)
|
|
3003
|
-
def test_limit_expiring_transactions(height: bool, items:
|
|
3002
|
+
def test_limit_expiring_transactions(height: bool, items: list[int], expected: list[int], increase_fee: bool) -> None:
|
|
3004
3003
|
fee_estimator = create_bitcoin_fee_estimator(uint64(11000000000))
|
|
3005
3004
|
|
|
3006
3005
|
mempool_info = MempoolInfo(
|
|
@@ -3079,7 +3078,7 @@ def test_limit_expiring_transactions(height: bool, items: List[int], expected: L
|
|
|
3079
3078
|
),
|
|
3080
3079
|
],
|
|
3081
3080
|
)
|
|
3082
|
-
def test_get_items_by_coin_ids(items:
|
|
3081
|
+
def test_get_items_by_coin_ids(items: list[MempoolItem], coin_ids: list[bytes32], expected: list[MempoolItem]) -> None:
|
|
3083
3082
|
fee_estimator = create_bitcoin_fee_estimator(uint64(11000000000))
|
|
3084
3083
|
mempool_info = MempoolInfo(
|
|
3085
3084
|
CLVMCost(uint64(11000000000 * 3)),
|
|
@@ -3112,7 +3111,7 @@ async def test_aggregating_on_a_solution_then_a_more_cost_saving_one_appears() -
|
|
|
3112
3111
|
sb = spend_bundle_from_conditions(conditions, coin)
|
|
3113
3112
|
return sb
|
|
3114
3113
|
|
|
3115
|
-
def agg_and_add_sb_returning_cost_info(mempool: Mempool, spend_bundles:
|
|
3114
|
+
def agg_and_add_sb_returning_cost_info(mempool: Mempool, spend_bundles: list[SpendBundle]) -> uint64:
|
|
3116
3115
|
sb = SpendBundle.aggregate(spend_bundles)
|
|
3117
3116
|
mi = mempool_item_from_spendbundle(sb)
|
|
3118
3117
|
mempool.add_to_pool(mi)
|
|
@@ -3188,7 +3187,6 @@ ENABLE_KECCAK_OPS_OUTSIDE_GUARD = 0x100
|
|
|
3188
3187
|
|
|
3189
3188
|
|
|
3190
3189
|
def test_flags_for_height() -> None:
|
|
3191
|
-
|
|
3192
3190
|
# the keccak operator is supposed to be enabled at soft-fork 6 height
|
|
3193
3191
|
flags = get_flags_for_height_and_constants(DEFAULT_CONSTANTS.SOFT_FORK6_HEIGHT, DEFAULT_CONSTANTS)
|
|
3194
3192
|
print(f"{flags:x}")
|
|
@@ -3200,7 +3198,6 @@ def test_flags_for_height() -> None:
|
|
|
3200
3198
|
|
|
3201
3199
|
|
|
3202
3200
|
def test_keccak() -> None:
|
|
3203
|
-
|
|
3204
3201
|
# the keccak operator is 62. The assemble() function doesn't support it
|
|
3205
3202
|
# (yet)
|
|
3206
3203
|
|