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/beta.py CHANGED
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import zipfile
4
4
  from datetime import datetime
5
5
  from pathlib import Path
6
- from typing import List, Optional
6
+ from typing import Optional
7
7
 
8
8
  import click
9
9
 
@@ -19,6 +19,7 @@ from chia.cmds.beta_funcs import (
19
19
  validate_beta_path,
20
20
  validate_metrics_log_interval,
21
21
  )
22
+ from chia.cmds.cmd_classes import ChiaCliContext
22
23
  from chia.util.beta_metrics import metrics_log_interval_default
23
24
  from chia.util.config import lock_and_load_config, save_config
24
25
 
@@ -37,7 +38,7 @@ def beta_cmd() -> None:
37
38
  @click.option("-i", "--interval", help="System metrics will be logged based on this interval", type=int, required=False)
38
39
  @click.pass_context
39
40
  def configure(ctx: click.Context, path: Optional[str], interval: Optional[int]) -> None:
40
- root_path = ctx.obj["root_path"]
41
+ root_path = ChiaCliContext.set_default(ctx).root_path
41
42
  with lock_and_load_config(root_path, "config.yaml") as config:
42
43
  if "beta" not in config:
43
44
  raise click.ClickException("beta test mode is not enabled, enable it first with `chia beta enable`")
@@ -79,7 +80,7 @@ def configure(ctx: click.Context, path: Optional[str], interval: Optional[int])
79
80
  @click.option("-p", "--path", help="The beta mode root path", type=str, required=False)
80
81
  @click.pass_context
81
82
  def enable_cmd(ctx: click.Context, force: bool, path: Optional[str]) -> None:
82
- root_path = ctx.obj["root_path"]
83
+ root_path = ChiaCliContext.set_default(ctx).root_path
83
84
  with lock_and_load_config(root_path, "config.yaml") as config:
84
85
  if config.get("beta", {}).get("enabled", False):
85
86
  raise click.ClickException("beta test mode is already enabled")
@@ -107,7 +108,7 @@ def enable_cmd(ctx: click.Context, force: bool, path: Optional[str]) -> None:
107
108
  @beta_cmd.command("disable", help="Disable beta test mode")
108
109
  @click.pass_context
109
110
  def disable_cmd(ctx: click.Context) -> None:
110
- root_path = ctx.obj["root_path"]
111
+ root_path = ChiaCliContext.set_default(ctx).root_path
111
112
  with lock_and_load_config(root_path, "config.yaml") as config:
112
113
  if not config.get("beta", {}).get("enabled", False):
113
114
  raise click.ClickException("beta test mode is not enabled")
@@ -121,7 +122,7 @@ def disable_cmd(ctx: click.Context) -> None:
121
122
  @beta_cmd.command("prepare_submission", help="Prepare the collected log data for submission")
122
123
  @click.pass_context
123
124
  def prepare_submission_cmd(ctx: click.Context) -> None:
124
- with lock_and_load_config(ctx.obj["root_path"], "config.yaml") as config:
125
+ with lock_and_load_config(ChiaCliContext.set_default(ctx).root_path, "config.yaml") as config:
125
126
  beta_root_path = config.get("beta", {}).get("path", None)
126
127
  if beta_root_path is None:
127
128
  raise click.ClickException("beta test mode not enabled. Run `chia beta enable` first.")
@@ -150,7 +151,7 @@ def prepare_submission_cmd(ctx: click.Context) -> None:
150
151
  prepare_result / f"submission_{prepare_result.name}__{datetime.now().strftime('%m_%d_%Y__%H_%M_%S')}.zip"
151
152
  )
152
153
 
153
- def add_files(paths: List[Path]) -> int:
154
+ def add_files(paths: list[Path]) -> int:
154
155
  added = 0
155
156
  for path in paths:
156
157
  if path.name.startswith("."):
@@ -173,7 +174,7 @@ def prepare_submission_cmd(ctx: click.Context) -> None:
173
174
  @beta_cmd.command("status", help="Show the current beta configuration")
174
175
  @click.pass_context
