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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import re
|
|
4
|
-
from typing import Any
|
|
4
|
+
from typing import Any
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
7
|
|
|
@@ -21,8 +21,8 @@ from chia.util.ints import uint64
|
|
|
21
21
|
|
|
22
22
|
@pytest.fixture(scope="function")
|
|
23
23
|
async def setup_node_and_rpc(
|
|
24
|
-
two_wallet_nodes_services:
|
|
25
|
-
) ->
|
|
24
|
+
two_wallet_nodes_services: tuple[list[SimulatorFullNodeService], list[WalletService], BlockTools],
|
|
25
|
+
) -> tuple[FullNodeRpcClient, FullNodeRpcApi]:
|
|
26
26
|
full_nodes, wallets, bt = two_wallet_nodes_services
|
|
27
27
|
wallet = wallets[0]._node.wallet_state_manager.main_wallet
|
|
28
28
|
full_node_apis = [full_node_service._api for full_node_service in full_nodes]
|
|
@@ -47,9 +47,9 @@ async def setup_node_and_rpc(
|
|
|
47
47
|
|
|
48
48
|
@pytest.fixture(scope="function")
|
|
49
49
|
async def one_node_no_blocks(
|
|
50
|
-
one_node:
|
|
51
|
-
) ->
|
|
52
|
-
full_nodes,
|
|
50
|
+
one_node: tuple[list[SimulatorFullNodeService], list[WalletService], BlockTools],
|
|
51
|
+
) -> tuple[FullNodeRpcClient, FullNodeRpcApi]:
|
|
52
|
+
full_nodes, _wallets, bt = one_node
|
|
53
53
|
full_node_apis = [full_node_service._api for full_node_service in full_nodes]
|
|
54
54
|
full_node_api: FullNodeSimulator = full_node_apis[0]
|
|
55
55
|
full_node_service_1 = full_nodes[0]
|
|
@@ -66,7 +66,7 @@ async def one_node_no_blocks(
|
|
|
66
66
|
|
|
67
67
|
|
|
68
68
|
@pytest.mark.anyio
|
|
69
|
-
async def test_get_blockchain_state(setup_node_and_rpc:
|
|
69
|
+
async def test_get_blockchain_state(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
70
70
|
# Confirm full node setup correctly
|
|
71
71
|
client, _ = setup_node_and_rpc
|
|
72
72
|
response = await client.get_blockchain_state()
|
|
@@ -74,16 +74,16 @@ async def test_get_blockchain_state(setup_node_and_rpc: Tuple[FullNodeRpcClient,
|
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
@pytest.mark.anyio
|
|
77
|
-
async def test_empty_request(setup_node_and_rpc:
|
|
78
|
-
|
|
77
|
+
async def test_empty_request(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
78
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
79
79
|
|
|
80
80
|
with pytest.raises(ValueError):
|
|
81
81
|
await full_node_rpc_api.get_fee_estimate({})
|
|
82
82
|
|
|
83
83
|
|
|
84
84
|
@pytest.mark.anyio
|
|
85
|
-
async def test_empty_peak(one_node_no_blocks:
|
|
86
|
-
|
|
85
|
+
async def test_empty_peak(one_node_no_blocks: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
86
|
+
_client, full_node_rpc_api = one_node_no_blocks
|
|
87
87
|
response = await full_node_rpc_api.get_fee_estimate({"target_times": [], "cost": 1})
|
|
88
88
|
del response["node_time_utc"]
|
|
89
89
|
assert response == {
|
|
@@ -105,57 +105,57 @@ async def test_empty_peak(one_node_no_blocks: Tuple[FullNodeRpcClient, FullNodeR
|
|
|
105
105
|
|
|
106
106
|
|
|
107
107
|
@pytest.mark.anyio
|
|
108
|
-
async def test_no_target_times(setup_node_and_rpc:
|
|
109
|
-
|
|
108
|
+
async def test_no_target_times(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
109
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
110
110
|
with pytest.raises(ValueError):
|
|
111
111
|
await full_node_rpc_api.get_fee_estimate({"cost": 1})
|
|
112
112
|
|
|
113
113
|
|
|
114
114
|
@pytest.mark.anyio
|
|
115
|
-
async def test_negative_time(setup_node_and_rpc:
|
|
116
|
-
|
|
115
|
+
async def test_negative_time(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
116
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
117
117
|
with pytest.raises(ValueError):
|
|
118
118
|
await full_node_rpc_api.get_fee_estimate({"cost": 1, "target_times": [-1]})
|
|
119
119
|
|
|
120
120
|
|
|
121
121
|
@pytest.mark.anyio
|
|
122
|
-
async def test_negative_cost(setup_node_and_rpc:
|
|
123
|
-
|
|
122
|
+
async def test_negative_cost(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
123
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
124
124
|
with pytest.raises(ValueError):
|
|
125
125
|
await full_node_rpc_api.get_fee_estimate({"cost": -1, "target_times": [1]})
|
|
126
126
|
|
|
127
127
|
|
|
128
128
|
@pytest.mark.anyio
|
|
129
|
-
async def test_no_cost_or_tx(setup_node_and_rpc:
|
|
130
|
-
|
|
129
|
+
async def test_no_cost_or_tx(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
130
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
131
131
|
with pytest.raises(ValueError):
|
|
132
132
|
await full_node_rpc_api.get_fee_estimate({"target_times": []})
|
|
133
133
|
|
|
134
134
|
|
|
135
135
|
@pytest.mark.anyio
|
|
136
|
-
async def test_both_cost_and_tx(setup_node_and_rpc:
|
|
137
|
-
|
|
136
|
+
async def test_both_cost_and_tx(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
137
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
138
138
|
with pytest.raises(ValueError):
|
|
139
139
|
await full_node_rpc_api.get_fee_estimate({"target_times": [], "cost": 1, "spend_bundle": "80"})
|
|
140
140
|
|
|
141
141
|
|
|
142
142
|
@pytest.mark.anyio
|
|
143
|
-
async def test_target_times_invalid_type(setup_node_and_rpc:
|
|
144
|
-
|
|
143
|
+
async def test_target_times_invalid_type(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
144
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
145
145
|
with pytest.raises(TypeError):
|
|
146
146
|
await full_node_rpc_api.get_fee_estimate({"target_times": 1, "cost": 1})
|
|
147
147
|
|
|
148
148
|
|
|
149
149
|
@pytest.mark.anyio
|
|
150
|
-
async def test_cost_invalid_type(setup_node_and_rpc:
|
|
151
|
-
|
|
150
|
+
async def test_cost_invalid_type(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
151
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
152
152
|
with pytest.raises(ValueError):
|
|
153
153
|
await full_node_rpc_api.get_fee_estimate({"target_times": [], "cost": "a lot"})
|
|
154
154
|
|
|
155
155
|
|
|
156
156
|
@pytest.mark.anyio
|
|
157
|
-
async def test_tx_invalid_type(setup_node_and_rpc:
|
|
158
|
-
|
|
157
|
+
async def test_tx_invalid_type(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
158
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
159
159
|
with pytest.raises(TypeError):
|
|
160
160
|
await full_node_rpc_api.get_fee_estimate({"target_times": [], "spend_bundle": {"coin_spends": 1}})
|
|
161
161
|
|
|
@@ -164,24 +164,24 @@ async def test_tx_invalid_type(setup_node_and_rpc: Tuple[FullNodeRpcClient, Full
|
|
|
164
164
|
|
|
165
165
|
|
|
166
166
|
@pytest.mark.anyio
|
|
167
|
-
async def test_empty_target_times(setup_node_and_rpc:
|
|
168
|
-
|
|
167
|
+
async def test_empty_target_times(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
168
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
169
169
|
response = await full_node_rpc_api.get_fee_estimate({"target_times": [], "cost": 1})
|
|
170
170
|
assert response["estimates"] == []
|
|
171
171
|
assert response["target_times"] == []
|
|
172
172
|
|
|
173
173
|
|
|
174
174
|
@pytest.mark.anyio
|
|
175
|
-
async def test_cost(setup_node_and_rpc:
|
|
176
|
-
|
|
175
|
+
async def test_cost(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
176
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
177
177
|
response = await full_node_rpc_api.get_fee_estimate({"target_times": [1], "cost": 1})
|
|
178
178
|
assert response["estimates"] == [0]
|
|
179
179
|
assert response["target_times"] == [1]
|
|
180
180
|
|
|
181
181
|
|
|
182
182
|
@pytest.mark.anyio
|
|
183
|
-
async def test_tx(setup_node_and_rpc:
|
|
184
|
-
|
|
183
|
+
async def test_tx(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi], bt: BlockTools) -> None:
|
|
184
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
185
185
|
wallet_a: WalletTool = bt.get_pool_wallet_tool()
|
|
186
186
|
my_puzzle_hash = wallet_a.get_new_puzzlehash()
|
|
187
187
|
recevier_puzzle_hash = bytes32(b"0" * 32)
|
|
@@ -197,8 +197,8 @@ async def test_tx(setup_node_and_rpc: Tuple[FullNodeRpcClient, FullNodeRpcApi],
|
|
|
197
197
|
|
|
198
198
|
|
|
199
199
|
@pytest.mark.anyio
|
|
200
|
-
async def test_multiple(setup_node_and_rpc:
|
|
201
|
-
|
|
200
|
+
async def test_multiple(setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi]) -> None:
|
|
201
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
202
202
|
response = await full_node_rpc_api.get_fee_estimate({"target_times": [1, 5, 10, 15, 60, 120, 180, 240], "cost": 1})
|
|
203
203
|
assert response["estimates"] == [0, 0, 0, 0, 0, 0, 0, 0]
|
|
204
204
|
assert response["target_times"] == [1, 5, 10, 15, 60, 120, 180, 240]
|
|
@@ -214,11 +214,11 @@ def get_test_spendbundle(bt: BlockTools) -> SpendBundle:
|
|
|
214
214
|
|
|
215
215
|
@pytest.mark.anyio
|
|
216
216
|
async def test_validate_fee_estimate_cost_err(
|
|
217
|
-
setup_node_and_rpc:
|
|
217
|
+
setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi], bt: BlockTools
|
|
218
218
|
) -> None:
|
|
219
219
|
spend_bundle = get_test_spendbundle(bt)
|
|
220
|
-
|
|
221
|
-
bad_arglist:
|
|
220
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
221
|
+
bad_arglist: list[list[Any]] = [
|
|
222
222
|
[["foo", "bar"]],
|
|
223
223
|
[["spend_bundle", spend_bundle.to_json_dict()], ["cost", 1]],
|
|
224
224
|
[["spend_bundle", spend_bundle.to_json_dict()], ["spend_type", "send_xch_transaction"]],
|
|
@@ -239,12 +239,12 @@ async def test_validate_fee_estimate_cost_err(
|
|
|
239
239
|
|
|
240
240
|
@pytest.mark.anyio
|
|
241
241
|
async def test_validate_fee_estimate_cost_ok(
|
|
242
|
-
setup_node_and_rpc:
|
|
242
|
+
setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi], bt: BlockTools
|
|
243
243
|
) -> None:
|
|
244
244
|
spend_bundle = get_test_spendbundle(bt)
|
|
245
|
-
|
|
245
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
246
246
|
|
|
247
|
-
good_arglist:
|
|
247
|
+
good_arglist: list[list[Any]] = [
|
|
248
248
|
["spend_bundle", spend_bundle.to_json_dict()],
|
|
249
249
|
["cost", 1],
|
|
250
250
|
["spend_type", "send_xch_transaction"],
|
|
@@ -257,9 +257,9 @@ async def test_validate_fee_estimate_cost_ok(
|
|
|
257
257
|
|
|
258
258
|
@pytest.mark.anyio
|
|
259
259
|
async def test_get_spendbundle_type_cost_missing(
|
|
260
|
-
setup_node_and_rpc:
|
|
260
|
+
setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi], bt: BlockTools
|
|
261
261
|
) -> None:
|
|
262
|
-
|
|
262
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
263
263
|
with pytest.raises(KeyError, match=re.escape("INVALID")):
|
|
264
264
|
request = {"target_times": [1], "spend_type": "INVALID"}
|
|
265
265
|
_ = await full_node_rpc_api.get_fee_estimate(request)
|
|
@@ -267,9 +267,9 @@ async def test_get_spendbundle_type_cost_missing(
|
|
|
267
267
|
|
|
268
268
|
@pytest.mark.anyio
|
|
269
269
|
async def test_get_spendbundle_type_cost_spend_count_ok(
|
|
270
|
-
setup_node_and_rpc:
|
|
270
|
+
setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi], bt: BlockTools
|
|
271
271
|
) -> None:
|
|
272
|
-
|
|
272
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
273
273
|
spend_counts = [0, 1, 2]
|
|
274
274
|
for spend_count in spend_counts:
|
|
275
275
|
request = {"target_times": [1], "spend_type": "send_xch_transaction", "spend_count": spend_count}
|
|
@@ -279,9 +279,9 @@ async def test_get_spendbundle_type_cost_spend_count_ok(
|
|
|
279
279
|
|
|
280
280
|
@pytest.mark.anyio
|
|
281
281
|
async def test_get_spendbundle_type_cost_spend_count_bad(
|
|
282
|
-
setup_node_and_rpc:
|
|
282
|
+
setup_node_and_rpc: tuple[FullNodeRpcClient, FullNodeRpcApi], bt: BlockTools
|
|
283
283
|
) -> None:
|
|
284
|
-
|
|
284
|
+
_client, full_node_rpc_api = setup_node_and_rpc
|
|
285
285
|
with pytest.raises(ValueError):
|
|
286
286
|
request = {"target_times": [1], "spend_type": "send_xch_transaction", "spend_count": -1}
|
|
287
287
|
_ = await full_node_rpc_api.get_fee_estimate(request)
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import List
|
|
5
4
|
|
|
6
5
|
import pytest
|
|
7
6
|
|
|
@@ -47,7 +46,7 @@ def test_single_estimate() -> None:
|
|
|
47
46
|
|
|
48
47
|
def make_block(
|
|
49
48
|
height: uint32, num_tx: int, cost: uint64, fee: uint64, num_blocks_wait_in_mempool: int
|
|
50
|
-
) ->
|
|
49
|
+
) -> list[MempoolItemInfo]:
|
|
51
50
|
block_included = uint32(height - num_blocks_wait_in_mempool)
|
|
52
51
|
return [MempoolItemInfo(cost, fee, block_included)] * num_tx
|
|
53
52
|
|
|
@@ -95,7 +94,7 @@ def test_init_buckets() -> None:
|
|
|
95
94
|
|
|
96
95
|
|
|
97
96
|
def test_get_bucket_index_empty_buckets() -> None:
|
|
98
|
-
buckets:
|
|
97
|
+
buckets: list[float] = []
|
|
99
98
|
for rate in [0.5, 1.0, 2.0]:
|
|
100
99
|
with pytest.raises(RuntimeError):
|
|
101
100
|
a = get_bucket_index(buckets, rate)
|
|
@@ -134,12 +133,12 @@ def test_get_bucket_index() -> None:
|
|
|
134
133
|
|
|
135
134
|
|
|
136
135
|
def test_monotonically_decrease() -> None:
|
|
137
|
-
inputs:
|
|
138
|
-
output:
|
|
136
|
+
inputs: list[list[float]]
|
|
137
|
+
output: list[list[float]]
|
|
139
138
|
inputs = [[], [-1], [0], [1], [0, 0], [0, 1], [1, 0], [1, 2, 3], [1, 1, 1], [3, 2, 1], [3, 3, 1], [1, 3, 3]]
|
|
140
139
|
output = [[], [-1], [0], [1], [0, 0], [0, 0], [1, 0], [1, 1, 1], [1, 1, 1], [3, 2, 1], [3, 3, 1], [1, 1, 1]]
|
|
141
|
-
i:
|
|
142
|
-
o:
|
|
140
|
+
i: list[float]
|
|
141
|
+
o: list[float]
|
|
143
142
|
for i, o in zip(inputs, output):
|
|
144
143
|
print(o, i)
|
|
145
144
|
assert o == make_monotonically_decreasing(i)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import Callable,
|
|
4
|
+
from typing import Callable, Optional
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
7
|
from chia_rs import Coin, G2Element
|
|
8
8
|
|
|
9
|
-
from chia.
|
|
9
|
+
from chia._tests.util.spend_sim import SimClient, SpendSim, sim_and_client
|
|
10
10
|
from chia.consensus.constants import ConsensusConstants
|
|
11
11
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
12
12
|
from chia.full_node.bitcoin_fee_estimator import BitcoinFeeEstimator
|
|
@@ -32,7 +32,7 @@ async def farm(
|
|
|
32
32
|
sim: SpendSim,
|
|
33
33
|
puzzle_hash: bytes32,
|
|
34
34
|
item_inclusion_filter: Optional[Callable[[bytes32], bool]] = None,
|
|
35
|
-
) ->
|
|
35
|
+
) -> tuple[list[Coin], list[Coin], list[Coin]]:
|
|
36
36
|
additions, removals = await sim.farm_block(puzzle_hash) # , item_inclusion_filter)
|
|
37
37
|
height = sim.get_height()
|
|
38
38
|
new_reward_coins = sim.block_records[height].reward_claims_incorporated
|
|
@@ -51,7 +51,7 @@ def make_tx_sb(from_coin: Coin) -> SpendBundle:
|
|
|
51
51
|
|
|
52
52
|
async def init_test(
|
|
53
53
|
sim: SpendSim, cli: SimClient, puzzle_hash: bytes32, spends_per_block: int
|
|
54
|
-
) ->
|
|
54
|
+
) -> tuple[BitcoinFeeEstimator, list[Coin], list[Coin]]:
|
|
55
55
|
new_reward_coins = []
|
|
56
56
|
spend_coins = []
|
|
57
57
|
fee_coins = []
|
|
@@ -79,11 +79,11 @@ async def init_test(
|
|
|
79
79
|
@pytest.mark.anyio
|
|
80
80
|
async def test_mempool_inclusion_filter_basic() -> None:
|
|
81
81
|
async with sim_and_client(defaults=NEW_DEFAULT_CONSTANTS, pass_prefarm=False) as (sim, cli):
|
|
82
|
-
|
|
82
|
+
_estimator, spend_coins, _fee_coins = await init_test(sim, cli, the_puzzle_hash, 1)
|
|
83
83
|
assert sim.mempool_manager.mempool.size() == 0
|
|
84
84
|
|
|
85
85
|
spend_bundle: SpendBundle = make_tx_sb(spend_coins[0])
|
|
86
|
-
|
|
86
|
+
_status, error = await cli.push_tx(spend_bundle)
|
|
87
87
|
assert sim.mempool_manager.mempool.size() == 1
|
|
88
88
|
assert error is None
|
|
89
89
|
|
|
@@ -96,11 +96,11 @@ async def test_mempool_inclusion_filter_basic() -> None:
|
|
|
96
96
|
def include_all(bundle_name: bytes32) -> bool:
|
|
97
97
|
return True
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
_additions, removals = await sim.farm_block(the_puzzle_hash, item_inclusion_filter=include_none)
|
|
100
100
|
assert sim.mempool_manager.mempool.size() == 1
|
|
101
101
|
assert removals == []
|
|
102
102
|
|
|
103
|
-
|
|
103
|
+
_additions, removals = await sim.farm_block(the_puzzle_hash, item_inclusion_filter=include_all)
|
|
104
104
|
assert sim.mempool_manager.mempool.size() == 0
|
|
105
105
|
removal_ids = [c.name() for c in removals]
|
|
106
106
|
assert mempool_item.name not in removal_ids
|
|
@@ -109,7 +109,7 @@ async def test_mempool_inclusion_filter_basic() -> None:
|
|
|
109
109
|
@pytest.mark.anyio
|
|
110
110
|
async def test_mempoolitem_height_added(db_version: int) -> None:
|
|
111
111
|
async with sim_and_client(defaults=NEW_DEFAULT_CONSTANTS, pass_prefarm=False) as (sim, cli):
|
|
112
|
-
|
|
112
|
+
_estimator, spend_coins, _fee_coins = await init_test(sim, cli, the_puzzle_hash, 1)
|
|
113
113
|
assert sim.mempool_manager.mempool.size() == 0
|
|
114
114
|
|
|
115
115
|
spend_bundle: SpendBundle = make_tx_sb(spend_coins[0])
|
|
@@ -126,7 +126,7 @@ async def test_mempoolitem_height_added(db_version: int) -> None:
|
|
|
126
126
|
assert mempool_item
|
|
127
127
|
return bundle_name != mempool_item.name
|
|
128
128
|
|
|
129
|
-
|
|
129
|
+
_additions, removals = await sim.farm_block(the_puzzle_hash, item_inclusion_filter=ignore_spend)
|
|
130
130
|
removal_ids = [c.name() for c in removals]
|
|
131
131
|
assert mempool_item.name not in removal_ids
|
|
132
132
|
|
|
@@ -139,7 +139,7 @@ async def test_mempoolitem_height_added(db_version: int) -> None:
|
|
|
139
139
|
assert mempool_item2.height_added_to_mempool == mempool_item2.height_added_to_mempool
|
|
140
140
|
|
|
141
141
|
# Now farm it into the next block
|
|
142
|
-
|
|
142
|
+
_additions, removals = await sim.farm_block(the_puzzle_hash)
|
|
143
143
|
assert sim.mempool_manager.mempool.size() == 0
|
|
144
144
|
assert len(removals) == 1
|
|
145
145
|
|
|
@@ -1,24 +1,15 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ruff: noqa: E501
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
4
|
import io
|
|
5
|
-
from
|
|
6
|
-
from typing import Any, List
|
|
5
|
+
from typing import Any
|
|
7
6
|
|
|
8
|
-
import
|
|
9
|
-
from chia_rs import ALLOW_BACKREFS
|
|
7
|
+
from chia_rs import serialized_length
|
|
10
8
|
from clvm.serialize import sexp_from_stream
|
|
11
9
|
from clvm.SExp import SExp
|
|
12
10
|
from clvm_tools import binutils
|
|
13
11
|
|
|
14
|
-
from chia._tests.core.make_block_generator import make_spend_bundle
|
|
15
|
-
from chia._tests.generator.test_rom import run_generator
|
|
16
|
-
from chia.full_node.bundle_tools import simple_solution_generator, simple_solution_generator_backrefs
|
|
17
|
-
from chia.full_node.mempool_check_conditions import get_puzzle_and_solution_for_coin
|
|
18
|
-
from chia.simulator.block_tools import test_constants
|
|
19
12
|
from chia.types.blockchain_format.program import INFINITE_COST, Program
|
|
20
|
-
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
21
|
-
from chia.types.generator_types import BlockGenerator
|
|
22
13
|
from chia.types.spend_bundle import SpendBundle
|
|
23
14
|
from chia.util.byte_types import hexstr_to_bytes
|
|
24
15
|
from chia.util.ints import uint32
|
|
@@ -44,21 +35,19 @@ Nil = Program.from_bytes(b"\x80")
|
|
|
44
35
|
|
|
45
36
|
original_generator = hexstr_to_bytes(
|
|
46
37
|
"ff01ffffffa00000000000000000000000000000000000000000000000000000000000000000ff830186a080ffffff02ffff01ff02ffff01ff02ffff03ff0bffff01ff02ffff03ffff09ff05ffff1dff0bffff1effff0bff0bffff02ff06ffff04ff02ffff04ff17ff8080808080808080ffff01ff02ff17ff2f80ffff01ff088080ff0180ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff17ff80808080ff80808080ffff02ff17ff2f808080ff0180ffff04ffff01ff32ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080ffff04ffff01b081963921826355dcb6c355ccf9c2637c18adf7d38ee44d803ea9ca41587e48c913d8d46896eb830aeadfc13144a8eac3ff018080ffff80ffff01ffff33ffa06b7a83babea1eec790c947db4464ab657dbe9b887fe9acc247062847b8c2a8a9ff830186a08080ff8080808080"
|
|
47
|
-
)
|
|
38
|
+
)
|
|
48
39
|
|
|
49
40
|
gen1 = b"\xff\x01" + original_generator
|
|
50
41
|
gen2 = b"\xff\x01\xff\x01" + original_generator
|
|
51
42
|
FAKE_BLOCK_HEIGHT1 = uint32(100)
|
|
52
43
|
FAKE_BLOCK_HEIGHT2 = uint32(200)
|
|
53
44
|
|
|
54
|
-
from chia_rs import serialized_length
|
|
55
|
-
|
|
56
45
|
assert serialized_length(original_generator) == len(original_generator)
|
|
57
46
|
assert serialized_length(gen1) == len(gen1)
|
|
58
47
|
assert serialized_length(gen2) == len(gen2)
|
|
59
48
|
|
|
60
49
|
|
|
61
|
-
def spend_bundle_to_coin_spend_entry_list(bundle: SpendBundle) ->
|
|
50
|
+
def spend_bundle_to_coin_spend_entry_list(bundle: SpendBundle) -> list[Any]:
|
|
62
51
|
r = []
|
|
63
52
|
for coin_spend in bundle.coin_spends:
|
|
64
53
|
entry = [
|
|
@@ -78,11 +67,11 @@ class TestCompression:
|
|
|
78
67
|
|
|
79
68
|
class TestDecompression:
|
|
80
69
|
def test_deserialization(self) -> None:
|
|
81
|
-
|
|
70
|
+
_cost, out = DESERIALIZE_MOD.run_with_cost(INFINITE_COST, [bytes(Program.to("hello"))])
|
|
82
71
|
assert out == Program.to("hello")
|
|
83
72
|
|
|
84
73
|
def test_deserialization_as_argument(self) -> None:
|
|
85
|
-
|
|
74
|
+
_cost, out = TEST_GEN_DESERIALIZE.run_with_cost(
|
|
86
75
|
INFINITE_COST, [DESERIALIZE_MOD, Nil, bytes(Program.to("hello"))]
|
|
87
76
|
)
|
|
88
77
|
print(bytes(Program.to("hello")))
|
|
@@ -91,7 +80,7 @@ class TestDecompression:
|
|
|
91
80
|
assert out == Program.to("hello")
|
|
92
81
|
|
|
93
82
|
def test_decompress_puzzle(self) -> None:
|
|
94
|
-
|
|
83
|
+
_cost, out = DECOMPRESS_PUZZLE.run_with_cost(
|
|
95
84
|
INFINITE_COST, [DESERIALIZE_MOD, b"\xff", bytes(Program.to("pubkey")), b"\x80"]
|
|
96
85
|
)
|
|
97
86
|
|
|
@@ -110,7 +99,7 @@ class TestDecompression:
|
|
|
110
99
|
cse0 = binutils.assemble(
|
|
111
100
|
"((0x0000000000000000000000000000000000000000000000000000000000000000 0x0186a0) (0xb081963921826355dcb6c355ccf9c2637c18adf7d38ee44d803ea9ca41587e48c913d8d46896eb830aeadfc13144a8eac3 (() (q (51 0x6b7a83babea1eec790c947db4464ab657dbe9b887fe9acc247062847b8c2a8a9 0x0186a0)) ())))"
|
|
112
101
|
)
|
|
113
|
-
|
|
102
|
+
_cost, out = DECOMPRESS_CSE.run_with_cost(
|
|
114
103
|
INFINITE_COST, [DESERIALIZE_MOD, DECOMPRESS_PUZZLE, b"\xff", b"\x80", cse0]
|
|
115
104
|
)
|
|
116
105
|
|
|
@@ -126,7 +115,7 @@ class TestDecompression:
|
|
|
126
115
|
end = start + 238
|
|
127
116
|
prefix = original_generator[start:end]
|
|
128
117
|
# (deserialize decompress_puzzle puzzle_prefix cse)
|
|
129
|
-
|
|
118
|
+
_cost, out = DECOMPRESS_CSE_WITH_PREFIX.run_with_cost(
|
|
130
119
|
INFINITE_COST, [DESERIALIZE_MOD, DECOMPRESS_PUZZLE, prefix, cse0]
|
|
131
120
|
)
|
|
132
121
|
|
|
@@ -135,9 +124,6 @@ class TestDecompression:
|
|
|
135
124
|
|
|
136
125
|
def test_block_program_zero(self) -> None:
|
|
137
126
|
"Decompress a list of CSEs"
|
|
138
|
-
cse1 = binutils.assemble(
|
|
139
|
-
"(((0x0000000000000000000000000000000000000000000000000000000000000000 0x0186a0) (0xb081963921826355dcb6c355ccf9c2637c18adf7d38ee44d803ea9ca41587e48c913d8d46896eb830aeadfc13144a8eac3 (() (q (51 0x6b7a83babea1eec790c947db4464ab657dbe9b887fe9acc247062847b8c2a8a9 0x0186a0)) ()))))"
|
|
140
|
-
)
|
|
141
127
|
cse2 = binutils.assemble(
|
|
142
128
|
"""
|
|
143
129
|
(
|
|
@@ -159,7 +145,7 @@ class TestDecompression:
|
|
|
159
145
|
|
|
160
146
|
# (mod (decompress_puzzle decompress_coin_spend_entry start end compressed_cses deserialize generator_list reserved_arg)
|
|
161
147
|
# cost, out = DECOMPRESS_BLOCK.run_with_cost(INFINITE_COST, [DECOMPRESS_PUZZLE, DECOMPRESS_CSE, start, Program.to(end), cse0, DESERIALIZE_MOD, bytes(original_generator)])
|
|
162
|
-
|
|
148
|
+
_cost, out = DECOMPRESS_BLOCK.run_with_cost(
|
|
163
149
|
INFINITE_COST,
|
|
164
150
|
[
|
|
165
151
|
DECOMPRESS_PUZZLE,
|
|
@@ -176,9 +162,6 @@ class TestDecompression:
|
|
|
176
162
|
print(out)
|
|
177
163
|
|
|
178
164
|
def test_block_program_zero_with_curry(self) -> None:
|
|
179
|
-
cse1 = binutils.assemble(
|
|
180
|
-
"(((0x0000000000000000000000000000000000000000000000000000000000000000 0x0186a0) (0xb081963921826355dcb6c355ccf9c2637c18adf7d38ee44d803ea9ca41587e48c913d8d46896eb830aeadfc13144a8eac3 (() (q (51 0x6b7a83babea1eec790c947db4464ab657dbe9b887fe9acc247062847b8c2a8a9 0x0186a0)) ()))))"
|
|
181
|
-
)
|
|
182
165
|
cse2 = binutils.assemble(
|
|
183
166
|
"""
|
|
184
167
|
(
|
|
@@ -201,7 +184,7 @@ class TestDecompression:
|
|
|
201
184
|
# (mod (decompress_puzzle decompress_coin_spend_entry start end compressed_cses deserialize generator_list reserved_arg)
|
|
202
185
|
# cost, out = DECOMPRESS_BLOCK.run_with_cost(INFINITE_COST, [DECOMPRESS_PUZZLE, DECOMPRESS_CSE, start, Program.to(end), cse0, DESERIALIZE_MOD, bytes(original_generator)])
|
|
203
186
|
p = DECOMPRESS_BLOCK.curry(DECOMPRESS_PUZZLE, DECOMPRESS_CSE_WITH_PREFIX, start, Program.to(end))
|
|
204
|
-
|
|
187
|
+
_cost, out = p.run_with_cost(INFINITE_COST, [cse2, DESERIALIZE_MOD, [bytes(original_generator)]])
|
|
205
188
|
|
|
206
189
|
print()
|
|
207
190
|
print(p)
|
|
@@ -211,7 +194,7 @@ class TestDecompression:
|
|
|
211
194
|
DECOMPRESS_PUZZLE, DECOMPRESS_CSE_WITH_PREFIX, start, Program.to(end), cse2, DESERIALIZE_MOD
|
|
212
195
|
)
|
|
213
196
|
generator_args = Program.to([[original_generator]])
|
|
214
|
-
|
|
197
|
+
_cost, out = p_with_cses.run_with_cost(INFINITE_COST, generator_args)
|
|
215
198
|
|
|
216
199
|
print()
|
|
217
200
|
print(p_with_cses)
|
|
@@ -7,19 +7,19 @@ from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
|
7
7
|
|
|
8
8
|
gen0 = SerializedProgram.from_bytes(
|
|
9
9
|
bytes.fromhex(
|
|
10
|
-
"ff01ffffffa00000000000000000000000000000000000000000000000000000000000000000ff830186a080ffffff02ffff01ff02ffff01ff02ffff03ff0bffff01ff02ffff03ffff09ff05ffff1dff0bffff1effff0bff0bffff02ff06ffff04ff02ffff04ff17ff8080808080808080ffff01ff02ff17ff2f80ffff01ff088080ff0180ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff17ff80808080ff80808080ffff02ff17ff2f808080ff0180ffff04ffff01ff32ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080ffff04ffff01b081963921826355dcb6c355ccf9c2637c18adf7d38ee44d803ea9ca41587e48c913d8d46896eb830aeadfc13144a8eac3ff018080ffff80ffff01ffff33ffa06b7a83babea1eec790c947db4464ab657dbe9b887fe9acc247062847b8c2a8a9ff830186a08080ff8080808080"
|
|
10
|
+
"ff01ffffffa00000000000000000000000000000000000000000000000000000000000000000ff830186a080ffffff02ffff01ff02ffff01ff02ffff03ff0bffff01ff02ffff03ffff09ff05ffff1dff0bffff1effff0bff0bffff02ff06ffff04ff02ffff04ff17ff8080808080808080ffff01ff02ff17ff2f80ffff01ff088080ff0180ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff17ff80808080ff80808080ffff02ff17ff2f808080ff0180ffff04ffff01ff32ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080ffff04ffff01b081963921826355dcb6c355ccf9c2637c18adf7d38ee44d803ea9ca41587e48c913d8d46896eb830aeadfc13144a8eac3ff018080ffff80ffff01ffff33ffa06b7a83babea1eec790c947db4464ab657dbe9b887fe9acc247062847b8c2a8a9ff830186a08080ff8080808080"
|
|
11
11
|
)
|
|
12
12
|
)
|
|
13
13
|
|
|
14
14
|
gen1 = SerializedProgram.from_bytes(
|
|
15
15
|
bytes.fromhex(
|
|
16
|
-
"ff01ffffffa00000000000000000000000000000000000000000000000000000000000000000ff830186a080ffffff02ffff01ff02ffff01ff02ffff03ff0bffff01ff02ffff03ffff09ff05ffff1dff0bffff1effff0bff0bffff02ff06ffff04ff02ffff04ff17ff8080808080808080ffff01ff02ff17ff2f80ffff01ff088080ff0180ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff17ff80808080ff80808080ffff02ff17ff2f808080ff0180ffff04ffff01ff32ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080ffff04ffff01b081963921826355dcb6c355ccf9c2637c18adf7d38ee44d803ea9ca41587e48c913d8d46896eb830aeadfc13144a8eac3ff018080ffff80ffff01ffff33ffa06b7a83babea1eec790c947db4464ab657dbe9b887fe9acc247062847b8c2a8a9ff830186a08080ff8080808080"
|
|
16
|
+
"ff01ffffffa00000000000000000000000000000000000000000000000000000000000000000ff830186a080ffffff02ffff01ff02ffff01ff02ffff03ff0bffff01ff02ffff03ffff09ff05ffff1dff0bffff1effff0bff0bffff02ff06ffff04ff02ffff04ff17ff8080808080808080ffff01ff02ff17ff2f80ffff01ff088080ff0180ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff17ff80808080ff80808080ffff02ff17ff2f808080ff0180ffff04ffff01ff32ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080ffff04ffff01b081963921826355dcb6c355ccf9c2637c18adf7d38ee44d803ea9ca41587e48c913d8d46896eb830aeadfc13144a8eac3ff018080ffff80ffff01ffff33ffa06b7a83babea1eec790c947db4464ab657dbe9b887fe9acc247062847b8c2a8a9ff830186a08080ff8080808080"
|
|
17
17
|
)
|
|
18
18
|
)
|
|
19
19
|
|
|
20
20
|
gen2 = SerializedProgram.from_bytes(
|
|
21
21
|
bytes.fromhex(
|
|
22
|
-
"ff01ffffffa00000000000000000000000000000000000000000000000000000000000000000ff830186a080ffffff02ffff01ff02ffff01ff02ffff03ff0bffff01ff02ffff03ffff09ff05ffff1dff0bffff1effff0bff0bffff02ff06ffff04ff02ffff04ff17ff8080808080808080ffff01ff02ff17ff2f80ffff01ff088080ff0180ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff17ff80808080ff80808080ffff02ff17ff2f808080ff0180ffff04ffff01ff32ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080ffff04ffff01b081963921826355dcb6c355ccf9c2637c18adf7d38ee44d803ea9ca41587e48c913d8d46896eb830aeadfc13144a8eac3ff018080ffff80ffff01ffff33ffa06b7a83babea1eec790c947db4464ab657dbe9b887fe9acc247062847b8c2a8a9ff830186a08080ff8080808080"
|
|
22
|
+
"ff01ffffffa00000000000000000000000000000000000000000000000000000000000000000ff830186a080ffffff02ffff01ff02ffff01ff02ffff03ff0bffff01ff02ffff03ffff09ff05ffff1dff0bffff1effff0bff0bffff02ff06ffff04ff02ffff04ff17ff8080808080808080ffff01ff02ff17ff2f80ffff01ff088080ff0180ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff17ff80808080ff80808080ffff02ff17ff2f808080ff0180ffff04ffff01ff32ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080ffff04ffff01b081963921826355dcb6c355ccf9c2637c18adf7d38ee44d803ea9ca41587e48c913d8d46896eb830aeadfc13144a8eac3ff018080ffff80ffff01ffff33ffa06b7a83babea1eec790c947db4464ab657dbe9b887fe9acc247062847b8c2a8a9ff830186a08080ff8080808080"
|
|
23
23
|
)
|
|
24
24
|
)
|
|
25
25
|
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import List, Tuple
|
|
4
|
-
|
|
5
3
|
from clvm.CLVMObject import CLVMStorage
|
|
6
4
|
from clvm_tools import binutils
|
|
7
5
|
from clvm_tools.clvmc import compile_clvm_text
|
|
8
6
|
|
|
7
|
+
from chia._tests.util.get_name_puzzle_conditions import get_name_puzzle_conditions
|
|
9
8
|
from chia.consensus.condition_costs import ConditionCost
|
|
10
9
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
11
|
-
from chia.full_node.mempool_check_conditions import get_name_puzzle_conditions
|
|
12
10
|
from chia.types.blockchain_format.program import Program
|
|
13
11
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
14
12
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
@@ -17,8 +15,8 @@ from chia.types.spend_bundle_conditions import SpendConditions
|
|
|
17
15
|
from chia.util.ints import uint32
|
|
18
16
|
from chia.wallet.puzzles.load_clvm import load_clvm, load_serialized_clvm_maybe_recompile
|
|
19
17
|
|
|
20
|
-
MAX_COST =
|
|
21
|
-
COST_PER_BYTE =
|
|
18
|
+
MAX_COST = 10**15
|
|
19
|
+
COST_PER_BYTE = 12000
|
|
22
20
|
|
|
23
21
|
|
|
24
22
|
DESERIALIZE_MOD = load_clvm("chialisp_deserialisation.clsp", package_or_requirement="chia.consensus.puzzles")
|
|
@@ -78,13 +76,13 @@ EXPECTED_OUTPUT = (
|
|
|
78
76
|
)
|
|
79
77
|
|
|
80
78
|
|
|
81
|
-
def run_generator(self: BlockGenerator) ->
|
|
79
|
+
def run_generator(self: BlockGenerator) -> tuple[int, Program]:
|
|
82
80
|
"""This mode is meant for accepting possibly soft-forked transactions into the mempool"""
|
|
83
81
|
args = Program.to([self.generator_refs])
|
|
84
82
|
return GENERATOR_MOD.run_with_cost(MAX_COST, [self.program, args])
|
|
85
83
|
|
|
86
84
|
|
|
87
|
-
def as_atom_list(prg: CLVMStorage) ->
|
|
85
|
+
def as_atom_list(prg: CLVMStorage) -> list[bytes]:
|
|
88
86
|
"""
|
|
89
87
|
Pretend `prg` is a list of atoms. Return the corresponding
|
|
90
88
|
python list of atoms.
|
|
@@ -167,7 +165,7 @@ class TestROM:
|
|
|
167
165
|
# the ROM supports extra data after a coin. This test checks that it actually gets passed through
|
|
168
166
|
|
|
169
167
|
gen = block_generator()
|
|
170
|
-
|
|
168
|
+
_cost, r = run_generator(gen)
|
|
171
169
|
coin_spends = r.first()
|
|
172
170
|
for coin_spend in coin_spends.as_iter():
|
|
173
171
|
extra_data = coin_spend.rest().rest().rest().rest()
|
|
@@ -177,6 +175,6 @@ class TestROM:
|
|
|
177
175
|
# the ROM supports extra data after the coin spend list. This test checks that it actually gets passed through
|
|
178
176
|
|
|
179
177
|
gen = block_generator()
|
|
180
|
-
|
|
178
|
+
_cost, r = run_generator(gen)
|
|
181
179
|
extra_block_data = r.rest()
|
|
182
180
|
assert as_atom_list(extra_block_data) == b"extra data for block".split()
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import List
|
|
5
4
|
|
|
6
5
|
import pytest
|
|
7
6
|
from chia_rs import G1Element
|
|
@@ -79,13 +78,13 @@ def test_list_delta(delta: DeltaType) -> None:
|
|
|
79
78
|
[["-2", "2", "3", "-1"], ["2", "3"], PathListDelta([], ["-2", "-1"])],
|
|
80
79
|
],
|
|
81
80
|
)
|
|
82
|
-
def test_path_list_delta_from_lists(old:
|
|
81
|
+
def test_path_list_delta_from_lists(old: list[str], new: list[str], result: PathListDelta) -> None:
|
|
83
82
|
assert PathListDelta.from_lists(old, new) == result
|
|
84
83
|
|
|
85
84
|
|
|
86
85
|
def test_delta_empty() -> None:
|
|
87
86
|
delta: Delta = Delta()
|
|
88
|
-
all_deltas:
|
|
87
|
+
all_deltas: list[DeltaType] = [delta.valid, delta.invalid, delta.keys_missing, delta.duplicates]
|
|
89
88
|
assert delta.empty()
|
|
90
89
|
for d1 in all_deltas:
|
|
91
90
|
delta.valid.additions["0"] = dummy_plot("0")
|