chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.5.8rc1__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/__init__.py +8 -4
- chia/_tests/blockchain/blockchain_test_utils.py +6 -8
- chia/_tests/blockchain/test_augmented_chain.py +4 -4
- chia/_tests/blockchain/test_blockchain.py +165 -190
- chia/_tests/blockchain/test_build_chains.py +2 -4
- chia/_tests/blockchain/test_get_block_generator.py +2 -3
- chia/_tests/clvm/coin_store.py +4 -7
- chia/_tests/clvm/test_clvm_step.py +4 -4
- chia/_tests/clvm/test_puzzle_compression.py +2 -1
- chia/_tests/clvm/test_puzzle_drivers.py +2 -2
- chia/_tests/clvm/test_singletons.py +2 -4
- chia/_tests/clvm/test_spend_sim.py +2 -2
- chia/_tests/cmds/cmd_test_utils.py +27 -45
- chia/_tests/cmds/test_cmd_framework.py +6 -6
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_show.py +4 -4
- chia/_tests/cmds/test_tx_config_args.py +1 -2
- chia/_tests/cmds/testing_classes.py +4 -5
- chia/_tests/cmds/wallet/test_did.py +24 -27
- chia/_tests/cmds/wallet/test_nft.py +12 -10
- chia/_tests/cmds/wallet/test_vcs.py +11 -12
- chia/_tests/cmds/wallet/test_wallet.py +134 -89
- chia/_tests/conftest.py +59 -30
- chia/_tests/connection_utils.py +2 -2
- chia/_tests/core/cmds/test_beta.py +4 -4
- chia/_tests/core/cmds/test_keys.py +2 -3
- chia/_tests/core/cmds/test_wallet.py +15 -15
- chia/_tests/core/consensus/test_pot_iterations.py +19 -73
- chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
- chia/_tests/core/daemon/test_daemon.py +11 -11
- chia/_tests/core/data_layer/conftest.py +2 -2
- chia/_tests/core/data_layer/test_data_rpc.py +28 -14
- chia/_tests/core/data_layer/test_data_store.py +10 -10
- chia/_tests/core/data_layer/util.py +11 -11
- chia/_tests/core/farmer/test_farmer_api.py +2 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
- chia/_tests/core/full_node/stores/test_block_store.py +5 -4
- chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
- chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +3 -4
- chia/_tests/core/full_node/test_conditions.py +21 -23
- chia/_tests/core/full_node/test_full_node.py +225 -62
- chia/_tests/core/full_node/test_hint_management.py +2 -4
- chia/_tests/core/full_node/test_performance.py +0 -1
- chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
- chia/_tests/core/full_node/test_transactions.py +1 -2
- chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
- chia/_tests/core/mempool/test_mempool.py +29 -37
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
- chia/_tests/core/mempool/test_mempool_manager.py +963 -839
- chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
- chia/_tests/core/server/serve.py +7 -7
- chia/_tests/core/server/test_dos.py +1 -2
- chia/_tests/core/server/test_event_loop.py +12 -4
- chia/_tests/core/server/test_loop.py +7 -8
- chia/_tests/core/server/test_rate_limits.py +9 -8
- chia/_tests/core/server/test_server.py +61 -1
- chia/_tests/core/services/test_services.py +2 -2
- chia/_tests/core/ssl/test_ssl.py +2 -2
- chia/_tests/core/test_cost_calculation.py +2 -6
- chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
- chia/_tests/core/test_filter.py +0 -1
- chia/_tests/core/test_full_node_rpc.py +2 -2
- chia/_tests/core/test_merkle_set.py +1 -2
- chia/_tests/core/test_seeder.py +4 -4
- chia/_tests/core/util/test_config.py +4 -4
- chia/_tests/core/util/test_jsonify.py +2 -2
- chia/_tests/core/util/test_keychain.py +3 -3
- chia/_tests/core/util/test_lockfile.py +2 -1
- chia/_tests/core/util/test_log_exceptions.py +1 -2
- chia/_tests/core/util/test_streamable.py +17 -17
- chia/_tests/db/test_db_wrapper.py +3 -2
- chia/_tests/environments/wallet.py +14 -14
- chia/_tests/ether.py +4 -3
- chia/_tests/farmer_harvester/test_farmer.py +41 -24
- chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
- chia/_tests/harvester/test_harvester_api.py +11 -4
- chia/_tests/plot_sync/test_plot_sync.py +13 -11
- chia/_tests/plot_sync/test_receiver.py +11 -10
- chia/_tests/plot_sync/test_sync_simulated.py +2 -2
- chia/_tests/plot_sync/util.py +1 -2
- chia/_tests/plotting/test_plot_manager.py +7 -6
- chia/_tests/plotting/test_prover.py +30 -38
- chia/_tests/pools/test_pool_cmdline.py +4 -6
- chia/_tests/pools/test_pool_rpc.py +203 -61
- chia/_tests/pools/test_pool_wallet.py +3 -3
- chia/_tests/pools/test_wallet_pool_store.py +1 -4
- chia/_tests/process_junit.py +2 -2
- chia/_tests/rpc/test_rpc_client.py +4 -4
- chia/_tests/rpc/test_rpc_server.py +3 -3
- chia/_tests/simulation/test_simulation.py +12 -25
- chia/_tests/solver/test_solver_service.py +13 -4
- chia/_tests/testconfig.py +2 -2
- chia/_tests/timelord/test_new_peak.py +22 -11
- chia/_tests/tools/test_run_block.py +0 -2
- chia/_tests/tools/test_virtual_project.py +2 -1
- chia/_tests/util/benchmarks.py +1 -0
- chia/_tests/util/blockchain.py +38 -36
- chia/_tests/util/blockchain_mock.py +11 -11
- chia/_tests/util/build_network_protocol_files.py +2 -1
- chia/_tests/util/coin_store.py +2 -1
- chia/_tests/util/config.py +1 -1
- chia/_tests/util/db_connection.py +2 -3
- chia/_tests/util/full_sync.py +9 -11
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/get_name_puzzle_conditions.py +2 -0
- chia/_tests/util/misc.py +24 -24
- chia/_tests/util/network_protocol_data.py +20 -3
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +292 -3
- chia/_tests/util/setup_nodes.py +62 -47
- chia/_tests/util/spend_sim.py +57 -57
- chia/_tests/util/test_async_pool.py +2 -3
- chia/_tests/util/test_chia_version.py +1 -3
- chia/_tests/util/test_config.py +3 -3
- chia/_tests/util/test_full_block_utils.py +6 -3
- chia/_tests/util/test_limited_semaphore.py +1 -2
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_network.py +1 -2
- chia/_tests/util/test_priority_mutex.py +3 -3
- chia/_tests/util/test_recursive_replace.py +5 -6
- chia/_tests/util/test_replace_str_to_bytes.py +8 -10
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/time_out_assert.py +2 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
- chia/_tests/wallet/conftest.py +6 -6
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
- chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
- chia/_tests/wallet/did_wallet/test_did.py +16 -6
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
- chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
- chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
- chia/_tests/wallet/test_clvm_streamable.py +2 -3
- chia/_tests/wallet/test_coin_management.py +2 -2
- chia/_tests/wallet/test_conditions.py +45 -51
- chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
- chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
- chia/_tests/wallet/test_notifications.py +14 -14
- chia/_tests/wallet/test_signer_protocol.py +5 -5
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
- chia/_tests/wallet/test_transaction_store.py +20 -20
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +380 -228
- chia/_tests/wallet/test_wallet_action_scope.py +4 -4
- chia/_tests/wallet/test_wallet_blockchain.py +12 -12
- chia/_tests/wallet/test_wallet_coin_store.py +3 -4
- chia/_tests/wallet/test_wallet_node.py +14 -14
- chia/_tests/wallet/test_wallet_test_framework.py +2 -1
- chia/_tests/wallet/test_wallet_utils.py +2 -3
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
- chia/_tests/wallet/wallet_block_tools.py +12 -11
- chia/_tests/weight_proof/config.py +1 -0
- chia/_tests/weight_proof/test_weight_proof.py +5 -4
- chia/apis/__init__.py +21 -0
- chia/apis/farmer_stub.py +102 -0
- chia/apis/full_node_stub.py +372 -0
- chia/apis/harvester_stub.py +57 -0
- chia/apis/introducer_stub.py +35 -0
- chia/apis/solver_stub.py +30 -0
- chia/apis/stub_protocol_registry.py +21 -0
- chia/apis/timelord_stub.py +39 -0
- chia/apis/wallet_stub.py +161 -0
- chia/cmds/beta.py +3 -4
- chia/cmds/beta_funcs.py +4 -3
- chia/cmds/check_wallet_db.py +4 -4
- chia/cmds/chia.py +1 -2
- chia/cmds/cmd_classes.py +11 -13
- chia/cmds/cmd_helpers.py +11 -11
- chia/cmds/cmds_util.py +15 -15
- chia/cmds/coin_funcs.py +6 -7
- chia/cmds/coins.py +2 -3
- chia/cmds/configure.py +1 -2
- chia/cmds/data.py +42 -42
- chia/cmds/data_funcs.py +81 -81
- chia/cmds/db.py +4 -5
- 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/data.py +4 -4
- chia/cmds/dev/gh.py +5 -5
- chia/cmds/dev/installers.py +2 -3
- chia/cmds/dev/mempool.py +3 -4
- chia/cmds/dev/mempool_funcs.py +4 -4
- chia/cmds/dev/sim.py +8 -8
- chia/cmds/dump_keyring.py +3 -3
- chia/cmds/farm.py +6 -8
- chia/cmds/farm_funcs.py +25 -24
- chia/cmds/init_funcs.py +4 -4
- chia/cmds/keys.py +16 -18
- chia/cmds/keys_funcs.py +36 -36
- chia/cmds/netspace.py +1 -3
- chia/cmds/netspace_funcs.py +1 -2
- chia/cmds/options.py +3 -2
- chia/cmds/param_types.py +17 -16
- chia/cmds/passphrase.py +6 -7
- chia/cmds/passphrase_funcs.py +11 -13
- chia/cmds/peer.py +1 -3
- chia/cmds/peer_funcs.py +3 -3
- chia/cmds/plotnft.py +6 -7
- chia/cmds/plotnft_funcs.py +37 -26
- chia/cmds/rpc.py +3 -3
- chia/cmds/show.py +3 -5
- chia/cmds/show_funcs.py +9 -9
- chia/cmds/sim_funcs.py +25 -26
- chia/cmds/solver.py +1 -3
- chia/cmds/solver_funcs.py +1 -2
- chia/cmds/start_funcs.py +2 -2
- chia/cmds/wallet.py +76 -81
- chia/cmds/wallet_funcs.py +206 -177
- chia/consensus/augmented_chain.py +6 -6
- chia/consensus/block_body_validation.py +19 -15
- chia/consensus/block_creation.py +25 -21
- chia/consensus/block_header_validation.py +27 -13
- chia/consensus/block_height_map.py +3 -6
- chia/consensus/block_height_map_protocol.py +2 -2
- chia/consensus/block_record.py +2 -4
- chia/consensus/blockchain.py +58 -40
- chia/consensus/blockchain_interface.py +7 -7
- chia/consensus/coin_store_protocol.py +5 -6
- chia/consensus/condition_tools.py +4 -4
- chia/consensus/cost_calculator.py +2 -3
- chia/consensus/default_constants.py +16 -13
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +3 -5
- chia/consensus/find_fork_point.py +2 -4
- chia/consensus/full_block_to_block_record.py +11 -13
- chia/consensus/generator_tools.py +2 -3
- chia/consensus/get_block_challenge.py +42 -26
- chia/consensus/get_block_generator.py +2 -3
- chia/consensus/make_sub_epoch_summary.py +8 -7
- chia/consensus/multiprocess_validation.py +31 -20
- chia/consensus/pos_quality.py +6 -23
- chia/consensus/pot_iterations.py +17 -44
- chia/consensus/signage_point.py +4 -5
- chia/consensus/vdf_info_computation.py +2 -4
- chia/daemon/client.py +8 -8
- chia/daemon/keychain_proxy.py +31 -37
- chia/daemon/server.py +32 -33
- chia/daemon/windows_signal.py +4 -3
- chia/data_layer/data_layer.py +86 -77
- chia/data_layer/data_layer_rpc_api.py +9 -9
- chia/data_layer/data_layer_rpc_client.py +13 -15
- chia/data_layer/data_layer_server.py +3 -3
- chia/data_layer/data_layer_util.py +14 -14
- chia/data_layer/data_layer_wallet.py +94 -101
- chia/data_layer/data_store.py +50 -50
- chia/data_layer/dl_wallet_store.py +9 -12
- chia/data_layer/download_data.py +8 -9
- chia/data_layer/s3_plugin_service.py +5 -9
- chia/data_layer/start_data_layer.py +5 -5
- chia/farmer/farmer.py +31 -31
- chia/farmer/farmer_api.py +45 -33
- chia/farmer/farmer_rpc_api.py +5 -4
- chia/farmer/farmer_rpc_client.py +6 -6
- chia/farmer/start_farmer.py +6 -6
- chia/full_node/block_store.py +13 -16
- chia/full_node/check_fork_next_block.py +1 -2
- chia/full_node/coin_store.py +15 -16
- chia/full_node/eligible_coin_spends.py +3 -3
- chia/full_node/fee_estimate_store.py +2 -3
- chia/full_node/fee_tracker.py +1 -2
- chia/full_node/full_block_utils.py +4 -4
- chia/full_node/full_node.py +238 -224
- chia/full_node/full_node_api.py +193 -150
- chia/full_node/full_node_rpc_api.py +53 -31
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- chia/full_node/hint_management.py +2 -2
- chia/full_node/mempool.py +17 -19
- chia/full_node/mempool_manager.py +89 -42
- chia/full_node/pending_tx_cache.py +2 -3
- chia/full_node/start_full_node.py +5 -5
- chia/full_node/sync_store.py +3 -4
- chia/full_node/tx_processing_queue.py +34 -13
- chia/full_node/weight_proof.py +61 -48
- chia/harvester/harvester.py +25 -24
- chia/harvester/harvester_api.py +61 -38
- chia/harvester/harvester_rpc_api.py +10 -10
- chia/harvester/start_harvester.py +4 -4
- chia/introducer/introducer.py +3 -3
- chia/introducer/introducer_api.py +6 -4
- chia/introducer/start_introducer.py +4 -4
- chia/legacy/keyring.py +3 -3
- chia/plot_sync/delta.py +1 -2
- chia/plot_sync/receiver.py +20 -17
- chia/plot_sync/sender.py +15 -10
- chia/plotters/bladebit.py +7 -7
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +4 -4
- chia/plotters/plotters.py +4 -4
- chia/plotters/plotters_util.py +3 -3
- chia/plotting/cache.py +20 -14
- chia/plotting/check_plots.py +26 -35
- chia/plotting/create_plots.py +22 -23
- chia/plotting/manager.py +21 -14
- chia/plotting/prover.py +59 -42
- chia/plotting/util.py +16 -16
- chia/pools/pool_config.py +2 -1
- chia/pools/pool_puzzles.py +11 -12
- chia/pools/pool_wallet.py +34 -57
- chia/pools/pool_wallet_info.py +39 -10
- chia/protocols/farmer_protocol.py +8 -9
- chia/protocols/fee_estimate.py +3 -4
- chia/protocols/full_node_protocol.py +3 -4
- chia/protocols/harvester_protocol.py +27 -15
- chia/protocols/outbound_message.py +3 -3
- chia/protocols/pool_protocol.py +8 -9
- chia/protocols/shared_protocol.py +1 -2
- chia/protocols/solver_protocol.py +9 -2
- chia/protocols/timelord_protocol.py +4 -7
- chia/protocols/wallet_protocol.py +11 -12
- chia/rpc/rpc_client.py +9 -9
- chia/rpc/rpc_server.py +17 -17
- chia/rpc/util.py +2 -2
- chia/seeder/crawler.py +8 -8
- chia/seeder/crawler_api.py +21 -27
- chia/seeder/crawler_rpc_api.py +2 -2
- chia/seeder/dns_server.py +21 -21
- chia/seeder/start_crawler.py +4 -4
- chia/server/address_manager.py +15 -16
- chia/server/api_protocol.py +11 -11
- chia/server/chia_policy.py +46 -26
- chia/server/introducer_peers.py +2 -3
- chia/server/node_discovery.py +19 -19
- chia/server/rate_limit_numbers.py +4 -5
- chia/server/rate_limits.py +4 -4
- chia/server/resolve_peer_info.py +4 -4
- chia/server/server.py +49 -52
- chia/server/signal_handlers.py +6 -6
- chia/server/start_service.py +17 -17
- chia/server/upnp.py +4 -6
- chia/server/ws_connection.py +52 -37
- chia/simulator/add_blocks_in_batches.py +1 -3
- chia/simulator/block_tools.py +312 -200
- chia/simulator/full_node_simulator.py +56 -35
- chia/simulator/keyring.py +2 -3
- chia/simulator/setup_services.py +15 -15
- chia/simulator/simulator_full_node_rpc_api.py +1 -2
- chia/simulator/simulator_full_node_rpc_client.py +1 -2
- chia/simulator/simulator_protocol.py +1 -2
- chia/simulator/simulator_test_tools.py +3 -3
- chia/simulator/start_simulator.py +7 -7
- chia/simulator/wallet_tools.py +10 -10
- chia/solver/solver.py +10 -10
- chia/solver/solver_api.py +10 -8
- chia/solver/solver_rpc_api.py +2 -2
- chia/solver/start_solver.py +4 -4
- chia/ssl/cacert.pem +148 -90
- chia/ssl/chia_ca.crt +14 -10
- chia/ssl/chia_ca_old.crt +19 -0
- chia/ssl/create_ssl.py +4 -4
- chia/ssl/renewedselfsignedca.conf +4 -0
- chia/ssl/ssl_check.py +1 -2
- chia/timelord/iters_from_block.py +1 -4
- chia/timelord/start_timelord.py +4 -4
- chia/timelord/timelord.py +44 -40
- chia/timelord/timelord_api.py +6 -4
- chia/timelord/timelord_launcher.py +2 -2
- chia/timelord/timelord_rpc_api.py +2 -2
- chia/timelord/timelord_state.py +11 -12
- chia/types/block_protocol.py +1 -3
- chia/types/blockchain_format/coin.py +1 -3
- chia/types/blockchain_format/program.py +11 -8
- chia/types/blockchain_format/proof_of_space.py +123 -76
- chia/types/blockchain_format/tree_hash.py +3 -3
- chia/types/blockchain_format/vdf.py +1 -2
- chia/types/coin_spend.py +3 -3
- chia/types/mempool_item.py +5 -5
- chia/types/mempool_submission_status.py +2 -3
- chia/types/peer_info.py +1 -2
- chia/types/unfinished_header_block.py +3 -4
- chia/types/validation_state.py +1 -2
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +5 -5
- chia/util/bech32m.py +1 -2
- chia/util/beta_metrics.py +2 -2
- chia/util/block_cache.py +4 -4
- chia/util/chia_logging.py +2 -2
- chia/util/chia_version.py +1 -2
- chia/util/config.py +15 -16
- chia/util/db_wrapper.py +26 -27
- chia/util/default_root.py +1 -2
- chia/util/errors.py +3 -3
- chia/util/file_keyring.py +14 -14
- chia/util/files.py +2 -3
- chia/util/hash.py +4 -4
- chia/util/initial-config.yaml +3 -5
- chia/util/inline_executor.py +2 -1
- chia/util/ip_address.py +1 -2
- chia/util/keychain.py +25 -27
- chia/util/keyring_wrapper.py +18 -19
- chia/util/lock.py +3 -4
- chia/util/log_exceptions.py +1 -2
- chia/util/lru_cache.py +2 -2
- chia/util/network.py +6 -6
- chia/util/path.py +2 -3
- chia/util/priority_mutex.py +2 -2
- chia/util/profiler.py +1 -2
- chia/util/safe_cancel_task.py +1 -2
- chia/util/streamable.py +22 -8
- chia/util/task_referencer.py +1 -1
- chia/util/timing.py +3 -3
- chia/util/virtual_project_analysis.py +6 -5
- chia/util/ws_message.py +2 -2
- chia/wallet/cat_wallet/cat_info.py +3 -4
- chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
- chia/wallet/cat_wallet/cat_utils.py +3 -4
- chia/wallet/cat_wallet/cat_wallet.py +61 -83
- chia/wallet/cat_wallet/lineage_store.py +3 -4
- chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
- chia/wallet/coin_selection.py +9 -10
- chia/wallet/conditions.py +120 -105
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
- chia/wallet/derivation_record.py +1 -2
- chia/wallet/derive_keys.py +2 -4
- chia/wallet/did_wallet/did_info.py +10 -11
- chia/wallet/did_wallet/did_wallet.py +36 -82
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
- chia/wallet/driver_protocol.py +5 -7
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
- chia/wallet/nft_wallet/nft_info.py +8 -9
- chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
- chia/wallet/nft_wallet/nft_wallet.py +79 -116
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
- chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
- chia/wallet/nft_wallet/uncurry_nft.py +10 -11
- chia/wallet/notification_manager.py +3 -3
- chia/wallet/notification_store.py +44 -61
- chia/wallet/outer_puzzles.py +6 -7
- chia/wallet/puzzle_drivers.py +34 -6
- chia/wallet/puzzles/clawback/drivers.py +6 -6
- chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
- chia/wallet/puzzles/load_clvm.py +1 -1
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
- chia/wallet/puzzles/singleton_top_layer.py +2 -3
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
- chia/wallet/puzzles/tails.py +3 -3
- chia/wallet/singleton.py +5 -7
- chia/wallet/singleton_record.py +3 -3
- chia/wallet/start_wallet.py +5 -5
- chia/wallet/trade_manager.py +37 -58
- chia/wallet/trade_record.py +4 -4
- chia/wallet/trading/offer.py +59 -46
- chia/wallet/trading/trade_store.py +8 -9
- chia/wallet/transaction_record.py +8 -8
- chia/wallet/uncurried_puzzle.py +1 -2
- chia/wallet/util/clvm_streamable.py +12 -12
- chia/wallet/util/compute_hints.py +4 -5
- chia/wallet/util/curry_and_treehash.py +1 -2
- chia/wallet/util/merkle_tree.py +2 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/wallet/util/signing.py +85 -0
- chia/wallet/util/tx_config.py +15 -6
- chia/wallet/util/wallet_sync_utils.py +14 -16
- chia/wallet/util/wallet_types.py +2 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
- chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
- chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
- chia/wallet/vc_wallet/vc_drivers.py +27 -27
- chia/wallet/vc_wallet/vc_store.py +5 -6
- chia/wallet/vc_wallet/vc_wallet.py +33 -61
- chia/wallet/wallet.py +50 -78
- chia/wallet/wallet_action_scope.py +11 -11
- chia/wallet/wallet_blockchain.py +12 -12
- chia/wallet/wallet_coin_record.py +12 -6
- chia/wallet/wallet_coin_store.py +24 -25
- chia/wallet/wallet_interested_store.py +3 -5
- chia/wallet/wallet_nft_store.py +10 -11
- chia/wallet/wallet_node.py +53 -61
- chia/wallet/wallet_node_api.py +5 -3
- chia/wallet/wallet_protocol.py +23 -23
- chia/wallet/wallet_puzzle_store.py +15 -18
- chia/wallet/wallet_request_types.py +778 -114
- chia/wallet/wallet_retry_store.py +1 -3
- chia/wallet/wallet_rpc_api.py +572 -909
- chia/wallet/wallet_rpc_client.py +87 -279
- chia/wallet/wallet_singleton_store.py +3 -4
- chia/wallet/wallet_state_manager.py +332 -106
- chia/wallet/wallet_transaction_store.py +11 -14
- chia/wallet/wallet_user_store.py +4 -6
- chia/wallet/wallet_weight_proof_handler.py +4 -4
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
- chia/apis.py +0 -21
- chia/consensus/check_time_locks.py +0 -57
- chia/data_layer/puzzles/__init__.py +0 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
- chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
- chia/types/coin_record.py +0 -44
- chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
|
@@ -4,9 +4,8 @@ import asyncio
|
|
|
4
4
|
import contextlib
|
|
5
5
|
import functools
|
|
6
6
|
import logging
|
|
7
|
-
from collections.abc import Awaitable
|
|
7
|
+
from collections.abc import Awaitable, Callable
|
|
8
8
|
from dataclasses import dataclass
|
|
9
|
-
from typing import Callable, Optional
|
|
10
9
|
from unittest.mock import MagicMock
|
|
11
10
|
|
|
12
11
|
import pytest
|
|
@@ -111,7 +110,9 @@ async def test_request_block_headers(
|
|
|
111
110
|
assert [x.transactions_filter for x in bh] == [b"\x00"] * 6
|
|
112
111
|
|
|
113
112
|
num_blocks = 20
|
|
114
|
-
new_blocks = bt.get_consecutive_blocks(
|
|
113
|
+
new_blocks = bt.get_consecutive_blocks(
|
|
114
|
+
num_blocks, block_list_input=default_400_blocks, farmer_reward_puzzle_hash=ph
|
|
115
|
+
)
|
|
115
116
|
await add_blocks_in_batches(new_blocks, full_node_api.full_node)
|
|
116
117
|
msg = await full_node_api.request_block_headers(wallet_protocol.RequestBlockHeaders(uint32(110), uint32(115), True))
|
|
117
118
|
assert msg is not None
|
|
@@ -626,7 +627,7 @@ async def test_request_additions_errors(simulator_and_wallet: OldSimulatorsAndWa
|
|
|
626
627
|
|
|
627
628
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
628
629
|
|
|
629
|
-
last_block:
|
|
630
|
+
last_block: BlockRecord | None = full_node_api.full_node.blockchain.get_peak()
|
|
630
631
|
assert last_block is not None
|
|
631
632
|
|
|
632
633
|
# Invalid height
|
|
@@ -1431,10 +1432,10 @@ async def test_retry_store(
|
|
|
1431
1432
|
|
|
1432
1433
|
def flaky_get_coin_state(
|
|
1433
1434
|
flakiness_info: FlakinessInfo,
|
|
1434
|
-
func: Callable[[list[bytes32], WSChiaConnection,
|
|
1435
|
-
) -> Callable[[list[bytes32], WSChiaConnection,
|
|
1435
|
+
func: Callable[[list[bytes32], WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]],
|
|
1436
|
+
) -> Callable[[list[bytes32], WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]]:
|
|
1436
1437
|
async def new_func(
|
|
1437
|
-
coin_names: list[bytes32], peer: WSChiaConnection, fork_height:
|
|
1438
|
+
coin_names: list[bytes32], peer: WSChiaConnection, fork_height: uint32 | None = None
|
|
1438
1439
|
) -> list[CoinState]:
|
|
1439
1440
|
if flakiness_info.coin_state_flaky:
|
|
1440
1441
|
flakiness_info.coin_state_flaky = False
|
|
@@ -1447,10 +1448,10 @@ async def test_retry_store(
|
|
|
1447
1448
|
request_puzzle_solution_failure_tested = False
|
|
1448
1449
|
|
|
1449
1450
|
def flaky_request_puzzle_solution(
|
|
1450
|
-
func: Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[
|
|
1451
|
-
) -> Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[
|
|
1451
|
+
func: Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[Message | None]],
|
|
1452
|
+
) -> Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[Message | None]]:
|
|
1452
1453
|
@functools.wraps(func)
|
|
1453
|
-
async def new_func(self: FullNodeAPI, request: wallet_protocol.RequestPuzzleSolution) ->
|
|
1454
|
+
async def new_func(self: FullNodeAPI, request: wallet_protocol.RequestPuzzleSolution) -> Message | None:
|
|
1454
1455
|
nonlocal request_puzzle_solution_failure_tested
|
|
1455
1456
|
if not request_puzzle_solution_failure_tested:
|
|
1456
1457
|
request_puzzle_solution_failure_tested = True
|
|
@@ -1464,10 +1465,10 @@ async def test_retry_store(
|
|
|
1464
1465
|
|
|
1465
1466
|
def flaky_fetch_children(
|
|
1466
1467
|
flakiness_info: FlakinessInfo,
|
|
1467
|
-
func: Callable[[bytes32, WSChiaConnection,
|
|
1468
|
-
) -> Callable[[bytes32, WSChiaConnection,
|
|
1468
|
+
func: Callable[[bytes32, WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]],
|
|
1469
|
+
) -> Callable[[bytes32, WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]]:
|
|
1469
1470
|
async def new_func(
|
|
1470
|
-
coin_name: bytes32, peer: WSChiaConnection, fork_height:
|
|
1471
|
+
coin_name: bytes32, peer: WSChiaConnection, fork_height: uint32 | None = None
|
|
1471
1472
|
) -> list[CoinState]:
|
|
1472
1473
|
if flakiness_info.fetch_children_flaky:
|
|
1473
1474
|
flakiness_info.fetch_children_flaky = False
|
|
@@ -1490,9 +1491,9 @@ async def test_retry_store(
|
|
|
1490
1491
|
return new_func
|
|
1491
1492
|
|
|
1492
1493
|
def flaky_info_for_puzhash(
|
|
1493
|
-
flakiness_info: FlakinessInfo, func: Callable[[bytes32], Awaitable[
|
|
1494
|
-
) -> Callable[[bytes32], Awaitable[
|
|
1495
|
-
async def new_func(puzzle_hash: bytes32) ->
|
|
1494
|
+
flakiness_info: FlakinessInfo, func: Callable[[bytes32], Awaitable[WalletIdentifier | None]]
|
|
1495
|
+
) -> Callable[[bytes32], Awaitable[WalletIdentifier | None]]:
|
|
1496
|
+
async def new_func(puzzle_hash: bytes32) -> WalletIdentifier | None:
|
|
1496
1497
|
if flakiness_info.db_flaky:
|
|
1497
1498
|
flakiness_info.db_flaky = False
|
|
1498
1499
|
raise AIOSqliteError
|
|
@@ -1605,7 +1606,7 @@ async def test_bad_peak_mismatch(
|
|
|
1605
1606
|
full_node_protocol.RespondProofOfWeight(wp, wp.recent_chain_data[-1].header_hash),
|
|
1606
1607
|
)
|
|
1607
1608
|
with monkeypatch.context() as m:
|
|
1608
|
-
f: asyncio.Future[
|
|
1609
|
+
f: asyncio.Future[Message | None] = asyncio.Future()
|
|
1609
1610
|
f.set_result(wp_msg)
|
|
1610
1611
|
m.setattr(full_node_api, "request_proof_of_weight", MagicMock(return_value=f))
|
|
1611
1612
|
|
|
@@ -1614,7 +1615,7 @@ async def test_bad_peak_mismatch(
|
|
|
1614
1615
|
ProtocolMessageTypes.respond_block_header,
|
|
1615
1616
|
wallet_protocol.RespondBlockHeader(wp.recent_chain_data[-1]),
|
|
1616
1617
|
)
|
|
1617
|
-
f2: asyncio.Future[
|
|
1618
|
+
f2: asyncio.Future[Message | None] = asyncio.Future()
|
|
1618
1619
|
f2.set_result(header_block_msg)
|
|
1619
1620
|
m.setattr(full_node_api, "request_block_header", MagicMock(return_value=f2))
|
|
1620
1621
|
|
|
@@ -1638,7 +1639,7 @@ async def test_bad_peak_mismatch(
|
|
|
1638
1639
|
async def test_long_sync_untrusted_break(
|
|
1639
1640
|
setup_two_nodes_and_wallet: OldSimulatorsAndWallets,
|
|
1640
1641
|
default_1000_blocks: list[FullBlock],
|
|
1641
|
-
|
|
1642
|
+
default_1500_blocks: list[FullBlock],
|
|
1642
1643
|
self_hostname: str,
|
|
1643
1644
|
caplog: pytest.LogCaptureFixture,
|
|
1644
1645
|
use_delta_sync: bool,
|
|
@@ -1649,27 +1650,16 @@ async def test_long_sync_untrusted_break(
|
|
|
1649
1650
|
wallet_node.config["trusted_peers"] = {trusted_full_node_server.node_id.hex(): None}
|
|
1650
1651
|
wallet_node.config["use_delta_sync"] = use_delta_sync
|
|
1651
1652
|
|
|
1652
|
-
sync_canceled = False
|
|
1653
|
-
|
|
1654
1653
|
async def register_for_ph_updates(
|
|
1655
1654
|
self: object,
|
|
1656
1655
|
request: wallet_protocol.RegisterForPhUpdates,
|
|
1657
1656
|
peer: WSChiaConnection,
|
|
1658
1657
|
) -> None:
|
|
1659
|
-
|
|
1660
|
-
# Just sleep a long time here to simulate a long-running untrusted sync
|
|
1661
|
-
try:
|
|
1662
|
-
await asyncio.sleep(120)
|
|
1663
|
-
except Exception:
|
|
1664
|
-
sync_canceled = True
|
|
1665
|
-
raise
|
|
1658
|
+
await peer.wait_until_closed()
|
|
1666
1659
|
|
|
1667
1660
|
def wallet_syncing() -> bool:
|
|
1668
1661
|
return wallet_node.wallet_state_manager.sync_mode
|
|
1669
1662
|
|
|
1670
|
-
def check_sync_canceled() -> bool:
|
|
1671
|
-
return sync_canceled
|
|
1672
|
-
|
|
1673
1663
|
def synced_to_trusted() -> bool:
|
|
1674
1664
|
return trusted_full_node_server.node_id in wallet_node.synced_peers
|
|
1675
1665
|
|
|
@@ -1678,26 +1668,32 @@ async def test_long_sync_untrusted_break(
|
|
|
1678
1668
|
untrusted_peers = sum(not wallet_node.is_trusted(peer) for peer in wallet_server.all_connections.values())
|
|
1679
1669
|
return trusted_peers == 1 and untrusted_peers == 0
|
|
1680
1670
|
|
|
1681
|
-
await add_blocks_in_batches(
|
|
1671
|
+
await add_blocks_in_batches(default_1500_blocks[:600], trusted_full_node_api.full_node)
|
|
1672
|
+
await add_blocks_in_batches(default_1000_blocks[:600], untrusted_full_node_api.full_node)
|
|
1682
1673
|
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1674
|
+
with (
|
|
1675
|
+
patch_request_handler(api=untrusted_full_node_api, handler=register_for_ph_updates),
|
|
1676
|
+
caplog.at_level(logging.INFO),
|
|
1677
|
+
):
|
|
1686
1678
|
# Connect to the untrusted peer and wait until the long sync started
|
|
1687
|
-
await wallet_server.start_client(PeerInfo(self_hostname, untrusted_full_node_server.get_port()), None)
|
|
1679
|
+
assert await wallet_server.start_client(PeerInfo(self_hostname, untrusted_full_node_server.get_port()), None)
|
|
1680
|
+
untrusted_conn = wallet_server.all_connections.get(untrusted_full_node_server.node_id)
|
|
1681
|
+
assert untrusted_conn is not None
|
|
1688
1682
|
await time_out_assert(30, wallet_syncing)
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1683
|
+
|
|
1684
|
+
# Connect to the trusted peer and make sure the running untrusted long sync gets interrupted via disconnect
|
|
1685
|
+
assert await wallet_server.start_client(PeerInfo(self_hostname, trusted_full_node_server.get_port()), None)
|
|
1686
|
+
await time_out_assert(600, wallet_height_at_least, True, wallet_node, 599)
|
|
1687
|
+
await time_out_assert(10, synced_to_trusted)
|
|
1688
|
+
assert untrusted_full_node_server.node_id not in wallet_node.synced_peers
|
|
1689
|
+
|
|
1690
|
+
assert "Connected to a synced trusted peer, disconnecting from all untrusted nodes." in caplog.text
|
|
1691
|
+
assert (
|
|
1692
|
+
f"Connection closed: {untrusted_conn.peer_info.host}, node id: {untrusted_full_node_server.node_id}"
|
|
1693
|
+
in caplog.text
|
|
1694
|
+
)
|
|
1699
1695
|
# And that we only have a trusted peer left
|
|
1700
|
-
|
|
1696
|
+
await time_out_assert(30, only_trusted_peer)
|
|
1701
1697
|
|
|
1702
1698
|
|
|
1703
1699
|
@pytest.mark.anyio
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
import pytest
|
|
7
6
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -77,14 +76,14 @@ def test_nested_serialization() -> None:
|
|
|
77
76
|
@streamable
|
|
78
77
|
@dataclasses.dataclass(frozen=True)
|
|
79
78
|
class Compound(Streamable):
|
|
80
|
-
optional:
|
|
79
|
+
optional: BasicCLVMStreamable | None
|
|
81
80
|
list: list[BasicCLVMStreamable]
|
|
82
81
|
|
|
83
82
|
|
|
84
83
|
@clvm_streamable
|
|
85
84
|
@dataclasses.dataclass(frozen=True)
|
|
86
85
|
class CompoundCLVM(Streamable):
|
|
87
|
-
optional:
|
|
86
|
+
optional: BasicCLVMStreamable | None
|
|
88
87
|
list: list[BasicCLVMStreamable]
|
|
89
88
|
|
|
90
89
|
|
|
@@ -66,8 +66,8 @@ def test_list_parsing(id: ValueAndArgs, show_unconfirmed: ValueAndArgs, paginate
|
|
|
66
66
|
{
|
|
67
67
|
"num_environments": 1,
|
|
68
68
|
"blocks_needed": [3], # 6 coins to test pagination
|
|
69
|
-
"reuse_puzhash": True, #
|
|
70
|
-
"trusted": True, #
|
|
69
|
+
"reuse_puzhash": True, # irrelevant
|
|
70
|
+
"trusted": True, # irrelevant
|
|
71
71
|
}
|
|
72
72
|
],
|
|
73
73
|
indirect=True,
|
|
@@ -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
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
7
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -214,11 +214,9 @@ def test_unknown_condition() -> None:
|
|
|
214
214
|
],
|
|
215
215
|
)
|
|
216
216
|
def test_announcement_inversions(
|
|
217
|
-
drivers:
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
tuple[type[CreateAnnouncement], type[AssertAnnouncement]],
|
|
221
|
-
],
|
|
217
|
+
drivers: tuple[type[CreateCoinAnnouncement], type[AssertCoinAnnouncement]]
|
|
218
|
+
| tuple[type[CreatePuzzleAnnouncement], type[AssertPuzzleAnnouncement]]
|
|
219
|
+
| tuple[type[CreateAnnouncement], type[AssertAnnouncement]],
|
|
222
220
|
) -> None:
|
|
223
221
|
create_driver, assert_driver = drivers
|
|
224
222
|
# mypy is not smart enough to understand that this `if` narrows down the potential types it could be
|
|
@@ -250,7 +248,7 @@ def test_announcement_inversions(
|
|
|
250
248
|
class TimelockInfo:
|
|
251
249
|
drivers: list[Condition]
|
|
252
250
|
parsed_info: ConditionValidTimes
|
|
253
|
-
conditions_after:
|
|
251
|
+
conditions_after: list[Condition] | None = None
|
|
254
252
|
|
|
255
253
|
|
|
256
254
|
@pytest.mark.parametrize(
|
|
@@ -285,9 +283,7 @@ class TimelockInfo:
|
|
|
285
283
|
],
|
|
286
284
|
)
|
|
287
285
|
def test_timelock_parsing(timelock_info: TimelockInfo) -> None:
|
|
288
|
-
assert timelock_info.parsed_info == parse_timelock_info(
|
|
289
|
-
[UnknownCondition(Program.to(None), []), *timelock_info.drivers]
|
|
290
|
-
)
|
|
286
|
+
assert timelock_info.parsed_info == parse_timelock_info([UnknownCondition(Program.NIL, []), *timelock_info.drivers])
|
|
291
287
|
assert timelock_info.parsed_info.to_conditions() == (
|
|
292
288
|
timelock_info.conditions_after if timelock_info.conditions_after is not None else timelock_info.drivers
|
|
293
289
|
)
|
|
@@ -349,47 +345,45 @@ def test_timelock_parsing(timelock_info: TimelockInfo) -> None:
|
|
|
349
345
|
)
|
|
350
346
|
def test_invalid_condition(
|
|
351
347
|
cond: type[
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
ReceiveMessage,
|
|
392
|
-
]
|
|
348
|
+
AggSigParent
|
|
349
|
+
| AggSigPuzzle
|
|
350
|
+
| AggSigAmount
|
|
351
|
+
| AggSigPuzzleAmount
|
|
352
|
+
| AggSigParentAmount
|
|
353
|
+
| AggSigParentPuzzle
|
|
354
|
+
| AggSigUnsafe
|
|
355
|
+
| AggSigMe
|
|
356
|
+
| CreateCoin
|
|
357
|
+
| ReserveFee
|
|
358
|
+
| AssertCoinAnnouncement
|
|
359
|
+
| CreateCoinAnnouncement
|
|
360
|
+
| AssertPuzzleAnnouncement
|
|
361
|
+
| CreatePuzzleAnnouncement
|
|
362
|
+
| AssertConcurrentSpend
|
|
363
|
+
| AssertConcurrentPuzzle
|
|
364
|
+
| AssertMyCoinID
|
|
365
|
+
| AssertMyParentID
|
|
366
|
+
| AssertMyPuzzleHash
|
|
367
|
+
| AssertMyAmount
|
|
368
|
+
| AssertMyBirthSeconds
|
|
369
|
+
| AssertMyBirthHeight
|
|
370
|
+
| AssertSecondsRelative
|
|
371
|
+
| AssertSecondsAbsolute
|
|
372
|
+
| AssertHeightRelative
|
|
373
|
+
| AssertHeightAbsolute
|
|
374
|
+
| AssertBeforeSecondsRelative
|
|
375
|
+
| AssertBeforeSecondsAbsolute
|
|
376
|
+
| AssertBeforeHeightRelative
|
|
377
|
+
| AssertBeforeHeightAbsolute
|
|
378
|
+
| Softfork
|
|
379
|
+
| Remark
|
|
380
|
+
| UnknownCondition
|
|
381
|
+
| AggSig
|
|
382
|
+
| CreateAnnouncement
|
|
383
|
+
| AssertAnnouncement
|
|
384
|
+
| Timelock
|
|
385
|
+
| SendMessage
|
|
386
|
+
| ReceiveMessage
|
|
393
387
|
],
|
|
394
388
|
prg: bytes,
|
|
395
389
|
) -> None:
|
|
@@ -50,7 +50,7 @@ def test_debug_spend_bundle(capsys: pytest.CaptureFixture[str]) -> None:
|
|
|
50
50
|
make_spend(
|
|
51
51
|
coin_bad_reveal,
|
|
52
52
|
ACS,
|
|
53
|
-
Program.
|
|
53
|
+
Program.NIL,
|
|
54
54
|
),
|
|
55
55
|
make_spend(
|
|
56
56
|
coin,
|
|
@@ -60,7 +60,7 @@ def test_debug_spend_bundle(capsys: pytest.CaptureFixture[str]) -> None:
|
|
|
60
60
|
make_spend(
|
|
61
61
|
child_coin,
|
|
62
62
|
ACS,
|
|
63
|
-
Program.
|
|
63
|
+
Program.NIL,
|
|
64
64
|
),
|
|
65
65
|
],
|
|
66
66
|
sig,
|
|
@@ -5,10 +5,9 @@ from collections import OrderedDict
|
|
|
5
5
|
from collections.abc import AsyncGenerator
|
|
6
6
|
from dataclasses import dataclass
|
|
7
7
|
from random import Random
|
|
8
|
-
from typing import Optional
|
|
9
8
|
|
|
10
9
|
import pytest
|
|
11
|
-
from chia_rs import AugSchemeMPL, Coin, CoinSpend, CoinState, Program, SpendBundle
|
|
10
|
+
from chia_rs import AugSchemeMPL, Coin, CoinRecord, CoinSpend, CoinState, Program, SpendBundle
|
|
12
11
|
from chia_rs.sized_bytes import bytes32
|
|
13
12
|
from chia_rs.sized_ints import uint8, uint16, uint32, uint64
|
|
14
13
|
|
|
@@ -26,7 +25,6 @@ from chia.simulator import simulator_protocol
|
|
|
26
25
|
from chia.simulator.block_tools import BlockTools
|
|
27
26
|
from chia.simulator.full_node_simulator import FullNodeSimulator
|
|
28
27
|
from chia.simulator.start_simulator import SimulatorFullNodeService
|
|
29
|
-
from chia.types.coin_record import CoinRecord
|
|
30
28
|
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
31
29
|
from chia.util.hash import std_hash
|
|
32
30
|
from chia.wallet.wallet_service import WalletService
|
|
@@ -621,14 +619,14 @@ async def test_request_puzzle_state_limit(one_node: OneNode, self_hostname: str)
|
|
|
621
619
|
class PuzzleStateData:
|
|
622
620
|
coin_states: list[CoinState]
|
|
623
621
|
end_of_batch: bool
|
|
624
|
-
previous_height:
|
|
622
|
+
previous_height: uint32 | None
|
|
625
623
|
header_hash: bytes32
|
|
626
624
|
|
|
627
625
|
|
|
628
626
|
async def sync_puzzle_hashes(
|
|
629
627
|
puzzle_hashes: list[bytes32],
|
|
630
628
|
*,
|
|
631
|
-
initial_previous_height:
|
|
629
|
+
initial_previous_height: uint32 | None,
|
|
632
630
|
initial_header_hash: bytes32,
|
|
633
631
|
filters: wallet_protocol.CoinStateFilters,
|
|
634
632
|
subscribe_when_finished: bool = False,
|
|
@@ -893,7 +891,7 @@ async def subscribe_puzzle(
|
|
|
893
891
|
assert len(response.coin_states) == existing_coin_states
|
|
894
892
|
|
|
895
893
|
|
|
896
|
-
async def spend_coin(simulator: FullNodeSimulator, coin: Coin, solution:
|
|
894
|
+
async def spend_coin(simulator: FullNodeSimulator, coin: Coin, solution: Program | None = None) -> bytes32:
|
|
897
895
|
bundle = SpendBundle(
|
|
898
896
|
[CoinSpend(coin, IDENTITY_PUZZLE, Program.to([]) if solution is None else solution)], AugSchemeMPL.aggregate([])
|
|
899
897
|
)
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import random
|
|
4
4
|
import tempfile
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Any
|
|
6
|
+
from typing import Any
|
|
7
7
|
|
|
8
8
|
import pytest
|
|
9
9
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -109,8 +109,8 @@ async def test_notifications(
|
|
|
109
109
|
|
|
110
110
|
notification_manager_2.potentially_add_new_notification = track_coin_state
|
|
111
111
|
|
|
112
|
-
allow_larger_height:
|
|
113
|
-
allow_height:
|
|
112
|
+
allow_larger_height: int | None = None
|
|
113
|
+
allow_height: int | None = None
|
|
114
114
|
|
|
115
115
|
for case in ("block all", "block too low", "allow", "allow_larger", "block_too_large"):
|
|
116
116
|
msg: bytes = bytes(case, "utf8")
|
|
@@ -165,34 +165,34 @@ async def test_notifications(
|
|
|
165
165
|
assert allow_larger_height is not None
|
|
166
166
|
assert allow_height is not None
|
|
167
167
|
|
|
168
|
-
notifications = await notification_manager_2.notification_store.
|
|
168
|
+
notifications = await notification_manager_2.notification_store.get_notifications(pagination=(0, 2))
|
|
169
169
|
assert len(notifications) == 2
|
|
170
170
|
assert notifications[0].message == b"allow_larger"
|
|
171
171
|
assert notifications[0].height == allow_larger_height
|
|
172
|
-
notifications = await notification_manager_2.notification_store.
|
|
172
|
+
notifications = await notification_manager_2.notification_store.get_notifications(pagination=(1, None))
|
|
173
173
|
assert len(notifications) == 1
|
|
174
174
|
assert notifications[0].message == b"allow"
|
|
175
175
|
assert notifications[0].height == allow_height
|
|
176
|
-
notifications = await notification_manager_2.notification_store.
|
|
176
|
+
notifications = await notification_manager_2.notification_store.get_notifications(pagination=(0, 1))
|
|
177
177
|
assert len(notifications) == 1
|
|
178
178
|
assert notifications[0].message == b"allow_larger"
|
|
179
|
-
notifications = await notification_manager_2.notification_store.
|
|
179
|
+
notifications = await notification_manager_2.notification_store.get_notifications(pagination=(None, 1))
|
|
180
180
|
assert len(notifications) == 1
|
|
181
181
|
assert notifications[0].message == b"allow_larger"
|
|
182
182
|
assert (
|
|
183
|
-
await notification_manager_2.notification_store.get_notifications([n.id for n in notifications])
|
|
183
|
+
await notification_manager_2.notification_store.get_notifications(coin_ids=[n.id for n in notifications])
|
|
184
184
|
== notifications
|
|
185
185
|
)
|
|
186
186
|
|
|
187
|
-
sent_notifications = await notification_manager_1.notification_store.
|
|
187
|
+
sent_notifications = await notification_manager_1.notification_store.get_notifications()
|
|
188
188
|
assert len(sent_notifications) == 0
|
|
189
189
|
|
|
190
|
-
await notification_manager_2.notification_store.
|
|
191
|
-
assert len(await notification_manager_2.notification_store.
|
|
190
|
+
await notification_manager_2.notification_store.delete_notifications()
|
|
191
|
+
assert len(await notification_manager_2.notification_store.get_notifications()) == 0
|
|
192
192
|
await notification_manager_2.notification_store.add_notification(notifications[0])
|
|
193
|
-
await notification_manager_2.notification_store.delete_notifications([n.id for n in notifications])
|
|
194
|
-
assert len(await notification_manager_2.notification_store.
|
|
193
|
+
await notification_manager_2.notification_store.delete_notifications(coin_ids=[n.id for n in notifications])
|
|
194
|
+
assert len(await notification_manager_2.notification_store.get_notifications()) == 0
|
|
195
195
|
|
|
196
196
|
assert not await func(*notification_manager_2.most_recent_args)
|
|
197
|
-
await notification_manager_2.notification_store.
|
|
197
|
+
await notification_manager_2.notification_store.delete_notifications()
|
|
198
198
|
assert not await func(*notification_manager_2.most_recent_args)
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
import click
|
|
7
6
|
import pytest
|
|
@@ -135,7 +134,7 @@ async def test_p2dohp_wallet_signer_protocol(wallet_environments: WalletTestFram
|
|
|
135
134
|
async with wallet.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=False) as action_scope:
|
|
136
135
|
[coin] = await wallet.select_coins(uint64(0), action_scope)
|
|
137
136
|
puzzle: Program = await wallet.puzzle_for_puzzle_hash(coin.puzzle_hash)
|
|
138
|
-
delegated_puzzle: Program = Program.
|
|
137
|
+
delegated_puzzle: Program = Program.NIL
|
|
139
138
|
delegated_puzzle_hash: bytes32 = delegated_puzzle.get_tree_hash()
|
|
140
139
|
solution: Program = Program.to([None, None, None])
|
|
141
140
|
|
|
@@ -145,9 +144,9 @@ async def test_p2dohp_wallet_signer_protocol(wallet_environments: WalletTestFram
|
|
|
145
144
|
solution,
|
|
146
145
|
)
|
|
147
146
|
|
|
148
|
-
derivation_record:
|
|
149
|
-
DerivationRecord
|
|
150
|
-
|
|
147
|
+
derivation_record: (
|
|
148
|
+
DerivationRecord | None
|
|
149
|
+
) = await wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(coin.puzzle_hash)
|
|
151
150
|
assert derivation_record is not None
|
|
152
151
|
pubkey: G1Element = derivation_record.pubkey
|
|
153
152
|
atom = puzzle.uncurry()[1].at("f").atom
|
|
@@ -687,6 +686,7 @@ async def test_signer_commands(wallet_environments: WalletTestFramework) -> None
|
|
|
687
686
|
)
|
|
688
687
|
|
|
689
688
|
|
|
689
|
+
@pytest.mark.filterwarnings("ignore:The parameter .* is used more than once:UserWarning")
|
|
690
690
|
def test_signer_command_default_parsing() -> None:
|
|
691
691
|
check_click_parsing(
|
|
692
692
|
GatherSigningInfoCMD(
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from collections.abc import Callable
|
|
3
4
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Any,
|
|
5
|
+
from typing import Any, TypeVar, cast, get_args, get_origin
|
|
5
6
|
|
|
6
7
|
from chia_rs import CoinSpend, G1Element, G2Element
|
|
7
8
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -78,7 +79,7 @@ class PuzzleDB:
|
|
|
78
79
|
def add_puzzle(self, puzzle: Program) -> None:
|
|
79
80
|
self._db[puzzle.get_tree_hash()] = Program.from_bytes(bytes(puzzle))
|
|
80
81
|
|
|
81
|
-
def puzzle_for_hash(self, puzzle_hash: bytes32) ->
|
|
82
|
+
def puzzle_for_hash(self, puzzle_hash: bytes32) -> Program | None:
|
|
82
83
|
return self._db.get(puzzle_hash)
|
|
83
84
|
|
|
84
85
|
|
|
@@ -237,7 +238,7 @@ class SingletonWallet:
|
|
|
237
238
|
current_state: Coin
|
|
238
239
|
lineage_proof: Program
|
|
239
240
|
|
|
240
|
-
def inner_puzzle(self, puzzle_db: PuzzleDB) ->
|
|
241
|
+
def inner_puzzle(self, puzzle_db: PuzzleDB) -> Program | None:
|
|
241
242
|
puzzle = puzzle_db.puzzle_for_hash(self.current_state.puzzle_hash)
|
|
242
243
|
if puzzle is None:
|
|
243
244
|
return None
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
import random
|
|
5
|
-
from typing import Any
|
|
5
|
+
from typing import Any
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
8
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -31,24 +31,24 @@ coin_2 = Coin(bytes32.random(module_seeded_random), bytes32.random(module_seeded
|
|
|
31
31
|
coin_3 = Coin(bytes32.random(module_seeded_random), bytes32.random(module_seeded_random), uint64(12312 - 1234))
|
|
32
32
|
|
|
33
33
|
tr1 = TransactionRecord(
|
|
34
|
-
uint32(0),
|
|
35
|
-
uint64(1000),
|
|
36
|
-
bytes32(bytes32.zeros),
|
|
37
|
-
|
|
38
|
-
uint64(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
[
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
34
|
+
confirmed_at_height=uint32(0),
|
|
35
|
+
created_at_time=uint64(1000),
|
|
36
|
+
to_puzzle_hash=bytes32(bytes32.zeros),
|
|
37
|
+
to_address=encode_puzzle_hash(bytes32(bytes32.zeros), "txch"),
|
|
38
|
+
amount=uint64(1234),
|
|
39
|
+
fee_amount=uint64(12),
|
|
40
|
+
confirmed=False,
|
|
41
|
+
sent=uint32(0),
|
|
42
|
+
spend_bundle=None,
|
|
43
|
+
additions=[coin_2, coin_3],
|
|
44
|
+
removals=[coin_1],
|
|
45
|
+
wallet_id=uint32(1),
|
|
46
|
+
sent_to=[],
|
|
47
|
+
trade_id=bytes32(bytes32.random(module_seeded_random)),
|
|
48
|
+
type=uint32(TransactionType.OUTGOING_TX),
|
|
49
|
+
name=bytes32(bytes32.random(module_seeded_random)),
|
|
50
|
+
memos={},
|
|
51
|
+
valid_times=ConditionValidTimes(),
|
|
52
52
|
)
|
|
53
53
|
|
|
54
54
|
MINIMUM_CONFIG = {
|
|
@@ -811,7 +811,7 @@ async def test_get_not_sent(seeded_random: random.Random) -> None:
|
|
|
811
811
|
|
|
812
812
|
@pytest.mark.anyio
|
|
813
813
|
async def test_transaction_record_is_valid() -> None:
|
|
814
|
-
invalid_attempts: list[tuple[str, uint8,
|
|
814
|
+
invalid_attempts: list[tuple[str, uint8, str | None]] = []
|
|
815
815
|
# The tx should be valid as long as we don't have minimum_send_attempts failed attempts
|
|
816
816
|
while len(invalid_attempts) < minimum_send_attempts:
|
|
817
817
|
assert dataclasses.replace(tr1, sent_to=invalid_attempts).is_valid()
|
chia/_tests/wallet/test_util.py
CHANGED
|
@@ -106,7 +106,7 @@ def test_list_to_binary_tree() -> None:
|
|
|
106
106
|
@pytest.mark.parametrize(
|
|
107
107
|
"serializations",
|
|
108
108
|
[
|
|
109
|
-
(tuple(), Program.
|
|
109
|
+
(tuple(), Program.NIL, []),
|
|
110
110
|
((bytes32.zeros,), Program.to([bytes32.zeros]), [LineageProofField.PARENT_NAME]),
|
|
111
111
|
(
|
|
112
112
|
(bytes32.zeros, bytes32.zeros),
|
|
@@ -129,7 +129,7 @@ def test_lineage_proof_varargs(serializations: tuple[tuple[Any, ...], Program, l
|
|
|
129
129
|
@pytest.mark.parametrize(
|
|
130
130
|
"serializations",
|
|
131
131
|
[
|
|
132
|
-
({}, Program.
|
|
132
|
+
({}, Program.NIL, []),
|
|
133
133
|
({"parent_name": bytes32.zeros}, Program.to([bytes32.zeros]), [LineageProofField.PARENT_NAME]),
|
|
134
134
|
(
|
|
135
135
|
{"parent_name": bytes32.zeros, "inner_puzzle_hash": bytes32.zeros},
|