175
176
  def status(ctx: click.Context) -> None:
176
- with lock_and_load_config(ctx.obj["root_path"], "config.yaml") as config:
177
+ with lock_and_load_config(ChiaCliContext.set_default(ctx).root_path, "config.yaml") as config:
177
178
  beta_config = config.get("beta")
178
179
  if beta_config is None:
179
180
  raise click.ClickException("beta test mode is not enabled, enable it first with `chia beta enable`")
chia/cmds/beta_funcs.py CHANGED
@@ -3,9 +3,11 @@ from __future__ import annotations
3
3
  import os
4
4
  import sys
5
5
  from pathlib import Path
6
- from typing import Any, Callable, Dict, List, Optional
6
+ from typing import Any, Callable, Optional
7
7
 
8
- from chia.cmds.cmds_util import format_bytes, prompt_yes_no, validate_directory_writable
8
+ import click
9
+
10
+ from chia.cmds.cmds_util import format_bytes, validate_directory_writable
9
11
  from chia.util.beta_metrics import metrics_log_interval_max, metrics_log_interval_min
10
12
  from chia.util.chia_logging import get_beta_logging_config
11
13
  from chia.util.errors import InvalidPathError
@@ -15,7 +17,7 @@ def default_beta_root_path() -> Path:
15
17
  return Path(os.path.expanduser(os.getenv("CHIA_BETA_ROOT", "~/chia-beta-test"))).resolve()
16
18
 
17
19
 
18
- def warn_if_beta_enabled(config: Dict[str, Any]) -> None:
20
+ def warn_if_beta_enabled(config: dict[str, Any]) -> None:
19
21
  if config.get("beta", {}).get("enabled", False):
20
22
  print("\nWARNING: beta test mode is enabled. Run `chia beta disable` if this is unintentional.\n")
21
23
 
@@ -25,11 +27,12 @@ def prompt_beta_warning() -> bool:
25
27
  # The `/ 5` is just a rough estimation for `gzip` being used by the log rotation in beta mode. It was like
26
28
  # 7-10x compressed in example tests with 2MB files.
27
29
  min_space = format_bytes(int(logging_config["log_maxfilesrotation"] * logging_config["log_maxbytesrotation"] / 5))
