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
@@ -7,12 +7,12 @@ import logging
7
7
  import shutil
8
8
  import sqlite3
9
9
  from collections import defaultdict
10
- from collections.abc import AsyncIterator, Awaitable, Iterable, Iterator, Sequence
10
+ from collections.abc import AsyncIterator, Awaitable, Callable, Iterable, Iterator, Sequence
11
11
  from contextlib import asynccontextmanager, contextmanager
12
12
  from dataclasses import dataclass, field, replace
13
13
  from hashlib import sha256
14
14
  from pathlib import Path
15
- from typing import Any, BinaryIO, Callable, Optional, Union
15
+ from typing import Any, BinaryIO
16
16
 
17
17
  import aiosqlite
18
18
  import anyio.to_thread
@@ -90,11 +90,11 @@ class DataStore:
90
90
  @contextlib.asynccontextmanager
91
91
  async def managed(
92
92
  cls,
93
- database: Union[str, Path],
93
+ database: str | Path,
94
94
  merkle_blobs_path: Path,
95
95
  key_value_blobs_path: Path,
96
96
  uri: bool = False,
97
- sql_log_path: Optional[Path] = None,
97
+ sql_log_path: Path | None = None,
98
98
  cache_capacity: int = 1,
99
99
  prefer_db_kv_blob_length: int = default_prefer_file_kv_blob_length,
100
100
  ) -> AsyncIterator[DataStore]:
@@ -202,10 +202,10 @@ class DataStore:
202
202
  async def insert_into_data_store_from_file(
203
203
  self,
204
204
  store_id: bytes32,
205
- root_hash: Optional[bytes32],
205
+ root_hash: bytes32 | None,
206
206
  filename: Path,
207
- delta_reader: Optional[DeltaReader] = None,
208
- ) -> Optional[DeltaReader]:
207
+ delta_reader: DeltaReader | None = None,
208
+ ) -> DeltaReader | None:
209
209
  async with self.db_wrapper.writer():
210
210
  with self.manage_kv_files(store_id):
211
211
  if root_hash is None:
@@ -453,7 +453,7 @@ class DataStore:
453
453
 
454
454
  expected_synced_generations = synced_generations + len(roots)
455
455
  for root in roots:
456
- recovery_filename: Optional[Path] = None
456
+ recovery_filename: Path | None = None
457
457
 
458
458
  for group_by_store in (True, False):
459
459
  filename = get_delta_filename_path(
@@ -495,7 +495,7 @@ class DataStore:
495
495
  async def get_merkle_blob(
496
496
  self,
497
497
  store_id: bytes32,
498
- root_hash: Optional[bytes32],
498
+ root_hash: bytes32 | None,
499
499
  read_only: bool = False,
500
500
  update_cache: bool = True,
501
501
  ) -> MerkleBlob:
@@ -532,14 +532,14 @@ class DataStore:
532
532
 
533
533
  return Path(*segments, raw)
534
534
 
535
- def get_merkle_path(self, store_id: bytes32, root_hash: Optional[bytes32]) -> Path:
535
+ def get_merkle_path(self, store_id: bytes32, root_hash: bytes32 | None) -> Path:
536
536
  store_root = self.merkle_blobs_path.joinpath(store_id.hex())
537
537
  if root_hash is None:
538
538
  return store_root
539
539
 
540
540
  return store_root.joinpath(self.get_bytes_path(bytes_=root_hash))
541
541
 
542
- def get_key_value_path(self, store_id: bytes32, blob_hash: Optional[bytes32]) -> Path:
542
+ def get_key_value_path(self, store_id: bytes32, blob_hash: bytes32 | None) -> Path:
543
543
  store_root = self.key_value_blobs_path.joinpath(store_id.hex())
544
544
  if blob_hash is None:
545
545
  return store_root
@@ -551,7 +551,7 @@ class DataStore:
551
551
  merkle_blob: MerkleBlob,
552
552
  store_id: bytes32,
553
553
  status: Status,
554
- old_root: Optional[Root] = None,
554
+ old_root: Root | None = None,
555
555
  update_cache: bool = True,
556
556
  ) -> Root:
557
557
  if not merkle_blob.empty():
@@ -579,7 +579,7 @@ class DataStore:
579
579
  def _use_file_for_new_kv_blob(self, blob: bytes) -> bool:
