chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/blockchain/blockchain_test_utils.py +2 -3
- chia/_tests/blockchain/test_augmented_chain.py +2 -3
- chia/_tests/blockchain/test_blockchain.py +261 -44
- chia/_tests/blockchain/test_blockchain_transactions.py +4 -3
- chia/_tests/blockchain/test_build_chains.py +197 -1
- chia/_tests/blockchain/test_get_block_generator.py +1 -1
- chia/_tests/blockchain/test_lookup_fork_chain.py +1 -1
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +3 -4
- chia/_tests/clvm/test_message_conditions.py +2 -2
- chia/_tests/clvm/test_puzzle_compression.py +2 -3
- chia/_tests/clvm/test_puzzles.py +1 -2
- chia/_tests/clvm/test_singletons.py +2 -3
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +30 -25
- chia/_tests/cmds/test_dev_gh.py +1 -1
- chia/_tests/cmds/test_farm_cmd.py +1 -1
- chia/_tests/cmds/test_show.py +1 -2
- chia/_tests/cmds/wallet/test_did.py +101 -56
- chia/_tests/cmds/wallet/test_nft.py +109 -84
- chia/_tests/cmds/wallet/test_notifications.py +1 -1
- chia/_tests/cmds/wallet/test_offer.toffer +1 -1
- chia/_tests/cmds/wallet/test_vcs.py +8 -8
- chia/_tests/cmds/wallet/test_wallet.py +100 -46
- chia/_tests/conftest.py +31 -20
- chia/_tests/connection_utils.py +1 -1
- chia/_tests/core/consensus/stores/__init__.py +0 -0
- chia/_tests/core/consensus/stores/test_coin_store_protocol.py +40 -0
- chia/_tests/core/consensus/test_block_creation.py +2 -31
- chia/_tests/core/consensus/test_pot_iterations.py +38 -3
- chia/_tests/core/custom_types/test_proof_of_space.py +154 -26
- chia/_tests/core/custom_types/test_spend_bundle.py +2 -3
- chia/_tests/core/daemon/test_daemon.py +80 -0
- chia/_tests/core/data_layer/test_data_layer.py +1 -1
- chia/_tests/core/data_layer/test_data_layer_util.py +1 -1
- chia/_tests/core/data_layer/test_data_rpc.py +14 -10
- chia/_tests/core/data_layer/test_data_store.py +5 -5
- chia/_tests/core/farmer/test_farmer_api.py +2 -2
- chia/_tests/core/full_node/full_sync/test_full_sync.py +446 -406
- chia/_tests/core/full_node/ram_db.py +3 -1
- chia/_tests/core/full_node/stores/test_block_store.py +28 -16
- chia/_tests/core/full_node/stores/test_coin_store.py +277 -185
- chia/_tests/core/full_node/stores/test_full_node_store.py +11 -4
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_address_manager.py +200 -27
- chia/_tests/core/full_node/test_block_height_map.py +2 -2
- chia/_tests/core/full_node/test_conditions.py +7 -6
- chia/_tests/core/full_node/test_full_node.py +456 -40
- chia/_tests/core/full_node/test_generator_tools.py +32 -2
- chia/_tests/core/full_node/test_hint_management.py +1 -1
- chia/_tests/core/full_node/test_node_load.py +20 -21
- chia/_tests/core/full_node/test_performance.py +3 -4
- chia/_tests/core/full_node/test_prev_tx_block.py +43 -0
- chia/_tests/core/full_node/test_subscriptions.py +1 -2
- chia/_tests/core/full_node/test_transactions.py +9 -5
- chia/_tests/core/full_node/test_tx_processing_queue.py +1 -2
- chia/_tests/core/large_block.py +1 -2
- chia/_tests/core/make_block_generator.py +3 -4
- chia/_tests/core/mempool/test_mempool.py +36 -86
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +1 -1
- chia/_tests/core/mempool/test_mempool_item_queries.py +1 -3
- chia/_tests/core/mempool/test_mempool_manager.py +421 -69
- chia/_tests/core/mempool/test_mempool_performance.py +3 -2
- chia/_tests/core/mempool/test_singleton_fast_forward.py +60 -131
- chia/_tests/core/server/flood.py +1 -1
- chia/_tests/core/server/test_dos.py +1 -1
- chia/_tests/core/server/test_node_discovery.py +41 -27
- chia/_tests/core/server/test_rate_limits.py +1 -1
- chia/_tests/core/server/test_server.py +1 -1
- chia/_tests/core/services/test_services.py +5 -5
- chia/_tests/core/ssl/test_ssl.py +1 -1
- chia/_tests/core/test_cost_calculation.py +6 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_crawler_rpc.py +1 -1
- chia/_tests/core/test_db_conversion.py +3 -1
- chia/_tests/core/test_db_validation.py +5 -3
- chia/_tests/core/test_farmer_harvester_rpc.py +15 -15
- chia/_tests/core/test_filter.py +4 -1
- chia/_tests/core/test_full_node_rpc.py +99 -82
- chia/_tests/core/test_program.py +2 -2
- chia/_tests/core/util/test_block_cache.py +1 -1
- chia/_tests/core/util/test_keychain.py +2 -2
- chia/_tests/core/util/test_lockfile.py +1 -1
- chia/_tests/core/util/test_log_exceptions.py +5 -5
- chia/_tests/core/util/test_streamable.py +81 -22
- chia/_tests/db/test_db_wrapper.py +1 -3
- chia/_tests/environments/wallet.py +5 -5
- chia/_tests/farmer_harvester/test_farmer.py +9 -7
- chia/_tests/farmer_harvester/test_farmer_harvester.py +11 -4
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +15 -9
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +1 -2
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +7 -5
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -1
- chia/_tests/generator/test_compression.py +1 -2
- chia/_tests/generator/test_rom.py +8 -4
- chia/_tests/plot_sync/test_plot_sync.py +3 -3
- chia/_tests/plot_sync/test_receiver.py +3 -3
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +3 -3
- chia/_tests/plot_sync/util.py +2 -2
- chia/_tests/pools/test_pool_cmdline.py +48 -21
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +2 -3
- chia/_tests/pools/test_pool_rpc.py +237 -105
- chia/_tests/pools/test_pool_wallet.py +11 -2
- chia/_tests/pools/test_wallet_pool_store.py +5 -4
- chia/_tests/rpc/test_rpc_client.py +1 -1
- chia/_tests/simulation/test_simulation.py +13 -8
- chia/_tests/simulation/test_simulator.py +2 -2
- chia/_tests/timelord/test_new_peak.py +191 -47
- chia/_tests/timelord/test_timelord.py +1 -1
- chia/_tests/tools/test_full_sync.py +0 -2
- chia/_tests/tools/test_run_block.py +3 -1
- chia/_tests/util/benchmark_cost.py +3 -3
- chia/_tests/util/benchmarks.py +2 -2
- chia/_tests/util/blockchain.py +11 -5
- chia/_tests/util/blockchain_mock.py +1 -4
- chia/_tests/util/coin_store.py +29 -0
- chia/_tests/util/constants.py +2 -18
- chia/_tests/util/full_sync.py +3 -3
- chia/_tests/util/generator_tools_testing.py +2 -3
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +33 -31
- chia/_tests/util/network_protocol_data.py +19 -17
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +3 -1
- chia/_tests/util/run_block.py +2 -2
- chia/_tests/util/setup_nodes.py +7 -7
- chia/_tests/util/spend_sim.py +47 -55
- chia/_tests/util/test_condition_tools.py +5 -4
- chia/_tests/util/test_config.py +2 -2
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +12 -14
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_paginator.py +4 -4
- chia/_tests/util/test_priority_mutex.py +2 -2
- chia/_tests/util/test_replace_str_to_bytes.py +15 -5
- chia/_tests/util/test_ssl_check.py +1 -1
- chia/_tests/util/test_testnet_overrides.py +13 -3
- chia/_tests/util/time_out_assert.py +4 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -2
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +352 -432
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +3 -6
- chia/_tests/wallet/cat_wallet/test_trades.py +53 -77
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -1
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +3 -3
- chia/_tests/wallet/clawback/test_clawback_metadata.py +4 -2
- chia/_tests/wallet/conftest.py +11 -12
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +11 -4
- chia/_tests/wallet/db_wallet/test_dl_offers.py +433 -130
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +3 -3
- chia/_tests/wallet/did_wallet/test_did.py +2132 -2000
- chia/_tests/wallet/nft_wallet/config.py +1 -1
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1610 -742
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +486 -907
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +4 -4
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +517 -294
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +133 -62
- chia/_tests/wallet/rpc/test_wallet_rpc.py +305 -184
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +10 -6
- chia/_tests/wallet/sync/test_wallet_sync.py +89 -60
- chia/_tests/wallet/test_clvm_casts.py +88 -0
- chia/_tests/wallet/test_coin_management.py +1 -1
- chia/_tests/wallet/test_coin_selection.py +1 -1
- chia/_tests/wallet/test_conditions.py +1 -1
- chia/_tests/wallet/test_new_wallet_protocol.py +13 -11
- chia/_tests/wallet/test_notifications.py +5 -3
- chia/_tests/wallet/test_sign_coin_spends.py +6 -6
- chia/_tests/wallet/test_signer_protocol.py +13 -12
- chia/_tests/wallet/test_singleton.py +1 -1
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +5 -7
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +108 -29
- chia/_tests/wallet/test_wallet_action_scope.py +9 -2
- chia/_tests/wallet/test_wallet_blockchain.py +2 -3
- chia/_tests/wallet/test_wallet_key_val_store.py +1 -2
- chia/_tests/wallet/test_wallet_node.py +2 -4
- chia/_tests/wallet/test_wallet_retry.py +4 -2
- chia/_tests/wallet/test_wallet_state_manager.py +191 -5
- chia/_tests/wallet/test_wallet_test_framework.py +1 -1
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +8 -8
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -12
- chia/_tests/wallet/wallet_block_tools.py +6 -6
- chia/_tests/weight_proof/test_weight_proof.py +10 -48
- chia/apis.py +1 -1
- chia/cmds/beta.py +1 -1
- chia/cmds/chia.py +9 -9
- chia/cmds/cmd_classes.py +12 -11
- chia/cmds/cmd_helpers.py +1 -1
- chia/cmds/cmds_util.py +12 -9
- chia/cmds/coin_funcs.py +2 -2
- chia/cmds/configure.py +2 -2
- chia/cmds/data.py +0 -2
- chia/cmds/data_funcs.py +1 -1
- chia/cmds/db_validate_func.py +1 -2
- chia/cmds/dev/__init__.py +0 -0
- chia/cmds/dev/data.py +273 -0
- chia/cmds/{gh.py → dev/gh.py} +5 -5
- chia/cmds/dev/main.py +22 -0
- chia/cmds/dev/mempool.py +78 -0
- chia/cmds/dev/mempool_funcs.py +63 -0
- chia/cmds/farm_funcs.py +5 -4
- chia/cmds/init_funcs.py +11 -11
- chia/cmds/keys.py +2 -2
- chia/cmds/keys_funcs.py +4 -4
- chia/cmds/netspace_funcs.py +1 -1
- chia/cmds/peer_funcs.py +2 -2
- chia/cmds/plotnft_funcs.py +72 -26
- chia/cmds/rpc.py +1 -1
- chia/cmds/show_funcs.py +5 -5
- chia/cmds/signer.py +8 -7
- chia/cmds/sim_funcs.py +8 -9
- chia/cmds/wallet.py +2 -2
- chia/cmds/wallet_funcs.py +165 -131
- chia/{util → consensus}/augmented_chain.py +1 -2
- chia/consensus/block_body_validation.py +54 -40
- chia/consensus/block_creation.py +42 -76
- chia/consensus/block_header_validation.py +32 -26
- chia/consensus/block_record.py +0 -3
- chia/consensus/blockchain.py +23 -32
- chia/consensus/blockchain_interface.py +1 -5
- chia/consensus/check_time_locks.py +57 -0
- chia/consensus/coin_store_protocol.py +151 -0
- chia/consensus/coinbase.py +0 -6
- chia/consensus/condition_costs.py +4 -0
- chia/{util → consensus}/condition_tools.py +4 -5
- chia/consensus/cost_calculator.py +1 -1
- chia/consensus/default_constants.py +32 -9
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +1 -2
- chia/consensus/find_fork_point.py +1 -3
- chia/consensus/full_block_to_block_record.py +1 -6
- chia/{util → consensus}/generator_tools.py +1 -3
- chia/consensus/get_block_challenge.py +30 -7
- chia/consensus/make_sub_epoch_summary.py +1 -5
- chia/consensus/multiprocess_validation.py +21 -20
- chia/consensus/pot_iterations.py +74 -13
- chia/{util → consensus}/prev_transaction_block.py +1 -1
- chia/consensus/vdf_info_computation.py +1 -3
- chia/daemon/keychain_proxy.py +5 -5
- chia/daemon/server.py +22 -5
- chia/data_layer/data_layer.py +92 -51
- chia/{rpc → data_layer}/data_layer_rpc_api.py +1 -1
- chia/{rpc → data_layer}/data_layer_rpc_util.py +3 -6
- chia/data_layer/data_layer_util.py +4 -6
- chia/data_layer/data_layer_wallet.py +42 -69
- chia/data_layer/dl_wallet_store.py +12 -6
- chia/data_layer/download_data.py +3 -3
- chia/data_layer/s3_plugin_service.py +0 -1
- chia/farmer/farmer.py +3 -4
- chia/farmer/farmer_api.py +11 -7
- chia/{rpc → farmer}/farmer_rpc_client.py +1 -1
- chia/full_node/block_height_map.py +7 -6
- chia/full_node/block_store.py +5 -7
- chia/full_node/bundle_tools.py +1 -2
- chia/full_node/coin_store.py +143 -124
- chia/{types → full_node}/eligible_coin_spends.py +39 -70
- chia/full_node/fee_estimator.py +1 -1
- chia/full_node/fee_estimator_interface.py +0 -8
- chia/full_node/fee_tracker.py +25 -25
- chia/full_node/full_node.py +70 -53
- chia/full_node/full_node_api.py +57 -40
- chia/{rpc → full_node}/full_node_rpc_api.py +87 -8
- chia/{rpc → full_node}/full_node_rpc_client.py +7 -6
- chia/full_node/full_node_store.py +23 -8
- chia/full_node/mempool.py +206 -53
- chia/full_node/mempool_check_conditions.py +20 -63
- chia/full_node/mempool_manager.py +26 -40
- chia/full_node/subscriptions.py +1 -3
- chia/full_node/tx_processing_queue.py +50 -3
- chia/full_node/weight_proof.py +46 -37
- chia/harvester/harvester.py +1 -1
- chia/harvester/harvester_api.py +22 -7
- chia/introducer/introducer.py +1 -1
- chia/introducer/introducer_api.py +1 -1
- chia/plot_sync/exceptions.py +1 -1
- chia/plot_sync/receiver.py +1 -1
- chia/plot_sync/sender.py +2 -2
- chia/pools/pool_puzzles.py +13 -18
- chia/pools/pool_wallet.py +23 -46
- chia/protocols/farmer_protocol.py +11 -3
- chia/protocols/full_node_protocol.py +1 -4
- chia/protocols/harvester_protocol.py +3 -3
- chia/protocols/pool_protocol.py +1 -2
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +1 -3
- chia/protocols/wallet_protocol.py +3 -3
- chia/rpc/rpc_client.py +7 -8
- chia/rpc/rpc_server.py +3 -3
- chia/rpc/util.py +3 -1
- chia/seeder/crawler.py +1 -1
- chia/seeder/crawler_api.py +1 -1
- chia/seeder/dns_server.py +2 -0
- chia/seeder/start_crawler.py +3 -3
- chia/server/address_manager.py +286 -38
- chia/server/address_manager_store.py +0 -215
- chia/{types → server}/aliases.py +7 -7
- chia/server/api_protocol.py +1 -1
- chia/server/chia_policy.py +1 -1
- chia/server/node_discovery.py +76 -113
- chia/server/rate_limits.py +1 -1
- chia/server/resolve_peer_info.py +43 -0
- chia/server/server.py +5 -5
- chia/server/start_data_layer.py +4 -4
- chia/server/start_farmer.py +5 -4
- chia/server/start_full_node.py +5 -4
- chia/server/start_harvester.py +7 -5
- chia/server/start_introducer.py +2 -2
- chia/server/start_service.py +1 -1
- chia/server/start_timelord.py +7 -5
- chia/server/start_wallet.py +7 -5
- chia/server/ws_connection.py +1 -1
- chia/simulator/add_blocks_in_batches.py +2 -2
- chia/simulator/block_tools.py +245 -201
- chia/simulator/full_node_simulator.py +38 -10
- chia/simulator/setup_services.py +12 -12
- chia/simulator/simulator_full_node_rpc_api.py +2 -2
- chia/simulator/simulator_full_node_rpc_client.py +2 -2
- chia/simulator/simulator_test_tools.py +2 -2
- chia/simulator/start_simulator.py +1 -1
- chia/simulator/wallet_tools.py +10 -18
- chia/ssl/create_ssl.py +1 -1
- chia/timelord/iters_from_block.py +14 -14
- chia/timelord/timelord.py +15 -11
- chia/timelord/timelord_api.py +14 -2
- chia/timelord/timelord_state.py +20 -14
- chia/types/blockchain_format/program.py +53 -10
- chia/types/blockchain_format/proof_of_space.py +73 -19
- chia/types/coin_spend.py +3 -56
- chia/types/generator_types.py +28 -0
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +12 -7
- chia/types/unfinished_header_block.py +1 -2
- chia/types/validation_state.py +1 -2
- chia/types/weight_proof.py +1 -3
- chia/util/action_scope.py +3 -3
- chia/util/block_cache.py +1 -2
- chia/util/byte_types.py +1 -1
- chia/util/casts.py +21 -0
- chia/util/config.py +0 -37
- chia/util/db_wrapper.py +8 -1
- chia/util/errors.py +3 -2
- chia/util/initial-config.yaml +21 -5
- chia/util/keychain.py +6 -7
- chia/util/keyring_wrapper.py +5 -5
- chia/util/limited_semaphore.py +1 -1
- chia/util/priority_mutex.py +1 -1
- chia/util/streamable.py +63 -5
- chia/util/task_timing.py +1 -1
- chia/util/virtual_project_analysis.py +1 -1
- chia/wallet/cat_wallet/cat_info.py +7 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +9 -5
- chia/wallet/cat_wallet/cat_utils.py +1 -1
- chia/wallet/cat_wallet/cat_wallet.py +44 -36
- chia/wallet/cat_wallet/lineage_store.py +7 -0
- chia/wallet/cat_wallet/r_cat_wallet.py +273 -0
- chia/wallet/conditions.py +5 -10
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -4
- chia/wallet/derivation_record.py +33 -0
- chia/wallet/derive_keys.py +3 -3
- chia/wallet/did_wallet/did_info.py +12 -3
- chia/wallet/did_wallet/did_wallet.py +132 -101
- chia/wallet/did_wallet/did_wallet_puzzles.py +9 -9
- chia/wallet/driver_protocol.py +3 -1
- chia/{types/spend_bundle.py → wallet/estimate_fees.py} +2 -7
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
- chia/wallet/nft_wallet/nft_wallet.py +69 -112
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +6 -4
- chia/wallet/nft_wallet/transfer_program_puzzle.py +4 -2
- chia/wallet/nft_wallet/uncurry_nft.py +4 -6
- chia/wallet/notification_manager.py +2 -3
- chia/wallet/outer_puzzles.py +7 -2
- chia/wallet/puzzle_drivers.py +1 -1
- chia/wallet/puzzles/clawback/drivers.py +5 -4
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -1
- chia/wallet/puzzles/singleton_top_layer.py +2 -1
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +2 -1
- chia/wallet/puzzles/tails.py +1 -3
- chia/wallet/signer_protocol.py +5 -6
- chia/wallet/singleton.py +5 -4
- chia/wallet/singleton_record.py +1 -1
- chia/wallet/trade_manager.py +18 -20
- chia/wallet/trade_record.py +3 -6
- chia/wallet/trading/offer.py +12 -13
- chia/wallet/uncurried_puzzle.py +2 -2
- chia/wallet/util/compute_additions.py +58 -0
- chia/wallet/util/compute_hints.py +3 -3
- chia/wallet/util/compute_memos.py +4 -4
- chia/wallet/util/curry_and_treehash.py +2 -1
- chia/wallet/util/debug_spend_bundle.py +1 -1
- chia/wallet/util/merkle_tree.py +1 -1
- chia/wallet/util/peer_request_cache.py +1 -2
- chia/wallet/util/tx_config.py +3 -8
- chia/wallet/util/wallet_sync_utils.py +10 -5
- chia/wallet/util/wallet_types.py +1 -0
- chia/wallet/vc_wallet/cr_cat_drivers.py +17 -18
- chia/wallet/vc_wallet/cr_cat_wallet.py +30 -28
- chia/wallet/vc_wallet/cr_outer_puzzle.py +5 -3
- chia/wallet/vc_wallet/vc_drivers.py +50 -8
- chia/wallet/vc_wallet/vc_store.py +3 -5
- chia/wallet/vc_wallet/vc_wallet.py +15 -22
- chia/wallet/wallet.py +36 -46
- chia/wallet/wallet_action_scope.py +73 -4
- chia/wallet/wallet_blockchain.py +1 -3
- chia/wallet/wallet_interested_store.py +1 -1
- chia/wallet/wallet_nft_store.py +3 -3
- chia/wallet/wallet_node.py +17 -16
- chia/wallet/wallet_node_api.py +4 -5
- chia/wallet/wallet_pool_store.py +1 -1
- chia/wallet/wallet_protocol.py +2 -0
- chia/wallet/wallet_puzzle_store.py +1 -1
- chia/{rpc → wallet}/wallet_request_types.py +670 -81
- chia/{rpc → wallet}/wallet_rpc_api.py +735 -766
- chia/{rpc → wallet}/wallet_rpc_client.py +268 -420
- chia/wallet/wallet_singleton_store.py +8 -7
- chia/wallet/wallet_spend_bundle.py +4 -3
- chia/wallet/wallet_state_manager.py +320 -191
- chia/wallet/wallet_weight_proof_handler.py +1 -2
- chia/wallet/wsm_apis.py +98 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/METADATA +7 -7
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/RECORD +443 -436
- mozilla-ca/cacert.pem +3 -165
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +0 -145
- chia/cmds/dev.py +0 -18
- chia/types/blockchain_format/slots.py +0 -9
- chia/types/blockchain_format/sub_epoch_summary.py +0 -5
- chia/types/end_of_slot_bundle.py +0 -5
- chia/types/full_block.py +0 -5
- chia/types/header_block.py +0 -5
- chia/types/spend_bundle_conditions.py +0 -7
- chia/types/transaction_queue_entry.py +0 -56
- chia/types/unfinished_block.py +0 -5
- /chia/cmds/{installers.py → dev/installers.py} +0 -0
- /chia/cmds/{sim.py → dev/sim.py} +0 -0
- /chia/{util → cmds}/dump_keyring.py +0 -0
- /chia/{full_node → consensus}/signage_point.py +0 -0
- /chia/{rpc → data_layer}/data_layer_rpc_client.py +0 -0
- /chia/{rpc → farmer}/farmer_rpc_api.py +0 -0
- /chia/{util → full_node}/full_block_utils.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_api.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_client.py +0 -0
- /chia/{full_node → protocols}/fee_estimate.py +0 -0
- /chia/{server → protocols}/outbound_message.py +0 -0
- /chia/{rpc → seeder}/crawler_rpc_api.py +0 -0
- /chia/{util → simulator}/vdf_prover.py +0 -0
- /chia/{util → ssl}/ssl_check.py +0 -0
- /chia/{rpc → timelord}/timelord_rpc_api.py +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/entry_points.txt +0 -0
|
@@ -5,13 +5,18 @@ from dataclasses import dataclass
|
|
|
5
5
|
from typing import Optional
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
|
-
from chia_rs import G1Element
|
|
8
|
+
from chia_rs import G1Element, PlotSize, ProofOfSpace
|
|
9
9
|
from chia_rs.sized_bytes import bytes32, bytes48
|
|
10
10
|
from chia_rs.sized_ints import uint8, uint32
|
|
11
11
|
|
|
12
12
|
from chia._tests.util.misc import Marks, datacases
|
|
13
13
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
14
|
-
from chia.types.blockchain_format.proof_of_space import
|
|
14
|
+
from chia.types.blockchain_format.proof_of_space import (
|
|
15
|
+
calculate_plot_difficulty,
|
|
16
|
+
calculate_prefix_bits,
|
|
17
|
+
passes_plot_filter,
|
|
18
|
+
verify_and_get_quality_string,
|
|
19
|
+
)
|
|
15
20
|
|
|
16
21
|
|
|
17
22
|
@dataclass
|
|
@@ -27,6 +32,15 @@ class ProofOfSpaceCase:
|
|
|
27
32
|
marks: Marks = ()
|
|
28
33
|
|
|
29
34
|
|
|
35
|
+
def g1(key: str) -> G1Element:
|
|
36
|
+
return G1Element.from_bytes_unchecked(bytes48.from_hexstr(key))
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def b32(key: str) -> bytes32:
|
|
40
|
+
return bytes32.from_hexstr(key)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# TODO: todo_v2_plots more test cases
|
|
30
44
|
@datacases(
|
|
31
45
|
ProofOfSpaceCase(
|
|
32
46
|
id="Neither pool public key nor pool contract puzzle hash",
|
|
@@ -70,37 +84,57 @@ class ProofOfSpaceCase:
|
|
|
70
84
|
),
|
|
71
85
|
ProofOfSpaceCase(
|
|
72
86
|
id="Not passing the plot filter with size 9",
|
|
73
|
-
pos_challenge=
|
|
87
|
+
pos_challenge=b32("08b23cc2844dfb92d2eedaa705a1ce665d571ee753bd81cbb67b92caa6d34722"),
|
|
74
88
|
plot_size=uint8(42),
|
|
75
|
-
pool_public_key=
|
|
76
|
-
|
|
77
|
-
"b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0"
|
|
78
|
-
)
|
|
89
|
+
pool_public_key=g1(
|
|
90
|
+
"b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0"
|
|
79
91
|
),
|
|
80
|
-
plot_public_key=
|
|
81
|
-
|
|
82
|
-
"b17d368f5400230b2b01464807825bf4163c5c159bd7d4465f935912e538ac9fb996dd9a9c479bd8aa6256bdca1fed96"
|
|
83
|
-
)
|
|
92
|
+
plot_public_key=g1(
|
|
93
|
+
"b17d368f5400230b2b01464807825bf4163c5c159bd7d4465f935912e538ac9fb996dd9a9c479bd8aa6256bdca1fed96"
|
|
84
94
|
),
|
|
85
95
|
height=uint32(5495999),
|
|
86
96
|
expected_error="Did not pass the plot filter",
|
|
87
97
|
),
|
|
88
98
|
ProofOfSpaceCase(
|
|
89
99
|
id="Passing the plot filter with size 8",
|
|
90
|
-
pos_challenge=
|
|
100
|
+
pos_challenge=b32("08b23cc2844dfb92d2eedaa705a1ce665d571ee753bd81cbb67b92caa6d34722"),
|
|
91
101
|
plot_size=uint8(42),
|
|
92
|
-
pool_public_key=
|
|
93
|
-
|
|
94
|
-
"b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0"
|
|
95
|
-
)
|
|
102
|
+
pool_public_key=g1(
|
|
103
|
+
"b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0"
|
|
96
104
|
),
|
|
97
|
-
plot_public_key=
|
|
98
|
-
|
|
99
|
-
"b17d368f5400230b2b01464807825bf4163c5c159bd7d4465f935912e538ac9fb996dd9a9c479bd8aa6256bdca1fed96"
|
|
100
|
-
)
|
|
105
|
+
plot_public_key=g1(
|
|
106
|
+
"b17d368f5400230b2b01464807825bf4163c5c159bd7d4465f935912e538ac9fb996dd9a9c479bd8aa6256bdca1fed96"
|
|
101
107
|
),
|
|
102
108
|
height=uint32(5496000),
|
|
103
109
|
),
|
|
110
|
+
ProofOfSpaceCase(
|
|
111
|
+
id="v2 plot size 0",
|
|
112
|
+
pos_challenge=bytes32(b"1" * 32),
|
|
113
|
+
plot_size=uint8(0x80),
|
|
114
|
+
plot_public_key=G1Element(),
|
|
115
|
+
pool_public_key=G1Element(),
|
|
116
|
+
expected_error="Plot size is lower than the minimum",
|
|
117
|
+
),
|
|
118
|
+
ProofOfSpaceCase(
|
|
119
|
+
id="v2 plot size 34",
|
|
120
|
+
pos_challenge=bytes32(b"1" * 32),
|
|
121
|
+
plot_size=uint8(0x80 | 34),
|
|
122
|
+
plot_public_key=G1Element(),
|
|
123
|
+
pool_public_key=G1Element(),
|
|
124
|
+
expected_error="Plot size is higher than the maximum",
|
|
125
|
+
),
|
|
126
|
+
ProofOfSpaceCase(
|
|
127
|
+
id="Not passing the plot filter v2",
|
|
128
|
+
pos_challenge=b32("3d29ea79d19b3f7e99ebf764ae53697cbe143603909873946af6ab1ece606861"),
|
|
129
|
+
plot_size=uint8(0x80 | 32),
|
|
130
|
+
pool_public_key=g1(
|
|
131
|
+
"b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0"
|
|
132
|
+
),
|
|
133
|
+
plot_public_key=g1(
|
|
134
|
+
"879526b4e7b616cfd64984d8ad140d0798b048392a6f11e2faf09054ef467ea44dc0dab5e5edb2afdfa850c5c8b629cc"
|
|
135
|
+
),
|
|
136
|
+
expected_error="Did not pass the plot filter",
|
|
137
|
+
),
|
|
104
138
|
)
|
|
105
139
|
def test_verify_and_get_quality_string(caplog: pytest.LogCaptureFixture, case: ProofOfSpaceCase) -> None:
|
|
106
140
|
pos = ProofOfSpace(
|
|
@@ -108,24 +142,87 @@ def test_verify_and_get_quality_string(caplog: pytest.LogCaptureFixture, case: P
|
|
|
108
142
|
pool_public_key=case.pool_public_key,
|
|
109
143
|
pool_contract_puzzle_hash=case.pool_contract_puzzle_hash,
|
|
110
144
|
plot_public_key=case.plot_public_key,
|
|
111
|
-
|
|
145
|
+
version_and_size=case.plot_size,
|
|
112
146
|
proof=b"1",
|
|
113
147
|
)
|
|
114
148
|
quality_string = verify_and_get_quality_string(
|
|
115
149
|
pos=pos,
|
|
116
150
|
constants=DEFAULT_CONSTANTS,
|
|
117
|
-
original_challenge_hash=
|
|
118
|
-
|
|
119
|
-
),
|
|
120
|
-
signage_point=bytes32.from_hexstr("0x7b3e23dbd438f9aceefa9827e2c5538898189987f49b06eceb7a43067e77b531"),
|
|
151
|
+
original_challenge_hash=b32("0x73490e166d0b88347c37d921660b216c27316aae9a3450933d3ff3b854e5831a"),
|
|
152
|
+
signage_point=b32("0x7b3e23dbd438f9aceefa9827e2c5538898189987f49b06eceb7a43067e77b531"),
|
|
121
153
|
height=case.height,
|
|
122
154
|
)
|
|
123
155
|
assert quality_string is None
|
|
124
156
|
assert len(caplog.text) == 0 if case.expected_error is None else case.expected_error in caplog.text
|
|
125
157
|
|
|
126
158
|
|
|
159
|
+
@datacases(
|
|
160
|
+
ProofOfSpaceCase(
|
|
161
|
+
id="v2 plot are not implemented",
|
|
162
|
+
plot_size=uint8(0x80 | 30),
|
|
163
|
+
pos_challenge=b32("47deb938e145d25d7b3b3c85ca9e3972b76c01aeeb78a02fe5d3b040d282317e"),
|
|
164
|
+
plot_public_key=g1(
|
|
165
|
+
"afa3aaf09c03885154be49216ee7fb2e4581b9c4a4d7e9cc402e27280bf0cfdbdf1b9ba674e301fd1d1450234b3b1868"
|
|
166
|
+
),
|
|
167
|
+
pool_public_key=g1(
|
|
168
|
+
"b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0"
|
|
169
|
+
),
|
|
170
|
+
expected_error="NotImplementedError",
|
|
171
|
+
),
|
|
172
|
+
)
|
|
173
|
+
def test_verify_and_get_quality_string_v2(caplog: pytest.LogCaptureFixture, case: ProofOfSpaceCase) -> None:
|
|
174
|
+
pos = ProofOfSpace(
|
|
175
|
+
challenge=case.pos_challenge,
|
|
176
|
+
pool_public_key=case.pool_public_key,
|
|
177
|
+
pool_contract_puzzle_hash=case.pool_contract_puzzle_hash,
|
|
178
|
+
plot_public_key=case.plot_public_key,
|
|
179
|
+
version_and_size=case.plot_size,
|
|
180
|
+
proof=b"1",
|
|
181
|
+
)
|
|
182
|
+
size = pos.size()
|
|
183
|
+
assert size.size_v2 is not None
|
|
184
|
+
assert size.size_v1 is None
|
|
185
|
+
try:
|
|
186
|
+
quality_string = verify_and_get_quality_string(
|
|
187
|
+
pos=pos,
|
|
188
|
+
constants=DEFAULT_CONSTANTS,
|
|
189
|
+
original_challenge_hash=b32("0x73490e166d0b88347c37d921660b216c27316aae9a3450933d3ff3b854e5831a"),
|
|
190
|
+
signage_point=b32("0x7b3e23dbd438f9aceefa9827e2c5538898189987f49b06eceb7a43067e77b531"),
|
|
191
|
+
height=case.height,
|
|
192
|
+
)
|
|
193
|
+
except NotImplementedError as e:
|
|
194
|
+
assert case.expected_error is not None
|
|
195
|
+
assert case.expected_error in repr(e)
|
|
196
|
+
else:
|
|
197
|
+
assert quality_string is None
|
|
198
|
+
assert len(caplog.text) == 0 if case.expected_error is None else case.expected_error in caplog.text
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
@pytest.mark.parametrize(
|
|
202
|
+
"height, difficulty",
|
|
203
|
+
[
|
|
204
|
+
(0, 2),
|
|
205
|
+
(DEFAULT_CONSTANTS.HARD_FORK_HEIGHT, 2),
|
|
206
|
+
(DEFAULT_CONSTANTS.HARD_FORK2_HEIGHT, 2),
|
|
207
|
+
(DEFAULT_CONSTANTS.PLOT_DIFFICULTY_4_HEIGHT - 1, 2),
|
|
208
|
+
(DEFAULT_CONSTANTS.PLOT_DIFFICULTY_4_HEIGHT, 4),
|
|
209
|
+
(DEFAULT_CONSTANTS.PLOT_DIFFICULTY_5_HEIGHT - 1, 4),
|
|
210
|
+
(DEFAULT_CONSTANTS.PLOT_DIFFICULTY_5_HEIGHT, 5),
|
|
211
|
+
(DEFAULT_CONSTANTS.PLOT_DIFFICULTY_6_HEIGHT - 1, 5),
|
|
212
|
+
(DEFAULT_CONSTANTS.PLOT_DIFFICULTY_6_HEIGHT, 6),
|
|
213
|
+
(DEFAULT_CONSTANTS.PLOT_DIFFICULTY_7_HEIGHT - 1, 6),
|
|
214
|
+
(DEFAULT_CONSTANTS.PLOT_DIFFICULTY_7_HEIGHT, 7),
|
|
215
|
+
(DEFAULT_CONSTANTS.PLOT_DIFFICULTY_8_HEIGHT - 1, 7),
|
|
216
|
+
(DEFAULT_CONSTANTS.PLOT_DIFFICULTY_8_HEIGHT, 8),
|
|
217
|
+
(DEFAULT_CONSTANTS.PLOT_DIFFICULTY_8_HEIGHT + 1000000, 8),
|
|
218
|
+
],
|
|
219
|
+
)
|
|
220
|
+
def test_calculate_plot_difficulty(height: uint32, difficulty: uint8) -> None:
|
|
221
|
+
assert calculate_plot_difficulty(DEFAULT_CONSTANTS, height) == difficulty
|
|
222
|
+
|
|
223
|
+
|
|
127
224
|
class TestProofOfSpace:
|
|
128
|
-
@pytest.mark.parametrize("prefix_bits", [DEFAULT_CONSTANTS.
|
|
225
|
+
@pytest.mark.parametrize("prefix_bits", [DEFAULT_CONSTANTS.NUMBER_ZERO_BITS_PLOT_FILTER_V1, 8, 7, 6, 5, 1, 0])
|
|
129
226
|
def test_can_create_proof(self, prefix_bits: int, seeded_random: random.Random) -> None:
|
|
130
227
|
"""
|
|
131
228
|
Tests that the change of getting a correct proof is exactly 1/target_filter.
|
|
@@ -142,3 +239,34 @@ class TestProofOfSpace:
|
|
|
142
239
|
success_count += 1
|
|
143
240
|
|
|
144
241
|
assert abs((success_count * target_filter / num_trials) - 1) < 0.35
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
@pytest.mark.parametrize("height,expected", [(0, 3), (5496000, 2), (10542000, 1), (15592000, 0), (20643000, 0)])
|
|
245
|
+
@pytest.mark.parametrize("plot_size", [PlotSize.make_v1(32), PlotSize.make_v2(28)])
|
|
246
|
+
def test_calculate_prefix_bits_clamp_zero(height: uint32, expected: int, plot_size: PlotSize) -> None:
|
|
247
|
+
constants = DEFAULT_CONSTANTS.replace(NUMBER_ZERO_BITS_PLOT_FILTER_V1=uint8(3))
|
|
248
|
+
if plot_size.size_v2 is not None:
|
|
249
|
+
expected = constants.NUMBER_ZERO_BITS_PLOT_FILTER_V2
|
|
250
|
+
assert calculate_prefix_bits(constants, height, plot_size) == expected
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
@pytest.mark.parametrize(
|
|
254
|
+
argnames=["height", "expected"],
|
|
255
|
+
argvalues=[
|
|
256
|
+
(0, 9),
|
|
257
|
+
(5495999, 9),
|
|
258
|
+
(5496000, 8),
|
|
259
|
+
(10541999, 8),
|
|
260
|
+
(10542000, 7),
|
|
261
|
+
(15591999, 7),
|
|
262
|
+
(15592000, 6),
|
|
263
|
+
(20642999, 6),
|
|
264
|
+
(20643000, 5),
|
|
265
|
+
],
|
|
266
|
+
)
|
|
267
|
+
@pytest.mark.parametrize("plot_size", [PlotSize.make_v1(32), PlotSize.make_v2(28)])
|
|
268
|
+
def test_calculate_prefix_bits_default(height: uint32, expected: int, plot_size: PlotSize) -> None:
|
|
269
|
+
constants = DEFAULT_CONSTANTS
|
|
270
|
+
if plot_size.size_v2 is not None:
|
|
271
|
+
expected = DEFAULT_CONSTANTS.NUMBER_ZERO_BITS_PLOT_FILTER_V2
|
|
272
|
+
assert calculate_prefix_bits(constants, height, plot_size) == expected
|
|
@@ -4,15 +4,14 @@ import random
|
|
|
4
4
|
import unittest
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
|
-
from chia_rs import G2Element
|
|
7
|
+
from chia_rs import CoinSpend, G2Element, SpendBundle
|
|
8
8
|
from chia_rs.sized_bytes import bytes32
|
|
9
9
|
from chia_rs.sized_ints import uint64
|
|
10
10
|
|
|
11
11
|
from chia.types.blockchain_format.coin import Coin
|
|
12
12
|
from chia.types.blockchain_format.program import Program
|
|
13
|
-
from chia.types.coin_spend import
|
|
13
|
+
from chia.types.coin_spend import make_spend
|
|
14
14
|
from chia.types.condition_opcodes import ConditionOpcode
|
|
15
|
-
from chia.types.spend_bundle import SpendBundle
|
|
16
15
|
|
|
17
16
|
BLANK_SPEND_BUNDLE = SpendBundle(coin_spends=[], aggregated_signature=G2Element())
|
|
18
17
|
NULL_SIGNATURE = "0xc" + "0" * 191
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import importlib.metadata
|
|
4
4
|
import json
|
|
5
|
+
import logging
|
|
5
6
|
from dataclasses import dataclass, field, replace
|
|
6
7
|
from pathlib import Path
|
|
7
8
|
from typing import Any, Optional, Union, cast
|
|
@@ -2126,3 +2127,82 @@ def test_run_plotter_bladebit(
|
|
|
2126
2127
|
assert mock_run_plotter.call_args.args[1] == "bladebit"
|
|
2127
2128
|
assert mock_run_plotter.call_args.args[2][1:] == case.expected_raw_command_args()
|
|
2128
2129
|
mock_run_plotter.assert_called_once()
|
|
2130
|
+
|
|
2131
|
+
|
|
2132
|
+
@pytest.mark.anyio
|
|
2133
|
+
async def test_message_logging_redaction(
|
|
2134
|
+
daemon_connection_and_temp_keychain: tuple[aiohttp.ClientWebSocketResponse, Keychain],
|
|
2135
|
+
caplog: pytest.LogCaptureFixture,
|
|
2136
|
+
) -> None:
|
|
2137
|
+
ws, _ = daemon_connection_and_temp_keychain
|
|
2138
|
+
|
|
2139
|
+
with caplog.at_level(logging.DEBUG, logger="chia.daemon.server"):
|
|
2140
|
+
sensitive_payload = create_payload(
|
|
2141
|
+
"test_command",
|
|
2142
|
+
{
|
|
2143
|
+
"password": "secret_password",
|
|
2144
|
+
"private_key": "sensitive_key_data",
|
|
2145
|
+
"secret_value": "very_secret",
|
|
2146
|
+
"mnemonic": "test_mnemonic_phrase",
|
|
2147
|
+
"normal_field": "normal_value",
|
|
2148
|
+
"nested_object": {
|
|
2149
|
+
"passphrase": "nested_secret",
|
|
2150
|
+
"api_key": "nested_api_key",
|
|
2151
|
+
"seed_mnemonic": "nested_mnemonic",
|
|
2152
|
+
"safe_field": "safe_value",
|
|
2153
|
+
},
|
|
2154
|
+
},
|
|
2155
|
+
"test",
|
|
2156
|
+
"daemon",
|
|
2157
|
+
)
|
|
2158
|
+
|
|
2159
|
+
original_message = json.loads(sensitive_payload)
|
|
2160
|
+
request_id = original_message["request_id"]
|
|
2161
|
+
|
|
2162
|
+
await ws.send_str(sensitive_payload)
|
|
2163
|
+
await ws.receive()
|
|
2164
|
+
|
|
2165
|
+
log_message = next(record for record in caplog.records if "Received message:" in record.message).message
|
|
2166
|
+
_, _, ws_message_str = log_message.partition("Received message: ")
|
|
2167
|
+
|
|
2168
|
+
# Build the expected redacted structure and sort keys like dict_to_json_str does
|
|
2169
|
+
expected_redacted_data = {
|
|
2170
|
+
"ack": False,
|
|
2171
|
+
"command": "test_command",
|
|
2172
|
+
"data": {
|
|
2173
|
+
"mnemonic": "***<redacted>***",
|
|
2174
|
+
"nested_object": {
|
|
2175
|
+
"api_key": "***<redacted>***",
|
|
2176
|
+
"passphrase": "***<redacted>***",
|
|
2177
|
+
"safe_field": "safe_value",
|
|
2178
|
+
"seed_mnemonic": "***<redacted>***",
|
|
2179
|
+
},
|
|
2180
|
+
"normal_field": "normal_value",
|
|
2181
|
+
"password": "***<redacted>***",
|
|
2182
|
+
"private_key": "***<redacted>***",
|
|
2183
|
+
"secret_value": "***<redacted>***",
|
|
2184
|
+
},
|
|
2185
|
+
"destination": "daemon",
|
|
2186
|
+
"origin": "test",
|
|
2187
|
+
"request_id": request_id,
|
|
2188
|
+
}
|
|
2189
|
+
|
|
2190
|
+
expected_ws_message = f"WSMessage(type=<WSMsgType.TEXT: 1>, data={expected_redacted_data!r}, extra='')"
|
|
2191
|
+
|
|
2192
|
+
assert ws_message_str == expected_ws_message
|
|
2193
|
+
|
|
2194
|
+
|
|
2195
|
+
@pytest.mark.anyio
|
|
2196
|
+
async def test_non_text_message_logging(
|
|
2197
|
+
daemon_connection_and_temp_keychain: tuple[aiohttp.ClientWebSocketResponse, Keychain],
|
|
2198
|
+
caplog: pytest.LogCaptureFixture,
|
|
2199
|
+
) -> None:
|
|
2200
|
+
ws, _ = daemon_connection_and_temp_keychain
|
|
2201
|
+
|
|
2202
|
+
with caplog.at_level(logging.DEBUG, logger="chia.daemon.server"):
|
|
2203
|
+
# Close the websocket to trigger non-text message handling
|
|
2204
|
+
await ws.close()
|
|
2205
|
+
|
|
2206
|
+
non_text_logs = [record for record in caplog.records if "Received non-text message" in record.message]
|
|
2207
|
+
|
|
2208
|
+
assert len(non_text_logs) == 1, "Expected one 'Received non-text message' log entry"
|
|
@@ -9,7 +9,7 @@ from chia_rs.sized_bytes import bytes32
|
|
|
9
9
|
from chia._tests.util.misc import RecordingWebServer
|
|
10
10
|
from chia.data_layer.data_layer import DataLayer
|
|
11
11
|
from chia.data_layer.data_layer_util import PluginRemote
|
|
12
|
-
from chia.
|
|
12
|
+
from chia.wallet.wallet_rpc_client import WalletRpcClient
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
async def create_sufficient_wallet_rpc_client() -> WalletRpcClient:
|
|
@@ -10,6 +10,7 @@ from _pytest.fixtures import SubRequest
|
|
|
10
10
|
from chia_rs.sized_bytes import bytes32
|
|
11
11
|
|
|
12
12
|
from chia._tests.util.misc import Marks, datacases, measure_runtime
|
|
13
|
+
from chia.data_layer.data_layer_rpc_util import MarshallableProtocol
|
|
13
14
|
from chia.data_layer.data_layer_util import (
|
|
14
15
|
ClearPendingRootsRequest,
|
|
15
16
|
ClearPendingRootsResponse,
|
|
@@ -22,7 +23,6 @@ from chia.data_layer.data_layer_util import (
|
|
|
22
23
|
key_hash,
|
|
23
24
|
leaf_hash,
|
|
24
25
|
)
|
|
25
|
-
from chia.rpc.data_layer_rpc_util import MarshallableProtocol
|
|
26
26
|
from chia.types.blockchain_format.program import Program
|
|
27
27
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
28
28
|
|
|
@@ -42,6 +42,8 @@ from chia.cmds.data_funcs import (
|
|
|
42
42
|
from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
|
|
43
43
|
from chia.data_layer.data_layer import DataLayer
|
|
44
44
|
from chia.data_layer.data_layer_errors import KeyNotFoundError, OfferIntegrityError
|
|
45
|
+
from chia.data_layer.data_layer_rpc_api import DataLayerRpcApi
|
|
46
|
+
from chia.data_layer.data_layer_rpc_client import DataLayerRpcClient
|
|
45
47
|
from chia.data_layer.data_layer_util import (
|
|
46
48
|
HashOnlyProof,
|
|
47
49
|
OfferStore,
|
|
@@ -54,14 +56,11 @@ from chia.data_layer.data_layer_util import (
|
|
|
54
56
|
from chia.data_layer.data_layer_wallet import DataLayerWallet, verify_offer
|
|
55
57
|
from chia.data_layer.data_store import DataStore
|
|
56
58
|
from chia.data_layer.download_data import get_delta_filename_path, get_full_tree_filename_path
|
|
57
|
-
from chia.
|
|
58
|
-
from chia.rpc.data_layer_rpc_client import DataLayerRpcClient
|
|
59
|
-
from chia.rpc.wallet_rpc_api import WalletRpcApi
|
|
59
|
+
from chia.server.aliases import DataLayerService, WalletService
|
|
60
60
|
from chia.server.start_data_layer import create_data_layer_service
|
|
61
61
|
from chia.simulator.block_tools import BlockTools
|
|
62
62
|
from chia.simulator.full_node_simulator import FullNodeSimulator
|
|
63
63
|
from chia.simulator.simulator_protocol import FarmNewBlockProtocol
|
|
64
|
-
from chia.types.aliases import DataLayerService, WalletService
|
|
65
64
|
from chia.types.peer_info import PeerInfo
|
|
66
65
|
from chia.util.byte_types import hexstr_to_bytes
|
|
67
66
|
from chia.util.config import save_config
|
|
@@ -71,8 +70,11 @@ from chia.util.task_referencer import create_referenced_task
|
|
|
71
70
|
from chia.util.timing import adjusted_timeout, backoff_times
|
|
72
71
|
from chia.wallet.trading.offer import Offer as TradingOffer
|
|
73
72
|
from chia.wallet.transaction_record import TransactionRecord
|
|
73
|
+
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
|
|
74
74
|
from chia.wallet.wallet import Wallet
|
|
75
75
|
from chia.wallet.wallet_node import WalletNode
|
|
76
|
+
from chia.wallet.wallet_request_types import DLLatestSingleton
|
|
77
|
+
from chia.wallet.wallet_rpc_api import WalletRpcApi
|
|
76
78
|
|
|
77
79
|
pytestmark = pytest.mark.data_layer
|
|
78
80
|
nodes = tuple[WalletNode, FullNodeSimulator]
|
|
@@ -160,7 +162,8 @@ async def init_wallet_and_node(
|
|
|
160
162
|
wallet_node = wallet_service._node
|
|
161
163
|
full_node_api = full_node_service._api
|
|
162
164
|
await wallet_node.server.start_client(PeerInfo(self_hostname, full_node_api.server.get_port()), None)
|
|
163
|
-
|
|
165
|
+
async with wallet_node.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
166
|
+
ph = await action_scope.get_puzzle_hash(wallet_node.wallet_state_manager)
|
|
164
167
|
await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
|
|
165
168
|
await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
|
|
166
169
|
funds = calculate_pool_reward(uint32(1)) + calculate_base_farmer_reward(uint32(1))
|
|
@@ -213,7 +216,7 @@ async def check_coin_state(wallet_node: WalletNode, coin_id: bytes32) -> bool:
|
|
|
213
216
|
|
|
214
217
|
|
|
215
218
|
async def check_singleton_confirmed(dl: DataLayer, store_id: bytes32) -> bool:
|
|
216
|
-
return await dl.wallet_rpc.dl_latest_singleton(store_id, True) is not None
|
|
219
|
+
return (await dl.wallet_rpc.dl_latest_singleton(DLLatestSingleton(store_id, True))).singleton is not None
|
|
217
220
|
|
|
218
221
|
|
|
219
222
|
async def process_block_and_check_offer_validity(offer: TradingOffer, offer_setup: OfferSetup) -> bool:
|
|
@@ -730,8 +733,9 @@ async def test_get_owned_stores(
|
|
|
730
733
|
wallet_rpc_port = wallet_service.rpc_server.listen_port
|
|
731
734
|
full_node_api = full_node_service._api
|
|
732
735
|
await wallet_node.server.start_client(PeerInfo(self_hostname, full_node_api.server.get_port()), None)
|
|
733
|
-
|
|
734
|
-
|
|
736
|
+
async with wallet_node.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
737
|
+
ph = await action_scope.get_puzzle_hash(wallet_node.wallet_state_manager)
|
|
738
|
+
for i in range(num_blocks):
|
|
735
739
|
await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
|
|
736
740
|
funds = sum(
|
|
737
741
|
calculate_pool_reward(uint32(i)) + calculate_base_farmer_reward(uint32(i)) for i in range(1, num_blocks)
|
|
@@ -749,7 +753,7 @@ async def test_get_owned_stores(
|
|
|
749
753
|
expected_store_ids.append(launcher_id)
|
|
750
754
|
|
|
751
755
|
await time_out_assert(4, check_mempool_spend_count, True, full_node_api, 3)
|
|
752
|
-
for i in range(
|
|
756
|
+
for i in range(num_blocks):
|
|
753
757
|
await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
|
|
754
758
|
await asyncio.sleep(0.5)
|
|
755
759
|
|
|
@@ -3785,7 +3789,7 @@ async def test_auto_subscribe_to_local_stores(
|
|
|
3785
3789
|
|
|
3786
3790
|
with monkeypatch.context() as m:
|
|
3787
3791
|
m.setattr("chia.data_layer.data_store.DataStore.get_store_ids", mock_get_store_ids)
|
|
3788
|
-
m.setattr("chia.
|
|
3792
|
+
m.setattr("chia.wallet.wallet_rpc_client.WalletRpcClient.dl_track_new", mock_dl_track_new)
|
|
3789
3793
|
|
|
3790
3794
|
config = bt.config
|
|
3791
3795
|
config["data_layer"]["auto_subscribe_to_local_stores"] = auto_subscribe_to_local_stores
|
|
@@ -107,7 +107,7 @@ async def test_create_tree_accepts_bytes32(raw_data_store: DataStore) -> None:
|
|
|
107
107
|
await raw_data_store.create_tree(store_id=store_id)
|
|
108
108
|
|
|
109
109
|
|
|
110
|
-
@pytest.mark.parametrize(argnames=["length"], argvalues=[[length] for length in [*range(
|
|
110
|
+
@pytest.mark.parametrize(argnames=["length"], argvalues=[[length] for length in [*range(32), *range(33, 48)]])
|
|
111
111
|
@pytest.mark.anyio
|
|
112
112
|
async def test_create_store_fails_for_not_bytes32(raw_data_store: DataStore, length: int) -> None:
|
|
113
113
|
bad_store_id = b"\0" * length
|
|
@@ -1355,13 +1355,13 @@ async def test_server_http_ban(
|
|
|
1355
1355
|
async def mock_http_download(
|
|
1356
1356
|
target_filename_path: Path,
|
|
1357
1357
|
filename: str,
|
|
1358
|
-
proxy_url: str,
|
|
1358
|
+
proxy_url: Optional[str],
|
|
1359
1359
|
server_info: ServerInfo,
|
|
1360
1360
|
timeout: aiohttp.ClientTimeout,
|
|
1361
1361
|
log: logging.Logger,
|
|
1362
1362
|
) -> None:
|
|
1363
1363
|
if error:
|
|
1364
|
-
raise aiohttp.ClientConnectionError
|
|
1364
|
+
raise aiohttp.ClientConnectionError
|
|
1365
1365
|
|
|
1366
1366
|
start_timestamp = int(time.time())
|
|
1367
1367
|
with monkeypatch.context() as m:
|
|
@@ -1885,7 +1885,7 @@ async def test_insert_from_delta_file(
|
|
|
1885
1885
|
async def mock_http_download(
|
|
1886
1886
|
target_filename_path: Path,
|
|
1887
1887
|
filename: str,
|
|
1888
|
-
proxy_url: str,
|
|
1888
|
+
proxy_url: Optional[str],
|
|
1889
1889
|
server_info: ServerInfo,
|
|
1890
1890
|
timeout: int,
|
|
1891
1891
|
log: logging.Logger,
|
|
@@ -1895,7 +1895,7 @@ async def test_insert_from_delta_file(
|
|
|
1895
1895
|
async def mock_http_download_2(
|
|
1896
1896
|
target_filename_path: Path,
|
|
1897
1897
|
filename: str,
|
|
1898
|
-
proxy_url: str,
|
|
1898
|
+
proxy_url: Optional[str],
|
|
1899
1899
|
server_info: ServerInfo,
|
|
1900
1900
|
timeout: int,
|
|
1901
1901
|
log: logging.Logger,
|
|
@@ -17,8 +17,8 @@ from chia._tests.util.network_protocol_data import (
|
|
|
17
17
|
)
|
|
18
18
|
from chia.farmer.farmer_api import FarmerAPI
|
|
19
19
|
from chia.protocols import farmer_protocol
|
|
20
|
+
from chia.protocols.outbound_message import Message, NodeType
|
|
20
21
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
21
|
-
from chia.server.outbound_message import Message, NodeType
|
|
22
22
|
from chia.util.hash import std_hash
|
|
23
23
|
from chia.util.task_referencer import create_referenced_task
|
|
24
24
|
|
|
@@ -46,7 +46,7 @@ async def test_farmer_ignores_concurrent_duplicate_signage_points(
|
|
|
46
46
|
assert ProtocolMessageTypes(response).name == "harvester_handshake"
|
|
47
47
|
|
|
48
48
|
sp = farmer_protocol.NewSignagePoint(
|
|
49
|
-
std_hash(b"1"), std_hash(b"2"), std_hash(b"3"), uint64(1), uint64(1000000), uint8(2), uint32(1)
|
|
49
|
+
std_hash(b"1"), std_hash(b"2"), std_hash(b"3"), uint64(1), uint64(1000000), uint8(2), uint32(1), uint32(0)
|
|
50
50
|
)
|
|
51
51
|
await gather(
|
|
52
52
|
farmer_api.new_signage_point(sp),
|