chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.6.0rc2__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 (531) 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_blockchain_transactions.py +5 -2
  6. chia/_tests/blockchain/test_build_chains.py +2 -4
  7. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  8. chia/_tests/clvm/coin_store.py +4 -7
  9. chia/_tests/clvm/test_clvm_step.py +4 -4
  10. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  11. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  12. chia/_tests/clvm/test_singletons.py +2 -4
  13. chia/_tests/clvm/test_spend_sim.py +2 -2
  14. chia/_tests/cmds/cmd_test_utils.py +27 -45
  15. chia/_tests/cmds/test_cmd_framework.py +6 -6
  16. chia/_tests/cmds/test_daemon.py +3 -3
  17. chia/_tests/cmds/test_show.py +4 -4
  18. chia/_tests/cmds/test_tx_config_args.py +1 -2
  19. chia/_tests/cmds/testing_classes.py +4 -5
  20. chia/_tests/cmds/wallet/test_did.py +24 -27
  21. chia/_tests/cmds/wallet/test_nft.py +12 -10
  22. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  23. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  24. chia/_tests/conftest.py +66 -31
  25. chia/_tests/connection_utils.py +2 -2
  26. chia/_tests/core/cmds/test_beta.py +4 -4
  27. chia/_tests/core/cmds/test_keys.py +2 -3
  28. chia/_tests/core/cmds/test_wallet.py +15 -15
  29. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  30. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  31. chia/_tests/core/daemon/test_daemon.py +11 -11
  32. chia/_tests/core/data_layer/conftest.py +2 -2
  33. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  34. chia/_tests/core/data_layer/test_data_store.py +10 -10
  35. chia/_tests/core/data_layer/util.py +11 -11
  36. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  37. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  38. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  39. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  40. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  41. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  42. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  43. chia/_tests/core/full_node/test_conditions.py +21 -23
  44. chia/_tests/core/full_node/test_full_node.py +273 -70
  45. chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
  46. chia/_tests/core/full_node/test_hint_management.py +2 -4
  47. chia/_tests/core/full_node/test_performance.py +0 -1
  48. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  49. chia/_tests/core/full_node/test_transactions.py +1 -2
  50. chia/_tests/core/full_node/test_tx_processing_queue.py +198 -30
  51. chia/_tests/core/mempool/test_mempool.py +54 -50
  52. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  53. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  54. chia/_tests/core/mempool/test_mempool_manager.py +988 -854
  55. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  56. chia/_tests/core/server/serve.py +7 -7
  57. chia/_tests/core/server/test_dos.py +1 -2
  58. chia/_tests/core/server/test_event_loop.py +12 -4
  59. chia/_tests/core/server/test_loop.py +7 -8
  60. chia/_tests/core/server/test_rate_limits.py +9 -8
  61. chia/_tests/core/server/test_server.py +61 -1
  62. chia/_tests/core/services/test_services.py +2 -2
  63. chia/_tests/core/ssl/test_ssl.py +2 -2
  64. chia/_tests/core/test_cost_calculation.py +2 -6
  65. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  66. chia/_tests/core/test_filter.py +0 -1
  67. chia/_tests/core/test_full_node_rpc.py +2 -2
  68. chia/_tests/core/test_merkle_set.py +1 -2
  69. chia/_tests/core/test_seeder.py +4 -4
  70. chia/_tests/core/util/test_config.py +4 -4
  71. chia/_tests/core/util/test_jsonify.py +2 -2
  72. chia/_tests/core/util/test_keychain.py +3 -3
  73. chia/_tests/core/util/test_lockfile.py +2 -1
  74. chia/_tests/core/util/test_log_exceptions.py +1 -2
  75. chia/_tests/core/util/test_streamable.py +17 -17
  76. chia/_tests/db/test_db_wrapper.py +3 -2
  77. chia/_tests/environments/wallet.py +14 -14
  78. chia/_tests/ether.py +4 -3
  79. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  80. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  81. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  82. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  83. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  84. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  85. chia/_tests/harvester/test_harvester_api.py +11 -4
  86. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  87. chia/_tests/plot_sync/test_receiver.py +11 -10
  88. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  89. chia/_tests/plot_sync/util.py +1 -2
  90. chia/_tests/plotting/test_plot_manager.py +7 -6
  91. chia/_tests/plotting/test_prover.py +30 -38
  92. chia/_tests/pools/test_pool_cmdline.py +4 -6
  93. chia/_tests/pools/test_pool_rpc.py +203 -61
  94. chia/_tests/pools/test_pool_wallet.py +3 -3
  95. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  96. chia/_tests/process_junit.py +2 -2
  97. chia/_tests/rpc/test_rpc_client.py +4 -4
  98. chia/_tests/rpc/test_rpc_server.py +3 -3
  99. chia/_tests/simulation/test_simulation.py +12 -25
  100. chia/_tests/solver/test_solver_service.py +13 -4
  101. chia/_tests/testconfig.py +2 -2
  102. chia/_tests/timelord/test_new_peak.py +22 -11
  103. chia/_tests/tools/test_run_block.py +0 -2
  104. chia/_tests/tools/test_virtual_project.py +2 -1
  105. chia/_tests/util/benchmarks.py +1 -0
  106. chia/_tests/util/blockchain.py +38 -36
  107. chia/_tests/util/blockchain_mock.py +11 -11
  108. chia/_tests/util/build_network_protocol_files.py +2 -1
  109. chia/_tests/util/coin_store.py +2 -1
  110. chia/_tests/util/config.py +1 -1
  111. chia/_tests/util/db_connection.py +2 -3
  112. chia/_tests/util/full_sync.py +9 -11
  113. chia/_tests/util/gen_ssl_certs.py +4 -5
  114. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  115. chia/_tests/util/misc.py +24 -24
  116. chia/_tests/util/network_protocol_data.py +20 -3
  117. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  118. chia/_tests/util/protocol_messages_json.py +292 -3
  119. chia/_tests/util/setup_nodes.py +62 -47
  120. chia/_tests/util/spend_sim.py +57 -57
  121. chia/_tests/util/test_async_pool.py +2 -3
  122. chia/_tests/util/test_chia_version.py +1 -3
  123. chia/_tests/util/test_config.py +3 -3
  124. chia/_tests/util/test_full_block_utils.py +6 -3
  125. chia/_tests/util/test_limited_semaphore.py +1 -2
  126. chia/_tests/util/test_misc.py +2 -2
  127. chia/_tests/util/test_network.py +1 -2
  128. chia/_tests/util/test_priority_mutex.py +3 -3
  129. chia/_tests/util/test_recursive_replace.py +5 -6
  130. chia/_tests/util/test_replace_str_to_bytes.py +9 -10
  131. chia/_tests/util/test_testnet_overrides.py +3 -3
  132. chia/_tests/util/time_out_assert.py +2 -2
  133. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  134. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  135. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  136. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  137. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  138. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  139. chia/_tests/wallet/conftest.py +6 -6
  140. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  141. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  142. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  145. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  146. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  147. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  148. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  149. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  150. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  151. chia/_tests/wallet/sync/test_wallet_sync.py +63 -60
  152. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  153. chia/_tests/wallet/test_coin_management.py +2 -2
  154. chia/_tests/wallet/test_conditions.py +45 -51
  155. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  156. chia/_tests/wallet/test_new_wallet_protocol.py +17 -17
  157. chia/_tests/wallet/test_notifications.py +14 -14
  158. chia/_tests/wallet/test_signer_protocol.py +5 -5
  159. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  160. chia/_tests/wallet/test_transaction_store.py +20 -20
  161. chia/_tests/wallet/test_util.py +2 -2
  162. chia/_tests/wallet/test_wallet.py +380 -228
  163. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  164. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  165. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  166. chia/_tests/wallet/test_wallet_node.py +16 -15
  167. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  168. chia/_tests/wallet/test_wallet_utils.py +2 -3
  169. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  170. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  171. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  172. chia/_tests/wallet/wallet_block_tools.py +12 -11
  173. chia/_tests/weight_proof/config.py +1 -0
  174. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  175. chia/apis/__init__.py +21 -0
  176. chia/apis/farmer_stub.py +102 -0
  177. chia/apis/full_node_stub.py +374 -0
  178. chia/apis/harvester_stub.py +57 -0
  179. chia/apis/introducer_stub.py +35 -0
  180. chia/apis/solver_stub.py +30 -0
  181. chia/apis/stub_protocol_registry.py +21 -0
  182. chia/apis/timelord_stub.py +39 -0
  183. chia/apis/wallet_stub.py +161 -0
  184. chia/cmds/beta.py +3 -4
  185. chia/cmds/beta_funcs.py +4 -3
  186. chia/cmds/check_wallet_db.py +4 -4
  187. chia/cmds/chia.py +1 -2
  188. chia/cmds/cmd_classes.py +11 -13
  189. chia/cmds/cmd_helpers.py +11 -11
  190. chia/cmds/cmds_util.py +15 -15
  191. chia/cmds/coin_funcs.py +6 -7
  192. chia/cmds/coins.py +2 -3
  193. chia/cmds/configure.py +1 -2
  194. chia/cmds/data.py +42 -42
  195. chia/cmds/data_funcs.py +81 -81
  196. chia/cmds/db.py +4 -5
  197. chia/cmds/db_backup_func.py +2 -2
  198. chia/cmds/db_upgrade_func.py +3 -3
  199. chia/cmds/db_validate_func.py +2 -2
  200. chia/cmds/dev/data.py +4 -4
  201. chia/cmds/dev/gh.py +5 -5
  202. chia/cmds/dev/installers.py +2 -3
  203. chia/cmds/dev/mempool.py +3 -4
  204. chia/cmds/dev/mempool_funcs.py +4 -4
  205. chia/cmds/dev/sim.py +8 -8
  206. chia/cmds/dump_keyring.py +3 -3
  207. chia/cmds/farm.py +6 -8
  208. chia/cmds/farm_funcs.py +25 -24
  209. chia/cmds/init_funcs.py +4 -4
  210. chia/cmds/keys.py +16 -18
  211. chia/cmds/keys_funcs.py +36 -36
  212. chia/cmds/netspace.py +1 -3
  213. chia/cmds/netspace_funcs.py +1 -2
  214. chia/cmds/options.py +3 -2
  215. chia/cmds/param_types.py +17 -16
  216. chia/cmds/passphrase.py +6 -7
  217. chia/cmds/passphrase_funcs.py +11 -13
  218. chia/cmds/peer.py +1 -3
  219. chia/cmds/peer_funcs.py +3 -3
  220. chia/cmds/plotnft.py +6 -7
  221. chia/cmds/plotnft_funcs.py +37 -26
  222. chia/cmds/rpc.py +3 -3
  223. chia/cmds/show.py +3 -5
  224. chia/cmds/show_funcs.py +9 -9
  225. chia/cmds/sim_funcs.py +25 -26
  226. chia/cmds/solver.py +1 -3
  227. chia/cmds/solver_funcs.py +1 -2
  228. chia/cmds/start_funcs.py +2 -2
  229. chia/cmds/wallet.py +76 -81
  230. chia/cmds/wallet_funcs.py +206 -177
  231. chia/consensus/augmented_chain.py +6 -6
  232. chia/consensus/block_body_validation.py +19 -15
  233. chia/consensus/block_creation.py +25 -21
  234. chia/consensus/block_header_validation.py +27 -13
  235. chia/consensus/block_height_map.py +3 -6
  236. chia/consensus/block_height_map_protocol.py +2 -2
  237. chia/consensus/block_record.py +2 -4
  238. chia/consensus/blockchain.py +58 -40
  239. chia/consensus/blockchain_interface.py +7 -7
  240. chia/consensus/coin_store_protocol.py +5 -6
  241. chia/consensus/condition_tools.py +4 -4
  242. chia/consensus/cost_calculator.py +2 -3
  243. chia/consensus/default_constants.py +19 -13
  244. chia/consensus/deficit.py +1 -3
  245. chia/consensus/difficulty_adjustment.py +3 -5
  246. chia/consensus/find_fork_point.py +2 -4
  247. chia/consensus/full_block_to_block_record.py +11 -13
  248. chia/consensus/generator_tools.py +2 -3
  249. chia/consensus/get_block_challenge.py +50 -26
  250. chia/consensus/get_block_generator.py +2 -3
  251. chia/consensus/make_sub_epoch_summary.py +8 -7
  252. chia/consensus/multiprocess_validation.py +31 -20
  253. chia/consensus/pos_quality.py +6 -23
  254. chia/consensus/pot_iterations.py +17 -44
  255. chia/consensus/signage_point.py +4 -5
  256. chia/consensus/vdf_info_computation.py +2 -4
  257. chia/daemon/client.py +8 -8
  258. chia/daemon/keychain_proxy.py +31 -37
  259. chia/daemon/server.py +32 -33
  260. chia/daemon/windows_signal.py +4 -3
  261. chia/data_layer/data_layer.py +86 -77
  262. chia/data_layer/data_layer_rpc_api.py +9 -9
  263. chia/data_layer/data_layer_rpc_client.py +13 -15
  264. chia/data_layer/data_layer_server.py +3 -3
  265. chia/data_layer/data_layer_util.py +14 -14
  266. chia/data_layer/data_layer_wallet.py +94 -101
  267. chia/data_layer/data_store.py +50 -50
  268. chia/data_layer/dl_wallet_store.py +9 -12
  269. chia/data_layer/download_data.py +8 -9
  270. chia/data_layer/s3_plugin_service.py +5 -9
  271. chia/data_layer/start_data_layer.py +5 -5
  272. chia/farmer/farmer.py +31 -31
  273. chia/farmer/farmer_api.py +45 -33
  274. chia/farmer/farmer_rpc_api.py +5 -4
  275. chia/farmer/farmer_rpc_client.py +6 -6
  276. chia/farmer/start_farmer.py +6 -6
  277. chia/full_node/block_store.py +13 -16
  278. chia/full_node/check_fork_next_block.py +1 -2
  279. chia/full_node/coin_store.py +15 -16
  280. chia/full_node/eligible_coin_spends.py +3 -3
  281. chia/full_node/fee_estimate_store.py +2 -3
  282. chia/full_node/fee_tracker.py +1 -2
  283. chia/full_node/full_block_utils.py +4 -4
  284. chia/full_node/full_node.py +239 -223
  285. chia/full_node/full_node_api.py +197 -152
  286. chia/full_node/full_node_rpc_api.py +34 -32
  287. chia/full_node/full_node_rpc_client.py +18 -19
  288. chia/full_node/full_node_store.py +45 -43
  289. chia/full_node/hard_fork_utils.py +44 -0
  290. chia/full_node/hint_management.py +2 -2
  291. chia/full_node/mempool.py +17 -19
  292. chia/full_node/mempool_manager.py +89 -42
  293. chia/full_node/pending_tx_cache.py +2 -3
  294. chia/full_node/start_full_node.py +5 -5
  295. chia/full_node/sync_store.py +3 -4
  296. chia/full_node/tx_processing_queue.py +120 -36
  297. chia/full_node/weight_proof.py +61 -48
  298. chia/harvester/harvester.py +25 -24
  299. chia/harvester/harvester_api.py +61 -38
  300. chia/harvester/harvester_rpc_api.py +10 -10
  301. chia/harvester/start_harvester.py +4 -4
  302. chia/introducer/introducer.py +3 -3
  303. chia/introducer/introducer_api.py +6 -4
  304. chia/introducer/start_introducer.py +4 -4
  305. chia/legacy/keyring.py +3 -3
  306. chia/plot_sync/delta.py +1 -2
  307. chia/plot_sync/receiver.py +20 -17
  308. chia/plot_sync/sender.py +15 -10
  309. chia/plotters/bladebit.py +7 -7
  310. chia/plotters/chiapos.py +2 -2
  311. chia/plotters/madmax.py +4 -4
  312. chia/plotters/plotters.py +4 -4
  313. chia/plotters/plotters_util.py +3 -3
  314. chia/plotting/cache.py +20 -14
  315. chia/plotting/check_plots.py +26 -35
  316. chia/plotting/create_plots.py +22 -23
  317. chia/plotting/manager.py +21 -14
  318. chia/plotting/prover.py +59 -42
  319. chia/plotting/util.py +16 -16
  320. chia/pools/pool_config.py +2 -1
  321. chia/pools/pool_puzzles.py +11 -12
  322. chia/pools/pool_wallet.py +34 -57
  323. chia/pools/pool_wallet_info.py +39 -10
  324. chia/protocols/farmer_protocol.py +8 -9
  325. chia/protocols/fee_estimate.py +3 -4
  326. chia/protocols/full_node_protocol.py +3 -4
  327. chia/protocols/harvester_protocol.py +27 -15
  328. chia/protocols/outbound_message.py +3 -3
  329. chia/protocols/pool_protocol.py +8 -9
  330. chia/protocols/shared_protocol.py +1 -2
  331. chia/protocols/solver_protocol.py +9 -2
  332. chia/protocols/timelord_protocol.py +4 -7
  333. chia/protocols/wallet_protocol.py +11 -12
  334. chia/rpc/rpc_client.py +9 -9
  335. chia/rpc/rpc_server.py +17 -17
  336. chia/rpc/util.py +2 -2
  337. chia/seeder/crawler.py +8 -8
  338. chia/seeder/crawler_api.py +21 -27
  339. chia/seeder/crawler_rpc_api.py +2 -2
  340. chia/seeder/dns_server.py +21 -21
  341. chia/seeder/start_crawler.py +4 -4
  342. chia/server/address_manager.py +15 -16
  343. chia/server/api_protocol.py +11 -11
  344. chia/server/chia_policy.py +46 -26
  345. chia/server/introducer_peers.py +2 -3
  346. chia/server/node_discovery.py +19 -19
  347. chia/server/rate_limit_numbers.py +4 -5
  348. chia/server/rate_limits.py +4 -4
  349. chia/server/resolve_peer_info.py +4 -4
  350. chia/server/server.py +49 -52
  351. chia/server/signal_handlers.py +6 -6
  352. chia/server/start_service.py +17 -17
  353. chia/server/upnp.py +4 -6
  354. chia/server/ws_connection.py +52 -37
  355. chia/simulator/add_blocks_in_batches.py +1 -3
  356. chia/simulator/block_tools.py +312 -200
  357. chia/simulator/full_node_simulator.py +56 -35
  358. chia/simulator/keyring.py +2 -3
  359. chia/simulator/setup_services.py +15 -15
  360. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  361. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  362. chia/simulator/simulator_protocol.py +1 -2
  363. chia/simulator/simulator_test_tools.py +3 -3
  364. chia/simulator/start_simulator.py +7 -7
  365. chia/simulator/wallet_tools.py +10 -10
  366. chia/solver/solver.py +10 -10
  367. chia/solver/solver_api.py +10 -8
  368. chia/solver/solver_rpc_api.py +2 -2
  369. chia/solver/start_solver.py +4 -4
  370. chia/ssl/cacert.pem +148 -90
  371. chia/ssl/chia_ca.crt +14 -10
  372. chia/ssl/chia_ca_old.crt +19 -0
  373. chia/ssl/create_ssl.py +4 -4
  374. chia/ssl/renewedselfsignedca.conf +4 -0
  375. chia/ssl/ssl_check.py +1 -2
  376. chia/timelord/iters_from_block.py +1 -4
  377. chia/timelord/start_timelord.py +4 -4
  378. chia/timelord/timelord.py +44 -40
  379. chia/timelord/timelord_api.py +6 -4
  380. chia/timelord/timelord_launcher.py +2 -2
  381. chia/timelord/timelord_rpc_api.py +2 -2
  382. chia/timelord/timelord_state.py +11 -12
  383. chia/types/block_protocol.py +1 -3
  384. chia/types/blockchain_format/coin.py +1 -3
  385. chia/types/blockchain_format/program.py +11 -8
  386. chia/types/blockchain_format/proof_of_space.py +123 -76
  387. chia/types/blockchain_format/tree_hash.py +3 -3
  388. chia/types/blockchain_format/vdf.py +1 -2
  389. chia/types/coin_spend.py +3 -3
  390. chia/types/mempool_item.py +5 -5
  391. chia/types/mempool_submission_status.py +2 -3
  392. chia/types/peer_info.py +1 -2
  393. chia/types/unfinished_header_block.py +3 -4
  394. chia/types/validation_state.py +1 -2
  395. chia/util/action_scope.py +8 -8
  396. chia/util/async_pool.py +5 -5
  397. chia/util/bech32m.py +1 -2
  398. chia/util/beta_metrics.py +2 -2
  399. chia/util/block_cache.py +4 -4
  400. chia/util/chia_logging.py +2 -2
  401. chia/util/chia_version.py +1 -2
  402. chia/util/config.py +15 -16
  403. chia/util/db_wrapper.py +26 -27
  404. chia/util/default_root.py +1 -2
  405. chia/util/errors.py +3 -3
  406. chia/util/file_keyring.py +14 -14
  407. chia/util/files.py +2 -3
  408. chia/util/hash.py +4 -4
  409. chia/util/initial-config.yaml +4 -5
  410. chia/util/inline_executor.py +2 -1
  411. chia/util/ip_address.py +1 -2
  412. chia/util/keychain.py +25 -27
  413. chia/util/keyring_wrapper.py +18 -19
  414. chia/util/lock.py +3 -4
  415. chia/util/log_exceptions.py +1 -2
  416. chia/util/lru_cache.py +2 -2
  417. chia/util/network.py +6 -6
  418. chia/util/path.py +2 -3
  419. chia/util/priority_mutex.py +2 -2
  420. chia/util/profiler.py +1 -2
  421. chia/util/safe_cancel_task.py +1 -2
  422. chia/util/streamable.py +24 -10
  423. chia/util/task_referencer.py +1 -1
  424. chia/util/timing.py +3 -3
  425. chia/util/virtual_project_analysis.py +6 -5
  426. chia/util/ws_message.py +2 -2
  427. chia/wallet/cat_wallet/cat_info.py +3 -4
  428. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  429. chia/wallet/cat_wallet/cat_utils.py +3 -4
  430. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  431. chia/wallet/cat_wallet/lineage_store.py +3 -4
  432. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  433. chia/wallet/coin_selection.py +9 -10
  434. chia/wallet/conditions.py +142 -106
  435. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  436. chia/wallet/derivation_record.py +1 -2
  437. chia/wallet/derive_keys.py +2 -4
  438. chia/wallet/did_wallet/did_info.py +10 -11
  439. chia/wallet/did_wallet/did_wallet.py +36 -82
  440. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  441. chia/wallet/driver_protocol.py +5 -7
  442. chia/wallet/lineage_proof.py +4 -4
  443. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  444. chia/wallet/nft_wallet/nft_info.py +8 -9
  445. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  446. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  447. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  448. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  449. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  450. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  451. chia/wallet/notification_manager.py +3 -3
  452. chia/wallet/notification_store.py +44 -61
  453. chia/wallet/outer_puzzles.py +6 -7
  454. chia/wallet/puzzle_drivers.py +34 -6
  455. chia/wallet/puzzles/clawback/drivers.py +6 -6
  456. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  457. chia/wallet/puzzles/load_clvm.py +1 -1
  458. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  459. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  460. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  461. chia/wallet/puzzles/tails.py +3 -3
  462. chia/wallet/singleton.py +5 -7
  463. chia/wallet/singleton_record.py +3 -3
  464. chia/wallet/start_wallet.py +5 -5
  465. chia/wallet/trade_manager.py +37 -58
  466. chia/wallet/trade_record.py +4 -4
  467. chia/wallet/trading/offer.py +59 -46
  468. chia/wallet/trading/trade_store.py +8 -9
  469. chia/wallet/transaction_record.py +8 -8
  470. chia/wallet/uncurried_puzzle.py +1 -2
  471. chia/wallet/util/clvm_streamable.py +12 -12
  472. chia/wallet/util/compute_hints.py +4 -5
  473. chia/wallet/util/curry_and_treehash.py +1 -2
  474. chia/wallet/util/merkle_tree.py +2 -3
  475. chia/wallet/util/peer_request_cache.py +8 -8
  476. chia/wallet/util/signing.py +85 -0
  477. chia/wallet/util/tx_config.py +15 -6
  478. chia/wallet/util/wallet_sync_utils.py +14 -16
  479. chia/wallet/util/wallet_types.py +2 -2
  480. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  481. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  482. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  483. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  484. chia/wallet/vc_wallet/vc_store.py +5 -6
  485. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  486. chia/wallet/wallet.py +50 -78
  487. chia/wallet/wallet_action_scope.py +11 -11
  488. chia/wallet/wallet_blockchain.py +12 -12
  489. chia/wallet/wallet_coin_record.py +12 -6
  490. chia/wallet/wallet_coin_store.py +24 -25
  491. chia/wallet/wallet_interested_store.py +3 -5
  492. chia/wallet/wallet_nft_store.py +10 -11
  493. chia/wallet/wallet_node.py +53 -61
  494. chia/wallet/wallet_node_api.py +5 -3
  495. chia/wallet/wallet_protocol.py +23 -23
  496. chia/wallet/wallet_puzzle_store.py +15 -18
  497. chia/wallet/wallet_request_types.py +778 -114
  498. chia/wallet/wallet_retry_store.py +1 -3
  499. chia/wallet/wallet_rpc_api.py +572 -909
  500. chia/wallet/wallet_rpc_client.py +87 -279
  501. chia/wallet/wallet_singleton_store.py +3 -4
  502. chia/wallet/wallet_state_manager.py +332 -106
  503. chia/wallet/wallet_transaction_store.py +11 -14
  504. chia/wallet/wallet_user_store.py +4 -6
  505. chia/wallet/wallet_weight_proof_handler.py +4 -4
  506. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/METADATA +6 -5
  507. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
  508. chia/apis.py +0 -21
  509. chia/consensus/check_time_locks.py +0 -57
  510. chia/data_layer/puzzles/__init__.py +0 -0
  511. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  512. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  513. chia/types/coin_record.py +0 -44
  514. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  515. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  516. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  517. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  518. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  520. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  521. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  522. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  524. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  525. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  526. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  527. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  528. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  529. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/WHEEL +0 -0
  530. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
  531. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