580
580
  return len(blob) > self.prefer_db_kv_blob_length
581
581
 
582
- async def get_kvid(self, blob: bytes, store_id: bytes32) -> Optional[KeyOrValueId]:
582
+ async def get_kvid(self, blob: bytes, store_id: bytes32) -> KeyOrValueId | None:
583
583
  blob_hash = bytes32(sha256(blob).digest())
584
584
 
585
585
  async with self.db_wrapper.reader() as reader:
@@ -602,7 +602,7 @@ class DataStore:
602
602
  # TODO: consider file-system based locking of either the file or the store directory
603
603
  return zstd.decompress(self.get_key_value_path(store_id=store_id, blob_hash=blob_hash).read_bytes()) # type: ignore[no-any-return]
604
604
 
605
- async def get_blob_from_kvid(self, kv_id: KeyOrValueId, store_id: bytes32) -> Optional[bytes]:
605
+ async def get_blob_from_kvid(self, kv_id: KeyOrValueId, store_id: bytes32) -> bytes | None:
606
606
  async with self.db_wrapper.reader() as reader:
607
607
  cursor = await reader.execute(
608
608
  "SELECT hash, blob FROM ids WHERE kv_id = ? AND store_id = ?",
@@ -706,9 +706,9 @@ class DataStore:
706
706
  self,
707
707
  node_hash: bytes32,
708
708
  store_id: bytes32,
709
- root_hash: Union[bytes32, Unspecified] = unspecified,
709
+ root_hash: bytes32 | Unspecified = unspecified,
710
710
  ) -> TerminalNode:
711
- resolved_root_hash: Optional[bytes32]
711
+ resolved_root_hash: bytes32 | None
712
712
  if root_hash is unspecified:
713
713
  root = await self.get_tree_root(store_id=store_id)
714
714
  resolved_root_hash = root.node_hash
@@ -723,9 +723,9 @@ class DataStore:
723
723
  self,
724
724
  node_hashes: list[bytes32],
725
725
  store_id: bytes32,
726
- root_hash: Union[bytes32, Unspecified] = unspecified,
726
+ root_hash: bytes32 | Unspecified = unspecified,
727
727
  ) -> list[TerminalNode]:
728
- resolved_root_hash: Optional[bytes32]
728
+ resolved_root_hash: bytes32 | None
729
729
  if root_hash is unspecified:
730
730
  root = await self.get_tree_root(store_id=store_id)
731
731
  resolved_root_hash = root.node_hash
@@ -762,7 +762,7 @@ class DataStore:
762
762
 
763
763
  return result
764
764
 
765
- async def add_node_hashes(self, store_id: bytes32, generation: Optional[int] = None) -> None:
765
+ async def add_node_hashes(self, store_id: bytes32, generation: int | None = None) -> None:
766
766
  root = await self.get_tree_root(store_id=store_id, generation=generation)
767
767
  if root.node_hash is None:
768
768
  return
@@ -789,9 +789,9 @@ class DataStore:
789
789
  async def _insert_root(
790
790
  self,
791
791
  store_id: bytes32,
792
- node_hash: Optional[bytes32],
792
+ node_hash: bytes32 | None,
793
793
  status: Status,
794
- generation: Optional[int] = None,
794
+ generation: int | None = None,
795
795
  ) -> Root:
796
796
  async with self.db_wrapper.writer_maybe_transaction() as writer:
797
797
  if generation is None:
@@ -820,7 +820,7 @@ class DataStore:
820
820
  )
821
821
  return new_root
822
822
 
823
- async def get_pending_root(self, store_id: bytes32) -> Optional[Root]:
823
+ async def get_pending_root(self, store_id: bytes32) -> Root | None:
824
824
  async with self.db_wrapper.reader() as reader:
825
825
  cursor = await reader.execute(
826
826
  """
@@ -845,7 +845,7 @@ class DataStore:
845
845
 
846
846
  return Root.from_row(row=row)
847
847
 
848
- async def clear_pending_roots(self, store_id: bytes32) -> Optional[Root]:
848
+ async def clear_pending_roots(self, store_id: bytes32) -> Root | None:
849
849
  async with self.db_wrapper.writer() as writer:
850
850
  pending_root = await self.get_pending_root(store_id=store_id)
851
851
 
@@ -931,14 +931,14 @@ class DataStore:
931
931
  row = await cursor.fetchone()
932
932
 
933
933
  if row is not None:
934
- generation: Optional[int] = row["MAX(generation)"]
934
+ generation: int | None = row["MAX(generation)"]
935
935
 
936
936
  if generation is not None:
937
937
  return generation
938
938
 
939
939
  raise Exception(f"No generations found for store ID: {store_id.hex()}")
940
940
 
941
- async def get_tree_root(self, store_id: bytes32, generation: Optional[int] = None) -> Root:
941
+ async def get_tree_root(self, store_id: bytes32, generation: int | None = None) -> Root:
942
942
  async with self.db_wrapper.reader() as reader:
943
943
  if generation is None:
944
944
  generation = await self.get_tree_generation(store_id=store_id)
@@ -999,8 +999,8 @@ class DataStore:
999
999
  self,
1000
1000
  node_hash: bytes32,
1001
1001
  store_id: bytes32,
1002
- root_hash: Optional[bytes32] = None,
1003
- generation: Optional[int] = None,
1002
+ root_hash: bytes32 | None = None,
1003
+ generation: int | None = None,
1004
1004
  ) -> list[InternalNode]:
1005
1005
  async with self.db_wrapper.reader():
1006
1006
  if root_hash is None:
@@ -1030,7 +1030,7 @@ class DataStore:
1030
1030
  self,
1031
1031
  kid: KeyId,
1032
1032
  vid: ValueId,
1033
- table_blobs: dict[KeyOrValueId, tuple[bytes32, Optional[bytes]]],
1033
+ table_blobs: dict[KeyOrValueId, tuple[bytes32, bytes | None]],
1034
1034
  store_id: bytes32,
1035
1035
  ) -> TerminalNode:
1036
1036
  key = table_blobs[KeyOrValueId(kid.raw)][1]
@@ -1048,10 +1048,10 @@ class DataStore:
1048
1048
  async def get_keys_values(
1049
1049
  self,
1050
1050
  store_id: bytes32,
1051
- root_hash: Union[bytes32, Unspecified] = unspecified,
1051
+ root_hash: bytes32 | Unspecified = unspecified,
1052
1052
  ) -> list[TerminalNode]:
1053
1053
  async with self.db_wrapper.reader():
1054
- resolved_root_hash: Optional[bytes32]
1054
+ resolved_root_hash: bytes32 | None
1055
1055
  if root_hash is unspecified:
1056
1056
  root = await self.get_tree_root(store_id=store_id)
1057
1057
  resolved_root_hash = root.node_hash
@@ -1076,10 +1076,10 @@ class DataStore:
1076
1076
  async def get_keys_values_compressed(
1077
1077
  self,
1078
1078
  store_id: bytes32,
1079
- root_hash: Union[bytes32, Unspecified] = unspecified,
1079
+ root_hash: bytes32 | Unspecified = unspecified,
1080
1080
  ) -> KeysValuesCompressed:
1081
1081
  async with self.db_wrapper.reader():
1082
- resolved_root_hash: Optional[bytes32]
1082
+ resolved_root_hash: bytes32 | None
1083
1083
  if root_hash is unspecified:
1084
1084
  root = await self.get_tree_root(store_id=store_id)
1085
1085
  resolved_root_hash = root.node_hash
@@ -1112,7 +1112,7 @@ class DataStore:
1112
1112
  store_id: bytes32,
1113
1113
  page: int,
1114
1114
  max_page_size: int,
1115
- root_hash: Union[bytes32, Unspecified] = unspecified,
1115
+ root_hash: bytes32 | Unspecified = unspecified,
1116
1116
  ) -> KeysPaginationData:
1117
1117
  keys_values_compressed = await self.get_keys_values_compressed(store_id, root_hash)
1118
1118
  pagination_data = get_hashes_for_page(page, keys_values_compressed.key_hash_to_length, max_page_size)
@@ -1137,7 +1137,7 @@ class DataStore:
1137
1137
  store_id: bytes32,
1138
1138
  page: int,
1139
1139
  max_page_size: int,
1140
- root_hash: Union[bytes32, Unspecified] = unspecified,
1140
+ root_hash: bytes32 | Unspecified = unspecified,
1141
1141
  ) -> KeysValuesPaginationData:
1142
1142
  keys_values_compressed = await self.get_keys_values_compressed(store_id, root_hash)
1143
1143
  pagination_data = get_hashes_for_page(page, keys_values_compressed.leaf_hash_to_length, max_page_size)
@@ -1211,7 +1211,7 @@ class DataStore:
1211
1211
  value: bytes,
1212
1212
  store_id: bytes32,
1213
1213
  status: Status = Status.PENDING,
1214
- root: Optional[Root] = None,
1214
+ root: Root | None = None,
1215
1215
  ) -> InsertResult:
1216
1216
  return await self.insert(
1217
1217
  key=key,
@@ -1226,7 +1226,7 @@ class DataStore:
1226
1226
  async def get_keys(
1227
1227
  self,
1228
1228
  store_id: bytes32,
1229
- root_hash: Union[bytes32, Unspecified] = unspecified,
1229
+ root_hash: bytes32 | Unspecified = unspecified,
1230
1230
  ) -> list[bytes]:
1231
1231
  async with self.db_wrapper.reader():
1232
1232
  if root_hash is unspecified:
@@ -1265,7 +1265,7 @@ class DataStore:
1265
1265
  assert isinstance(raw_node, chia_rs.datalayer.LeafNode)
1266
1266
  return await self.get_terminal_node(raw_node.key, raw_node.value, store_id)
1267
1267
 
1268
- async def get_terminal_node_for_seed(self, seed: bytes32, store_id: bytes32) -> Optional[TerminalNode]:
1268
+ async def get_terminal_node_for_seed(self, seed: bytes32, store_id: bytes32) -> TerminalNode | None:
1269
1269
  root = await self.get_tree_root(store_id=store_id)
1270
1270
  if root is None or root.node_hash is None:
1271
1271
  return None
@@ -1280,10 +1280,10 @@ class DataStore:
1280
1280
  key: bytes,
1281
1281
  value: bytes,
1282
1282
  store_id: bytes32,
1283
- reference_node_hash: Optional[bytes32] = None,
1284
- side: Optional[Side] = None,
1283
+ reference_node_hash: bytes32 | None = None,
1284
+ side: Side | None = None,
1285
1285
  status: Status = Status.PENDING,
1286
- root: Optional[Root] = None,
1286
+ root: Root | None = None,
1287
1287
  ) -> InsertResult:
1288
1288
  async with self.db_wrapper.writer() as writer:
1289
1289
  with self.manage_kv_files(store_id):
@@ -1315,8 +1315,8 @@ class DataStore:
1315
1315
  key: bytes,
1316
1316
  store_id: bytes32,
1317
1317
  status: Status = Status.PENDING,
1318
- root: Optional[Root] = None,
1319
- ) -> Optional[Root]:
1318
+ root: Root | None = None,
1319
+ ) -> Root | None:
1320
1320
  async with self.db_wrapper.writer():
1321
1321
  if root is None:
1322
1322
  root = await self.get_tree_root(store_id=store_id)
@@ -1336,7 +1336,7 @@ class DataStore:
1336
1336
  new_value: bytes,
1337
1337
  store_id: bytes32,
1338
1338
  status: Status = Status.PENDING,
1339
- root: Optional[Root] = None,
1339
+ root: Root | None = None,
1340
1340
  ) -> InsertResult:
1341
1341
  async with self.db_wrapper.writer() as writer:
1342
1342
  with self.manage_kv_files(store_id):
@@ -1357,7 +1357,7 @@ class DataStore:
1357
1357
  changelist: list[dict[str, Any]],
1358
1358
  status: Status = Status.PENDING,
1359
1359
  enable_batch_autoinsert: bool = True,
1360
- ) -> Optional[bytes32]:
1360
+ ) -> bytes32 | None:
1361
1361
  async with self.db_wrapper.writer() as writer:
1362
1362
  with self.manage_kv_files(store_id):
1363
1363
  old_root = await self.get_tree_root(store_id=store_id)
@@ -1396,7 +1396,7 @@ class DataStore:
1396
1396
 
1397
1397
  reference_node_hash = change.get("reference_node_hash", None)
1398
1398
  side = change.get("side", None)
1399
- reference_kid: Optional[KeyId] = None
1399
+ reference_kid: KeyId | None = None
1400
1400
  if reference_node_hash is not None:
1401
1401
  reference_kid, _ = merkle_blob.get_node_by_hash(reference_node_hash)
1402
1402
 
@@ -1447,10 +1447,10 @@ class DataStore:
1447
1447
  self,
1448
1448
  key: bytes,
1449
1449
  store_id: bytes32,
1450
- root_hash: Union[bytes32, Unspecified] = unspecified,
1450
+ root_hash: bytes32 | Unspecified = unspecified,
1451
1451
  ) -> TerminalNode:
1452
1452
  async with self.db_wrapper.reader():
1453
- resolved_root_hash: Optional[bytes32]
1453
+ resolved_root_hash: bytes32 | None
1454
1454
  if root_hash is unspecified:
1455
1455
  root = await self.get_tree_root(store_id=store_id)
1456
1456
  resolved_root_hash = root.node_hash
@@ -1499,7 +1499,7 @@ class DataStore:
1499
1499
  self,
1500
1500
  node_hash: bytes32,
1501
1501
  store_id: bytes32,
1502
- root_hash: Optional[bytes32] = None,
1502
+ root_hash: bytes32 | None = None,
1503
1503
  ) -> ProofOfInclusion:
1504
1504
  if root_hash is None:
1505
1505
  root = await self.get_tree_root(store_id=store_id)
@@ -1556,8 +1556,8 @@ class DataStore:
1556
1556
 
1557
1557
  async def get_table_blobs(
1558
1558
  self, kv_ids_iter: Iterable[KeyOrValueId], store_id: bytes32
1559
- ) -> dict[KeyOrValueId, tuple[bytes32, Optional[bytes]]]:
1560
- result: dict[KeyOrValueId, tuple[bytes32, Optional[bytes]]] = {}
1559
+ ) -> dict[KeyOrValueId, tuple[bytes32, bytes | None]]:
1560
+ result: dict[KeyOrValueId, tuple[bytes32, bytes | None]] = {}
1561
1561
  batch_size = min(500, SQLITE_MAX_VARIABLE_NUMBER - 10)
1562
1562
  kv_ids = list(dict.fromkeys(kv_ids_iter))
1563
1563
 
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
- from typing import Optional, Union
5
4
 
6
5
  from aiosqlite import Row
7
6
  from chia_rs.sized_bytes import bytes32
@@ -29,7 +28,7 @@ def _row_to_singleton_record(row: Row) -> SingletonRecord:
29
28
  )
30
29
 
31
30
 
32
- def _row_to_mirror(row: Row, confirmed_at_height: Optional[uint32]) -> Mirror:
31
+ def _row_to_mirror(row: Row, confirmed_at_height: uint32 | None) -> Mirror:
33
32
  urls: list[bytes] = []
34
33
  byte_list: bytes = row[3]
35
34
  while byte_list != b"":
@@ -133,14 +132,14 @@ class DataLayerStore:
133
132
  async def get_all_singletons_for_launcher(
134
133
  self,
135
134
  launcher_id: bytes32,
136
- min_generation: Optional[uint32] = None,
137
- max_generation: Optional[uint32] = None,
138
- num_results: Optional[uint32] = None,
135
+ min_generation: uint32 | None = None,
136
+ max_generation: uint32 | None = None,
137
+ num_results: uint32 | None = None,
139
138
  ) -> list[SingletonRecord]:
140
139
  """
141
140
  Returns stored singletons with a specific launcher ID.
142
141
  """
143
- query_params: list[Union[bytes32, uint32]] = [launcher_id]
142
+ query_params: list[bytes32 | uint32] = [launcher_id]
144
143
  for optional_param in (min_generation, max_generation, num_results):
145
144
  if optional_param is not None:
146
145
  query_params.append(optional_param)
@@ -163,7 +162,7 @@ class DataLayerStore:
163
162
 
164
163
  return records
165
164
 
166
- async def get_singleton_record(self, coin_id: bytes32) -> Optional[SingletonRecord]:
165
+ async def get_singleton_record(self, coin_id: bytes32) -> SingletonRecord | None:
167
166
  """
168
167
  Checks DB for SingletonRecord with coin_id: coin_id and returns it.
169
168
  """
@@ -178,9 +177,7 @@ class DataLayerStore:
178
177
  return _row_to_singleton_record(row)
179
178
  return None
180
179
 
181
- async def get_latest_singleton(
182
- self, launcher_id: bytes32, only_confirmed: bool = False
183
- ) -> Optional[SingletonRecord]:
180
+ async def get_latest_singleton(self, launcher_id: bytes32, only_confirmed: bool = False) -> SingletonRecord | None:
184
181
  """
185
182
  Checks DB for SingletonRecords with launcher_id: launcher_id and returns the most recent.
186
183
  """
@@ -238,7 +235,7 @@ class DataLayerStore:
238
235
  """
239
236
  Updates singleton record to be confirmed.
240
237
  """
241
- current: Optional[SingletonRecord] = await self.get_singleton_record(coin_id)
238
+ current: SingletonRecord | None = await self.get_singleton_record(coin_id)
242
239
  if current is None or current.confirmed_at_height == height:
243
240
  return
244
241
 
@@ -268,7 +265,7 @@ class DataLayerStore:
268
265
  (launcher_id, launcher_bytes),
269
266
  )
270
267
 
271
- async def get_launcher(self, launcher_id: bytes32) -> Optional[Coin]:
268
+ async def get_launcher(self, launcher_id: bytes32) -> Coin | None:
272
269
  """
273
270
  Checks DB for a launcher with the specified ID and returns it.
274
271
  """
@@ -5,12 +5,11 @@ import logging
5
5
  import time
6
6
  from dataclasses import dataclass
7
7
  from pathlib import Path
8
- from typing import Optional
8
+ from typing import Literal
9
9
 
10
10
  import aiohttp
11
11
  from chia_rs.datalayer import DeltaReader
12
12
  from chia_rs.sized_bytes import bytes32
13
- from typing_extensions import Literal
14
13
 
15
14
  from chia.data_layer.data_layer_util import (
16
15
  PluginRemote,
@@ -62,7 +61,7 @@ def is_filename_valid(filename: str, group_by_store: bool = False) -> bool:
62
61
  @dataclass
63
62
  class WriteFilesResult:
64
63
  result: bool
65
- full_tree: Optional[Path]
64
+ full_tree: Path | None
66
65
  diff_tree: Path
67
66
 
68
67
 
@@ -114,8 +113,8 @@ async def download_file(
114
113
  root_hash: bytes32,
115
114
  generation: int,
116
115
  server_info: ServerInfo,
117
- proxy_url: Optional[str],
118
- downloader: Optional[PluginRemote],
116
+ proxy_url: str | None,
117
+ downloader: PluginRemote | None,
119
118
  timeout: aiohttp.ClientTimeout,
120
119
  client_foldername: Path,
121
120
  timestamp: int,
@@ -169,15 +168,15 @@ async def insert_from_delta_file(
169
168
  client_foldername: Path,
170
169
  timeout: aiohttp.ClientTimeout,
171
170
  log: logging.Logger,
172
- proxy_url: Optional[str],
173
- downloader: Optional[PluginRemote],
171
+ proxy_url: str | None,
172
+ downloader: PluginRemote | None,
174
173
  group_files_by_store: bool = False,
175
174
  maximum_full_file_count: int = 1,
176
175
  ) -> bool:
177
176
  if group_files_by_store:
178
177
  client_foldername.joinpath(f"{store_id}").mkdir(parents=True, exist_ok=True)
179
178
 
180
- delta_reader: Optional[DeltaReader] = None
179
+ delta_reader: DeltaReader | None = None
181
180
 
182
181
  for root_hash in root_hashes:
183
182
  timestamp = int(time.time())
@@ -286,7 +285,7 @@ def delete_full_file_if_exists(foldername: Path, store_id: bytes32, root: Root)
286
285
  async def http_download(
287
286
  target_filename_path: Path,
288
287
  filename: str,
289
- proxy_url: Optional[str],
288
+ proxy_url: str | None,
290
289
  server_info: ServerInfo,
291
290
  timeout: aiohttp.ClientTimeout,
292
291
  log: logging.Logger,
@@ -11,7 +11,7 @@ import sys
11
11
  import tempfile
12
12
  from dataclasses import dataclass
13
13
  from pathlib import Path
14
- from typing import Any, Optional, overload
14
+ from typing import Any, overload
15
15
  from urllib.parse import urlparse
16
16
 
17
17
  import boto3
@@ -30,7 +30,7 @@ plugin_version = "0.1.0"
30
30
  @dataclass(frozen=True)
31
31
  class StoreConfig:
32
32
  id: bytes32
33
- bucket: Optional[str]
33
+ bucket: str | None
34
34
  urls: set[str]
35
35
 
36
36
  @classmethod
@@ -142,9 +142,7 @@ class S3Plugin:
142
142
  @overload
143
143
  def get_path_for_filename(self, store_id: bytes32, filename: None, group_files_by_store: bool) -> None: ...
144
144
 
145
- def get_path_for_filename(
146
- self, store_id: bytes32, filename: Optional[str], group_files_by_store: bool
147
- ) -> Optional[Path]:
145
+ def get_path_for_filename(self, store_id: bytes32, filename: str | None, group_files_by_store: bool) -> Path | None:
148
146
  if filename is None:
149
147
  return None
150
148
 
@@ -158,9 +156,7 @@ class S3Plugin:
158
156
  @overload
159
157
  def get_s3_target_from_path(self, store_id: bytes32, path: None, group_files_by_store: bool) -> None: ...
160
158
 
161
- def get_s3_target_from_path(
162
- self, store_id: bytes32, path: Optional[Path], group_files_by_store: bool
163
- ) -> Optional[str]:
159
+ def get_s3_target_from_path(self, store_id: bytes32, path: Path | None, group_files_by_store: bool) -> str | None:
164
160
  if path is None:
165
161
  return None
166
162
 
@@ -174,7 +170,7 @@ class S3Plugin:
174
170
  store_id = bytes32.from_hexstr(data["store_id"])
175
171
  bucket_str = self.get_bucket(store_id)
176
172
  my_bucket = self.boto_resource.Bucket(bucket_str)
177
- full_tree_name: Optional[str] = data.get("full_tree_filename", None)
173
+ full_tree_name: str | None = data.get("full_tree_filename", None)
178
174
  diff_name: str = data["diff_filename"]
179
175
  group_files_by_store: bool = data.get("group_files_by_store", False)
180
176
 
@@ -4,11 +4,11 @@ import logging
4
4
  import os
5
5
  import pathlib
6
6
  import sys
7
- from typing import Any, Optional, cast
7
+ from typing import Any, cast
8
8
 
9
9
  from chia_rs.sized_ints import uint16
10
10
 
11
- from chia.apis import ApiProtocolRegistry
11
+ from chia.apis import StubMetadataRegistry
12
12
  from chia.data_layer.data_layer import DataLayer
13
13
  from chia.data_layer.data_layer_api import DataLayerAPI
14
14
  from chia.data_layer.data_layer_rpc_api import DataLayerRpcApi
@@ -40,7 +40,7 @@ def create_data_layer_service(
40
40
  config: dict[str, Any],
41
41
  downloaders: list[PluginRemote],
42
42
  uploaders: list[PluginRemote], # dont add FilesystemUploader to this, it is the default uploader
43
- wallet_service: Optional[WalletService] = None,
43
+ wallet_service: WalletService | None = None,
44
44
  connect_to_daemon: bool = True,
45
45
  ) -> DataLayerService:
46
46
  if uploaders is None:
@@ -72,7 +72,7 @@ def create_data_layer_service(
72
72
  )
73
73
  peer_api = DataLayerAPI(node)
74
74
 
75
- rpc_info: Optional[RpcInfo[DataLayerRpcApi]] = None
75
+ rpc_info: RpcInfo[DataLayerRpcApi] | None = None
76
76
  if service_config.get("start_rpc_server", True):
77
77
  rpc_info = (DataLayerRpcApi, cast(int, service_config["rpc_port"]))
78
78
 
@@ -89,7 +89,7 @@ def create_data_layer_service(
89
89
  max_request_body_size=service_config.get("rpc_server_max_request_body_size", 26214400),
90
90
  rpc_info=rpc_info,
91
91
  connect_to_daemon=connect_to_daemon,
92
- class_for_type=ApiProtocolRegistry,
92
+ stub_metadata_for_type=StubMetadataRegistry,
93
93
  )
94
94
 
95
95