chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.5.8rc1__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 (528) hide show
  1. chia/__init__.py +8 -4
  2. chia/_tests/blockchain/blockchain_test_utils.py +6 -8
  3. chia/_tests/blockchain/test_augmented_chain.py +4 -4
  4. chia/_tests/blockchain/test_blockchain.py +165 -190
  5. chia/_tests/blockchain/test_build_chains.py +2 -4
  6. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  7. chia/_tests/clvm/coin_store.py +4 -7
  8. chia/_tests/clvm/test_clvm_step.py +4 -4
  9. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  10. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  11. chia/_tests/clvm/test_singletons.py +2 -4
  12. chia/_tests/clvm/test_spend_sim.py +2 -2
  13. chia/_tests/cmds/cmd_test_utils.py +27 -45
  14. chia/_tests/cmds/test_cmd_framework.py +6 -6
  15. chia/_tests/cmds/test_daemon.py +3 -3
  16. chia/_tests/cmds/test_show.py +4 -4
  17. chia/_tests/cmds/test_tx_config_args.py +1 -2
  18. chia/_tests/cmds/testing_classes.py +4 -5
  19. chia/_tests/cmds/wallet/test_did.py +24 -27
  20. chia/_tests/cmds/wallet/test_nft.py +12 -10
  21. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  22. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  23. chia/_tests/conftest.py +59 -30
  24. chia/_tests/connection_utils.py +2 -2
  25. chia/_tests/core/cmds/test_beta.py +4 -4
  26. chia/_tests/core/cmds/test_keys.py +2 -3
  27. chia/_tests/core/cmds/test_wallet.py +15 -15
  28. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  29. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  30. chia/_tests/core/daemon/test_daemon.py +11 -11
  31. chia/_tests/core/data_layer/conftest.py +2 -2
  32. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  33. chia/_tests/core/data_layer/test_data_store.py +10 -10
  34. chia/_tests/core/data_layer/util.py +11 -11
  35. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  36. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  37. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  38. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  39. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  40. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  41. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  42. chia/_tests/core/full_node/test_conditions.py +21 -23
  43. chia/_tests/core/full_node/test_full_node.py +225 -62
  44. chia/_tests/core/full_node/test_hint_management.py +2 -4
  45. chia/_tests/core/full_node/test_performance.py +0 -1
  46. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  47. chia/_tests/core/full_node/test_transactions.py +1 -2
  48. chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
  49. chia/_tests/core/mempool/test_mempool.py +29 -37
  50. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  51. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  52. chia/_tests/core/mempool/test_mempool_manager.py +963 -839
  53. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  54. chia/_tests/core/server/serve.py +7 -7
  55. chia/_tests/core/server/test_dos.py +1 -2
  56. chia/_tests/core/server/test_event_loop.py +12 -4
  57. chia/_tests/core/server/test_loop.py +7 -8
  58. chia/_tests/core/server/test_rate_limits.py +9 -8
  59. chia/_tests/core/server/test_server.py +61 -1
  60. chia/_tests/core/services/test_services.py +2 -2
  61. chia/_tests/core/ssl/test_ssl.py +2 -2
  62. chia/_tests/core/test_cost_calculation.py +2 -6
  63. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  64. chia/_tests/core/test_filter.py +0 -1
  65. chia/_tests/core/test_full_node_rpc.py +2 -2
  66. chia/_tests/core/test_merkle_set.py +1 -2
  67. chia/_tests/core/test_seeder.py +4 -4
  68. chia/_tests/core/util/test_config.py +4 -4
  69. chia/_tests/core/util/test_jsonify.py +2 -2
  70. chia/_tests/core/util/test_keychain.py +3 -3
  71. chia/_tests/core/util/test_lockfile.py +2 -1
  72. chia/_tests/core/util/test_log_exceptions.py +1 -2
  73. chia/_tests/core/util/test_streamable.py +17 -17
  74. chia/_tests/db/test_db_wrapper.py +3 -2
  75. chia/_tests/environments/wallet.py +14 -14
  76. chia/_tests/ether.py +4 -3
  77. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  78. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  79. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  80. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  81. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  82. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  83. chia/_tests/harvester/test_harvester_api.py +11 -4
  84. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  85. chia/_tests/plot_sync/test_receiver.py +11 -10
  86. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  87. chia/_tests/plot_sync/util.py +1 -2
  88. chia/_tests/plotting/test_plot_manager.py +7 -6
  89. chia/_tests/plotting/test_prover.py +30 -38
  90. chia/_tests/pools/test_pool_cmdline.py +4 -6
  91. chia/_tests/pools/test_pool_rpc.py +203 -61
  92. chia/_tests/pools/test_pool_wallet.py +3 -3
  93. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  94. chia/_tests/process_junit.py +2 -2
  95. chia/_tests/rpc/test_rpc_client.py +4 -4
  96. chia/_tests/rpc/test_rpc_server.py +3 -3
  97. chia/_tests/simulation/test_simulation.py +12 -25
  98. chia/_tests/solver/test_solver_service.py +13 -4
  99. chia/_tests/testconfig.py +2 -2
  100. chia/_tests/timelord/test_new_peak.py +22 -11
  101. chia/_tests/tools/test_run_block.py +0 -2
  102. chia/_tests/tools/test_virtual_project.py +2 -1
  103. chia/_tests/util/benchmarks.py +1 -0
  104. chia/_tests/util/blockchain.py +38 -36
  105. chia/_tests/util/blockchain_mock.py +11 -11
  106. chia/_tests/util/build_network_protocol_files.py +2 -1
  107. chia/_tests/util/coin_store.py +2 -1
  108. chia/_tests/util/config.py +1 -1
  109. chia/_tests/util/db_connection.py +2 -3
  110. chia/_tests/util/full_sync.py +9 -11
  111. chia/_tests/util/gen_ssl_certs.py +4 -5
  112. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  113. chia/_tests/util/misc.py +24 -24
  114. chia/_tests/util/network_protocol_data.py +20 -3
  115. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  116. chia/_tests/util/protocol_messages_json.py +292 -3
  117. chia/_tests/util/setup_nodes.py +62 -47
  118. chia/_tests/util/spend_sim.py +57 -57
  119. chia/_tests/util/test_async_pool.py +2 -3
  120. chia/_tests/util/test_chia_version.py +1 -3
  121. chia/_tests/util/test_config.py +3 -3
  122. chia/_tests/util/test_full_block_utils.py +6 -3
  123. chia/_tests/util/test_limited_semaphore.py +1 -2
  124. chia/_tests/util/test_misc.py +2 -2
  125. chia/_tests/util/test_network.py +1 -2
  126. chia/_tests/util/test_priority_mutex.py +3 -3
  127. chia/_tests/util/test_recursive_replace.py +5 -6
  128. chia/_tests/util/test_replace_str_to_bytes.py +8 -10
  129. chia/_tests/util/test_testnet_overrides.py +3 -3
  130. chia/_tests/util/time_out_assert.py +2 -2
  131. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  132. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  133. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  134. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  135. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  136. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  137. chia/_tests/wallet/conftest.py +6 -6
  138. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  139. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  140. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  141. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  142. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  145. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  146. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  147. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  148. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  149. chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
  150. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  151. chia/_tests/wallet/test_coin_management.py +2 -2
  152. chia/_tests/wallet/test_conditions.py +45 -51
  153. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  154. chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
  155. chia/_tests/wallet/test_notifications.py +14 -14
  156. chia/_tests/wallet/test_signer_protocol.py +5 -5
  157. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  158. chia/_tests/wallet/test_transaction_store.py +20 -20
  159. chia/_tests/wallet/test_util.py +2 -2
  160. chia/_tests/wallet/test_wallet.py +380 -228
  161. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  162. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  163. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  164. chia/_tests/wallet/test_wallet_node.py +14 -14
  165. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  166. chia/_tests/wallet/test_wallet_utils.py +2 -3
  167. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  168. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  169. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  170. chia/_tests/wallet/wallet_block_tools.py +12 -11
  171. chia/_tests/weight_proof/config.py +1 -0
  172. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  173. chia/apis/__init__.py +21 -0
  174. chia/apis/farmer_stub.py +102 -0
  175. chia/apis/full_node_stub.py +372 -0
  176. chia/apis/harvester_stub.py +57 -0
  177. chia/apis/introducer_stub.py +35 -0
  178. chia/apis/solver_stub.py +30 -0
  179. chia/apis/stub_protocol_registry.py +21 -0
  180. chia/apis/timelord_stub.py +39 -0
  181. chia/apis/wallet_stub.py +161 -0
  182. chia/cmds/beta.py +3 -4
  183. chia/cmds/beta_funcs.py +4 -3
  184. chia/cmds/check_wallet_db.py +4 -4
  185. chia/cmds/chia.py +1 -2
  186. chia/cmds/cmd_classes.py +11 -13
  187. chia/cmds/cmd_helpers.py +11 -11
  188. chia/cmds/cmds_util.py +15 -15
  189. chia/cmds/coin_funcs.py +6 -7
  190. chia/cmds/coins.py +2 -3
  191. chia/cmds/configure.py +1 -2
  192. chia/cmds/data.py +42 -42
  193. chia/cmds/data_funcs.py +81 -81
  194. chia/cmds/db.py +4 -5
  195. chia/cmds/db_backup_func.py +2 -2
  196. chia/cmds/db_upgrade_func.py +3 -3
  197. chia/cmds/db_validate_func.py +2 -2
  198. chia/cmds/dev/data.py +4 -4
  199. chia/cmds/dev/gh.py +5 -5
  200. chia/cmds/dev/installers.py +2 -3
  201. chia/cmds/dev/mempool.py +3 -4
  202. chia/cmds/dev/mempool_funcs.py +4 -4
  203. chia/cmds/dev/sim.py +8 -8
  204. chia/cmds/dump_keyring.py +3 -3
  205. chia/cmds/farm.py +6 -8
  206. chia/cmds/farm_funcs.py +25 -24
  207. chia/cmds/init_funcs.py +4 -4
  208. chia/cmds/keys.py +16 -18
  209. chia/cmds/keys_funcs.py +36 -36
  210. chia/cmds/netspace.py +1 -3
  211. chia/cmds/netspace_funcs.py +1 -2
  212. chia/cmds/options.py +3 -2
  213. chia/cmds/param_types.py +17 -16
  214. chia/cmds/passphrase.py +6 -7
  215. chia/cmds/passphrase_funcs.py +11 -13
  216. chia/cmds/peer.py +1 -3
  217. chia/cmds/peer_funcs.py +3 -3
  218. chia/cmds/plotnft.py +6 -7
  219. chia/cmds/plotnft_funcs.py +37 -26
  220. chia/cmds/rpc.py +3 -3
  221. chia/cmds/show.py +3 -5
  222. chia/cmds/show_funcs.py +9 -9
  223. chia/cmds/sim_funcs.py +25 -26
  224. chia/cmds/solver.py +1 -3
  225. chia/cmds/solver_funcs.py +1 -2
  226. chia/cmds/start_funcs.py +2 -2
  227. chia/cmds/wallet.py +76 -81
  228. chia/cmds/wallet_funcs.py +206 -177
  229. chia/consensus/augmented_chain.py +6 -6
  230. chia/consensus/block_body_validation.py +19 -15
  231. chia/consensus/block_creation.py +25 -21
  232. chia/consensus/block_header_validation.py +27 -13
  233. chia/consensus/block_height_map.py +3 -6
  234. chia/consensus/block_height_map_protocol.py +2 -2
  235. chia/consensus/block_record.py +2 -4
  236. chia/consensus/blockchain.py +58 -40
  237. chia/consensus/blockchain_interface.py +7 -7
  238. chia/consensus/coin_store_protocol.py +5 -6
  239. chia/consensus/condition_tools.py +4 -4
  240. chia/consensus/cost_calculator.py +2 -3
  241. chia/consensus/default_constants.py +16 -13
  242. chia/consensus/deficit.py +1 -3
  243. chia/consensus/difficulty_adjustment.py +3 -5
  244. chia/consensus/find_fork_point.py +2 -4
  245. chia/consensus/full_block_to_block_record.py +11 -13
  246. chia/consensus/generator_tools.py +2 -3
  247. chia/consensus/get_block_challenge.py +42 -26
  248. chia/consensus/get_block_generator.py +2 -3
  249. chia/consensus/make_sub_epoch_summary.py +8 -7
  250. chia/consensus/multiprocess_validation.py +31 -20
  251. chia/consensus/pos_quality.py +6 -23
  252. chia/consensus/pot_iterations.py +17 -44
  253. chia/consensus/signage_point.py +4 -5
  254. chia/consensus/vdf_info_computation.py +2 -4
  255. chia/daemon/client.py +8 -8
  256. chia/daemon/keychain_proxy.py +31 -37
  257. chia/daemon/server.py +32 -33
  258. chia/daemon/windows_signal.py +4 -3
  259. chia/data_layer/data_layer.py +86 -77
  260. chia/data_layer/data_layer_rpc_api.py +9 -9
  261. chia/data_layer/data_layer_rpc_client.py +13 -15
  262. chia/data_layer/data_layer_server.py +3 -3
  263. chia/data_layer/data_layer_util.py +14 -14
  264. chia/data_layer/data_layer_wallet.py +94 -101
  265. chia/data_layer/data_store.py +50 -50
  266. chia/data_layer/dl_wallet_store.py +9 -12
  267. chia/data_layer/download_data.py +8 -9
  268. chia/data_layer/s3_plugin_service.py +5 -9
  269. chia/data_layer/start_data_layer.py +5 -5
  270. chia/farmer/farmer.py +31 -31
  271. chia/farmer/farmer_api.py +45 -33
  272. chia/farmer/farmer_rpc_api.py +5 -4
  273. chia/farmer/farmer_rpc_client.py +6 -6
  274. chia/farmer/start_farmer.py +6 -6
  275. chia/full_node/block_store.py +13 -16
  276. chia/full_node/check_fork_next_block.py +1 -2
  277. chia/full_node/coin_store.py +15 -16
  278. chia/full_node/eligible_coin_spends.py +3 -3
  279. chia/full_node/fee_estimate_store.py +2 -3
  280. chia/full_node/fee_tracker.py +1 -2
  281. chia/full_node/full_block_utils.py +4 -4
  282. chia/full_node/full_node.py +238 -224
  283. chia/full_node/full_node_api.py +193 -150
  284. chia/full_node/full_node_rpc_api.py +53 -31
  285. chia/full_node/full_node_rpc_client.py +18 -19
  286. chia/full_node/full_node_store.py +45 -43
  287. chia/full_node/hint_management.py +2 -2
  288. chia/full_node/mempool.py +17 -19
  289. chia/full_node/mempool_manager.py +89 -42
  290. chia/full_node/pending_tx_cache.py +2 -3
  291. chia/full_node/start_full_node.py +5 -5
  292. chia/full_node/sync_store.py +3 -4
  293. chia/full_node/tx_processing_queue.py +34 -13
  294. chia/full_node/weight_proof.py +61 -48
  295. chia/harvester/harvester.py +25 -24
  296. chia/harvester/harvester_api.py +61 -38
  297. chia/harvester/harvester_rpc_api.py +10 -10
  298. chia/harvester/start_harvester.py +4 -4
  299. chia/introducer/introducer.py +3 -3
  300. chia/introducer/introducer_api.py +6 -4
  301. chia/introducer/start_introducer.py +4 -4
  302. chia/legacy/keyring.py +3 -3
  303. chia/plot_sync/delta.py +1 -2
  304. chia/plot_sync/receiver.py +20 -17
  305. chia/plot_sync/sender.py +15 -10
  306. chia/plotters/bladebit.py +7 -7
  307. chia/plotters/chiapos.py +2 -2
  308. chia/plotters/madmax.py +4 -4
  309. chia/plotters/plotters.py +4 -4
  310. chia/plotters/plotters_util.py +3 -3
  311. chia/plotting/cache.py +20 -14
  312. chia/plotting/check_plots.py +26 -35
  313. chia/plotting/create_plots.py +22 -23
  314. chia/plotting/manager.py +21 -14
  315. chia/plotting/prover.py +59 -42
  316. chia/plotting/util.py +16 -16
  317. chia/pools/pool_config.py +2 -1
  318. chia/pools/pool_puzzles.py +11 -12
  319. chia/pools/pool_wallet.py +34 -57
  320. chia/pools/pool_wallet_info.py +39 -10
  321. chia/protocols/farmer_protocol.py +8 -9
  322. chia/protocols/fee_estimate.py +3 -4
  323. chia/protocols/full_node_protocol.py +3 -4
  324. chia/protocols/harvester_protocol.py +27 -15
  325. chia/protocols/outbound_message.py +3 -3
  326. chia/protocols/pool_protocol.py +8 -9
  327. chia/protocols/shared_protocol.py +1 -2
  328. chia/protocols/solver_protocol.py +9 -2
  329. chia/protocols/timelord_protocol.py +4 -7
  330. chia/protocols/wallet_protocol.py +11 -12
  331. chia/rpc/rpc_client.py +9 -9
  332. chia/rpc/rpc_server.py +17 -17
  333. chia/rpc/util.py +2 -2
  334. chia/seeder/crawler.py +8 -8
  335. chia/seeder/crawler_api.py +21 -27
  336. chia/seeder/crawler_rpc_api.py +2 -2
  337. chia/seeder/dns_server.py +21 -21
  338. chia/seeder/start_crawler.py +4 -4
  339. chia/server/address_manager.py +15 -16
  340. chia/server/api_protocol.py +11 -11
  341. chia/server/chia_policy.py +46 -26
  342. chia/server/introducer_peers.py +2 -3
  343. chia/server/node_discovery.py +19 -19
  344. chia/server/rate_limit_numbers.py +4 -5
  345. chia/server/rate_limits.py +4 -4
  346. chia/server/resolve_peer_info.py +4 -4
  347. chia/server/server.py +49 -52
  348. chia/server/signal_handlers.py +6 -6
  349. chia/server/start_service.py +17 -17
  350. chia/server/upnp.py +4 -6
  351. chia/server/ws_connection.py +52 -37
  352. chia/simulator/add_blocks_in_batches.py +1 -3
  353. chia/simulator/block_tools.py +312 -200
  354. chia/simulator/full_node_simulator.py +56 -35
  355. chia/simulator/keyring.py +2 -3
  356. chia/simulator/setup_services.py +15 -15
  357. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  358. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  359. chia/simulator/simulator_protocol.py +1 -2
  360. chia/simulator/simulator_test_tools.py +3 -3
  361. chia/simulator/start_simulator.py +7 -7
  362. chia/simulator/wallet_tools.py +10 -10
  363. chia/solver/solver.py +10 -10
  364. chia/solver/solver_api.py +10 -8
  365. chia/solver/solver_rpc_api.py +2 -2
  366. chia/solver/start_solver.py +4 -4
  367. chia/ssl/cacert.pem +148 -90
  368. chia/ssl/chia_ca.crt +14 -10
  369. chia/ssl/chia_ca_old.crt +19 -0
  370. chia/ssl/create_ssl.py +4 -4
  371. chia/ssl/renewedselfsignedca.conf +4 -0
  372. chia/ssl/ssl_check.py +1 -2
  373. chia/timelord/iters_from_block.py +1 -4
  374. chia/timelord/start_timelord.py +4 -4
  375. chia/timelord/timelord.py +44 -40
  376. chia/timelord/timelord_api.py +6 -4
  377. chia/timelord/timelord_launcher.py +2 -2
  378. chia/timelord/timelord_rpc_api.py +2 -2
  379. chia/timelord/timelord_state.py +11 -12
  380. chia/types/block_protocol.py +1 -3
  381. chia/types/blockchain_format/coin.py +1 -3
  382. chia/types/blockchain_format/program.py +11 -8
  383. chia/types/blockchain_format/proof_of_space.py +123 -76
  384. chia/types/blockchain_format/tree_hash.py +3 -3
  385. chia/types/blockchain_format/vdf.py +1 -2
  386. chia/types/coin_spend.py +3 -3
  387. chia/types/mempool_item.py +5 -5
  388. chia/types/mempool_submission_status.py +2 -3
  389. chia/types/peer_info.py +1 -2
  390. chia/types/unfinished_header_block.py +3 -4
  391. chia/types/validation_state.py +1 -2
  392. chia/util/action_scope.py +8 -8
  393. chia/util/async_pool.py +5 -5
  394. chia/util/bech32m.py +1 -2
  395. chia/util/beta_metrics.py +2 -2
  396. chia/util/block_cache.py +4 -4
  397. chia/util/chia_logging.py +2 -2
  398. chia/util/chia_version.py +1 -2
  399. chia/util/config.py +15 -16
  400. chia/util/db_wrapper.py +26 -27
  401. chia/util/default_root.py +1 -2
  402. chia/util/errors.py +3 -3
  403. chia/util/file_keyring.py +14 -14
  404. chia/util/files.py +2 -3
  405. chia/util/hash.py +4 -4
  406. chia/util/initial-config.yaml +3 -5
  407. chia/util/inline_executor.py +2 -1
  408. chia/util/ip_address.py +1 -2
  409. chia/util/keychain.py +25 -27
  410. chia/util/keyring_wrapper.py +18 -19
  411. chia/util/lock.py +3 -4
  412. chia/util/log_exceptions.py +1 -2
  413. chia/util/lru_cache.py +2 -2
  414. chia/util/network.py +6 -6
  415. chia/util/path.py +2 -3
  416. chia/util/priority_mutex.py +2 -2
  417. chia/util/profiler.py +1 -2
  418. chia/util/safe_cancel_task.py +1 -2
  419. chia/util/streamable.py +22 -8
  420. chia/util/task_referencer.py +1 -1
  421. chia/util/timing.py +3 -3
  422. chia/util/virtual_project_analysis.py +6 -5
  423. chia/util/ws_message.py +2 -2
  424. chia/wallet/cat_wallet/cat_info.py +3 -4
  425. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  426. chia/wallet/cat_wallet/cat_utils.py +3 -4
  427. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  428. chia/wallet/cat_wallet/lineage_store.py +3 -4
  429. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  430. chia/wallet/coin_selection.py +9 -10
  431. chia/wallet/conditions.py +120 -105
  432. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  433. chia/wallet/derivation_record.py +1 -2
  434. chia/wallet/derive_keys.py +2 -4
  435. chia/wallet/did_wallet/did_info.py +10 -11
  436. chia/wallet/did_wallet/did_wallet.py +36 -82
  437. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  438. chia/wallet/driver_protocol.py +5 -7
  439. chia/wallet/lineage_proof.py +4 -4
  440. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  441. chia/wallet/nft_wallet/nft_info.py +8 -9
  442. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  443. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  444. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  445. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  446. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  447. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  448. chia/wallet/notification_manager.py +3 -3
  449. chia/wallet/notification_store.py +44 -61
  450. chia/wallet/outer_puzzles.py +6 -7
  451. chia/wallet/puzzle_drivers.py +34 -6
  452. chia/wallet/puzzles/clawback/drivers.py +6 -6
  453. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  454. chia/wallet/puzzles/load_clvm.py +1 -1
  455. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  456. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  457. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  458. chia/wallet/puzzles/tails.py +3 -3
  459. chia/wallet/singleton.py +5 -7
  460. chia/wallet/singleton_record.py +3 -3
  461. chia/wallet/start_wallet.py +5 -5
  462. chia/wallet/trade_manager.py +37 -58
  463. chia/wallet/trade_record.py +4 -4
  464. chia/wallet/trading/offer.py +59 -46
  465. chia/wallet/trading/trade_store.py +8 -9
  466. chia/wallet/transaction_record.py +8 -8
  467. chia/wallet/uncurried_puzzle.py +1 -2
  468. chia/wallet/util/clvm_streamable.py +12 -12
  469. chia/wallet/util/compute_hints.py +4 -5
  470. chia/wallet/util/curry_and_treehash.py +1 -2
  471. chia/wallet/util/merkle_tree.py +2 -3
  472. chia/wallet/util/peer_request_cache.py +8 -8
  473. chia/wallet/util/signing.py +85 -0
  474. chia/wallet/util/tx_config.py +15 -6
  475. chia/wallet/util/wallet_sync_utils.py +14 -16
  476. chia/wallet/util/wallet_types.py +2 -2
  477. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  478. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  479. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  480. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  481. chia/wallet/vc_wallet/vc_store.py +5 -6
  482. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  483. chia/wallet/wallet.py +50 -78
  484. chia/wallet/wallet_action_scope.py +11 -11
  485. chia/wallet/wallet_blockchain.py +12 -12
  486. chia/wallet/wallet_coin_record.py +12 -6
  487. chia/wallet/wallet_coin_store.py +24 -25
  488. chia/wallet/wallet_interested_store.py +3 -5
  489. chia/wallet/wallet_nft_store.py +10 -11
  490. chia/wallet/wallet_node.py +53 -61
  491. chia/wallet/wallet_node_api.py +5 -3
  492. chia/wallet/wallet_protocol.py +23 -23
  493. chia/wallet/wallet_puzzle_store.py +15 -18
  494. chia/wallet/wallet_request_types.py +778 -114
  495. chia/wallet/wallet_retry_store.py +1 -3
  496. chia/wallet/wallet_rpc_api.py +572 -909
  497. chia/wallet/wallet_rpc_client.py +87 -279
  498. chia/wallet/wallet_singleton_store.py +3 -4
  499. chia/wallet/wallet_state_manager.py +332 -106
  500. chia/wallet/wallet_transaction_store.py +11 -14
  501. chia/wallet/wallet_user_store.py +4 -6
  502. chia/wallet/wallet_weight_proof_handler.py +4 -4
  503. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
  504. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
  505. chia/apis.py +0 -21
  506. chia/consensus/check_time_locks.py +0 -57
  507. chia/data_layer/puzzles/__init__.py +0 -0
  508. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  509. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  510. chia/types/coin_record.py +0 -44
  511. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  512. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  513. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  514. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  515. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  516. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  517. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  518. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  520. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  521. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  522. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  524. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  525. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  526. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
  527. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
  528. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
chia/cmds/dump_keyring.py CHANGED
@@ -5,7 +5,7 @@ from __future__ import annotations
5
5
  import os
6
6
  from io import TextIOWrapper
7
7
  from pathlib import Path
8
- from typing import Any, Optional, cast
8
+ from typing import Any, cast
9
9
 
10
10
  import click
11
11
  import colorama
@@ -48,8 +48,8 @@ def get_passphrase_prompt(keyring_file: str) -> str:
48
48
  )
49
49
  @click.option("--passphrase-file", type=click.File("r"), help="File or descriptor to read the passphrase from")
50
50
  @click.option("--pretty-print", is_flag=True, default=False)
51
- def dump(keyring_file: str, full_payload: bool, passphrase_file: Optional[TextIOWrapper], pretty_print: bool) -> None:
52
- saved_passphrase: Optional[str] = KeyringWrapper.get_shared_instance().get_master_passphrase_from_credential_store()
51
+ def dump(keyring_file: str, full_payload: bool, passphrase_file: TextIOWrapper | None, pretty_print: bool) -> None:
52
+ saved_passphrase: str | None = KeyringWrapper.get_shared_instance().get_master_passphrase_from_credential_store()
53
53
  passphrase: str = saved_passphrase or DEFAULT_PASSPHRASE_IF_NO_MASTER_PASSPHRASE
