chia-blockchain 2.5.0rc1__py3-none-any.whl → 2.5.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/README.md +1 -1
- chia/_tests/blockchain/blockchain_test_utils.py +24 -26
- chia/_tests/blockchain/test_augmented_chain.py +6 -8
- chia/_tests/blockchain/test_blockchain.py +409 -307
- chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
- chia/_tests/blockchain/test_build_chains.py +11 -13
- chia/_tests/blockchain/test_get_block_generator.py +8 -8
- chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
- chia/_tests/build-init-files.py +3 -4
- chia/_tests/build-job-matrix.py +9 -9
- chia/_tests/check_sql_statements.py +2 -3
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +7 -5
- chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
- chia/_tests/clvm/test_condition_codes.py +2 -2
- chia/_tests/clvm/test_curry_and_treehash.py +2 -4
- chia/_tests/clvm/test_message_conditions.py +184 -0
- chia/_tests/clvm/test_puzzle_compression.py +1 -2
- chia/_tests/clvm/test_puzzle_drivers.py +3 -3
- chia/_tests/clvm/test_puzzles.py +13 -18
- chia/_tests/clvm/test_singletons.py +17 -17
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +42 -45
- chia/_tests/cmds/conftest.py +2 -2
- chia/_tests/cmds/test_click_types.py +21 -16
- chia/_tests/cmds/test_cmd_framework.py +255 -35
- chia/_tests/cmds/test_cmds_util.py +2 -2
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_dev_gh.py +131 -0
- chia/_tests/cmds/test_farm_cmd.py +1 -2
- chia/_tests/cmds/test_show.py +6 -6
- chia/_tests/cmds/test_tx_config_args.py +2 -1
- chia/_tests/cmds/wallet/test_dao.py +23 -23
- chia/_tests/cmds/wallet/test_did.py +29 -29
- chia/_tests/cmds/wallet/test_nft.py +24 -23
- chia/_tests/cmds/wallet/test_notifications.py +8 -8
- chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
- chia/_tests/cmds/wallet/test_vcs.py +97 -73
- chia/_tests/cmds/wallet/test_wallet.py +74 -75
- chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
- chia/_tests/conftest.py +153 -38
- chia/_tests/connection_utils.py +7 -6
- chia/_tests/core/cmds/test_beta.py +3 -3
- chia/_tests/core/cmds/test_keys.py +6 -6
- chia/_tests/core/cmds/test_wallet.py +3 -3
- chia/_tests/core/consensus/test_block_creation.py +3 -5
- chia/_tests/core/custom_types/test_coin.py +1 -3
- chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
- chia/_tests/core/daemon/test_daemon.py +58 -58
- chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
- chia/_tests/core/data_layer/conftest.py +4 -3
- chia/_tests/core/data_layer/test_data_cli.py +1 -2
- chia/_tests/core/data_layer/test_data_layer.py +5 -5
- chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
- chia/_tests/core/data_layer/test_data_rpc.py +75 -93
- chia/_tests/core/data_layer/test_data_store.py +38 -37
- chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
- chia/_tests/core/data_layer/util.py +11 -10
- chia/_tests/core/farmer/test_farmer_api.py +6 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
- chia/_tests/core/full_node/ram_db.py +2 -2
- chia/_tests/core/full_node/stores/test_block_store.py +113 -11
- chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
- chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
- chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
- chia/_tests/core/full_node/test_address_manager.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +1 -1
- chia/_tests/core/full_node/test_conditions.py +10 -12
- chia/_tests/core/full_node/test_full_node.py +2077 -1822
- chia/_tests/core/full_node/test_generator_tools.py +4 -4
- chia/_tests/core/full_node/test_hint_management.py +2 -2
- chia/_tests/core/full_node/test_performance.py +2 -5
- chia/_tests/core/full_node/test_subscriptions.py +4 -4
- chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
- chia/_tests/core/make_block_generator.py +5 -7
- chia/_tests/core/mempool/test_mempool.py +205 -208
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
- chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
- chia/_tests/core/mempool/test_mempool_manager.py +109 -80
- chia/_tests/core/mempool/test_mempool_performance.py +3 -4
- chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
- chia/_tests/core/server/flood.py +6 -4
- chia/_tests/core/server/serve.py +10 -7
- chia/_tests/core/server/test_api_protocol.py +21 -0
- chia/_tests/core/server/test_capabilities.py +3 -5
- chia/_tests/core/server/test_dos.py +15 -16
- chia/_tests/core/server/test_loop.py +14 -10
- chia/_tests/core/server/test_node_discovery.py +1 -2
- chia/_tests/core/server/test_rate_limits.py +156 -44
- chia/_tests/core/server/test_server.py +8 -7
- chia/_tests/core/services/test_services.py +59 -37
- chia/_tests/core/ssl/test_ssl.py +5 -3
- chia/_tests/core/test_cost_calculation.py +5 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_db_conversion.py +5 -4
- chia/_tests/core/test_db_validation.py +6 -5
- chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
- chia/_tests/core/test_filter.py +3 -5
- chia/_tests/core/test_full_node_rpc.py +64 -90
- chia/_tests/core/test_merkle_set.py +10 -10
- chia/_tests/core/test_program.py +2 -4
- chia/_tests/core/test_rpc_util.py +1 -2
- chia/_tests/core/test_seeder.py +124 -12
- chia/_tests/core/util/test_block_cache.py +5 -5
- chia/_tests/core/util/test_cached_bls.py +3 -3
- chia/_tests/core/util/test_config.py +13 -13
- chia/_tests/core/util/test_files.py +2 -2
- chia/_tests/core/util/test_jsonify.py +9 -9
- chia/_tests/core/util/test_keychain.py +13 -5
- chia/_tests/core/util/test_keyring_wrapper.py +6 -5
- chia/_tests/core/util/test_log_exceptions.py +3 -3
- chia/_tests/core/util/test_streamable.py +38 -38
- chia/_tests/db/test_db_wrapper.py +13 -12
- chia/_tests/environments/common.py +2 -2
- chia/_tests/environments/full_node.py +2 -2
- chia/_tests/environments/wallet.py +109 -48
- chia/_tests/farmer_harvester/test_farmer.py +35 -35
- chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
- chia/_tests/generator/test_compression.py +13 -30
- chia/_tests/generator/test_generator_types.py +3 -3
- chia/_tests/generator/test_rom.py +7 -9
- chia/_tests/plot_sync/test_delta.py +2 -3
- chia/_tests/plot_sync/test_plot_sync.py +25 -24
- chia/_tests/plot_sync/test_receiver.py +9 -9
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +27 -26
- chia/_tests/plot_sync/util.py +2 -1
- chia/_tests/plotting/test_plot_manager.py +54 -11
- chia/_tests/plotting/util.py +2 -3
- chia/_tests/pools/test_pool_cli_parsing.py +128 -0
- chia/_tests/pools/test_pool_cmdline.py +993 -15
- chia/_tests/pools/test_pool_config.py +3 -5
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
- chia/_tests/pools/test_pool_rpc.py +203 -90
- chia/_tests/pools/test_pool_wallet.py +12 -8
- chia/_tests/pools/test_wallet_pool_store.py +3 -3
- chia/_tests/process_junit.py +16 -17
- chia/_tests/rpc/test_rpc_client.py +59 -2
- chia/_tests/rpc/test_rpc_server.py +183 -0
- chia/_tests/simulation/test_simulation.py +5 -5
- chia/_tests/simulation/test_simulator.py +8 -10
- chia/_tests/simulation/test_start_simulator.py +5 -4
- chia/_tests/timelord/test_new_peak.py +19 -19
- chia/_tests/tools/test_run_block.py +1 -2
- chia/_tests/tools/test_virtual_project.py +591 -0
- chia/_tests/util/benchmark_cost.py +9 -9
- chia/_tests/util/benchmarks.py +1 -2
- chia/_tests/util/blockchain.py +12 -11
- chia/_tests/util/blockchain_mock.py +15 -15
- chia/_tests/util/build_network_protocol_files.py +12 -12
- chia/_tests/util/db_connection.py +3 -2
- chia/_tests/util/full_sync.py +14 -6
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/generator_tools_testing.py +5 -7
- chia/_tests/util/get_name_puzzle_conditions.py +52 -0
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +59 -106
- chia/_tests/util/network_protocol_data.py +7 -9
- chia/_tests/util/protocol_messages_json.py +112 -111
- chia/_tests/util/rpc.py +3 -0
- chia/_tests/util/run_block.py +16 -16
- chia/_tests/util/setup_nodes.py +25 -23
- chia/{clvm → _tests/util}/spend_sim.py +59 -55
- chia/_tests/util/split_managers.py +12 -9
- chia/_tests/util/temp_file.py +1 -1
- chia/_tests/util/test_action_scope.py +2 -1
- chia/_tests/util/test_async_pool.py +8 -8
- chia/_tests/util/test_build_job_matrix.py +2 -3
- chia/_tests/util/test_condition_tools.py +4 -6
- chia/_tests/util/test_config.py +5 -5
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +19 -11
- chia/_tests/util/test_limited_semaphore.py +4 -3
- chia/_tests/util/test_logging_filter.py +2 -3
- chia/_tests/util/test_misc.py +29 -28
- chia/_tests/util/test_network.py +32 -31
- chia/_tests/util/test_network_protocol_files.py +2 -3
- chia/_tests/util/test_network_protocol_json.py +1 -0
- chia/_tests/util/test_network_protocol_test.py +18 -19
- chia/_tests/util/test_paginator.py +3 -4
- chia/_tests/util/test_pprint.py +1 -1
- chia/_tests/util/test_priority_mutex.py +18 -17
- chia/_tests/util/test_recursive_replace.py +2 -2
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/test_timing.py +1 -1
- chia/_tests/util/test_trusted_peer.py +2 -2
- chia/_tests/util/time_out_assert.py +43 -6
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
- chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
- chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
- chia/_tests/wallet/conftest.py +135 -74
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
- chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
- chia/_tests/wallet/did_wallet/test_did.py +1277 -474
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
- chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
- chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
- chia/_tests/wallet/test_address_type.py +20 -20
- chia/_tests/wallet/test_clvm_streamable.py +5 -5
- chia/_tests/wallet/test_coin_management.py +354 -0
- chia/_tests/wallet/test_coin_selection.py +34 -35
- chia/_tests/wallet/test_conditions.py +28 -16
- chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
- chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
- chia/_tests/wallet/test_nft_store.py +1 -2
- chia/_tests/wallet/test_notifications.py +2 -2
- chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
- chia/_tests/wallet/test_puzzle_store.py +2 -3
- chia/_tests/wallet/test_sign_coin_spends.py +3 -3
- chia/_tests/wallet/test_signer_protocol.py +33 -34
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
- chia/_tests/wallet/test_taproot.py +1 -1
- chia/_tests/wallet/test_transaction_store.py +23 -19
- chia/_tests/wallet/test_util.py +36 -32
- chia/_tests/wallet/test_wallet.py +37 -37
- chia/_tests/wallet/test_wallet_action_scope.py +8 -8
- chia/_tests/wallet/test_wallet_blockchain.py +4 -6
- chia/_tests/wallet/test_wallet_coin_store.py +34 -34
- chia/_tests/wallet/test_wallet_node.py +69 -72
- chia/_tests/wallet/test_wallet_retry.py +3 -3
- chia/_tests/wallet/test_wallet_state_manager.py +12 -5
- chia/_tests/wallet/test_wallet_trade_store.py +2 -2
- chia/_tests/wallet/test_wallet_utils.py +5 -4
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
- chia/_tests/wallet/wallet_block_tools.py +27 -27
- chia/_tests/weight_proof/test_weight_proof.py +30 -30
- chia/apis.py +19 -0
- chia/cmds/beta.py +8 -7
- chia/cmds/beta_funcs.py +15 -11
- chia/cmds/check_wallet_db.py +29 -27
- chia/cmds/chia.py +17 -9
- chia/cmds/cmd_classes.py +87 -79
- chia/cmds/cmd_helpers.py +242 -0
- chia/cmds/cmds_util.py +56 -66
- chia/cmds/coin_funcs.py +168 -153
- chia/cmds/coins.py +156 -194
- chia/cmds/configure.py +4 -3
- chia/cmds/dao.py +89 -33
- chia/cmds/dao_funcs.py +55 -33
- chia/cmds/data.py +7 -6
- chia/cmds/data_funcs.py +26 -21
- chia/cmds/db.py +4 -3
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev.py +2 -0
- chia/cmds/farm.py +18 -5
- chia/cmds/farm_funcs.py +17 -24
- chia/cmds/gh.py +275 -0
- chia/cmds/init.py +4 -11
- chia/cmds/init_funcs.py +9 -9
- chia/cmds/installers.py +5 -3
- chia/cmds/keys.py +56 -39
- chia/cmds/keys_funcs.py +30 -31
- chia/cmds/netspace.py +6 -3
- chia/cmds/netspace_funcs.py +3 -2
- chia/cmds/param_types.py +16 -6
- chia/cmds/passphrase.py +8 -7
- chia/cmds/passphrase_funcs.py +7 -61
- chia/cmds/peer.py +2 -1
- chia/cmds/peer_funcs.py +5 -5
- chia/cmds/plotnft.py +207 -153
- chia/cmds/plotnft_funcs.py +205 -174
- chia/cmds/plots.py +14 -6
- chia/cmds/plotters.py +2 -1
- chia/cmds/rpc.py +48 -28
- chia/cmds/show.py +2 -1
- chia/cmds/show_funcs.py +7 -6
- chia/cmds/signer.py +50 -58
- chia/cmds/sim.py +22 -14
- chia/cmds/sim_funcs.py +11 -11
- chia/cmds/start.py +3 -3
- chia/cmds/start_funcs.py +9 -12
- chia/cmds/stop.py +4 -3
- chia/cmds/units.py +1 -3
- chia/cmds/wallet.py +252 -96
- chia/cmds/wallet_funcs.py +217 -143
- chia/consensus/block_body_validation.py +133 -86
- chia/consensus/block_creation.py +42 -21
- chia/consensus/block_header_validation.py +32 -37
- chia/consensus/block_record.py +1 -2
- chia/consensus/blockchain.py +167 -180
- chia/consensus/blockchain_interface.py +10 -10
- chia/consensus/constants.py +2 -2
- chia/consensus/default_constants.py +3 -4
- chia/consensus/difficulty_adjustment.py +5 -5
- chia/consensus/find_fork_point.py +5 -5
- chia/consensus/full_block_to_block_record.py +4 -4
- chia/consensus/get_block_challenge.py +2 -2
- chia/consensus/get_block_generator.py +4 -3
- chia/consensus/multiprocess_validation.py +207 -304
- chia/consensus/vdf_info_computation.py +3 -3
- chia/daemon/client.py +46 -27
- chia/daemon/keychain_proxy.py +10 -9
- chia/daemon/keychain_server.py +18 -18
- chia/daemon/server.py +103 -113
- chia/daemon/windows_signal.py +2 -2
- chia/data_layer/data_layer.py +64 -76
- chia/data_layer/data_layer_api.py +8 -0
- chia/data_layer/data_layer_errors.py +3 -3
- chia/data_layer/data_layer_server.py +2 -2
- chia/data_layer/data_layer_util.py +71 -71
- chia/data_layer/data_layer_wallet.py +63 -67
- chia/data_layer/data_store.py +72 -72
- chia/data_layer/dl_wallet_store.py +10 -10
- chia/data_layer/download_data.py +5 -5
- chia/data_layer/s3_plugin_service.py +9 -9
- chia/data_layer/util/benchmark.py +0 -1
- chia/data_layer/util/plugin.py +2 -3
- chia/farmer/farmer.py +46 -43
- chia/farmer/farmer_api.py +27 -21
- chia/full_node/block_height_map.py +6 -6
- chia/full_node/block_store.py +41 -35
- chia/full_node/coin_store.py +42 -41
- chia/full_node/fee_estimate.py +2 -2
- chia/full_node/fee_estimation.py +1 -2
- chia/full_node/fee_history.py +5 -6
- chia/full_node/fee_tracker.py +24 -24
- chia/full_node/full_node.py +574 -300
- chia/full_node/full_node_api.py +181 -130
- chia/full_node/full_node_store.py +43 -43
- chia/full_node/hint_management.py +4 -4
- chia/full_node/hint_store.py +9 -10
- chia/full_node/mempool.py +25 -19
- chia/full_node/mempool_check_conditions.py +11 -42
- chia/full_node/mempool_manager.py +48 -53
- chia/full_node/pending_tx_cache.py +9 -9
- chia/full_node/subscriptions.py +23 -24
- chia/full_node/sync_store.py +8 -7
- chia/full_node/tx_processing_queue.py +3 -3
- chia/full_node/util/__init__.py +0 -0
- chia/full_node/weight_proof.py +79 -78
- chia/harvester/harvester.py +9 -8
- chia/harvester/harvester_api.py +19 -13
- chia/introducer/introducer.py +7 -5
- chia/introducer/introducer_api.py +9 -3
- chia/legacy/keyring.py +6 -5
- chia/plot_sync/delta.py +8 -8
- chia/plot_sync/receiver.py +12 -11
- chia/plot_sync/sender.py +15 -12
- chia/plotters/bladebit.py +12 -12
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +8 -8
- chia/plotters/plotters.py +6 -6
- chia/plotters/plotters_util.py +6 -4
- chia/plotting/cache.py +8 -7
- chia/plotting/check_plots.py +8 -8
- chia/plotting/create_plots.py +6 -6
- chia/plotting/manager.py +22 -22
- chia/plotting/util.py +31 -19
- chia/pools/pool_config.py +7 -7
- chia/pools/pool_puzzles.py +16 -16
- chia/pools/pool_wallet.py +64 -57
- chia/pools/pool_wallet_info.py +3 -3
- chia/protocols/full_node_protocol.py +3 -3
- chia/protocols/harvester_protocol.py +12 -12
- chia/protocols/introducer_protocol.py +1 -2
- chia/protocols/protocol_message_types.py +4 -4
- chia/protocols/protocol_state_machine.py +2 -2
- chia/protocols/protocol_timing.py +1 -0
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +2 -2
- chia/protocols/wallet_protocol.py +33 -33
- chia/rpc/crawler_rpc_api.py +12 -7
- chia/rpc/data_layer_rpc_api.py +49 -44
- chia/rpc/data_layer_rpc_client.py +41 -41
- chia/rpc/data_layer_rpc_util.py +7 -11
- chia/rpc/farmer_rpc_api.py +32 -27
- chia/rpc/farmer_rpc_client.py +14 -14
- chia/rpc/full_node_rpc_api.py +53 -48
- chia/rpc/full_node_rpc_client.py +30 -30
- chia/rpc/harvester_rpc_api.py +16 -11
- chia/rpc/harvester_rpc_client.py +6 -6
- chia/rpc/rpc_client.py +34 -14
- chia/rpc/rpc_server.py +117 -43
- chia/rpc/timelord_rpc_api.py +9 -4
- chia/rpc/util.py +11 -211
- chia/rpc/wallet_request_types.py +276 -60
- chia/rpc/wallet_rpc_api.py +563 -399
- chia/rpc/wallet_rpc_client.py +220 -250
- chia/seeder/crawl_store.py +6 -8
- chia/seeder/crawler.py +23 -36
- chia/seeder/crawler_api.py +28 -22
- chia/seeder/dns_server.py +99 -50
- chia/seeder/start_crawler.py +13 -9
- chia/server/address_manager.py +19 -19
- chia/server/address_manager_store.py +17 -17
- chia/server/api_protocol.py +106 -1
- chia/server/capabilities.py +3 -3
- chia/server/chia_policy.py +17 -16
- chia/server/introducer_peers.py +3 -3
- chia/server/node_discovery.py +34 -38
- chia/server/rate_limit_numbers.py +26 -16
- chia/server/rate_limits.py +67 -27
- chia/server/server.py +52 -31
- chia/server/signal_handlers.py +6 -3
- chia/server/ssl_context.py +5 -5
- chia/server/start_data_layer.py +37 -23
- chia/server/start_farmer.py +28 -16
- chia/server/start_full_node.py +29 -23
- chia/server/start_harvester.py +28 -15
- chia/server/start_introducer.py +27 -15
- chia/server/start_service.py +17 -29
- chia/server/start_timelord.py +25 -18
- chia/server/start_wallet.py +22 -18
- chia/server/upnp.py +4 -3
- chia/server/ws_connection.py +68 -54
- chia/simulator/add_blocks_in_batches.py +54 -0
- chia/simulator/block_tools.py +65 -64
- chia/simulator/full_node_simulator.py +66 -74
- chia/simulator/setup_services.py +10 -9
- chia/simulator/simulator_full_node_rpc_api.py +12 -14
- chia/simulator/simulator_full_node_rpc_client.py +3 -5
- chia/simulator/simulator_test_tools.py +8 -7
- chia/simulator/socket.py +1 -4
- chia/simulator/ssl_certs.py +5 -5
- chia/simulator/ssl_certs_1.py +2 -4
- chia/simulator/ssl_certs_10.py +2 -4
- chia/simulator/ssl_certs_2.py +2 -4
- chia/simulator/ssl_certs_3.py +2 -4
- chia/simulator/ssl_certs_4.py +2 -4
- chia/simulator/ssl_certs_5.py +2 -4
- chia/simulator/ssl_certs_6.py +2 -4
- chia/simulator/ssl_certs_7.py +2 -4
- chia/simulator/ssl_certs_8.py +2 -4
- chia/simulator/ssl_certs_9.py +2 -4
- chia/simulator/start_simulator.py +14 -6
- chia/simulator/wallet_tools.py +21 -20
- chia/ssl/create_ssl.py +11 -11
- chia/timelord/iters_from_block.py +2 -2
- chia/timelord/timelord.py +57 -33
- chia/timelord/timelord_api.py +12 -6
- chia/timelord/timelord_launcher.py +10 -8
- chia/timelord/timelord_state.py +5 -5
- chia/types/block_protocol.py +2 -2
- chia/types/blockchain_format/coin.py +3 -3
- chia/types/blockchain_format/program.py +17 -18
- chia/types/blockchain_format/tree_hash.py +9 -9
- chia/types/coin_spend.py +8 -8
- chia/types/condition_with_args.py +1 -2
- chia/types/eligible_coin_spends.py +16 -15
- chia/types/generator_types.py +1 -2
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +7 -7
- chia/types/mempool_submission_status.py +2 -2
- chia/types/peer_info.py +1 -1
- chia/types/spend_bundle.py +1 -2
- chia/types/transaction_queue_entry.py +2 -2
- chia/types/unfinished_header_block.py +2 -2
- chia/types/validation_state.py +14 -0
- chia/types/weight_proof.py +5 -6
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +6 -4
- chia/util/augmented_chain.py +13 -9
- chia/util/batches.py +5 -2
- chia/util/bech32m.py +14 -11
- chia/util/beta_metrics.py +5 -4
- chia/util/block_cache.py +5 -5
- chia/util/byte_types.py +2 -0
- chia/util/check_fork_next_block.py +3 -2
- chia/util/chia_logging.py +41 -21
- chia/util/collection.py +3 -3
- chia/util/condition_tools.py +18 -18
- chia/util/config.py +26 -25
- chia/util/cpu.py +2 -0
- chia/util/db_synchronous.py +2 -0
- chia/util/db_version.py +2 -0
- chia/util/db_wrapper.py +13 -10
- chia/util/default_root.py +17 -0
- chia/util/dump_keyring.py +6 -6
- chia/util/errors.py +5 -3
- chia/util/file_keyring.py +22 -33
- chia/util/files.py +2 -0
- chia/util/full_block_utils.py +31 -7
- chia/util/generator_tools.py +18 -8
- chia/util/hash.py +3 -1
- chia/util/initial-config.yaml +19 -0
- chia/util/inline_executor.py +2 -0
- chia/util/ip_address.py +39 -0
- chia/util/json_util.py +0 -4
- chia/util/keychain.py +27 -24
- chia/util/keyring_wrapper.py +65 -4
- chia/util/limited_semaphore.py +3 -1
- chia/util/lock.py +4 -2
- chia/util/log_exceptions.py +5 -2
- chia/util/logging.py +3 -1
- chia/util/lru_cache.py +2 -0
- chia/util/math.py +4 -4
- chia/util/network.py +15 -73
- chia/util/paginator.py +3 -1
- chia/util/path.py +2 -0
- chia/util/permissions.py +3 -2
- chia/util/prev_transaction_block.py +1 -3
- chia/util/priority_mutex.py +6 -3
- chia/util/profiler.py +7 -4
- chia/util/recursive_replace.py +2 -0
- chia/util/safe_cancel_task.py +2 -0
- chia/util/service_groups.py +2 -2
- chia/util/setproctitle.py +2 -0
- chia/util/significant_bits.py +2 -0
- chia/util/ssl_check.py +11 -11
- chia/util/streamable.py +44 -56
- chia/util/task_referencer.py +59 -0
- chia/util/task_timing.py +22 -18
- chia/util/timing.py +4 -1
- chia/util/vdf_prover.py +2 -3
- chia/util/virtual_project_analysis.py +540 -0
- chia/util/ws_message.py +6 -6
- chia/wallet/cat_wallet/cat_info.py +3 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
- chia/wallet/cat_wallet/cat_utils.py +5 -4
- chia/wallet/cat_wallet/cat_wallet.py +56 -70
- chia/wallet/cat_wallet/dao_cat_info.py +3 -3
- chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
- chia/wallet/cat_wallet/lineage_store.py +2 -2
- chia/wallet/coin_selection.py +15 -15
- chia/wallet/conditions.py +257 -71
- chia/wallet/dao_wallet/dao_info.py +4 -4
- chia/wallet/dao_wallet/dao_utils.py +43 -42
- chia/wallet/dao_wallet/dao_wallet.py +66 -68
- chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
- chia/wallet/derive_keys.py +11 -11
- chia/wallet/did_wallet/did_info.py +3 -3
- chia/wallet/did_wallet/did_wallet.py +56 -47
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/nft_info.py +4 -4
- chia/wallet/nft_wallet/nft_puzzles.py +16 -16
- chia/wallet/nft_wallet/nft_wallet.py +90 -89
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
- chia/wallet/nft_wallet/uncurry_nft.py +2 -2
- chia/wallet/notification_manager.py +5 -5
- chia/wallet/notification_store.py +6 -6
- chia/wallet/outer_puzzles.py +2 -2
- chia/wallet/payment.py +4 -5
- chia/wallet/puzzle_drivers.py +4 -4
- chia/wallet/puzzles/clawback/drivers.py +5 -5
- chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
- chia/wallet/puzzles/load_clvm.py +2 -3
- chia/wallet/puzzles/p2_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
- chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
- chia/wallet/puzzles/puzzle_utils.py +7 -7
- chia/wallet/puzzles/singleton_top_layer.py +6 -5
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
- chia/wallet/puzzles/tails.py +34 -30
- chia/wallet/signer_protocol.py +7 -8
- chia/wallet/singleton.py +4 -4
- chia/wallet/trade_manager.py +155 -141
- chia/wallet/trade_record.py +5 -5
- chia/wallet/trading/offer.py +100 -101
- chia/wallet/trading/trade_store.py +14 -14
- chia/wallet/transaction_record.py +31 -16
- chia/wallet/util/address_type.py +4 -4
- chia/wallet/util/blind_signer_tl.py +8 -12
- chia/wallet/util/clvm_streamable.py +15 -15
- chia/wallet/util/compute_hints.py +5 -5
- chia/wallet/util/compute_memos.py +4 -6
- chia/wallet/util/curry_and_treehash.py +3 -2
- chia/wallet/util/debug_spend_bundle.py +6 -8
- chia/wallet/util/merkle_tree.py +10 -10
- chia/wallet/util/merkle_utils.py +10 -10
- chia/wallet/util/new_peak_queue.py +3 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/{util → wallet/util}/pprint.py +2 -3
- chia/wallet/util/puzzle_compression.py +3 -4
- chia/wallet/util/puzzle_decorator.py +10 -10
- chia/wallet/util/query_filter.py +9 -10
- chia/wallet/util/tx_config.py +12 -12
- chia/wallet/util/wallet_sync_utils.py +24 -21
- chia/wallet/util/wallet_types.py +9 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
- chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
- chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
- chia/wallet/vc_wallet/vc_drivers.py +16 -16
- chia/wallet/vc_wallet/vc_store.py +9 -9
- chia/wallet/vc_wallet/vc_wallet.py +35 -35
- chia/wallet/wallet.py +54 -54
- chia/wallet/wallet_action_scope.py +14 -13
- chia/wallet/wallet_blockchain.py +10 -10
- chia/wallet/wallet_coin_record.py +2 -2
- chia/wallet/wallet_coin_store.py +10 -10
- chia/wallet/wallet_info.py +1 -2
- chia/wallet/wallet_interested_store.py +5 -5
- chia/wallet/wallet_nft_store.py +6 -6
- chia/wallet/wallet_node.py +72 -76
- chia/wallet/wallet_node_api.py +33 -27
- chia/wallet/wallet_pool_store.py +1 -2
- chia/wallet/wallet_protocol.py +15 -15
- chia/wallet/wallet_puzzle_store.py +35 -4
- chia/wallet/wallet_retry_store.py +2 -2
- chia/wallet/wallet_singleton_store.py +10 -9
- chia/wallet/wallet_spend_bundle.py +4 -20
- chia/wallet/wallet_state_manager.py +223 -224
- chia/wallet/wallet_transaction_store.py +44 -18
- chia/wallet/wallet_user_store.py +2 -2
- chia/wallet/wallet_weight_proof_handler.py +2 -2
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/WHEEL +1 -1
- mozilla-ca/cacert.pem +32 -87
- chia/_tests/cmds/wallet/test_coins.py +0 -195
- chia/consensus/block_root_validation.py +0 -46
- chia/util/api_decorators.py +0 -89
- chia_blockchain-2.5.0rc1.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
chia/util/default_root.py
CHANGED
|
@@ -1,10 +1,27 @@
|
|
|
1
|
+
# Package: utils
|
|
2
|
+
|
|
1
3
|
from __future__ import annotations
|
|
2
4
|
|
|
3
5
|
import os
|
|
4
6
|
from pathlib import Path
|
|
7
|
+
from typing import Optional
|
|
5
8
|
|
|
6
9
|
DEFAULT_ROOT_PATH = Path(os.path.expanduser(os.getenv("CHIA_ROOT", "~/.chia/mainnet"))).resolve()
|
|
7
10
|
|
|
8
11
|
DEFAULT_KEYS_ROOT_PATH = Path(os.path.expanduser(os.getenv("CHIA_KEYS_ROOT", "~/.chia_keys"))).resolve()
|
|
9
12
|
|
|
10
13
|
SIMULATOR_ROOT_PATH = Path(os.path.expanduser(os.getenv("CHIA_SIMULATOR_ROOT", "~/.chia/simulator"))).resolve()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def resolve_root_path(*, override: Optional[Path]) -> Path:
|
|
17
|
+
candidates = [
|
|
18
|
+
override,
|
|
19
|
+
os.environ.get("CHIA_ROOT"),
|
|
20
|
+
"~/.chia/mainnet",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
for candidate in candidates:
|
|
24
|
+
if candidate is not None:
|
|
25
|
+
return Path(candidate).expanduser().resolve()
|
|
26
|
+
|
|
27
|
+
raise RuntimeError("unreachable: last candidate is hardcoded to be found")
|
chia/util/dump_keyring.py
CHANGED
|
@@ -5,17 +5,17 @@ from __future__ import annotations
|
|
|
5
5
|
import os
|
|
6
6
|
from io import TextIOWrapper
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import Any,
|
|
8
|
+
from typing import Any, Optional, cast
|
|
9
9
|
|
|
10
10
|
import click
|
|
11
11
|
import colorama
|
|
12
12
|
import yaml
|
|
13
13
|
from cryptography.exceptions import InvalidTag
|
|
14
14
|
|
|
15
|
-
from chia.cmds.passphrase_funcs import
|
|
15
|
+
from chia.cmds.passphrase_funcs import read_passphrase_from_file
|
|
16
16
|
from chia.util.default_root import DEFAULT_KEYS_ROOT_PATH
|
|
17
17
|
from chia.util.file_keyring import FileKeyringContent
|
|
18
|
-
from chia.util.keyring_wrapper import DEFAULT_PASSPHRASE_IF_NO_MASTER_PASSPHRASE, KeyringWrapper
|
|
18
|
+
from chia.util.keyring_wrapper import DEFAULT_PASSPHRASE_IF_NO_MASTER_PASSPHRASE, KeyringWrapper, prompt_for_passphrase
|
|
19
19
|
|
|
20
20
|
DEFAULT_KEYRING_YAML = DEFAULT_KEYS_ROOT_PATH / "keyring.yaml"
|
|
21
21
|
|
|
@@ -36,7 +36,7 @@ def get_passphrase_prompt(keyring_file: str) -> str:
|
|
|
36
36
|
+ ")"
|
|
37
37
|
+ colorama.Style.RESET_ALL
|
|
38
38
|
+ " Passphrase: "
|
|
39
|
-
),
|
|
39
|
+
),
|
|
40
40
|
)
|
|
41
41
|
return prompt
|
|
42
42
|
|
|
@@ -66,7 +66,7 @@ def dump(keyring_file: str, full_payload: bool, passphrase_file: Optional[TextIO
|
|
|
66
66
|
try:
|
|
67
67
|
data_dict = file_content.get_decrypted_data_dict(passphrase)
|
|
68
68
|
if full_payload:
|
|
69
|
-
dump_content:
|
|
69
|
+
dump_content: dict[str, Any] = file_content_dict
|
|
70
70
|
dump_content["data"] = data_dict
|
|
71
71
|
else:
|
|
72
72
|
dump_content = data_dict
|
|
@@ -86,7 +86,7 @@ def dump(keyring_file: str, full_payload: bool, passphrase_file: Optional[TextIO
|
|
|
86
86
|
|
|
87
87
|
def main() -> None:
|
|
88
88
|
colorama.init()
|
|
89
|
-
dump()
|
|
89
|
+
dump()
|
|
90
90
|
|
|
91
91
|
|
|
92
92
|
if __name__ == "__main__":
|
chia/util/errors.py
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
# Package: utils
|
|
2
|
+
|
|
1
3
|
from __future__ import annotations
|
|
2
4
|
|
|
3
5
|
from enum import Enum
|
|
4
6
|
from pathlib import Path
|
|
5
|
-
from typing import Any,
|
|
7
|
+
from typing import Any, Optional
|
|
6
8
|
|
|
7
9
|
from click import ClickException
|
|
8
10
|
|
|
@@ -208,14 +210,14 @@ class TimestampError(Exception):
|
|
|
208
210
|
|
|
209
211
|
|
|
210
212
|
class ConsensusError(Exception):
|
|
211
|
-
def __init__(self, code: Err, errors:
|
|
213
|
+
def __init__(self, code: Err, errors: list[Any] = []):
|
|
212
214
|
super().__init__(f"Error code: {code.name} {errors}")
|
|
213
215
|
self.code = code
|
|
214
216
|
self.errors = errors
|
|
215
217
|
|
|
216
218
|
|
|
217
219
|
class ProtocolError(Exception):
|
|
218
|
-
def __init__(self, code: Err, errors:
|
|
220
|
+
def __init__(self, code: Err, errors: list[Any] = []):
|
|
219
221
|
super().__init__(f"Error code: {code.name} {errors}")
|
|
220
222
|
self.code = code
|
|
221
223
|
self.errors = errors
|
chia/util/file_keyring.py
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
+
# Package: utils
|
|
2
|
+
|
|
1
3
|
from __future__ import annotations
|
|
2
4
|
|
|
3
5
|
import base64
|
|
4
6
|
import contextlib
|
|
5
7
|
import os
|
|
6
8
|
import shutil
|
|
7
|
-
import sys
|
|
8
9
|
import threading
|
|
10
|
+
from collections.abc import Iterator
|
|
9
11
|
from dataclasses import asdict, dataclass, field
|
|
10
12
|
from hashlib import pbkdf2_hmac
|
|
11
13
|
from pathlib import Path
|
|
12
14
|
from secrets import token_bytes
|
|
13
|
-
from typing import Any,
|
|
15
|
+
from typing import Any, Optional, Union, cast
|
|
14
16
|
|
|
15
17
|
import yaml
|
|
16
18
|
from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305 # pyright: reportMissingModuleSource=false
|
|
@@ -52,18 +54,6 @@ def symmetric_key_from_passphrase(passphrase: str, salt: bytes) -> bytes:
|
|
|
52
54
|
return pbkdf2_hmac("sha256", passphrase.encode(), salt, HASH_ITERS)
|
|
53
55
|
|
|
54
56
|
|
|
55
|
-
def get_symmetric_key(salt: bytes) -> bytes:
|
|
56
|
-
from chia.cmds.passphrase_funcs import obtain_current_passphrase
|
|
57
|
-
|
|
58
|
-
try:
|
|
59
|
-
passphrase = obtain_current_passphrase(use_passphrase_cache=True)
|
|
60
|
-
except Exception as e:
|
|
61
|
-
print(f"Unable to unlock the keyring: {e}")
|
|
62
|
-
sys.exit(1)
|
|
63
|
-
|
|
64
|
-
return symmetric_key_from_passphrase(passphrase, salt)
|
|
65
|
-
|
|
66
|
-
|
|
67
57
|
def encrypt_data(input_data: bytes, key: bytes, nonce: bytes) -> bytes:
|
|
68
58
|
encryptor = ChaCha20Poly1305(key)
|
|
69
59
|
data = encryptor.encrypt(nonce, CHECKBYTES_VALUE + input_data, None)
|
|
@@ -144,7 +134,7 @@ class FileKeyringContent:
|
|
|
144
134
|
except PermissionError:
|
|
145
135
|
shutil.move(str(temp_path), str(path))
|
|
146
136
|
|
|
147
|
-
def get_decrypted_data_dict(self, passphrase: str) ->
|
|
137
|
+
def get_decrypted_data_dict(self, passphrase: str) -> dict[str, Any]:
|
|
148
138
|
if self.empty():
|
|
149
139
|
return {}
|
|
150
140
|
key = symmetric_key_from_passphrase(passphrase, self.salt)
|
|
@@ -165,7 +155,7 @@ class FileKeyringContent:
|
|
|
165
155
|
def empty(self) -> bool:
|
|
166
156
|
return self.data is None or len(self.data) == 0
|
|
167
157
|
|
|
168
|
-
def to_dict(self) ->
|
|
158
|
+
def to_dict(self) -> dict[str, Any]:
|
|
169
159
|
result = asdict(self)
|
|
170
160
|
result["salt"] = result["salt"].hex()
|
|
171
161
|
result["nonce"] = result["nonce"].hex()
|
|
@@ -175,30 +165,30 @@ class FileKeyringContent:
|
|
|
175
165
|
@dataclass(frozen=True)
|
|
176
166
|
class Key:
|
|
177
167
|
secret: bytes
|
|
178
|
-
metadata: Optional[
|
|
168
|
+
metadata: Optional[dict[str, Any]] = None
|
|
179
169
|
|
|
180
170
|
@classmethod
|
|
181
|
-
def parse(cls, data: str, metadata: Optional[
|
|
171
|
+
def parse(cls, data: str, metadata: Optional[dict[str, Any]]) -> Key:
|
|
182
172
|
return cls(
|
|
183
173
|
bytes.fromhex(data),
|
|
184
174
|
metadata,
|
|
185
175
|
)
|
|
186
176
|
|
|
187
|
-
def to_data(self) -> Union[str,
|
|
177
|
+
def to_data(self) -> Union[str, dict[str, Any]]:
|
|
188
178
|
return self.secret.hex()
|
|
189
179
|
|
|
190
180
|
|
|
191
|
-
Users =
|
|
192
|
-
Services =
|
|
181
|
+
Users = dict[str, Key]
|
|
182
|
+
Services = dict[str, Users]
|
|
193
183
|
|
|
194
184
|
|
|
195
185
|
@dataclass
|
|
196
186
|
class DecryptedKeyringData:
|
|
197
187
|
services: Services
|
|
198
|
-
labels:
|
|
188
|
+
labels: dict[int, str] # {fingerprint: label}
|
|
199
189
|
|
|
200
190
|
@classmethod
|
|
201
|
-
def from_dict(cls, data_dict:
|
|
191
|
+
def from_dict(cls, data_dict: dict[str, Any]) -> DecryptedKeyringData:
|
|
202
192
|
return cls(
|
|
203
193
|
{
|
|
204
194
|
service: {
|
|
@@ -210,7 +200,7 @@ class DecryptedKeyringData:
|
|
|
210
200
|
data_dict.get("labels", {}),
|
|
211
201
|
)
|
|
212
202
|
|
|
213
|
-
def to_dict(self) ->
|
|
203
|
+
def to_dict(self) -> dict[str, Any]:
|
|
214
204
|
return {
|
|
215
205
|
"keys": {
|
|
216
206
|
service: {user: key.to_data() for user, key in users.items()}
|
|
@@ -243,7 +233,7 @@ class FileKeyring(FileSystemEventHandler):
|
|
|
243
233
|
cached_data_dict: DecryptedKeyringData = field(default_factory=default_file_keyring_data)
|
|
244
234
|
keyring_last_mod_time: Optional[float] = None
|
|
245
235
|
# Key/value pairs to set on the outer payload on the next write
|
|
246
|
-
file_content_properties_for_next_write:
|
|
236
|
+
file_content_properties_for_next_write: dict[str, Any] = field(default_factory=dict)
|
|
247
237
|
|
|
248
238
|
@classmethod
|
|
249
239
|
def create(cls, keys_root_path: Path = DEFAULT_KEYS_ROOT_PATH) -> FileKeyring:
|
|
@@ -282,16 +272,16 @@ class FileKeyring(FileSystemEventHandler):
|
|
|
282
272
|
def setup_keyring_file_watcher(self) -> None:
|
|
283
273
|
# recursive=True necessary for macOS support
|
|
284
274
|
if not self.keyring_observer.is_alive():
|
|
285
|
-
self.keyring_observer.schedule(
|
|
275
|
+
self.keyring_observer.schedule(
|
|
286
276
|
self,
|
|
287
|
-
self.keyring_path.parent,
|
|
277
|
+
str(self.keyring_path.parent),
|
|
288
278
|
recursive=True,
|
|
289
279
|
)
|
|
290
|
-
self.keyring_observer.start()
|
|
280
|
+
self.keyring_observer.start()
|
|
291
281
|
|
|
292
282
|
def cleanup_keyring_file_watcher(self) -> None:
|
|
293
283
|
if self.keyring_observer.is_alive():
|
|
294
|
-
self.keyring_observer.stop()
|
|
284
|
+
self.keyring_observer.stop()
|
|
295
285
|
self.keyring_observer.join()
|
|
296
286
|
|
|
297
287
|
def on_modified(self, event: Union[FileSystemEvent, DirModifiedEvent]) -> None:
|
|
@@ -320,7 +310,7 @@ class FileKeyring(FileSystemEventHandler):
|
|
|
320
310
|
"""
|
|
321
311
|
return self.cached_data_dict.services
|
|
322
312
|
|
|
323
|
-
def cached_labels(self) ->
|
|
313
|
+
def cached_labels(self) -> dict[int, str]:
|
|
324
314
|
"""
|
|
325
315
|
Returns keyring.data.labels
|
|
326
316
|
"""
|
|
@@ -416,7 +406,7 @@ class FileKeyring(FileSystemEventHandler):
|
|
|
416
406
|
return False
|
|
417
407
|
|
|
418
408
|
def load_keyring(self, passphrase: Optional[str] = None) -> None:
|
|
419
|
-
from chia.
|
|
409
|
+
from chia.util.keyring_wrapper import obtain_current_passphrase
|
|
420
410
|
|
|
421
411
|
with self.load_keyring_lock:
|
|
422
412
|
self.needs_load_keyring = False
|
|
@@ -435,8 +425,7 @@ class FileKeyring(FileSystemEventHandler):
|
|
|
435
425
|
)
|
|
436
426
|
|
|
437
427
|
def write_keyring(self, fresh_salt: bool = False) -> None:
|
|
438
|
-
from chia.
|
|
439
|
-
from chia.util.keyring_wrapper import KeyringWrapper
|
|
428
|
+
from chia.util.keyring_wrapper import KeyringWrapper, obtain_current_passphrase
|
|
440
429
|
|
|
441
430
|
# Merge in other properties like "passphrase_hint"
|
|
442
431
|
if "passphrase_hint" in self.file_content_properties_for_next_write:
|
chia/util/files.py
CHANGED
chia/util/full_block_utils.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Callable,
|
|
4
|
+
from typing import Callable, Optional
|
|
5
5
|
|
|
6
6
|
from chia_rs import G1Element, G2Element, serialized_length
|
|
7
7
|
from chiabip158 import PyBIP158
|
|
@@ -56,7 +56,7 @@ def skip_uint8(buf: memoryview) -> memoryview:
|
|
|
56
56
|
|
|
57
57
|
|
|
58
58
|
def skip_bool(buf: memoryview) -> memoryview:
|
|
59
|
-
assert buf[0] in
|
|
59
|
+
assert buf[0] in {0, 1}
|
|
60
60
|
return buf[1:]
|
|
61
61
|
|
|
62
62
|
|
|
@@ -167,7 +167,7 @@ def skip_foliage(buf: memoryview) -> memoryview:
|
|
|
167
167
|
return skip_optional(buf, skip_g2_element) # foliage_transaction_block_signature
|
|
168
168
|
|
|
169
169
|
|
|
170
|
-
def prev_hash_from_foliage(buf: memoryview) ->
|
|
170
|
+
def prev_hash_from_foliage(buf: memoryview) -> tuple[memoryview, bytes32]:
|
|
171
171
|
prev_hash = buf[:32] # prev_block_hash
|
|
172
172
|
buf = skip_bytes32(buf) # prev_block_hash
|
|
173
173
|
buf = skip_bytes32(buf) # reward_block_hash
|
|
@@ -230,7 +230,7 @@ def generator_from_block(buf: memoryview) -> Optional[bytes]:
|
|
|
230
230
|
class GeneratorBlockInfo:
|
|
231
231
|
prev_header_hash: bytes32
|
|
232
232
|
transactions_generator: Optional[SerializedProgram]
|
|
233
|
-
transactions_generator_ref_list:
|
|
233
|
+
transactions_generator_ref_list: list[uint32]
|
|
234
234
|
|
|
235
235
|
|
|
236
236
|
def block_info_from_block(buf: memoryview) -> GeneratorBlockInfo:
|
|
@@ -267,7 +267,7 @@ def block_info_from_block(buf: memoryview) -> GeneratorBlockInfo:
|
|
|
267
267
|
|
|
268
268
|
|
|
269
269
|
def header_block_from_block(
|
|
270
|
-
buf: memoryview, request_filter: bool = True, tx_addition_coins:
|
|
270
|
+
buf: memoryview, request_filter: bool = True, tx_addition_coins: list[Coin] = [], removal_names: list[bytes32] = []
|
|
271
271
|
) -> bytes:
|
|
272
272
|
buf2 = buf[:]
|
|
273
273
|
buf2 = skip_list(buf2, skip_end_of_sub_slot_bundle) # finished_sub_slots
|
|
@@ -297,8 +297,8 @@ def header_block_from_block(
|
|
|
297
297
|
transactions_info_optional = bytes([0])
|
|
298
298
|
else:
|
|
299
299
|
transactions_info_optional = bytes([1])
|
|
300
|
-
transactions_info,
|
|
301
|
-
byte_array_tx:
|
|
300
|
+
transactions_info, _advance = TransactionsInfo.parse_rust(buf2[1:])
|
|
301
|
+
byte_array_tx: list[bytearray] = []
|
|
302
302
|
if is_transaction_block and transactions_info:
|
|
303
303
|
addition_coins = tx_addition_coins + list(transactions_info.reward_claims_incorporated)
|
|
304
304
|
for coin in addition_coins:
|
|
@@ -319,3 +319,27 @@ def header_block_from_block(
|
|
|
319
319
|
header_block += bytes(transactions_info)
|
|
320
320
|
|
|
321
321
|
return header_block
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
def get_height_and_tx_status_from_block(buf: memoryview) -> tuple[uint32, bool]:
|
|
325
|
+
"""
|
|
326
|
+
Returns the height of the block and whether it's a transaction block or not.
|
|
327
|
+
We're considering the block as a transaction block if transactions_info is not None.
|
|
328
|
+
"""
|
|
329
|
+
reward_chain_block_buf = skip_list(buf, skip_end_of_sub_slot_bundle) # finished_sub_slots
|
|
330
|
+
# Get the block height from reward_chain_block_buf
|
|
331
|
+
height_buf = skip_uint128(reward_chain_block_buf) # weight
|
|
332
|
+
height = uint32.from_bytes(height_buf[:4])
|
|
333
|
+
# Let's continue down to transactions_info
|
|
334
|
+
buf = skip_reward_chain_block(reward_chain_block_buf) # reward_chain_block
|
|
335
|
+
buf = skip_optional(buf, skip_vdf_proof) # challenge_chain_sp_proof
|
|
336
|
+
buf = skip_vdf_proof(buf) # challenge_chain_ip_proof
|
|
337
|
+
buf = skip_optional(buf, skip_vdf_proof) # reward_chain_sp_proof
|
|
338
|
+
buf = skip_vdf_proof(buf) # reward_chain_ip_proof
|
|
339
|
+
buf = skip_optional(buf, skip_vdf_proof) # infused_challenge_chain_ip_proof
|
|
340
|
+
buf = skip_foliage(buf) # foliage
|
|
341
|
+
buf = skip_optional(buf, skip_foliage_transaction_block) # foliage_transaction_block
|
|
342
|
+
# We're at the transactions_info optional.
|
|
343
|
+
# If it's not None, consider this a transaction block.
|
|
344
|
+
is_tx_block = buf[0] != 0
|
|
345
|
+
return height, is_tx_block
|
chia/util/generator_tools.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Collection
|
|
4
|
+
from typing import Optional
|
|
4
5
|
|
|
5
6
|
from chiabip158 import PyBIP158
|
|
6
7
|
|
|
@@ -13,11 +14,20 @@ from chia.util.ints import uint64
|
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
def get_block_header(
|
|
16
|
-
block: FullBlock,
|
|
17
|
+
block: FullBlock, removals_and_additions: Optional[tuple[Collection[bytes32], Collection[Coin]]] = None
|
|
17
18
|
) -> HeaderBlock:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
"""
|
|
20
|
+
Returns a HeaderBlock from a FullBlock.
|
|
21
|
+
If `removals_and_additions` is not None, account for them, as well as
|
|
22
|
+
reward coins, in the creation of the transactions filter, otherwise create
|
|
23
|
+
an empty one.
|
|
24
|
+
"""
|
|
25
|
+
# Guard against passing removals and additions for a non-transaction block.
|
|
26
|
+
assert removals_and_additions is None or block.is_transaction_block()
|
|
27
|
+
# Create an empty filter to begin with
|
|
28
|
+
byte_array_tx: list[bytearray] = []
|
|
29
|
+
if removals_and_additions is not None and block.is_transaction_block():
|
|
30
|
+
removals_names, tx_addition_coins = removals_and_additions
|
|
21
31
|
for coin in tx_addition_coins:
|
|
22
32
|
byte_array_tx.append(bytearray(coin.puzzle_hash))
|
|
23
33
|
for coin in block.get_included_reward_coins():
|
|
@@ -43,13 +53,13 @@ def get_block_header(
|
|
|
43
53
|
)
|
|
44
54
|
|
|
45
55
|
|
|
46
|
-
def tx_removals_and_additions(results: Optional[SpendBundleConditions]) ->
|
|
56
|
+
def tx_removals_and_additions(results: Optional[SpendBundleConditions]) -> tuple[list[bytes32], list[Coin]]:
|
|
47
57
|
"""
|
|
48
58
|
Doesn't return farmer and pool reward.
|
|
49
59
|
"""
|
|
50
60
|
|
|
51
|
-
removals:
|
|
52
|
-
additions:
|
|
61
|
+
removals: list[bytes32] = []
|
|
62
|
+
additions: list[Coin] = []
|
|
53
63
|
|
|
54
64
|
# build removals list
|
|
55
65
|
if results is None:
|
chia/util/hash.py
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
# Package: utils
|
|
2
|
+
|
|
1
3
|
from __future__ import annotations
|
|
2
4
|
|
|
3
5
|
from hashlib import sha256
|
|
4
6
|
from typing import Literal, SupportsBytes, Union, cast, overload
|
|
5
7
|
|
|
6
|
-
from
|
|
8
|
+
from chia_rs.sized_bytes import bytes32
|
|
7
9
|
|
|
8
10
|
|
|
9
11
|
@overload
|
chia/util/initial-config.yaml
CHANGED
|
@@ -86,6 +86,7 @@ daemon_ssl:
|
|
|
86
86
|
# Controls logging of all servers (harvester, farmer, etc..). Each one can be overridden.
|
|
87
87
|
logging: &logging
|
|
88
88
|
log_stdout: False # If True, outputs to stdout instead of a file
|
|
89
|
+
log_backcompat: False
|
|
89
90
|
log_filename: "log/debug.log"
|
|
90
91
|
log_level: "WARNING" # Can be CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET
|
|
91
92
|
log_maxfilesrotation: 7 # Max files in rotation. Default value 7 if the key is not set
|
|
@@ -109,6 +110,9 @@ seeder:
|
|
|
109
110
|
# Peers used for the initial run.
|
|
110
111
|
bootstrap_peers:
|
|
111
112
|
- "node.chia.net"
|
|
113
|
+
# Peers to respond with regardless of what the crawler finds
|
|
114
|
+
# Can be IPs or Hostnames. Hostnames will be resolved to IPs
|
|
115
|
+
static_peers: []
|
|
112
116
|
# Only consider nodes synced at least to this height.
|
|
113
117
|
minimum_height: 240000
|
|
114
118
|
# How many of a particular version we need to see before reporting it in the logs
|
|
@@ -160,6 +164,7 @@ harvester:
|
|
|
160
164
|
# Plots are searched for in the following directories
|
|
161
165
|
plot_directories: []
|
|
162
166
|
recursive_plot_scan: False # If True the harvester scans plots recursively in the provided directories.
|
|
167
|
+
recursive_follow_links: False # If True the harvester follows symlinks when scanning for plots recursively
|
|
163
168
|
|
|
164
169
|
ssl:
|
|
165
170
|
private_crt: "config/ssl/harvester/private_harvester.crt"
|
|
@@ -356,6 +361,10 @@ full_node:
|
|
|
356
361
|
# profiled.
|
|
357
362
|
single_threaded: False
|
|
358
363
|
|
|
364
|
+
# when enabled, logs coins additions, removals and reorgs at INFO level.
|
|
365
|
+
# Requires the log level to be INFO or DEBUG as well.
|
|
366
|
+
log_coins: False
|
|
367
|
+
|
|
359
368
|
# How often to initiate outbound connections to other full nodes.
|
|
360
369
|
peer_connect_interval: 30
|
|
361
370
|
# How long to wait for a peer connection
|
|
@@ -401,6 +410,10 @@ full_node:
|
|
|
401
410
|
|
|
402
411
|
enable_memory_profiler: False
|
|
403
412
|
|
|
413
|
+
# this is a debug/auditing facility that saves all spend bundles added to the
|
|
414
|
+
# mempool, organized by peak height at the time
|
|
415
|
+
log_mempool: false
|
|
416
|
+
|
|
404
417
|
# this is a debug and profiling facility that logs all SQLite commands to a
|
|
405
418
|
# separate log file (under logging/sql.log).
|
|
406
419
|
log_sqlite_cmds: False
|
|
@@ -427,6 +440,7 @@ full_node:
|
|
|
427
440
|
- "seeder.dexie.space"
|
|
428
441
|
- "chia.hoffmang.com"
|
|
429
442
|
- "seeder.xchpool.org"
|
|
443
|
+
- "seeder.xchseeder.com"
|
|
430
444
|
introducer_peer:
|
|
431
445
|
host: introducer.chia.net # Chia AWS introducer IPv4/IPv6
|
|
432
446
|
port: 8444
|
|
@@ -480,6 +494,8 @@ introducer:
|
|
|
480
494
|
public_key: "config/ssl/full_node/public_full_node.key"
|
|
481
495
|
|
|
482
496
|
wallet:
|
|
497
|
+
# If True, starts an RPC server at the following port
|
|
498
|
+
start_rpc_server: True
|
|
483
499
|
rpc_port: 9256
|
|
484
500
|
|
|
485
501
|
# when enabled, the wallet will print a pstats profile to the
|
|
@@ -564,6 +580,9 @@ wallet:
|
|
|
564
580
|
# the user accepts the risk/responsibility of verifying the authenticity and origin of unknown CATs
|
|
565
581
|
automatically_add_unknown_cats: False
|
|
566
582
|
|
|
583
|
+
# if an unknown DID is sent to us, a wallet will be automatically created
|
|
584
|
+
did_auto_add_limit: 10
|
|
585
|
+
|
|
567
586
|
# Interval to resend unconfirmed transactions, even if previously accepted into Mempool
|
|
568
587
|
tx_resend_timeout_secs: 1800
|
|
569
588
|
|
chia/util/inline_executor.py
CHANGED
chia/util/ip_address.py
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from ipaddress import IPv4Address, IPv6Address, ip_address
|
|
5
|
+
from typing import Union
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass(frozen=True)
|
|
9
|
+
class IPAddress:
|
|
10
|
+
_inner: Union[IPv4Address, IPv6Address]
|
|
11
|
+
|
|
12
|
+
@classmethod
|
|
13
|
+
def create(cls, ip: str) -> IPAddress:
|
|
14
|
+
return cls(ip_address(ip))
|
|
15
|
+
|
|
16
|
+
def __int__(self) -> int:
|
|
17
|
+
return int(self._inner)
|
|
18
|
+
|
|
19
|
+
def __str__(self) -> str:
|
|
20
|
+
return str(self._inner)
|
|
21
|
+
|
|
22
|
+
def __repr__(self) -> str:
|
|
23
|
+
return repr(self._inner)
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def packed(self) -> bytes:
|
|
27
|
+
return self._inner.packed
|
|
28
|
+
|
|
29
|
+
@property
|
|
30
|
+
def is_private(self) -> bool:
|
|
31
|
+
return self._inner.is_private
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def is_v4(self) -> bool:
|
|
35
|
+
return self._inner.version == 4
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def is_v6(self) -> bool:
|
|
39
|
+
return self._inner.version == 6
|
chia/util/json_util.py
CHANGED
|
@@ -5,8 +5,6 @@ from typing import Any
|
|
|
5
5
|
|
|
6
6
|
from aiohttp import web
|
|
7
7
|
|
|
8
|
-
from chia.wallet.util.wallet_types import WalletType
|
|
9
|
-
|
|
10
8
|
|
|
11
9
|
class EnhancedJSONEncoder(json.JSONEncoder):
|
|
12
10
|
"""
|
|
@@ -16,8 +14,6 @@ class EnhancedJSONEncoder(json.JSONEncoder):
|
|
|
16
14
|
def default(self, o: Any) -> Any:
|
|
17
15
|
if hasattr(type(o), "to_json_dict"):
|
|
18
16
|
return o.to_json_dict()
|
|
19
|
-
elif isinstance(o, WalletType):
|
|
20
|
-
return o.name
|
|
21
17
|
elif hasattr(type(o), "__bytes__"):
|
|
22
18
|
return f"0x{bytes(o).hex()}"
|
|
23
19
|
elif isinstance(o, bytes):
|