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
@@ -2,18 +2,19 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
  import pathlib
5
- from typing import List
6
5
 
7
6
  import pytest
8
7
  from chia_rs import G1Element
9
8
  from clvm_tools import binutils
10
9
 
10
+ from chia._tests.core.make_block_generator import make_block_generator
11
+ from chia._tests.util.get_name_puzzle_conditions import get_name_puzzle_conditions
11
12
  from chia._tests.util.misc import BenchmarkRunner
12
13
  from chia.consensus.condition_costs import ConditionCost
13
14
  from chia.consensus.cost_calculator import NPCResult
14
15
  from chia.consensus.default_constants import DEFAULT_CONSTANTS
15
16
  from chia.full_node.bundle_tools import simple_solution_generator
16
- from chia.full_node.mempool_check_conditions import get_name_puzzle_conditions, get_puzzle_and_solution_for_coin
17
+ from chia.full_node.mempool_check_conditions import get_puzzle_and_solution_for_coin
17
18
  from chia.simulator.block_tools import BlockTools, test_constants
18
19
  from chia.types.blockchain_format.coin import Coin
19
20
  from chia.types.blockchain_format.program import Program
@@ -23,8 +24,6 @@ from chia.types.generator_types import BlockGenerator
23
24
  from chia.util.ints import uint32, uint64
24
25
  from chia.wallet.puzzles import p2_delegated_puzzle_or_hidden_puzzle
25
26
 
26
- from .make_block_generator import make_block_generator
27
-
28
27
  BURN_PUZZLE_HASH = bytes32(b"0" * 32)
29
28
  SMALL_BLOCK_GENERATOR = make_block_generator(1)
30
29
 
@@ -277,7 +276,7 @@ async def test_standard_tx(benchmark_runner: BenchmarkRunner) -> None:
277
276
  with benchmark_runner.assert_runtime(seconds=0.1):
278
277
  total_cost = 0
279
278
  for i in range(0, 1000):
280
- cost, result = puzzle_program.run_with_cost(test_constants.MAX_BLOCK_COST_CLVM, solution_program)
279
+ cost, _result = puzzle_program.run_with_cost(test_constants.MAX_BLOCK_COST_CLVM, solution_program)
281
280
  total_cost += cost
282
281
 
283
282
 
@@ -293,7 +292,7 @@ async def test_get_puzzle_and_solution_for_coin_performance(benchmark_runner: Be
293
292
  )
294
293
 
295
294
  coin_spends = result.first()
296
- spent_coins: List[Coin] = []
295
+ spent_coins: list[Coin] = []
297
296
  for spend in coin_spends.as_iter():
298
297
  parent, puzzle, amount_program, _ = spend.as_iter()
299
298
  parent_coin_info = parent.as_atom()