54
54
  prompt: str = get_passphrase_prompt(keyring_file)
55
55
 
chia/cmds/farm.py CHANGED
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  import click
6
4
 
7
5
  from chia.cmds.cmd_classes import ChiaCliContext
@@ -59,10 +57,10 @@ def farm_cmd() -> None:
59
57
  @click.pass_context
60
58
  def summary_cmd(
61
59
  ctx: click.Context,
62
- rpc_port: Optional[int],
63
- wallet_rpc_port: Optional[int],
64
- harvester_rpc_port: Optional[int],
65
- farmer_rpc_port: Optional[int],
60
+ rpc_port: int | None,
61
+ wallet_rpc_port: int | None,
62
+ harvester_rpc_port: int | None,
63
+ farmer_rpc_port: int | None,
66
64
  include_pool_rewards: bool,
67
65
  ) -> None:
68
66
  import asyncio
@@ -99,7 +97,7 @@ def summary_cmd(
99
97
  show_default=True,
100
98
  )
101
99
  @click.pass_context
102
- def challenges_cmd(ctx: click.Context, farmer_rpc_port: Optional[int], limit: int) -> None:
100
+ def challenges_cmd(ctx: click.Context, farmer_rpc_port: int | None, limit: int) -> None:
103
101
  import asyncio
