chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.6.0rc2__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_blockchain_transactions.py +5 -2
- 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 +66 -31
- 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 +273 -70
- chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
- 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 +198 -30
- chia/_tests/core/mempool/test_mempool.py +54 -50
- 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 +988 -854
- 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 +9 -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 +63 -60
- 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 +17 -17
- 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 +16 -15
- 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 +374 -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 +19 -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 +50 -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 +239 -223
- chia/full_node/full_node_api.py +197 -152
- chia/full_node/full_node_rpc_api.py +34 -32
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- chia/full_node/hard_fork_utils.py +44 -0
- 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 +120 -36
- 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 +4 -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 +24 -10
- 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 +142 -106
- 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.6.0rc2.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
- 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.6.0rc2.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
import pytest
|
|
7
6
|
from chia_rs import G2Element, Program
|
|
@@ -36,7 +35,7 @@ def test_back_and_forth_serialization() -> None:
|
|
|
36
35
|
|
|
37
36
|
@dataclass
|
|
38
37
|
class MockWalletStateManager:
|
|
39
|
-
most_recent_call:
|
|
38
|
+
most_recent_call: (
|
|
40
39
|
tuple[
|
|
41
40
|
list[TransactionRecord],
|
|
42
41
|
bool,
|
|
@@ -45,8 +44,9 @@ class MockWalletStateManager:
|
|
|
45
44
|
list[SigningResponse],
|
|
46
45
|
list[WalletSpendBundle],
|
|
47
46
|
list[SingletonRecord],
|
|
48
|
-
]
|
|
49
|
-
|
|
47
|
+
]
|
|
48
|
+
| None
|
|
49
|
+
) = None
|
|
50
50
|
|
|
51
51
|
async def add_pending_transactions(
|
|
52
52
|
self,
|
|
@@ -22,22 +22,22 @@ async def test_wallet_blockchain(
|
|
|
22
22
|
) -> None:
|
|
23
23
|
[full_node_api], [(wallet_node, _)], bt = simulator_and_wallet
|
|
24
24
|
|
|
25
|
-
await add_blocks_in_batches(default_1000_blocks[:
|
|
25
|
+
await add_blocks_in_batches(default_1000_blocks[:700], full_node_api.full_node)
|
|
26
26
|
resp = await full_node_api.request_proof_of_weight(
|
|
27
27
|
full_node_protocol.RequestProofOfWeight(
|
|
28
|
-
uint32(default_1000_blocks[
|
|
28
|
+
uint32(default_1000_blocks[599].height + 1), default_1000_blocks[599].header_hash
|
|
29
29
|
)
|
|
30
30
|
)
|
|
31
31
|
assert resp is not None
|
|
32
32
|
resp_2 = await full_node_api.request_proof_of_weight(
|
|
33
33
|
full_node_protocol.RequestProofOfWeight(
|
|
34
|
-
uint32(default_1000_blocks[
|
|
34
|
+
uint32(default_1000_blocks[560].height + 1), default_1000_blocks[560].header_hash
|
|
35
35
|
)
|
|
36
36
|
)
|
|
37
37
|
assert resp_2 is not None
|
|
38
38
|
resp_3 = await full_node_api.request_proof_of_weight(
|
|
39
39
|
full_node_protocol.RequestProofOfWeight(
|
|
40
|
-
uint32(default_1000_blocks[
|
|
40
|
+
uint32(default_1000_blocks[605].height + 1), default_1000_blocks[605].header_hash
|
|
41
41
|
)
|
|
42
42
|
)
|
|
43
43
|
assert resp_3 is not None
|
|
@@ -59,18 +59,18 @@ async def test_wallet_blockchain(
|
|
|
59
59
|
await chain.new_valid_weight_proof(weight_proof, records)
|
|
60
60
|
peak_block = await chain.get_peak_block()
|
|
61
61
|
assert peak_block is not None
|
|
62
|
-
assert peak_block.height ==
|
|
62
|
+
assert peak_block.height == 599
|
|
63
63
|
assert chain.get_latest_timestamp() > 0
|
|
64
64
|
|
|
65
65
|
await chain.new_valid_weight_proof(weight_proof_short, records_short)
|
|
66
66
|
peak_block = await chain.get_peak_block()
|
|
67
67
|
assert peak_block is not None
|
|
68
|
-
assert peak_block.height ==
|
|
68
|
+
assert peak_block.height == 599
|
|
69
69
|
|
|
70
70
|
await chain.new_valid_weight_proof(weight_proof_long, records_long)
|
|
71
71
|
peak_block = await chain.get_peak_block()
|
|
72
72
|
assert peak_block is not None
|
|
73
|
-
assert peak_block.height ==
|
|
73
|
+
assert peak_block.height == 605
|
|
74
74
|
|
|
75
75
|
header_blocks: list[HeaderBlock] = []
|
|
76
76
|
for block in default_1000_blocks:
|
|
@@ -81,24 +81,24 @@ async def test_wallet_blockchain(
|
|
|
81
81
|
print(res, err)
|
|
82
82
|
assert res == AddBlockResult.DISCONNECTED_BLOCK
|
|
83
83
|
|
|
84
|
-
res, err = await chain.add_block(header_blocks[
|
|
84
|
+
res, err = await chain.add_block(header_blocks[500])
|
|
85
85
|
print(res, err)
|
|
86
86
|
assert res == AddBlockResult.ALREADY_HAVE_BLOCK
|
|
87
87
|
|
|
88
|
-
res, err = await chain.add_block(header_blocks[
|
|
88
|
+
res, err = await chain.add_block(header_blocks[607])
|
|
89
89
|
print(res, err)
|
|
90
90
|
assert res == AddBlockResult.DISCONNECTED_BLOCK
|
|
91
91
|
|
|
92
92
|
res, err = await chain.add_block(
|
|
93
|
-
header_blocks[
|
|
93
|
+
header_blocks[606].replace(challenge_chain_ip_proof=VDFProof(uint8(2), b"123", True))
|
|
94
94
|
)
|
|
95
95
|
assert res == AddBlockResult.INVALID_BLOCK
|
|
96
96
|
|
|
97
97
|
peak_block = await chain.get_peak_block()
|
|
98
98
|
assert peak_block is not None
|
|
99
|
-
assert peak_block.height ==
|
|
99
|
+
assert peak_block.height == 605
|
|
100
100
|
|
|
101
|
-
for header_block in header_blocks[
|
|
101
|
+
for header_block in header_blocks[606:]:
|
|
102
102
|
res, err = await chain.add_block(header_block)
|
|
103
103
|
assert res == AddBlockResult.NEW_PEAK
|
|
104
104
|
peak_block = await chain.get_peak_block()
|
|
@@ -2,7 +2,6 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import random
|
|
4
4
|
from dataclasses import dataclass, field, replace
|
|
5
|
-
from typing import Optional
|
|
6
5
|
|
|
7
6
|
import pytest
|
|
8
7
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -14,7 +13,7 @@ from chia.util.streamable import Streamable, UInt32Range, UInt64Range, Versioned
|
|
|
14
13
|
from chia.wallet.puzzles.clawback.metadata import ClawbackMetadata
|
|
15
14
|
from chia.wallet.util.query_filter import AmountFilter, HashFilter
|
|
16
15
|
from chia.wallet.util.wallet_types import CoinType, WalletType
|
|
17
|
-
from chia.wallet.wallet_coin_record import WalletCoinRecord
|
|
16
|
+
from chia.wallet.wallet_coin_record import WalletCoinRecord, WalletCoinRecordMetadataParsingError
|
|
18
17
|
from chia.wallet.wallet_coin_store import CoinRecordOrder, GetCoinRecords, GetCoinRecordsResult, WalletCoinStore
|
|
19
18
|
|
|
20
19
|
clawback_metadata = ClawbackMetadata(uint64(0), bytes32(b"1" * 32), bytes32(b"2" * 32))
|
|
@@ -134,7 +133,7 @@ class DummyWalletCoinRecords:
|
|
|
134
133
|
],
|
|
135
134
|
)
|
|
136
135
|
def test_wallet_coin_record_parsed_metadata_failures(invalid_record: WalletCoinRecord, error: str) -> None:
|
|
137
|
-
with pytest.raises(
|
|
136
|
+
with pytest.raises(WalletCoinRecordMetadataParsingError, match=error):
|
|
138
137
|
invalid_record.parsed_metadata()
|
|
139
138
|
|
|
140
139
|
|
|
@@ -632,7 +631,7 @@ get_coin_records_mixed_tests: list[tuple[GetCoinRecords, int, list[WalletCoinRec
|
|
|
632
631
|
|
|
633
632
|
|
|
634
633
|
async def run_get_coin_records_test(
|
|
635
|
-
request: GetCoinRecords, total_count:
|
|
634
|
+
request: GetCoinRecords, total_count: int | None, coin_records: list[WalletCoinRecord]
|
|
636
635
|
) -> None:
|
|
637
636
|
async with DBConnection(1) as db_wrapper:
|
|
638
637
|
store = await WalletCoinStore.create(db_wrapper)
|
|
@@ -5,7 +5,7 @@ import sys
|
|
|
5
5
|
import time
|
|
6
6
|
import types
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import Any
|
|
8
|
+
from typing import Any
|
|
9
9
|
|
|
10
10
|
import pytest
|
|
11
11
|
from chia_rs import CoinState, FullBlock, G1Element, PrivateKey
|
|
@@ -19,6 +19,7 @@ from chia.protocols import wallet_protocol
|
|
|
19
19
|
from chia.protocols.outbound_message import Message, make_msg
|
|
20
20
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
21
21
|
from chia.server.api_protocol import Self
|
|
22
|
+
from chia.server.ws_connection import WSChiaConnection
|
|
22
23
|
from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
|
|
23
24
|
from chia.simulator.block_tools import test_constants
|
|
24
25
|
from chia.types.blockchain_format.coin import Coin
|
|
@@ -72,7 +73,7 @@ async def test_get_private_key_default_key(root_path_populated_with_config: Path
|
|
|
72
73
|
@pytest.mark.anyio
|
|
73
74
|
@pytest.mark.parametrize("fingerprint", [None, 1234567890])
|
|
74
75
|
async def test_get_private_key_missing_key(
|
|
75
|
-
root_path_populated_with_config: Path, get_temp_keyring: Keychain, fingerprint:
|
|
76
|
+
root_path_populated_with_config: Path, get_temp_keyring: Keychain, fingerprint: int | None
|
|
76
77
|
) -> None:
|
|
77
78
|
root_path = root_path_populated_with_config
|
|
78
79
|
keychain = get_temp_keyring # empty keyring
|
|
@@ -163,7 +164,7 @@ async def test_get_public_key_default_key(root_path_populated_with_config: Path,
|
|
|
163
164
|
@pytest.mark.anyio
|
|
164
165
|
@pytest.mark.parametrize("fingerprint", [None, 1234567890])
|
|
165
166
|
async def test_get_public_key_missing_key(
|
|
166
|
-
root_path_populated_with_config: Path, get_temp_keyring: Keychain, fingerprint:
|
|
167
|
+
root_path_populated_with_config: Path, get_temp_keyring: Keychain, fingerprint: int | None
|
|
167
168
|
) -> None:
|
|
168
169
|
root_path: Path = root_path_populated_with_config
|
|
169
170
|
keychain: Keychain = get_temp_keyring # empty keyring
|
|
@@ -357,7 +358,7 @@ def test_get_last_used_fingerprint_file_cant_read_win32(
|
|
|
357
358
|
m.setattr(WindowsPath, "read_text", patched_pathlib_path_read_text)
|
|
358
359
|
|
|
359
360
|
# Calling get_last_used_fingerprint() should not throw an exception
|
|
360
|
-
last_used_fingerprint:
|
|
361
|
+
last_used_fingerprint: int | None = node.get_last_used_fingerprint()
|
|
361
362
|
|
|
362
363
|
# Verify that the file is unreadable
|
|
363
364
|
assert called_read_text is True
|
|
@@ -432,7 +433,7 @@ async def test_get_timestamp_for_height_from_peer(
|
|
|
432
433
|
) -> None:
|
|
433
434
|
[full_node_api], [(wallet_node, wallet_server)], _ = simulator_and_wallet
|
|
434
435
|
|
|
435
|
-
async def get_timestamp(height: int) ->
|
|
436
|
+
async def get_timestamp(height: int) -> uint64 | None:
|
|
436
437
|
return await wallet_node.get_timestamp_for_height_from_peer(uint32(height), full_node_peer)
|
|
437
438
|
|
|
438
439
|
await wallet_server.start_client(PeerInfo(self_hostname, full_node_api.server.get_port()), None)
|
|
@@ -492,7 +493,7 @@ async def test_unique_puzzle_hash_subscriptions(simulator_and_wallet: OldSimulat
|
|
|
492
493
|
@pytest.mark.anyio
|
|
493
494
|
@pytest.mark.standard_block_tools
|
|
494
495
|
async def test_get_balance(
|
|
495
|
-
simulator_and_wallet: OldSimulatorsAndWallets, self_hostname: str,
|
|
496
|
+
simulator_and_wallet: OldSimulatorsAndWallets, self_hostname: str, default_1000_blocks: list[FullBlock]
|
|
496
497
|
) -> None:
|
|
497
498
|
[full_node_api], [(wallet_node, wallet_server)], _bt = simulator_and_wallet
|
|
498
499
|
full_node_server = full_node_api.full_node.server
|
|
@@ -500,7 +501,7 @@ async def test_get_balance(
|
|
|
500
501
|
def wallet_synced() -> bool:
|
|
501
502
|
return full_node_server.node_id in wallet_node.synced_peers
|
|
502
503
|
|
|
503
|
-
async def restart_with_fingerprint(fingerprint:
|
|
504
|
+
async def restart_with_fingerprint(fingerprint: int | None) -> None:
|
|
504
505
|
wallet_node._close()
|
|
505
506
|
await wallet_node._await_closed(shutting_down=False)
|
|
506
507
|
await wallet_node._start_with_fingerprint(fingerprint=fingerprint)
|
|
@@ -512,7 +513,7 @@ async def test_get_balance(
|
|
|
512
513
|
# with that to a KeyError when applying the race cache if there are less than WEIGHT_PROOF_RECENT_BLOCKS
|
|
513
514
|
# blocks but we still have a peak stored in the DB. So we need to add enough blocks for a weight proof here to
|
|
514
515
|
# be able to restart the wallet in this test.
|
|
515
|
-
await add_blocks_in_batches(
|
|
516
|
+
await add_blocks_in_batches(default_1000_blocks[:600], full_node_api.full_node)
|
|
516
517
|
# Initially there should be no sync and no balance
|
|
517
518
|
assert not wallet_synced()
|
|
518
519
|
assert await wallet_node.get_balance(wallet_id) == Balance()
|
|
@@ -611,7 +612,7 @@ async def test_transaction_send_cache(
|
|
|
611
612
|
) -> None:
|
|
612
613
|
"""
|
|
613
614
|
The purpose of this test is to test that calling _resend_queue on the wallet node does not result in resending a
|
|
614
|
-
spend to a peer that has already
|
|
615
|
+
spend to a peer that has already received that spend and is currently processing it. It also tests that once we
|
|
615
616
|
have heard that the peer is done processing the spend, we _do_ properly resend it.
|
|
616
617
|
"""
|
|
617
618
|
[full_node_api], [(wallet_node, wallet_server)], _ = simulator_and_wallet
|
|
@@ -624,8 +625,8 @@ async def test_transaction_send_cache(
|
|
|
624
625
|
logged_spends = []
|
|
625
626
|
|
|
626
627
|
async def send_transaction(
|
|
627
|
-
self: Self, request: wallet_protocol.SendTransaction, *, test: bool = False
|
|
628
|
-
) ->
|
|
628
|
+
self: Self, request: wallet_protocol.SendTransaction, peer: WSChiaConnection, *, test: bool = False
|
|
629
|
+
) -> Message | None:
|
|
629
630
|
logged_spends.append(request.transaction.name())
|
|
630
631
|
return None
|
|
631
632
|
|
|
@@ -649,7 +650,7 @@ async def test_transaction_send_cache(
|
|
|
649
650
|
with pytest.raises(AssertionError):
|
|
650
651
|
await time_out_assert(5, logged_spends_len, 2)
|
|
651
652
|
|
|
652
|
-
# Tell the wallet that we
|
|
653
|
+
# Tell the wallet that we received the spend (but failed to process it so it should send again)
|
|
653
654
|
msg = make_msg(
|
|
654
655
|
ProtocolMessageTypes.transaction_ack,
|
|
655
656
|
wallet_protocol.TransactionAck(
|
|
@@ -688,7 +689,7 @@ async def test_wallet_node_bad_coin_state_ignore(
|
|
|
688
689
|
|
|
689
690
|
async def register_for_coin_updates(
|
|
690
691
|
self: Self, request: wallet_protocol.RegisterForCoinUpdates, *, test: bool = False
|
|
691
|
-
) ->
|
|
692
|
+
) -> Message | None:
|
|
692
693
|
return make_msg(
|
|
693
694
|
ProtocolMessageTypes.respond_to_coin_updates,
|
|
694
695
|
wallet_protocol.RespondToCoinUpdates(
|
|
@@ -721,7 +722,7 @@ async def test_start_with_multiple_key_types(
|
|
|
721
722
|
) -> None:
|
|
722
723
|
[_full_node_api], [(wallet_node, _wallet_server)], _bt = simulator_and_wallet
|
|
723
724
|
|
|
724
|
-
async def restart_with_fingerprint(fingerprint:
|
|
725
|
+
async def restart_with_fingerprint(fingerprint: int | None) -> None:
|
|
725
726
|
wallet_node._close()
|
|
726
727
|
await wallet_node._await_closed(shutting_down=False)
|
|
727
728
|
await wallet_node._start_with_fingerprint(fingerprint=fingerprint)
|
|
@@ -752,7 +753,7 @@ async def test_start_with_multiple_keys(
|
|
|
752
753
|
) -> None:
|
|
753
754
|
[_full_node_api], [(wallet_node, _wallet_server)], _bt = simulator_and_wallet
|
|
754
755
|
|
|
755
|
-
async def restart_with_fingerprint(fingerprint:
|
|
756
|
+
async def restart_with_fingerprint(fingerprint: int | None) -> None:
|
|
756
757
|
wallet_node._close()
|
|
757
758
|
await wallet_node._await_closed(shutting_down=False)
|
|
758
759
|
await wallet_node._start_with_fingerprint(fingerprint=fingerprint)
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import pytest
|
|
4
4
|
from chia_rs import BlockRecord
|
|
5
|
+
from chia_rs.sized_bytes import bytes32
|
|
5
6
|
|
|
6
7
|
from chia._tests.environments.wallet import (
|
|
7
8
|
BalanceCheckingError,
|
|
@@ -145,7 +146,7 @@ async def test_balance_checking(
|
|
|
145
146
|
)
|
|
146
147
|
]
|
|
147
148
|
)
|
|
148
|
-
await CATWallet.get_or_create_wallet_for_cat(env_0.wallet_state_manager, env_0.xch_wallet,
|
|
149
|
+
await CATWallet.get_or_create_wallet_for_cat(env_0.wallet_state_manager, env_0.xch_wallet, bytes32.zeros)
|
|
149
150
|
with pytest.raises(KeyError, match="No wallet state for wallet id 2"):
|
|
150
151
|
await env_0.check_balances()
|
|
151
152
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from collections.abc import Collection
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
import pytest
|
|
7
6
|
from chia_rs import Coin, CoinState
|
|
@@ -32,7 +31,7 @@ def assert_race_cache(cache: PeerRequestCache, expected_entries: dict[int, set[C
|
|
|
32
31
|
cache.get_race_cache(i)
|
|
33
32
|
|
|
34
33
|
|
|
35
|
-
def dummy_coin_state(*, created_height:
|
|
34
|
+
def dummy_coin_state(*, created_height: int | None, spent_height: int | None) -> CoinState:
|
|
36
35
|
return CoinState(
|
|
37
36
|
Coin(bytes(b"0" * 32), bytes(b"0" * 32), uint64(0)),
|
|
38
37
|
uint32.construct_optional(spent_height),
|
|
@@ -40,7 +39,7 @@ def dummy_coin_state(*, created_height: Optional[int], spent_height: Optional[in
|
|
|
40
39
|
)
|
|
41
40
|
|
|
42
41
|
|
|
43
|
-
def heights(coin_states: Collection[CoinState]) -> list[tuple[
|
|
42
|
+
def heights(coin_states: Collection[CoinState]) -> list[tuple[int | None, int | None]]:
|
|
44
43
|
return [(coin_state.created_height, coin_state.spent_height) for coin_state in coin_states]
|
|
45
44
|
|
|
46
45
|
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Optional
|
|
4
|
-
|
|
5
3
|
from chia_rs.sized_bytes import bytes32
|
|
6
4
|
from chia_rs.sized_ints import uint64
|
|
7
5
|
|
|
@@ -22,18 +20,18 @@ from chia.wallet.vc_wallet.cr_cat_drivers import construct_cr_layer
|
|
|
22
20
|
|
|
23
21
|
def test_cat_outer_puzzle() -> None:
|
|
24
22
|
authorized_providers: list[bytes32] = [bytes32.zeros, bytes32.zeros]
|
|
25
|
-
proofs_checker: Program = Program.
|
|
23
|
+
proofs_checker: Program = Program.NIL
|
|
26
24
|
ACS: Program = Program.to(1)
|
|
27
25
|
cr_puzzle: Program = construct_cr_layer(authorized_providers, proofs_checker, ACS)
|
|
28
26
|
double_cr_puzzle: Program = construct_cr_layer(authorized_providers, proofs_checker, cr_puzzle)
|
|
29
27
|
uncurried_cr_puzzle = uncurry_puzzle(double_cr_puzzle)
|
|
30
|
-
cr_driver:
|
|
28
|
+
cr_driver: PuzzleInfo | None = match_puzzle(uncurried_cr_puzzle)
|
|
31
29
|
|
|
32
30
|
assert cr_driver is not None
|
|
33
31
|
assert cr_driver.type() == "credential restricted"
|
|
34
32
|
assert cr_driver["authorized_providers"] == authorized_providers
|
|
35
33
|
assert cr_driver["proofs_checker"] == proofs_checker
|
|
36
|
-
inside_cr_driver:
|
|
34
|
+
inside_cr_driver: PuzzleInfo | None = cr_driver.also()
|
|
37
35
|
assert inside_cr_driver is not None
|
|
38
36
|
assert inside_cr_driver.type() == "credential restricted"
|
|
39
37
|
assert inside_cr_driver["authorized_providers"] == authorized_providers
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import itertools
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
import pytest
|
|
7
6
|
from chia_rs import CoinSpend, G2Element
|
|
@@ -105,7 +104,7 @@ async def test_covenant_layer(cost_logger: CostLogger) -> None:
|
|
|
105
104
|
].coin
|
|
106
105
|
|
|
107
106
|
# With the honest coin, attempt to spend the non-eve case too soon
|
|
108
|
-
result: tuple[MempoolInclusionStatus,
|
|
107
|
+
result: tuple[MempoolInclusionStatus, Err | None] = await client.push_tx(
|
|
109
108
|
WalletSpendBundle(
|
|
110
109
|
[
|
|
111
110
|
make_spend(
|
|
@@ -117,7 +116,7 @@ async def test_covenant_layer(cost_logger: CostLogger) -> None:
|
|
|
117
116
|
inner_puzzle_hash=ACS_PH,
|
|
118
117
|
amount=uint64(acs_coin.amount),
|
|
119
118
|
),
|
|
120
|
-
Program.
|
|
119
|
+
Program.NIL,
|
|
121
120
|
Program.to([[51, covenant_puzzle_hash, acs_coin.amount]]),
|
|
122
121
|
),
|
|
123
122
|
),
|
|
@@ -139,7 +138,7 @@ async def test_covenant_layer(cost_logger: CostLogger) -> None:
|
|
|
139
138
|
covenant_puzzle,
|
|
140
139
|
solve_covenant_layer(
|
|
141
140
|
LineageProof(parent_name=parent.parent_coin_info, amount=uint64(parent.amount)),
|
|
142
|
-
Program.
|
|
141
|
+
Program.NIL,
|
|
143
142
|
Program.to([[51, covenant_puzzle_hash, cov.amount]]),
|
|
144
143
|
),
|
|
145
144
|
),
|
|
@@ -173,7 +172,7 @@ async def test_covenant_layer(cost_logger: CostLogger) -> None:
|
|
|
173
172
|
inner_puzzle_hash=ACS_PH,
|
|
174
173
|
amount=uint64(acs_cov.amount),
|
|
175
174
|
),
|
|
176
|
-
Program.
|
|
175
|
+
Program.NIL,
|
|
177
176
|
Program.to([[51, covenant_puzzle_hash, new_acs_cov.amount]]),
|
|
178
177
|
),
|
|
179
178
|
),
|
|
@@ -213,7 +212,7 @@ async def test_did_tp(cost_logger: CostLogger) -> None:
|
|
|
213
212
|
bad_data: bytes32 = bytes32.zeros
|
|
214
213
|
|
|
215
214
|
# Try to update metadata and tp without any announcement
|
|
216
|
-
result: tuple[MempoolInclusionStatus,
|
|
215
|
+
result: tuple[MempoolInclusionStatus, Err | None] = await client.push_tx(
|
|
217
216
|
WalletSpendBundle(
|
|
218
217
|
[
|
|
219
218
|
make_spend(
|
|
@@ -327,7 +326,7 @@ async def test_revocation_layer(cost_logger: CostLogger) -> None:
|
|
|
327
326
|
)[0].coin
|
|
328
327
|
|
|
329
328
|
# Reveal the wrong puzzle
|
|
330
|
-
result: tuple[MempoolInclusionStatus,
|
|
329
|
+
result: tuple[MempoolInclusionStatus, Err | None] = await client.push_tx(
|
|
331
330
|
WalletSpendBundle(
|
|
332
331
|
[
|
|
333
332
|
make_spend(
|
|
@@ -335,7 +334,7 @@ async def test_revocation_layer(cost_logger: CostLogger) -> None:
|
|
|
335
334
|
p2_either_puzzle,
|
|
336
335
|
solve_revocation_layer(
|
|
337
336
|
ACS,
|
|
338
|
-
Program.
|
|
337
|
+
Program.NIL,
|
|
339
338
|
hidden=True,
|
|
340
339
|
),
|
|
341
340
|
)
|
|
@@ -415,7 +414,7 @@ async def test_proofs_checker(cost_logger: CostLogger, num_proofs: int) -> None:
|
|
|
415
414
|
|
|
416
415
|
block_height: uint32 = sim.block_height
|
|
417
416
|
for i, proof_list in enumerate(itertools.permutations(flags, num_proofs)):
|
|
418
|
-
result: tuple[MempoolInclusionStatus,
|
|
417
|
+
result: tuple[MempoolInclusionStatus, Err | None] = await client.push_tx(
|
|
419
418
|
cost_logger.add_cost(
|
|
420
419
|
f"Proofs Checker only - num_proofs: {num_proofs} - permutation: {i}",
|
|
421
420
|
WalletSpendBundle(
|
|
@@ -506,7 +505,7 @@ async def test_vc_lifecycle(test_syncing: bool, cost_logger: CostLogger) -> None
|
|
|
506
505
|
ACS_PH,
|
|
507
506
|
[bytes32.zeros],
|
|
508
507
|
)
|
|
509
|
-
result: tuple[MempoolInclusionStatus,
|
|
508
|
+
result: tuple[MempoolInclusionStatus, Err | None] = await client.push_tx(
|
|
510
509
|
cost_logger.add_cost(
|
|
511
510
|
"Launch VC",
|
|
512
511
|
WalletSpendBundle(
|
|
@@ -616,16 +615,16 @@ async def test_vc_lifecycle(test_syncing: bool, cost_logger: CostLogger) -> None
|
|
|
616
615
|
dpuz_1, launch_crcat_spend_1, cr_1 = CRCAT.launch(
|
|
617
616
|
cr_coin_1,
|
|
618
617
|
CreateCoin(ACS_PH, uint64(cr_coin_1.amount)),
|
|
619
|
-
Program.
|
|
620
|
-
Program.
|
|
618
|
+
Program.NIL,
|
|
619
|
+
Program.NIL,
|
|
621
620
|
AUTHORIZED_PROVIDERS,
|
|
622
621
|
proofs_checker.as_program(),
|
|
623
622
|
)
|
|
624
623
|
dpuz_2, launch_crcat_spend_2, cr_2 = CRCAT.launch(
|
|
625
624
|
cr_coin_2,
|
|
626
625
|
CreateCoin(ACS_PH, uint64(cr_coin_2.amount)),
|
|
627
|
-
Program.
|
|
628
|
-
Program.
|
|
626
|
+
Program.NIL,
|
|
627
|
+
Program.NIL,
|
|
629
628
|
AUTHORIZED_PROVIDERS,
|
|
630
629
|
proofs_checker.as_program(),
|
|
631
630
|
)
|
|
@@ -700,7 +699,7 @@ async def test_vc_lifecycle(test_syncing: bool, cost_logger: CostLogger) -> None
|
|
|
700
699
|
),
|
|
701
700
|
],
|
|
702
701
|
NEW_PROOFS if error != "use_malicious_cats" else MALICIOUS_PROOFS,
|
|
703
|
-
Program.
|
|
702
|
+
Program.NIL,
|
|
704
703
|
launcher_id,
|
|
705
704
|
vc.launcher_id,
|
|
706
705
|
vc.wrap_inner_with_backdoor().get_tree_hash(),
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
|
-
from collections.abc import Awaitable
|
|
5
|
-
from typing import Any,
|
|
4
|
+
from collections.abc import Awaitable, Callable
|
|
5
|
+
from typing import Any, Literal
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
8
|
from chia_rs import G2Element
|
|
9
9
|
from chia_rs.sized_bytes import bytes32
|
|
10
10
|
from chia_rs.sized_ints import uint8, uint16, uint32, uint64
|
|
11
|
-
from typing_extensions import Literal
|
|
12
11
|
|
|
13
12
|
from chia._tests.environments.wallet import WalletEnvironment, WalletStateTransition, WalletTestFramework
|
|
14
13
|
from chia._tests.util.time_out_assert import time_out_assert_not_none
|
|
@@ -31,7 +30,10 @@ from chia.wallet.vc_wallet.vc_store import VCProofs, VCRecord
|
|
|
31
30
|
from chia.wallet.wallet import Wallet
|
|
32
31
|
from chia.wallet.wallet_node import WalletNode
|
|
33
32
|
from chia.wallet.wallet_request_types import (
|
|
33
|
+
Addition,
|
|
34
34
|
CATSpend,
|
|
35
|
+
CRCATApprovePending,
|
|
36
|
+
CreateSignedTransaction,
|
|
35
37
|
GetTransactions,
|
|
36
38
|
GetWallets,
|
|
37
39
|
VCAddProofs,
|
|
@@ -55,7 +57,7 @@ async def mint_cr_cat(
|
|
|
55
57
|
full_node_api: FullNodeSimulator,
|
|
56
58
|
tx_config: TXConfig,
|
|
57
59
|
authorized_providers: list[bytes32] = [],
|
|
58
|
-
tail: Program = Program.
|
|
60
|
+
tail: Program = Program.NIL,
|
|
59
61
|
proofs_checker: ProofsChecker = ProofsChecker(["foo", "bar"]),
|
|
60
62
|
) -> None:
|
|
61
63
|
async with wallet_0.wallet_state_manager.new_action_scope(tx_config, push=True) as action_scope:
|
|
@@ -70,14 +72,16 @@ async def mint_cr_cat(
|
|
|
70
72
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node_0, timeout=20)
|
|
71
73
|
tx = (
|
|
72
74
|
await client_0.create_signed_transactions(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
CreateSignedTransaction(
|
|
76
|
+
wallet_id=uint32(1),
|
|
77
|
+
additions=[
|
|
78
|
+
Addition(
|
|
79
|
+
puzzle_hash=cat_puzzle.get_tree_hash(),
|
|
80
|
+
amount=CAT_AMOUNT_0,
|
|
81
|
+
)
|
|
82
|
+
],
|
|
83
|
+
),
|
|
79
84
|
tx_config,
|
|
80
|
-
wallet_id=1,
|
|
81
85
|
)
|
|
82
86
|
).signed_tx
|
|
83
87
|
spend_bundle = tx.spend_bundle
|
|
@@ -165,7 +169,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
|
|
|
165
169
|
}
|
|
166
170
|
|
|
167
171
|
# Generate DID as an "authorized provider"
|
|
168
|
-
async with wallet_0.wallet_state_manager.new_action_scope(
|
|
172
|
+
async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
169
173
|
did_id: bytes32 = bytes32.from_hexstr(
|
|
170
174
|
(
|
|
171
175
|
await DIDWallet.create_new_did_wallet(
|
|
@@ -173,9 +177,10 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
|
|
|
173
177
|
)
|
|
174
178
|
).get_my_DID()
|
|
175
179
|
)
|
|
180
|
+
await full_node_api.wait_for_wallet_synced(wallet_node_0)
|
|
176
181
|
|
|
177
182
|
# Mint a VC
|
|
178
|
-
async with wallet_0.wallet_state_manager.new_action_scope(
|
|
183
|
+
async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
179
184
|
ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
|
|
180
185
|
vc_record = (
|
|
181
186
|
await client_0.vc_mint(
|
|
@@ -235,7 +240,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
|
|
|
235
240
|
WalletStateTransition(),
|
|
236
241
|
]
|
|
237
242
|
)
|
|
238
|
-
new_vc_record:
|
|
243
|
+
new_vc_record: VCRecord | None = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
|
|
239
244
|
assert new_vc_record is not None
|
|
240
245
|
|
|
241
246
|
# Spend VC
|
|
@@ -291,7 +296,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
|
|
|
291
296
|
WalletStateTransition(),
|
|
292
297
|
]
|
|
293
298
|
)
|
|
294
|
-
vc_record_updated:
|
|
299
|
+
vc_record_updated: VCRecord | None = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
|
|
295
300
|
assert vc_record_updated is not None
|
|
296
301
|
assert vc_record_updated.vc.proof_hash == proof_root
|
|
297
302
|
|
|
@@ -463,8 +468,8 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
|
|
|
463
468
|
await client_1.get_transactions(
|
|
464
469
|
GetTransactions(
|
|
465
470
|
uint32(env_1.dealias_wallet_id("crcat")),
|
|
466
|
-
|
|
467
|
-
|
|
471
|
+
uint32(0),
|
|
472
|
+
uint32(1),
|
|
468
473
|
reverse=True,
|
|
469
474
|
type_filter=TransactionTypeFilter.include([TransactionType.INCOMING_CRCAT_PENDING]),
|
|
470
475
|
)
|
|
@@ -505,10 +510,10 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
|
|
|
505
510
|
|
|
506
511
|
# Claim the pending approval to our wallet
|
|
507
512
|
await client_1.crcat_approve_pending(
|
|
508
|
-
|
|
509
|
-
|
|
513
|
+
CRCATApprovePending(
|
|
514
|
+
wallet_id=env_1.dealias_wallet_id("crcat"), min_amount_to_claim=uint64(90), fee=uint64(90), push=True
|
|
515
|
+
),
|
|
510
516
|
wallet_environments.tx_config,
|
|
511
|
-
fee=uint64(90),
|
|
512
517
|
)
|
|
513
518
|
await wallet_environments.process_pending_states(
|
|
514
519
|
[
|
|
@@ -748,7 +753,7 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
|
|
|
748
753
|
)
|
|
749
754
|
]
|
|
750
755
|
)
|
|
751
|
-
new_vc_record:
|
|
756
|
+
new_vc_record: VCRecord | None = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
|
|
752
757
|
assert new_vc_record is not None
|
|
753
758
|
|
|
754
759
|
# Test a negative case real quick (mostly unrelated)
|
|
@@ -804,7 +809,7 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
|
|
|
804
809
|
)
|
|
805
810
|
]
|
|
806
811
|
)
|
|
807
|
-
vc_record_revoked:
|
|
812
|
+
vc_record_revoked: VCRecord | None = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
|
|
808
813
|
assert vc_record_revoked is None
|
|
809
814
|
assert (
|
|
810
815
|
len(await (await wallet_node_0.wallet_state_manager.get_or_create_vc_wallet()).store.get_unconfirmed_vcs()) == 0
|
|
@@ -849,7 +854,7 @@ async def test_cat_wallet_conversion(
|
|
|
849
854
|
|
|
850
855
|
# Key point of test: create a normal CAT wallet first, and see if it gets converted to CR-CAT wallet
|
|
851
856
|
await CATWallet.get_or_create_wallet_for_cat(
|
|
852
|
-
wallet_node_0.wallet_state_manager, wallet_0, Program.
|
|
857
|
+
wallet_node_0.wallet_state_manager, wallet_0, Program.NIL.get_tree_hash()
|
|
853
858
|
)
|
|
854
859
|
|
|
855
860
|
did_id = bytes32.zeros
|
|
@@ -857,7 +862,7 @@ async def test_cat_wallet_conversion(
|
|
|
857
862
|
await full_node_api.farm_blocks_to_wallet(count=num_blocks, wallet=wallet_0)
|
|
858
863
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node_0, timeout=20)
|
|
859
864
|
|
|
860
|
-
async def check_length(length: int, func: Callable[..., Awaitable[Any]], *args: Any) ->
|
|
865
|
+
async def check_length(length: int, func: Callable[..., Awaitable[Any]], *args: Any) -> Literal[True] | None:
|
|
861
866
|
if len(await func(*args)) == length:
|
|
862
867
|
return True
|
|
863
868
|
return None # pragma: no cover
|