chia/util/config.py CHANGED
@@ -10,20 +10,19 @@ import sys
10
10
  import tempfile
11
11
  import time
12
12
  import traceback
13
- from collections.abc import Iterator
13
+ from collections.abc import Callable, Iterator
14
14
  from pathlib import Path
15
- from typing import Any, Callable, Optional, Union, cast
15
+ from typing import Any, Literal, cast
16
16
 
17
17
  import importlib_resources
18
18
  import yaml
19
- from typing_extensions import Literal
20
19
 
21
20
  from chia.util.lock import Lockfile
22
21
 
23
22
  log = logging.getLogger(__name__)
24
23
 
25
24
 
26
- def initial_config_file(filename: Union[str, Path]) -> str:
25
+ def initial_config_file(filename: str | Path) -> str:
27
26
  initial_config_path = importlib_resources.files(__name__.rpartition(".")[0]).joinpath(f"initial-{filename}")
28
27
  contents: str = initial_config_path.read_text(encoding="utf-8")
29
28
  return contents
@@ -43,7 +42,7 @@ def create_default_chia_config(root_path: Path, filenames: list[str] = ["config.
43
42
  shutil.move(str(tmp_path), str(path))
44
43
 
45
44
 
46
- def config_path_for_filename(root_path: Path, filename: Union[str, Path]) -> Path:
45
+ def config_path_for_filename(root_path: Path, filename: str | Path) -> Path:
47
46
  path_filename = Path(filename)
48
47
  if path_filename.is_absolute():
49
48
  return path_filename
@@ -51,7 +50,7 @@ def config_path_for_filename(root_path: Path, filename: Union[str, Path]) -> Pat
51
50
 
52
51
 
53
52
  @contextlib.contextmanager
54
- def lock_config(root_path: Path, filename: Union[str, Path]) -> Iterator[None]:
53
+ def lock_config(root_path: Path, filename: str | Path) -> Iterator[None]:
55
54
  # TODO: This is presently used in some tests to lock the saving of the
56
55
  # configuration file without having loaded it right there. This usage
57
56
  # should probably be removed and this function made private.
@@ -63,7 +62,7 @@ def lock_config(root_path: Path, filename: Union[str, Path]) -> Iterator[None]:
63
62
  @contextlib.contextmanager
64
63
  def lock_and_load_config(
65
64
  root_path: Path,
66
- filename: Union[str, Path],
65
+ filename: str | Path,
67
66
  fill_missing_services: bool = False,
68
67
  ) -> Iterator[dict[str, Any]]:
69
68
  with lock_config(root_path=root_path, filename=filename):
@@ -76,7 +75,7 @@ def lock_and_load_config(
76
75
  yield config
77
76
 
78
77
 
79
- def save_config(root_path: Path, filename: Union[str, Path], config_data: Any) -> None:
78
+ def save_config(root_path: Path, filename: str | Path, config_data: Any) -> None:
80
79
  # This must be called under an acquired config lock
81
80
  path: Path = config_path_for_filename(root_path, filename)
82
81
  with tempfile.TemporaryDirectory(dir=path.parent) as tmp_dir:
@@ -91,8 +90,8 @@ def save_config(root_path: Path, filename: Union[str, Path], config_data: Any) -
91
90
 
92
91
  def load_config(
93
92
  root_path: Path,
94
- filename: Union[str, Path],
95
- sub_config: Optional[str] = None,
93
+ filename: str | Path,
94
+ sub_config: str | None = None,
96
95
  exit_on_error: bool = True,
97
96
  fill_missing_services: bool = False,
98
97
  ) -> dict[str, Any]:
@@ -108,8 +107,8 @@ def load_config(
108
107
 
109
108
  def _load_config_maybe_locked(
110
109
  root_path: Path,
111
- filename: Union[str, Path],
112
- sub_config: Optional[str] = None,
110
+ filename: str | Path,
111
+ sub_config: str | None = None,
113
112
  exit_on_error: bool = True,
114
113
  acquire_lock: bool = True,
115
114
  fill_missing_services: bool = False,
@@ -154,7 +153,7 @@ def _load_config_maybe_locked(
154
153
  def load_config_cli(
155
154
  root_path: Path,
156
155
  filename: str,
157
- sub_config: Optional[str] = None,
156
+ sub_config: str | None = None,
158
157
  fill_missing_services: bool = False,
159
158
  ) -> dict[str, Any]:
160
159
  """
@@ -215,7 +214,7 @@ def add_property(d: dict[str, Any], partial_key: str, value: Any) -> None:
215
214
  d[key_1][key_2] = value
216
215
 
217
216
 
218
- def str2bool(v: Union[str, bool]) -> bool:
217
+ def str2bool(v: str | bool) -> bool:
219
218
  # Source from https://stackoverflow.com/questions/15008758/parsing-boolean-values-with-argparse
220
219
  if isinstance(v, bool):
221
220
  return v
@@ -254,7 +253,7 @@ def traverse_dict(d: dict[str, Any], key_path: str) -> Any:
254
253
 
255
254
 
256
255
  method_strings = Literal["default", "python_default", "fork", "forkserver", "spawn"]
257
- method_values = Optional[Literal["fork", "forkserver", "spawn"]]
256
+ method_values = Literal["fork", "forkserver", "spawn"] | None
258
257
  start_methods: dict[method_strings, method_values] = {
259
258
  "default": None,
260
259
  "python_default": None,
@@ -289,7 +288,7 @@ def process_config_start_method(
289
288
  return processed_method
290
289
 
291
290
 
292
- def override_config(config: dict[str, Any], config_overrides: Optional[dict[str, Any]]) -> dict[str, Any]:
291
+ def override_config(config: dict[str, Any], config_overrides: dict[str, Any] | None) -> dict[str, Any]:
293
292
  new_config = copy.deepcopy(config)
294
293
  if config_overrides is None:
295
294
  return new_config
chia/util/db_wrapper.py CHANGED
@@ -12,7 +12,7 @@ from collections.abc import AsyncIterator, Iterable
12
12
  from dataclasses import dataclass, field
13
13
  from datetime import datetime
14
14
  from pathlib import Path
15
- from typing import Any, Optional, TextIO, Union
15
+ from typing import Any, TextIO
16
16
 
17
17
  import aiosqlite
18
18
  import anyio
@@ -32,7 +32,7 @@ class DBWrapperError(Exception):
32
32
 
33
33
 
34
34
  class ForeignKeyError(DBWrapperError):
35
- def __init__(self, violations: Iterable[Union[aiosqlite.Row, tuple[str, object, str, object]]]) -> None:
35
+ def __init__(self, violations: Iterable[aiosqlite.Row | tuple[str, object, str, object]]) -> None:
36
36
  self.violations: list[dict[str, object]] = []
37
37
 
38
38
  for violation in violations:
@@ -67,8 +67,8 @@ def generate_in_memory_db_uri() -> str:
67
67
 
68
68
 
69
69
  async def execute_fetchone(
70
- c: aiosqlite.Connection, sql: str, parameters: Optional[Iterable[Any]] = None
71
- ) -> Optional[sqlite3.Row]:
70
+ c: aiosqlite.Connection, sql: str, parameters: Iterable[Any] | None = None
71
+ ) -> sqlite3.Row | None:
72
72
  rows = await c.execute_fetchall(sql, parameters)
73
73
  for row in rows:
74
74
  return row
@@ -76,10 +76,10 @@ async def execute_fetchone(
76
76
 
77
77
 
78
78
  async def _create_connection(
79
- database: Union[str, Path],
79
+ database: str | Path,
80
80
  uri: bool = False,
81
- log_file: Optional[TextIO] = None,
82
- name: Optional[str] = None,
81
+ log_file: TextIO | None = None,
82
+ name: str | None = None,
83
83
  ) -> aiosqlite.Connection:
84
84
  # To avoid https://github.com/python/cpython/issues/118172
85
85
  connection = await aiosqlite.connect(database=database, uri=uri, cached_statements=0)
@@ -92,10 +92,10 @@ async def _create_connection(
92
92
 
93
93
  @contextlib.asynccontextmanager
94
94
  async def manage_connection(
95
- database: Union[str, Path],
95
+ database: str | Path,
96
96
  uri: bool = False,
97
- log_file: Optional[TextIO] = None,
98
- name: Optional[str] = None,
97
+ log_file: TextIO | None = None,
98
+ name: str | None = None,
99
99
  ) -> AsyncIterator[aiosqlite.Connection]:
100
100
  connection: aiosqlite.Connection
101
101
  connection = await _create_connection(database=database, uri=uri, log_file=log_file, name=name)
@@ -107,7 +107,7 @@ async def manage_connection(
107
107
  await connection.close()
108
108
 
109
109
 
110
- def sql_trace_callback(req: str, file: TextIO, name: Optional[str] = None) -> None:
110
+ def sql_trace_callback(req: str, file: TextIO, name: str | None = None) -> None:
111
111
  timestamp = datetime.now().strftime("%H:%M:%S.%f")
112
112
  if name is not None:
113
113
  line = f"{timestamp} {name} {req}\n"
@@ -120,10 +120,9 @@ def get_host_parameter_limit() -> int:
120
120
  # NOTE: This does not account for dynamically adjusted limits since it makes a
121
121
  # separate db and connection. If aiosqlite adds support we should use it.
122
122
  if sys.version_info >= (3, 11):
123
- connection = sqlite3.connect(":memory:")
124
-
125
- limit_number = sqlite3.SQLITE_LIMIT_VARIABLE_NUMBER
126
- host_parameter_limit = connection.getlimit(limit_number)
123
+ with contextlib.closing(sqlite3.connect(":memory:")) as connection:
124
+ limit_number = sqlite3.SQLITE_LIMIT_VARIABLE_NUMBER
125
+ host_parameter_limit = connection.getlimit(limit_number)
127
126
  # guessing based on defaults, seems you can't query
128
127
 
129
128
  # https://www.sqlite.org/changes.html#version_3_32_0
@@ -140,13 +139,13 @@ def get_host_parameter_limit() -> int:
140
139
  class DBWrapper2:
141
140
  _write_connection: aiosqlite.Connection
142
141
  db_version: int = 1
143
- _log_file: Optional[TextIO] = None
142
+ _log_file: TextIO | None = None
144
143
  host_parameter_limit: int = get_host_parameter_limit()
145
144
  _lock: asyncio.Lock = field(default_factory=asyncio.Lock)
146
145
  _read_connections: asyncio.Queue[aiosqlite.Connection] = field(default_factory=asyncio.Queue)
147
146
  _num_read_connections: int = 0
148
147
  _in_use: dict[asyncio.Task[object], aiosqlite.Connection] = field(default_factory=dict)
149
- _current_writer: Optional[asyncio.Task[object]] = None
148
+ _current_writer: asyncio.Task[object] | None = None
150
149
  _savepoint_name: int = 0
151
150
 
152
151
  async def add_connection(self, c: aiosqlite.Connection) -> None:
@@ -160,16 +159,16 @@ class DBWrapper2:
160
159
  @contextlib.asynccontextmanager
161
160
  async def managed(
162
161
  cls,
163
- database: Union[str, Path],
162
+ database: str | Path,
164
163
  *,
165
164
  db_version: int = 1,
166
165
  uri: bool = False,
167
166
  reader_count: int = 4,
168
- log_path: Optional[Path] = None,
167
+ log_path: Path | None = None,
169
168
  journal_mode: str = "WAL",
170
- synchronous: Optional[str] = None,
171
- foreign_keys: Optional[bool] = None,
172
- row_factory: Optional[type[aiosqlite.Row]] = None,
169
+ synchronous: str | None = None,
170
+ foreign_keys: bool | None = None,
171
+ row_factory: type[aiosqlite.Row] | None = None,
173
172
  ) -> AsyncIterator[DBWrapper2]:
174
173
  if foreign_keys is None:
175
174
  foreign_keys = False
@@ -217,16 +216,16 @@ class DBWrapper2:
217
216
  @classmethod
218
217
  async def create(
219
218
  cls,
220
- database: Union[str, Path],
219
+ database: str | Path,
221
220
  *,
222
221
  db_version: int = 1,
223
222
  uri: bool = False,
224
223
  reader_count: int = 4,
225
- log_path: Optional[Path] = None,
224
+ log_path: Path | None = None,
226
225
  journal_mode: str = "WAL",
227
- synchronous: Optional[str] = None,
226
+ synchronous: str | None = None,
228
227
  foreign_keys: bool = False,
229
- row_factory: Optional[type[aiosqlite.Row]] = None,
228
+ row_factory: type[aiosqlite.Row] | None = None,
230
229
  ) -> DBWrapper2:
231
230
  # WARNING: please use .managed() instead
232
231
  if log_path is None:
@@ -290,7 +289,7 @@ class DBWrapper2:
290
289
  @contextlib.asynccontextmanager
291
290
  async def writer(
292
291
  self,
293
- foreign_key_enforcement_enabled: Optional[bool] = None,
292
+ foreign_key_enforcement_enabled: bool | None = None,
294
293
  ) -> AsyncIterator[aiosqlite.Connection]:
295
294
  """
296
295
  Initiates a new, possibly nested, transaction. If this task is already
chia/util/default_root.py CHANGED
@@ -4,7 +4,6 @@ from __future__ import annotations
4
4
 
5
5
  import os
6
6
  from pathlib import Path
7
- from typing import Optional
8
7
 
9
8
  DEFAULT_ROOT_PATH = Path(os.path.expanduser(os.getenv("CHIA_ROOT", "~/.chia/mainnet"))).resolve()
10
9
 
@@ -13,7 +12,7 @@ DEFAULT_KEYS_ROOT_PATH = Path(os.path.expanduser(os.getenv("CHIA_KEYS_ROOT", "~/
13
12
  SIMULATOR_ROOT_PATH = Path(os.path.expanduser(os.getenv("CHIA_SIMULATOR_ROOT", "~/.chia/simulator"))).resolve()
14
13
 
15
14
 
16
- def resolve_root_path(*, override: Optional[Path]) -> Path:
15
+ def resolve_root_path(*, override: Path | None) -> Path:
17
16
  candidates = [
18
17
  override,
19
18
  os.environ.get("CHIA_ROOT"),
chia/util/errors.py CHANGED
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  from enum import Enum
6
6
  from pathlib import Path
7
- from typing import Any, Optional
7
+ from typing import Any
8
8
 
9
9
  from click import ClickException
10
10
 
@@ -227,11 +227,11 @@ class ProtocolError(Exception):
227
227
 
228
228
 
229
229
  class ApiError(Exception):
230
- def __init__(self, code: Err, message: str, data: Optional[bytes] = None):
230
+ def __init__(self, code: Err, message: str, data: bytes | None = None):
231
231
  super().__init__(f"{code.name}: {message}")
232
232
  self.code: Err = code
233
233
  self.message: str = message
234
- self.data: Optional[bytes] = data
234
+ self.data: bytes | None = data
235
235
 
236
236
 
237
237
  ##
chia/util/file_keyring.py CHANGED
@@ -12,7 +12,7 @@ from dataclasses import asdict, dataclass, field
12
12
  from hashlib import pbkdf2_hmac
13
13
  from pathlib import Path
14
14
  from secrets import token_bytes
15
- from typing import Any, Optional, Union, cast
15
+ from typing import Any, cast
16
16
 
17
17
  import yaml
18
18
  from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305 # pyright: reportMissingModuleSource=false
@@ -106,9 +106,9 @@ class FileKeyringContent:
106
106
  # Encrypted and base64 encoded keyring data.
107
107
  # - The data with CHECKBYTES_VALUE prepended is encrypted using ChaCha20Poly1305.
108
108
  # - The symmetric key is derived from the master passphrase using PBKDF2.
109
- data: Optional[str] = None
109
+ data: str | None = None
110
110
  # An optional passphrase hint
111
- passphrase_hint: Optional[str] = None
111
+ passphrase_hint: str | None = None
112
112
 
113
113
  def __post_init__(self) -> None:
114
114
  self.salt = convert_byte_type(bytes, self.salt)
@@ -165,16 +165,16 @@ class FileKeyringContent:
165
165
  @dataclass(frozen=True)
166
166
  class Key:
167
167
  secret: bytes
168
- metadata: Optional[dict[str, Any]] = None
168
+ metadata: dict[str, Any] | None = None
169
169
 
170
170
  @classmethod
171
- def parse(cls, data: str, metadata: Optional[dict[str, Any]]) -> Key:
171
+ def parse(cls, data: str, metadata: dict[str, Any] | None) -> Key:
172
172
  return cls(
173
173
  bytes.fromhex(data),
174
174
  metadata,
175
175
  )
176
176
 
177
- def to_data(self) -> Union[str, dict[str, Any]]:
177
+ def to_data(self) -> str | dict[str, Any]:
178
178
  return self.secret.hex()
179
179
 
180
180
 
@@ -231,7 +231,7 @@ class FileKeyring(FileSystemEventHandler):
231
231
  needs_load_keyring: bool = False
232
232
  # Cache of the decrypted YAML contained in keyring.data
233
233
  cached_data_dict: DecryptedKeyringData = field(default_factory=default_file_keyring_data)
234
- keyring_last_mod_time: Optional[float] = None
234
+ keyring_last_mod_time: float | None = None
235
235
  # Key/value pairs to set on the outer payload on the next write
236
236
  file_content_properties_for_next_write: dict[str, Any] = field(default_factory=dict)
237
237
 
@@ -284,7 +284,7 @@ class FileKeyring(FileSystemEventHandler):
284
284
  self.keyring_observer.stop()
285
285
  self.keyring_observer.join()
286
286
 
287
- def on_modified(self, event: Union[FileSystemEvent, DirModifiedEvent]) -> None:
287
+ def on_modified(self, event: FileSystemEvent | DirModifiedEvent) -> None:
288
288
  self.check_if_keyring_file_modified()
289
289
 
290
290
  def check_if_keyring_file_modified(self) -> None:
@@ -316,7 +316,7 @@ class FileKeyring(FileSystemEventHandler):
316
316
  """
317
317
  return self.cached_data_dict.labels
318
318
 
319
- def get_key(self, service: str, user: str) -> Optional[Key]:
319
+ def get_key(self, service: str, user: str) -> Key | None:
320
320
  """
321
321
  Returns the passphrase named by the 'user' parameter from the cached
322
322
  keyring data (does not force a read from disk)
@@ -350,7 +350,7 @@ class FileKeyring(FileSystemEventHandler):
350
350
  keys.pop(service)
351
351
  self.write_keyring()
352
352
 
353
- def get_label(self, fingerprint: int) -> Optional[str]:
353
+ def get_label(self, fingerprint: int) -> str | None:
354
354
  """
355
355
  Returns the label for the given fingerprint or None if there is no label assigned.
356
356
  """
@@ -405,7 +405,7 @@ class FileKeyring(FileSystemEventHandler):
405
405
  except Exception:
406
406
  return False
407
407
 
408
- def load_keyring(self, passphrase: Optional[str] = None) -> None:
408
+ def load_keyring(self, passphrase: str | None = None) -> None:
409
409
  from chia.util.keyring_wrapper import obtain_current_passphrase
410
410
 
411
411
  with self.load_keyring_lock:
@@ -450,18 +450,18 @@ class FileKeyring(FileSystemEventHandler):
450
450
  # Restore the correct content if we failed to write the updated cache, let it re-raise if loading also fails
451
451
  self.cached_file_content = FileKeyringContent.create_from_path(self.keyring_path)
452
452
 
453
- def get_passphrase_hint(self) -> Optional[str]:
453
+ def get_passphrase_hint(self) -> str | None:
454
454
  """
455
455
  Return the passphrase hint (if set). The hint data may not yet be written to the keyring, so we
456
456
  return the hint data either from the staging dict (file_content_properties_for_next_write), or
457
457
  from cached_file_content (loaded from the keyring)
458
458
  """
459
- passphrase_hint: Optional[str] = self.file_content_properties_for_next_write.get("passphrase_hint", None)
459
+ passphrase_hint: str | None = self.file_content_properties_for_next_write.get("passphrase_hint", None)
460
460
  if passphrase_hint is None:
461
461
  passphrase_hint = self.cached_file_content.passphrase_hint
462
462
  return passphrase_hint
463
463
 
464
- def set_passphrase_hint(self, passphrase_hint: Optional[str]) -> None:
464
+ def set_passphrase_hint(self, passphrase_hint: str | None) -> None:
465
465
  """
466
466
  Store the new passphrase hint in the staging dict (file_content_properties_for_next_write) to
467
467
  be written-out on the next write to the keyring.
chia/util/files.py CHANGED
@@ -7,10 +7,9 @@ import logging
7
7
  import os
8
8
  import shutil
9
9
  from pathlib import Path
10
- from typing import Union
10
+ from typing import Literal
11
11
 
12
12
  from aiofiles import tempfile
13
- from typing_extensions import Literal
14
13
 
15
14
  log = logging.getLogger(__name__)
16
15
 
@@ -63,7 +62,7 @@ async def move_file_async(src: Path, dst: Path, *, reattempts: int = 6, reattemp
63
62
 
64
63
 
65
64
  async def write_file_async(
66
- file_path: Path, data: Union[str, bytes], *, file_mode: int = 0o600, dir_mode: int = 0o700
65
+ file_path: Path, data: str | bytes, *, file_mode: int = 0o600, dir_mode: int = 0o700
67
66
  ) -> None:
68
67
  """
69
68
  Writes the provided data to a temporary file and then moves it to the final destination.
chia/util/hash.py CHANGED
@@ -3,24 +3,24 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from hashlib import sha256
6
- from typing import Literal, SupportsBytes, Union, cast, overload
6
+ from typing import Literal, SupportsBytes, cast, overload
7
7
 
8
8
  from chia_rs.sized_bytes import bytes32
9
9
 
10
10
 
11
11
  @overload
12
- def std_hash(b: Union[bytes, SupportsBytes]) -> bytes32: ...
12
+ def std_hash(b: bytes | SupportsBytes) -> bytes32: ...
13
13
 
14
14
 
15
15
  @overload
16
- def std_hash(b: Union[bytes, SupportsBytes], skip_bytes_conversion: Literal[False]) -> bytes32: ...
16
+ def std_hash(b: bytes | SupportsBytes, skip_bytes_conversion: Literal[False]) -> bytes32: ...
17
17
 
18
18
 
19
19
  @overload
20
20
  def std_hash(b: bytes, skip_bytes_conversion: Literal[True]) -> bytes32: ...
21
21
 
22
22
 
23
- def std_hash(b: Union[bytes, SupportsBytes], skip_bytes_conversion: bool = False) -> bytes32:
23
+ def std_hash(b: bytes | SupportsBytes, skip_bytes_conversion: bool = False) -> bytes32:
24
24
  """
25
25
  The standard hash used in many places.
26
26
  """
@@ -20,7 +20,7 @@ network_overrides: &network_overrides
20
20
  GENESIS_PRE_FARM_FARMER_PUZZLE_HASH: "3d8765d3a597ec1d99663f6c9816d915b9f68613ac94009884c4addaefcce6af"
21
21
  testnet0:
22
22
  MIN_PLOT_SIZE_V1: 18
23
- MIN_PLOT_SIZE_V2: 20
23
+ PLOT_SIZE_V2: 18
24
24
  GENESIS_CHALLENGE: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
25
25
  GENESIS_PRE_FARM_POOL_PUZZLE_HASH: "d23da14695a188ae5708dd152263c4db883eb27edeb936178d4d988b8f3ce5fc"
26
26
  GENESIS_PRE_FARM_FARMER_PUZZLE_HASH: "3d8765d3a597ec1d99663f6c9816d915b9f68613ac94009884c4addaefcce6af"
@@ -34,11 +34,11 @@ network_overrides: &network_overrides
34
34
  GENESIS_PRE_FARM_POOL_PUZZLE_HASH: 3ef7c233fc0785f3c0cae5992c1d35e7c955ca37a423571c1607ba392a9d12f7
35
35
  MEMPOOL_BLOCK_BUFFER: 10
36
36
  MIN_PLOT_SIZE_V1: 18
37
- MIN_PLOT_SIZE_V2: 20
38
37
  NETWORK_TYPE: 1
39
38
  SUB_SLOT_ITERS_STARTING: 67108864
40
39
  # Forks activated from the beginning on this network
41
40
  HARD_FORK_HEIGHT: 0
41
+ SOFT_FORK8_HEIGHT: 3680000
42
42
  PLOT_FILTER_128_HEIGHT: 6029568
43
43
  PLOT_FILTER_64_HEIGHT: 11075328
44
44
  PLOT_FILTER_32_HEIGHT: 16121088
@@ -51,10 +51,9 @@ network_overrides: &network_overrides
51
51
  GENESIS_PRE_FARM_FARMER_PUZZLE_HASH: 08296fc227decd043aee855741444538e4cc9a31772c4d1a9e6242d1e777e42a
52
52
  GENESIS_PRE_FARM_POOL_PUZZLE_HASH: 08296fc227decd043aee855741444538e4cc9a31772c4d1a9e6242d1e777e42a
53
53
  MEMPOOL_BLOCK_BUFFER: 10
54
- MIN_PLOT_SIZE_V1: 18
55
- MIN_PLOT_SIZE_V2: 20
56
54
  NETWORK_TYPE: 1
57
55
  SUB_SLOT_ITERS_STARTING: 67108864
56
+ HARD_FORK_HEIGHT: 3693395
58
57
  config:
59
58
  mainnet:
60
59
  address_prefix: "xch"
@@ -657,7 +656,7 @@ solver:
657
656
  selected_network: *selected_network
658
657
 
659
658
  # Number of threads for solver operations
660
- num_threads: 4
659
+ num_threads: 1
661
660
 
662
661
  # RPC server configuration
663
662
  rpc_port: 8667
@@ -2,8 +2,9 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from collections.abc import Callable
5
6
  from concurrent.futures import Executor, Future
6
- from typing import Callable, TypeVar
7
+ from typing import TypeVar
7
8
 
8
9
  _T = TypeVar("_T")
9
10
 
chia/util/ip_address.py CHANGED
@@ -2,12 +2,11 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from ipaddress import IPv4Address, IPv6Address, ip_address
5
- from typing import Union
6
5
 
7
6
 
8
7
  @dataclass(frozen=True)
9
8
  class IPAddress:
10
- _inner: Union[IPv4Address, IPv6Address]
9
+ _inner: IPv4Address | IPv6Address
11
10
 
12
11
  @classmethod
13
12
  def create(cls, ip: str) -> IPAddress: