chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
@@ -8,7 +8,7 @@ import random
8
8
  import tempfile
9
9
  from concurrent.futures.process import ProcessPoolExecutor
10
10
  from multiprocessing.context import BaseContext
11
- from typing import IO, Dict, List, Optional, Tuple
11
+ from typing import IO, Optional
12
12
 
13
13
  from chia.consensus.block_header_validation import validate_finished_header_block
14
14
  from chia.consensus.block_record import BlockRecord
@@ -31,6 +31,7 @@ from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
31
31
  from chia.types.blockchain_format.vdf import VDFInfo, VDFProof, validate_vdf
32
32
  from chia.types.end_of_slot_bundle import EndOfSubSlotBundle
33
33
  from chia.types.header_block import HeaderBlock
34
+ from chia.types.validation_state import ValidationState
34
35
  from chia.types.weight_proof import (
35
36
  RecentChainData,
36
37
  SubEpochChallengeSegment,
@@ -44,6 +45,7 @@ from chia.util.block_cache import BlockCache
44
45
  from chia.util.hash import std_hash
45
46
  from chia.util.ints import uint8, uint32, uint64, uint128
46
47
  from chia.util.setproctitle import getproctitle, setproctitle
48
+ from chia.util.task_referencer import create_referenced_task
47
49
 
48
50
  log = logging.getLogger(__name__)
49
51
 
@@ -92,8 +94,8 @@ class WeightProofHandler:
92
94
  self.tip = tip
93
95
  return wp
94
96
 
95
- def get_sub_epoch_data(self, tip_height: uint32, summary_heights: List[uint32]) -> List[SubEpochData]:
96
- sub_epoch_data: List[SubEpochData] = []
97
+ def get_sub_epoch_data(self, tip_height: uint32, summary_heights: list[uint32]) -> list[SubEpochData]:
98
+ sub_epoch_data: list[SubEpochData] = []
97
99
  for sub_epoch_n, ses_height in enumerate(summary_heights):
98
100
  if ses_height > tip_height:
99
101
  break
@@ -107,7 +109,7 @@ class WeightProofHandler:
107
109
  Creates a weight proof object
108
110
  """
109
111
  assert self.blockchain is not None
110
- sub_epoch_segments: List[SubEpochChallengeSegment] = []
112
+ sub_epoch_segments: list[SubEpochChallengeSegment] = []
111
113
  tip_rec = self.blockchain.try_block_record(tip)
112
114
  if tip_rec is None:
113
115
  log.error("failed not tip in cache")
@@ -164,7 +166,7 @@ class WeightProofHandler:
164
166
  log.debug(f"sub_epochs: {len(sub_epoch_data)}")
165
167
  return WeightProof(sub_epoch_data, sub_epoch_segments, recent_chain)
166
168
 
167
- def get_seed_for_proof(self, summary_heights: List[uint32], tip_height: uint32) -> bytes32:
169
+ def get_seed_for_proof(self, summary_heights: list[uint32], tip_height: uint32) -> bytes32:
168
170
  count = 0
169
171
  ses = None
170
172
  for sub_epoch_n, ses_height in enumerate(reversed(summary_heights)):
@@ -177,8 +179,8 @@ class WeightProofHandler:
177
179
  seed = ses.get_hash()
178
180
  return seed
179
181
 
180
- async def _get_recent_chain(self, tip_height: uint32) -> Optional[List[HeaderBlock]]:
181
- recent_chain: List[HeaderBlock] = []
182
+ async def _get_recent_chain(self, tip_height: uint32) -> Optional[list[HeaderBlock]]:
183
+ recent_chain: list[HeaderBlock] = []
182
184
  ses_heights = self.blockchain.get_ses_heights()
183
185
  min_height = 0
184
186
  count_ses = 0
@@ -288,8 +290,8 @@ class WeightProofHandler:
288
290
 
289
291
  async def __create_sub_epoch_segments(
290
292
  self, ses_block: BlockRecord, se_start: BlockRecord, sub_epoch_n: uint32
291
- ) -> Optional[List[SubEpochChallengeSegment]]:
292
- segments: List[SubEpochChallengeSegment] = []
293
+ ) -> Optional[list[SubEpochChallengeSegment]]:
294
+ segments: list[SubEpochChallengeSegment] = []
293
295
  start_height = await self.get_prev_two_slots_height(se_start)
294
296
 
295
297
  blocks = await self.blockchain.get_block_records_in_range(
@@ -345,12 +347,12 @@ class WeightProofHandler:
345
347
  self,
346
348
  header_block: HeaderBlock,
347
349
  sub_epoch_n: uint32,
348
- header_blocks: Dict[bytes32, HeaderBlock],
349
- blocks: Dict[bytes32, BlockRecord],
350
+ header_blocks: dict[bytes32, HeaderBlock],
351
+ blocks: dict[bytes32, BlockRecord],
350
352
  first_segment_in_sub_epoch: bool,
351
- ) -> Tuple[Optional[SubEpochChallengeSegment], uint32]:
353
+ ) -> tuple[Optional[SubEpochChallengeSegment], uint32]:
352
354
  assert self.blockchain is not None
353
- sub_slots: List[SubSlotData] = []
355
+ sub_slots: list[SubSlotData] = []
354
356
  log.debug(f"create challenge segment block {header_block.header_hash} block height {header_block.height} ")
355
357
  # VDFs from sub slots before challenge block
356
358
  first_sub_slots, first_rc_end_of_slot_vdf = await self.__first_sub_slot_vdfs(
@@ -392,10 +394,10 @@ class WeightProofHandler:
392
394
  async def __first_sub_slot_vdfs(
393
395
  self,
394
396
  header_block: HeaderBlock,
395
- header_blocks: Dict[bytes32, HeaderBlock],
396
- blocks: Dict[bytes32, BlockRecord],
397
+ header_blocks: dict[bytes32, HeaderBlock],
398
+ blocks: dict[bytes32, BlockRecord],
397
399
  first_in_sub_epoch: bool,
398
- ) -> Tuple[Optional[List[SubSlotData]], Optional[VDFInfo]]:
400
+ ) -> tuple[Optional[list[SubSlotData]], Optional[VDFInfo]]:
399
401
  # combine cc vdfs of all reward blocks from the start of the sub slot to end
400
402
  header_block_sub_rec = blocks[header_block.header_hash]
401
403
  # find slot start
@@ -418,8 +420,8 @@ class WeightProofHandler:
418
420
  curr_sub_rec = blocks[curr_sub_rec.prev_hash]
419
421
 
420
422
  curr = header_blocks[curr_sub_rec.header_hash]
421
- sub_slots_data: List[SubSlotData] = []
422
- tmp_sub_slots_data: List[SubSlotData] = []
423
+ sub_slots_data: list[SubSlotData] = []
424
+ tmp_sub_slots_data: list[SubSlotData] = []
423
425
  while curr.height < header_block.height:
424
426
  if curr is None:
425
427
  log.error("failed fetching block")
@@ -469,8 +471,8 @@ class WeightProofHandler:
469
471
  def first_rc_end_of_slot_vdf(
470
472
  self,
471
473
  header_block: HeaderBlock,
472
- blocks: Dict[bytes32, BlockRecord],
473
- header_blocks: Dict[bytes32, HeaderBlock],
474
+ blocks: dict[bytes32, BlockRecord],
475
+ header_blocks: dict[bytes32, HeaderBlock],
474
476
  ) -> Optional[VDFInfo]:
475
477
  curr = blocks[header_block.header_hash]
476
478
  while curr.height > 0 and not curr.sub_epoch_summary_included:
@@ -478,16 +480,16 @@ class WeightProofHandler:
478
480
  return header_blocks[curr.header_hash].finished_sub_slots[-1].reward_chain.end_of_slot_vdf
479
481
 
480
482
  async def __slot_end_vdf(
481
- self, start_height: uint32, header_blocks: Dict[bytes32, HeaderBlock], blocks: Dict[bytes32, BlockRecord]
482
- ) -> Tuple[Optional[List[SubSlotData]], uint32]:
483
+ self, start_height: uint32, header_blocks: dict[bytes32, HeaderBlock], blocks: dict[bytes32, BlockRecord]
484
+ ) -> tuple[Optional[list[SubSlotData]], uint32]:
483
485
  # gets all vdfs first sub slot after challenge block to last sub slot
484
486
  log.debug(f"slot end vdf start height {start_height}")
485
487
  header_hash = self.blockchain.height_to_hash(start_height)
486
488
  assert header_hash is not None
487
489
  curr = header_blocks[header_hash]
488
490
  curr_header_hash = curr.header_hash
489
- sub_slots_data: List[SubSlotData] = []
490
- tmp_sub_slots_data: List[SubSlotData] = []
491
+ sub_slots_data: list[SubSlotData] = []
492
+ tmp_sub_slots_data: list[SubSlotData] = []
491
493
  while not blocks[curr_header_hash].is_challenge_block(self.constants):
492
494
  if curr.first_in_sub_slot:
493
495
  sub_slots_data.extend(tmp_sub_slots_data)
@@ -512,7 +514,7 @@ class WeightProofHandler:
512
514
  log.debug(f"slot end vdf end height {curr.height} slots {len(sub_slots_data)} ")
513
515
  return sub_slots_data, curr.height
514
516
 
515
- def handle_block_vdfs(self, curr: HeaderBlock, blocks: Dict[bytes32, BlockRecord]) -> SubSlotData:
517
+ def handle_block_vdfs(self, curr: HeaderBlock, blocks: dict[bytes32, BlockRecord]) -> SubSlotData:
516
518
  cc_sp_proof = None
517
519
  icc_ip_proof = None
518
520
  cc_sp_info = None
@@ -558,7 +560,7 @@ class WeightProofHandler:
558
560
  curr.total_iters,
559
561
  )
560
562
 
561
- def validate_weight_proof_single_proc(self, weight_proof: WeightProof) -> Tuple[bool, uint32]:
563
+ def validate_weight_proof_single_proc(self, weight_proof: WeightProof) -> tuple[bool, uint32]:
562
564
  assert self.blockchain is not None
563
565
  assert len(weight_proof.sub_epochs) > 0
564
566
  if len(weight_proof.sub_epochs) == 0:
@@ -588,7 +590,7 @@ class WeightProofHandler:
588
590
  fork_point, _ = self.get_fork_point(summaries)
589
591
  return True, fork_point
590
592
 
591
- async def validate_weight_proof(self, weight_proof: WeightProof) -> Tuple[bool, uint32, List[SubEpochSummary]]:
593
+ async def validate_weight_proof(self, weight_proof: WeightProof) -> tuple[bool, uint32, list[SubEpochSummary]]:
592
594
  assert self.blockchain is not None
593
595
  if len(weight_proof.sub_epochs) == 0:
594
596
  return False, uint32(0), []
@@ -613,7 +615,7 @@ class WeightProofHandler:
613
615
  # The shutdown file manager must be inside of the executor manager so that
614
616
  # we request the workers close prior to waiting for them to close.
615
617
  with _create_shutdown_file() as shutdown_file:
616
- task = asyncio.create_task(
618
+ task = create_referenced_task(
617
619
  validate_weight_proof_inner(
618
620
  self.constants,
619
621
  executor,
@@ -629,7 +631,7 @@ class WeightProofHandler:
629
631
  valid, _ = await task
630
632
  return valid, fork_point, summaries
631
633
 
632
- def get_fork_point(self, received_summaries: List[SubEpochSummary]) -> Tuple[uint32, int]:
634
+ def get_fork_point(self, received_summaries: list[SubEpochSummary]) -> tuple[uint32, int]:
633
635
  # returns the fork height and ses index
634
636
  # iterate through sub epoch summaries to find fork point
635
637
  fork_point_index = 0
@@ -653,8 +655,8 @@ class WeightProofHandler:
653
655
 
654
656
 
655
657
  def _get_weights_for_sampling(
656
- rng: random.Random, total_weight: uint128, recent_chain: List[HeaderBlock]
657
- ) -> Optional[List[uint128]]:
658
+ rng: random.Random, total_weight: uint128, recent_chain: list[HeaderBlock]
659
+ ) -> Optional[list[uint128]]:
658
660
  weight_to_check = []
659
661
  last_l_weight = recent_chain[-1].reward_chain_block.weight - recent_chain[0].reward_chain_block.weight
660
662
  delta = last_l_weight / total_weight
@@ -675,10 +677,10 @@ def _get_weights_for_sampling(
675
677
  def _sample_sub_epoch(
676
678
  start_of_epoch_weight: uint128,
677
679
  end_of_epoch_weight: uint128,
678
- weight_to_check: Optional[List[uint128]],
680
+ weight_to_check: Optional[list[uint128]],
679
681
  ) -> bool:
680
682
  """
681
- weight_to_check: List[uint128] is expected to be sorted
683
+ weight_to_check: list[uint128] is expected to be sorted
682
684
  """
683
685
  if weight_to_check is None:
684
686
  return True
@@ -717,7 +719,7 @@ async def _challenge_block_vdfs(
717
719
  constants: ConsensusConstants,
718
720
  header_block: HeaderBlock,
719
721
  block_rec: BlockRecord,
720
- sub_blocks: Dict[bytes32, BlockRecord],
722
+ sub_blocks: dict[bytes32, BlockRecord],
721
723
  ) -> SubSlotData:
722
724
  (_, _, _, _, cc_vdf_iters, _) = get_signage_point_vdf_info(
723
725
  constants,
@@ -828,7 +830,7 @@ def handle_end_of_slot(
828
830
  def _validate_sub_epoch_summaries(
829
831
  constants: ConsensusConstants,
830
832
  weight_proof: WeightProof,
831
- ) -> Tuple[Optional[List[SubEpochSummary]], Optional[List[uint128]]]:
833
+ ) -> tuple[Optional[list[SubEpochSummary]], Optional[list[uint128]]]:
832
834
  last_ses_hash, last_ses_sub_height = _get_last_ses_hash(constants, weight_proof.recent_chain_data)
833
835
  if last_ses_hash is None:
834
836
  log.warning("could not find last ses block")
@@ -861,12 +863,12 @@ def _validate_sub_epoch_summaries(
861
863
  def _map_sub_epoch_summaries(
862
864
  sub_blocks_for_se: uint32,
863
865
  ses_hash: bytes32,
864
- sub_epoch_data: List[SubEpochData],
866
+ sub_epoch_data: list[SubEpochData],
865
867
  curr_difficulty: uint64,
866
- ) -> Tuple[List[SubEpochSummary], uint128, List[uint128]]:
868
+ ) -> tuple[list[SubEpochSummary], uint128, list[uint128]]:
867
869
  total_weight: uint128 = uint128(0)
868
- summaries: List[SubEpochSummary] = []
869
- sub_epoch_weight_list: List[uint128] = []
870
+ summaries: list[SubEpochSummary] = []
871
+ sub_epoch_weight_list: list[uint128] = []
870
872
  for idx, data in enumerate(sub_epoch_data):
871
873
  ses = SubEpochSummary(
872
874
  ses_hash,
@@ -879,8 +881,8 @@ def _map_sub_epoch_summaries(
879
881
  if idx < len(sub_epoch_data) - 1:
880
882
  delta = 0
881
883
  if idx > 0:
882
- delta = sub_epoch_data[idx].num_blocks_overflow
883
- log.debug(f"sub epoch {idx} start weight is {total_weight+curr_difficulty} ")
884
+ delta = data.num_blocks_overflow
885
+ log.debug(f"sub epoch {idx} start weight is {total_weight + curr_difficulty} ")
884
886
  sub_epoch_weight_list.append(uint128(total_weight + curr_difficulty))
885
887
  total_weight = uint128(
886
888
  total_weight
@@ -902,7 +904,7 @@ def _map_sub_epoch_summaries(
902
904
  def _validate_summaries_weight(
903
905
  constants: ConsensusConstants,
904
906
  sub_epoch_data_weight: uint128,
905
- summaries: List[SubEpochSummary],
907
+ summaries: list[SubEpochSummary],
906
908
  weight_proof: WeightProof,
907
909
  ) -> bool:
908
910
  num_over = summaries[-1].num_blocks_overflow
@@ -921,10 +923,10 @@ def _validate_sub_epoch_segments(
921
923
  constants: ConsensusConstants,
922
924
  rng: random.Random,
923
925
  weight_proof_bytes: bytes,
924
- summaries_bytes: List[bytes],
926
+ summaries_bytes: list[bytes],
925
927
  height: uint32,
926
928
  validate_from: int = 0,
927
- ) -> Optional[List[Tuple[VDFProof, ClassgroupElement, VDFInfo]]]:
929
+ ) -> Optional[list[tuple[VDFProof, ClassgroupElement, VDFInfo]]]:
928
930
  summaries = summaries_from_bytes(summaries_bytes)
929
931
  sub_epoch_segments: SubEpochSegments = SubEpochSegments.from_bytes(weight_proof_bytes)
930
932
  rc_sub_slot_hash = constants.GENESIS_CHALLENGE
@@ -987,7 +989,7 @@ def _validate_segment(
987
989
  first_segment_in_se: bool,
988
990
  sampled: bool,
989
991
  height: uint32,
990
- ) -> Tuple[bool, int, int, int, List[Tuple[VDFProof, ClassgroupElement, VDFInfo]]]:
992
+ ) -> tuple[bool, int, int, int, list[tuple[VDFProof, ClassgroupElement, VDFInfo]]]:
991
993
  ip_iters, slot_iters, slots = 0, 0, 0
992
994
  after_challenge = False
993
995
  to_validate = []
@@ -1000,9 +1002,7 @@ def _validate_segment(
1000
1002
  if required_iters is None:
1001
1003
  return False, uint64(0), uint64(0), uint64(0), []
1002
1004
  assert sub_slot_data.signage_point_index is not None
1003
- ip_iters = ip_iters + calculate_ip_iters(
1004
- constants, curr_ssi, sub_slot_data.signage_point_index, required_iters
1005
- )
1005
+ ip_iters += calculate_ip_iters(constants, curr_ssi, sub_slot_data.signage_point_index, required_iters)
1006
1006
  vdf_list = _get_challenge_block_vdfs(constants, idx, segment.sub_slots, curr_ssi)
1007
1007
  to_validate.extend(vdf_list)
1008
1008
  elif sampled and after_challenge:
@@ -1011,17 +1011,17 @@ def _validate_segment(
1011
1011
  log.error(f"failed to validate sub slot data {idx} vdfs")
1012
1012
  return False, uint64(0), uint64(0), uint64(0), []
1013
1013
  to_validate.extend(vdf_list)
1014
- slot_iters = slot_iters + curr_ssi
1015
- slots = slots + uint64(1)
1014
+ slot_iters += curr_ssi
1015
+ slots += uint64(1)
1016
1016
  return True, ip_iters, slot_iters, slots, to_validate
1017
1017
 
1018
1018
 
1019
1019
  def _get_challenge_block_vdfs(
1020
1020
  constants: ConsensusConstants,
1021
1021
  sub_slot_idx: int,
1022
- sub_slots: List[SubSlotData],
1022
+ sub_slots: list[SubSlotData],
1023
1023
  ssi: uint64,
1024
- ) -> List[Tuple[VDFProof, ClassgroupElement, VDFInfo]]:
1024
+ ) -> list[tuple[VDFProof, ClassgroupElement, VDFInfo]]:
1025
1025
  to_validate = []
1026
1026
  sub_slot_data = sub_slots[sub_slot_idx]
1027
1027
  if sub_slot_data.cc_signage_point is not None and sub_slot_data.cc_sp_vdf_info:
@@ -1058,9 +1058,9 @@ def _get_challenge_block_vdfs(
1058
1058
  def _validate_sub_slot_data(
1059
1059
  constants: ConsensusConstants,
1060
1060
  sub_slot_idx: int,
1061
- sub_slots: List[SubSlotData],
1061
+ sub_slots: list[SubSlotData],
1062
1062
  ssi: uint64,
1063
- ) -> Tuple[bool, List[Tuple[VDFProof, ClassgroupElement, VDFInfo]]]:
1063
+ ) -> tuple[bool, list[tuple[VDFProof, ClassgroupElement, VDFInfo]]]:
1064
1064
  sub_slot_data = sub_slots[sub_slot_idx]
1065
1065
  assert sub_slot_idx > 0
1066
1066
  prev_ssd = sub_slots[sub_slot_idx - 1]
@@ -1134,7 +1134,7 @@ def sub_slot_data_vdf_input(
1134
1134
  constants: ConsensusConstants,
1135
1135
  sub_slot_data: SubSlotData,
1136
1136
  sub_slot_idx: int,
1137
- sub_slots: List[SubSlotData],
1137
+ sub_slots: list[SubSlotData],
1138
1138
  is_overflow: bool,
1139
1139
  new_sub_slot: bool,
1140
1140
  ssi: uint64,
@@ -1198,9 +1198,9 @@ def sub_slot_data_vdf_input(
1198
1198
  def validate_recent_blocks(
1199
1199
  constants: ConsensusConstants,
1200
1200
  recent_chain_bytes: bytes,
1201
- summaries_bytes: List[bytes],
1201
+ summaries_bytes: list[bytes],
1202
1202
  shutdown_file_path: Optional[pathlib.Path] = None,
1203
- ) -> Tuple[bool, List[bytes]]:
1203
+ ) -> tuple[bool, list[bytes]]:
1204
1204
  recent_chain: RecentChainData = RecentChainData.from_bytes(recent_chain_bytes)
1205
1205
  summaries = summaries_from_bytes(summaries_bytes)
1206
1206
  sub_blocks = BlockCache({})
@@ -1253,8 +1253,9 @@ def validate_recent_blocks(
1253
1253
  adjusted = True
1254
1254
  deficit = get_deficit(constants, deficit, prev_block_record, overflow, len(block.finished_sub_slots))
1255
1255
  if sub_slots > 2 and transaction_blocks > 11 and (tip_height - block.height < last_blocks_to_validate):
1256
+ expected_vs = ValidationState(ssi, diff, None)
1256
1257
  caluclated_required_iters, error = validate_finished_header_block(
1257
- constants, sub_blocks, block, False, diff, ssi, ses_blocks > 2
1258
+ constants, sub_blocks, block, False, expected_vs, ses_blocks > 2
1258
1259
  )
1259
1260
  if error is not None:
1260
1261
  log.error(f"block {block.header_hash} failed validation {error}")
@@ -1266,7 +1267,7 @@ def validate_recent_blocks(
1266
1267
  if ret is None:
1267
1268
  return False, []
1268
1269
  required_iters = ret
1269
- validated_block_count = validated_block_count + 1
1270
+ validated_block_count += 1
1270
1271
 
1271
1272
  curr_block_ses = None if not ses else summaries[ses_idx - 1]
1272
1273
  block_record = header_block_to_sub_block_record(
@@ -1384,7 +1385,7 @@ def __validate_pospace(
1384
1385
  def __get_rc_sub_slot(
1385
1386
  constants: ConsensusConstants,
1386
1387
  segment: SubEpochChallengeSegment,
1387
- summaries: List[SubEpochSummary],
1388
+ summaries: list[SubEpochSummary],
1388
1389
  curr_ssi: uint64,
1389
1390
  ) -> RewardChainSubSlot:
1390
1391
  ses = summaries[uint32(segment.sub_epoch_n - 1)]
@@ -1465,7 +1466,7 @@ def __get_rc_sub_slot(
1465
1466
  return rc_sub_slot
1466
1467
 
1467
1468
 
1468
- def __get_cc_sub_slot(sub_slots: List[SubSlotData], idx: int, ses: Optional[SubEpochSummary]) -> ChallengeChainSubSlot:
1469
+ def __get_cc_sub_slot(sub_slots: list[SubSlotData], idx: int, ses: Optional[SubEpochSummary]) -> ChallengeChainSubSlot:
1469
1470
  sub_slot: Optional[SubSlotData] = None
1470
1471
  for i in reversed(range(0, idx)):
1471
1472
  sub_slot = sub_slots[i]
@@ -1491,8 +1492,8 @@ def __get_cc_sub_slot(sub_slots: List[SubSlotData], idx: int, ses: Optional[SubE
1491
1492
 
1492
1493
 
1493
1494
  def _get_curr_diff_ssi(
1494
- constants: ConsensusConstants, idx: int, summaries: List[SubEpochSummary]
1495
- ) -> Tuple[uint64, uint64]:
1495
+ constants: ConsensusConstants, idx: int, summaries: list[SubEpochSummary]
1496
+ ) -> tuple[uint64, uint64]:
1496
1497
  curr_difficulty = constants.DIFFICULTY_STARTING
1497
1498
  curr_ssi = constants.SUB_SLOT_ITERS_STARTING
1498
1499
  for ses in reversed(summaries[0:idx]):
@@ -1505,7 +1506,7 @@ def _get_curr_diff_ssi(
1505
1506
  return curr_difficulty, curr_ssi
1506
1507
 
1507
1508
 
1508
- def vars_to_bytes(summaries: List[SubEpochSummary], weight_proof: WeightProof) -> Tuple[List[bytes], bytes, bytes]:
1509
+ def vars_to_bytes(summaries: list[SubEpochSummary], weight_proof: WeightProof) -> tuple[list[bytes], bytes, bytes]:
1509
1510
  wp_recent_chain_bytes = bytes(RecentChainData(weight_proof.recent_chain_data))
1510
1511
  wp_segment_bytes = bytes(SubEpochSegments(weight_proof.sub_epoch_segments))
1511
1512
  summary_bytes = []
@@ -1514,7 +1515,7 @@ def vars_to_bytes(summaries: List[SubEpochSummary], weight_proof: WeightProof) -
1514
1515
  return summary_bytes, wp_segment_bytes, wp_recent_chain_bytes
1515
1516
 
1516
1517
 
1517
- def summaries_from_bytes(summaries_bytes: List[bytes]) -> List[SubEpochSummary]:
1518
+ def summaries_from_bytes(summaries_bytes: list[bytes]) -> list[SubEpochSummary]:
1518
1519
  summaries = []
1519
1520
  for summary in summaries_bytes:
1520
1521
  summaries.append(SubEpochSummary.from_bytes(summary))
@@ -1522,8 +1523,8 @@ def summaries_from_bytes(summaries_bytes: List[bytes]) -> List[SubEpochSummary]:
1522
1523
 
1523
1524
 
1524
1525
  def _get_last_ses_hash(
1525
- constants: ConsensusConstants, recent_reward_chain: List[HeaderBlock]
1526
- ) -> Tuple[Optional[bytes32], uint32]:
1526
+ constants: ConsensusConstants, recent_reward_chain: list[HeaderBlock]
1527
+ ) -> tuple[Optional[bytes32], uint32]:
1527
1528
  for idx, block in enumerate(reversed(recent_reward_chain)):
1528
1529
  if (block.reward_chain_block.height % constants.SUB_EPOCH_BLOCKS) == 0:
1529
1530
  idx = len(recent_reward_chain) - 1 - idx # reverse
@@ -1541,8 +1542,8 @@ def _get_last_ses_hash(
1541
1542
  return None, uint32(0)
1542
1543
 
1543
1544
 
1544
- def _get_ses_idx(recent_reward_chain: List[HeaderBlock]) -> List[int]:
1545
- idxs: List[int] = []
1545
+ def _get_ses_idx(recent_reward_chain: list[HeaderBlock]) -> list[int]:
1546
+ idxs: list[int] = []
1546
1547
  for idx, curr in enumerate(recent_reward_chain):
1547
1548
  if len(curr.finished_sub_slots) > 0:
1548
1549
  for slot in curr.finished_sub_slots:
@@ -1591,11 +1592,11 @@ def blue_boxed_end_of_slot(sub_slot: EndOfSubSlotBundle) -> bool:
1591
1592
 
1592
1593
 
1593
1594
  def validate_sub_epoch_sampling(
1594
- rng: random.Random, sub_epoch_weight_list: List[uint128], weight_proof: WeightProof
1595
+ rng: random.Random, sub_epoch_weight_list: list[uint128], weight_proof: WeightProof
1595
1596
  ) -> bool:
1596
1597
  tip = weight_proof.recent_chain_data[-1]
1597
1598
  weight_to_check = _get_weights_for_sampling(rng, tip.weight, weight_proof.recent_chain_data)
1598
- sampled_sub_epochs: Dict[int, bool] = {}
1599
+ sampled_sub_epochs: dict[int, bool] = {}
1599
1600
  for idx in range(1, len(sub_epoch_weight_list)):
1600
1601
  if _sample_sub_epoch(sub_epoch_weight_list[idx - 1], sub_epoch_weight_list[idx], weight_to_check):
1601
1602
  sampled_sub_epochs[idx - 1] = True
@@ -1613,9 +1614,9 @@ def validate_sub_epoch_sampling(
1613
1614
 
1614
1615
 
1615
1616
  def map_segments_by_sub_epoch(
1616
- sub_epoch_segments: List[SubEpochChallengeSegment],
1617
- ) -> Dict[int, List[SubEpochChallengeSegment]]:
1618
- segments: Dict[int, List[SubEpochChallengeSegment]] = {}
1617
+ sub_epoch_segments: list[SubEpochChallengeSegment],
1618
+ ) -> dict[int, list[SubEpochChallengeSegment]]:
1619
+ segments: dict[int, list[SubEpochChallengeSegment]] = {}
1619
1620
  curr_sub_epoch_n = -1
1620
1621
  for idx, segment in enumerate(sub_epoch_segments):
1621
1622
  if curr_sub_epoch_n < segment.sub_epoch_n:
@@ -1627,7 +1628,7 @@ def map_segments_by_sub_epoch(
1627
1628
 
1628
1629
  def _validate_vdf_batch(
1629
1630
  constants: ConsensusConstants,
1630
- vdf_list: List[Tuple[bytes, bytes, bytes]],
1631
+ vdf_list: list[tuple[bytes, bytes, bytes]],
1631
1632
  shutdown_file_path: Optional[pathlib.Path] = None,
1632
1633
  ) -> bool:
1633
1634
  for vdf_proof_bytes, class_group_bytes, info in vdf_list:
@@ -1650,11 +1651,11 @@ async def validate_weight_proof_inner(
1650
1651
  shutdown_file_name: str,
1651
1652
  num_processes: int,
1652
1653
  weight_proof: WeightProof,
1653
- summaries: List[SubEpochSummary],
1654
- sub_epoch_weight_list: List[uint128],
1654
+ summaries: list[SubEpochSummary],
1655
+ sub_epoch_weight_list: list[uint128],
1655
1656
  skip_segment_validation: bool,
1656
1657
  validate_from: int,
1657
- ) -> Tuple[bool, List[BlockRecord]]:
1658
+ ) -> tuple[bool, list[BlockRecord]]:
1658
1659
  assert len(weight_proof.sub_epochs) > 0
1659
1660
  if len(weight_proof.sub_epochs) == 0:
1660
1661
  return False, []
@@ -5,9 +5,10 @@ import concurrent
5
5
  import contextlib
6
6
  import dataclasses
7
7
  import logging
8
+ from collections.abc import AsyncIterator
8
9
  from concurrent.futures.thread import ThreadPoolExecutor
9
10
  from pathlib import Path
10
- from typing import TYPE_CHECKING, Any, AsyncIterator, ClassVar, Dict, List, Optional, Tuple, cast
11
+ from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
11
12
 
12
13
  from typing_extensions import Literal
13
14
 
@@ -71,7 +72,7 @@ class Harvester:
71
72
 
72
73
  return self._server
73
74
 
74
- def __init__(self, root_path: Path, config: Dict[str, Any], constants: ConsensusConstants):
75
+ def __init__(self, root_path: Path, config: dict[str, Any], constants: ConsensusConstants):
75
76
  self.log = log
76
77
  self.root_path = root_path
77
78
  # TODO, remove checks below later after some versions / time
@@ -145,7 +146,7 @@ class Harvester:
145
146
 
146
147
  await self.plot_sync_sender.await_closed()
147
148
 
148
- def get_connections(self, request_node_type: Optional[NodeType]) -> List[Dict[str, Any]]:
149
+ def get_connections(self, request_node_type: Optional[NodeType]) -> list[dict[str, Any]]:
149
150
  return default_get_connections(server=self.server, request_node_type=request_node_type)
150
151
 
151
152
  async def on_connect(self, connection: WSChiaConnection) -> None:
@@ -154,7 +155,7 @@ class Harvester:
154
155
  def _set_state_changed_callback(self, callback: StateChangedProtocol) -> None:
155
156
  self.state_changed_callback = callback
156
157
 
157
- def state_changed(self, change: str, change_data: Optional[Dict[str, Any]] = None) -> None:
158
+ def state_changed(self, change: str, change_data: Optional[dict[str, Any]] = None) -> None:
158
159
  if self.state_changed_callback is not None:
159
160
  self.state_changed_callback(change, change_data)
160
161
 
@@ -181,9 +182,9 @@ class Harvester:
181
182
  asyncio.run_coroutine_threadsafe(self.plot_sync_sender.await_closed(), asyncio.get_running_loop())
182
183
  self.plot_manager.stop_refreshing()
183
184
 
184
- def get_plots(self) -> Tuple[List[Dict[str, Any]], List[str], List[str]]:
185
+ def get_plots(self) -> tuple[list[dict[str, Any]], list[str], list[str]]:
185
186
  self.log.debug(f"get_plots prover items: {self.plot_manager.plot_count()}")
186
- response_plots: List[Dict[str, Any]] = []
187
+ response_plots: list[dict[str, Any]] = []
187
188
  with self.plot_manager:
188
189
  for path, plot_info in self.plot_manager.plots.items():
189
190
  prover = plot_info.prover
@@ -222,7 +223,7 @@ class Harvester:
222
223
  self.plot_manager.trigger_refresh()
223
224
  return True
224
225
 
225
- async def get_plot_directories(self) -> List[str]:
226
+ async def get_plot_directories(self) -> list[str]:
226
227
  return get_plot_directories(self.root_path)
227
228
 
228
229
  async def remove_plot_directory(self, str_path: str) -> bool:
@@ -230,7 +231,7 @@ class Harvester:
230
231
  self.plot_manager.trigger_refresh()
231
232
  return True
232
233
 
233
- async def get_harvester_config(self) -> Dict[str, Any]:
234
+ async def get_harvester_config(self) -> dict[str, Any]:
234
235
  return get_harvester_config(self.root_path)
235
236
 
236
237
  async def update_harvester_config(