chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__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.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
chia/cmds/keys_funcs.py CHANGED
@@ -5,11 +5,10 @@ import os
5
5
  import sys
6
6
  from enum import Enum
7
7
  from pathlib import Path
8
- from typing import Any, Dict, List, Optional, Tuple, Union
8
+ from typing import Any, Optional, Union
9
9
 
10
10
  from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
11
11
 
12
- from chia.cmds.passphrase_funcs import obtain_current_passphrase
13
12
  from chia.consensus.coinbase import create_puzzlehash_for_pk
14
13
  from chia.types.signing_mode import SigningMode
15
14
  from chia.util.bech32m import bech32_encode, convertbits, encode_puzzle_hash
@@ -25,7 +24,7 @@ from chia.util.keychain import (
25
24
  generate_mnemonic,
26
25
  mnemonic_to_seed,
27
26
  )
28
- from chia.util.keyring_wrapper import KeyringWrapper
27
+ from chia.util.keyring_wrapper import KeyringWrapper, obtain_current_passphrase
29
28
  from chia.wallet.derive_keys import (
30
29
  master_pk_to_wallet_pk_unhardened,
31
30
  master_sk_to_farmer_sk,
@@ -174,8 +173,8 @@ def show_keys(
174
173
  msg = "Showing all public and private keys"
175
174
  print(msg)
176
175
 
177
- def process_key_data(key_data: KeyData) -> Dict[str, Any]:
178
- key: Dict[str, Any] = {}
176
+ def process_key_data(key_data: KeyData) -> dict[str, Any]:
177
+ key: dict[str, Any] = {}
179
178
  sk = key_data.private_key if key_data.secrets is not None else None
180
179
  if key_data.label is not None:
181
180
  key["label"] = key_data.label
@@ -252,7 +251,7 @@ def delete(fingerprint: int) -> None:
252
251
 
253
252
  def derive_pk_and_sk_from_hd_path(
254
253
  master_pk: G1Element, hd_path_root: str, master_sk: Optional[PrivateKey] = None
255
- ) -> Tuple[G1Element, Optional[PrivateKey], str]:
254
+ ) -> tuple[G1Element, Optional[PrivateKey], str]:
256
255
  """
257
256
  Derive a private key from the provided HD path. Takes a master key and HD path as input,
258
257
  and returns the derived key and the HD path that was used to derive it.
@@ -264,7 +263,7 @@ def derive_pk_and_sk_from_hd_path(
264
263
  NONOBSERVER = 0
265
264
  OBSERVER = 1
266
265
 
267
- path: List[str] = hd_path_root.split("/")
266
+ path: list[str] = hd_path_root.split("/")
268
267
  if len(path) == 0 or path[0] != "m":
269
268
  raise ValueError("Invalid HD path. Must start with 'm'")
270
269
 
@@ -273,7 +272,7 @@ def derive_pk_and_sk_from_hd_path(
273
272
  if len(path) > 0 and path[-1] == "": # remove trailing slash
274
273
  path = path[:-1]
275
274
 
276
- index_and_derivation_types: List[Tuple[int, DerivationType]] = []
275
+ index_and_derivation_types: list[tuple[int, DerivationType]] = []
277
276
 
278
277
  # Validate path
279
278
  for current_index_str in path:
@@ -361,9 +360,9 @@ def _clear_line_part(n: int) -> None:
361
360
  def _search_derived(
362
361
  current_pk: G1Element,
363
362
  current_sk: Optional[PrivateKey],
364
- search_terms: Tuple[str, ...],
363
+ search_terms: tuple[str, ...],
365
364
  path: str,
366
- path_indices: Optional[List[int]],
365
+ path_indices: Optional[list[int]],
367
366
  limit: int,
368
367
  non_observer_derivation: bool,
369
368
  show_progress: bool,
@@ -371,7 +370,7 @@ def _search_derived(
371
370
  search_private_key: bool,
372
371
  search_address: bool,
373
372
  prefix: str,
374
- ) -> List[str]: # Return a subset of search_terms that were found
373
+ ) -> list[str]: # Return a subset of search_terms that were found
375
374
  """
376
375
  Performs a shallow search of keys derived from the current pk/sk for items matching
377
376
  the provided search terms.
@@ -384,15 +383,15 @@ def _search_derived(
384
383
  PRIVATE_KEY = "private key"
385
384
  WALLET_ADDRESS = "wallet address"
386
385
 
387
- remaining_search_terms: Dict[str, None] = dict.fromkeys(search_terms)
386
+ remaining_search_terms: dict[str, None] = dict.fromkeys(search_terms)
388
387
  current_path: str = path
389
- current_path_indices: List[int] = path_indices if path_indices is not None else []
390
- found_search_terms: List[str] = []
388
+ current_path_indices: list[int] = path_indices if path_indices is not None else []
389
+ found_search_terms: list[str] = []
391
390
 
392
391
  assert not (non_observer_derivation and current_sk is None)
393
392
 
394
393
  for index in range(limit):
395
- found_items: List[Tuple[str, str, DerivedSearchResultType]] = []
394
+ found_items: list[tuple[str, str, DerivedSearchResultType]] = []
396
395
  printed_match: bool = False
397
396
  current_index_str = str(index) + ("n" if non_observer_derivation else "")
398
397
  current_path += f"{current_index_str}"
@@ -480,11 +479,11 @@ def _search_derived(
480
479
  def search_derive(
481
480
  root_path: Path,
482
481
  fingerprint: Optional[int],
483
- search_terms: Tuple[str, ...],
482
+ search_terms: tuple[str, ...],
484
483
  limit: int,
485
484
  non_observer_derivation: bool,
486
485
  show_progress: bool,
487
- search_types: Tuple[str, ...],
486
+ search_types: tuple[str, ...],
488
487
  derive_from_hd_path: Optional[str],
489
488
  prefix: Optional[str],
490
489
  private_key: Optional[PrivateKey],
@@ -497,13 +496,13 @@ def search_derive(
497
496
  from time import perf_counter
498
497
 
499
498
  start_time = perf_counter()
500
- remaining_search_terms: Dict[str, None] = dict.fromkeys(search_terms) # poor man's ordered set
499
+ remaining_search_terms: dict[str, None] = dict.fromkeys(search_terms) # poor man's ordered set
501
500
  search_address = "address" in search_types
502
501
  search_public_key = "public_key" in search_types
503
502
  search_private_key = "private_key" in search_types
504
503
 
505
504
  if prefix is None:
506
- config: Dict[str, Any] = load_config(root_path, "config.yaml")
505
+ config: dict[str, Any] = load_config(root_path, "config.yaml")
507
506
  selected: str = config["selected_network"]
508
507
  prefix = config["network_overrides"]["config"][selected]["address_prefix"]
509
508
 
@@ -513,8 +512,8 @@ def search_derive(
513
512
  search_private_key = True
514
513
 
515
514
  if fingerprint is None and private_key is None:
516
- public_keys: List[G1Element] = Keychain().get_all_public_keys()
517
- private_keys: List[Optional[PrivateKey]] = [
515
+ public_keys: list[G1Element] = Keychain().get_all_public_keys()
516
+ private_keys: list[Optional[PrivateKey]] = [
518
517
  data.private_key if data.secrets is not None else None for data in Keychain().get_keys(include_secrets=True)
519
518
  ]
520
519
  elif fingerprint is None:
@@ -530,7 +529,7 @@ def search_derive(
530
529
  if sk is None and non_observer_derivation:
531
530
  continue
532
531
  current_path: str = ""
533
- found_terms: List[str] = []
532
+ found_terms: list[str] = []
534
533
 
535
534
  if show_progress:
536
535
  print(f"Searching keys derived from: {pk.get_fingerprint()}")
@@ -571,7 +570,7 @@ def search_derive(
571
570
  current_path = hd_path_root
572
571
  # Otherwise derive from well-known derivation paths
573
572
  else:
574
- current_path_indices: List[int] = [12381, 8444]
573
+ current_path_indices: list[int] = [12381, 8444]
575
574
  path_root: str = "m/"
576
575
  for i in [12381, 8444]:
577
576
  path_root += f"{i}{'n' if non_observer_derivation else ''}/"
@@ -668,10 +667,10 @@ def derive_wallet_address(
668
667
  pk = sk.get_g1()
669
668
 
670
669
  if prefix is None:
671
- config: Dict[str, Any] = load_config(root_path, "config.yaml")
670
+ config: dict[str, Any] = load_config(root_path, "config.yaml")
672
671
  selected: str = config["selected_network"]
673
672
  prefix = config["network_overrides"]["config"][selected]["address_prefix"]
674
- path_indices: List[int] = [12381, 8444, 2]
673
+ path_indices: list[int] = [12381, 8444, 2]
675
674
  wallet_hd_path_root: str = "m/"
676
675
  for i in path_indices:
677
676
  wallet_hd_path_root += f"{i}{'n' if non_observer_derivation else ''}/"
@@ -728,7 +727,7 @@ def derive_child_key(
728
727
 
729
728
  # Key type was specified
730
729
  if key_type is not None:
731
- path_indices: List[int] = [12381, 8444]
730
+ path_indices: list[int] = [12381, 8444]
732
731
  path_indices.append(
733
732
  {
734
733
  "farmer": 0,
@@ -802,11 +801,11 @@ def private_key_for_fingerprint(fingerprint: int) -> Optional[PrivateKey]:
802
801
 
803
802
 
804
803
  def prompt_for_fingerprint() -> Optional[int]:
805
- fingerprints: List[int] = [pk.get_fingerprint() for pk in Keychain().get_all_public_keys()]
804
+ fingerprints: list[int] = [pk.get_fingerprint() for pk in Keychain().get_all_public_keys()]
806
805
  while True:
807
806
  print("Choose key:")
808
807
  for i, fp in enumerate(fingerprints):
809
- print(f"{i+1}) {fp}")
808
+ print(f"{i + 1}) {fp}")
810
809
  val = None
811
810
  while val is None:
812
811
  val = input("Enter a number to pick or q to quit: ")
@@ -826,7 +825,7 @@ def prompt_for_fingerprint() -> Optional[int]:
826
825
 
827
826
  def get_private_key_with_fingerprint_or_prompt(
828
827
  fingerprint: Optional[int],
829
- ) -> Tuple[Optional[int], Optional[PrivateKey]]:
828
+ ) -> tuple[Optional[int], Optional[PrivateKey]]:
830
829
  """
831
830
  Get a private key with the specified fingerprint. If fingerprint is not
832
831
  specified, prompt the user to select a key.
@@ -851,8 +850,8 @@ def private_key_from_mnemonic_seed_file(filename: Path) -> PrivateKey:
851
850
 
852
851
 
853
852
  def resolve_derivation_master_key(
854
- fingerprint_or_filename: Optional[Union[int, str, Path]]
855
- ) -> Tuple[Optional[int], Optional[PrivateKey]]:
853
+ fingerprint_or_filename: Optional[Union[int, str, Path]],
854
+ ) -> tuple[Optional[int], Optional[PrivateKey]]:
856
855
  """
857
856
  Given a key fingerprint of file containing a mnemonic seed, return the private key.
858
857
  """
chia/cmds/netspace.py CHANGED
@@ -4,6 +4,8 @@ from typing import Optional
4
4
 
5
5
  import click
6
6
 
7
+ from chia.cmds.cmd_classes import ChiaCliContext
8
+
7
9
 
8
10
  @click.command("netspace", help="Estimate total farmed space on the network")
9
11
  @click.option(
@@ -36,12 +38,13 @@ import click
36
38
  type=str,
37
39
  default="",
38
40
  )
39
- def netspace_cmd(rpc_port: Optional[int], delta_block_height: str, start: str) -> None:
41
+ @click.pass_context
42
+ def netspace_cmd(ctx: click.Context, rpc_port: Optional[int], delta_block_height: str, start: str) -> None:
40
43
  """
41
44
  Calculates the estimated space on the network given two block header hashes.
42
45
  """
43
46
  import asyncio
44
47
 
45
- from .netspace_funcs import netstorge_async
48
+ from chia.cmds.netspace_funcs import netstorge_async
46
49
 
47
- asyncio.run(netstorge_async(rpc_port, delta_block_height, start))
50
+ asyncio.run(netstorge_async(ChiaCliContext.set_default(ctx).root_path, rpc_port, delta_block_height, start))
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from pathlib import Path
3
4
  from typing import Optional
4
5
 
5
6
  from chia.cmds.cmds_util import format_bytes, get_any_service_client
@@ -7,11 +8,11 @@ from chia.rpc.full_node_rpc_client import FullNodeRpcClient
7
8
  from chia.types.blockchain_format.sized_bytes import bytes32
8
9
 
9
10
 
10
- async def netstorge_async(rpc_port: Optional[int], delta_block_height: str, start: str) -> None:
11
+ async def netstorge_async(root_path: Path, rpc_port: Optional[int], delta_block_height: str, start: str) -> None:
11
12
  """
12
13
  Calculates the estimated space on the network given two block header hashes.
13
14
  """
14
- async with get_any_service_client(FullNodeRpcClient, rpc_port) as (client, _):
15
+ async with get_any_service_client(FullNodeRpcClient, root_path, rpc_port) as (client, _):
15
16
  if delta_block_height:
16
17
  if start == "":
17
18
  blockchain_state = await client.get_blockchain_state()
chia/cmds/param_types.py CHANGED
@@ -6,6 +6,7 @@ from typing import Any, Callable, Optional, Union
6
6
 
7
7
  import click
8
8
 
9
+ from chia.cmds.cmd_classes import ChiaCliContext
9
10
  from chia.cmds.units import units
10
11
  from chia.types.blockchain_format.sized_bytes import bytes32
11
12
  from chia.util.bech32m import bech32_decode, decode_puzzle_hash
@@ -170,17 +171,26 @@ class AddressParamType(click.ParamType):
170
171
  if not isinstance(value, str):
171
172
  self.fail("Invalid Type, address must be string.", param, ctx)
172
173
  try:
173
- hrp, b32data = bech32_decode(value)
174
- if hrp in ["xch", "txch"]: # I hate having to load the config here
174
+ hrp, _b32data = bech32_decode(value)
175
+ if hrp in {"xch", "txch"}: # I hate having to load the config here
175
176
  addr_type: AddressType = AddressType.XCH
176
- expected_prefix = ctx.obj.get("expected_prefix") if ctx else None # attempt to get cached prefix
177
+
178
+ # attempt to get cached prefix
179
+ expected_prefix: Optional[str] = None
180
+ root_path = DEFAULT_ROOT_PATH
181
+
182
+ if ctx is not None:
183
+ context = ChiaCliContext.set_default(ctx)
184
+ root_path = context.root_path
185
+ expected_prefix = context.expected_prefix
186
+
177
187
  if expected_prefix is None:
178
- root_path = ctx.obj["root_path"] if ctx is not None else DEFAULT_ROOT_PATH
179
188
  config = load_config(root_path, "config.yaml")
180
189
  expected_prefix = selected_network_address_prefix(config)
181
190
 
182
- if ctx is not None:
183
- ctx.obj["expected_prefix"] = expected_prefix # cache prefix
191
+ if ctx is not None:
192
+ context.expected_prefix = expected_prefix # cache prefix
193
+
184
194
  # now that we have the expected prefix, we can validate the address is for the right network
185
195
  if hrp != expected_prefix:
186
196
  self.fail(f"Unexpected Address Prefix: {hrp}, are you sure its for the right network?", param, ctx)
chia/cmds/passphrase.py CHANGED
@@ -7,6 +7,7 @@ from typing import Optional
7
7
 
8
8
  import click
9
9
 
10
+ from chia.cmds.cmd_classes import ChiaCliContext
10
11
  from chia.util.config import load_config
11
12
 
12
13
 
@@ -34,7 +35,7 @@ def set_cmd(
34
35
  current_passphrase_file: Optional[TextIOWrapper],
35
36
  hint: Optional[str],
36
37
  ) -> None:
37
- from .passphrase_funcs import (
38
+ from chia.cmds.passphrase_funcs import (
38
39
  async_update_daemon_passphrase_cache_if_running,
39
40
  read_passphrase_from_file,
40
41
  set_or_update_passphrase,
@@ -70,7 +71,7 @@ def set_cmd(
70
71
 
71
72
  if success:
72
73
  # Attempt to update the daemon's passphrase cache
73
- root_path = ctx.obj["root_path"]
74
+ root_path = ChiaCliContext.set_default(ctx).root_path
74
75
  config = load_config(root_path, "config.yaml")
75
76
  sys.exit(asyncio.run(async_update_daemon_passphrase_cache_if_running(root_path, config)))
76
77
 
@@ -86,7 +87,7 @@ def set_cmd(
86
87
  )
87
88
  @click.pass_context
88
89
  def remove_cmd(ctx: click.Context, current_passphrase_file: Optional[TextIOWrapper]) -> None:
89
- from .passphrase_funcs import (
90
+ from chia.cmds.passphrase_funcs import (
90
91
  async_update_daemon_passphrase_cache_if_running,
91
92
  read_passphrase_from_file,
92
93
  remove_passphrase,
@@ -98,7 +99,7 @@ def remove_cmd(ctx: click.Context, current_passphrase_file: Optional[TextIOWrapp
98
99
 
99
100
  if remove_passphrase(current_passphrase):
100
101
  # Attempt to update the daemon's passphrase cache
101
- root_path = ctx.obj["root_path"]
102
+ root_path = ChiaCliContext.set_default(ctx).root_path
102
103
  config = load_config(root_path, "config.yaml")
103
104
  sys.exit(asyncio.run(async_update_daemon_passphrase_cache_if_running(root_path, config)))
104
105
 
@@ -110,7 +111,7 @@ def hint_cmd() -> None:
110
111
 
111
112
  @hint_cmd.command("display", help="Display the keyring passphrase hint")
112
113
  def display_hint() -> None:
113
- from .passphrase_funcs import display_passphrase_hint
114
+ from chia.cmds.passphrase_funcs import display_passphrase_hint
114
115
 
115
116
  display_passphrase_hint()
116
117
 
@@ -118,13 +119,13 @@ def display_hint() -> None:
118
119
  @hint_cmd.command("set", help="Set or update the keyring passphrase hint")
119
120
  @click.argument("hint", nargs=1)
120
121
  def set_hint(hint: str) -> None:
121
- from .passphrase_funcs import set_passphrase_hint
122
+ from chia.cmds.passphrase_funcs import set_passphrase_hint
122
123
 
123
124
  set_passphrase_hint(hint)
124
125
 
125
126
 
126
127
  @hint_cmd.command("remove", help="Remove the keyring passphrase hint")
127
128
  def remove_hint() -> None:
128
- from .passphrase_funcs import remove_passphrase_hint
129
+ from chia.cmds.passphrase_funcs import remove_passphrase_hint
129
130
 
130
131
  remove_passphrase_hint()
@@ -2,25 +2,18 @@ from __future__ import annotations
2
2
 
3
3
  import os
4
4
  import sys
5
- import time
6
5
  from getpass import getpass
7
6
  from io import TextIOWrapper
8
7
  from pathlib import Path
9
- from typing import Any, Dict, Optional, Tuple
8
+ from typing import Any, Optional
10
9
 
10
+ import click
11
11
  import colorama
12
12
 
13
- from chia.cmds.cmds_util import prompt_yes_no
14
13
  from chia.daemon.client import acquire_connection_to_daemon
15
- from chia.util.errors import KeychainMaxUnlockAttempts
16
14
  from chia.util.keychain import Keychain, supports_os_passphrase_storage
17
- from chia.util.keyring_wrapper import DEFAULT_PASSPHRASE_IF_NO_MASTER_PASSPHRASE, KeyringWrapper
15
+ from chia.util.keyring_wrapper import DEFAULT_PASSPHRASE_IF_NO_MASTER_PASSPHRASE, obtain_current_passphrase
18
16
 
19
- DEFAULT_PASSPHRASE_PROMPT = (
20
- colorama.Fore.YELLOW + colorama.Style.BRIGHT + "(Unlock Keyring)" + colorama.Style.RESET_ALL + " Passphrase: "
21
- ) # noqa: E501
22
- FAILED_ATTEMPT_DELAY = 0.5
23
- MAX_RETRIES = 3
24
17
  SAVE_MASTER_PASSPHRASE_WARNING = (
25
18
  colorama.Fore.YELLOW
26
19
  + colorama.Style.BRIGHT
@@ -31,49 +24,9 @@ SAVE_MASTER_PASSPHRASE_WARNING = (
31
24
  )
32
25
 
33
26
 
34
- def obtain_current_passphrase(prompt: str = DEFAULT_PASSPHRASE_PROMPT, use_passphrase_cache: bool = False) -> str:
35
- """
36
- Obtains the master passphrase for the keyring, optionally using the cached
37
- value (if previously set). If the passphrase isn't already cached, the user is
38
- prompted interactively to enter their passphrase a max of MAX_RETRIES times
39
- before failing.
40
- """
41
-
42
- if use_passphrase_cache:
43
- passphrase, validated = KeyringWrapper.get_shared_instance().get_cached_master_passphrase()
44
- if passphrase:
45
- # If the cached passphrase was previously validated, we assume it's... valid
46
- if validated:
47
- return passphrase
48
-
49
- # Cached passphrase needs to be validated
50
- if KeyringWrapper.get_shared_instance().master_passphrase_is_valid(passphrase):
51
- KeyringWrapper.get_shared_instance().set_cached_master_passphrase(passphrase, validated=True)
52
- return passphrase
53
- else:
54
- # Cached passphrase is bad, clear the cache
55
- KeyringWrapper.get_shared_instance().set_cached_master_passphrase(None)
56
-
57
- # Prompt interactively with up to MAX_RETRIES attempts
58
- for i in range(MAX_RETRIES):
59
- colorama.init()
60
-
61
- passphrase = prompt_for_passphrase(prompt)
62
-
63
- if KeyringWrapper.get_shared_instance().master_passphrase_is_valid(passphrase):
64
- # If using the passphrase cache, and the user inputted a passphrase, update the cache
65
- if use_passphrase_cache:
66
- KeyringWrapper.get_shared_instance().set_cached_master_passphrase(passphrase, validated=True)
67
- return passphrase
68
-
69
- time.sleep(FAILED_ATTEMPT_DELAY)
70
- print("Incorrect passphrase\n")
71
- raise KeychainMaxUnlockAttempts()
72
-
73
-
74
27
  def verify_passphrase_meets_requirements(
75
28
  new_passphrase: str, confirmation_passphrase: str
76
- ) -> Tuple[bool, Optional[str]]:
29
+ ) -> tuple[bool, Optional[str]]:
77
30
  match = new_passphrase == confirmation_passphrase
78
31
  min_length = Keychain.minimum_passphrase_length()
79
32
  meets_len_requirement = len(new_passphrase) >= min_length
@@ -88,13 +41,6 @@ def verify_passphrase_meets_requirements(
88
41
  raise Exception("Unexpected passphrase verification case")
89
42
 
90
43
 
91
- def prompt_for_passphrase(prompt: str) -> str:
92
- if sys.platform == "win32" or sys.platform == "cygwin":
93
- print(prompt, end="", flush=True)
94
- prompt = ""
95
- return getpass(prompt)
96
-
97
-
98
44
  def prompt_to_save_passphrase() -> bool:
99
45
  save: bool = False
100
46
 
@@ -122,7 +68,7 @@ def prompt_to_save_passphrase() -> bool:
122
68
  colorama.init()
123
69
 
124
70
  print(warning)
125
- save = prompt_yes_no(f"Would you like to save your passphrase to the {location}?")
71
+ save = click.confirm(f"Would you like to save your passphrase to the {location}?", default=None)
126
72
 
127
73
  except Exception as e:
128
74
  print(f"Caught exception: {e}")
@@ -131,7 +77,7 @@ def prompt_to_save_passphrase() -> bool:
131
77
  return save
132
78
 
133
79
 
134
- def prompt_for_new_passphrase() -> Tuple[str, bool]:
80
+ def prompt_for_new_passphrase() -> tuple[str, bool]:
135
81
  min_length: int = Keychain.minimum_passphrase_length()
136
82
  if min_length > 0:
137
83
  n = min_length
@@ -324,7 +270,7 @@ def remove_passphrase_hint() -> None:
324
270
  print("Passphrase hint was not removed")
325
271
 
326
272
 
327
- async def async_update_daemon_passphrase_cache_if_running(root_path: Path, config: Dict[str, Any]) -> None:
273
+ async def async_update_daemon_passphrase_cache_if_running(root_path: Path, config: dict[str, Any]) -> None:
328
274
  """
329
275
  Attempt to connect to the daemon and update the cached passphrase
330
276
  """
chia/cmds/peer.py CHANGED
@@ -4,6 +4,7 @@ from typing import Optional
4
4
 
5
5
  import click
6
6
 
7
+ from chia.cmds.cmd_classes import ChiaCliContext
7
8
  from chia.cmds.cmds_util import NODE_TYPES
8
9
  from chia.cmds.peer_funcs import peer_async
9
10
 
@@ -42,7 +43,7 @@ def peer_cmd(
42
43
  peer_async(
43
44
  node_type,
44
45
  rpc_port,
45
- ctx.obj["root_path"],
46
+ ChiaCliContext.set_default(ctx).root_path,
46
47
  connections,
47
48
  add_connection,
48
49
  remove_connection,
chia/cmds/peer_funcs.py CHANGED
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from pathlib import Path
4
- from typing import Any, Dict, List, Optional
4
+ from typing import Any, Optional
5
5
 
6
6
  from chia.cmds.cmds_util import NODE_TYPES, get_any_service_client
7
7
  from chia.rpc.rpc_client import RpcClient
@@ -49,7 +49,7 @@ async def remove_node_connection(rpc_client: RpcClient, remove_connection: str)
49
49
  print(result_txt)
50
50
 
51
51
 
52
- async def print_connections(rpc_client: RpcClient, trusted_peers: Dict[str, Any], trusted_cidrs: List[str]) -> None:
52
+ async def print_connections(rpc_client: RpcClient, trusted_peers: dict[str, Any], trusted_cidrs: list[str]) -> None:
53
53
  import time
54
54
 
55
55
  from chia.server.outbound_message import NodeType
@@ -116,11 +116,11 @@ async def peer_async(
116
116
  remove_connection: str,
117
117
  ) -> None:
118
118
  client_type = NODE_TYPES[node_type]
119
- async with get_any_service_client(client_type, rpc_port, root_path) as (rpc_client, config):
119
+ async with get_any_service_client(client_type, root_path, rpc_port) as (rpc_client, config):
120
120
  # Check or edit node connections
121
121
  if show_connections:
122
- trusted_peers: Dict[str, Any] = config[node_type].get("trusted_peers", {})
123
- trusted_cidrs: List[str] = config[node_type].get("trusted_cidrs", [])
122
+ trusted_peers: dict[str, Any] = config[node_type].get("trusted_peers", {})
123
+ trusted_cidrs: list[str] = config[node_type].get("trusted_cidrs", [])
124
124
  await print_connections(rpc_client, trusted_peers, trusted_cidrs)
125
125
  # if called together with state, leave a blank line
126
126
  if add_connection: