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
|
@@ -5,7 +5,7 @@ import json
|
|
|
5
5
|
import logging
|
|
6
6
|
from dataclasses import dataclass, field, replace
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import Any,
|
|
8
|
+
from typing import Any, cast
|
|
9
9
|
|
|
10
10
|
import aiohttp
|
|
11
11
|
import pytest
|
|
@@ -94,7 +94,7 @@ class ChiaPlottersBladebitArgsCase:
|
|
|
94
94
|
pool_contract: str = "txch1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
95
95
|
compress: int = 1
|
|
96
96
|
device: int = 0
|
|
97
|
-
hybrid_disk_mode:
|
|
97
|
+
hybrid_disk_mode: int | None = None
|
|
98
98
|
farmer_pk: str = ""
|
|
99
99
|
final_dir: str = ""
|
|
100
100
|
marks: Marks = ()
|
|
@@ -147,7 +147,7 @@ class ChiaPlottersBladebitArgsCase:
|
|
|
147
147
|
class Service:
|
|
148
148
|
running: bool
|
|
149
149
|
|
|
150
|
-
def poll(self) ->
|
|
150
|
+
def poll(self) -> int | None:
|
|
151
151
|
return None if self.running else 1
|
|
152
152
|
|
|
153
153
|
|
|
@@ -155,8 +155,8 @@ class Service:
|
|
|
155
155
|
@dataclass
|
|
156
156
|
class Daemon:
|
|
157
157
|
# Instance variables used by WebSocketServer.is_running()
|
|
158
|
-
services: dict[str,
|
|
159
|
-
connections: dict[str,
|
|
158
|
+
services: dict[str, list[Service] | Service]
|
|
159
|
+
connections: dict[str, list[Any] | None]
|
|
160
160
|
|
|
161
161
|
# Instance variables used by WebSocketServer.get_wallet_addresses()
|
|
162
162
|
net_config: dict[str, Any] = field(default_factory=dict)
|
|
@@ -314,9 +314,9 @@ label_newline_or_tab_response_data = {
|
|
|
314
314
|
def assert_response(
|
|
315
315
|
response: aiohttp.http_websocket.WSMessage,
|
|
316
316
|
expected_response_data: dict[str, Any],
|
|
317
|
-
request_id:
|
|
317
|
+
request_id: str | None = None,
|
|
318
318
|
ack: bool = True,
|
|
319
|
-
command:
|
|
319
|
+
command: str | None = None,
|
|
320
320
|
) -> None:
|
|
321
321
|
# Expect: JSON response
|
|
322
322
|
assert response.type == aiohttp.WSMsgType.TEXT
|
|
@@ -332,7 +332,7 @@ def assert_response(
|
|
|
332
332
|
|
|
333
333
|
|
|
334
334
|
def assert_response_success_only(
|
|
335
|
-
response: aiohttp.http_websocket.WSMessage, request_id:
|
|
335
|
+
response: aiohttp.http_websocket.WSMessage, request_id: str | None = None
|
|
336
336
|
) -> dict[str, Any]:
|
|
337
337
|
# Expect: JSON response
|
|
338
338
|
assert response.type == aiohttp.WSMsgType.TEXT
|
|
@@ -1015,7 +1015,7 @@ async def test_add_private_key(daemon_connection_and_temp_keychain):
|
|
|
1015
1015
|
# Expect: Failure due to missing mnemonic
|
|
1016
1016
|
assert_response(await ws.receive(), missing_mnemonic_response_data)
|
|
1017
1017
|
|
|
1018
|
-
# When: using a
|
|
1018
|
+
# When: using a mnemonic with an incorrect word (typo)
|
|
1019
1019
|
await ws.send_str(create_payload("add_private_key", {"mnemonic": mnemonic_with_typo}, "test", "daemon"))
|
|
1020
1020
|
# Expect: Failure due to misspelled mnemonic
|
|
1021
1021
|
assert_response(await ws.receive(), mnemonic_with_typo_response_data)
|
|
@@ -1025,7 +1025,7 @@ async def test_add_private_key(daemon_connection_and_temp_keychain):
|
|
|
1025
1025
|
# Expect: Failure due to invalid mnemonic
|
|
1026
1026
|
assert_response(await ws.receive(), invalid_mnemonic_length_response_data)
|
|
1027
1027
|
|
|
1028
|
-
# When: using an incorrect
|
|
1028
|
+
# When: using an incorrect mnemonic
|
|
1029
1029
|
await ws.send_str(create_payload("add_private_key", {"mnemonic": " ".join(["abandon"] * 24)}, "test", "daemon"))
|
|
1030
1030
|
# Expect: Failure due to checksum error
|
|
1031
1031
|
assert_response(await ws.receive(), invalid_mnemonic_response_data)
|
|
@@ -1340,7 +1340,7 @@ async def test_bad_json(daemon_connection_and_temp_keychain: tuple[aiohttp.Clien
|
|
|
1340
1340
|
),
|
|
1341
1341
|
RouteCase(
|
|
1342
1342
|
route="unknown_command",
|
|
1343
|
-
description="non-
|
|
1343
|
+
description="non-existent route",
|
|
1344
1344
|
request={},
|
|
1345
1345
|
response={"success": False, "error": "unknown_command unknown_command"},
|
|
1346
1346
|
),
|
|
@@ -4,8 +4,8 @@ import os
|
|
|
4
4
|
import pathlib
|
|
5
5
|
import sys
|
|
6
6
|
import time
|
|
7
|
-
from collections.abc import AsyncIterable, Awaitable, Iterator
|
|
8
|
-
from typing import Any
|
|
7
|
+
from collections.abc import AsyncIterable, Awaitable, Callable, Iterator
|
|
8
|
+
from typing import Any
|
|
9
9
|
|
|
10
10
|
import pytest
|
|
11
11
|
|
|
@@ -16,7 +16,7 @@ from copy import deepcopy
|
|
|
16
16
|
from dataclasses import dataclass
|
|
17
17
|
from enum import IntEnum
|
|
18
18
|
from pathlib import Path
|
|
19
|
-
from typing import Any,
|
|
19
|
+
from typing import Any, cast
|
|
20
20
|
|
|
21
21
|
import anyio
|
|
22
22
|
import chia_rs.datalayer
|
|
@@ -73,7 +73,6 @@ from chia.util.timing import adjusted_timeout, backoff_times
|
|
|
73
73
|
from chia.wallet.trading.offer import Offer as TradingOffer
|
|
74
74
|
from chia.wallet.transaction_record import TransactionRecord
|
|
75
75
|
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
|
|
76
|
-
from chia.wallet.wallet import Wallet
|
|
77
76
|
from chia.wallet.wallet_node import WalletNode
|
|
78
77
|
from chia.wallet.wallet_request_types import CheckOfferValidity, DLLatestSingleton
|
|
79
78
|
from chia.wallet.wallet_rpc_api import WalletRpcApi
|
|
@@ -97,10 +96,10 @@ class InterfaceLayer(enum.Enum):
|
|
|
97
96
|
async def init_data_layer_service(
|
|
98
97
|
wallet_rpc_port: uint16,
|
|
99
98
|
bt: BlockTools,
|
|
100
|
-
db_path:
|
|
101
|
-
wallet_service:
|
|
99
|
+
db_path: Path | None = None,
|
|
100
|
+
wallet_service: WalletService | None = None,
|
|
102
101
|
manage_data_interval: int = 5,
|
|
103
|
-
maximum_full_file_count:
|
|
102
|
+
maximum_full_file_count: int | None = None,
|
|
104
103
|
enable_batch_autoinsert: bool = True,
|
|
105
104
|
group_files_by_store: bool = False,
|
|
106
105
|
) -> AsyncIterator[DataLayerService]:
|
|
@@ -131,9 +130,9 @@ async def init_data_layer(
|
|
|
131
130
|
wallet_rpc_port: uint16,
|
|
132
131
|
bt: BlockTools,
|
|
133
132
|
db_path: Path,
|
|
134
|
-
wallet_service:
|
|
133
|
+
wallet_service: WalletService | None = None,
|
|
135
134
|
manage_data_interval: int = 5,
|
|
136
|
-
maximum_full_file_count:
|
|
135
|
+
maximum_full_file_count: int | None = None,
|
|
137
136
|
group_files_by_store: bool = False,
|
|
138
137
|
enable_batch_autoinsert: bool = True,
|
|
139
138
|
) -> AsyncIterator[DataLayer]:
|
|
@@ -763,6 +762,7 @@ async def test_get_owned_stores(
|
|
|
763
762
|
ph = await action_scope.get_puzzle_hash(wallet_node.wallet_state_manager)
|
|
764
763
|
for i in range(num_blocks):
|
|
765
764
|
await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
|
|
765
|
+
await full_node_api.wait_for_wallet_synced(wallet_node, timeout=30)
|
|
766
766
|
funds = sum(
|
|
767
767
|
calculate_pool_reward(uint32(i)) + calculate_base_farmer_reward(uint32(i)) for i in range(1, num_blocks)
|
|
768
768
|
)
|
|
@@ -777,11 +777,11 @@ async def test_get_owned_stores(
|
|
|
777
777
|
assert res is not None
|
|
778
778
|
launcher_id = bytes32.from_hexstr(res["id"])
|
|
779
779
|
expected_store_ids.append(launcher_id)
|
|
780
|
+
await full_node_api.wait_for_wallet_synced(wallet_node)
|
|
780
781
|
|
|
781
782
|
await time_out_assert(4, check_mempool_spend_count, True, full_node_api, 3)
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
await asyncio.sleep(0.5)
|
|
783
|
+
await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
|
|
784
|
+
await full_node_api.wait_for_wallet_synced(wallet_node)
|
|
785
785
|
|
|
786
786
|
response = await data_rpc_api.get_owned_stores(request={})
|
|
787
787
|
store_ids = sorted(bytes32.from_hexstr(id) for id in response["store_ids"])
|
|
@@ -845,6 +845,11 @@ class OfferSetup:
|
|
|
845
845
|
maker: StoreSetup
|
|
846
846
|
taker: StoreSetup
|
|
847
847
|
full_node_api: FullNodeSimulator
|
|
848
|
+
wallet_nodes: list[WalletNode]
|
|
849
|
+
|
|
850
|
+
async def wait_for_wallets_synced(self, timeout: int = 30) -> None:
|
|
851
|
+
for node in self.wallet_nodes:
|
|
852
|
+
await self.full_node_api.wait_for_wallet_synced(wallet_node=node, timeout=timeout)
|
|
848
853
|
|
|
849
854
|
|
|
850
855
|
@pytest.fixture(name="offer_setup")
|
|
@@ -857,16 +862,17 @@ async def offer_setup_fixture(
|
|
|
857
862
|
[full_node_service], wallet_services, bt = two_wallet_nodes_services
|
|
858
863
|
enable_batch_autoinsertion_settings = getattr(request, "param", (True, True))
|
|
859
864
|
full_node_api = full_node_service._api
|
|
860
|
-
wallets: list[
|
|
865
|
+
wallets: list[WalletNode] = []
|
|
861
866
|
for wallet_service in wallet_services:
|
|
862
867
|
wallet_node = wallet_service._node
|
|
863
868
|
assert wallet_node.server is not None
|
|
864
869
|
await wallet_node.server.start_client(PeerInfo(self_hostname, full_node_api.server.get_port()), None)
|
|
865
870
|
assert wallet_node.wallet_state_manager is not None
|
|
866
871
|
wallet = wallet_node.wallet_state_manager.main_wallet
|
|
867
|
-
wallets.append(
|
|
872
|
+
wallets.append(wallet_node)
|
|
868
873
|
|
|
869
874
|
await full_node_api.farm_blocks_to_wallet(count=1, wallet=wallet, timeout=60)
|
|
875
|
+
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=30)
|
|
870
876
|
|
|
871
877
|
async with contextlib.AsyncExitStack() as exit_stack:
|
|
872
878
|
store_setups: list[StoreSetup] = []
|
|
@@ -951,6 +957,7 @@ async def offer_setup_fixture(
|
|
|
951
957
|
data_rpc_client=taker.data_rpc_client,
|
|
952
958
|
),
|
|
953
959
|
full_node_api=full_node_api,
|
|
960
|
+
wallet_nodes=wallets,
|
|
954
961
|
)
|
|
955
962
|
|
|
956
963
|
maker.data_rpc_client.close()
|
|
@@ -1018,6 +1025,7 @@ async def populate_offer_setup(offer_setup: OfferSetup, count: int) -> OfferSetu
|
|
|
1018
1025
|
data_rpc_client=offer_setup.taker.data_rpc_client,
|
|
1019
1026
|
),
|
|
1020
1027
|
full_node_api=offer_setup.full_node_api,
|
|
1028
|
+
wallet_nodes=offer_setup.wallet_nodes,
|
|
1021
1029
|
)
|
|
1022
1030
|
|
|
1023
1031
|
|
|
@@ -1026,7 +1034,7 @@ async def process_for_data_layer_keys(
|
|
|
1026
1034
|
full_node_api: FullNodeSimulator,
|
|
1027
1035
|
data_layer: DataLayer,
|
|
1028
1036
|
store_id: bytes32,
|
|
1029
|
-
expected_value:
|
|
1037
|
+
expected_value: bytes | None = None,
|
|
1030
1038
|
) -> None:
|
|
1031
1039
|
for sleep_time in backoff_times():
|
|
1032
1040
|
try:
|
|
@@ -1843,6 +1851,7 @@ async def test_make_and_cancel_offer(offer_setup: OfferSetup, reference: MakeAnd
|
|
|
1843
1851
|
# due to differences in chain progression, the exact offer and trade id may differ from the reference
|
|
1844
1852
|
# assert maker_response == {"success": True, "offer": reference.make_offer_response}
|
|
1845
1853
|
assert maker_response["success"] is True
|
|
1854
|
+
await offer_setup.wait_for_wallets_synced()
|
|
1846
1855
|
|
|
1847
1856
|
cancel_request = {
|
|
1848
1857
|
"trade_id": maker_response["offer"]["trade_id"],
|
|
@@ -1865,6 +1874,8 @@ async def test_make_and_cancel_offer(offer_setup: OfferSetup, reference: MakeAnd
|
|
|
1865
1874
|
else: # pragma: no cover
|
|
1866
1875
|
assert False, "offer was not cancelled"
|
|
1867
1876
|
|
|
1877
|
+
await offer_setup.wait_for_wallets_synced()
|
|
1878
|
+
|
|
1868
1879
|
taker_request = {
|
|
1869
1880
|
"offer": maker_response["offer"],
|
|
1870
1881
|
"fee": 0,
|
|
@@ -1926,6 +1937,7 @@ async def test_make_and_cancel_offer_then_update(
|
|
|
1926
1937
|
# due to differences in chain progression, the exact offer and trade id may differ from the reference
|
|
1927
1938
|
# assert maker_response == {"success": True, "offer": reference.make_offer_response}
|
|
1928
1939
|
assert maker_response["success"] is True
|
|
1940
|
+
await offer_setup.wait_for_wallets_synced()
|
|
1929
1941
|
|
|
1930
1942
|
cancel_request = {
|
|
1931
1943
|
"trade_id": maker_response["offer"]["trade_id"],
|
|
@@ -2015,6 +2027,7 @@ async def test_make_and_cancel_offer_not_secure_clears_pending_roots(
|
|
|
2015
2027
|
# due to differences in chain progression, the exact offer and trade id may differ from the reference
|
|
2016
2028
|
# assert maker_response == {"success": True, "offer": reference.make_offer_response}
|
|
2017
2029
|
assert maker_response["success"] is True
|
|
2030
|
+
await offer_setup.wait_for_wallets_synced()
|
|
2018
2031
|
|
|
2019
2032
|
cancel_request = {
|
|
2020
2033
|
"trade_id": maker_response["offer"]["trade_id"],
|
|
@@ -2568,6 +2581,7 @@ async def populate_proof_setup(offer_setup: OfferSetup, count: int) -> OfferSetu
|
|
|
2568
2581
|
data_rpc_client=offer_setup.taker.data_rpc_client,
|
|
2569
2582
|
),
|
|
2570
2583
|
full_node_api=offer_setup.full_node_api,
|
|
2584
|
+
wallet_nodes=offer_setup.wallet_nodes,
|
|
2571
2585
|
)
|
|
2572
2586
|
|
|
2573
2587
|
|
|
@@ -3054,7 +3068,7 @@ async def test_pagination_cmds(
|
|
|
3054
3068
|
one_wallet_and_one_simulator_services: SimulatorsAndWalletsServices,
|
|
3055
3069
|
tmp_path: Path,
|
|
3056
3070
|
layer: InterfaceLayer,
|
|
3057
|
-
max_page_size:
|
|
3071
|
+
max_page_size: int | None,
|
|
3058
3072
|
bt: BlockTools,
|
|
3059
3073
|
) -> None:
|
|
3060
3074
|
wallet_rpc_api, full_node_api, wallet_rpc_port, ph, bt = await init_wallet_and_node(
|
|
@@ -10,12 +10,12 @@ import re
|
|
|
10
10
|
import shutil
|
|
11
11
|
import statistics
|
|
12
12
|
import time
|
|
13
|
-
from collections.abc import Awaitable
|
|
13
|
+
from collections.abc import Awaitable, Callable
|
|
14
14
|
from dataclasses import dataclass
|
|
15
15
|
from hashlib import sha256
|
|
16
16
|
from pathlib import Path
|
|
17
17
|
from random import Random
|
|
18
|
-
from typing import Any, BinaryIO
|
|
18
|
+
from typing import Any, BinaryIO
|
|
19
19
|
|
|
20
20
|
import aiohttp
|
|
21
21
|
import chia_rs.datalayer
|
|
@@ -290,7 +290,7 @@ async def test_get_ancestors_optimized(data_store: DataStore, store_id: bytes32)
|
|
|
290
290
|
node_count = 0
|
|
291
291
|
node_hashes: list[bytes32] = []
|
|
292
292
|
hash_to_key: dict[bytes32, bytes] = {}
|
|
293
|
-
node_hash:
|
|
293
|
+
node_hash: bytes32 | None
|
|
294
294
|
|
|
295
295
|
for i in range(1000):
|
|
296
296
|
is_insert = False
|
|
@@ -1223,7 +1223,7 @@ async def test_server_http_ban(
|
|
|
1223
1223
|
async def mock_http_download(
|
|
1224
1224
|
target_filename_path: Path,
|
|
1225
1225
|
filename: str,
|
|
1226
|
-
proxy_url:
|
|
1226
|
+
proxy_url: str | None,
|
|
1227
1227
|
server_info: ServerInfo,
|
|
1228
1228
|
timeout: aiohttp.ClientTimeout,
|
|
1229
1229
|
log: logging.Logger,
|
|
@@ -1278,7 +1278,7 @@ async def test_server_http_ban(
|
|
|
1278
1278
|
assert sinfo.ignore_till == start_timestamp # we don't increase on second failure
|
|
1279
1279
|
|
|
1280
1280
|
|
|
1281
|
-
async def get_first_generation(data_store: DataStore, node_hash: bytes32, store_id: bytes32) ->
|
|
1281
|
+
async def get_first_generation(data_store: DataStore, node_hash: bytes32, store_id: bytes32) -> int | None:
|
|
1282
1282
|
async with data_store.db_wrapper.reader() as reader:
|
|
1283
1283
|
cursor = await reader.execute(
|
|
1284
1284
|
"SELECT generation FROM nodes WHERE hash = ? AND store_id = ?",
|
|
@@ -1301,8 +1301,8 @@ async def write_tree_to_file_old_format(
|
|
|
1301
1301
|
node_hash: bytes32,
|
|
1302
1302
|
store_id: bytes32,
|
|
1303
1303
|
writer: BinaryIO,
|
|
1304
|
-
merkle_blob:
|
|
1305
|
-
hash_to_index:
|
|
1304
|
+
merkle_blob: MerkleBlob | None = None,
|
|
1305
|
+
hash_to_index: dict[bytes32, TreeIndex] | None = None,
|
|
1306
1306
|
) -> None:
|
|
1307
1307
|
if node_hash == bytes32.zeros:
|
|
1308
1308
|
return
|
|
@@ -1760,7 +1760,7 @@ async def test_insert_from_delta_file(
|
|
|
1760
1760
|
async def mock_http_download(
|
|
1761
1761
|
target_filename_path: Path,
|
|
1762
1762
|
filename: str,
|
|
1763
|
-
proxy_url:
|
|
1763
|
+
proxy_url: str | None,
|
|
1764
1764
|
server_info: ServerInfo,
|
|
1765
1765
|
timeout: int,
|
|
1766
1766
|
log: logging.Logger,
|
|
@@ -1770,7 +1770,7 @@ async def test_insert_from_delta_file(
|
|
|
1770
1770
|
async def mock_http_download_2(
|
|
1771
1771
|
target_filename_path: Path,
|
|
1772
1772
|
filename: str,
|
|
1773
|
-
proxy_url:
|
|
1773
|
+
proxy_url: str | None,
|
|
1774
1774
|
server_info: ServerInfo,
|
|
1775
1775
|
timeout: int,
|
|
1776
1776
|
log: logging.Logger,
|
|
@@ -2180,7 +2180,7 @@ async def test_basic_key_value_db_vs_disk_cutoff(
|
|
|
2180
2180
|
) as cursor:
|
|
2181
2181
|
row = await cursor.fetchone()
|
|
2182
2182
|
assert row is not None
|
|
2183
|
-
db_blob:
|
|
2183
|
+
db_blob: bytes | None = row["blob"]
|
|
2184
2184
|
|
|
2185
2185
|
if size_offset <= 0:
|
|
2186
2186
|
assert not file_exists
|
|
@@ -8,7 +8,7 @@ import shutil
|
|
|
8
8
|
import subprocess
|
|
9
9
|
from collections.abc import Iterator
|
|
10
10
|
from dataclasses import dataclass
|
|
11
|
-
from typing import IO, TYPE_CHECKING, Any, Literal,
|
|
11
|
+
from typing import IO, TYPE_CHECKING, Any, Literal, overload
|
|
12
12
|
|
|
13
13
|
from chia_rs.sized_bytes import bytes32
|
|
14
14
|
|
|
@@ -17,7 +17,7 @@ from chia.data_layer.data_store import DataStore
|
|
|
17
17
|
from chia.types.blockchain_format.program import Program
|
|
18
18
|
|
|
19
19
|
# from subprocess.pyi
|
|
20
|
-
_FILE =
|
|
20
|
+
_FILE = int | IO[Any] | None
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
if TYPE_CHECKING:
|
|
@@ -34,8 +34,8 @@ async def general_insert(
|
|
|
34
34
|
store_id: bytes32,
|
|
35
35
|
key: bytes,
|
|
36
36
|
value: bytes,
|
|
37
|
-
reference_node_hash:
|
|
38
|
-
side:
|
|
37
|
+
reference_node_hash: bytes32 | None,
|
|
38
|
+
side: Side | None,
|
|
39
39
|
) -> bytes32:
|
|
40
40
|
insert_result = await data_store.insert(
|
|
41
41
|
key=key,
|
|
@@ -123,12 +123,12 @@ class ChiaRoot:
|
|
|
123
123
|
|
|
124
124
|
def run(
|
|
125
125
|
self,
|
|
126
|
-
args: list[
|
|
126
|
+
args: list[str | os_PathLike_str],
|
|
127
127
|
*other_args: Any,
|
|
128
128
|
check: bool = True,
|
|
129
129
|
encoding: str = "utf-8",
|
|
130
|
-
stdout:
|
|
131
|
-
stderr:
|
|
130
|
+
stdout: _FILE | None = subprocess.PIPE,
|
|
131
|
+
stderr: _FILE | None = subprocess.PIPE,
|
|
132
132
|
**kwargs: Any,
|
|
133
133
|
) -> subprocess_CompletedProcess_str:
|
|
134
134
|
# TODO: --root-path doesn't seem to work here...
|
|
@@ -143,7 +143,7 @@ class ChiaRoot:
|
|
|
143
143
|
chia_executable = shutil.which("chia")
|
|
144
144
|
if chia_executable is None:
|
|
145
145
|
chia_executable = "chia"
|
|
146
|
-
modified_args: list[
|
|
146
|
+
modified_args: list[str | os_PathLike_str] = [
|
|
147
147
|
self.scripts_path.joinpath(chia_executable),
|
|
148
148
|
"--root-path",
|
|
149
149
|
self.path,
|
|
@@ -166,7 +166,7 @@ class ChiaRoot:
|
|
|
166
166
|
return self.path.joinpath("log", "debug.log").read_text(encoding="utf-8")
|
|
167
167
|
|
|
168
168
|
def print_log(self) -> None:
|
|
169
|
-
log_text:
|
|
169
|
+
log_text: str | None
|
|
170
170
|
|
|
171
171
|
try:
|
|
172
172
|
log_text = self.read_log()
|
|
@@ -204,8 +204,8 @@ def create_valid_node_values(
|
|
|
204
204
|
|
|
205
205
|
def create_valid_node_values(
|
|
206
206
|
node_type: NodeType,
|
|
207
|
-
left_hash:
|
|
208
|
-
right_hash:
|
|
207
|
+
left_hash: bytes32 | None = None,
|
|
208
|
+
right_hash: bytes32 | None = None,
|
|
209
209
|
) -> dict[str, Any]:
|
|
210
210
|
if node_type == NodeType.INTERNAL:
|
|
211
211
|
assert left_hash is not None
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from asyncio import Task, gather, sleep
|
|
4
4
|
from collections.abc import Coroutine
|
|
5
|
-
from typing import Any,
|
|
5
|
+
from typing import Any, TypeVar
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
8
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
@@ -80,9 +80,7 @@ async def test_farmer_responds_with_signed_values(farmer_one_harvester: FarmerOn
|
|
|
80
80
|
)
|
|
81
81
|
setattr(farmer_api, "_process_respond_signatures", lambda res: signed_values)
|
|
82
82
|
|
|
83
|
-
signed_values_task: Task[
|
|
84
|
-
farmer_api.request_signed_values(request_signed_values)
|
|
85
|
-
)
|
|
83
|
+
signed_values_task: Task[Message | None] = await begin_task(farmer_api.request_signed_values(request_signed_values))
|
|
86
84
|
|
|
87
85
|
# Wait a bit for the dummy harvester to receive the signature request and respond with a dummy signature
|
|
88
86
|
await sleep(1)
|
|
@@ -24,11 +24,11 @@ log = logging.getLogger(__name__)
|
|
|
24
24
|
|
|
25
25
|
@pytest.mark.anyio
|
|
26
26
|
async def test_long_sync_from_zero(
|
|
27
|
-
five_nodes: list[FullNodeAPI],
|
|
27
|
+
five_nodes: list[FullNodeAPI], default_1000_blocks: list[FullBlock], bt: BlockTools, self_hostname: str
|
|
28
28
|
) -> None:
|
|
29
29
|
# Must be larger than "sync_block_behind_threshold" in the config
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
blocks: list[FullBlock] = default_1000_blocks[:600]
|
|
31
|
+
num_blocks = len(blocks)
|
|
32
32
|
full_node_1, full_node_2, full_node_3, full_node_4, full_node_5 = five_nodes
|
|
33
33
|
server_1 = full_node_1.full_node.server
|
|
34
34
|
server_2 = full_node_2.full_node.server
|
|
@@ -37,7 +37,7 @@ async def test_long_sync_from_zero(
|
|
|
37
37
|
server_5 = full_node_5.full_node.server
|
|
38
38
|
|
|
39
39
|
# If this constant is changed, update the tests to use more blocks
|
|
40
|
-
assert bt.constants.WEIGHT_PROOF_RECENT_BLOCKS <
|
|
40
|
+
assert bt.constants.WEIGHT_PROOF_RECENT_BLOCKS < num_blocks
|
|
41
41
|
|
|
42
42
|
# Syncs up less than recent blocks
|
|
43
43
|
for block in blocks[: bt.constants.WEIGHT_PROOF_RECENT_BLOCKS - 5]:
|
|
@@ -101,14 +101,14 @@ async def test_long_sync_from_zero(
|
|
|
101
101
|
await time_out_assert(timeout_seconds, node_height_exactly, True, full_node_4, num_blocks - 1)
|
|
102
102
|
|
|
103
103
|
# Deep reorg, fall back from batch sync to long sync
|
|
104
|
-
blocks_node_5 = bt.get_consecutive_blocks(
|
|
104
|
+
blocks_node_5 = bt.get_consecutive_blocks(250, block_list_input=blocks[:350], seed=b"node5")
|
|
105
105
|
for block in blocks_node_5:
|
|
106
106
|
await full_node_5.full_node.add_block(block)
|
|
107
107
|
await server_5.start_client(
|
|
108
108
|
PeerInfo(self_hostname, server_1.get_port()), on_connect=full_node_5.full_node.on_connect
|
|
109
109
|
)
|
|
110
|
-
await time_out_assert(timeout_seconds, node_height_exactly, True, full_node_5,
|
|
111
|
-
await time_out_assert(timeout_seconds, node_height_exactly, True, full_node_1,
|
|
110
|
+
await time_out_assert(timeout_seconds, node_height_exactly, True, full_node_5, 250 + 350 - 1)
|
|
111
|
+
await time_out_assert(timeout_seconds, node_height_exactly, True, full_node_1, 250 + 350 - 1)
|
|
112
112
|
|
|
113
113
|
|
|
114
114
|
@pytest.mark.anyio
|
|
@@ -384,6 +384,7 @@ async def test_block_ses_mismatch(
|
|
|
384
384
|
s.num_blocks_overflow,
|
|
385
385
|
uint64(s.new_difficulty * 2) if s.new_difficulty is not None else None,
|
|
386
386
|
uint64(s.new_sub_slot_iters * 2) if s.new_sub_slot_iters is not None else None,
|
|
387
|
+
None,
|
|
387
388
|
)
|
|
388
389
|
# manually try sync with wrong sub epoch summary list
|
|
389
390
|
await server_2.start_client(PeerInfo(self_hostname, server_1.get_port()), None)
|
|
@@ -5,7 +5,7 @@ import logging
|
|
|
5
5
|
import random
|
|
6
6
|
import sqlite3
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import
|
|
8
|
+
from typing import cast
|
|
9
9
|
|
|
10
10
|
import pytest
|
|
11
11
|
|
|
@@ -16,6 +16,7 @@ from chia_rs.sized_bytes import bytes32
|
|
|
16
16
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
17
17
|
|
|
18
18
|
from chia._tests.blockchain.blockchain_test_utils import _validate_and_add_block
|
|
19
|
+
from chia._tests.core.full_node.test_full_node import find_reward_coin
|
|
19
20
|
from chia._tests.util.db_connection import DBConnection, PathDBConnection
|
|
20
21
|
from chia.consensus.block_body_validation import ForkInfo
|
|
21
22
|
from chia.consensus.block_height_map import BlockHeightMap
|
|
@@ -41,7 +42,7 @@ def use_cache(request: SubRequest) -> bool:
|
|
|
41
42
|
return cast(bool, request.param)
|
|
42
43
|
|
|
43
44
|
|
|
44
|
-
def maybe_serialize(gen:
|
|
45
|
+
def maybe_serialize(gen: SerializedProgram | None) -> bytes | None:
|
|
45
46
|
if gen is None:
|
|
46
47
|
return None
|
|
47
48
|
else:
|
|
@@ -57,11 +58,11 @@ async def test_block_store(tmp_dir: Path, db_version: int, bt: BlockTools, use_c
|
|
|
57
58
|
3,
|
|
58
59
|
guarantee_transaction_block=True,
|
|
59
60
|
farmer_reward_puzzle_hash=bt.pool_ph,
|
|
60
|
-
pool_reward_puzzle_hash=bt.pool_ph,
|
|
61
61
|
time_per_block=10,
|
|
62
62
|
)
|
|
63
63
|
wt: WalletTool = bt.get_pool_wallet_tool()
|
|
64
|
-
|
|
64
|
+
coin = find_reward_coin(blocks[-1], bt.pool_ph)
|
|
65
|
+
tx = wt.generate_signed_transaction(uint64(10), wt.get_new_puzzlehash(), coin)
|
|
65
66
|
blocks = bt.get_consecutive_blocks(
|
|
66
67
|
10,
|
|
67
68
|
block_list_input=blocks,
|
|
@@ -3,11 +3,10 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
from dataclasses import dataclass
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Optional
|
|
7
6
|
|
|
8
7
|
import aiosqlite
|
|
9
8
|
import pytest
|
|
10
|
-
from chia_rs import CoinState, FullBlock, additions_and_removals, get_flags_for_height_and_constants
|
|
9
|
+
from chia_rs import CoinRecord, CoinState, FullBlock, additions_and_removals, get_flags_for_height_and_constants
|
|
11
10
|
from chia_rs.sized_bytes import bytes32
|
|
12
11
|
from chia_rs.sized_ints import uint32, uint64
|
|
13
12
|
|
|
@@ -26,7 +25,6 @@ from chia.full_node.hint_store import HintStore
|
|
|
26
25
|
from chia.simulator.block_tools import BlockTools, test_constants
|
|
27
26
|
from chia.simulator.wallet_tools import WalletTool
|
|
28
27
|
from chia.types.blockchain_format.coin import Coin
|
|
29
|
-
from chia.types.coin_record import CoinRecord
|
|
30
28
|
from chia.types.mempool_item import UnspentLineageInfo
|
|
31
29
|
from chia.util.casts import int_to_bytes
|
|
32
30
|
from chia.util.db_wrapper import DBWrapper2
|
|
@@ -68,7 +66,6 @@ async def test_basic_coin_store(db_version: int, softfork_height: uint32, bt: Bl
|
|
|
68
66
|
10,
|
|
69
67
|
[],
|
|
70
68
|
farmer_reward_puzzle_hash=reward_ph,
|
|
71
|
-
pool_reward_puzzle_hash=reward_ph,
|
|
72
69
|
)
|
|
73
70
|
|
|
74
71
|
coins_to_spend: list[Coin] = []
|
|
@@ -87,7 +84,6 @@ async def test_basic_coin_store(db_version: int, softfork_height: uint32, bt: Bl
|
|
|
87
84
|
10,
|
|
88
85
|
blocks,
|
|
89
86
|
farmer_reward_puzzle_hash=reward_ph,
|
|
90
|
-
pool_reward_puzzle_hash=reward_ph,
|
|
91
87
|
transaction_data=spend_bundle,
|
|
92
88
|
)
|
|
93
89
|
|
|
@@ -236,7 +232,7 @@ async def test_rollback(db_version: int, bt: BlockTools) -> None:
|
|
|
236
232
|
async with DBConnection(db_version) as db_wrapper:
|
|
237
233
|
coin_store = await CoinStore.create(db_wrapper)
|
|
238
234
|
|
|
239
|
-
selected_coin:
|
|
235
|
+
selected_coin: CoinRecord | None = None
|
|
240
236
|
all_coins: list[Coin] = []
|
|
241
237
|
|
|
242
238
|
for block in blocks:
|
|
@@ -320,7 +316,7 @@ async def test_basic_reorg(tmp_dir: Path, db_version: int, bt: BlockTools) -> No
|
|
|
320
316
|
height_map = await BlockHeightMap.create(tmp_dir, db_wrapper)
|
|
321
317
|
b: Blockchain = await Blockchain.create(coin_store, store, height_map, bt.constants, 2)
|
|
322
318
|
try:
|
|
323
|
-
records: list[
|
|
319
|
+
records: list[CoinRecord | None] = []
|
|
324
320
|
|
|
325
321
|
for block in blocks:
|
|
326
322
|
await _validate_and_add_block(b, block)
|
|
@@ -375,11 +371,9 @@ async def test_get_puzzle_hash(tmp_dir: Path, db_version: int, bt: BlockTools) -
|
|
|
375
371
|
async with DBConnection(db_version) as db_wrapper:
|
|
376
372
|
num_blocks = 20
|
|
377
373
|
farmer_ph = bytes32(32 * b"0")
|
|
378
|
-
pool_ph = bytes32(32 * b"1")
|
|
379
374
|
blocks = bt.get_consecutive_blocks(
|
|
380
375
|
num_blocks,
|
|
381
376
|
farmer_reward_puzzle_hash=farmer_ph,
|
|
382
|
-
pool_reward_puzzle_hash=pool_ph,
|
|
383
377
|
guarantee_transaction_block=True,
|
|
384
378
|
)
|
|
385
379
|
coin_store = await CoinStore.create(db_wrapper)
|
|
@@ -392,7 +386,7 @@ async def test_get_puzzle_hash(tmp_dir: Path, db_version: int, bt: BlockTools) -
|
|
|
392
386
|
assert peak is not None
|
|
393
387
|
assert peak.height == num_blocks - 1
|
|
394
388
|
|
|
395
|
-
coins_farmer = await coin_store.get_coin_records_by_puzzle_hash(True, pool_ph)
|
|
389
|
+
coins_farmer = await coin_store.get_coin_records_by_puzzle_hash(True, bt.pool_ph)
|
|
396
390
|
coins_pool = await coin_store.get_coin_records_by_puzzle_hash(True, farmer_ph)
|
|
397
391
|
|
|
398
392
|
assert len(coins_farmer) == num_blocks - 2
|
|
@@ -570,7 +564,7 @@ async def test_coin_state_batches(
|
|
|
570
564
|
continue
|
|
571
565
|
expected_crs.append(cr)
|
|
572
566
|
|
|
573
|
-
height:
|
|
567
|
+
height: uint32 | None = uint32(0)
|
|
574
568
|
all_coin_states: list[CoinState] = []
|
|
575
569
|
remaining_phs = random_coin_records.puzzle_hashes.copy()
|
|
576
570
|
|
|
@@ -3,7 +3,6 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
import random
|
|
5
5
|
from collections.abc import AsyncIterator
|
|
6
|
-
from typing import Optional
|
|
7
6
|
|
|
8
7
|
import pytest
|
|
9
8
|
from chia_rs import ConsensusConstants, FullBlock, UnfinishedBlock
|
|
@@ -39,7 +38,8 @@ async def custom_block_tools(blockchain_constants: ConsensusConstants) -> AsyncI
|
|
|
39
38
|
DISCRIMINANT_SIZE_BITS=uint16(32),
|
|
40
39
|
SUB_SLOT_ITERS_STARTING=uint64(2**12),
|
|
41
40
|
)
|
|
42
|
-
|
|
41
|
+
async with create_block_tools_async(constants=patched_constants, keychain=keychain) as bt:
|
|
42
|
+
yield bt
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
@pytest.fixture(scope="function")
|
|
@@ -128,15 +128,15 @@ async def test_unfinished_block_rank(
|
|
|
128
128
|
)
|
|
129
129
|
async def test_find_best_block(
|
|
130
130
|
seeded_random: random.Random,
|
|
131
|
-
blocks: list[tuple[
|
|
132
|
-
expected:
|
|
131
|
+
blocks: list[tuple[int | None, bool]],
|
|
132
|
+
expected: int | None,
|
|
133
133
|
default_400_blocks: list[FullBlock],
|
|
134
134
|
bt: BlockTools,
|
|
135
135
|
) -> None:
|
|
136
|
-
result: dict[
|
|
136
|
+
result: dict[bytes32 | None, UnfinishedBlockEntry] = {}
|
|
137
137
|
i = 0
|
|
138
138
|
for b, with_unf in blocks:
|
|
139
|
-
unf:
|
|
139
|
+
unf: UnfinishedBlock | None
|
|
140
140
|
if with_unf:
|
|
141
141
|
unf = make_unfinished_block(default_400_blocks[i], bt.constants)
|
|
142
142
|
i += 1
|
|
@@ -1022,10 +1022,10 @@ async def test_basic_store(
|
|
|
1022
1022
|
and i1 > (i2 + 3)
|
|
1023
1023
|
):
|
|
1024
1024
|
# We hit all the conditions that we want
|
|
1025
|
-
all_sps: list[
|
|
1025
|
+
all_sps: list[SignagePoint | None] = [None] * custom_block_tools.constants.NUM_SPS_SUB_SLOT
|
|
1026
1026
|
|
|
1027
1027
|
def assert_sp_none(sp_index: int, is_none: bool) -> None:
|
|
1028
|
-
sp_to_check:
|
|
1028
|
+
sp_to_check: SignagePoint | None = all_sps[sp_index]
|
|
1029
1029
|
assert sp_to_check is not None
|
|
1030
1030
|
assert sp_to_check.cc_vdf is not None
|
|
1031
1031
|
fetched = store.get_signage_point(sp_to_check.cc_vdf.output.get_hash())
|