@@ -58,7 +58,7 @@ async def test_unknown_messages(
58
58
  return "Non existing function: request_children" in caplog.text
59
59
 
60
60
  with caplog.at_level(logging.ERROR):
61
- msg = make_msg(ProtocolMessageTypes.request_children, RequestChildren(bytes32(b"\0" * 32)))
61
+ msg = make_msg(ProtocolMessageTypes.request_children, RequestChildren(bytes32.zeros))
62
62
  assert await connection.send_message(msg)
63
63
  await time_out_assert(10, receiving_failed)
64
64
 
@@ -83,7 +83,7 @@ async def test_valid_message(
83
83
 
84
84
  msg = make_msg(
85
85
  ProtocolMessageTypes.new_peak,
86
- NewPeak(bytes32(b"\0" * 32), uint32(2), uint128(1), uint32(1), bytes32(b"\1" * 32)),
86
+ NewPeak(bytes32.zeros, uint32(2), uint128(1), uint32(1), bytes32(b"\1" * 32)),
87
87
  )
88
88
  assert await connection.send_message(msg)
89
89
  await time_out_assert(10, peer_added)
@@ -2,12 +2,12 @@ from __future__ import annotations
2
2
 
3
3
  import random
4
4
  from pathlib import Path
5
- from typing import List, Tuple
6
5
 
7
6
  import pytest
8
7
 
9
8
  from chia._tests.util.temp_file import TempFile
10
9
  from chia.cmds.db_upgrade_func import convert_v1_to_v2
10
+ from chia.consensus.block_body_validation import ForkInfo
11
11
  from chia.consensus.blockchain import Blockchain
12
12
  from chia.consensus.multiprocess_validation import PreValidationResult
13
13
  from chia.full_node.block_store import BlockStore
@@ -32,7 +32,7 @@ def rand_bytes(num) -> bytes:
32
32
  async def test_blocks(default_1000_blocks, with_hints: bool):
33
33
  blocks = default_1000_blocks
34
34
 
35
- hints: List[Tuple[bytes32, bytes]] = []
35
+ hints: list[tuple[bytes32, bytes]] = []
36
36
  for i in range(351):
37
37
  hints.append((bytes32(rand_bytes(32)), rand_bytes(20)))
38
38
 
@@ -74,8 +74,9 @@ async def test_blocks(default_1000_blocks, with_hints: bool):
74
74
  if block.finished_sub_slots[0].challenge_chain.new_sub_slot_iters is not None:
75
75
  sub_slot_iters = block.finished_sub_slots[0].challenge_chain.new_sub_slot_iters
76
76
  # await _validate_and_add_block(bc, block)
77
- results = PreValidationResult(None, uint64(1), None, False, uint32(0))
78
- result, err, _ = await bc.add_block(block, results, None, sub_slot_iters=sub_slot_iters)
77
+ results = PreValidationResult(None, uint64(1), None, uint32(0))
78
+ fork_info = ForkInfo(block.height - 1, block.height - 1, block.prev_header_hash)
79
+ _, err, _ = await bc.add_block(block, results, sub_slot_iters=sub_slot_iters, fork_info=fork_info)
79
80
  assert err is None
80
81
 
81
82
  # now, convert v1 in_file to v2 out_file
@@ -4,12 +4,12 @@ import random
4
4
  import sqlite3
5
5
  from contextlib import closing
6
6
  from pathlib import Path
7
- from typing import List
8
7
 
9
8
  import pytest
10
9
 
11
10
  from chia._tests.util.temp_file import TempFile
12
11
  from chia.cmds.db_validate_func import validate_v2
12
+ from chia.consensus.block_body_validation import ForkInfo
13
13
  from chia.consensus.blockchain import Blockchain
14
14
  from chia.consensus.default_constants import DEFAULT_CONSTANTS
15
15
  from chia.consensus.multiprocess_validation import PreValidationResult
@@ -128,7 +128,7 @@ def test_db_validate_in_main_chain(invalid_in_chain: bool) -> None:
128
128
  validate_v2(db_file, validate_blocks=False)
129
129
 
130
130
 
131
- async def make_db(db_file: Path, blocks: List[FullBlock]) -> None:
131
+ async def make_db(db_file: Path, blocks: list[FullBlock]) -> None:
132
132
  async with DBWrapper2.managed(database=db_file, reader_count=1, db_version=2) as db_wrapper:
133
133
  async with db_wrapper.writer_maybe_transaction() as conn:
134
134
  # this is done by chia init normally
@@ -144,13 +144,14 @@ async def make_db(db_file: Path, blocks: List[FullBlock]) -> None:
144
144
  if block.height != 0 and len(block.finished_sub_slots) > 0:
145
145
  if block.finished_sub_slots[0].challenge_chain.new_sub_slot_iters is not None:
146
146
  sub_slot_iters = block.finished_sub_slots[0].challenge_chain.new_sub_slot_iters
147
- results = PreValidationResult(None, uint64(1), None, False, uint32(0))
148
- result, err, _ = await bc.add_block(block, results, None, sub_slot_iters=sub_slot_iters)
147
+ results = PreValidationResult(None, uint64(1), None, uint32(0))
148
+ fork_info = ForkInfo(block.height - 1, block.height - 1, block.prev_header_hash)
149
+ _, err, _ = await bc.add_block(block, results, sub_slot_iters=sub_slot_iters, fork_info=fork_info)
149
150
  assert err is None
150
151
 
151
152
 
152
153
  @pytest.mark.anyio
153
- async def test_db_validate_default_1000_blocks(default_1000_blocks: List[FullBlock]) -> None:
154
+ async def test_db_validate_default_1000_blocks(default_1000_blocks: list[FullBlock]) -> None:
154
155
  with TempFile() as db_file:
155
156
  await make_db(db_file, default_1000_blocks)
156
157
 
@@ -5,11 +5,12 @@ import logging
5
5
  import operator
6
6
  import sys
7
7
  import time
8
+ from collections.abc import Awaitable
8
9
  from math import ceil
9
10
  from os import mkdir
10
11
  from pathlib import Path
11
12
  from shutil import copy
12
- from typing import Any, Awaitable, Callable, Dict, List, Union, cast
13
+ from typing import Any, Callable, Union, cast
13
14
 
14
15
  import pytest
15
16
 
@@ -46,7 +47,7 @@ log = logging.getLogger(__name__)
46
47
  async def wait_for_plot_sync(receiver: Receiver, previous_last_sync_id: uint64) -> None:
47
48
  def wait() -> bool:
48
49
  current_last_sync_id = receiver.last_sync().sync_id
49
- return current_last_sync_id != 0 and current_last_sync_id != previous_last_sync_id
50
+ return current_last_sync_id not in {0, previous_last_sync_id}
50
51
 
51
52
  await time_out_assert(30, wait)
52
53
 
@@ -358,8 +359,8 @@ def test_plot_matches_filter(filter_item: FilterItem, match: bool) -> None:
358
359
  @pytest.mark.skipif(sys.platform == "win32", reason="avoiding crashes on windows until we fix this (crashing workers)")
359
360
  async def test_farmer_get_harvester_plots_endpoints(
360
361
  harvester_farmer_environment: HarvesterFarmerEnvironment,
361
- endpoint: Callable[[FarmerRpcClient, PaginatedRequestData], Awaitable[Dict[str, Any]]],
362
- filtering: Union[List[FilterItem], List[str]],
362
+ endpoint: Callable[[FarmerRpcClient, PaginatedRequestData], Awaitable[dict[str, Any]]],
363
+ filtering: Union[list[FilterItem], list[str]],
363
364
  sort_key: str,
364
365
  reverse: bool,
365
366
  expected_plot_count: int,
@@ -378,12 +379,12 @@ async def test_farmer_get_harvester_plots_endpoints(
378
379
  request: PaginatedRequestData
379
380
  if endpoint == FarmerRpcClient.get_harvester_plots_valid:
380
381
  request = PlotInfoRequestData(
381
- harvester_id, uint32(0), uint32(0), cast(List[FilterItem], filtering), sort_key, reverse
382
+ harvester_id, uint32(0), uint32(0), cast(list[FilterItem], filtering), sort_key, reverse
382
383
  )
383
384
  else:
384
- request = PlotPathRequestData(harvester_id, uint32(0), uint32(0), cast(List[str], filtering), reverse)
385
+ request = PlotPathRequestData(harvester_id, uint32(0), uint32(0), cast(list[str], filtering), reverse)
385
386
 
386
- def add_plot_directories(prefix: str, count: int) -> List[Path]:
387
+ def add_plot_directories(prefix: str, count: int) -> list[Path]:
387
388
  new_paths = []
388
389
  for i in range(count):
389
390
  new_paths.append(harvester.root_path / f"{prefix}_{i}")
@@ -1,15 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import List
4
-
5
3
  import pytest
6
4
  from chiabip158 import PyBIP158
7
5
 
8
6
 
9
7
  @pytest.mark.anyio
10
8
  async def test_basic_filter_test(simulator_and_wallet):
11
- full_nodes, wallets, bt = simulator_and_wallet
12
- wallet_node, server_2 = wallets[0]
9
+ _full_nodes, wallets, bt = simulator_and_wallet
10
+ wallet_node, _server_2 = wallets[0]
13
11
  wallet = wallet_node.wallet_state_manager.main_wallet
14
12
 
15
13
  num_blocks = 2
@@ -21,7 +19,7 @@ async def test_basic_filter_test(simulator_and_wallet):
21
19
  pool_reward_puzzle_hash=ph,
22
20
  )
23
21
  for i in range(1, num_blocks):
24
- byte_array_tx: List[bytes] = []
22
+ byte_array_tx: list[bytes] = []
25
23
  block = blocks[i]
26
24
  coins = block.get_included_reward_coins()
27
25
  coin_0 = bytearray(coins[0].puzzle_hash)
@@ -1,15 +1,11 @@
1
- # flake8: noqa: F811, F401
2
1
  from __future__ import annotations
3
2
 
4
- from typing import List
5
-
6
3
  import pytest
7
4
  from chia_rs import AugSchemeMPL
8
5
  from clvm.casts import int_to_bytes
9
6
 
10
7
  from chia import __version__
11
8
  from chia._tests.blockchain.blockchain_test_utils import _validate_and_add_block
12
- from chia._tests.conftest import ConsensusMode
13
9
  from chia._tests.connection_utils import connect_and_get_peer
14
10
  from chia._tests.util.rpc import validate_get_routes
15
11
  from chia._tests.util.time_out_assert import time_out_assert
@@ -20,6 +16,7 @@ from chia.protocols import full_node_protocol
20
16
  from chia.rpc.full_node_rpc_api import get_average_block_time, get_nearest_transaction_block
21
17
  from chia.rpc.full_node_rpc_client import FullNodeRpcClient
22
18
  from chia.server.outbound_message import NodeType
19
+ from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
23
20
  from chia.simulator.block_tools import get_signage_point
24
21
  from chia.simulator.simulator_protocol import FarmNewBlockProtocol, ReorgProtocol
25
22
  from chia.simulator.wallet_tools import WalletTool
@@ -45,13 +42,12 @@ async def test1(two_nodes_sim_and_wallets_services, self_hostname, consensus_mod
45
42
  full_node_api_2 = full_node_service_2._api
46
43
  server_2 = full_node_api_2.full_node.server
47
44
 
48
- try:
49
- client = await FullNodeRpcClient.create(
50
- self_hostname,
51
- full_node_service_1.rpc_server.listen_port,
52
- full_node_service_1.root_path,
53
- full_node_service_1.config,
54
- )
45
+ async with FullNodeRpcClient.create_as_context(
46
+ self_hostname,
47
+ full_node_service_1.rpc_server.listen_port,
48
+ full_node_service_1.root_path,
49
+ full_node_service_1.config,
50
+ ) as client:
55
51
  await validate_get_routes(client, full_node_service_1.rpc_server.rpc_api)
56
52
  state = await client.get_blockchain_state()
57
53
  assert state["peak"] is None
@@ -98,20 +94,22 @@ async def test1(two_nodes_sim_and_wallets_services, self_hostname, consensus_mod
98
94
 
99
95
  assert (await client.get_block_record_by_height(100)) is None
100
96
 
101
- # TODO: Understand why the list(set()) is required to make this work and address it. This shouldn't be needed.
102
- ph = list(set(blocks[-1].get_included_reward_coins()))[0].puzzle_hash
97
+ # NOTE: indexing and hard coded values below depend on the ordering
98
+ included_reward_coins = sorted(blocks[-1].get_included_reward_coins(), key=lambda c: c.amount)
99
+
100
+ ph = included_reward_coins[0].puzzle_hash
103
101
  coins = await client.get_coin_records_by_puzzle_hash(ph)
104
102
  print(coins)
105
103
  assert len(coins) >= 1
106
104
 
107
- pid = list(set(blocks[-1].get_included_reward_coins()))[0].parent_coin_info
108
- pid_2 = list(set(blocks[-1].get_included_reward_coins()))[1].parent_coin_info
105
+ pid = included_reward_coins[0].parent_coin_info
106
+ pid_2 = included_reward_coins[1].parent_coin_info
109
107
  coins = await client.get_coin_records_by_parent_ids([pid, pid_2])
110
108
  print(coins)
111
109
  assert len(coins) == 2
112
110
 
113
- name = list(set(blocks[-1].get_included_reward_coins()))[0].name()
114
- name_2 = list(set(blocks[-1].get_included_reward_coins()))[1].name()
111
+ name = included_reward_coins[0].name()
112
+ name_2 = included_reward_coins[1].name()
115
113
  coins = await client.get_coin_records_by_names([name, name_2])
116
114
  print(coins)
117
115
  assert len(coins) == 2
@@ -139,7 +137,10 @@ async def test1(two_nodes_sim_and_wallets_services, self_hostname, consensus_mod
139
137
  assert len(await client.get_coin_records_by_puzzle_hash(ph)) == 2
140
138
  assert len(await client.get_coin_records_by_puzzle_hash(ph_receiver)) == 0
141
139
 
142
- coin_to_spend = list(set(blocks[-1].get_included_reward_coins()))[0]
140
+ # NOTE: indexing and hard coded values below depend on the ordering
141
+ included_reward_coins = sorted(blocks[-1].get_included_reward_coins(), key=lambda c: c.amount)
142
+
143
+ coin_to_spend = included_reward_coins[0]
143
144
 
144
145
  spend_bundle = wallet.generate_signed_transaction(coin_to_spend.amount, ph_receiver, coin_to_spend)
145
146
 
@@ -154,7 +155,9 @@ async def test1(two_nodes_sim_and_wallets_services, self_hostname, consensus_mod
154
155
  assert len(await client.get_all_mempool_items()) == 1
155
156
  assert len(await client.get_all_mempool_tx_ids()) == 1
156
157
  assert (
157
- WalletSpendBundle.from_json_dict(list((await client.get_all_mempool_items()).values())[0]["spend_bundle"])
158
+ WalletSpendBundle.from_json_dict(
159
+ next(iter((await client.get_all_mempool_items()).values()))["spend_bundle"]
160
+ )
158
161
  == spend_bundle
159
162
  )
160
163
  assert (await client.get_all_mempool_tx_ids())[0] == spend_bundle.name()
@@ -167,7 +170,7 @@ async def test1(two_nodes_sim_and_wallets_services, self_hostname, consensus_mod
167
170
  assert (await client.get_coin_record_by_name(coin.name())) is None
168
171
 
169
172
  # Verify that the include_pending arg to get_mempool_item_by_tx_id works
170
- coin_to_spend_pending = list(set(blocks[-1].get_included_reward_coins()))[1]
173
+ coin_to_spend_pending = included_reward_coins[1]
171
174
  ahr = ConditionOpcode.ASSERT_HEIGHT_RELATIVE # to force pending/potential
172
175
  condition_dic = {ahr: [ConditionWithArgs(ahr, [int_to_bytes(100)])]}
173
176
  spend_bundle_pending = wallet.generate_signed_transaction(
@@ -216,7 +219,7 @@ async def test1(two_nodes_sim_and_wallets_services, self_hostname, consensus_mod
216
219
  coin_records[i].coin.amount, ph_receiver, coin_records[i].coin
217
220
  )
218
221
  await client.push_tx(spend_bundle)
219
- coin_spends = coin_spends + spend_bundle.coin_spends
222
+ coin_spends += spend_bundle.coin_spends
220
223
  await time_out_assert(
221
224
  5, full_node_api_1.full_node.mempool_manager.get_spendbundle, spend_bundle, spend_bundle.name()
222
225
  )
@@ -231,7 +234,7 @@ async def test1(two_nodes_sim_and_wallets_services, self_hostname, consensus_mod
231
234
  block_spends = await client.get_block_spends(block.header_hash)
232
235
 
233
236
  assert len(block_spends) == 3
234
- assert sorted(block_spends, key=lambda x: str(x)) == sorted(coin_spends, key=lambda x: str(x))
237
+ assert sorted(block_spends, key=str) == sorted(coin_spends, key=str)
235
238
 
236
239
  block_spends_with_conditions = await client.get_block_spends_with_conditions(block.header_hash)
237
240
 
@@ -361,7 +364,7 @@ async def test1(two_nodes_sim_and_wallets_services, self_hostname, consensus_mod
361
364
  state = await client.get_blockchain_state()
362
365
  block = await client.get_block(state["peak"].header_hash)
363
366
 
364
- coin_to_spend = list(set(block.get_included_reward_coins()))[0]
367
+ coin_to_spend = block.get_included_reward_coins()[0]
365
368
 
366
369
  spend_bundle = wallet.generate_signed_transaction(coin_to_spend.amount, ph_2, coin_to_spend, memo=memo)
367
370
  await client.push_tx(spend_bundle)
@@ -408,25 +411,20 @@ async def test1(two_nodes_sim_and_wallets_services, self_hostname, consensus_mod
408
411
  await client.close_connection(connections[0]["node_id"])
409
412
  await time_out_assert(10, num_connections, 0)
410
413
 
411
- blocks: List[FullBlock] = await client.get_blocks(0, 5)
414
+ blocks: list[FullBlock] = await client.get_blocks(0, 5)
412
415
  assert len(blocks) == 5
413
416
 
414
417
  await full_node_api_1.reorg_from_index_to_new_index(ReorgProtocol(2, 55, bytes([0x2] * 32), None))
415
- new_blocks_0: List[FullBlock] = await client.get_blocks(0, 5)
418
+ new_blocks_0: list[FullBlock] = await client.get_blocks(0, 5)
416
419
  assert len(new_blocks_0) == 7
417
420
 
418
- new_blocks: List[FullBlock] = await client.get_blocks(0, 5, exclude_reorged=True)
421
+ new_blocks: list[FullBlock] = await client.get_blocks(0, 5, exclude_reorged=True)
419
422
  assert len(new_blocks) == 5
420
423
  assert blocks[0].header_hash == new_blocks[0].header_hash
421
424
  assert blocks[1].header_hash == new_blocks[1].header_hash
422
425
  assert blocks[2].header_hash == new_blocks[2].header_hash
423
426
  assert blocks[3].header_hash != new_blocks[3].header_hash
424
427
 
425
- finally:
426
- # Checks that the RPC manages to stop the node
427
- client.close()
428
- await client.await_closed()
429
-
430
428
 
431
429
  @pytest.mark.anyio
432
430
  async def test_signage_points(two_nodes_sim_and_wallets_services, empty_blockchain):
@@ -442,14 +440,12 @@ async def test_signage_points(two_nodes_sim_and_wallets_services, empty_blockcha
442
440
 
443
441
  peer = await connect_and_get_peer(server_1, server_2, self_hostname)
444
442
 
445
- try:
446
- client = await FullNodeRpcClient.create(
447
- self_hostname,
448
- full_node_service_1.rpc_server.listen_port,
449
- full_node_service_1.root_path,
450
- full_node_service_1.config,
451
- )
452
-
443
+ async with FullNodeRpcClient.create_as_context(
444
+ self_hostname,
445
+ full_node_service_1.rpc_server.listen_port,
446
+ full_node_service_1.root_path,
447
+ full_node_service_1.config,
448
+ ) as client:
453
449
  # Only provide one
454
450
  res = await client.get_recent_signage_point_or_eos(None, None)
455
451
  assert res is None
@@ -537,8 +533,7 @@ async def test_signage_points(two_nodes_sim_and_wallets_services, empty_blockcha
537
533
 
538
534
  # Perform a reorg
539
535
  blocks = bt.get_consecutive_blocks(12, seed=b"1234")
540
- for block in blocks:
541
- await full_node_api_1.full_node.add_block(block)
536
+ await add_blocks_in_batches(blocks, full_node_api_1.full_node)
542
537
 
543
538
  # Signage point is no longer in the blockchain
544
539
  res = await client.get_recent_signage_point_or_eos(sp.cc_vdf.output.get_hash(), None)
@@ -553,15 +548,10 @@ async def test_signage_points(two_nodes_sim_and_wallets_services, empty_blockcha
553
548
  assert res["eos"] == selected_eos
554
549
  assert res["reverted"]
555
550
 
556
- finally:
557
- # Checks that the RPC manages to stop the node
558
- client.close()
559
- await client.await_closed()
560
-
561
551
 
562
552
  @pytest.mark.anyio
563
553
  async def test_get_network_info(one_wallet_and_one_simulator_services, self_hostname):
564
- nodes, _, bt = one_wallet_and_one_simulator_services
554
+ nodes, _, _bt = one_wallet_and_one_simulator_services
565
555
  (full_node_service_1,) = nodes
566
556
 
567
557
  async with FullNodeRpcClient.create_as_context(
@@ -582,7 +572,7 @@ async def test_get_network_info(one_wallet_and_one_simulator_services, self_host
582
572
 
583
573
  @pytest.mark.anyio
584
574
  async def test_get_version(one_wallet_and_one_simulator_services, self_hostname):
585
- nodes, _, bt = one_wallet_and_one_simulator_services
575
+ nodes, _, _bt = one_wallet_and_one_simulator_services
586
576
  (full_node_service_1,) = nodes
587
577
  async with FullNodeRpcClient.create_as_context(
588
578
  self_hostname,
@@ -620,7 +610,7 @@ async def test_get_blockchain_state(one_wallet_and_one_simulator_services, self_
620
610
  assert state["space"] == 0
621
611
  assert state["average_block_time"] is None
622
612
 
623
- blocks: List[FullBlock] = bt.get_consecutive_blocks(num_blocks)
613
+ blocks: list[FullBlock] = bt.get_consecutive_blocks(num_blocks)
624
614
  blocks = bt.get_consecutive_blocks(num_blocks, block_list_input=blocks, guarantee_transaction_block=True)
625
615
 
626
616
  for block in blocks:
@@ -643,7 +633,7 @@ async def test_get_blockchain_state(one_wallet_and_one_simulator_services, self_
643
633
  assert state["space"] > 0
644
634
  assert state["average_block_time"] > 0
645
635
 
646
- block_records: List[BlockRecord] = [
636
+ block_records: list[BlockRecord] = [
647
637
  await full_node_api_1.full_node.blockchain.get_block_record_from_db(rec.header_hash) for rec in blocks
648
638
  ]
649
639
  first_non_transaction_block_index = -1
@@ -655,8 +645,8 @@ async def test_get_blockchain_state(one_wallet_and_one_simulator_services, self_
655
645
  # so first_non_transaction_block_index != 0
656
646
  assert first_non_transaction_block_index > 0
657
647
 
658
- transaction_blocks: List[BlockRecord] = [b for b in block_records if b.is_transaction_block]
659
- non_transaction_block: List[BlockRecord] = [b for b in block_records if not b.is_transaction_block]
648
+ transaction_blocks: list[BlockRecord] = [b for b in block_records if b.is_transaction_block]
649
+ non_transaction_block: list[BlockRecord] = [b for b in block_records if not b.is_transaction_block]
660
650
  assert len(transaction_blocks) > 0
661
651
  assert len(non_transaction_block) > 0
662
652
  assert transaction_blocks[0] == await get_nearest_transaction_block(
@@ -686,41 +676,31 @@ async def test_get_blockchain_state(one_wallet_and_one_simulator_services, self_
686
676
  async def test_coin_name_not_in_request(one_node, self_hostname):
687
677
  [full_node_service], _, _ = one_node
688
678
 
689
- try:
690
- client = await FullNodeRpcClient.create(
691
- self_hostname,
692
- full_node_service.rpc_server.listen_port,
693
- full_node_service.root_path,
694
- full_node_service.config,
695
- )
679
+ async with FullNodeRpcClient.create_as_context(
680
+ self_hostname,
681
+ full_node_service.rpc_server.listen_port,
682
+ full_node_service.root_path,
683
+ full_node_service.config,
684
+ ) as client:
696
685
  with pytest.raises(ValueError, match="No coin_name in request"):
697
686
  await client.fetch("get_mempool_items_by_coin_name", {})
698
- finally:
699
- # Checks that the RPC manages to stop the node
700
- client.close()
701
- await client.await_closed()
702
687
 
703
688
 
704
689
  @pytest.mark.anyio
705
690
  async def test_coin_name_not_found_in_mempool(one_node, self_hostname):
706
691
  [full_node_service], _, _ = one_node
707
692
 
708
- try:
709
- client = await FullNodeRpcClient.create(
710
- self_hostname,
711
- full_node_service.rpc_server.listen_port,
712
- full_node_service.root_path,
713
- full_node_service.config,
714
- )
715
-
716
- empty_coin_name = bytes32([0] * 32)
693
+ async with FullNodeRpcClient.create_as_context(
694
+ self_hostname,
695
+ full_node_service.rpc_server.listen_port,
696
+ full_node_service.root_path,
697
+ full_node_service.config,
698
+ ) as client:
699
+ empty_coin_name = bytes32.zeros
717
700
  mempool_item = await client.get_mempool_items_by_coin_name(empty_coin_name)
718
- assert mempool_item["success"] == True
701
+ assert mempool_item["success"]
719
702
  assert "mempool_items" in mempool_item
720
703
  assert len(mempool_item["mempool_items"]) == 0
721
- finally:
722
- client.close()
723
- await client.await_closed()
724
704
 
725
705
 
726
706
  @pytest.mark.anyio
@@ -728,14 +708,12 @@ async def test_coin_name_found_in_mempool(one_node, self_hostname):
728
708
  [full_node_service], _, bt = one_node
729
709
  full_node_api = full_node_service._api
730
710
 
731
- try:
732
- client = await FullNodeRpcClient.create(
733
- self_hostname,
734
- full_node_service.rpc_server.listen_port,
735
- full_node_service.root_path,
736
- full_node_service.config,
737
- )
738
-
711
+ async with FullNodeRpcClient.create_as_context(
712
+ self_hostname,
713
+ full_node_service.rpc_server.listen_port,
714
+ full_node_service.root_path,
715
+ full_node_service.config,
716
+ ) as client:
739
717
  blocks = bt.get_consecutive_blocks(2)
740
718
  blocks = bt.get_consecutive_blocks(2, block_list_input=blocks, guarantee_transaction_block=True)
741
719
 
@@ -772,7 +750,7 @@ async def test_coin_name_found_in_mempool(one_node, self_hostname):
772
750
  # empty mempool
773
751
  assert len(await client.get_all_mempool_items()) == 0
774
752
 
775
- coin_to_spend = list(set(blocks[-1].get_included_reward_coins()))[0]
753
+ coin_to_spend = blocks[-1].get_included_reward_coins()[0]
776
754
  spend_bundle = wallet.generate_signed_transaction(coin_to_spend.amount, ph_receiver, coin_to_spend)
777
755
  await client.push_tx(spend_bundle)
778
756
 
@@ -782,13 +760,9 @@ async def test_coin_name_found_in_mempool(one_node, self_hostname):
782
760
  mempool_item = await client.get_mempool_items_by_coin_name(coin_to_spend.name())
783
761
 
784
762
  # found coin in coin spends
785
- assert mempool_item["success"] == True
763
+ assert mempool_item["success"]
786
764
  assert "mempool_items" in mempool_item
787
765
  assert len(mempool_item["mempool_items"]) > 0
788
766
  for item in mempool_item["mempool_items"]:
789
767
  removals = [Coin.from_json_dict(coin) for coin in item["removals"]]
790
768
  assert coin_to_spend.name() in [coin.name() for coin in removals]
791
-
792
- finally:
793
- client.close()
794
- await client.await_closed()
@@ -5,7 +5,7 @@ import random
5
5
  from hashlib import sha256
6
6
  from itertools import permutations
7
7
  from random import Random
8
- from typing import List, Optional, Tuple
8
+ from typing import Optional
9
9
 
10
10
  import pytest
11
11
  from chia_rs import Coin, MerkleSet, compute_merkle_set_root, confirm_included_already_hashed
@@ -93,7 +93,7 @@ async def test_merkle_set_duplicate() -> None:
93
93
  async def test_merkle_set_0() -> None:
94
94
  merkle_set = MerkleSet([])
95
95
  assert merkle_set.get_root() == bytes32(compute_merkle_set_root([]))
96
- assert merkle_set.get_root() == bytes32([0] * 32)
96
+ assert merkle_set.get_root() == bytes32.zeros
97
97
 
98
98
 
99
99
  @pytest.mark.anyio
@@ -155,7 +155,7 @@ async def test_merkle_set_4() -> None:
155
155
 
156
156
  @pytest.mark.anyio
157
157
  async def test_merkle_set_5() -> None:
158
- BLANK = bytes32([0] * 32)
158
+ BLANK = bytes32.zeros
159
159
 
160
160
  a = bytes32([0x58] + [0] * 31)
161
161
  b = bytes32([0x23] + [0] * 31)
@@ -202,7 +202,7 @@ async def test_merkle_set_5() -> None:
202
202
 
203
203
  @pytest.mark.anyio
204
204
  async def test_merkle_left_edge() -> None:
205
- BLANK = bytes32([0] * 32)
205
+ BLANK = bytes32.zeros
206
206
  a = bytes32([0x80] + [0] * 31)
207
207
  b = bytes32([0] * 31 + [1])
208
208
  c = bytes32([0] * 31 + [2])
@@ -241,7 +241,7 @@ async def test_merkle_left_edge() -> None:
241
241
 
242
242
  @pytest.mark.anyio
243
243
  async def test_merkle_right_edge() -> None:
244
- BLANK = bytes32([0] * 32)
244
+ BLANK = bytes32.zeros
245
245
  a = bytes32([0x40] + [0] * 31)
246
246
  b = bytes32([0xFF] * 31 + [0xFF])
247
247
  c = bytes32([0xFF] * 31 + [0xFE])
@@ -292,7 +292,7 @@ async def test_merkle_set_random_regression() -> None:
292
292
  rng.seed(123456)
293
293
  for i in range(100):
294
294
  size = rng.randint(0, 4000)
295
- values: List[bytes32] = [rand_hash(rng) for _ in range(size)]
295
+ values: list[bytes32] = [rand_hash(rng) for _ in range(size)]
296
296
  print(f"iter: {i}/100 size: {size}")
297
297
 
298
298
  for _ in range(10):
@@ -304,7 +304,7 @@ async def test_merkle_set_random_regression() -> None:
304
304
  assert rust_root == python_root
305
305
 
306
306
 
307
- def make_test_coins(n: int, rng: Random) -> List[Coin]:
307
+ def make_test_coins(n: int, rng: Random) -> list[Coin]:
308
308
  return [Coin(bytes32.random(rng), bytes32.random(rng), uint64(rng.randint(0, 10000000))) for i in range(n)]
309
309
 
310
310
 
@@ -314,7 +314,7 @@ def test_validate_removals_full_list(num_coins: int, seeded_random: Random) -> N
314
314
  # the root can be computed by all the removals
315
315
  coins = make_test_coins(num_coins, seeded_random)
316
316
 
317
- coin_map: List[Tuple[bytes32, Optional[Coin]]] = []
317
+ coin_map: list[tuple[bytes32, Optional[Coin]]] = []
318
318
  removals_merkle_set = MerkleSet([coin.name() for coin in coins])
319
319
  for coin in coins:
320
320
  coin_map.append((coin.name(), coin))
@@ -330,8 +330,8 @@ def test_validate_additions_full_list(num_coins: int, batch_size: int, seeded_ra
330
330
  # the root can be computed by all the removals
331
331
  coins = make_test_coins(num_coins, seeded_random)
332
332
 
333
- additions: List[Tuple[bytes32, List[Coin]]] = []
334
- leafs: List[bytes32] = []
333
+ additions: list[tuple[bytes32, list[Coin]]] = []
334
+ leafs: list[bytes32] = []
335
335
  for coin_batch in to_batches(coins, batch_size):
336
336
  puzzle_hash = bytes32.random(seeded_random)
337
337
  additions.append((puzzle_hash, coin_batch.entries))
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import List
4
-
5
3
  from clvm.SExp import CastableType
6
4
  from clvm_tools import binutils
7
5
 
@@ -25,8 +23,8 @@ def program_roundtrip(o: CastableType) -> None:
25
23
 
26
24
 
27
25
  def test_serialized_program_to() -> None:
28
- prg = "(q ((0x0101010101010101010101010101010101010101010101010101010101010101 80 123 (() (q . ())))))" # noqa
29
- tests: List[CastableType] = [
26
+ prg = "(q ((0x0101010101010101010101010101010101010101010101010101010101010101 80 123 (() (q . ())))))"
27
+ tests: list[CastableType] = [
30
28
  0,
31
29
  1,
32
30
  (1, 2),