chia-blockchain 2.5.7rc3__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 +12 -7
  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 +16 -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.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
  504. {chia_blockchain-2.5.7rc3.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.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
  527. {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
  528. {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,35 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ from typing import ClassVar
5
+
6
+ from typing_extensions import Protocol
7
+
8
+ from chia.protocols.introducer_protocol import RequestPeersIntroducer
9
+ from chia.protocols.outbound_message import Message
10
+ from chia.server.api_protocol import ApiMetadata, ApiProtocol
11
+ from chia.server.ws_connection import WSChiaConnection
12
+
13
+
14
+ class IntroducerApiStub(ApiProtocol, Protocol):
15
+ """Non-functional API stub for IntroducerAPI
16
+
17
+ This is a protocol definition only - methods are not implemented and should
18
+ never be called. Use the actual IntroducerAPI implementation at runtime.
19
+ """
20
+
21
+ log: logging.Logger
22
+ metadata: ClassVar[ApiMetadata] = ApiMetadata()
23
+
24
+ def ready(self) -> bool:
25
+ """Check if the introducer is ready."""
26
+ ...
27
+
28
+ @metadata.request(peer_required=True)
29
+ async def request_peers_introducer(
30
+ self,
31
+ request: RequestPeersIntroducer,
32
+ peer: WSChiaConnection,
33
+ ) -> Message | None:
34
+ """Handle request for peers from a node."""
35
+ ...
@@ -0,0 +1,30 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ from typing import ClassVar
5
+
6
+ from typing_extensions import Protocol
7
+
8
+ from chia.protocols.outbound_message import Message
9
+ from chia.protocols.solver_protocol import SolverInfo
10
+ from chia.server.api_protocol import ApiMetadata, ApiProtocol
11
+
12
+
13
+ class SolverApiStub(ApiProtocol, Protocol):
14
+ """Non-functional API stub for SolverAPI
15
+
16
+ This is a protocol definition only - methods are not implemented and should
17
+ never be called. Use the actual SolverAPI implementation at runtime.
18
+ """
19
+
20
+ log: logging.Logger
21
+ metadata: ClassVar[ApiMetadata] = ApiMetadata()
22
+
23
+ def ready(self) -> bool:
24
+ """Check if the solver is ready."""
25
+ ...
26
+
27
+ @metadata.request(peer_required=False)
28
+ async def solve(self, request: SolverInfo) -> Message | None:
29
+ """Handle solver request."""
30
+ ...
@@ -0,0 +1,21 @@
1
+ from __future__ import annotations
2
+
3
+ from chia.apis.farmer_stub import FarmerApiStub
4
+ from chia.apis.full_node_stub import FullNodeApiStub
5
+ from chia.apis.harvester_stub import HarvesterApiStub
6
+ from chia.apis.introducer_stub import IntroducerApiStub
7
+ from chia.apis.solver_stub import SolverApiStub
8
+ from chia.apis.timelord_stub import TimelordApiStub
9
+ from chia.apis.wallet_stub import WalletNodeApiStub
10
+ from chia.protocols.outbound_message import NodeType
11
+ from chia.server.api_protocol import ApiMetadata
12
+
13
+ StubMetadataRegistry: dict[NodeType, ApiMetadata] = {
14
+ NodeType.FULL_NODE: FullNodeApiStub.metadata,
15
+ NodeType.WALLET: WalletNodeApiStub.metadata,
16
+ NodeType.INTRODUCER: IntroducerApiStub.metadata,
17
+ NodeType.TIMELORD: TimelordApiStub.metadata,
18
+ NodeType.FARMER: FarmerApiStub.metadata,
19
+ NodeType.HARVESTER: HarvesterApiStub.metadata,
20
+ NodeType.SOLVER: SolverApiStub.metadata,
21
+ }
@@ -0,0 +1,39 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ from typing import ClassVar
5
+
6
+ from typing_extensions import Protocol
7
+
8
+ from chia.protocols.timelord_protocol import NewPeakTimelord, NewUnfinishedBlockTimelord, RequestCompactProofOfTime
9
+ from chia.server.api_protocol import ApiMetadata, ApiProtocol
10
+
11
+
12
+ class TimelordApiStub(ApiProtocol, Protocol):
13
+ """Non-functional API stub for TimelordAPI
14
+
15
+ This is a protocol definition only - methods are not implemented and should
16
+ never be called. Use the actual TimelordAPI implementation at runtime.
17
+ """
18
+
19
+ log: logging.Logger
20
+ metadata: ClassVar[ApiMetadata] = ApiMetadata()
21
+
22
+ def ready(self) -> bool:
23
+ """Check if the timelord is ready."""
24
+ ...
25
+
26
+ @metadata.request()
27
+ async def new_peak_timelord(self, new_peak: NewPeakTimelord) -> None:
28
+ """Handle new peak from full node."""
29
+ ...
30
+
31
+ @metadata.request()
32
+ async def new_unfinished_block_timelord(self, new_unfinished_block: NewUnfinishedBlockTimelord) -> None:
33
+ """Handle new unfinished block from full node."""
34
+ ...
35
+
36
+ @metadata.request()
37
+ async def request_compact_proof_of_time(self, vdf_info: RequestCompactProofOfTime) -> None:
38
+ """Handle request for compact proof of time."""
39
+ ...
@@ -0,0 +1,161 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ from typing import ClassVar
5
+
6
+ from chia_rs import RespondToPhUpdates
7
+ from typing_extensions import Protocol
8
+
9
+ from chia.protocols import full_node_protocol, introducer_protocol, wallet_protocol
10
+ from chia.protocols.wallet_protocol import (
11
+ CoinStateUpdate,
12
+ RejectAdditionsRequest,
13
+ RejectBlockHeaders,
14
+ RejectHeaderBlocks,
15
+ RejectHeaderRequest,
16
+ RejectPuzzleSolution,
17
+ RejectRemovalsRequest,
18
+ RespondAdditions,
19
+ RespondBlockHeader,
20
+ RespondBlockHeaders,
21
+ RespondChildren,
22
+ RespondHeaderBlocks,
23
+ RespondPuzzleSolution,
24
+ RespondRemovals,
25
+ RespondSESInfo,
26
+ RespondToCoinUpdates,
27
+ TransactionAck,
28
+ )
29
+ from chia.server.api_protocol import ApiMetadata, ApiProtocol
30
+ from chia.server.ws_connection import WSChiaConnection
31
+
32
+
33
+ class WalletNodeApiStub(ApiProtocol, Protocol):
34
+ """Non-functional API stub for WalletNodeAPI
35
+
36
+ This is a protocol definition only - methods are not implemented and should
37
+ never be called. Use the actual WalletNodeAPI implementation at runtime.
38
+ """
39
+
40
+ log: logging.Logger
41
+ metadata: ClassVar[ApiMetadata] = ApiMetadata()
42
+
43
+ def ready(self) -> bool:
44
+ """Check if the wallet is ready."""
45
+ ...
46
+
47
+ @metadata.request(peer_required=True)
48
+ async def respond_removals(self, response: RespondRemovals, peer: WSChiaConnection) -> None:
49
+ """Handle removals response from full node."""
50
+ ...
51
+
52
+ async def reject_removals_request(self, response: RejectRemovalsRequest, peer: WSChiaConnection) -> None:
53
+ """Handle reject removals request from full node."""
54
+ ...
55
+
56
+ @metadata.request()
57
+ async def reject_additions_request(self, response: RejectAdditionsRequest) -> None:
58
+ """Handle reject additions request from full node."""
59
+ ...
60
+
61
+ @metadata.request(peer_required=True, execute_task=True)
62
+ async def new_peak_wallet(self, peak: wallet_protocol.NewPeakWallet, peer: WSChiaConnection) -> None:
63
+ """Handle new peak from full node."""
64
+ ...
65
+
66
+ @metadata.request()
67
+ async def reject_header_request(self, response: RejectHeaderRequest) -> None:
68
+ """Handle reject header request from full node."""
69
+ ...
70
+
71
+ @metadata.request()
72
+ async def respond_block_header(self, response: RespondBlockHeader) -> None:
73
+ """Handle block header response from full node."""
74
+ ...
75
+
76
+ @metadata.request(peer_required=True)
77
+ async def respond_additions(self, response: RespondAdditions, peer: WSChiaConnection) -> None:
78
+ """Handle additions response from full node."""
79
+ ...
80
+
81
+ @metadata.request()
82
+ async def respond_proof_of_weight(self, response: full_node_protocol.RespondProofOfWeight) -> None:
83
+ """Handle proof of weight response from full node."""
84
+ ...
85
+
86
+ @metadata.request(peer_required=True)
87
+ async def transaction_ack(self, ack: TransactionAck, peer: WSChiaConnection) -> None:
88
+ """Handle transaction acknowledgment from full node."""
89
+ ...
90
+
91
+ @metadata.request(peer_required=True)
92
+ async def respond_peers_introducer(
93
+ self, request: introducer_protocol.RespondPeersIntroducer, peer: WSChiaConnection
94
+ ) -> None:
95
+ """Handle peers response from introducer."""
96
+ ...
97
+
98
+ @metadata.request(peer_required=True)
99
+ async def respond_peers(self, request: full_node_protocol.RespondPeers, peer: WSChiaConnection) -> None:
100
+ """Handle peers response from full node."""
101
+ ...
102
+
103
+ @metadata.request()
104
+ async def respond_puzzle_solution(self, request: RespondPuzzleSolution) -> None:
105
+ """Handle puzzle solution response from full node."""
106
+ ...
107
+
108
+ @metadata.request()
109
+ async def reject_puzzle_solution(self, request: RejectPuzzleSolution) -> None:
110
+ """Handle reject puzzle solution from full node."""
111
+ ...
112
+
113
+ @metadata.request()
114
+ async def respond_header_blocks(self, request: RespondHeaderBlocks) -> None:
115
+ """Handle header blocks response from full node."""
116
+ ...
117
+
118
+ @metadata.request()
119
+ async def respond_block_headers(self, request: RespondBlockHeaders) -> None:
120
+ """Handle block headers response from full node."""
121
+ ...
122
+
123
+ @metadata.request()
124
+ async def reject_header_blocks(self, request: RejectHeaderBlocks) -> None:
125
+ """Handle reject header blocks from full node."""
126
+ ...
127
+
128
+ @metadata.request()
129
+ async def reject_block_headers(self, request: RejectBlockHeaders) -> None:
130
+ """Handle reject block headers from full node."""
131
+ ...
132
+
133
+ @metadata.request(peer_required=True, execute_task=True)
134
+ async def coin_state_update(self, request: CoinStateUpdate, peer: WSChiaConnection) -> None:
135
+ """Handle coin state update from full node."""
136
+ ...
137
+
138
+ @metadata.request() # type: ignore[type-var]
139
+ async def respond_to_ph_updates(self, request: RespondToPhUpdates) -> None:
140
+ """Handle puzzle hash updates response from full node."""
141
+ ...
142
+
143
+ @metadata.request()
144
+ async def respond_to_coin_updates(self, request: RespondToCoinUpdates) -> None:
145
+ """Handle coin updates response from full node."""
146
+ ...
147
+
148
+ @metadata.request()
149
+ async def respond_children(self, request: RespondChildren) -> None:
150
+ """Handle children response from full node."""
151
+ ...
152
+
153
+ @metadata.request()
154
+ async def respond_ses_hashes(self, request: RespondSESInfo) -> None:
155
+ """Handle SES hashes response from full node."""
156
+ ...
157
+
158
+ @metadata.request()
159
+ async def respond_blocks(self, request: full_node_protocol.RespondBlocks) -> None:
160
+ """Handle blocks response from full node."""
161
+ ...
chia/cmds/beta.py CHANGED
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
  import zipfile
4
4
  from datetime import datetime
5
5
  from pathlib import Path
6
- from typing import Optional
7
6
 
8
7
  import click
9
8
 
@@ -37,7 +36,7 @@ def beta_cmd() -> None:
37
36
  @click.option("-p", "--path", help="The beta mode root path", type=str, required=False)
38
37
  @click.option("-i", "--interval", help="System metrics will be logged based on this interval", type=int, required=False)
39
38
  @click.pass_context
40
- def configure(ctx: click.Context, path: Optional[str], interval: Optional[int]) -> None:
39
+ def configure(ctx: click.Context, path: str | None, interval: int | None) -> None:
41
40
  root_path = ChiaCliContext.set_default(ctx).root_path
42
41
  with lock_and_load_config(root_path, "config.yaml") as config:
43
42
  if "beta" not in config:
@@ -79,7 +78,7 @@ def configure(ctx: click.Context, path: Optional[str], interval: Optional[int])
79
78
  )
80
79
  @click.option("-p", "--path", help="The beta mode root path", type=str, required=False)
81
80
  @click.pass_context
82
- def enable_cmd(ctx: click.Context, force: bool, path: Optional[str]) -> None:
81
+ def enable_cmd(ctx: click.Context, force: bool, path: str | None) -> None:
83
82
  root_path = ChiaCliContext.set_default(ctx).root_path
84
83
  with lock_and_load_config(root_path, "config.yaml") as config:
85
84
  if config.get("beta", {}).get("enabled", False):
@@ -92,7 +91,7 @@ def enable_cmd(ctx: click.Context, force: bool, path: Optional[str]) -> None:
92
91
  current_path = config.get("beta", {}).get("path")
93
92
  current_path = None if current_path is None else Path(current_path)
94
93
 
95
- path_to_use: Optional[Path] = None if path is None else Path(path)
94
+ path_to_use: Path | None = None if path is None else Path(path)
96
95
  if path_to_use is None:
97
96
  path_to_use = current_path
98
97
 
chia/cmds/beta_funcs.py CHANGED
@@ -2,8 +2,9 @@ from __future__ import annotations
2
2
 
3
3
  import os
4
4
  import sys
5
+ from collections.abc import Callable
5
6
  from pathlib import Path
6
- from typing import Any, Callable, Optional
7
+ from typing import Any
7
8
 
8
9
  import click
9
10
 
@@ -36,7 +37,7 @@ def prompt_beta_warning() -> bool:
36
37
 
37
38
 
38
39
  def prompt_for_beta_path(default_path: Path) -> Path:
39
- path: Optional[Path] = None
40
+ path: Path | None = None
40
41
  for _ in range(3):
41
42
  user_input = input(
42
43
  "\nEnter a directory where the beta test logs can be stored or press enter to use the default "
@@ -65,7 +66,7 @@ def prompt_for_beta_path(default_path: Path) -> Path:
65
66
 
66
67
 
67
68
  def prompt_for_metrics_log_interval(default_interval: int) -> int:
68
- interval: Optional[int] = None
69
+ interval: int | None = None
69
70
  for _ in range(3):
70
71
  user_input = input(
71
72
  "\nEnter a number of seconds as interval in which analytics getting logged, press enter to use the default "
@@ -6,7 +6,7 @@ from collections import defaultdict
6
6
  from collections.abc import Iterable
7
7
  from pathlib import Path
8
8
  from sqlite3 import Row
9
- from typing import Any, Optional
9
+ from typing import Any
10
10
 
11
11
  from chia.util.collection import find_duplicates
12
12
  from chia.util.db_synchronous import db_synchronous_on
@@ -208,7 +208,7 @@ class WalletDBReader:
208
208
  db_wrapper: DBWrapper2 # TODO: Remove db_wrapper member
209
209
  # TODO: make this a dataclass and make this an instance attribute instead of a mutable classvar
210
210
  config = {"db_readers": 1} # noqa: RUF012
211
- sql_log_path: Optional[Path] = None
211
+ sql_log_path: Path | None = None
212
212
  verbose = False
213
213
 
214
214
  async def get_all_wallets(self) -> list[Wallet]:
@@ -258,7 +258,7 @@ class WalletDBReader:
258
258
  except Exception as e:
259
259
  errors.append(f"Exception while trying to access wallet {main_wallet_id} from users_wallets: {e}")
260
260
 
261
- max_id: Optional[int] = None
261
+ max_id: int | None = None
262
262
  max_id_row = await execute_fetchone(reader, "SELECT MAX(id) FROM users_wallets")
263
263
  if max_id_row is None:
264
264
  errors.append("Error fetching max wallet ID from table users_wallets. No wallets ?!?")
@@ -397,7 +397,7 @@ class WalletDBReader:
397
397
  return len(errors)
398
398
 
399
399
 
400
- async def scan(root_path: Path, db_path: Optional[str] = None, *, verbose: bool = False) -> None:
400
+ async def scan(root_path: Path, db_path: str | None = None, *, verbose: bool = False) -> None:
401
401
  if db_path is None:
402
402
  wallet_db_path = root_path / "wallet" / "db"
403
403
  wallet_db_paths = list(wallet_db_path.glob("blockchain_wallet_*.sqlite"))
chia/cmds/chia.py CHANGED
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from io import TextIOWrapper
4
- from typing import Optional
5
4
 
6
5
  import click
7
6
 
@@ -60,7 +59,7 @@ def cli(
60
59
  ctx: click.Context,
61
60
  root_path: str,
62
61
  keys_root_path: str,
63
- passphrase_file: Optional[TextIOWrapper] = None,
62
+ passphrase_file: TextIOWrapper | None = None,
64
63
  ) -> None:
65
64
  from pathlib import Path
66
65
 
chia/cmds/cmd_classes.py CHANGED
@@ -5,14 +5,12 @@ import collections
5
5
  import dataclasses
6
6
  import inspect
7
7
  import pathlib
8
+ from collections.abc import Callable
8
9
  from dataclasses import MISSING, dataclass, field, fields
9
10
  from typing import (
10
11
  Any,
11
- Callable,
12
12
  ClassVar,
13
- Optional,
14
13
  Protocol,
15
- Union,
16
14
  final,
17
15
  get_args,
18
16
  get_origin,
@@ -40,7 +38,7 @@ class AsyncChiaCommand(Protocol):
40
38
  async def run(self) -> None: ...
41
39
 
42
40
 
43
- ChiaCommand = Union[SyncChiaCommand, AsyncChiaCommand]
41
+ ChiaCommand = SyncChiaCommand | AsyncChiaCommand
44
42
 
45
43
 
46
44
  def option(*param_decls: str, **kwargs: Any) -> Any:
@@ -62,11 +60,11 @@ class ChiaCliContext:
62
60
 
63
61
  root_path: pathlib.Path = DEFAULT_ROOT_PATH
64
62
  keys_root_path: pathlib.Path = DEFAULT_KEYS_ROOT_PATH
65
- expected_prefix: Optional[str] = None
66
- rpc_port: Optional[int] = None
67
- keys_fingerprint: Optional[int] = None
68
- keys_filename: Optional[str] = None
69
- expected_address_prefix: Optional[str] = None
63
+ expected_prefix: str | None = None
64
+ rpc_port: int | None = None
65
+ keys_fingerprint: int | None = None
66
+ keys_filename: str | None = None
67
+ expected_address_prefix: str | None = None
70
68
 
71
69
  @classmethod
72
70
  def set_default(cls, ctx: click.Context) -> ChiaCliContext:
@@ -82,7 +80,7 @@ class ChiaCliContext:
82
80
  class HexString(click.ParamType):
83
81
  name = "hexstring"
84
82
 
85
- def convert(self, value: str, param: Optional[click.Parameter], ctx: Optional[click.Context]) -> bytes:
83
+ def convert(self, value: str, param: click.Parameter | None, ctx: click.Context | None) -> bytes:
86
84
  if isinstance(value, bytes): # This if is due to some poor handling on click's part
87
85
  return value
88
86
  try:
@@ -94,7 +92,7 @@ class HexString(click.ParamType):
94
92
  class HexString32(click.ParamType):
95
93
  name = "hexstring32"
96
94
 
97
- def convert(self, value: str, param: Optional[click.Parameter], ctx: Optional[click.Context]) -> bytes32:
95
+ def convert(self, value: str, param: click.Parameter | None, ctx: click.Context | None) -> bytes32:
98
96
  if isinstance(value, bytes32): # This if is due to some poor handling on click's part
99
97
  return value
100
98
  try:
@@ -255,7 +253,7 @@ def _convert_class_to_function(cls: type[ChiaCommand]) -> SyncCmd:
255
253
  @dataclass_transform(frozen_default=True)
256
254
  def chia_command(
257
255
  *,
258
- group: Optional[click.Group] = None,
256
+ group: click.Group | None = None,
259
257
  name: str,
260
258
  short_help: str,
261
259
  help: str,
@@ -294,7 +292,7 @@ class Metadata:
294
292
 
295
293
 
296
294
  def get_chia_command_metadata(cls: type[ChiaCommand]) -> Metadata:
297
- metadata: Optional[Metadata] = getattr(cls, _chia_command_metadata_attribute, None)
295
+ metadata: Metadata | None = getattr(cls, _chia_command_metadata_attribute, None)
298
296
  if metadata is None:
299
297
  raise Exception(f"Class is not a chia command: {cls}")
300
298
 
chia/cmds/cmd_helpers.py CHANGED
@@ -1,11 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections.abc import AsyncIterator, Coroutine, Sequence
3
+ from collections.abc import AsyncIterator, Callable, Coroutine, Sequence
4
4
  from contextlib import asynccontextmanager
5
5
  from dataclasses import dataclass, field
6
6
  from functools import cached_property
7
7
  from pathlib import Path
8
- from typing import Any, Callable, Optional, TypeVar
8
+ from typing import Any, TypeVar
9
9
 
10
10
  from chia_rs.sized_bytes import bytes32
11
11
  from chia_rs.sized_ints import uint64
@@ -29,8 +29,8 @@ class WalletClientInfo:
29
29
  @command_helper
30
30
  class NeedsWalletRPC:
31
31
  context: ChiaCliContext = field(default_factory=ChiaCliContext)
32
- client_info: Optional[WalletClientInfo] = None
33
- wallet_rpc_port: Optional[int] = option(
32
+ client_info: WalletClientInfo | None = None
33
+ wallet_rpc_port: int | None = option(
34
34
  "-wp",
35
35
  "--wallet-rpc_port",
36
36
  help=(
@@ -39,7 +39,7 @@ class NeedsWalletRPC:
39
39
  type=int,
40
40
  default=None,
41
41
  )
42
- fingerprint: Optional[int] = option(
42
+ fingerprint: int | None = option(
43
43
  "-f",
44
44
  "--fingerprint",
45
45
  help="Fingerprint of the wallet to use",
@@ -78,7 +78,7 @@ class TransactionsIn:
78
78
 
79
79
  @command_helper
80
80
  class TransactionsOut:
81
- transaction_file_out: Optional[str] = option(
81
+ transaction_file_out: str | None = option(
82
82
  "--transaction-file-out",
83
83
  type=str,
84
84
  default=None,
@@ -138,7 +138,7 @@ class NeedsCoinSelectionConfig:
138
138
 
139
139
  @command_helper
140
140
  class NeedsTXConfig(NeedsCoinSelectionConfig):
141
- reuse: Optional[bool] = option(
141
+ reuse: bool | None = option(
142
142
  "--reuse/--new-address",
143
143
  "--reuse-puzhash/--generate-new-puzhash",
144
144
  help="Reuse existing address for the change.",
@@ -189,7 +189,7 @@ class TransactionEndpoint:
189
189
  push: bool = option(
190
190
  "--push/--no-push", help="Push the transaction to the network", type=bool, is_flag=True, default=True
191
191
  )
192
- valid_at: Optional[int] = option(
192
+ valid_at: int | None = option(
193
193
  "--valid-at",
194
194
  help="UNIX timestamp at which the associated transactions become valid",
195
195
  type=int,
@@ -197,7 +197,7 @@ class TransactionEndpoint:
197
197
  default=None,
198
198
  hidden=True,
199
199
  )
200
- expires_at: Optional[int] = option(
200
+ expires_at: int | None = option(
201
201
  "--expires-at",
202
202
  help="UNIX timestamp at which the associated transactions expire",
203
203
  type=int,
@@ -223,14 +223,14 @@ class TransactionEndpoint:
223
223
 
224
224
  @dataclass(frozen=True)
225
225
  class TransactionEndpointWithTimelocks(TransactionEndpoint):
226
- valid_at: Optional[int] = option(
226
+ valid_at: int | None = option(
227
227
  "--valid-at",
228
228
  help="UNIX timestamp at which the associated transactions become valid",
229
229
  type=int,
230
230
  required=False,
231
231
  default=None,
232
232
  )
233
- expires_at: Optional[int] = option(
233
+ expires_at: int | None = option(
234
234
  "--expires-at",
235
235
  help="UNIX timestamp at which the associated transactions expire",
236
236
  type=int,
chia/cmds/cmds_util.py CHANGED
@@ -4,10 +4,10 @@ import contextlib
4
4
  import dataclasses
5
5
  import logging
6
6
  import traceback
7
- from collections.abc import AsyncIterator
7
+ from collections.abc import AsyncIterator, Callable
8
8
  from contextlib import asynccontextmanager
9
9
  from pathlib import Path
10
- from typing import Any, Callable, Optional, TypeVar
10
+ from typing import Any, TypeVar
11
11
 
12
12
  import click
13
13
  from aiohttp import ClientConnectorCertificateError, ClientConnectorError
@@ -98,7 +98,7 @@ async def validate_client_connection(
98
98
  async def get_any_service_client(
99
99
  client_type: type[_T_RpcClient],
100
100
  root_path: Path,
101
- rpc_port: Optional[int] = None,
101
+ rpc_port: int | None = None,
102
102
  consume_errors: bool = True,
103
103
  use_ssl: bool = True,
104
104
  ) -> AsyncIterator[tuple[_T_RpcClient, dict[str, Any]]]:
@@ -154,9 +154,9 @@ async def get_any_service_client(
154
154
  print(f"Exception from '{node_type}' {e}:\n{traceback.format_exc()}")
155
155
 
156
156
 
157
- async def get_wallet(root_path: Path, wallet_client: WalletRpcClient, fingerprint: Optional[int]) -> int:
157
+ async def get_wallet(root_path: Path, wallet_client: WalletRpcClient, fingerprint: int | None) -> int:
158
158
  selected_fingerprint: int
159
- keychain_proxy: Optional[KeychainProxy] = None
159
+ keychain_proxy: KeychainProxy | None = None
160
160
  all_keys: list[KeyData] = []
161
161
 
162
162
  try:
@@ -176,8 +176,8 @@ async def get_wallet(root_path: Path, wallet_client: WalletRpcClient, fingerprin
176
176
  # if only a single key is available, select it automatically
177
177
  selected_fingerprint = fingerprints[0]
178
178
  else:
179
- logged_in_fingerprint: Optional[int] = (await wallet_client.get_logged_in_fingerprint()).fingerprint
180
- logged_in_key: Optional[KeyData] = None
179
+ logged_in_fingerprint: int | None = (await wallet_client.get_logged_in_fingerprint()).fingerprint
180
+ logged_in_key: KeyData | None = None
181
181
  if logged_in_fingerprint is not None:
182
182
  logged_in_key = next((key for key in all_keys if key.fingerprint == logged_in_fingerprint), None)
183
183
  current_sync_status: str = ""
@@ -251,8 +251,8 @@ async def get_wallet(root_path: Path, wallet_client: WalletRpcClient, fingerprin
251
251
  @asynccontextmanager
252
252
  async def get_wallet_client(
253
253
  root_path: Path,
254
- wallet_rpc_port: Optional[int] = None,
255
- fingerprint: Optional[int] = None,
254
+ wallet_rpc_port: int | None = None,
255
+ fingerprint: int | None = None,
256
256
  consume_errors: bool = True,
257
257
  ) -> AsyncIterator[tuple[WalletRpcClient, int, dict[str, Any]]]:
258
258
  async with get_any_service_client(WalletRpcClient, root_path, wallet_rpc_port, consume_errors) as (
@@ -321,7 +321,7 @@ def tx_config_args(func: Callable[..., None]) -> Callable[..., None]:
321
321
  )(coin_selection_args(func))
322
322
 
323
323
 
324
- def timelock_args(enable: Optional[bool] = None) -> Callable[[Callable[..., None]], Callable[..., None]]:
324
+ def timelock_args(enable: bool | None = None) -> Callable[[Callable[..., None]], Callable[..., None]]:
325
325
  def _timelock_args(func: Callable[..., None]) -> Callable[..., None]:
326
326
  def _convert_timelock_args_to_cvt(*args: Any, **kwargs: Any) -> None:
327
327
  func(
@@ -361,11 +361,11 @@ class TransactionBundle(Streamable):
361
361
 
362
362
 
363
363
  def tx_out_cmd(
364
- enable_timelock_args: Optional[bool] = None,
364
+ enable_timelock_args: bool | None = None,
365
365
  ) -> Callable[[Callable[..., list[TransactionRecord]]], Callable[..., None]]:
366
366
  def _tx_out_cmd(func: Callable[..., list[TransactionRecord]]) -> Callable[..., None]:
367
367
  @timelock_args(enable=enable_timelock_args)
368
- def original_cmd(transaction_file_out: Optional[str] = None, **kwargs: Any) -> None:
368
+ def original_cmd(transaction_file_out: str | None = None, **kwargs: Any) -> None:
369
369
  txs: list[TransactionRecord] = func(**kwargs)
370
370
  if transaction_file_out is not None:
371
371
  print(f"Writing transactions to file {transaction_file_out}:")
@@ -391,8 +391,8 @@ def tx_out_cmd(
391
391
  class CMDCoinSelectionConfigLoader:
392
392
  min_coin_amount: CliAmount = cli_amount_none
393
393
  max_coin_amount: CliAmount = cli_amount_none
394
- excluded_coin_amounts: Optional[list[CliAmount]] = None
395
- excluded_coin_ids: Optional[list[bytes32]] = None
394
+ excluded_coin_amounts: list[CliAmount] | None = None
395
+ excluded_coin_ids: list[bytes32] | None = None
396
396
 
397
397
  def to_coin_selection_config(self, mojo_per_unit: int) -> CoinSelectionConfig:
398
398
  return CoinSelectionConfigLoader(
@@ -409,7 +409,7 @@ class CMDCoinSelectionConfigLoader:
409
409
 
410
410
  @dataclasses.dataclass(frozen=True)
411
411
  class CMDTXConfigLoader(CMDCoinSelectionConfigLoader):
412
- reuse_puzhash: Optional[bool] = None
412
+ reuse_puzhash: bool | None = None
413
413
 
414
414
  def to_tx_config(self, mojo_per_unit: int, config: dict[str, Any], fingerprint: int) -> TXConfig:
415
415
  cs_config = self.to_coin_selection_config(mojo_per_unit)