104
102
 
105
103
  from chia.cmds.farm_funcs import challenges
@@ -120,7 +118,7 @@ def challenges_cmd(ctx: click.Context, farmer_rpc_port: Optional[int], limit: in
120
118
  @click.pass_context
121
119
  def connect_solver_cmd(
122
120
  ctx: click.Context,
123
- farmer_rpc_port: Optional[int],
121
+ farmer_rpc_port: int | None,
124
122
  solver_address: str,
125
123
  ) -> None:
126
124
  import asyncio
chia/cmds/farm_funcs.py CHANGED
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import sys
4
4
  import traceback
5
5
  from pathlib import Path
6
- from typing import Any, Optional
6
+ from typing import Any
7
7
 
8
8
  from chia_rs import BlockRecord
9
9
 
@@ -14,26 +14,27 @@ from chia.full_node.full_node_rpc_client import FullNodeRpcClient
14
14
  from chia.util.config import lock_and_load_config, save_config
15
15
  from chia.util.errors import CliRpcConnectionError
16
16
  from chia.util.network import is_localhost
17
+ from chia.wallet.wallet_request_types import GetFarmedAmount, GetFarmedAmountResponse
17
18
  from chia.wallet.wallet_rpc_client import WalletRpcClient
18
19
 
19
20
  SECONDS_PER_BLOCK = (24 * 3600) / 4608
20
21
 
21
22
 
22
- async def get_harvesters_summary(farmer_rpc_port: Optional[int], root_path: Path) -> Optional[dict[str, Any]]:
23
+ async def get_harvesters_summary(farmer_rpc_port: int | None, root_path: Path) -> dict[str, Any] | None:
23
24
  async with get_any_service_client(FarmerRpcClient, root_path, farmer_rpc_port) as (farmer_client, _):
24
25
  return await farmer_client.get_harvesters_summary()
25
26
 
26
27
 
27
- async def get_blockchain_state(rpc_port: Optional[int], root_path: Path) -> Optional[dict[str, Any]]:
28
+ async def get_blockchain_state(rpc_port: int | None, root_path: Path) -> dict[str, Any] | None:
28
29
  async with get_any_service_client(FullNodeRpcClient, root_path, rpc_port) as (client, _):
29
30
  return await client.get_blockchain_state()
30
31
 
31
32
 
32
- async def get_average_block_time(rpc_port: Optional[int], root_path: Path) -> float:
33
+ async def get_average_block_time(rpc_port: int | None, root_path: Path) -> float:
33
34
  async with get_any_service_client(FullNodeRpcClient, root_path, rpc_port) as (client, _):
34
35
  blocks_to_compare = 500
35
36
  blockchain_state = await client.get_blockchain_state()
36
- curr: Optional[BlockRecord] = blockchain_state["peak"]
37
+ curr: BlockRecord | None = blockchain_state["peak"]
37
38
  if curr is None or curr.height < (blocks_to_compare + 100):
38
39
  return SECONDS_PER_BLOCK
39
40
  while curr is not None and curr.height > 0 and not curr.is_transaction_block:
@@ -51,20 +52,20 @@ async def get_average_block_time(rpc_port: Optional[int], root_path: Path) -> fl
51
52
 
52
53
 
53
54
  async def get_wallets_stats(
54
- wallet_rpc_port: Optional[int],
55
+ wallet_rpc_port: int | None,
55
56
  root_path: Path,
56
57
  include_pool_rewards: bool,
57
- ) -> Optional[dict[str, Any]]:
58
+ ) -> GetFarmedAmountResponse | None:
58
59
  async with get_any_service_client(WalletRpcClient, root_path, wallet_rpc_port) as (wallet_client, _):