28
- return prompt_yes_no(
30
+ message = (
29
31
  f"\nWARNING: Enabling the beta test mode increases disk writes and may lead to {min_space} of "
30
32
  "extra logfiles getting stored on your disk. This should only be done if you are part of the beta test "
31
33
  "program.\n\nDo you really want to enable the beta test mode?"
32
34
  )
35
+ return click.confirm(message, default=None)
33
36
 
34
37
 
35
38
  def prompt_for_beta_path(default_path: Path) -> Path:
@@ -37,11 +40,12 @@ def prompt_for_beta_path(default_path: Path) -> Path:
37
40
  for _ in range(3):
38
41
  user_input = input(
39
42
  "\nEnter a directory where the beta test logs can be stored or press enter to use the default "
40
- f"[{str(default_path)}]:"
43
+ f"[{default_path!s}]:"
41
44
  )
42
45
  test_path = Path(user_input) if user_input else default_path
43
- if not test_path.is_dir() and prompt_yes_no(
44
- f"\nDirectory {str(test_path)!r} doesn't exist.\n\nDo you want to create it?"
46
+ if not test_path.is_dir() and click.confirm(
47
+ f"\nDirectory {str(test_path)!r} doesn't exist.\n\nDo you want to create it?",
48
+ default=None,
45
49
  ):
46
50
  test_path.mkdir(parents=True)
47
51
 
@@ -65,7 +69,7 @@ def prompt_for_metrics_log_interval(default_interval: int) -> int:
65
69
  for _ in range(3):
66
70
  user_input = input(
67
71
  "\nEnter a number of seconds as interval in which analytics getting logged, press enter to use the default "
68
- f"[{str(default_interval)}]:"
72
+ f"[{default_interval!s}]:"
69
73
  )
70
74
  test_interval = int(user_input) if user_input else default_interval
71
75
 
@@ -84,7 +88,7 @@ def prompt_for_metrics_log_interval(default_interval: int) -> int:
84
88
  return interval
85
89
 
86
90
 
87
- def update_beta_config(enabled: bool, path: Path, metrics_log_interval: int, config: Dict[str, Any]) -> None:
91
+ def update_beta_config(enabled: bool, path: Path, metrics_log_interval: int, config: dict[str, Any]) -> None:
88
92
  if "beta" not in config:
89
93
  config["beta"] = {}
90
94
 
@@ -121,9 +125,9 @@ def prepare_chia_blockchain_log(path: Path) -> None:
121
125
  print(f" - {path.name}")
122
126
 
123
127
 
124
- def prepare_logs(prepare_path: Path, prepare_callback: Callable[[Path], None]) -> List[Path]:
128
+ def prepare_logs(prepare_path: Path, prepare_callback: Callable[[Path], None]) -> list[Path]:
125
129
  result = [path for path in prepare_path.iterdir()] if prepare_path.exists() else []
126
- if len(result):
130
+ if len(result) > 0:
127
131
  print(f"\nPreparing {prepare_path.name!r} logs:")
128
132
  for log in result:
129
133
  if log.name.startswith("."):
@@ -3,14 +3,15 @@ from __future__ import annotations
3
3
  import asyncio
4
4
  import sys
5
5
  from collections import defaultdict
6
+ from collections.abc import Iterable
6
7
  from pathlib import Path
7
8
  from sqlite3 import Row
8
- from typing import Any, Dict, Iterable, List, Optional, Set
9
+ from typing import Any, Optional
9
10
 
10
11
  from chia.util.collection import find_duplicates
11
12
  from chia.util.db_synchronous import db_synchronous_on
12
13
  from chia.util.db_wrapper import DBWrapper2, execute_fetchone
13
- from chia.util.pprint import print_compact_ranges
14
+ from chia.wallet.util.pprint import print_compact_ranges
14
15
  from chia.wallet.util.wallet_types import WalletType
15
16
 
16
17
  # TODO: Check for missing paired wallets (eg. No DID wallet for an NFT)
@@ -48,18 +49,18 @@ def _validate_args_addresses_used(wallet_id: int, last_index: int, last_hardened
48
49
  raise ValueError(f"Invalid argument: noncontiguous derivation_index at {last_index} wallet_id={wallet_id}")
49
50
 
50
51
 
51
- def check_addresses_used_contiguous(derivation_paths: List[DerivationPath]) -> List[str]:
52
+ def check_addresses_used_contiguous(derivation_paths: list[DerivationPath]) -> list[str]:
52
53
  """
53
54
  The used column for addresses in the derivation_paths table should be a
54
55
  zero or greater run of 1's, followed by a zero or greater run of 0's.
55
56
  There should be no used derivations after seeing a used derivation.
56
57
  """
57
- errors: List[str] = []
58
+ errors: list[str] = []
58
59
 
59
60
  for wallet_id, dps in dp_by_wallet_id(derivation_paths).items():
60
61
  saw_unused = False
61
- bad_used_values: Set[int] = set()
62
- ordering_errors: List[str] = []
62
+ bad_used_values: set[int] = set()
63
+ ordering_errors: list[str] = []
63
64
  # last_index = None
64
65
  # last_hardened = None
65
66
  for dp in dps:
@@ -89,7 +90,7 @@ def check_addresses_used_contiguous(derivation_paths: List[DerivationPath]) -> L
89
90
  return errors
90
91
 
91
92
 
92
- def check_for_gaps(array: List[int], start: int, end: int, *, data_type_plural: str = "Elements") -> List[str]:
93
+ def check_for_gaps(array: list[int], start: int, end: int, *, data_type_plural: str = "Elements") -> list[str]:
93
94
  """
94
95
  Check for compact sequence:
95
96
  Check that every value from start to end is present in array, and no more.
@@ -100,7 +101,7 @@ def check_for_gaps(array: List[int], start: int, end: int, *, data_type_plural:
100
101
 
101
102
  if start > end:
102
103
  raise ValueError(f"{__name__} called with incorrect arguments: start={start} end={end} (start > end)")
103
- errors: List[str] = []
104
+ errors: list[str] = []
104
105
 
105
106
  if start == end and len(array) == 1:
106
107
  return errors
@@ -123,7 +124,7 @@ def check_for_gaps(array: List[int], start: int, end: int, *, data_type_plural:
123
124
 
124
125
 
125
126
  class FromDB:
126
- def __init__(self, row: Iterable[Any], fields: List[str]) -> None:
127
+ def __init__(self, row: Iterable[Any], fields: list[str]) -> None:
127
128
  self.fields = fields
128
129
  for field, value in zip(fields, row):
129
130
  setattr(self, field, value)
@@ -144,7 +145,7 @@ def wallet_type_name(
144
145
  return f"INVALID_WALLET_TYPE ({wallet_type})"
145
146
 
146
147
 
147
- def _cwr(row: Row) -> List[Any]:
148
+ def _cwr(row: Row) -> list[Any]:
148
149
  r = []
149
150
  for i, v in enumerate(row):
150
151
  if i == 2:
@@ -175,7 +176,7 @@ class Wallet(FromDB):
175
176
  data: str
176
177
 
177
178
 
178
- def dp_by_wallet_id(derivation_paths: List[DerivationPath]) -> Dict[int, List[DerivationPath]]:
179
+ def dp_by_wallet_id(derivation_paths: list[DerivationPath]) -> dict[int, list[DerivationPath]]:
179
180
  d = defaultdict(list)
180
181
  for derivation_path in derivation_paths:
181
182
  d[derivation_path.wallet_id].append(derivation_path)
@@ -184,7 +185,7 @@ def dp_by_wallet_id(derivation_paths: List[DerivationPath]) -> Dict[int, List[De
184
185
  return d
185
186
 
186
187
 
187
- def derivation_indices_by_wallet_id(derivation_paths: List[DerivationPath]) -> Dict[int, List[int]]:
188
+ def derivation_indices_by_wallet_id(derivation_paths: list[DerivationPath]) -> dict[int, list[int]]:
188
189
  d = dp_by_wallet_id(derivation_paths)
189
190
  di = {}
190
191
  for k, v in d.items():
@@ -192,7 +193,7 @@ def derivation_indices_by_wallet_id(derivation_paths: List[DerivationPath]) -> D
192
193
  return di
193
194
 
194
195
 
195
- def print_min_max_derivation_for_wallets(derivation_paths: List[DerivationPath]) -> None:
196
+ def print_min_max_derivation_for_wallets(derivation_paths: list[DerivationPath]) -> None:
196
197
  d = derivation_indices_by_wallet_id(derivation_paths)
197
198
  print("Min, Max, Count of derivations for each wallet:")
198
199
  for wallet_id, derivation_index_list in d.items():
@@ -205,11 +206,12 @@ def print_min_max_derivation_for_wallets(derivation_paths: List[DerivationPath])
205
206
 
206
207
  class WalletDBReader:
207
208
  db_wrapper: DBWrapper2 # TODO: Remove db_wrapper member
208
- config = {"db_readers": 1}
209
+ # TODO: make this a dataclass and make this an instance attribute instead of a mutable classvar
210
+ config = {"db_readers": 1} # noqa: RUF012
209
211
  sql_log_path: Optional[Path] = None
210
212
  verbose = False
211
213
 
212
- async def get_all_wallets(self) -> List[Wallet]:
214
+ async def get_all_wallets(self) -> list[Wallet]:
213
215
  wallet_fields = ["id", "name", "wallet_type", "data"]
214
216
  async with self.db_wrapper.reader_no_transaction() as reader:
215
217
  # TODO: if table doesn't exist
@@ -217,7 +219,7 @@ class WalletDBReader:
217
219
  rows = await cursor.fetchall()
218
220
  return [Wallet(r, wallet_fields) for r in rows]
219
221
 
220
- async def get_derivation_paths(self) -> List[DerivationPath]:
222
+ async def get_derivation_paths(self) -> list[DerivationPath]:
221
223
  fields = ["derivation_index", "pubkey", "puzzle_hash", "wallet_type", "wallet_id", "used", "hardened"]
222
224
  async with self.db_wrapper.reader_no_transaction() as reader:
223
225
  # TODO: if table doesn't exist
@@ -225,7 +227,7 @@ class WalletDBReader:
225
227
  rows = await cursor.fetchall()
226
228
  return [DerivationPath(row, fields) for row in rows]
227
229
 
228
- async def show_tables(self) -> List[str]:
230
+ async def show_tables(self) -> list[str]:
229
231
  async with self.db_wrapper.reader_no_transaction() as reader:
230
232
  cursor = await reader.execute("""SELECT name FROM sqlite_master WHERE type='table';""")
231
233
  print("\nWallet DB Tables:")
@@ -237,7 +239,7 @@ class WalletDBReader:
237
239
  print()
238
240
  return []
239
241
 
240
- async def check_wallets(self) -> List[str]:
242
+ async def check_wallets(self) -> list[str]:
241
243
  # id, name, wallet_type, data
242
244
  # TODO: Move this SQL up a level
243
245
  async with self.db_wrapper.reader_no_transaction() as reader:
@@ -282,8 +284,8 @@ class WalletDBReader:
282
284
  return errors
283
285
 
284
286
  def check_wallets_missing_derivations(
285
- self, wallets: List[Wallet], derivation_paths: List[DerivationPath]
286
- ) -> List[str]:
287
+ self, wallets: list[Wallet], derivation_paths: list[DerivationPath]
288
+ ) -> list[str]:
287
289
  p = []
288
290
  d = derivation_indices_by_wallet_id(derivation_paths) # TODO: calc this once, pass in
289
291
  for w in wallets:
@@ -293,7 +295,7 @@ class WalletDBReader:
293
295
  return [f"Wallet IDs with no derivations that require them: {p}"]
294
296
  return []
295
297
 
296
- def check_derivations_are_compact(self, wallets: List[Wallet], derivation_paths: List[DerivationPath]) -> List[str]:
298
+ def check_derivations_are_compact(self, wallets: list[Wallet], derivation_paths: list[DerivationPath]) -> list[str]:
297
299
  errors = []
298
300
  """
299
301
  Gaps in derivation index
@@ -318,8 +320,8 @@ class WalletDBReader:
318
320
  return errors
319
321
 
320
322
  def check_unexpected_derivation_entries(
321
- self, wallets: List[Wallet], derivation_paths: List[DerivationPath]
322
- ) -> List[str]:
323
+ self, wallets: list[Wallet], derivation_paths: list[DerivationPath]
324
+ ) -> list[str]:
323
325
  """
324
326
  Check for unexpected derivation path entries
325
327
 
@@ -340,7 +342,7 @@ class WalletDBReader:
340
342
  if d.wallet_id not in wallet_id_to_type:
341
343
  missing_wallet_ids.append(d.wallet_id)
342
344
  elif d.wallet_type != wallet_id_to_type[d.wallet_id]:
343
- wrong_type[(d.hardened, d.wallet_id, d.wallet_type, wallet_id_to_type[d.wallet_id])].append(
345
+ wrong_type[d.hardened, d.wallet_id, d.wallet_type, wallet_id_to_type[d.wallet_id]].append(
344
346
  d.derivation_index
345
347
  )
346
348
 
@@ -395,9 +397,9 @@ class WalletDBReader:
395
397
  return len(errors)
396
398
 
397
399
 
398
- async def scan(root_path: str, db_path: Optional[str] = None, *, verbose: bool = False) -> None:
400
+ async def scan(root_path: Path, db_path: Optional[str] = None, *, verbose: bool = False) -> None:
399
401
  if db_path is None:
400
- wallet_db_path = Path(root_path) / "wallet" / "db"
402
+ wallet_db_path = root_path / "wallet" / "db"
401
403
  wallet_db_paths = list(wallet_db_path.glob("blockchain_wallet_*.sqlite"))
402
404
  else:
403
405
  wallet_db_paths = [Path(db_path)]
@@ -415,4 +417,4 @@ async def scan(root_path: str, db_path: Optional[str] = None, *, verbose: bool =
415
417
 
416
418
  if __name__ == "__main__":
417
419
  loop = asyncio.get_event_loop()
418
- loop.run_until_complete(scan("", sys.argv[1]))
420
+ loop.run_until_complete(scan(Path(), sys.argv[1]))
chia/cmds/chia.py CHANGED
@@ -7,6 +7,7 @@ import click
7
7
 
8
8
  from chia import __version__
9
9
  from chia.cmds.beta import beta_cmd
10
+ from chia.cmds.cmd_classes import ChiaCliContext
10
11
  from chia.cmds.completion import completion
11
12
  from chia.cmds.configure import configure_cmd
12
13
  from chia.cmds.dao import dao_cmd
@@ -27,12 +28,15 @@ from chia.cmds.show import show_cmd
27
28
  from chia.cmds.start import start_cmd
28
29
  from chia.cmds.stop import stop_cmd
29
30
  from chia.cmds.wallet import wallet_cmd
30
- from chia.util.default_root import DEFAULT_KEYS_ROOT_PATH, DEFAULT_ROOT_PATH
31
+ from chia.util.default_root import DEFAULT_KEYS_ROOT_PATH, resolve_root_path
31
32
  from chia.util.errors import KeychainCurrentPassphraseIsInvalid
32
33
  from chia.util.keychain import Keychain, set_keys_root_path
33
34
  from chia.util.ssl_check import check_ssl
34
35
 
35
- CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"])
36
+ CONTEXT_SETTINGS = {
37
+ "help_option_names": ["-h", "--help"],
38
+ "show_default": True,
39
+ }
36
40
 
37
41
 
38
42
  @click.group(
@@ -40,7 +44,13 @@ CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"])
40
44
  epilog="Try 'chia start node', 'chia netspace -d 192', or 'chia show -s'",
41
45
  context_settings=CONTEXT_SETTINGS,
42
46
  )
43
- @click.option("--root-path", default=DEFAULT_ROOT_PATH, help="Config file root", type=click.Path(), show_default=True)
47
+ @click.option(
48
+ "--root-path",
49
+ default=resolve_root_path(override=None),
50
+ help="Config file root",
51
+ type=click.Path(),
52
+ show_default=True,
53
+ )
44
54
  @click.option(
45
55
  "--keys-root-path", default=DEFAULT_KEYS_ROOT_PATH, help="Keyring file root", type=click.Path(), show_default=True
46
56
  )
@@ -54,8 +64,8 @@ def cli(
54
64
  ) -> None:
55
65
  from pathlib import Path
56
66
 
57
- ctx.ensure_object(dict)
58
- ctx.obj["root_path"] = Path(root_path)
67
+ context = ChiaCliContext.set_default(ctx=ctx)
68
+ context.root_path = Path(root_path)
59
69
 
60
70
  # keys_root_path and passphrase_file will be None if the passphrase options have been
61
71
  # scrubbed from the CLI options
@@ -107,7 +117,7 @@ def run_daemon_cmd(ctx: click.Context, wait_for_unlock: bool) -> None:
107
117
 
108
118
  wait_for_unlock = wait_for_unlock and Keychain.is_keyring_locked()
109
119
 
110
- asyncio.run(async_run_daemon(ctx.obj["root_path"], wait_for_unlock=wait_for_unlock))
120
+ asyncio.run(async_run_daemon(ChiaCliContext.set_default(ctx).root_path, wait_for_unlock=wait_for_unlock))
111
121
 
112
122
 
113
123
  cli.add_command(keys_cmd)
@@ -134,9 +144,7 @@ cli.add_command(dev_cmd)
134
144
 
135
145
 
136
146
  def main() -> None:
137
- import chia.cmds.signer # noqa
138
-
139
- cli() # pylint: disable=no-value-for-parameter
147
+ cli()
140
148
 
141
149
 
142
150
  if __name__ == "__main__":