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
@@ -7,10 +7,11 @@ import random
7
7
  import re
8
8
  import statistics
9
9
  import time
10
+ from collections.abc import Awaitable
10
11
  from dataclasses import dataclass
11
12
  from pathlib import Path
12
13
  from random import Random
13
- from typing import Any, Awaitable, Callable, Dict, List, Optional, Set, Tuple, cast
14
+ from typing import Any, Callable, Optional, cast
14
15
 
15
16
  import aiohttp
16
17
  import aiosqlite
@@ -55,7 +56,7 @@ log = logging.getLogger(__name__)
55
56
  pytestmark = pytest.mark.data_layer
56
57
 
57
58
 
58
- table_columns: Dict[str, List[str]] = {
59
+ table_columns: dict[str, list[str]] = {
59
60
  "node": ["hash", "node_type", "left", "right", "key", "value"],
60
61
  "root": ["tree_id", "generation", "node_hash", "status"],
61
62
  }
@@ -66,7 +67,7 @@ table_columns: Dict[str, List[str]] = {
66
67
 
67
68
 
68
69
  @pytest.mark.anyio
69
- async def test_valid_node_values_fixture_are_valid(data_store: DataStore, valid_node_values: Dict[str, Any]) -> None:
70
+ async def test_valid_node_values_fixture_are_valid(data_store: DataStore, valid_node_values: dict[str, Any]) -> None:
70
71
  async with data_store.db_wrapper.writer() as writer:
71
72
  await writer.execute(
72
73
  """
@@ -80,7 +81,7 @@ async def test_valid_node_values_fixture_are_valid(data_store: DataStore, valid_
80
81
  @pytest.mark.parametrize(argnames=["table_name", "expected_columns"], argvalues=table_columns.items())
81
82
  @pytest.mark.anyio
82
83
  async def test_create_creates_tables_and_columns(
83
- database_uri: str, table_name: str, expected_columns: List[str]
84
+ database_uri: str, table_name: str, expected_columns: list[str]
84
85
  ) -> None:
85
86
  # Never string-interpolate sql queries... Except maybe in tests when it does not
86
87
  # allow you to parametrize the query.
@@ -101,7 +102,7 @@ async def test_create_creates_tables_and_columns(
101
102
 
102
103
  @pytest.mark.anyio
103
104
  async def test_create_tree_accepts_bytes32(raw_data_store: DataStore) -> None:
104
- store_id = bytes32(b"\0" * 32)
105
+ store_id = bytes32.zeros
105
106
 
106
107
  await raw_data_store.create_tree(store_id=store_id)
107
108
 
@@ -298,7 +299,7 @@ async def test_get_ancestors(data_store: DataStore, store_id: bytes32) -> None:
298
299
 
299
300
  @pytest.mark.anyio
300
301
  async def test_get_ancestors_optimized(data_store: DataStore, store_id: bytes32) -> None:
301
- ancestors: List[Tuple[int, bytes32, List[InternalNode]]] = []
302
+ ancestors: list[tuple[int, bytes32, list[InternalNode]]] = []
302
303
  random = Random()
303
304
  random.seed(100, version=2)
304
305
 
@@ -385,23 +386,23 @@ async def test_batch_update(
385
386
  ) -> None:
386
387
  total_operations = 1000 if use_optimized else 100
387
388
  num_ops_per_batch = total_operations // num_batches
388
- saved_batches: List[List[Dict[str, Any]]] = []
389
- saved_kv: List[List[TerminalNode]] = []
389
+ saved_batches: list[list[dict[str, Any]]] = []
390
+ saved_kv: list[list[TerminalNode]] = []
390
391
  db_uri = generate_in_memory_db_uri()
391
392
  async with DataStore.managed(database=db_uri, uri=True) as single_op_data_store:
392
393
  await single_op_data_store.create_tree(store_id, status=Status.COMMITTED)
393
394
  random = Random()
394
395
  random.seed(100, version=2)
395
396
 
396
- batch: List[Dict[str, Any]] = []
397
- keys_values: Dict[bytes, bytes] = {}
397
+ batch: list[dict[str, Any]] = []
398
+ keys_values: dict[bytes, bytes] = {}
398
399
  for operation in range(num_batches * num_ops_per_batch):
399
400
  [op_type] = random.choices(
400
401
  ["insert", "upsert-insert", "upsert-update", "delete"],
401
402
  [0.4, 0.2, 0.2, 0.2],
402
403
  k=1,
403
404
  )
404
- if op_type == "insert" or op_type == "upsert-insert" or len(keys_values) == 0:
405
+ if op_type in {"insert", "upsert-insert"} or len(keys_values) == 0:
405
406
  if len(keys_values) == 0:
406
407
  op_type = "insert"
407
408
  key = operation.to_bytes(4, byteorder="big")
@@ -468,8 +469,8 @@ async def test_batch_update(
468
469
  assert {node.key: node.value for node in current_kv} == {
469
470
  node.key: node.value for node in saved_kv[batch_number]
470
471
  }
471
- queue: List[bytes32] = [root.node_hash]
472
- ancestors: Dict[bytes32, bytes32] = {}
472
+ queue: list[bytes32] = [root.node_hash]
473
+ ancestors: dict[bytes32, bytes32] = {}
473
474
  while len(queue) > 0:
474
475
  node_hash = queue.pop(0)
475
476
  expected_ancestors = []
@@ -722,7 +723,7 @@ async def test_autoinsert_balances_gaps(data_store: DataStore, store_id: bytes32
722
723
  if i == 0 or i > 10:
723
724
  insert_result = await data_store.autoinsert(key, value, store_id, status=Status.COMMITTED)
724
725
  else:
725
- reference_node_hash = await data_store.get_terminal_node_for_seed(store_id, bytes32([0] * 32))
726
+ reference_node_hash = await data_store.get_terminal_node_for_seed(store_id, bytes32.zeros)
726
727
  insert_result = await data_store.insert(
727
728
  key=key,
728
729
  value=value,
@@ -1124,7 +1125,7 @@ async def test_kv_diff(data_store: DataStore, store_id: bytes32) -> None:
1124
1125
  random = Random()
1125
1126
  random.seed(100, version=2)
1126
1127
  insertions = 0
1127
- expected_diff: Set[DiffData] = set()
1128
+ expected_diff: set[DiffData] = set()
1128
1129
  root_start = None
1129
1130
  for i in range(500):
1130
1131
  key = (i + 100).to_bytes(4, byteorder="big")
@@ -1175,7 +1176,7 @@ async def test_kv_diff_2(data_store: DataStore, store_id: bytes32) -> None:
1175
1176
  reference_node_hash=None,
1176
1177
  side=None,
1177
1178
  )
1178
- empty_hash = bytes32([0] * 32)
1179
+ empty_hash = bytes32.zeros
1179
1180
  invalid_hash = bytes32([0] * 31 + [1])
1180
1181
  diff_1 = await data_store.get_kv_diff(store_id, empty_hash, insert_result.node_hash)
1181
1182
  assert diff_1 == {DiffData(OperationType.INSERT, b"000", b"000")}
@@ -1251,7 +1252,7 @@ async def test_subscribe_unsubscribe(data_store: DataStore, store_id: bytes32) -
1251
1252
 
1252
1253
  await data_store.unsubscribe(store_id)
1253
1254
  assert await data_store.get_subscriptions() == []
1254
- store_id2 = bytes32([0] * 32)
1255
+ store_id2 = bytes32.zeros
1255
1256
 
1256
1257
  await data_store.subscribe(
1257
1258
  Subscription(
@@ -1422,7 +1423,7 @@ async def test_data_server_files(
1422
1423
  group_files_by_store: bool,
1423
1424
  tmp_path: Path,
1424
1425
  ) -> None:
1425
- roots: List[Root] = []
1426
+ roots: list[Root] = []
1426
1427
  num_batches = 10
1427
1428
  num_ops_per_batch = 100
1428
1429
 
@@ -1432,11 +1433,11 @@ async def test_data_server_files(
1432
1433
  random = Random()
1433
1434
  random.seed(100, version=2)
1434
1435
 
1435
- keys: List[bytes] = []
1436
+ keys: list[bytes] = []
1436
1437
  counter = 0
1437
1438
 
1438
1439
  for batch in range(num_batches):
1439
- changelist: List[Dict[str, Any]] = []
1440
+ changelist: list[dict[str, Any]] = []
1440
1441
  for operation in range(num_ops_per_batch):
1441
1442
  if random.randint(0, 4) > 0 or len(keys) == 0:
1442
1443
  key = counter.to_bytes(4, byteorder="big")
@@ -1649,7 +1650,7 @@ async def test_benchmark_batch_insert_speed_multiple_batches(
1649
1650
 
1650
1651
  @pytest.mark.anyio
1651
1652
  async def test_delete_store_data(raw_data_store: DataStore) -> None:
1652
- store_id = bytes32(b"\0" * 32)
1653
+ store_id = bytes32.zeros
1653
1654
  store_id_2 = bytes32(b"\0" * 31 + b"\1")
1654
1655
  await raw_data_store.create_tree(store_id=store_id, status=Status.COMMITTED)
1655
1656
  await raw_data_store.create_tree(store_id=store_id_2, status=Status.COMMITTED)
@@ -1864,7 +1865,7 @@ async def test_insert_from_delta_file(
1864
1865
  for generation in range(1, num_files + 2):
1865
1866
  root = await data_store.get_tree_root(store_id=store_id, generation=generation)
1866
1867
  await write_files_for_root(data_store, store_id, root, tmp_path_1, 0, False, group_files_by_store)
1867
- root_hashes.append(bytes32([0] * 32) if root.node_hash is None else root.node_hash)
1868
+ root_hashes.append(bytes32.zeros if root.node_hash is None else root.node_hash)
1868
1869
  store_path = tmp_path_1.joinpath(f"{store_id}") if group_files_by_store else tmp_path_1
1869
1870
  with os.scandir(store_path) as entries:
1870
1871
  filenames = {entry.name for entry in entries}
@@ -2019,7 +2020,7 @@ async def test_insert_from_delta_file_correct_file_exists(
2019
2020
  for generation in range(1, num_files + 2):
2020
2021
  root = await data_store.get_tree_root(store_id=store_id, generation=generation)
2021
2022
  await write_files_for_root(data_store, store_id, root, tmp_path, 0, group_by_store=group_files_by_store)
2022
- root_hashes.append(bytes32([0] * 32) if root.node_hash is None else root.node_hash)
2023
+ root_hashes.append(bytes32.zeros if root.node_hash is None else root.node_hash)
2023
2024
  store_path = tmp_path.joinpath(f"{store_id}") if group_files_by_store else tmp_path
2024
2025
  with os.scandir(store_path) as entries:
2025
2026
  filenames = {entry.name for entry in entries}
@@ -2156,7 +2157,7 @@ async def test_update_keys(data_store: DataStore, store_id: bytes32, use_upsert:
2156
2157
  num_values = 10
2157
2158
  new_keys = 10
2158
2159
  for value in range(num_values):
2159
- changelist: List[Dict[str, Any]] = []
2160
+ changelist: list[dict[str, Any]] = []
2160
2161
  bytes_value = value.to_bytes(4, byteorder="big")
2161
2162
  if use_upsert:
2162
2163
  for key in range(num_keys):
@@ -2201,10 +2202,10 @@ async def test_migration_unknown_version(data_store: DataStore) -> None:
2201
2202
 
2202
2203
  async def _check_ancestors(
2203
2204
  data_store: DataStore, store_id: bytes32, root_hash: bytes32
2204
- ) -> Dict[bytes32, Optional[bytes32]]:
2205
- ancestors: Dict[bytes32, Optional[bytes32]] = {}
2205
+ ) -> dict[bytes32, Optional[bytes32]]:
2206
+ ancestors: dict[bytes32, Optional[bytes32]] = {}
2206
2207
  root_node: Node = await data_store.get_node(root_hash)
2207
- queue: List[Node] = [root_node]
2208
+ queue: list[Node] = [root_node]
2208
2209
 
2209
2210
  while queue:
2210
2211
  node = queue.pop(0)
@@ -2231,7 +2232,7 @@ async def _check_ancestors(
2231
2232
  @pytest.mark.anyio
2232
2233
  async def test_build_ancestor_table(data_store: DataStore, store_id: bytes32) -> None:
2233
2234
  num_values = 1000
2234
- changelist: List[Dict[str, Any]] = []
2235
+ changelist: list[dict[str, Any]] = []
2235
2236
  for value in range(num_values):
2236
2237
  value_bytes = value.to_bytes(4, byteorder="big")
2237
2238
  changelist.append({"action": "upsert", "key": value_bytes, "value": value_bytes})
@@ -2295,12 +2296,12 @@ async def test_sparse_ancestor_table(data_store: DataStore, store_id: bytes32) -
2295
2296
  assert previous_generation_count == 184
2296
2297
 
2297
2298
 
2298
- async def get_all_nodes(data_store: DataStore, store_id: bytes32) -> List[Node]:
2299
+ async def get_all_nodes(data_store: DataStore, store_id: bytes32) -> list[Node]:
2299
2300
  root = await data_store.get_tree_root(store_id)
2300
2301
  assert root.node_hash is not None
2301
2302
  root_node = await data_store.get_node(root.node_hash)
2302
- nodes: List[Node] = []
2303
- queue: List[Node] = [root_node]
2303
+ nodes: list[Node] = []
2304
+ queue: list[Node] = [root_node]
2304
2305
 
2305
2306
  while len(queue) > 0:
2306
2307
  node = queue.pop(0)
@@ -2317,7 +2318,7 @@ async def get_all_nodes(data_store: DataStore, store_id: bytes32) -> List[Node]:
2317
2318
  @pytest.mark.anyio
2318
2319
  async def test_get_nodes(data_store: DataStore, store_id: bytes32) -> None:
2319
2320
  num_values = 50
2320
- changelist: List[Dict[str, Any]] = []
2321
+ changelist: list[dict[str, Any]] = []
2321
2322
 
2322
2323
  for value in range(num_values):
2323
2324
  value_bytes = value.to_bytes(4, byteorder="big")
@@ -2332,7 +2333,7 @@ async def test_get_nodes(data_store: DataStore, store_id: bytes32) -> None:
2332
2333
  nodes = await data_store.get_nodes([node.hash for node in expected_nodes])
2333
2334
  assert nodes == expected_nodes
2334
2335
 
2335
- node_hash = bytes32([0] * 32)
2336
+ node_hash = bytes32.zeros
2336
2337
  node_hash_2 = bytes32([0] * 31 + [1])
2337
2338
  with pytest.raises(Exception, match=f"^Nodes not found for hashes: {node_hash.hex()}, {node_hash_2.hex()}"):
2338
2339
  await data_store.get_nodes([node_hash, node_hash_2] + [node.hash for node in expected_nodes])
@@ -2349,11 +2350,11 @@ async def test_get_leaf_at_minimum_height(
2349
2350
  ) -> None:
2350
2351
  num_values = 1000
2351
2352
  value_offset = 1000000
2352
- all_min_leafs: Set[TerminalNode] = set()
2353
+ all_min_leafs: set[TerminalNode] = set()
2353
2354
 
2354
2355
  if pre > 0:
2355
2356
  # This builds a complete binary tree, in order to test more than one batch in the queue before finding the leaf
2356
- changelist: List[Dict[str, Any]] = []
2357
+ changelist: list[dict[str, Any]] = []
2357
2358
 
2358
2359
  for value in range(pre):
2359
2360
  value_bytes = (value * value).to_bytes(8, byteorder="big")
@@ -2375,12 +2376,12 @@ async def test_get_leaf_at_minimum_height(
2375
2376
  )
2376
2377
 
2377
2378
  if (value + 1) % batch_size == 0:
2378
- hash_to_parent: Dict[bytes32, InternalNode] = {}
2379
+ hash_to_parent: dict[bytes32, InternalNode] = {}
2379
2380
  root = await data_store.get_tree_root(store_id)
2380
2381
  assert root.node_hash is not None
2381
2382
  min_leaf = await data_store.get_leaf_at_minimum_height(root.node_hash, hash_to_parent)
2382
2383
  all_nodes = await get_all_nodes(data_store, store_id)
2383
- heights: Dict[bytes32, int] = {}
2384
+ heights: dict[bytes32, int] = {}
2384
2385
  heights[root.node_hash] = 0
2385
2386
  min_leaf_height = None
2386
2387
 
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import sqlite3
4
- from typing import Any, Dict
4
+ from typing import Any
5
5
 
6
6
  import pytest
7
7
 
@@ -35,7 +35,7 @@ async def test_node_hash_must_be_32(
35
35
  data_store: DataStore,
36
36
  store_id: bytes32,
37
37
  length: int,
38
- valid_node_values: Dict[str, Any],
38
+ valid_node_values: dict[str, Any],
39
39
  ) -> None:
40
40
  valid_node_values["hash"] = bytes([0] * length)
41
41
 
@@ -54,7 +54,7 @@ async def test_node_hash_must_be_32(
54
54
  async def test_node_hash_must_not_be_null(
55
55
  data_store: DataStore,
56
56
  store_id: bytes32,
57
- valid_node_values: Dict[str, Any],
57
+ valid_node_values: dict[str, Any],
58
58
  ) -> None:
59
59
  valid_node_values["hash"] = None
60
60
 
@@ -74,7 +74,7 @@ async def test_node_type_must_be_valid(
74
74
  data_store: DataStore,
75
75
  node_type: NodeType,
76
76
  bad_node_type: int,
77
- valid_node_values: Dict[str, Any],
77
+ valid_node_values: dict[str, Any],
78
78
  ) -> None:
79
79
  valid_node_values["node_type"] = bad_node_type
80
80
 
@@ -212,7 +212,7 @@ async def test_root_generation_must_not_be_less_than_zero(
212
212
  ) -> None:
213
213
  example = await add_01234567_example(data_store=data_store, store_id=store_id)
214
214
  values = {
215
- "tree_id": bytes32([0] * 32),
215
+ "tree_id": bytes32.zeros,
216
216
  "generation": generation,
217
217
  "node_hash": example.terminal_nodes[0],
218
218
  "status": Status.PENDING,
@@ -233,7 +233,7 @@ async def test_root_generation_must_not_be_less_than_zero(
233
233
  async def test_root_generation_must_not_be_null(data_store: DataStore, store_id: bytes32) -> None:
234
234
  example = await add_01234567_example(data_store=data_store, store_id=store_id)
235
235
  values = {
236
- "tree_id": bytes32([0] * 32),
236
+ "tree_id": bytes32.zeros,
237
237
  "generation": None,
238
238
  "node_hash": example.terminal_nodes[0],
239
239
  "status": Status.PENDING,
@@ -252,7 +252,7 @@ async def test_root_generation_must_not_be_null(data_store: DataStore, store_id:
252
252
 
253
253
  @pytest.mark.anyio
254
254
  async def test_root_node_hash_must_reference(data_store: DataStore) -> None:
255
- values = {"tree_id": bytes32([0] * 32), "generation": 0, "node_hash": bytes32([0] * 32), "status": Status.PENDING}
255
+ values = {"tree_id": bytes32.zeros, "generation": 0, "node_hash": bytes32.zeros, "status": Status.PENDING}
256
256
 
257
257
  async with data_store.db_wrapper.writer() as writer:
258
258
  with pytest.raises(sqlite3.IntegrityError, match=r"^FOREIGN KEY constraint failed$"):
@@ -270,7 +270,7 @@ async def test_root_node_hash_must_reference(data_store: DataStore) -> None:
270
270
  async def test_root_status_must_be_valid(data_store: DataStore, store_id: bytes32, bad_status: int) -> None:
271
271
  example = await add_01234567_example(data_store=data_store, store_id=store_id)
272
272
  values = {
273
- "tree_id": bytes32([0] * 32),
273
+ "tree_id": bytes32.zeros,
274
274
  "generation": 0,
275
275
  "node_hash": example.terminal_nodes[0],
276
276
  "status": bad_status,
@@ -290,7 +290,7 @@ async def test_root_status_must_be_valid(data_store: DataStore, store_id: bytes3
290
290
  @pytest.mark.anyio
291
291
  async def test_root_status_must_not_be_null(data_store: DataStore, store_id: bytes32) -> None:
292
292
  example = await add_01234567_example(data_store=data_store, store_id=store_id)
293
- values = {"tree_id": bytes32([0] * 32), "generation": 0, "node_hash": example.terminal_nodes[0], "status": None}
293
+ values = {"tree_id": bytes32.zeros, "generation": 0, "node_hash": example.terminal_nodes[0], "status": None}
294
294
 
295
295
  async with data_store.db_wrapper.writer() as writer:
296
296
  with pytest.raises(sqlite3.IntegrityError, match=r"^NOT NULL constraint failed: root.status$"):
@@ -334,7 +334,7 @@ async def test_ancestors_ancestor_must_be_32(
334
334
  INSERT INTO ancestors(hash, ancestor, tree_id, generation)
335
335
  VALUES(:hash, :ancestor, :tree_id, :generation)
336
336
  """,
337
- {"hash": node_hash, "ancestor": bytes([0] * length), "tree_id": bytes32([0] * 32), "generation": 0},
337
+ {"hash": node_hash, "ancestor": bytes([0] * length), "tree_id": bytes32.zeros, "generation": 0},
338
338
  )
339
339
 
340
340
 
@@ -353,7 +353,7 @@ async def test_ancestors_store_id_must_be_32(
353
353
  INSERT INTO ancestors(hash, ancestor, tree_id, generation)
354
354
  VALUES(:hash, :ancestor, :tree_id, :generation)
355
355
  """,
356
- {"hash": node_hash, "ancestor": bytes32([0] * 32), "tree_id": bytes([0] * length), "generation": 0},
356
+ {"hash": node_hash, "ancestor": bytes32.zeros, "tree_id": bytes([0] * length), "generation": 0},
357
357
  )
358
358
 
359
359
 
@@ -6,8 +6,9 @@ import os
6
6
  import pathlib
7
7
  import shutil
8
8
  import subprocess
9
+ from collections.abc import Iterator
9
10
  from dataclasses import dataclass
10
- from typing import IO, TYPE_CHECKING, Any, Dict, Iterator, List, Literal, Optional, Union, overload
11
+ from typing import IO, TYPE_CHECKING, Any, Literal, Optional, Union, overload
11
12
 
12
13
  from chia.data_layer.data_layer_util import InternalNode, Node, NodeType, Side, Status, TerminalNode
13
14
  from chia.data_layer.data_store import DataStore
@@ -15,7 +16,7 @@ from chia.types.blockchain_format.program import Program
15
16
  from chia.types.blockchain_format.sized_bytes import bytes32
16
17
 
17
18
  # from subprocess.pyi
18
- _FILE = Union[None, int, IO[Any]]
19
+ _FILE = Union[int, IO[Any], None]
19
20
 
20
21
 
21
22
  if TYPE_CHECKING:
@@ -49,7 +50,7 @@ async def general_insert(
49
50
  @dataclass(frozen=True)
50
51
  class Example:
51
52
  expected: Node
52
- terminal_nodes: List[bytes32]
53
+ terminal_nodes: list[bytes32]
53
54
 
54
55
 
55
56
  async def add_0123_example(data_store: DataStore, store_id: bytes32) -> Example:
@@ -121,7 +122,7 @@ class ChiaRoot:
121
122
 
122
123
  def run(
123
124
  self,
124
- args: List[Union[str, os_PathLike_str]],
125
+ args: list[Union[str, os_PathLike_str]],
125
126
  *other_args: Any,
126
127
  check: bool = True,
127
128
  encoding: str = "utf-8",
@@ -141,13 +142,13 @@ class ChiaRoot:
141
142
  chia_executable = shutil.which("chia")
142
143
  if chia_executable is None:
143
144
  chia_executable = "chia"
144
- modified_args: List[Union[str, os_PathLike_str]] = [
145
+ modified_args: list[Union[str, os_PathLike_str]] = [
145
146
  self.scripts_path.joinpath(chia_executable),
146
147
  "--root-path",
147
148
  self.path,
148
149
  *args,
149
150
  ]
150
- processed_args: List[str] = [os.fspath(element) for element in modified_args]
151
+ processed_args: list[str] = [os.fspath(element) for element in modified_args]
151
152
  final_args = [processed_args, *other_args]
152
153
 
153
154
  kwargs["check"] = check
@@ -156,7 +157,7 @@ class ChiaRoot:
156
157
  kwargs["stderr"] = stderr
157
158
 
158
159
  try:
159
- return subprocess.run(*final_args, **kwargs)
160
+ return subprocess.run(*final_args, **kwargs) # noqa: PLW1510
160
161
  except OSError as e:
161
162
  raise Exception(f"failed to run:\n {final_args}\n {kwargs}") from e
162
163
 
@@ -191,20 +192,20 @@ def create_valid_node_values(
191
192
  node_type: Literal[NodeType.INTERNAL],
192
193
  left_hash: bytes32,
193
194
  right_hash: bytes32,
194
- ) -> Dict[str, Any]: ...
195
+ ) -> dict[str, Any]: ...
195
196
 
196
197
 
197
198
  @overload
198
199
  def create_valid_node_values(
199
200
  node_type: Literal[NodeType.TERMINAL],
200
- ) -> Dict[str, Any]: ...
201
+ ) -> dict[str, Any]: ...
201
202
 
202
203
 
203
204
  def create_valid_node_values(
204
205
  node_type: NodeType,
205
206
  left_hash: Optional[bytes32] = None,
206
207
  right_hash: Optional[bytes32] = None,
207
- ) -> Dict[str, Any]:
208
+ ) -> dict[str, Any]:
208
209
  if node_type == NodeType.INTERNAL:
209
210
  assert left_hash is not None
210
211
  assert right_hash is not None
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
- from asyncio import Task, create_task, gather, sleep
4
- from typing import Any, Coroutine, Optional, TypeVar
3
+ from asyncio import Task, gather, sleep
4
+ from collections.abc import Coroutine
5
+ from typing import Any, Optional, TypeVar
5
6
 
6
7
  import pytest
7
8
 
@@ -19,13 +20,14 @@ from chia.protocols.protocol_message_types import ProtocolMessageTypes
19
20
  from chia.server.outbound_message import Message, NodeType
20
21
  from chia.util.hash import std_hash
21
22
  from chia.util.ints import uint8, uint32, uint64
23
+ from chia.util.task_referencer import create_referenced_task
22
24
 
23
25
  T = TypeVar("T")
24
26
 
25
27
 
26
28
  async def begin_task(coro: Coroutine[Any, Any, T]) -> Task[T]:
27
29
  """Awaitable function that adds a coroutine to the event loop and sets it running."""
28
- task = create_task(coro)
30
+ task = create_referenced_task(coro)
29
31
  await sleep(0)
30
32
 
31
33
  return task
@@ -38,7 +40,7 @@ async def test_farmer_ignores_concurrent_duplicate_signage_points(
38
40
  _, farmer_service, _ = farmer_one_harvester
39
41
  farmer_api: FarmerAPI = farmer_service._api
40
42
  farmer_server = farmer_service._server
41
- incoming_queue, peer_id = await add_dummy_connection(farmer_server, self_hostname, 12312, NodeType.HARVESTER)
43
+ incoming_queue, _peer_id = await add_dummy_connection(farmer_server, self_hostname, 12312, NodeType.HARVESTER)
42
44
  # Consume the handshake
43
45
  response = (await incoming_queue.get()).type
44
46
  assert ProtocolMessageTypes(response).name == "harvester_handshake"
@@ -1,15 +1,11 @@
1
- # flake8: noqa: F811, F401
2
1
  from __future__ import annotations
3
2
 
4
3
  import asyncio
5
- import dataclasses
6
4
  import logging
7
5
  import time
8
- from typing import List
9
6
 
10
7
  import pytest
11
8
 
12
- from chia._tests.conftest import ConsensusMode
13
9
  from chia._tests.core.node_height import node_height_between, node_height_exactly
14
10
  from chia._tests.util.time_out_assert import time_out_assert
15
11
  from chia.full_node.full_node import FullNode
@@ -31,7 +27,7 @@ class TestFullSync:
31
27
  async def test_long_sync_from_zero(self, five_nodes, default_400_blocks, bt, self_hostname):
32
28
  # Must be larger than "sync_block_behind_threshold" in the config
33
29
  num_blocks = len(default_400_blocks)
34
- blocks: List[FullBlock] = default_400_blocks
30
+ blocks: list[FullBlock] = default_400_blocks
35
31
  full_node_1, full_node_2, full_node_3, full_node_4, full_node_5 = five_nodes
36
32
  server_1 = full_node_1.full_node.server
37
33
  server_2 = full_node_2.full_node.server
@@ -117,7 +113,6 @@ class TestFullSync:
117
113
  async def test_sync_from_fork_point_and_weight_proof(
118
114
  self, three_nodes, default_1000_blocks, default_400_blocks, self_hostname
119
115
  ):
120
- start = time.time()
121
116
  # Must be larger than "sync_block_behind_threshold" in the config
122
117
  num_blocks_initial = len(default_1000_blocks) - 50
123
118
  blocks_950 = default_1000_blocks[:num_blocks_initial]
@@ -345,7 +340,7 @@ class TestFullSync:
345
340
  assert peak1 is not None
346
341
 
347
342
  summary_heights = full_node_1.full_node.blockchain.get_ses_heights()
348
- summaries: List[SubEpochSummary] = []
343
+ summaries: list[SubEpochSummary] = []
349
344
 
350
345
  # get ses list
351
346
  for sub_epoch_n, ses_height in enumerate(summary_heights):
@@ -395,7 +390,7 @@ class TestFullSync:
395
390
  await server_2.start_client(PeerInfo(self_hostname, server_1.get_port()), full_node_2.full_node.on_connect)
396
391
  await server_3.start_client(PeerInfo(self_hostname, server_1.get_port()), full_node_3.full_node.on_connect)
397
392
 
398
- peers: List = [c for c in full_node_2.full_node.server.all_connections.values()]
393
+ peers: list = [c for c in full_node_2.full_node.server.all_connections.values()]
399
394
  request = full_node_protocol.RequestProofOfWeight(
400
395
  blocks_950[-1].height + 1, default_1000_blocks[-1].header_hash
401
396
  )
@@ -406,7 +401,7 @@ class TestFullSync:
406
401
  log.info(f"result was {res}")
407
402
  assert duration < 1
408
403
 
409
- peers: List = [c for c in full_node_3.full_node.server.all_connections.values()]
404
+ peers: list = [c for c in full_node_3.full_node.server.all_connections.values()]
410
405
  request = full_node_protocol.RequestProofOfWeight(
411
406
  blocks_950[-1].height + 1, default_1000_blocks[-1].header_hash
412
407
  )
@@ -420,7 +415,7 @@ class TestFullSync:
420
415
  async def test_bad_peak_cache_invalidation(
421
416
  self, two_nodes, default_1000_blocks, blockchain_constants, consensus_mode
422
417
  ):
423
- full_node_1, full_node_2, server_1, server_2, bt = two_nodes
418
+ full_node_1, _full_node_2, _server_1, _server_2, bt = two_nodes
424
419
 
425
420
  for block in default_1000_blocks[:-500]:
426
421
  await full_node_1.full_node.add_block(block)
@@ -2,8 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  import contextlib
4
4
  import random
5
+ from collections.abc import AsyncIterator
5
6
  from pathlib import Path
6
- from typing import AsyncIterator, Tuple
7
7
 
8
8
  from chia.consensus.blockchain import Blockchain
9
9
  from chia.consensus.constants import ConsensusConstants
@@ -15,7 +15,7 @@ from chia.util.db_wrapper import DBWrapper2
15
15
  @contextlib.asynccontextmanager
16
16
  async def create_ram_blockchain(
17
17
  consensus_constants: ConsensusConstants,
18
- ) -> AsyncIterator[Tuple[DBWrapper2, Blockchain]]:
18
+ ) -> AsyncIterator[tuple[DBWrapper2, Blockchain]]:
19
19
  uri = f"file:db_{random.randint(0, 99999999)}?mode=memory&cache=shared"
20
20
  async with DBWrapper2.managed(database=uri, uri=True, reader_count=1, db_version=2) as db_wrapper:
21
21
  block_store = await BlockStore.create(db_wrapper)