59
- return await wallet_client.get_farmed_amount(include_pool_rewards)
60
+ return await wallet_client.get_farmed_amount(GetFarmedAmount(include_pool_rewards))
60
61
 
61
62
 
62
- async def get_challenges(root_path: Path, farmer_rpc_port: Optional[int]) -> Optional[list[dict[str, Any]]]:
63
+ async def get_challenges(root_path: Path, farmer_rpc_port: int | None) -> list[dict[str, Any]] | None:
63
64
  async with get_any_service_client(FarmerRpcClient, root_path, farmer_rpc_port) as (farmer_client, _):
64
65
  return await farmer_client.get_signage_points()
65
66
 
66
67
 
67
- async def challenges(root_path: Path, farmer_rpc_port: Optional[int], limit: int) -> None:
68
+ async def challenges(root_path: Path, farmer_rpc_port: int | None, limit: int) -> None:
68
69
  signage_points = await get_challenges(root_path, farmer_rpc_port)
69
70
  if signage_points is None:
70
71
  return None
@@ -81,10 +82,10 @@ async def challenges(root_path: Path, farmer_rpc_port: Optional[int], limit: int
81
82
 
82
83
 
83
84
  async def summary(
84
- rpc_port: Optional[int],
85
- wallet_rpc_port: Optional[int],
86
- harvester_rpc_port: Optional[int],
87
- farmer_rpc_port: Optional[int],
85
+ rpc_port: int | None,
86
+ wallet_rpc_port: int | None,
87
+ harvester_rpc_port: int | None,
88
+ farmer_rpc_port: int | None,
88
89
  include_pool_rewards: bool,
89
90
  root_path: Path,
90
91
  ) -> None:
@@ -124,23 +125,23 @@ async def summary(
124
125
  print("Farming")
125
126
 
126
127
  if amounts is not None:
127
- print(f"Total chia farmed: {amounts['farmed_amount'] / units['chia']}")
128
- print(f"User transaction fees: {amounts['fee_amount'] / units['chia']}")
128
+ print(f"Total chia farmed: {amounts.farmed_amount / units['chia']}")
129
+ print(f"User transaction fees: {amounts.fee_amount / units['chia']}")
129
130
  if include_pool_rewards:
130
- print(f"Farmer rewards: {amounts['farmer_reward_amount'] / units['chia']}")
131
- print(f"Pool rewards: {amounts['pool_reward_amount'] / units['chia']}")
132
- print(f"Total rewards: {(amounts['farmer_reward_amount'] + amounts['pool_reward_amount']) / units['chia']}")
131
+ print(f"Farmer rewards: {amounts.farmer_reward_amount / units['chia']}")
132
+ print(f"Pool rewards: {amounts.pool_reward_amount / units['chia']}")
133
+ print(f"Total rewards: {(amounts.farmer_reward_amount + amounts.pool_reward_amount) / units['chia']}")
133
134
  if blockchain_state is not None and blockchain_state["peak"] is not None:
134
135
  peak_height = blockchain_state["peak"].height
135
- blocks_since_last_farm = peak_height - amounts["last_height_farmed"]
136
- print(f"Current/Last height farmed: {peak_height}/{amounts['last_height_farmed']}")
136
+ blocks_since_last_farm = peak_height - amounts.last_height_farmed
137
+ print(f"Current/Last height farmed: {peak_height}/{amounts.last_height_farmed}")
137
138
  print(f"Blocks since last farmed: {blocks_since_last_farm}")
138
139
  print(
139
140
  f"Time since last farmed: {format_minutes(int((blocks_since_last_farm * SECONDS_PER_BLOCK) / 60))}"
140
141
  )
141
142
  else:
142
- print(f"Block rewards: {(amounts['farmer_reward_amount'] + amounts['pool_reward_amount']) / units['chia']}")
143
- print(f"Last height farmed: {amounts['last_height_farmed']}")
143
+ print(f"Block rewards: {(amounts.farmer_reward_amount + amounts.pool_reward_amount) / units['chia']}")
144
+ print(f"Last height farmed: {amounts.last_height_farmed}")
144
145
 
145
146
  class PlotStats:
146
147
  total_plot_size = 0
@@ -220,7 +221,7 @@ async def summary(
220
221
  print("Note: log into your key using 'chia wallet show' to see rewards for each key")
221
222
 
222
223
 
223
- async def solver_connect(root_path: Path, farmer_rpc_port: Optional[int], solver_address: str) -> None:
224
+ async def solver_connect(root_path: Path, farmer_rpc_port: int | None, solver_address: str) -> None:
224
225
  from chia.util.network import parse_host_port
225
226
 
226
227
  try:
chia/cmds/init_funcs.py CHANGED
@@ -4,7 +4,7 @@ import os
4
4
  import shutil
5
5
  import sqlite3
6
6
  from pathlib import Path
7
- from typing import Any, Optional
7
+ from typing import Any
8
8
 
9
9
  import yaml
10
10
 
@@ -61,7 +61,7 @@ def dict_add_new_default(updated: dict[str, Any], default: dict[str, Any], do_no
61
61
  updated[k] = v
62
62
 
63
63
 
64
- def check_keys(new_root: Path, keychain: Optional[Keychain] = None) -> None:
64
+ def check_keys(new_root: Path, keychain: Keychain | None = None) -> None:
65
65
  if keychain is None:
66
66
  keychain = Keychain()
67
67
  all_sks = keychain.get_all_private_keys()
@@ -216,12 +216,12 @@ def copy_cert_files(cert_path: Path, new_path: Path) -> None:
216
216
 
217
217
 
218
218
  def init(
219
- create_certs: Optional[Path],
219
+ create_certs: Path | None,
220
220
  root_path: Path,
221
221
  fix_ssl_permissions: bool = False,
222
222
  testnet: bool = False,
223
223
  v1_db: bool = False,
224
- ) -> Optional[int]:
224
+ ) -> int | None:
225
225
  if create_certs is not None:
226
226
  if root_path.exists():
227
227
  if os.path.isdir(create_certs):
chia/cmds/keys.py CHANGED
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  import click
6
4
  from chia_rs import PrivateKey
7
5
 
@@ -28,7 +26,7 @@ def keys_cmd(ctx: click.Context) -> None:
28
26
  required=False,
29
27
  )
30
28
  @click.pass_context
31
- def generate_cmd(ctx: click.Context, label: Optional[str]) -> None:
29
+ def generate_cmd(ctx: click.Context, label: str | None) -> None:
32
30
  from chia.cmds.init_funcs import check_keys
33
31
  from chia.cmds.keys_funcs import generate_and_add
34
32
 
@@ -71,8 +69,8 @@ def show_cmd(
71
69
  show_mnemonic_seed: bool,
72
70
  non_observer_derivation: bool,
73
71
  json: bool,
74
- fingerprint: Optional[int],
75
- bech32m_prefix: Optional[str],
72
+ fingerprint: int | None,
73
+ bech32m_prefix: str | None,
76
74
  ) -> None:
77
75
  from chia.cmds.keys_funcs import show_keys
78
76
 
@@ -104,7 +102,7 @@ def show_cmd(
104
102
  required=False,
105
103
  )
106
104
  @click.pass_context
107
- def add_cmd(ctx: click.Context, filename: str, label: Optional[str]) -> None:
105
+ def add_cmd(ctx: click.Context, filename: str, label: str | None) -> None:
108
106
  from chia.cmds.init_funcs import check_keys
109
107
  from chia.cmds.keys_funcs import query_and_add_key_info
110
108
 
@@ -207,7 +205,7 @@ def generate_and_print_cmd() -> None:
207
205
  is_flag=True,
208
206
  )
209
207
  def sign_cmd(
210
- message: str, fingerprint: Optional[int], filename: Optional[str], hd_path: str, as_bytes: bool, json: bool
208
+ message: str, fingerprint: int | None, filename: str | None, hd_path: str, as_bytes: bool, json: bool
211
209
  ) -> None:
212
210
  from chia.cmds.keys_funcs import resolve_derivation_master_key, sign
213
211
 
@@ -280,7 +278,7 @@ def verify_cmd(message: str, public_key: str, signature: str, as_bytes: bool, js
280
278
  required=False,
281
279
  )
282
280
  @click.pass_context
283
- def derive_cmd(ctx: click.Context, fingerprint: Optional[int], filename: Optional[str]) -> None:
281
+ def derive_cmd(ctx: click.Context, fingerprint: int | None, filename: str | None) -> None:
284
282
  context = ChiaCliContext.set_default(ctx)
285
283
  context.keys_fingerprint = fingerprint
286
284
  context.keys_filename = filename
@@ -332,16 +330,16 @@ def search_cmd(
332
330
  non_observer_derivation: bool,
333
331
  show_progress: bool,
334
332
  search_type: tuple[str, ...],
335
- derive_from_hd_path: Optional[str],
336
- prefix: Optional[str],
333
+ derive_from_hd_path: str | None,
334
+ prefix: str | None,
337
335
  ) -> None:
338
336
  import sys
339
337
 
340
338
  from chia.cmds.keys_funcs import resolve_derivation_master_key, search_derive
341
339
 
342
340
  context = ChiaCliContext.set_default(ctx)
343
- fingerprint: Optional[int] = context.keys_fingerprint
344
- filename: Optional[str] = context.keys_filename
341
+ fingerprint: int | None = context.keys_fingerprint
342
+ filename: str | None = context.keys_filename
345
343
 
346
344
  # Specifying the master key is optional for the search command. If not specified, we'll search all keys.
347
345
  resolved_sk = None
@@ -371,8 +369,8 @@ class ResolutionError(Exception):
371
369
 
372
370
 
373
371
  def _resolve_fingerprint_and_sk(
374
- filename: Optional[str], fingerprint: Optional[int], non_observer_derivation: bool
375
- ) -> tuple[Optional[int], Optional[PrivateKey]]:
372
+ filename: str | None, fingerprint: int | None, non_observer_derivation: bool
373
+ ) -> tuple[int | None, PrivateKey | None]:
376
374
  from chia.cmds.keys_funcs import resolve_derivation_master_key
