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,7 +3,6 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
import time
|
|
5
5
|
from random import randrange
|
|
6
|
-
from typing import List, Set
|
|
7
6
|
|
|
8
7
|
import pytest
|
|
9
8
|
|
|
@@ -47,7 +46,7 @@ class TestCoinSelection:
|
|
|
47
46
|
coins_to_append = 1000
|
|
48
47
|
amounts = list(range(1, coins_to_append))
|
|
49
48
|
amounts.sort(reverse=True)
|
|
50
|
-
coin_list:
|
|
49
|
+
coin_list: list[Coin] = [Coin(a_hash, a_hash, uint64(100000000 * a)) for a in amounts]
|
|
51
50
|
for i in range(tries):
|
|
52
51
|
knapsack = knapsack_coin_algorithm(
|
|
53
52
|
coin_list, uint128(30000000000000), DEFAULT_CONSTANTS.MAX_COIN_AMOUNT, 999999, seed=bytes([i])
|
|
@@ -58,7 +57,7 @@ class TestCoinSelection:
|
|
|
58
57
|
def test_knapsack_coin_selection_2(self, a_hash: bytes32) -> None:
|
|
59
58
|
coin_amounts = [6, 20, 40, 80, 150, 160, 203, 202, 201, 320]
|
|
60
59
|
coin_amounts.sort(reverse=True)
|
|
61
|
-
coin_list:
|
|
60
|
+
coin_list: list[Coin] = [Coin(a_hash, a_hash, uint64(a)) for a in coin_amounts]
|
|
62
61
|
# coin_list = set([coin for a in coin_amounts])
|
|
63
62
|
for i in range(100):
|
|
64
63
|
knapsack = knapsack_coin_algorithm(
|
|
@@ -81,12 +80,12 @@ class TestCoinSelection:
|
|
|
81
80
|
spendable_amount += c_amount
|
|
82
81
|
spendable_amount = uint128(spendable_amount)
|
|
83
82
|
|
|
84
|
-
coin_list:
|
|
83
|
+
coin_list: list[WalletCoinRecord] = [
|
|
85
84
|
WalletCoinRecord(Coin(a_hash, a_hash, uint64(a)), uint32(1), uint32(1), False, True, WalletType(0), 1)
|
|
86
85
|
for a in coin_amounts
|
|
87
86
|
]
|
|
88
87
|
for target_amount in coin_amounts[:100]: # select the first 100 values
|
|
89
|
-
result:
|
|
88
|
+
result: set[Coin] = await select_coins(
|
|
90
89
|
spendable_amount,
|
|
91
90
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
92
91
|
coin_list,
|
|
@@ -101,7 +100,7 @@ class TestCoinSelection:
|
|
|
101
100
|
@pytest.mark.anyio
|
|
102
101
|
async def test_coin_selection_with_dust(self, a_hash: bytes32) -> None:
|
|
103
102
|
spendable_amount = uint128(5000000000000 + 10000)
|
|
104
|
-
coin_list:
|
|
103
|
+
coin_list: list[WalletCoinRecord] = [
|
|
105
104
|
WalletCoinRecord(
|
|
106
105
|
Coin(a_hash, a_hash, uint64(5000000000000)), uint32(1), uint32(1), False, True, WalletType(0), 1
|
|
107
106
|
)
|
|
@@ -121,7 +120,7 @@ class TestCoinSelection:
|
|
|
121
120
|
# make sure coins are not identical.
|
|
122
121
|
for target_amount in [10000, 9999]:
|
|
123
122
|
print("Target amount: ", target_amount)
|
|
124
|
-
result:
|
|
123
|
+
result: set[Coin] = await select_coins(
|
|
125
124
|
spendable_amount,
|
|
126
125
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
127
126
|
coin_list,
|
|
@@ -147,7 +146,7 @@ class TestCoinSelection:
|
|
|
147
146
|
)
|
|
148
147
|
spendable_amount = uint128(spendable_amount + 2000 * 100)
|
|
149
148
|
for target_amount in [50000, 25000, 15000, 10000, 9000, 3000]: # select the first 100 values
|
|
150
|
-
dusty_result:
|
|
149
|
+
dusty_result: set[Coin] = await select_coins(
|
|
151
150
|
spendable_amount,
|
|
152
151
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
153
152
|
coin_list,
|
|
@@ -163,7 +162,7 @@ class TestCoinSelection:
|
|
|
163
162
|
|
|
164
163
|
# test when we have multiple coins under target, and a lot of dust coins.
|
|
165
164
|
spendable_amount = uint128(25000 + 10000)
|
|
166
|
-
new_coin_list:
|
|
165
|
+
new_coin_list: list[WalletCoinRecord] = []
|
|
167
166
|
for i in range(5):
|
|
168
167
|
new_coin_list.append(
|
|
169
168
|
WalletCoinRecord(
|
|
@@ -190,7 +189,7 @@ class TestCoinSelection:
|
|
|
190
189
|
)
|
|
191
190
|
)
|
|
192
191
|
for target_amount in [20000, 15000, 10000, 5000]: # select the first 100 values
|
|
193
|
-
dusty_below_target:
|
|
192
|
+
dusty_below_target: set[Coin] = await select_coins(
|
|
194
193
|
spendable_amount,
|
|
195
194
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
196
195
|
new_coin_list,
|
|
@@ -208,7 +207,7 @@ class TestCoinSelection:
|
|
|
208
207
|
async def test_dust_and_one_large_coin(self, a_hash: bytes32) -> None:
|
|
209
208
|
# test when we have a lot of dust and 1 large coin
|
|
210
209
|
spendable_amount = uint128(50000 + 10000)
|
|
211
|
-
new_coin_list:
|
|
210
|
+
new_coin_list: list[WalletCoinRecord] = [
|
|
212
211
|
WalletCoinRecord(
|
|
213
212
|
Coin(a_hash, std_hash(b"123"), uint64(50000)), uint32(1), uint32(1), False, True, WalletType(0), 1
|
|
214
213
|
)
|
|
@@ -227,7 +226,7 @@ class TestCoinSelection:
|
|
|
227
226
|
)
|
|
228
227
|
)
|
|
229
228
|
for target_amount in [50000, 10001, 10000, 9999]:
|
|
230
|
-
dusty_below_target:
|
|
229
|
+
dusty_below_target: set[Coin] = await select_coins(
|
|
231
230
|
spendable_amount,
|
|
232
231
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
233
232
|
new_coin_list,
|
|
@@ -242,7 +241,7 @@ class TestCoinSelection:
|
|
|
242
241
|
@pytest.mark.anyio
|
|
243
242
|
async def test_coin_selection_failure(self, a_hash: bytes32) -> None:
|
|
244
243
|
spendable_amount = uint128(10000)
|
|
245
|
-
coin_list:
|
|
244
|
+
coin_list: list[WalletCoinRecord] = []
|
|
246
245
|
for i in range(10000):
|
|
247
246
|
coin_list.append(
|
|
248
247
|
WalletCoinRecord(
|
|
@@ -282,7 +281,7 @@ class TestCoinSelection:
|
|
|
282
281
|
@pytest.mark.anyio
|
|
283
282
|
async def test_coin_selection(self, a_hash: bytes32) -> None:
|
|
284
283
|
coin_amounts = [3, 6, 20, 40, 80, 150, 160, 203, 202, 201, 320]
|
|
285
|
-
coin_list:
|
|
284
|
+
coin_list: list[WalletCoinRecord] = [
|
|
286
285
|
WalletCoinRecord(Coin(a_hash, a_hash, uint64(a)), uint32(1), uint32(1), False, True, WalletType(0), 1)
|
|
287
286
|
for a in coin_amounts
|
|
288
287
|
]
|
|
@@ -290,7 +289,7 @@ class TestCoinSelection:
|
|
|
290
289
|
|
|
291
290
|
# check for exact match
|
|
292
291
|
target_amount = uint128(40)
|
|
293
|
-
exact_match_result:
|
|
292
|
+
exact_match_result: set[Coin] = await select_coins(
|
|
294
293
|
spendable_amount,
|
|
295
294
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
296
295
|
coin_list,
|
|
@@ -304,7 +303,7 @@ class TestCoinSelection:
|
|
|
304
303
|
|
|
305
304
|
# check for match of 2
|
|
306
305
|
target_amount = uint128(153)
|
|
307
|
-
match_2:
|
|
306
|
+
match_2: set[Coin] = await select_coins(
|
|
308
307
|
spendable_amount,
|
|
309
308
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
310
309
|
coin_list,
|
|
@@ -317,7 +316,7 @@ class TestCoinSelection:
|
|
|
317
316
|
assert len(match_2) == 2
|
|
318
317
|
# check for match of at least 3. it is random after all.
|
|
319
318
|
target_amount = uint128(541)
|
|
320
|
-
match_3:
|
|
319
|
+
match_3: set[Coin] = await select_coins(
|
|
321
320
|
spendable_amount,
|
|
322
321
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
323
322
|
coin_list,
|
|
@@ -331,7 +330,7 @@ class TestCoinSelection:
|
|
|
331
330
|
|
|
332
331
|
# check for match of all
|
|
333
332
|
target_amount = spendable_amount
|
|
334
|
-
match_all:
|
|
333
|
+
match_all: set[Coin] = await select_coins(
|
|
335
334
|
spendable_amount,
|
|
336
335
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
337
336
|
coin_list,
|
|
@@ -345,13 +344,13 @@ class TestCoinSelection:
|
|
|
345
344
|
|
|
346
345
|
# test smallest greater than target
|
|
347
346
|
greater_coin_amounts = [1, 2, 5, 20, 400, 700]
|
|
348
|
-
greater_coin_list:
|
|
347
|
+
greater_coin_list: list[WalletCoinRecord] = [
|
|
349
348
|
WalletCoinRecord(Coin(a_hash, a_hash, uint64(a)), uint32(1), uint32(1), False, True, WalletType(0), 1)
|
|
350
349
|
for a in greater_coin_amounts
|
|
351
350
|
]
|
|
352
351
|
greater_spendable_amount = uint128(sum(greater_coin_amounts))
|
|
353
352
|
target_amount = uint128(625)
|
|
354
|
-
smallest_result:
|
|
353
|
+
smallest_result: set[Coin] = await select_coins(
|
|
355
354
|
greater_spendable_amount,
|
|
356
355
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
357
356
|
greater_coin_list,
|
|
@@ -364,12 +363,12 @@ class TestCoinSelection:
|
|
|
364
363
|
assert len(smallest_result) == 1
|
|
365
364
|
|
|
366
365
|
# test smallest greater than target with only 1 large coin.
|
|
367
|
-
single_greater_coin_list:
|
|
366
|
+
single_greater_coin_list: list[WalletCoinRecord] = [
|
|
368
367
|
WalletCoinRecord(Coin(a_hash, a_hash, uint64(70000)), uint32(1), uint32(1), False, True, WalletType(0), 1)
|
|
369
368
|
]
|
|
370
369
|
single_greater_spendable_amount = uint128(70000)
|
|
371
370
|
target_amount = uint128(50000)
|
|
372
|
-
single_greater_result:
|
|
371
|
+
single_greater_result: set[Coin] = await select_coins(
|
|
373
372
|
single_greater_spendable_amount,
|
|
374
373
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
375
374
|
single_greater_coin_list,
|
|
@@ -383,13 +382,13 @@ class TestCoinSelection:
|
|
|
383
382
|
|
|
384
383
|
# test smallest greater than target with only multiple larger then target coins.
|
|
385
384
|
multiple_greater_coin_amounts = [90000, 100000, 120000, 200000, 100000]
|
|
386
|
-
multiple_greater_coin_list:
|
|
385
|
+
multiple_greater_coin_list: list[WalletCoinRecord] = [
|
|
387
386
|
WalletCoinRecord(Coin(a_hash, a_hash, uint64(a)), uint32(1), uint32(1), False, True, WalletType(0), 1)
|
|
388
387
|
for a in multiple_greater_coin_amounts
|
|
389
388
|
]
|
|
390
389
|
multiple_greater_spendable_amount = uint128(sum(multiple_greater_coin_amounts))
|
|
391
390
|
target_amount = uint128(70000)
|
|
392
|
-
multiple_greater_result:
|
|
391
|
+
multiple_greater_result: set[Coin] = await select_coins(
|
|
393
392
|
multiple_greater_spendable_amount,
|
|
394
393
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
395
394
|
multiple_greater_coin_list,
|
|
@@ -406,7 +405,7 @@ class TestCoinSelection:
|
|
|
406
405
|
async def test_coin_selection_difficult(self, a_hash: bytes32) -> None:
|
|
407
406
|
num_coins = 40
|
|
408
407
|
spendable_amount = uint128(num_coins * 1000)
|
|
409
|
-
coin_list:
|
|
408
|
+
coin_list: list[WalletCoinRecord] = [
|
|
410
409
|
WalletCoinRecord(
|
|
411
410
|
Coin(a_hash, std_hash(i.to_bytes(4, "big")), uint64(1000)),
|
|
412
411
|
uint32(1),
|
|
@@ -419,7 +418,7 @@ class TestCoinSelection:
|
|
|
419
418
|
for i in range(num_coins)
|
|
420
419
|
]
|
|
421
420
|
target_amount = spendable_amount - 1
|
|
422
|
-
result:
|
|
421
|
+
result: set[Coin] = await select_coins(
|
|
423
422
|
spendable_amount,
|
|
424
423
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
425
424
|
coin_list,
|
|
@@ -434,7 +433,7 @@ class TestCoinSelection:
|
|
|
434
433
|
|
|
435
434
|
@pytest.mark.anyio
|
|
436
435
|
async def test_smallest_coin_over_amount(self, a_hash: bytes32) -> None:
|
|
437
|
-
coin_list:
|
|
436
|
+
coin_list: list[Coin] = [
|
|
438
437
|
Coin(a_hash, std_hash(i.to_bytes(4, "big")), uint64((39 - i) * 1000)) for i in range(40)
|
|
439
438
|
]
|
|
440
439
|
assert select_smallest_coin_over_target(uint128(100), coin_list) == coin_list[39 - 1]
|
|
@@ -446,7 +445,7 @@ class TestCoinSelection:
|
|
|
446
445
|
|
|
447
446
|
@pytest.mark.anyio
|
|
448
447
|
async def test_sum_largest_coins(self, a_hash: bytes32) -> None:
|
|
449
|
-
coin_list:
|
|
448
|
+
coin_list: list[Coin] = list(
|
|
450
449
|
reversed([Coin(a_hash, std_hash(i.to_bytes(4, "big")), uint64(i)) for i in range(41)])
|
|
451
450
|
)
|
|
452
451
|
assert sum_largest_coins(uint128(40), coin_list) == {coin_list[0]}
|
|
@@ -456,7 +455,7 @@ class TestCoinSelection:
|
|
|
456
455
|
@pytest.mark.anyio
|
|
457
456
|
async def test_knapsack_perf(self, a_hash: bytes32) -> None:
|
|
458
457
|
start = time.time()
|
|
459
|
-
coin_list:
|
|
458
|
+
coin_list: list[Coin] = [
|
|
460
459
|
Coin(a_hash, std_hash(i.to_bytes(4, "big")), uint64((200000 - i) * 1000)) for i in range(200000)
|
|
461
460
|
]
|
|
462
461
|
knapsack_coin_algorithm(coin_list, uint128(2000000), 9999999999999999, 500)
|
|
@@ -467,7 +466,7 @@ class TestCoinSelection:
|
|
|
467
466
|
@pytest.mark.anyio
|
|
468
467
|
async def test_coin_selection_min_coin(self, a_hash: bytes32) -> None:
|
|
469
468
|
spendable_amount = uint128(5000000 + 500 + 40050)
|
|
470
|
-
coin_list:
|
|
469
|
+
coin_list: list[WalletCoinRecord] = [
|
|
471
470
|
WalletCoinRecord(Coin(a_hash, a_hash, uint64(5000000)), uint32(1), uint32(1), False, True, WalletType(0), 1)
|
|
472
471
|
]
|
|
473
472
|
for i in range(500):
|
|
@@ -497,7 +496,7 @@ class TestCoinSelection:
|
|
|
497
496
|
# make sure coins are not identical.
|
|
498
497
|
for target_amount in [500, 1000, 50000, 500000]:
|
|
499
498
|
for min_coin_amount in [10, 100, 200, 300, 1000]:
|
|
500
|
-
result:
|
|
499
|
+
result: set[Coin] = await select_coins(
|
|
501
500
|
spendable_amount,
|
|
502
501
|
DEFAULT_COIN_SELECTION_CONFIG.override(min_coin_amount=uint64(min_coin_amount)),
|
|
503
502
|
coin_list,
|
|
@@ -529,7 +528,7 @@ class TestCoinSelection:
|
|
|
529
528
|
]
|
|
530
529
|
excluded_coins = [Coin(a_hash, a_hash, uint64(3)), Coin(c_hash, c_hash, uint64(9))]
|
|
531
530
|
# test that excluded coins are not included in the result
|
|
532
|
-
selected_coins:
|
|
531
|
+
selected_coins: set[Coin] = await select_coins(
|
|
533
532
|
spendable_amount,
|
|
534
533
|
DEFAULT_COIN_SELECTION_CONFIG.override(excluded_coin_ids=[c.name() for c in excluded_coins]),
|
|
535
534
|
spendable_wallet_coin_records,
|
|
@@ -541,7 +540,7 @@ class TestCoinSelection:
|
|
|
541
540
|
assert selected_coins is not None
|
|
542
541
|
assert sum(coin.amount for coin in selected_coins) >= target_amount
|
|
543
542
|
assert len(selected_coins) == 1
|
|
544
|
-
assert
|
|
543
|
+
assert next(iter(selected_coins)) == Coin(b_hash, b_hash, uint64(6))
|
|
545
544
|
|
|
546
545
|
excluded_all_coins = spendable_coins
|
|
547
546
|
# make sure that a failure is raised if all coins are excluded.
|
|
@@ -558,7 +557,7 @@ class TestCoinSelection:
|
|
|
558
557
|
@pytest.mark.anyio
|
|
559
558
|
async def test_coin_selection_with_zero_amount(self, a_hash: bytes32) -> None:
|
|
560
559
|
coin_amounts = [3, 6, 20, 40, 80, 150, 160, 203, 202, 201, 320]
|
|
561
|
-
coin_list:
|
|
560
|
+
coin_list: list[WalletCoinRecord] = [
|
|
562
561
|
WalletCoinRecord(Coin(a_hash, a_hash, uint64(a)), uint32(1), uint32(1), False, True, WalletType(0), 1)
|
|
563
562
|
for a in coin_amounts
|
|
564
563
|
]
|
|
@@ -566,7 +565,7 @@ class TestCoinSelection:
|
|
|
566
565
|
|
|
567
566
|
# validate that a zero amount is handled correctly
|
|
568
567
|
target_amount = uint128(0)
|
|
569
|
-
zero_amount_result:
|
|
568
|
+
zero_amount_result: set[Coin] = await select_coins(
|
|
570
569
|
spendable_amount,
|
|
571
570
|
DEFAULT_COIN_SELECTION_CONFIG,
|
|
572
571
|
coin_list,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Any,
|
|
4
|
+
from typing import Any, Optional, Union
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
7
|
from clvm.casts import int_from_bytes
|
|
@@ -66,8 +66,8 @@ from chia.wallet.conditions import (
|
|
|
66
66
|
class ConditionSerializations:
|
|
67
67
|
opcode: bytes
|
|
68
68
|
program_args: Program
|
|
69
|
-
json_keys:
|
|
70
|
-
json_args:
|
|
69
|
+
json_keys: list[str]
|
|
70
|
+
json_args: list[Any]
|
|
71
71
|
|
|
72
72
|
@property
|
|
73
73
|
def program(self) -> Program:
|
|
@@ -75,7 +75,7 @@ class ConditionSerializations:
|
|
|
75
75
|
return prog
|
|
76
76
|
|
|
77
77
|
|
|
78
|
-
HASH: bytes32 = bytes32
|
|
78
|
+
HASH: bytes32 = bytes32.zeros
|
|
79
79
|
HASH_HEX: str = HASH.hex()
|
|
80
80
|
PK: bytes = b"\xc0" + bytes(47)
|
|
81
81
|
PK_HEX: str = PK.hex()
|
|
@@ -156,14 +156,26 @@ def test_completeness() -> None:
|
|
|
156
156
|
ConditionSerializations(
|
|
157
157
|
ConditionOpcode.SEND_MESSAGE,
|
|
158
158
|
Program.to([0x3F, b"foobar", Program.to(HASH)]),
|
|
159
|
-
["
|
|
160
|
-
[
|
|
159
|
+
["mode_integer", "msg", "var_args", "sender", "receiver"],
|
|
160
|
+
[
|
|
161
|
+
"63",
|
|
162
|
+
"0x" + b"foobar".hex(),
|
|
163
|
+
["a0" + HASH_HEX],
|
|
164
|
+
{"mode_integer": 0b111},
|
|
165
|
+
{"mode_integer": 0b111, "coin_id_committed": "0x" + HASH_HEX},
|
|
166
|
+
],
|
|
161
167
|
),
|
|
162
168
|
ConditionSerializations(
|
|
163
169
|
ConditionOpcode.RECEIVE_MESSAGE,
|
|
164
170
|
Program.to([0x3F, b"foobar", Program.to(HASH)]),
|
|
165
|
-
["
|
|
166
|
-
[
|
|
171
|
+
["mode_integer", "msg", "var_args", "sender", "receiver"],
|
|
172
|
+
[
|
|
173
|
+
"63",
|
|
174
|
+
"0x" + b"foobar".hex(),
|
|
175
|
+
["a0" + HASH_HEX],
|
|
176
|
+
{"mode_integer": 0b111, "coin_id_committed": "0x" + HASH_HEX},
|
|
177
|
+
{"mode_integer": 0b111},
|
|
178
|
+
],
|
|
167
179
|
),
|
|
168
180
|
],
|
|
169
181
|
)
|
|
@@ -203,10 +215,10 @@ def test_unknown_condition() -> None:
|
|
|
203
215
|
)
|
|
204
216
|
def test_announcement_inversions(
|
|
205
217
|
drivers: Union[
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
]
|
|
218
|
+
tuple[type[CreateCoinAnnouncement], type[AssertCoinAnnouncement]],
|
|
219
|
+
tuple[type[CreatePuzzleAnnouncement], type[AssertPuzzleAnnouncement]],
|
|
220
|
+
tuple[type[CreateAnnouncement], type[AssertAnnouncement]],
|
|
221
|
+
],
|
|
210
222
|
) -> None:
|
|
211
223
|
create_driver, assert_driver = drivers
|
|
212
224
|
# mypy is not smart enough to understand that this `if` narrows down the potential types it could be
|
|
@@ -236,9 +248,9 @@ def test_announcement_inversions(
|
|
|
236
248
|
|
|
237
249
|
@dataclass(frozen=True)
|
|
238
250
|
class TimelockInfo:
|
|
239
|
-
drivers:
|
|
251
|
+
drivers: list[Condition]
|
|
240
252
|
parsed_info: ConditionValidTimes
|
|
241
|
-
conditions_after: Optional[
|
|
253
|
+
conditions_after: Optional[list[Condition]] = None
|
|
242
254
|
|
|
243
255
|
|
|
244
256
|
@pytest.mark.parametrize(
|
|
@@ -336,7 +348,7 @@ def test_timelock_parsing(timelock_info: TimelockInfo) -> None:
|
|
|
336
348
|
],
|
|
337
349
|
)
|
|
338
350
|
def test_invalid_condition(
|
|
339
|
-
cond:
|
|
351
|
+
cond: type[
|
|
340
352
|
Union[
|
|
341
353
|
AggSigParent,
|
|
342
354
|
AggSigPuzzle,
|
|
@@ -381,7 +393,7 @@ def test_invalid_condition(
|
|
|
381
393
|
],
|
|
382
394
|
prg: bytes,
|
|
383
395
|
) -> None:
|
|
384
|
-
if (cond
|
|
396
|
+
if (cond in {Remark, UnknownCondition}) and prg != b"\x80":
|
|
385
397
|
pytest.skip("condition takes arbitrary arguments")
|
|
386
398
|
|
|
387
399
|
with pytest.raises((ValueError, EvalError, KeyError)):
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
from io import StringIO
|
|
5
|
-
|
|
3
|
+
import pytest
|
|
6
4
|
from chia_rs import AugSchemeMPL, PrivateKey
|
|
7
5
|
|
|
8
6
|
from chia.types.blockchain_format.coin import Coin
|
|
@@ -16,36 +14,35 @@ from chia.wallet.util.debug_spend_bundle import debug_spend_bundle
|
|
|
16
14
|
from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
|
17
15
|
|
|
18
16
|
|
|
19
|
-
def test_debug_spend_bundle() -> None:
|
|
17
|
+
def test_debug_spend_bundle(capsys: pytest.CaptureFixture[str]) -> None:
|
|
20
18
|
sk = PrivateKey.from_bytes(bytes([1] * 32))
|
|
21
19
|
pk = sk.get_g1()
|
|
22
20
|
msg = bytes(32)
|
|
23
21
|
sig = AugSchemeMPL.sign(sk, msg)
|
|
24
22
|
ACS = Program.to(15).curry(Program.to("hey").curry("now")).curry("brown", "cow")
|
|
25
23
|
ACS_PH = ACS.get_tree_hash()
|
|
26
|
-
coin: Coin = Coin(bytes32
|
|
24
|
+
coin: Coin = Coin(bytes32.zeros, ACS_PH, uint64(3))
|
|
27
25
|
child_coin: Coin = Coin(coin.name(), ACS_PH, uint64(0))
|
|
28
|
-
coin_bad_reveal: Coin = Coin(bytes32
|
|
26
|
+
coin_bad_reveal: Coin = Coin(bytes32.zeros, bytes32.zeros, uint64(0))
|
|
29
27
|
solution = Program.to(
|
|
30
28
|
[
|
|
31
29
|
[ConditionOpcode.AGG_SIG_UNSAFE, pk, msg],
|
|
32
30
|
[ConditionOpcode.REMARK],
|
|
33
31
|
[ConditionOpcode.CREATE_COIN, ACS_PH, 0],
|
|
34
|
-
[ConditionOpcode.CREATE_COIN, bytes32
|
|
35
|
-
[ConditionOpcode.CREATE_COIN, bytes32
|
|
32
|
+
[ConditionOpcode.CREATE_COIN, bytes32.zeros, 1],
|
|
33
|
+
[ConditionOpcode.CREATE_COIN, bytes32.zeros, 2, [b"memo", b"memo", b"memo"]],
|
|
36
34
|
[ConditionOpcode.CREATE_COIN_ANNOUNCEMENT, None],
|
|
37
|
-
[ConditionOpcode.ASSERT_COIN_ANNOUNCEMENT, bytes32
|
|
35
|
+
[ConditionOpcode.ASSERT_COIN_ANNOUNCEMENT, bytes32.zeros],
|
|
38
36
|
[ConditionOpcode.ASSERT_COIN_ANNOUNCEMENT, std_hash(coin.name())],
|
|
39
37
|
[ConditionOpcode.CREATE_COIN_ANNOUNCEMENT, b"hey"],
|
|
40
38
|
[ConditionOpcode.CREATE_PUZZLE_ANNOUNCEMENT, None],
|
|
41
|
-
[ConditionOpcode.ASSERT_PUZZLE_ANNOUNCEMENT, bytes32
|
|
39
|
+
[ConditionOpcode.ASSERT_PUZZLE_ANNOUNCEMENT, bytes32.zeros],
|
|
42
40
|
[ConditionOpcode.ASSERT_PUZZLE_ANNOUNCEMENT, std_hash(coin.puzzle_hash)],
|
|
43
41
|
[ConditionOpcode.CREATE_PUZZLE_ANNOUNCEMENT, b"hey"],
|
|
44
42
|
]
|
|
45
43
|
)
|
|
46
44
|
|
|
47
|
-
|
|
48
|
-
sys.stdout = result
|
|
45
|
+
capsys.readouterr()
|
|
49
46
|
|
|
50
47
|
debug_spend_bundle(
|
|
51
48
|
WalletSpendBundle(
|
|
@@ -70,7 +67,152 @@ def test_debug_spend_bundle() -> None:
|
|
|
70
67
|
)
|
|
71
68
|
)
|
|
72
69
|
|
|
70
|
+
stdout, _ = capsys.readouterr()
|
|
71
|
+
|
|
73
72
|
assert (
|
|
74
|
-
|
|
75
|
-
==
|
|
73
|
+
stdout
|
|
74
|
+
== """================================================================================
|
|
75
|
+
consuming coin (0x0000000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000000000000000000000000000000000000000000 ())
|
|
76
|
+
with id f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
brun -y main.sym '(a (q 2 (q . 15) (c (q 2 (q . "hey") (c (q . "now") 1)) 1)) (c (q . "brown") (c (q . "cow") 1)))' '()'
|
|
80
|
+
|
|
81
|
+
--- Uncurried Args ---
|
|
82
|
+
- <curried puzzle>
|
|
83
|
+
- Layer 1:
|
|
84
|
+
- Mod hash: 507414e217dc45d6dbb923077c48641c9d2ba8430c92df9c49660480f398b133
|
|
85
|
+
- "brown"
|
|
86
|
+
- "cow"
|
|
87
|
+
- Layer 2:
|
|
88
|
+
- Mod hash: 24255ef5d941493b9978f3aabb0ed07d084ade196d23f463ff058954cbf6e9b6
|
|
89
|
+
- <curried puzzle>
|
|
90
|
+
- Layer 1:
|
|
91
|
+
- Mod hash: 7ee93c7e6fde43b6ac75100244fd294b8247362f22724b2ef0099bf7ab083def
|
|
92
|
+
- "now"
|
|
93
|
+
|
|
94
|
+
*** BAD PUZZLE REVEAL
|
|
95
|
+
3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 vs 0000000000000000000000000000000000000000000000000000000000000000
|
|
96
|
+
********************************************************************************
|
|
97
|
+
|
|
98
|
+
consuming coin (0x0000000000000000000000000000000000000000000000000000000000000000 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 3)
|
|
99
|
+
with id f61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
brun -y main.sym '(a (q 2 (q . 15) (c (q 2 (q . "hey") (c (q . "now") 1)) 1)) (c (q . "brown") (c (q . "cow") 1)))' '((49 0xaa1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1 0x0000000000000000000000000000000000000000000000000000000000000000) (q) (51 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ()) (51 0x0000000000000000000000000000000000000000000000000000000000000000 1) (51 0x0000000000000000000000000000000000000000000000000000000000000000 2 ("memo" "memo" "memo")) (60 ()) (61 0x0000000000000000000000000000000000000000000000000000000000000000) (61 0x98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4) (60 "hey") (62 ()) (63 0x0000000000000000000000000000000000000000000000000000000000000000) (63 0xfb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5) (62 "hey"))'
|
|
103
|
+
|
|
104
|
+
--- Uncurried Args ---
|
|
105
|
+
- <curried puzzle>
|
|
106
|
+
- Layer 1:
|
|
107
|
+
- Mod hash: 507414e217dc45d6dbb923077c48641c9d2ba8430c92df9c49660480f398b133
|
|
108
|
+
- "brown"
|
|
109
|
+
- "cow"
|
|
110
|
+
- Layer 2:
|
|
111
|
+
- Mod hash: 24255ef5d941493b9978f3aabb0ed07d084ade196d23f463ff058954cbf6e9b6
|
|
112
|
+
- <curried puzzle>
|
|
113
|
+
- Layer 1:
|
|
114
|
+
- Mod hash: 7ee93c7e6fde43b6ac75100244fd294b8247362f22724b2ef0099bf7ab083def
|
|
115
|
+
- "now"
|
|
116
|
+
|
|
117
|
+
((AGG_SIG_UNSAFE 0xaa1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1 0x0000000000000000000000000000000000000000000000000000000000000000) (REMARK) (CREATE_COIN 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ()) (CREATE_COIN 0x0000000000000000000000000000000000000000000000000000000000000000 1) (CREATE_COIN 0x0000000000000000000000000000000000000000000000000000000000000000 2 ("memo" "memo" "memo")) (CREATE_COIN_ANNOUNCEMENT ()) (ASSERT_COIN_ANNOUNCEMENT 0x0000000000000000000000000000000000000000000000000000000000000000) (ASSERT_COIN_ANNOUNCEMENT 0x98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4) (CREATE_COIN_ANNOUNCEMENT "hey") (CREATE_PUZZLE_ANNOUNCEMENT ()) (ASSERT_PUZZLE_ANNOUNCEMENT 0x0000000000000000000000000000000000000000000000000000000000000000) (ASSERT_PUZZLE_ANNOUNCEMENT 0xfb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5) (CREATE_PUZZLE_ANNOUNCEMENT "hey"))
|
|
118
|
+
|
|
119
|
+
grouped conditions:
|
|
120
|
+
|
|
121
|
+
(AGG_SIG_UNSAFE 0xaa1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1 0x0000000000000000000000000000000000000000000000000000000000000000)
|
|
122
|
+
|
|
123
|
+
(REMARK)
|
|
124
|
+
|
|
125
|
+
(CREATE_COIN 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ())
|
|
126
|
+
(CREATE_COIN 0x0000000000000000000000000000000000000000000000000000000000000000 1)
|
|
127
|
+
(CREATE_COIN 0x0000000000000000000000000000000000000000000000000000000000000000 2 ("memo" "memo" "memo"))
|
|
128
|
+
|
|
129
|
+
(CREATE_COIN_ANNOUNCEMENT ())
|
|
130
|
+
(CREATE_COIN_ANNOUNCEMENT "hey")
|
|
131
|
+
|
|
132
|
+
(ASSERT_COIN_ANNOUNCEMENT 0x0000000000000000000000000000000000000000000000000000000000000000)
|
|
133
|
+
(ASSERT_COIN_ANNOUNCEMENT 0x98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4)
|
|
134
|
+
|
|
135
|
+
(CREATE_PUZZLE_ANNOUNCEMENT ())
|
|
136
|
+
(CREATE_PUZZLE_ANNOUNCEMENT "hey")
|
|
137
|
+
|
|
138
|
+
(ASSERT_PUZZLE_ANNOUNCEMENT 0x0000000000000000000000000000000000000000000000000000000000000000)
|
|
139
|
+
(ASSERT_PUZZLE_ANNOUNCEMENT 0xfb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
-------
|
|
143
|
+
consuming coin (0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ())
|
|
144
|
+
with id a6f9255571f8a910057476920a960ae7be70034677303a944b28a47550b9a5e4
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
brun -y main.sym '(a (q 2 (q . 15) (c (q 2 (q . "hey") (c (q . "now") 1)) 1)) (c (q . "brown") (c (q . "cow") 1)))' '()'
|
|
148
|
+
|
|
149
|
+
--- Uncurried Args ---
|
|
150
|
+
- <curried puzzle>
|
|
151
|
+
- Layer 1:
|
|
152
|
+
- Mod hash: 507414e217dc45d6dbb923077c48641c9d2ba8430c92df9c49660480f398b133
|
|
153
|
+
- "brown"
|
|
154
|
+
- "cow"
|
|
155
|
+
- Layer 2:
|
|
156
|
+
- Mod hash: 24255ef5d941493b9978f3aabb0ed07d084ade196d23f463ff058954cbf6e9b6
|
|
157
|
+
- <curried puzzle>
|
|
158
|
+
- Layer 1:
|
|
159
|
+
- Mod hash: 7ee93c7e6fde43b6ac75100244fd294b8247362f22724b2ef0099bf7ab083def
|
|
160
|
+
- "now"
|
|
161
|
+
|
|
162
|
+
()
|
|
163
|
+
|
|
164
|
+
(no output conditions generated)
|
|
165
|
+
|
|
166
|
+
-------
|
|
167
|
+
|
|
168
|
+
spent coins
|
|
169
|
+
(0x0000000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000000000000000000000000000000000000000000 ())
|
|
170
|
+
=> spent coin id f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b
|
|
171
|
+
(0x0000000000000000000000000000000000000000000000000000000000000000 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 3)
|
|
172
|
+
=> spent coin id f61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f
|
|
173
|
+
|
|
174
|
+
created coins
|
|
175
|
+
(0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f 0x0000000000000000000000000000000000000000000000000000000000000000 1)
|
|
176
|
+
=> created coin id 041ca97661e2ab59c4d85848092229b00bae000573927b6ab9af4e2becd765c5
|
|
177
|
+
(0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f 0x0000000000000000000000000000000000000000000000000000000000000000 2)
|
|
178
|
+
=> created coin id d3f6dc7e6c0a81d22ebebd5559962bab95fa7798ad4b0bcbb42da214215e5e98
|
|
179
|
+
|
|
180
|
+
ephemeral coins
|
|
181
|
+
(0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ())
|
|
182
|
+
=> created coin id a6f9255571f8a910057476920a960ae7be70034677303a944b28a47550b9a5e4
|
|
183
|
+
created coin announcements
|
|
184
|
+
['0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f', '0x686579'] =>
|
|
185
|
+
17577cbab71385b4ee009c792f5ed2d954fbd3a31fede834150184519e0ac3fe
|
|
186
|
+
['0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f', '0x'] =>
|
|
187
|
+
98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4
|
|
188
|
+
created puzzle announcements
|
|
189
|
+
['0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307', '0x686579'] =>
|
|
190
|
+
73f660046d0c542a49db3410b64f12770fc23707bbf1f082d35d9af71f89edd2
|
|
191
|
+
['0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307', '0x'] =>
|
|
192
|
+
fb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
zero_coin_set = [<bytes32: a6f9255571f8a910057476920a960ae7be70034677303a944b28a47550b9a5e4>]
|
|
196
|
+
|
|
197
|
+
created coin announcements = ['17577cbab71385b4ee009c792f5ed2d954fbd3a31fede834150184519e0ac3fe', '98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4']
|
|
198
|
+
|
|
199
|
+
asserted coin announcements = ['0000000000000000000000000000000000000000000000000000000000000000', '98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4']
|
|
200
|
+
|
|
201
|
+
symdiff of coin announcements = ['0000000000000000000000000000000000000000000000000000000000000000', '17577cbab71385b4ee009c792f5ed2d954fbd3a31fede834150184519e0ac3fe']
|
|
202
|
+
|
|
203
|
+
created puzzle announcements = ['73f660046d0c542a49db3410b64f12770fc23707bbf1f082d35d9af71f89edd2', 'fb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5']
|
|
204
|
+
|
|
205
|
+
asserted puzzle announcements = ['0000000000000000000000000000000000000000000000000000000000000000', 'fb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5']
|
|
206
|
+
|
|
207
|
+
symdiff of puzzle announcements = ['0000000000000000000000000000000000000000000000000000000000000000', '73f660046d0c542a49db3410b64f12770fc23707bbf1f082d35d9af71f89edd2']
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
================================================================================
|
|
211
|
+
|
|
212
|
+
aggregated signature check pass: True
|
|
213
|
+
pks: [<G1Element aa1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1>]
|
|
214
|
+
msgs: ['0000000000000000000000000000000000000000000000000000000000000000']
|
|
215
|
+
add_data: ccd5bb71183532bff220ba46c268991a3ff07eb358e8255a65c30a2dce0e5fbb
|
|
216
|
+
signature: a458f8f379a4bec00f36cd38e36790210f0b7c4ee772417c0cd20513d75c7505a0532d220ab03a471e9e255e2c54472a03abd31a9feb56d551bf482e31e48747b04fe90f4e3c2af98a2de0d11f869cde360f93b8efa37ec1c28950aa52bfbacd
|
|
217
|
+
""" # noqa: E501
|
|
76
218
|
)
|