chia-blockchain 2.5.0rc1__py3-none-any.whl → 2.5.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/README.md +1 -1
- chia/_tests/blockchain/blockchain_test_utils.py +24 -26
- chia/_tests/blockchain/test_augmented_chain.py +6 -8
- chia/_tests/blockchain/test_blockchain.py +409 -307
- chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
- chia/_tests/blockchain/test_build_chains.py +11 -13
- chia/_tests/blockchain/test_get_block_generator.py +8 -8
- chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
- chia/_tests/build-init-files.py +3 -4
- chia/_tests/build-job-matrix.py +9 -9
- chia/_tests/check_sql_statements.py +2 -3
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +7 -5
- chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
- chia/_tests/clvm/test_condition_codes.py +2 -2
- chia/_tests/clvm/test_curry_and_treehash.py +2 -4
- chia/_tests/clvm/test_message_conditions.py +184 -0
- chia/_tests/clvm/test_puzzle_compression.py +1 -2
- chia/_tests/clvm/test_puzzle_drivers.py +3 -3
- chia/_tests/clvm/test_puzzles.py +13 -18
- chia/_tests/clvm/test_singletons.py +17 -17
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +42 -45
- chia/_tests/cmds/conftest.py +2 -2
- chia/_tests/cmds/test_click_types.py +21 -16
- chia/_tests/cmds/test_cmd_framework.py +255 -35
- chia/_tests/cmds/test_cmds_util.py +2 -2
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_dev_gh.py +131 -0
- chia/_tests/cmds/test_farm_cmd.py +1 -2
- chia/_tests/cmds/test_show.py +6 -6
- chia/_tests/cmds/test_tx_config_args.py +2 -1
- chia/_tests/cmds/wallet/test_dao.py +23 -23
- chia/_tests/cmds/wallet/test_did.py +29 -29
- chia/_tests/cmds/wallet/test_nft.py +24 -23
- chia/_tests/cmds/wallet/test_notifications.py +8 -8
- chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
- chia/_tests/cmds/wallet/test_vcs.py +97 -73
- chia/_tests/cmds/wallet/test_wallet.py +74 -75
- chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
- chia/_tests/conftest.py +153 -38
- chia/_tests/connection_utils.py +7 -6
- chia/_tests/core/cmds/test_beta.py +3 -3
- chia/_tests/core/cmds/test_keys.py +6 -6
- chia/_tests/core/cmds/test_wallet.py +3 -3
- chia/_tests/core/consensus/test_block_creation.py +3 -5
- chia/_tests/core/custom_types/test_coin.py +1 -3
- chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
- chia/_tests/core/daemon/test_daemon.py +58 -58
- chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
- chia/_tests/core/data_layer/conftest.py +4 -3
- chia/_tests/core/data_layer/test_data_cli.py +1 -2
- chia/_tests/core/data_layer/test_data_layer.py +5 -5
- chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
- chia/_tests/core/data_layer/test_data_rpc.py +75 -93
- chia/_tests/core/data_layer/test_data_store.py +38 -37
- chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
- chia/_tests/core/data_layer/util.py +11 -10
- chia/_tests/core/farmer/test_farmer_api.py +6 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
- chia/_tests/core/full_node/ram_db.py +2 -2
- chia/_tests/core/full_node/stores/test_block_store.py +113 -11
- chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
- chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
- chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
- chia/_tests/core/full_node/test_address_manager.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +1 -1
- chia/_tests/core/full_node/test_conditions.py +10 -12
- chia/_tests/core/full_node/test_full_node.py +2077 -1822
- chia/_tests/core/full_node/test_generator_tools.py +4 -4
- chia/_tests/core/full_node/test_hint_management.py +2 -2
- chia/_tests/core/full_node/test_performance.py +2 -5
- chia/_tests/core/full_node/test_subscriptions.py +4 -4
- chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
- chia/_tests/core/make_block_generator.py +5 -7
- chia/_tests/core/mempool/test_mempool.py +205 -208
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
- chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
- chia/_tests/core/mempool/test_mempool_manager.py +109 -80
- chia/_tests/core/mempool/test_mempool_performance.py +3 -4
- chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
- chia/_tests/core/server/flood.py +6 -4
- chia/_tests/core/server/serve.py +10 -7
- chia/_tests/core/server/test_api_protocol.py +21 -0
- chia/_tests/core/server/test_capabilities.py +3 -5
- chia/_tests/core/server/test_dos.py +15 -16
- chia/_tests/core/server/test_loop.py +14 -10
- chia/_tests/core/server/test_node_discovery.py +1 -2
- chia/_tests/core/server/test_rate_limits.py +156 -44
- chia/_tests/core/server/test_server.py +8 -7
- chia/_tests/core/services/test_services.py +59 -37
- chia/_tests/core/ssl/test_ssl.py +5 -3
- chia/_tests/core/test_cost_calculation.py +5 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_db_conversion.py +5 -4
- chia/_tests/core/test_db_validation.py +6 -5
- chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
- chia/_tests/core/test_filter.py +3 -5
- chia/_tests/core/test_full_node_rpc.py +64 -90
- chia/_tests/core/test_merkle_set.py +10 -10
- chia/_tests/core/test_program.py +2 -4
- chia/_tests/core/test_rpc_util.py +1 -2
- chia/_tests/core/test_seeder.py +124 -12
- chia/_tests/core/util/test_block_cache.py +5 -5
- chia/_tests/core/util/test_cached_bls.py +3 -3
- chia/_tests/core/util/test_config.py +13 -13
- chia/_tests/core/util/test_files.py +2 -2
- chia/_tests/core/util/test_jsonify.py +9 -9
- chia/_tests/core/util/test_keychain.py +13 -5
- chia/_tests/core/util/test_keyring_wrapper.py +6 -5
- chia/_tests/core/util/test_log_exceptions.py +3 -3
- chia/_tests/core/util/test_streamable.py +38 -38
- chia/_tests/db/test_db_wrapper.py +13 -12
- chia/_tests/environments/common.py +2 -2
- chia/_tests/environments/full_node.py +2 -2
- chia/_tests/environments/wallet.py +109 -48
- chia/_tests/farmer_harvester/test_farmer.py +35 -35
- chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
- chia/_tests/generator/test_compression.py +13 -30
- chia/_tests/generator/test_generator_types.py +3 -3
- chia/_tests/generator/test_rom.py +7 -9
- chia/_tests/plot_sync/test_delta.py +2 -3
- chia/_tests/plot_sync/test_plot_sync.py +25 -24
- chia/_tests/plot_sync/test_receiver.py +9 -9
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +27 -26
- chia/_tests/plot_sync/util.py +2 -1
- chia/_tests/plotting/test_plot_manager.py +54 -11
- chia/_tests/plotting/util.py +2 -3
- chia/_tests/pools/test_pool_cli_parsing.py +128 -0
- chia/_tests/pools/test_pool_cmdline.py +993 -15
- chia/_tests/pools/test_pool_config.py +3 -5
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
- chia/_tests/pools/test_pool_rpc.py +203 -90
- chia/_tests/pools/test_pool_wallet.py +12 -8
- chia/_tests/pools/test_wallet_pool_store.py +3 -3
- chia/_tests/process_junit.py +16 -17
- chia/_tests/rpc/test_rpc_client.py +59 -2
- chia/_tests/rpc/test_rpc_server.py +183 -0
- chia/_tests/simulation/test_simulation.py +5 -5
- chia/_tests/simulation/test_simulator.py +8 -10
- chia/_tests/simulation/test_start_simulator.py +5 -4
- chia/_tests/timelord/test_new_peak.py +19 -19
- chia/_tests/tools/test_run_block.py +1 -2
- chia/_tests/tools/test_virtual_project.py +591 -0
- chia/_tests/util/benchmark_cost.py +9 -9
- chia/_tests/util/benchmarks.py +1 -2
- chia/_tests/util/blockchain.py +12 -11
- chia/_tests/util/blockchain_mock.py +15 -15
- chia/_tests/util/build_network_protocol_files.py +12 -12
- chia/_tests/util/db_connection.py +3 -2
- chia/_tests/util/full_sync.py +14 -6
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/generator_tools_testing.py +5 -7
- chia/_tests/util/get_name_puzzle_conditions.py +52 -0
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +59 -106
- chia/_tests/util/network_protocol_data.py +7 -9
- chia/_tests/util/protocol_messages_json.py +112 -111
- chia/_tests/util/rpc.py +3 -0
- chia/_tests/util/run_block.py +16 -16
- chia/_tests/util/setup_nodes.py +25 -23
- chia/{clvm → _tests/util}/spend_sim.py +59 -55
- chia/_tests/util/split_managers.py +12 -9
- chia/_tests/util/temp_file.py +1 -1
- chia/_tests/util/test_action_scope.py +2 -1
- chia/_tests/util/test_async_pool.py +8 -8
- chia/_tests/util/test_build_job_matrix.py +2 -3
- chia/_tests/util/test_condition_tools.py +4 -6
- chia/_tests/util/test_config.py +5 -5
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +19 -11
- chia/_tests/util/test_limited_semaphore.py +4 -3
- chia/_tests/util/test_logging_filter.py +2 -3
- chia/_tests/util/test_misc.py +29 -28
- chia/_tests/util/test_network.py +32 -31
- chia/_tests/util/test_network_protocol_files.py +2 -3
- chia/_tests/util/test_network_protocol_json.py +1 -0
- chia/_tests/util/test_network_protocol_test.py +18 -19
- chia/_tests/util/test_paginator.py +3 -4
- chia/_tests/util/test_pprint.py +1 -1
- chia/_tests/util/test_priority_mutex.py +18 -17
- chia/_tests/util/test_recursive_replace.py +2 -2
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/test_timing.py +1 -1
- chia/_tests/util/test_trusted_peer.py +2 -2
- chia/_tests/util/time_out_assert.py +43 -6
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
- chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
- chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
- chia/_tests/wallet/conftest.py +135 -74
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
- chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
- chia/_tests/wallet/did_wallet/test_did.py +1277 -474
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
- chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
- chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
- chia/_tests/wallet/test_address_type.py +20 -20
- chia/_tests/wallet/test_clvm_streamable.py +5 -5
- chia/_tests/wallet/test_coin_management.py +354 -0
- chia/_tests/wallet/test_coin_selection.py +34 -35
- chia/_tests/wallet/test_conditions.py +28 -16
- chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
- chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
- chia/_tests/wallet/test_nft_store.py +1 -2
- chia/_tests/wallet/test_notifications.py +2 -2
- chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
- chia/_tests/wallet/test_puzzle_store.py +2 -3
- chia/_tests/wallet/test_sign_coin_spends.py +3 -3
- chia/_tests/wallet/test_signer_protocol.py +33 -34
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
- chia/_tests/wallet/test_taproot.py +1 -1
- chia/_tests/wallet/test_transaction_store.py +23 -19
- chia/_tests/wallet/test_util.py +36 -32
- chia/_tests/wallet/test_wallet.py +37 -37
- chia/_tests/wallet/test_wallet_action_scope.py +8 -8
- chia/_tests/wallet/test_wallet_blockchain.py +4 -6
- chia/_tests/wallet/test_wallet_coin_store.py +34 -34
- chia/_tests/wallet/test_wallet_node.py +69 -72
- chia/_tests/wallet/test_wallet_retry.py +3 -3
- chia/_tests/wallet/test_wallet_state_manager.py +12 -5
- chia/_tests/wallet/test_wallet_trade_store.py +2 -2
- chia/_tests/wallet/test_wallet_utils.py +5 -4
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
- chia/_tests/wallet/wallet_block_tools.py +27 -27
- chia/_tests/weight_proof/test_weight_proof.py +30 -30
- chia/apis.py +19 -0
- chia/cmds/beta.py +8 -7
- chia/cmds/beta_funcs.py +15 -11
- chia/cmds/check_wallet_db.py +29 -27
- chia/cmds/chia.py +17 -9
- chia/cmds/cmd_classes.py +87 -79
- chia/cmds/cmd_helpers.py +242 -0
- chia/cmds/cmds_util.py +56 -66
- chia/cmds/coin_funcs.py +168 -153
- chia/cmds/coins.py +156 -194
- chia/cmds/configure.py +4 -3
- chia/cmds/dao.py +89 -33
- chia/cmds/dao_funcs.py +55 -33
- chia/cmds/data.py +7 -6
- chia/cmds/data_funcs.py +26 -21
- chia/cmds/db.py +4 -3
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev.py +2 -0
- chia/cmds/farm.py +18 -5
- chia/cmds/farm_funcs.py +17 -24
- chia/cmds/gh.py +275 -0
- chia/cmds/init.py +4 -11
- chia/cmds/init_funcs.py +9 -9
- chia/cmds/installers.py +5 -3
- chia/cmds/keys.py +56 -39
- chia/cmds/keys_funcs.py +30 -31
- chia/cmds/netspace.py +6 -3
- chia/cmds/netspace_funcs.py +3 -2
- chia/cmds/param_types.py +16 -6
- chia/cmds/passphrase.py +8 -7
- chia/cmds/passphrase_funcs.py +7 -61
- chia/cmds/peer.py +2 -1
- chia/cmds/peer_funcs.py +5 -5
- chia/cmds/plotnft.py +207 -153
- chia/cmds/plotnft_funcs.py +205 -174
- chia/cmds/plots.py +14 -6
- chia/cmds/plotters.py +2 -1
- chia/cmds/rpc.py +48 -28
- chia/cmds/show.py +2 -1
- chia/cmds/show_funcs.py +7 -6
- chia/cmds/signer.py +50 -58
- chia/cmds/sim.py +22 -14
- chia/cmds/sim_funcs.py +11 -11
- chia/cmds/start.py +3 -3
- chia/cmds/start_funcs.py +9 -12
- chia/cmds/stop.py +4 -3
- chia/cmds/units.py +1 -3
- chia/cmds/wallet.py +252 -96
- chia/cmds/wallet_funcs.py +217 -143
- chia/consensus/block_body_validation.py +133 -86
- chia/consensus/block_creation.py +42 -21
- chia/consensus/block_header_validation.py +32 -37
- chia/consensus/block_record.py +1 -2
- chia/consensus/blockchain.py +167 -180
- chia/consensus/blockchain_interface.py +10 -10
- chia/consensus/constants.py +2 -2
- chia/consensus/default_constants.py +3 -4
- chia/consensus/difficulty_adjustment.py +5 -5
- chia/consensus/find_fork_point.py +5 -5
- chia/consensus/full_block_to_block_record.py +4 -4
- chia/consensus/get_block_challenge.py +2 -2
- chia/consensus/get_block_generator.py +4 -3
- chia/consensus/multiprocess_validation.py +207 -304
- chia/consensus/vdf_info_computation.py +3 -3
- chia/daemon/client.py +46 -27
- chia/daemon/keychain_proxy.py +10 -9
- chia/daemon/keychain_server.py +18 -18
- chia/daemon/server.py +103 -113
- chia/daemon/windows_signal.py +2 -2
- chia/data_layer/data_layer.py +64 -76
- chia/data_layer/data_layer_api.py +8 -0
- chia/data_layer/data_layer_errors.py +3 -3
- chia/data_layer/data_layer_server.py +2 -2
- chia/data_layer/data_layer_util.py +71 -71
- chia/data_layer/data_layer_wallet.py +63 -67
- chia/data_layer/data_store.py +72 -72
- chia/data_layer/dl_wallet_store.py +10 -10
- chia/data_layer/download_data.py +5 -5
- chia/data_layer/s3_plugin_service.py +9 -9
- chia/data_layer/util/benchmark.py +0 -1
- chia/data_layer/util/plugin.py +2 -3
- chia/farmer/farmer.py +46 -43
- chia/farmer/farmer_api.py +27 -21
- chia/full_node/block_height_map.py +6 -6
- chia/full_node/block_store.py +41 -35
- chia/full_node/coin_store.py +42 -41
- chia/full_node/fee_estimate.py +2 -2
- chia/full_node/fee_estimation.py +1 -2
- chia/full_node/fee_history.py +5 -6
- chia/full_node/fee_tracker.py +24 -24
- chia/full_node/full_node.py +574 -300
- chia/full_node/full_node_api.py +181 -130
- chia/full_node/full_node_store.py +43 -43
- chia/full_node/hint_management.py +4 -4
- chia/full_node/hint_store.py +9 -10
- chia/full_node/mempool.py +25 -19
- chia/full_node/mempool_check_conditions.py +11 -42
- chia/full_node/mempool_manager.py +48 -53
- chia/full_node/pending_tx_cache.py +9 -9
- chia/full_node/subscriptions.py +23 -24
- chia/full_node/sync_store.py +8 -7
- chia/full_node/tx_processing_queue.py +3 -3
- chia/full_node/util/__init__.py +0 -0
- chia/full_node/weight_proof.py +79 -78
- chia/harvester/harvester.py +9 -8
- chia/harvester/harvester_api.py +19 -13
- chia/introducer/introducer.py +7 -5
- chia/introducer/introducer_api.py +9 -3
- chia/legacy/keyring.py +6 -5
- chia/plot_sync/delta.py +8 -8
- chia/plot_sync/receiver.py +12 -11
- chia/plot_sync/sender.py +15 -12
- chia/plotters/bladebit.py +12 -12
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +8 -8
- chia/plotters/plotters.py +6 -6
- chia/plotters/plotters_util.py +6 -4
- chia/plotting/cache.py +8 -7
- chia/plotting/check_plots.py +8 -8
- chia/plotting/create_plots.py +6 -6
- chia/plotting/manager.py +22 -22
- chia/plotting/util.py +31 -19
- chia/pools/pool_config.py +7 -7
- chia/pools/pool_puzzles.py +16 -16
- chia/pools/pool_wallet.py +64 -57
- chia/pools/pool_wallet_info.py +3 -3
- chia/protocols/full_node_protocol.py +3 -3
- chia/protocols/harvester_protocol.py +12 -12
- chia/protocols/introducer_protocol.py +1 -2
- chia/protocols/protocol_message_types.py +4 -4
- chia/protocols/protocol_state_machine.py +2 -2
- chia/protocols/protocol_timing.py +1 -0
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +2 -2
- chia/protocols/wallet_protocol.py +33 -33
- chia/rpc/crawler_rpc_api.py +12 -7
- chia/rpc/data_layer_rpc_api.py +49 -44
- chia/rpc/data_layer_rpc_client.py +41 -41
- chia/rpc/data_layer_rpc_util.py +7 -11
- chia/rpc/farmer_rpc_api.py +32 -27
- chia/rpc/farmer_rpc_client.py +14 -14
- chia/rpc/full_node_rpc_api.py +53 -48
- chia/rpc/full_node_rpc_client.py +30 -30
- chia/rpc/harvester_rpc_api.py +16 -11
- chia/rpc/harvester_rpc_client.py +6 -6
- chia/rpc/rpc_client.py +34 -14
- chia/rpc/rpc_server.py +117 -43
- chia/rpc/timelord_rpc_api.py +9 -4
- chia/rpc/util.py +11 -211
- chia/rpc/wallet_request_types.py +276 -60
- chia/rpc/wallet_rpc_api.py +563 -399
- chia/rpc/wallet_rpc_client.py +220 -250
- chia/seeder/crawl_store.py +6 -8
- chia/seeder/crawler.py +23 -36
- chia/seeder/crawler_api.py +28 -22
- chia/seeder/dns_server.py +99 -50
- chia/seeder/start_crawler.py +13 -9
- chia/server/address_manager.py +19 -19
- chia/server/address_manager_store.py +17 -17
- chia/server/api_protocol.py +106 -1
- chia/server/capabilities.py +3 -3
- chia/server/chia_policy.py +17 -16
- chia/server/introducer_peers.py +3 -3
- chia/server/node_discovery.py +34 -38
- chia/server/rate_limit_numbers.py +26 -16
- chia/server/rate_limits.py +67 -27
- chia/server/server.py +52 -31
- chia/server/signal_handlers.py +6 -3
- chia/server/ssl_context.py +5 -5
- chia/server/start_data_layer.py +37 -23
- chia/server/start_farmer.py +28 -16
- chia/server/start_full_node.py +29 -23
- chia/server/start_harvester.py +28 -15
- chia/server/start_introducer.py +27 -15
- chia/server/start_service.py +17 -29
- chia/server/start_timelord.py +25 -18
- chia/server/start_wallet.py +22 -18
- chia/server/upnp.py +4 -3
- chia/server/ws_connection.py +68 -54
- chia/simulator/add_blocks_in_batches.py +54 -0
- chia/simulator/block_tools.py +65 -64
- chia/simulator/full_node_simulator.py +66 -74
- chia/simulator/setup_services.py +10 -9
- chia/simulator/simulator_full_node_rpc_api.py +12 -14
- chia/simulator/simulator_full_node_rpc_client.py +3 -5
- chia/simulator/simulator_test_tools.py +8 -7
- chia/simulator/socket.py +1 -4
- chia/simulator/ssl_certs.py +5 -5
- chia/simulator/ssl_certs_1.py +2 -4
- chia/simulator/ssl_certs_10.py +2 -4
- chia/simulator/ssl_certs_2.py +2 -4
- chia/simulator/ssl_certs_3.py +2 -4
- chia/simulator/ssl_certs_4.py +2 -4
- chia/simulator/ssl_certs_5.py +2 -4
- chia/simulator/ssl_certs_6.py +2 -4
- chia/simulator/ssl_certs_7.py +2 -4
- chia/simulator/ssl_certs_8.py +2 -4
- chia/simulator/ssl_certs_9.py +2 -4
- chia/simulator/start_simulator.py +14 -6
- chia/simulator/wallet_tools.py +21 -20
- chia/ssl/create_ssl.py +11 -11
- chia/timelord/iters_from_block.py +2 -2
- chia/timelord/timelord.py +57 -33
- chia/timelord/timelord_api.py +12 -6
- chia/timelord/timelord_launcher.py +10 -8
- chia/timelord/timelord_state.py +5 -5
- chia/types/block_protocol.py +2 -2
- chia/types/blockchain_format/coin.py +3 -3
- chia/types/blockchain_format/program.py +17 -18
- chia/types/blockchain_format/tree_hash.py +9 -9
- chia/types/coin_spend.py +8 -8
- chia/types/condition_with_args.py +1 -2
- chia/types/eligible_coin_spends.py +16 -15
- chia/types/generator_types.py +1 -2
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +7 -7
- chia/types/mempool_submission_status.py +2 -2
- chia/types/peer_info.py +1 -1
- chia/types/spend_bundle.py +1 -2
- chia/types/transaction_queue_entry.py +2 -2
- chia/types/unfinished_header_block.py +2 -2
- chia/types/validation_state.py +14 -0
- chia/types/weight_proof.py +5 -6
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +6 -4
- chia/util/augmented_chain.py +13 -9
- chia/util/batches.py +5 -2
- chia/util/bech32m.py +14 -11
- chia/util/beta_metrics.py +5 -4
- chia/util/block_cache.py +5 -5
- chia/util/byte_types.py +2 -0
- chia/util/check_fork_next_block.py +3 -2
- chia/util/chia_logging.py +41 -21
- chia/util/collection.py +3 -3
- chia/util/condition_tools.py +18 -18
- chia/util/config.py +26 -25
- chia/util/cpu.py +2 -0
- chia/util/db_synchronous.py +2 -0
- chia/util/db_version.py +2 -0
- chia/util/db_wrapper.py +13 -10
- chia/util/default_root.py +17 -0
- chia/util/dump_keyring.py +6 -6
- chia/util/errors.py +5 -3
- chia/util/file_keyring.py +22 -33
- chia/util/files.py +2 -0
- chia/util/full_block_utils.py +31 -7
- chia/util/generator_tools.py +18 -8
- chia/util/hash.py +3 -1
- chia/util/initial-config.yaml +19 -0
- chia/util/inline_executor.py +2 -0
- chia/util/ip_address.py +39 -0
- chia/util/json_util.py +0 -4
- chia/util/keychain.py +27 -24
- chia/util/keyring_wrapper.py +65 -4
- chia/util/limited_semaphore.py +3 -1
- chia/util/lock.py +4 -2
- chia/util/log_exceptions.py +5 -2
- chia/util/logging.py +3 -1
- chia/util/lru_cache.py +2 -0
- chia/util/math.py +4 -4
- chia/util/network.py +15 -73
- chia/util/paginator.py +3 -1
- chia/util/path.py +2 -0
- chia/util/permissions.py +3 -2
- chia/util/prev_transaction_block.py +1 -3
- chia/util/priority_mutex.py +6 -3
- chia/util/profiler.py +7 -4
- chia/util/recursive_replace.py +2 -0
- chia/util/safe_cancel_task.py +2 -0
- chia/util/service_groups.py +2 -2
- chia/util/setproctitle.py +2 -0
- chia/util/significant_bits.py +2 -0
- chia/util/ssl_check.py +11 -11
- chia/util/streamable.py +44 -56
- chia/util/task_referencer.py +59 -0
- chia/util/task_timing.py +22 -18
- chia/util/timing.py +4 -1
- chia/util/vdf_prover.py +2 -3
- chia/util/virtual_project_analysis.py +540 -0
- chia/util/ws_message.py +6 -6
- chia/wallet/cat_wallet/cat_info.py +3 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
- chia/wallet/cat_wallet/cat_utils.py +5 -4
- chia/wallet/cat_wallet/cat_wallet.py +56 -70
- chia/wallet/cat_wallet/dao_cat_info.py +3 -3
- chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
- chia/wallet/cat_wallet/lineage_store.py +2 -2
- chia/wallet/coin_selection.py +15 -15
- chia/wallet/conditions.py +257 -71
- chia/wallet/dao_wallet/dao_info.py +4 -4
- chia/wallet/dao_wallet/dao_utils.py +43 -42
- chia/wallet/dao_wallet/dao_wallet.py +66 -68
- chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
- chia/wallet/derive_keys.py +11 -11
- chia/wallet/did_wallet/did_info.py +3 -3
- chia/wallet/did_wallet/did_wallet.py +56 -47
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/nft_info.py +4 -4
- chia/wallet/nft_wallet/nft_puzzles.py +16 -16
- chia/wallet/nft_wallet/nft_wallet.py +90 -89
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
- chia/wallet/nft_wallet/uncurry_nft.py +2 -2
- chia/wallet/notification_manager.py +5 -5
- chia/wallet/notification_store.py +6 -6
- chia/wallet/outer_puzzles.py +2 -2
- chia/wallet/payment.py +4 -5
- chia/wallet/puzzle_drivers.py +4 -4
- chia/wallet/puzzles/clawback/drivers.py +5 -5
- chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
- chia/wallet/puzzles/load_clvm.py +2 -3
- chia/wallet/puzzles/p2_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
- chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
- chia/wallet/puzzles/puzzle_utils.py +7 -7
- chia/wallet/puzzles/singleton_top_layer.py +6 -5
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
- chia/wallet/puzzles/tails.py +34 -30
- chia/wallet/signer_protocol.py +7 -8
- chia/wallet/singleton.py +4 -4
- chia/wallet/trade_manager.py +155 -141
- chia/wallet/trade_record.py +5 -5
- chia/wallet/trading/offer.py +100 -101
- chia/wallet/trading/trade_store.py +14 -14
- chia/wallet/transaction_record.py +31 -16
- chia/wallet/util/address_type.py +4 -4
- chia/wallet/util/blind_signer_tl.py +8 -12
- chia/wallet/util/clvm_streamable.py +15 -15
- chia/wallet/util/compute_hints.py +5 -5
- chia/wallet/util/compute_memos.py +4 -6
- chia/wallet/util/curry_and_treehash.py +3 -2
- chia/wallet/util/debug_spend_bundle.py +6 -8
- chia/wallet/util/merkle_tree.py +10 -10
- chia/wallet/util/merkle_utils.py +10 -10
- chia/wallet/util/new_peak_queue.py +3 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/{util → wallet/util}/pprint.py +2 -3
- chia/wallet/util/puzzle_compression.py +3 -4
- chia/wallet/util/puzzle_decorator.py +10 -10
- chia/wallet/util/query_filter.py +9 -10
- chia/wallet/util/tx_config.py +12 -12
- chia/wallet/util/wallet_sync_utils.py +24 -21
- chia/wallet/util/wallet_types.py +9 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
- chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
- chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
- chia/wallet/vc_wallet/vc_drivers.py +16 -16
- chia/wallet/vc_wallet/vc_store.py +9 -9
- chia/wallet/vc_wallet/vc_wallet.py +35 -35
- chia/wallet/wallet.py +54 -54
- chia/wallet/wallet_action_scope.py +14 -13
- chia/wallet/wallet_blockchain.py +10 -10
- chia/wallet/wallet_coin_record.py +2 -2
- chia/wallet/wallet_coin_store.py +10 -10
- chia/wallet/wallet_info.py +1 -2
- chia/wallet/wallet_interested_store.py +5 -5
- chia/wallet/wallet_nft_store.py +6 -6
- chia/wallet/wallet_node.py +72 -76
- chia/wallet/wallet_node_api.py +33 -27
- chia/wallet/wallet_pool_store.py +1 -2
- chia/wallet/wallet_protocol.py +15 -15
- chia/wallet/wallet_puzzle_store.py +35 -4
- chia/wallet/wallet_retry_store.py +2 -2
- chia/wallet/wallet_singleton_store.py +10 -9
- chia/wallet/wallet_spend_bundle.py +4 -20
- chia/wallet/wallet_state_manager.py +223 -224
- chia/wallet/wallet_transaction_store.py +44 -18
- chia/wallet/wallet_user_store.py +2 -2
- chia/wallet/wallet_weight_proof_handler.py +2 -2
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/WHEEL +1 -1
- mozilla-ca/cacert.pem +32 -87
- chia/_tests/cmds/wallet/test_coins.py +0 -195
- chia/consensus/block_root_validation.py +0 -46
- chia/util/api_decorators.py +0 -89
- chia_blockchain-2.5.0rc1.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
|
@@ -3,12 +3,11 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
import sys
|
|
5
5
|
from subprocess import check_output
|
|
6
|
-
from typing import Dict, Set, Tuple
|
|
7
6
|
|
|
8
7
|
# check for duplicate index names
|
|
9
8
|
|
|
10
9
|
|
|
11
|
-
def check_create(sql_type: str, cwd: str, exemptions:
|
|
10
|
+
def check_create(sql_type: str, cwd: str, exemptions: set[tuple[str, str]] = set()) -> int:
|
|
12
11
|
# the need for this change seems to come from the git precommit plus the python pre-commit environment
|
|
13
12
|
# having GIT_DIR specified but not GIT_WORK_TREE. this is an issue in some less common git setups
|
|
14
13
|
# such as with worktrees, at least in particular uses of them. i think that we could switch to letting
|
|
@@ -19,7 +18,7 @@ def check_create(sql_type: str, cwd: str, exemptions: Set[Tuple[str, str]] = set
|
|
|
19
18
|
|
|
20
19
|
ret = 0
|
|
21
20
|
|
|
22
|
-
items:
|
|
21
|
+
items: dict[str, str] = {}
|
|
23
22
|
for line in lines:
|
|
24
23
|
if f"CREATE {sql_type}" not in line:
|
|
25
24
|
continue
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from chia._tests.util.get_name_puzzle_conditions import get_name_puzzle_conditions
|
|
3
4
|
from chia.consensus.cost_calculator import NPCResult
|
|
4
5
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
5
6
|
from chia.full_node.bundle_tools import simple_solution_generator
|
|
6
|
-
from chia.full_node.mempool_check_conditions import get_name_puzzle_conditions
|
|
7
7
|
from chia.types.blockchain_format.program import INFINITE_COST
|
|
8
8
|
from chia.types.generator_types import BlockGenerator
|
|
9
9
|
from chia.types.spend_bundle import SpendBundle
|
chia/_tests/clvm/coin_store.py
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from collections import defaultdict
|
|
4
|
+
from collections.abc import Iterator
|
|
4
5
|
from dataclasses import dataclass, replace
|
|
5
|
-
from typing import
|
|
6
|
+
from typing import Optional
|
|
6
7
|
|
|
8
|
+
from chia._tests.util.get_name_puzzle_conditions import get_name_puzzle_conditions
|
|
7
9
|
from chia.consensus.constants import ConsensusConstants
|
|
8
10
|
from chia.consensus.cost_calculator import NPCResult
|
|
9
11
|
from chia.full_node.bundle_tools import simple_solution_generator
|
|
10
|
-
from chia.full_node.mempool_check_conditions import
|
|
12
|
+
from chia.full_node.mempool_check_conditions import mempool_check_time_locks
|
|
11
13
|
from chia.types.blockchain_format.coin import Coin
|
|
12
14
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
13
15
|
from chia.types.coin_record import CoinRecord
|
|
@@ -30,8 +32,8 @@ class CoinTimestamp:
|
|
|
30
32
|
|
|
31
33
|
class CoinStore:
|
|
32
34
|
def __init__(self, constants: ConsensusConstants, reward_mask: int = 0):
|
|
33
|
-
self._db:
|
|
34
|
-
self._ph_index:
|
|
35
|
+
self._db: dict[bytes32, CoinRecord] = dict()
|
|
36
|
+
self._ph_index: dict = defaultdict(list)
|
|
35
37
|
self._reward_mask = reward_mask
|
|
36
38
|
self._constants = constants
|
|
37
39
|
|
|
@@ -40,7 +42,7 @@ class CoinStore:
|
|
|
40
42
|
puzzle_hash: bytes32,
|
|
41
43
|
birthday: CoinTimestamp,
|
|
42
44
|
amount: int = 1024,
|
|
43
|
-
prefix=bytes32.fromhex("ccd5bb71183532bff220ba46c268991a00000000000000000000000000000000"),
|
|
45
|
+
prefix=bytes32.fromhex("ccd5bb71183532bff220ba46c268991a00000000000000000000000000000000"),
|
|
44
46
|
) -> Coin:
|
|
45
47
|
parent = bytes32(
|
|
46
48
|
[
|
|
@@ -64,8 +64,8 @@ def test_deserialization_simple_list():
|
|
|
64
64
|
def test_deserialization_password_coin():
|
|
65
65
|
# (i (= (sha256 2) (q 0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824)) (c (q 51) (c 5 (c (q 100) (q ())))) (q "wrong password")) # noqa
|
|
66
66
|
b = hexstr_to_bytes(
|
|
67
|
-
"ff04ffff0affff0bff0280ffff01ffa02cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b98248080ffff05ffff01ff3380ffff05ff05ffff05ffff01ff6480ffff01ff8080808080ffff01ff8e77726f6e672070617373776f72648080"
|
|
68
|
-
)
|
|
67
|
+
"ff04ffff0affff0bff0280ffff01ffa02cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b98248080ffff05ffff01ff3380ffff05ff05ffff05ffff01ff6480ffff01ff8080808080ffff01ff8e77726f6e672070617373776f72648080"
|
|
68
|
+
)
|
|
69
69
|
cost, output = DESERIALIZE_MOD.run_with_cost(INFINITE_COST, [b])
|
|
70
70
|
print(cost, output)
|
|
71
71
|
prog = Program.to(output)
|
|
@@ -75,8 +75,8 @@ def test_deserialization_password_coin():
|
|
|
75
75
|
def test_deserialization_large_numbers():
|
|
76
76
|
# '(99999999999999999999999999999999999999999999999999999999999999999 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -99999999999999999999999999999999999999999999999999999999999999999999999999999)' # noqa
|
|
77
77
|
b = hexstr_to_bytes(
|
|
78
|
-
"ff9c00f316271c7fc3908a8bef464e3945ef7a253609ffffffffffffffffffb00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1ff22ea0179500526edb610f148ec0c614155678491902d6000000000000000000180"
|
|
79
|
-
)
|
|
78
|
+
"ff9c00f316271c7fc3908a8bef464e3945ef7a253609ffffffffffffffffffb00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1ff22ea0179500526edb610f148ec0c614155678491902d6000000000000000000180"
|
|
79
|
+
)
|
|
80
80
|
cost, output = DESERIALIZE_MOD.run_with_cost(INFINITE_COST, [b])
|
|
81
81
|
print(cost, output)
|
|
82
82
|
prog = Program.to(output)
|
|
@@ -86,16 +86,16 @@ def test_deserialization_large_numbers():
|
|
|
86
86
|
def test_overflow_atoms():
|
|
87
87
|
b = hexstr_to_bytes(serialized_atom_overflow(0xFFFFFFFF))
|
|
88
88
|
with pytest.raises(Exception):
|
|
89
|
-
|
|
89
|
+
_cost, _output = DESERIALIZE_MOD.run_with_cost(INFINITE_COST, [b])
|
|
90
90
|
|
|
91
91
|
b = hexstr_to_bytes(serialized_atom_overflow(0x3FFFFFFFF))
|
|
92
92
|
with pytest.raises(Exception):
|
|
93
|
-
|
|
93
|
+
_cost, _output = DESERIALIZE_MOD.run_with_cost(INFINITE_COST, [b])
|
|
94
94
|
|
|
95
95
|
b = hexstr_to_bytes(serialized_atom_overflow(0xFFFFFFFFFF))
|
|
96
96
|
with pytest.raises(Exception):
|
|
97
|
-
|
|
97
|
+
_cost, _output = DESERIALIZE_MOD.run_with_cost(INFINITE_COST, [b])
|
|
98
98
|
|
|
99
99
|
b = hexstr_to_bytes(serialized_atom_overflow(0x1FFFFFFFFFF))
|
|
100
100
|
with pytest.raises(Exception):
|
|
101
|
-
|
|
101
|
+
_cost, _output = DESERIALIZE_MOD.run_with_cost(INFINITE_COST, [b])
|
|
@@ -9,5 +9,5 @@ from chia.types.condition_opcodes import ConditionOpcode
|
|
|
9
9
|
def test_condition_codes_is_complete() -> None:
|
|
10
10
|
condition_codes_path = importlib_resources.files("chia.wallet.puzzles").joinpath("condition_codes.clib")
|
|
11
11
|
contents = condition_codes_path.read_text(encoding="utf-8")
|
|
12
|
-
for
|
|
13
|
-
assert f"(defconstant {name} {int_from_bytes(value)})" in contents
|
|
12
|
+
for opcode in ConditionOpcode:
|
|
13
|
+
assert f"(defconstant {opcode.name} {int_from_bytes(opcode.value)})" in contents
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import List
|
|
4
|
-
|
|
5
3
|
import pytest
|
|
6
4
|
|
|
7
5
|
from chia.types.blockchain_format.program import Program
|
|
@@ -35,9 +33,9 @@ def test_curry_and_treehash() -> None:
|
|
|
35
33
|
|
|
36
34
|
|
|
37
35
|
@pytest.mark.parametrize(
|
|
38
|
-
"value", [[], [bytes32([3] * 32)], [bytes32
|
|
36
|
+
"value", [[], [bytes32([3] * 32)], [bytes32.zeros, bytes32([1] * 32)], [bytes([1]), bytes([1, 2, 3])]]
|
|
39
37
|
)
|
|
40
|
-
def test_shatree_atom_list(value:
|
|
38
|
+
def test_shatree_atom_list(value: list[bytes]) -> None:
|
|
41
39
|
h1 = shatree_atom_list(value)
|
|
42
40
|
h2 = Program.to(value).get_tree_hash()
|
|
43
41
|
assert h1 == h2
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import dataclasses
|
|
4
|
+
|
|
5
|
+
import pytest
|
|
6
|
+
from chia_rs import Coin, G2Element
|
|
7
|
+
from chia_rs.sized_bytes import bytes32
|
|
8
|
+
from chia_rs.sized_ints import uint8, uint64
|
|
9
|
+
|
|
10
|
+
from chia._tests.util.spend_sim import CostLogger, sim_and_client
|
|
11
|
+
from chia.types.blockchain_format.program import Program
|
|
12
|
+
from chia.types.coin_spend import make_spend
|
|
13
|
+
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
14
|
+
from chia.util.errors import Err
|
|
15
|
+
from chia.wallet.conditions import MessageParticipant, ReceiveMessage, SendMessage
|
|
16
|
+
from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
|
17
|
+
|
|
18
|
+
ACS = Program.to(1)
|
|
19
|
+
ACS_PH = ACS.get_tree_hash()
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@pytest.mark.anyio
|
|
23
|
+
@pytest.mark.parametrize(
|
|
24
|
+
"mode",
|
|
25
|
+
[i for i in range(0b001001, 0b111111 + 1) if i % 8 != 0], # skipping anything ending in 000
|
|
26
|
+
)
|
|
27
|
+
async def test_basic_message_send_receive(mode: int, cost_logger: CostLogger) -> None:
|
|
28
|
+
async with sim_and_client() as (sim, client):
|
|
29
|
+
# Farm two ACS coins
|
|
30
|
+
await sim.farm_block(ACS_PH)
|
|
31
|
+
[sender_coin, receiver_coin] = await client.get_coin_records_by_puzzle_hash(ACS_PH)
|
|
32
|
+
|
|
33
|
+
# Try only a sent message
|
|
34
|
+
send_condition = SendMessage(
|
|
35
|
+
b"foo",
|
|
36
|
+
mode_integer=uint8(mode),
|
|
37
|
+
receiver=MessageParticipant(
|
|
38
|
+
parent_id_committed=receiver_coin.coin.parent_coin_info if mode & 0b000100 else None,
|
|
39
|
+
puzzle_hash_committed=receiver_coin.coin.puzzle_hash if mode & 0b000010 else None,
|
|
40
|
+
amount_committed=receiver_coin.coin.amount if mode & 0b000001 else None,
|
|
41
|
+
coin_id_committed=receiver_coin.coin.name() if mode & 0b000111 == 0b000111 else None,
|
|
42
|
+
),
|
|
43
|
+
)
|
|
44
|
+
only_sender = WalletSpendBundle(
|
|
45
|
+
[
|
|
46
|
+
make_spend(
|
|
47
|
+
sender_coin.coin,
|
|
48
|
+
ACS,
|
|
49
|
+
Program.to([send_condition.to_program()]),
|
|
50
|
+
),
|
|
51
|
+
],
|
|
52
|
+
G2Element(),
|
|
53
|
+
)
|
|
54
|
+
result = await client.push_tx(only_sender)
|
|
55
|
+
assert result == (MempoolInclusionStatus.FAILED, Err.MESSAGE_NOT_SENT_OR_RECEIVED)
|
|
56
|
+
|
|
57
|
+
# Try only a received message
|
|
58
|
+
receive_condition = ReceiveMessage(
|
|
59
|
+
b"foo",
|
|
60
|
+
mode_integer=uint8(mode),
|
|
61
|
+
sender=MessageParticipant(
|
|
62
|
+
parent_id_committed=sender_coin.coin.parent_coin_info if mode & 0b100000 else None,
|
|
63
|
+
puzzle_hash_committed=sender_coin.coin.puzzle_hash if mode & 0b010000 else None,
|
|
64
|
+
amount_committed=sender_coin.coin.amount if mode & 0b001000 else None,
|
|
65
|
+
coin_id_committed=sender_coin.coin.name() if mode & 0b111000 == 0b111000 else None,
|
|
66
|
+
),
|
|
67
|
+
)
|
|
68
|
+
only_receiver = WalletSpendBundle(
|
|
69
|
+
[
|
|
70
|
+
make_spend(
|
|
71
|
+
receiver_coin.coin,
|
|
72
|
+
ACS,
|
|
73
|
+
Program.to([receive_condition.to_program()]),
|
|
74
|
+
),
|
|
75
|
+
],
|
|
76
|
+
G2Element(),
|
|
77
|
+
)
|
|
78
|
+
result = await client.push_tx(only_receiver)
|
|
79
|
+
assert result == (MempoolInclusionStatus.FAILED, Err.MESSAGE_NOT_SENT_OR_RECEIVED)
|
|
80
|
+
|
|
81
|
+
# Make sure they succeed together
|
|
82
|
+
result = await client.push_tx(WalletSpendBundle.aggregate([only_sender, only_receiver]))
|
|
83
|
+
assert result == (MempoolInclusionStatus.SUCCESS, None)
|
|
84
|
+
|
|
85
|
+
# Quickly test back and forth parsing
|
|
86
|
+
assert SendMessage.from_program(send_condition.to_program()).to_program() == send_condition.to_program()
|
|
87
|
+
assert (
|
|
88
|
+
ReceiveMessage.from_program(receive_condition.to_program()).to_program() == receive_condition.to_program()
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# Quickly test mode calculation
|
|
92
|
+
assert (
|
|
93
|
+
dataclasses.replace(send_condition, sender=receive_condition.sender, mode_integer=None).mode
|
|
94
|
+
== send_condition.mode
|
|
95
|
+
)
|
|
96
|
+
assert (
|
|
97
|
+
dataclasses.replace(receive_condition, receiver=send_condition.receiver, mode_integer=None).mode
|
|
98
|
+
== receive_condition.mode
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def test_message_error_conditions() -> None:
|
|
103
|
+
with pytest.raises(ValueError, match="Must specify at least one committment"):
|
|
104
|
+
MessageParticipant()
|
|
105
|
+
|
|
106
|
+
test_coin = Coin(bytes32.zeros, bytes32.zeros, uint64(0))
|
|
107
|
+
with pytest.raises(ValueError, match="You must specify all or none"):
|
|
108
|
+
MessageParticipant(coin_id_committed=test_coin.name(), parent_id_committed=bytes32.zeros)
|
|
109
|
+
|
|
110
|
+
with pytest.raises(AssertionError, match="The value for coin_id_committed must be equal"):
|
|
111
|
+
MessageParticipant(
|
|
112
|
+
coin_id_committed=test_coin.name(),
|
|
113
|
+
parent_id_committed=bytes32.zeros,
|
|
114
|
+
puzzle_hash_committed=bytes32.zeros,
|
|
115
|
+
amount_committed=uint64(1),
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
for mode in range(0b001, 0b111 + 1):
|
|
119
|
+
with pytest.raises(AssertionError, match="If mode_integer is manually specified"):
|
|
120
|
+
MessageParticipant(
|
|
121
|
+
mode_integer=uint8(mode),
|
|
122
|
+
parent_id_committed=test_coin.parent_coin_info if not mode & 0b100 else None,
|
|
123
|
+
puzzle_hash_committed=test_coin.puzzle_hash if not mode & 0b010 else None,
|
|
124
|
+
amount_committed=test_coin.amount if (not mode & 0b001) or (mode == 0b111) else None,
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
with pytest.raises(ValueError, match="without committment information"):
|
|
128
|
+
MessageParticipant(
|
|
129
|
+
mode_integer=uint8(0b111),
|
|
130
|
+
).necessary_args
|
|
131
|
+
|
|
132
|
+
with pytest.raises(ValueError, match="Must specify either mode_integer or both sender and reciever"):
|
|
133
|
+
SendMessage(
|
|
134
|
+
msg=b"foo",
|
|
135
|
+
sender=MessageParticipant(coin_id_committed=test_coin.name()),
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
with pytest.raises(ValueError, match="Must specify either mode_integer or both sender and reciever"):
|
|
139
|
+
SendMessage(
|
|
140
|
+
msg=b"foo",
|
|
141
|
+
receiver=MessageParticipant(coin_id_committed=test_coin.name()),
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
with pytest.raises(AssertionError, match="don't match the sender's mode"):
|
|
145
|
+
SendMessage(
|
|
146
|
+
msg=b"foo",
|
|
147
|
+
mode_integer=uint8(0b111111),
|
|
148
|
+
sender=MessageParticipant(mode_integer=uint8(0b001)),
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
with pytest.raises(AssertionError, match="don't match the receiver's mode"):
|
|
152
|
+
SendMessage(
|
|
153
|
+
msg=b"foo",
|
|
154
|
+
mode_integer=uint8(0b111111),
|
|
155
|
+
receiver=MessageParticipant(mode_integer=uint8(0b001)),
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
with pytest.raises(ValueError, match="Must specify either var_args or receiver"):
|
|
159
|
+
SendMessage(
|
|
160
|
+
msg=b"foo",
|
|
161
|
+
mode_integer=uint8(0b111111),
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
with pytest.raises(ValueError, match="Must specify either var_args or sender"):
|
|
165
|
+
ReceiveMessage(
|
|
166
|
+
msg=b"foo",
|
|
167
|
+
mode_integer=uint8(0b111111),
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
with pytest.raises(AssertionError, match="do not match the specified arguments"):
|
|
171
|
+
SendMessage(
|
|
172
|
+
msg=b"foo",
|
|
173
|
+
mode_integer=uint8(0b111111),
|
|
174
|
+
var_args=[Program.to(test_coin.name())],
|
|
175
|
+
receiver=MessageParticipant(coin_id_committed=bytes32.zeros),
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
with pytest.raises(AssertionError, match="do not match the specified arguments"):
|
|
179
|
+
ReceiveMessage(
|
|
180
|
+
msg=b"foo",
|
|
181
|
+
mode_integer=uint8(0b111111),
|
|
182
|
+
var_args=[Program.to(test_coin.name())],
|
|
183
|
+
sender=MessageParticipant(coin_id_committed=bytes32.zeros),
|
|
184
|
+
)
|
|
@@ -24,9 +24,8 @@ from chia.wallet.util.puzzle_compression import (
|
|
|
24
24
|
lowest_best_version,
|
|
25
25
|
)
|
|
26
26
|
|
|
27
|
-
ZERO_32 = bytes32([0] * 32)
|
|
28
27
|
ONE_32 = bytes32([17] * 32)
|
|
29
|
-
COIN = Coin(
|
|
28
|
+
COIN = Coin(bytes32.zeros, bytes32.zeros, uint64(0))
|
|
30
29
|
SOLUTION = Program.to([])
|
|
31
30
|
|
|
32
31
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Any,
|
|
3
|
+
from typing import Any, Union
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ from chia.wallet.puzzle_drivers import PuzzleInfo, Solver
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
def test_puzzle_info() -> None:
|
|
12
|
-
test_driver:
|
|
12
|
+
test_driver: dict[str, Any] = {
|
|
13
13
|
"string": "hello",
|
|
14
14
|
"bytes": "0xcafef00d",
|
|
15
15
|
"int": "123",
|
|
@@ -17,7 +17,7 @@ def test_puzzle_info() -> None:
|
|
|
17
17
|
"zero": "0",
|
|
18
18
|
"nil": "()",
|
|
19
19
|
}
|
|
20
|
-
test_also:
|
|
20
|
+
test_also: dict[str, Any] = {"type": "TEST", "string": "hello"}
|
|
21
21
|
test_driver["also"] = test_also
|
|
22
22
|
|
|
23
23
|
with pytest.raises(ValueError, match="A type is required"):
|
chia/_tests/clvm/test_puzzles.py
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Iterable
|
|
4
4
|
|
|
5
|
-
from chia_rs import AugSchemeMPL, G1Element
|
|
5
|
+
from chia_rs import AugSchemeMPL, G1Element
|
|
6
6
|
|
|
7
|
+
from chia._tests.clvm.coin_store import CoinStore, CoinTimestamp
|
|
8
|
+
from chia._tests.core.make_block_generator import int_to_public_key
|
|
7
9
|
from chia._tests.util.key_tool import KeyTool
|
|
8
10
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
9
11
|
from chia.types.blockchain_format.program import Program
|
|
@@ -22,13 +24,10 @@ from chia.wallet.puzzles import (
|
|
|
22
24
|
)
|
|
23
25
|
from chia.wallet.puzzles.puzzle_utils import make_create_coin_condition
|
|
24
26
|
|
|
25
|
-
from ..core.make_block_generator import int_to_public_key
|
|
26
|
-
from .coin_store import CoinStore, CoinTimestamp
|
|
27
|
-
|
|
28
27
|
T1 = CoinTimestamp(1, uint32(10000000))
|
|
29
28
|
T2 = CoinTimestamp(5, uint32(10003000))
|
|
30
29
|
|
|
31
|
-
MAX_BLOCK_COST_CLVM =
|
|
30
|
+
MAX_BLOCK_COST_CLVM = 10**18
|
|
32
31
|
|
|
33
32
|
|
|
34
33
|
def secret_exponent_for_index(index: int) -> int:
|
|
@@ -51,7 +50,7 @@ def throwaway_puzzle_hash(index: int, key_lookup: KeyTool) -> bytes32:
|
|
|
51
50
|
def do_test_spend(
|
|
52
51
|
puzzle_reveal: Program,
|
|
53
52
|
solution: Program,
|
|
54
|
-
payments: Iterable[
|
|
53
|
+
payments: Iterable[tuple[bytes32, int]],
|
|
55
54
|
key_lookup: KeyTool,
|
|
56
55
|
farm_time: CoinTimestamp = T1,
|
|
57
56
|
spend_time: CoinTimestamp = T2,
|
|
@@ -60,8 +59,7 @@ def do_test_spend(
|
|
|
60
59
|
This method will farm a coin paid to the hash of `puzzle_reveal`, then try to spend it
|
|
61
60
|
with `solution`, and verify that the created coins correspond to `payments`.
|
|
62
61
|
|
|
63
|
-
The `key_lookup` is used to create a signed version of the `SpendBundle
|
|
64
|
-
this time, signatures are not verified.
|
|
62
|
+
The `key_lookup` is used to create a signed version of the `SpendBundle`
|
|
65
63
|
"""
|
|
66
64
|
|
|
67
65
|
coin_db = CoinStore(DEFAULT_CONSTANTS)
|
|
@@ -74,7 +72,9 @@ def do_test_spend(
|
|
|
74
72
|
# spend it
|
|
75
73
|
coin_spend = make_spend(coin, puzzle_reveal, solution)
|
|
76
74
|
|
|
77
|
-
|
|
75
|
+
# sign the solution
|
|
76
|
+
signature = key_lookup.signature_for_solution(coin_spend, DEFAULT_CONSTANTS.AGG_SIG_ME_ADDITIONAL_DATA)
|
|
77
|
+
spend_bundle = SpendBundle([coin_spend], signature)
|
|
78
78
|
coin_db.update_coin_store_for_spend_bundle(spend_bundle, spend_time, MAX_BLOCK_COST_CLVM)
|
|
79
79
|
|
|
80
80
|
# ensure all outputs are there
|
|
@@ -85,17 +85,12 @@ def do_test_spend(
|
|
|
85
85
|
else:
|
|
86
86
|
assert 0
|
|
87
87
|
|
|
88
|
-
|
|
89
|
-
signatures: List[G2Element] = []
|
|
90
|
-
for coin_spend in spend_bundle.coin_spends:
|
|
91
|
-
signature = key_lookup.signature_for_solution(coin_spend, bytes([2] * 32))
|
|
92
|
-
signatures.append(signature)
|
|
93
|
-
return SpendBundle(spend_bundle.coin_spends, AugSchemeMPL.aggregate(signatures))
|
|
88
|
+
return spend_bundle
|
|
94
89
|
|
|
95
90
|
|
|
96
91
|
def default_payments_and_conditions(
|
|
97
92
|
initial_index: int, key_lookup: KeyTool
|
|
98
|
-
) ->
|
|
93
|
+
) -> tuple[list[tuple[bytes32, int]], Program]:
|
|
99
94
|
# the coin we get from coin_db.farm_coin only has amount 1024, so we can
|
|
100
95
|
# only make small payments to avoid failing with MINTING_COIN
|
|
101
96
|
payments = [
|
|
@@ -206,7 +201,7 @@ def test_p2_delegated_puzzle_or_hidden_puzzle_with_hidden_puzzle():
|
|
|
206
201
|
|
|
207
202
|
def do_test_spend_p2_delegated_puzzle_or_hidden_puzzle_with_delegated_puzzle(hidden_pub_key_index):
|
|
208
203
|
key_lookup = KeyTool()
|
|
209
|
-
|
|
204
|
+
_payments, conditions = default_payments_and_conditions(1, key_lookup)
|
|
210
205
|
|
|
211
206
|
hidden_puzzle = p2_conditions.puzzle_for_conditions(conditions)
|
|
212
207
|
hidden_public_key = public_key_for_index(hidden_pub_key_index, key_lookup)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import Optional
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
6
|
from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
|
|
7
7
|
|
|
8
8
|
from chia._tests.clvm.test_puzzles import public_key_for_index, secret_exponent_for_index
|
|
9
9
|
from chia._tests.util.key_tool import KeyTool
|
|
10
|
-
from chia.
|
|
10
|
+
from chia._tests.util.spend_sim import CostLogger, SimClient, SpendSim, sim_and_client
|
|
11
11
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
12
12
|
from chia.types.blockchain_format.coin import Coin
|
|
13
13
|
from chia.types.blockchain_format.program import Program
|
|
@@ -36,7 +36,7 @@ class TransactionPushError(Exception):
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
def sign_delegated_puz(del_puz: Program, coin: Coin) -> G2Element:
|
|
39
|
-
synthetic_secret_key: PrivateKey = p2_delegated_puzzle_or_hidden_puzzle.calculate_synthetic_secret_key(
|
|
39
|
+
synthetic_secret_key: PrivateKey = p2_delegated_puzzle_or_hidden_puzzle.calculate_synthetic_secret_key(
|
|
40
40
|
PrivateKey.from_bytes(
|
|
41
41
|
secret_exponent_for_index(1).to_bytes(32, "big"),
|
|
42
42
|
),
|
|
@@ -44,7 +44,7 @@ def sign_delegated_puz(del_puz: Program, coin: Coin) -> G2Element:
|
|
|
44
44
|
)
|
|
45
45
|
return AugSchemeMPL.sign(
|
|
46
46
|
synthetic_secret_key,
|
|
47
|
-
(del_puz.get_tree_hash() + coin.name() + DEFAULT_CONSTANTS.AGG_SIG_ME_ADDITIONAL_DATA),
|
|
47
|
+
(del_puz.get_tree_hash() + coin.name() + DEFAULT_CONSTANTS.AGG_SIG_ME_ADDITIONAL_DATA),
|
|
48
48
|
)
|
|
49
49
|
|
|
50
50
|
|
|
@@ -54,7 +54,7 @@ async def make_and_spend_bundle(
|
|
|
54
54
|
sim_client: SimClient,
|
|
55
55
|
coin: Coin,
|
|
56
56
|
delegated_puzzle: Program,
|
|
57
|
-
coinsols:
|
|
57
|
+
coinsols: list[CoinSpend],
|
|
58
58
|
ex_error: Optional[Err] = None,
|
|
59
59
|
fail_msg: str = "",
|
|
60
60
|
cost_logger: Optional[CostLogger] = None,
|
|
@@ -69,7 +69,7 @@ async def make_and_spend_bundle(
|
|
|
69
69
|
spend_bundle = cost_logger.add_cost(cost_log_msg, spend_bundle)
|
|
70
70
|
|
|
71
71
|
try:
|
|
72
|
-
|
|
72
|
+
_result, error = await sim_client.push_tx(spend_bundle)
|
|
73
73
|
if error is None:
|
|
74
74
|
await sim.farm_block()
|
|
75
75
|
elif ex_error is not None:
|
|
@@ -88,12 +88,12 @@ async def test_singleton_top_layer(version, cost_logger):
|
|
|
88
88
|
# Generate starting info
|
|
89
89
|
key_lookup = KeyTool()
|
|
90
90
|
pk: G1Element = G1Element.from_bytes(public_key_for_index(1, key_lookup))
|
|
91
|
-
starting_puzzle: Program = p2_delegated_puzzle_or_hidden_puzzle.puzzle_for_pk(pk)
|
|
91
|
+
starting_puzzle: Program = p2_delegated_puzzle_or_hidden_puzzle.puzzle_for_pk(pk)
|
|
92
92
|
|
|
93
93
|
if version == 0:
|
|
94
94
|
from chia.wallet.puzzles import singleton_top_layer
|
|
95
95
|
|
|
96
|
-
adapted_puzzle: Program = singleton_top_layer.adapt_inner_to_singleton(starting_puzzle)
|
|
96
|
+
adapted_puzzle: Program = singleton_top_layer.adapt_inner_to_singleton(starting_puzzle)
|
|
97
97
|
else:
|
|
98
98
|
from chia.wallet.puzzles import singleton_top_layer_v1_1 as singleton_top_layer
|
|
99
99
|
|
|
@@ -105,24 +105,24 @@ async def test_singleton_top_layer(version, cost_logger):
|
|
|
105
105
|
await sim.farm_block(starting_puzzle.get_tree_hash())
|
|
106
106
|
starting_coin: Coin = await sim_client.get_coin_records_by_puzzle_hash(starting_puzzle.get_tree_hash())
|
|
107
107
|
starting_coin = starting_coin[0].coin
|
|
108
|
-
comment:
|
|
108
|
+
comment: list[tuple[str, str]] = [("hello", "world")]
|
|
109
109
|
|
|
110
110
|
# LAUNCHING
|
|
111
111
|
# Try to create an even singleton (driver test)
|
|
112
112
|
try:
|
|
113
|
-
conditions, launcher_coinsol = singleton_top_layer.launch_conditions_and_coinsol(
|
|
113
|
+
conditions, launcher_coinsol = singleton_top_layer.launch_conditions_and_coinsol(
|
|
114
114
|
starting_coin, adapted_puzzle, comment, (START_AMOUNT - 1)
|
|
115
115
|
)
|
|
116
116
|
raise AssertionError("This should fail due to an even amount")
|
|
117
117
|
except ValueError as msg:
|
|
118
118
|
assert str(msg) == "Coin amount cannot be even. Subtract one mojo."
|
|
119
|
-
conditions, launcher_coinsol = singleton_top_layer.launch_conditions_and_coinsol(
|
|
119
|
+
conditions, launcher_coinsol = singleton_top_layer.launch_conditions_and_coinsol(
|
|
120
120
|
starting_coin, adapted_puzzle, comment, START_AMOUNT
|
|
121
121
|
)
|
|
122
122
|
|
|
123
123
|
# Creating solution for standard transaction
|
|
124
|
-
delegated_puzzle: Program = p2_conditions.puzzle_for_conditions(conditions)
|
|
125
|
-
full_solution: Program = p2_delegated_puzzle_or_hidden_puzzle.solution_for_conditions(conditions)
|
|
124
|
+
delegated_puzzle: Program = p2_conditions.puzzle_for_conditions(conditions)
|
|
125
|
+
full_solution: Program = p2_delegated_puzzle_or_hidden_puzzle.solution_for_conditions(conditions)
|
|
126
126
|
|
|
127
127
|
starting_coinsol = make_spend(
|
|
128
128
|
starting_coin,
|
|
@@ -162,7 +162,7 @@ async def test_singleton_top_layer(version, cost_logger):
|
|
|
162
162
|
)
|
|
163
163
|
inner_solution: Program = Program.to([[], delegated_puzzle, []])
|
|
164
164
|
# Generate the lineage proof we will need from the launcher coin
|
|
165
|
-
lineage_proof: LineageProof = singleton_top_layer.lineage_proof_for_coinsol(launcher_coinsol)
|
|
165
|
+
lineage_proof: LineageProof = singleton_top_layer.lineage_proof_for_coinsol(launcher_coinsol)
|
|
166
166
|
puzzle_reveal: Program = singleton_top_layer.puzzle_for_singleton(
|
|
167
167
|
launcher_id,
|
|
168
168
|
adapted_puzzle,
|
|
@@ -192,7 +192,7 @@ async def test_singleton_top_layer(version, cost_logger):
|
|
|
192
192
|
# POST-EVE
|
|
193
193
|
singleton: Coin = (await sim.all_non_reward_coins())[0]
|
|
194
194
|
# Same delegated_puzzle / inner_solution. We're just recreating ourself
|
|
195
|
-
lineage_proof: LineageProof = singleton_top_layer.lineage_proof_for_coinsol(singleton_eve_coinsol)
|
|
195
|
+
lineage_proof: LineageProof = singleton_top_layer.lineage_proof_for_coinsol(singleton_eve_coinsol)
|
|
196
196
|
# Same puzzle_reveal too
|
|
197
197
|
full_solution: Program = singleton_top_layer.solution_for_singleton(
|
|
198
198
|
lineage_proof,
|
|
@@ -334,7 +334,7 @@ async def test_singleton_top_layer(version, cost_logger):
|
|
|
334
334
|
DELAY_TIME,
|
|
335
335
|
DELAY_PH,
|
|
336
336
|
)
|
|
337
|
-
|
|
337
|
+
_result, error = await sim_client.push_tx(SpendBundle([to_delay_ph_coinsol], G2Element()))
|
|
338
338
|
assert error == Err.ASSERT_SECONDS_RELATIVE_FAILED
|
|
339
339
|
|
|
340
340
|
# SPEND TO DELAYED PUZZLE HASH
|
|
@@ -471,7 +471,7 @@ async def test_singleton_top_layer(version, cost_logger):
|
|
|
471
471
|
)
|
|
472
472
|
)
|
|
473
473
|
inner_solution: Program = Program.to([[], delegated_puzzle, []])
|
|
474
|
-
lineage_proof: LineageProof = singleton_top_layer.lineage_proof_for_coinsol(singleton_even_coinsol)
|
|
474
|
+
lineage_proof: LineageProof = singleton_top_layer.lineage_proof_for_coinsol(singleton_even_coinsol)
|
|
475
475
|
puzzle_reveal: Program = singleton_top_layer.puzzle_for_singleton(
|
|
476
476
|
launcher_id,
|
|
477
477
|
adapted_puzzle,
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import pytest
|
|
4
4
|
from chia_rs import G2Element
|
|
5
5
|
|
|
6
|
-
from chia.
|
|
6
|
+
from chia._tests.util.spend_sim import sim_and_client
|
|
7
7
|
from chia.types.blockchain_format.program import Program
|
|
8
8
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
9
9
|
from chia.types.coin_spend import compute_additions, make_spend
|
|
@@ -41,7 +41,7 @@ async def test_all_endpoints():
|
|
|
41
41
|
async with sim_and_client() as (sim, sim_client):
|
|
42
42
|
for i in range(0, 5):
|
|
43
43
|
await sim.farm_block()
|
|
44
|
-
await sim.farm_block(bytes32
|
|
44
|
+
await sim.farm_block(bytes32.zeros)
|
|
45
45
|
await sim.farm_block(bytes32([1] * 32))
|
|
46
46
|
for i in range(0, 5):
|
|
47
47
|
await sim.farm_block()
|
|
@@ -95,19 +95,19 @@ async def test_all_endpoints():
|
|
|
95
95
|
assert len(coin_records) == 0
|
|
96
96
|
|
|
97
97
|
# get_coin_records_by_puzzle_hash
|
|
98
|
-
coin_records = await sim_client.get_coin_records_by_puzzle_hash(bytes32
|
|
98
|
+
coin_records = await sim_client.get_coin_records_by_puzzle_hash(bytes32.zeros)
|
|
99
99
|
coin_record_name = coin_records[0].coin.name()
|
|
100
100
|
assert len(coin_records) == 2
|
|
101
101
|
|
|
102
|
-
coin_records = await sim_client.get_coin_records_by_puzzle_hash(bytes32
|
|
102
|
+
coin_records = await sim_client.get_coin_records_by_puzzle_hash(bytes32.zeros, start_height=0, end_height=2)
|
|
103
103
|
assert len(coin_records) == 0
|
|
104
104
|
|
|
105
105
|
# get_coin_records_by_puzzle_hashes
|
|
106
|
-
coin_records = await sim_client.get_coin_records_by_puzzle_hashes([bytes32
|
|
106
|
+
coin_records = await sim_client.get_coin_records_by_puzzle_hashes([bytes32.zeros, bytes32([1] * 32)])
|
|
107
107
|
assert len(coin_records) == 4
|
|
108
108
|
|
|
109
109
|
coin_records = await sim_client.get_coin_records_by_puzzle_hashes(
|
|
110
|
-
[bytes32
|
|
110
|
+
[bytes32.zeros, bytes32([1] * 32)], start_height=0, end_height=2
|
|
111
111
|
)
|
|
112
112
|
assert len(coin_records) == 0
|
|
113
113
|
|
|
@@ -150,7 +150,7 @@ async def test_all_endpoints():
|
|
|
150
150
|
],
|
|
151
151
|
G2Element(),
|
|
152
152
|
)
|
|
153
|
-
|
|
153
|
+
_result, error = await sim_client.push_tx(bundle)
|
|
154
154
|
assert not error
|
|
155
155
|
# get_all_mempool_tx_ids
|
|
156
156
|
mempool_items = await sim_client.get_all_mempool_tx_ids()
|