377
375
 
378
376
  reolved_fp, resolved_sk = resolve_derivation_master_key(filename if filename is not None else fingerprint)
@@ -412,7 +410,7 @@ def _resolve_fingerprint_and_sk(
412
410
  )
413
411
  @click.pass_context
414
412
  def wallet_address_cmd(
415
- ctx: click.Context, index: int, count: int, prefix: Optional[str], non_observer_derivation: bool, show_hd_path: bool
413
+ ctx: click.Context, index: int, count: int, prefix: str | None, non_observer_derivation: bool, show_hd_path: bool
416
414
  ) -> None:
417
415
  from chia.cmds.keys_funcs import derive_wallet_address
418
416
 
@@ -488,14 +486,14 @@ def wallet_address_cmd(
488
486
  @click.pass_context
489
487
  def child_key_cmd(
490
488
  ctx: click.Context,
491
- key_type: Optional[str],
492
- derive_from_hd_path: Optional[str],
489
+ key_type: str | None,
490
+ derive_from_hd_path: str | None,
493
491
  index: int,
494
492
  count: int,
495
493
  non_observer_derivation: bool,
496
494
  show_private_keys: bool,
497
495
  show_hd_path: bool,
498
- bech32m_prefix: Optional[str],
496
+ bech32m_prefix: str | None,
499
497
  ) -> None:
500
498
  from chia.cmds.keys_funcs import derive_child_key
501
499
 
chia/cmds/keys_funcs.py CHANGED
@@ -5,7 +5,7 @@ import os
5
5
  import sys
6
6
  from enum import Enum
7
7
  from pathlib import Path
8
- from typing import Any, Optional, Union
8
+ from typing import Any
9
9
 
10
10
  from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
11
11
  from chia_rs.sized_ints import uint32
@@ -58,7 +58,7 @@ def generate_and_print() -> str:
58
58
  return mnemonic
59
59
 
60
60
 
61
- def generate_and_add(label: Optional[str]) -> None:
61
+ def generate_and_add(label: str | None) -> None:
62
62
  """
63
63
  Generates a seed for a private key, prints the mnemonic to the terminal, and adds the key to the keyring.
64
64
  """
@@ -67,7 +67,7 @@ def generate_and_add(label: Optional[str]) -> None:
67
67
  query_and_add_key_info(mnemonic_or_pk=generate_mnemonic(), label=label)
68
68
 
69
69
 
70
- def query_and_add_key_info(mnemonic_or_pk: Optional[str], label: Optional[str] = None) -> None:
70
+ def query_and_add_key_info(mnemonic_or_pk: str | None, label: str | None = None) -> None:
71
71
  unlock_keyring()
72
72
  if mnemonic_or_pk is None:
73
73
  mnemonic_or_pk = input("Enter the mnemonic/observer key you want to use: ")
@@ -78,7 +78,7 @@ def query_and_add_key_info(mnemonic_or_pk: Optional[str], label: Optional[str] =
78
78
  add_key_info(mnemonic_or_pk, label)
79
79
 
80
80
 
81
- def add_key_info(mnemonic_or_pk: str, label: Optional[str]) -> None:
81
+ def add_key_info(mnemonic_or_pk: str, label: str | None) -> None:
82
82
  """
83
83
  Add a private key seed or public key to the keyring, with the given mnemonic and an optional label.
84
84
  """
@@ -136,7 +136,7 @@ def delete_key_label(fingerprint: int) -> None:
136
136
  sys.exit(f"Error: {e}")
137
137
 
138
138
 
139
- def format_pk_bech32_maybe(prefix: Optional[str], pubkey: str) -> str:
139
+ def format_pk_bech32_maybe(prefix: str | None, pubkey: str) -> str:
140
140
  return pubkey if prefix is None else bech32_encode(prefix, convertbits(list(bytes.fromhex(pubkey)), 8, 5))
141
141
 
142
142
 
@@ -145,8 +145,8 @@ def show_keys(
145
145
  show_mnemonic: bool,
146
146
  non_observer_derivation: bool,
147
147
  json_output: bool,
148
- fingerprint: Optional[int],
149
- bech32m_prefix: Optional[str],
148
+ fingerprint: int | None,
149
+ bech32m_prefix: str | None,
150
150
  ) -> None:
151
151
  """
152
152
  Prints all keys and mnemonics (if available).
@@ -190,7 +190,7 @@ def show_keys(
190
190
 
191
191
  if non_observer_derivation:
192
192
  if sk is None:
193
- first_wallet_pk: Optional[G1Element] = None
193
+ first_wallet_pk: G1Element | None = None
194
194
  else:
195
195
  first_wallet_pk = master_sk_to_wallet_sk(sk, uint32(0)).get_g1()
196
196
  else:
@@ -250,8 +250,8 @@ def delete(fingerprint: int) -> None:
250
250
 
251
251
 
252
252
  def derive_pk_and_sk_from_hd_path(
253
- master_pk: G1Element, hd_path_root: str, master_sk: Optional[PrivateKey] = None
254
- ) -> tuple[G1Element, Optional[PrivateKey], str]:
253
+ master_pk: G1Element, hd_path_root: str, master_sk: PrivateKey | None = None
254
+ ) -> tuple[G1Element, PrivateKey | None, str]:
255
255
  """
256
256
  Derive a private key from the provided HD path. Takes a master key and HD path as input,
257
257
  and returns the derived key and the HD path that was used to derive it.
@@ -290,7 +290,7 @@ def derive_pk_and_sk_from_hd_path(
290
290
 
291
291
  # Derive keys along the path
292
292
  if master_sk is not None:
293
- current_sk: Optional[PrivateKey] = master_sk
293
+ current_sk: PrivateKey | None = master_sk
294
294
  assert current_sk is not None
295
295
  for current_index, derivation_type in index_and_derivation_types:
296
296
  if derivation_type == DerivationType.NONOBSERVER:
@@ -359,10 +359,10 @@ def _clear_line_part(n: int) -> None:
359
359
 
360
360
  def _search_derived(
361
361
  current_pk: G1Element,
362
- current_sk: Optional[PrivateKey],
362
+ current_sk: PrivateKey | None,
363
363
  search_terms: tuple[str, ...],
364
364
  path: str,
365
- path_indices: Optional[list[int]],
365
+ path_indices: list[int] | None,
366
366
  limit: int,
367
367
  non_observer_derivation: bool,
368
368
  show_progress: bool,
@@ -417,7 +417,7 @@ def _search_derived(
417
417
  else:
418
418
  child_sk = None
419
419
 
420
- address: Optional[str] = None
420
+ address: str | None = None
421
421
 
422
422
  if search_address:
423
423
  # Generate a wallet address using the standard p2_delegated_puzzle_or_hidden_puzzle puzzle
@@ -427,7 +427,7 @@ def _search_derived(
427
427
 
428
428
  for term in remaining_search_terms:
429
429
  found_item: Any = None
430
- found_item_type: Optional[DerivedSearchResultType] = None
430
+ found_item_type: DerivedSearchResultType | None = None
431
431
 
432
432
  if search_private_key and term in str(child_sk):
433
433
  assert child_sk is not None # semantics above guarantee this
@@ -478,15 +478,15 @@ def _search_derived(
478
478
 
479
479
  def search_derive(
480
480
  root_path: Path,
481
- fingerprint: Optional[int],
481
+ fingerprint: int | None,
482
482
  search_terms: tuple[str, ...],
483
483
  limit: int,
484
484
  non_observer_derivation: bool,
485
485
  show_progress: bool,
486
486
  search_types: tuple[str, ...],
487
- derive_from_hd_path: Optional[str],
488
- prefix: Optional[str],
489
- private_key: Optional[PrivateKey],
487
+ derive_from_hd_path: str | None,
488
+ prefix: str | None,
489
+ private_key: PrivateKey | None,
490
490
  ) -> bool:
491
491
  """
492
492
  Searches for items derived from the provided private key, or if not specified,
@@ -513,7 +513,7 @@ def search_derive(
513
513
 
514
514
  if fingerprint is None and private_key is None:
515
515
  public_keys: list[G1Element] = Keychain().get_all_public_keys()
516
- private_keys: list[Optional[PrivateKey]] = [
516
+ private_keys: list[PrivateKey | None] = [
517
517
  data.private_key if data.secrets is not None else None for data in Keychain().get_keys(include_secrets=True)
518
518
  ]
519
519
  elif fingerprint is None:
@@ -643,13 +643,13 @@ def search_derive(
643
643
 
644
644
  def derive_wallet_address(
645
645
  root_path: Path,
646
- fingerprint: Optional[int],
646
+ fingerprint: int | None,
647
647
  index: int,
648
648
  count: int,
649
- prefix: Optional[str],
649
+ prefix: str | None,
650
650
  non_observer_derivation: bool,
651
651
  show_hd_path: bool,
652
- private_key: Optional[PrivateKey],
652
+ private_key: PrivateKey | None,
653
653
  ) -> None:
654
654
  """
655
655
  Generate wallet addresses using keys derived from the provided private key.
@@ -700,16 +700,16 @@ def private_key_string_repr(private_key: PrivateKey) -> str:
700
700
 
701
701
 
702
702
  def derive_child_key(
703
- fingerprint: Optional[int],
704
- key_type: Optional[str],
705
- derive_from_hd_path: Optional[str],
703
+ fingerprint: int | None,
704
+ key_type: str | None,
705
+ derive_from_hd_path: str | None,
706
706
  index: int,
707
707
  count: int,
708
708
  non_observer_derivation: bool,
709
709
  show_private_keys: bool,
710
710
  show_hd_path: bool,
711
- private_key: Optional[PrivateKey],
712
- bech32m_prefix: Optional[str],
711
+ private_key: PrivateKey | None,
712
+ bech32m_prefix: str | None,
713
713
  ) -> None:
714
714
  """
715
715
  Derive child keys from the provided master key.
@@ -719,7 +719,7 @@ def derive_child_key(
719
719
  if fingerprint is not None:
720
720
  key_data: KeyData = Keychain().get_key(fingerprint, include_secrets=True)
721
721
  current_pk: G1Element = key_data.public_key
722
- current_sk: Optional[PrivateKey] = key_data.private_key if key_data.secrets is not None else None
722
+ current_sk: PrivateKey | None = key_data.private_key if key_data.secrets is not None else None
723
723
  else:
724
724
  assert private_key is not None
725
725
  current_pk = private_key.get_g1()
@@ -776,7 +776,7 @@ def derive_child_key(
776
776
  hd_path: str = (
777
777
  " (" + hd_path_root + str(i) + ("n" if non_observer_derivation else "") + ")" if show_hd_path else ""
778
778
  )
779
- key_type_str: Optional[str]
779
+ key_type_str: str | None
780
780
 
781
781
  if key_type is not None:
782
782
  key_type_str = key_type.capitalize()
@@ -788,7 +788,7 @@ def derive_child_key(
788
788
  print(f"{key_type_str} private key {i}{hd_path}: {private_key_string_repr(sk)}")
789
789
 
790
790
 
791
- def private_key_for_fingerprint(fingerprint: int) -> Optional[PrivateKey]:
791
+ def private_key_for_fingerprint(fingerprint: int) -> PrivateKey | None:
792
792
  unlock_keyring()
793
793
  private_keys = Keychain().get_all_private_keys()
794
794
 
@@ -798,7 +798,7 @@ def private_key_for_fingerprint(fingerprint: int) -> Optional[PrivateKey]:
798
798
  return None
799
799
 
800
800
 
801
- def prompt_for_fingerprint() -> Optional[int]:
801
+ def prompt_for_fingerprint() -> int | None:
802
802
  fingerprints: list[int] = [pk.get_fingerprint() for pk in Keychain().get_all_public_keys()]
803
803
  while True:
804
804
  print("Choose key:")
@@ -822,8 +822,8 @@ def prompt_for_fingerprint() -> Optional[int]:
822
822
 
823
823
 
824
824
  def get_private_key_with_fingerprint_or_prompt(
825
- fingerprint: Optional[int],
826
- ) -> tuple[Optional[int], Optional[PrivateKey]]:
825
+ fingerprint: int | None,
826
+ ) -> tuple[int | None, PrivateKey | None]:
827
827
  """
828
828
  Get a private key with the specified fingerprint. If fingerprint is not
829
829
  specified, prompt the user to select a key.
@@ -848,8 +848,8 @@ def private_key_from_mnemonic_seed_file(filename: Path) -> PrivateKey:
848
848
 
849
849
 
850
850
  def resolve_derivation_master_key(
851
- fingerprint_or_filename: Optional[Union[int, str, Path]],
852
- ) -> tuple[Optional[int], Optional[PrivateKey]]:
851
+ fingerprint_or_filename: int | str | Path | None,
852
+ ) -> tuple[int | None, PrivateKey | None]:
853
853
  """
854
854
  Given a key fingerprint of file containing a mnemonic seed, return the private key.
855
855
  """
chia/cmds/netspace.py CHANGED
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  import click
6
4
 
7
5
  from chia.cmds.cmd_classes import ChiaCliContext
@@ -39,7 +37,7 @@ from chia.cmds.cmd_classes import ChiaCliContext
39
37
  default="",
40
38
  )
41
39
  @click.pass_context
42
- def netspace_cmd(ctx: click.Context, rpc_port: Optional[int], delta_block_height: str, start: str) -> None:
40
+ def netspace_cmd(ctx: click.Context, rpc_port: int | None, delta_block_height: str, start: str) -> None:
43
41
  """
44
42
  Calculates the estimated space on the network given two block header hashes.
45
43
  """
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from pathlib import Path
4
- from typing import Optional
5
4
 
6
5
  from chia_rs.sized_bytes import bytes32
7
6
 
@@ -9,7 +8,7 @@ from chia.cmds.cmds_util import format_bytes, get_any_service_client
9
8
  from chia.full_node.full_node_rpc_client import FullNodeRpcClient
10
9
 
11
10
 
12
- async def netstorge_async(root_path: Path, rpc_port: Optional[int], delta_block_height: str, start: str) -> None:
11
+ async def netstorge_async(root_path: Path, rpc_port: int | None, delta_block_height: str, start: str) -> None:
13
12
  """
14
13
  Calculates the estimated space on the network given two block header hashes.
15
14
  """
chia/cmds/options.py CHANGED
@@ -1,12 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Callable, TypeVar, Union
3
+ from collections.abc import Callable
4
+ from typing import Any, TypeVar
4
5
 
5
6
  import click
6
7
 
7
8
  from chia.cmds.param_types import TransactionFeeParamType
8
9
 
9
- FC = TypeVar("FC", bound=Union[Callable[..., Any], click.Command])
10
+ FC = TypeVar("FC", bound=Callable[..., Any] | click.Command)
10
11
 
11
12
 
12
13
  def create_fingerprint(required: bool = False) -> Callable[[FC], FC]: