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
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import datetime
4
- from typing import List, Tuple, Union
4
+ from typing import Union
5
5
 
6
6
  import pytest
7
7
 
@@ -20,11 +20,11 @@ from chia.wallet.wallet import Wallet
20
20
 
21
21
  @pytest.mark.anyio
22
22
  async def test_protocol_messages(
23
- simulator_and_wallet: Tuple[
24
- List[Union[FullNodeAPI, FullNodeSimulator]], List[Tuple[Wallet, ChiaServer]], BlockTools
25
- ]
23
+ simulator_and_wallet: tuple[
24
+ list[Union[FullNodeAPI, FullNodeSimulator]], list[tuple[Wallet, ChiaServer]], BlockTools
25
+ ],
26
26
  ) -> None:
27
- full_nodes, wallets, bt = simulator_and_wallet
27
+ full_nodes, _wallets, bt = simulator_and_wallet
28
28
  a_wallet = bt.get_pool_wallet_tool()
29
29
  reward_ph = a_wallet.get_new_puzzlehash()
30
30
  blocks = bt.get_consecutive_blocks(
@@ -1,18 +1,16 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import List
4
-
5
3
  from chia_rs import AugSchemeMPL, Coin, Program
6
4
  from chia_rs.sized_bytes import bytes32
7
5
  from chia_rs.sized_ints import uint32, uint64
8
6
 
9
7
  from chia._tests.core.mempool.test_mempool_manager import TEST_HEIGHT, make_bundle_spends_map_and_fee
8
+ from chia._tests.util.get_name_puzzle_conditions import get_name_puzzle_conditions
10
9
  from chia.consensus.default_constants import DEFAULT_CONSTANTS
11
10
  from chia.full_node.bitcoin_fee_estimator import create_bitcoin_fee_estimator
12
11
  from chia.full_node.bundle_tools import simple_solution_generator
13
12
  from chia.full_node.fee_estimation import MempoolInfo
14
13
  from chia.full_node.mempool import Mempool
15
- from chia.full_node.mempool_check_conditions import get_name_puzzle_conditions
16
14
  from chia.types.blockchain_format.program import INFINITE_COST
17
15
  from chia.types.clvm_cost import CLVMCost
18
16
  from chia.types.coin_spend import CoinSpend
@@ -43,7 +41,7 @@ OTHER_COIN_3 = Coin(bytes32(b"5" * 32), OTHER_PUZZLE_HASH, uint64(1000))
43
41
  EMPTY_SIGNATURE = AugSchemeMPL.aggregate([])
44
42
 
45
43
 
46
- def make_item(coin_spends: List[CoinSpend]) -> MempoolItem:
44
+ def make_item(coin_spends: list[CoinSpend]) -> MempoolItem:
47
45
  spend_bundle = SpendBundle(coin_spends, EMPTY_SIGNATURE)
48
46
  generator = simple_solution_generator(spend_bundle)
49
47
  npc_result = get_name_puzzle_conditions(
@@ -2,7 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
4
  import logging
5
- from typing import Any, Awaitable, Callable, Collection, Dict, List, Optional, Set, Tuple
5
+ from collections.abc import Awaitable, Collection
6
+ from typing import Any, Callable, ClassVar, Optional
6
7
 
7
8
  import pytest
8
9
  from chia_rs import ELIGIBLE_FOR_DEDUP, ELIGIBLE_FOR_FF, AugSchemeMPL, G2Element, get_conditions_from_spendbundle
@@ -11,6 +12,7 @@ from chiabip158 import PyBIP158
11
12
  from chia._tests.conftest import ConsensusMode
12
13
  from chia._tests.util.misc import invariant_check_mempool
13
14
  from chia._tests.util.setup_nodes import OldSimulatorsAndWallets, setup_simulators_and_wallets
15
+ from chia.consensus.condition_costs import ConditionCost
14
16
  from chia.consensus.constants import ConsensusConstants
15
17
  from chia.consensus.default_constants import DEFAULT_CONSTANTS
16
18
  from chia.full_node.mempool import MAX_SKIPPED_ITEMS, PRIORITY_TX_THRESHOLD
@@ -96,19 +98,19 @@ class TestBlockRecord:
96
98
  return self.timestamp is not None
97
99
 
98
100
 
99
- async def zero_calls_get_coin_records(coin_ids: Collection[bytes32]) -> List[CoinRecord]:
101
+ async def zero_calls_get_coin_records(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
100
102
  assert len(coin_ids) == 0
101
103
  return []
102
104
 
103
105
 
104
- async def get_coin_records_for_test_coins(coin_ids: Collection[bytes32]) -> List[CoinRecord]:
106
+ async def get_coin_records_for_test_coins(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
105
107
  test_coin_records = {
106
108
  TEST_COIN_ID: TEST_COIN_RECORD,
107
109
  TEST_COIN_ID2: TEST_COIN_RECORD2,
108
110
  TEST_COIN_ID3: TEST_COIN_RECORD3,
109
111
  }
110
112
 
111
- ret: List[CoinRecord] = []
113
+ ret: list[CoinRecord] = []
112
114
  for name in coin_ids:
113
115
  r = test_coin_records.get(name)
114
116
  if r is not None:
@@ -131,7 +133,7 @@ def create_test_block_record(*, height: uint32 = TEST_HEIGHT, timestamp: uint64
131
133
 
132
134
 
133
135
  async def instantiate_mempool_manager(
134
- get_coin_records: Callable[[Collection[bytes32]], Awaitable[List[CoinRecord]]],
136
+ get_coin_records: Callable[[Collection[bytes32]], Awaitable[list[CoinRecord]]],
135
137
  *,
136
138
  block_height: uint32 = TEST_HEIGHT,
137
139
  block_timestamp: uint64 = TEST_TIMESTAMP,
@@ -147,11 +149,11 @@ async def instantiate_mempool_manager(
147
149
 
148
150
  async def setup_mempool_with_coins(
149
151
  *,
150
- coin_amounts: List[int],
152
+ coin_amounts: list[int],
151
153
  max_block_clvm_cost: Optional[int] = None,
152
154
  max_tx_clvm_cost: Optional[uint64] = None,
153
155
  mempool_block_buffer: Optional[int] = None,
154
- ) -> Tuple[MempoolManager, List[Coin]]:
156
+ ) -> tuple[MempoolManager, list[Coin]]:
155
157
  coins = []
156
158
  test_coin_records = {}
157
159
  for amount in coin_amounts:
@@ -159,8 +161,8 @@ async def setup_mempool_with_coins(
159
161
  coins.append(coin)
160
162
  test_coin_records[coin.name()] = CoinRecord(coin, uint32(0), uint32(0), False, uint64(0))
161
163
 
162
- async def get_coin_records(coin_ids: Collection[bytes32]) -> List[CoinRecord]:
163
- ret: List[CoinRecord] = []
164
+ async def get_coin_records(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
165
+ ret: list[CoinRecord] = []
164
166
  for name in coin_ids:
165
167
  r = test_coin_records.get(name)
166
168
  if r is not None:
@@ -169,7 +171,7 @@ async def setup_mempool_with_coins(
169
171
 
170
172
  constants = DEFAULT_CONSTANTS
171
173
  if max_block_clvm_cost is not None:
172
- constants = constants.replace(MAX_BLOCK_COST_CLVM=uint64(max_block_clvm_cost))
174
+ constants = constants.replace(MAX_BLOCK_COST_CLVM=uint64(max_block_clvm_cost + TEST_BLOCK_OVERHEAD))
173
175
  if mempool_block_buffer is not None:
174
176
  constants = constants.replace(MEMPOOL_BLOCK_BUFFER=uint8(mempool_block_buffer))
175
177
  mempool_manager = await instantiate_mempool_manager(
@@ -191,7 +193,7 @@ def make_test_conds(
191
193
  before_seconds_relative: Optional[int] = None,
192
194
  before_seconds_absolute: Optional[int] = None,
193
195
  cost: int = 0,
194
- spend_ids: List[bytes32] = [TEST_COIN_ID],
196
+ spend_ids: list[bytes32] = [TEST_COIN_ID],
195
197
  ) -> SpendBundleConditions:
196
198
  return SpendBundleConditions(
197
199
  [
@@ -228,55 +230,57 @@ def make_test_conds(
228
230
  0,
229
231
  0,
230
232
  False,
233
+ 0,
234
+ 0,
231
235
  )
232
236
 
233
237
 
234
238
  class TestCheckTimeLocks:
235
- COIN_CONFIRMED_HEIGHT = uint32(10)
236
- COIN_TIMESTAMP = uint64(10000)
237
- PREV_BLOCK_HEIGHT = uint32(15)
238
- PREV_BLOCK_TIMESTAMP = uint64(10150)
239
+ COIN_CONFIRMED_HEIGHT: ClassVar[uint32] = uint32(10)
240
+ COIN_TIMESTAMP: ClassVar[uint64] = uint64(10000)
241
+ PREV_BLOCK_HEIGHT: ClassVar[uint32] = uint32(15)
242
+ PREV_BLOCK_TIMESTAMP: ClassVar[uint64] = uint64(10150)
239
243
 
240
- COIN_RECORD = CoinRecord(
244
+ COIN_RECORD: ClassVar[CoinRecord] = CoinRecord(
241
245
  TEST_COIN,
242
246
  confirmed_block_index=uint32(COIN_CONFIRMED_HEIGHT),
243
247
  spent_block_index=uint32(0),
244
248
  coinbase=False,
245
249
  timestamp=COIN_TIMESTAMP,
246
250
  )
247
- REMOVALS: Dict[bytes32, CoinRecord] = {TEST_COIN.name(): COIN_RECORD}
251
+ REMOVALS: ClassVar[dict[bytes32, CoinRecord]] = {TEST_COIN.name(): COIN_RECORD}
248
252
 
249
253
  @pytest.mark.parametrize(
250
254
  "conds,expected",
251
255
  [
252
256
  (make_test_conds(height_relative=5), None),
253
257
  (make_test_conds(height_relative=6), Err.ASSERT_HEIGHT_RELATIVE_FAILED),
254
- (make_test_conds(height_absolute=15), None),
255
- (make_test_conds(height_absolute=16), Err.ASSERT_HEIGHT_ABSOLUTE_FAILED),
258
+ (make_test_conds(height_absolute=PREV_BLOCK_HEIGHT), None),
259
+ (make_test_conds(height_absolute=uint32(PREV_BLOCK_HEIGHT + 1)), Err.ASSERT_HEIGHT_ABSOLUTE_FAILED),
256
260
  (make_test_conds(seconds_relative=150), None),
257
261
  (make_test_conds(seconds_relative=151), Err.ASSERT_SECONDS_RELATIVE_FAILED),
258
- (make_test_conds(seconds_absolute=10150), None),
259
- (make_test_conds(seconds_absolute=10151), Err.ASSERT_SECONDS_ABSOLUTE_FAILED),
262
+ (make_test_conds(seconds_absolute=PREV_BLOCK_TIMESTAMP), None),
263
+ (make_test_conds(seconds_absolute=uint64(PREV_BLOCK_TIMESTAMP + 1)), Err.ASSERT_SECONDS_ABSOLUTE_FAILED),
260
264
  # the coin's confirmed height is 10
261
265
  (make_test_conds(birth_height=9), Err.ASSERT_MY_BIRTH_HEIGHT_FAILED),
262
266
  (make_test_conds(birth_height=10), None),
263
267
  (make_test_conds(birth_height=11), Err.ASSERT_MY_BIRTH_HEIGHT_FAILED),
264
268
  # coin timestamp is 10000
265
- (make_test_conds(birth_seconds=9999), Err.ASSERT_MY_BIRTH_SECONDS_FAILED),
266
- (make_test_conds(birth_seconds=10000), None),
267
- (make_test_conds(birth_seconds=10001), Err.ASSERT_MY_BIRTH_SECONDS_FAILED),
269
+ (make_test_conds(birth_seconds=uint64(COIN_TIMESTAMP - 1)), Err.ASSERT_MY_BIRTH_SECONDS_FAILED),
270
+ (make_test_conds(birth_seconds=COIN_TIMESTAMP), None),
271
+ (make_test_conds(birth_seconds=uint64(COIN_TIMESTAMP + 1)), Err.ASSERT_MY_BIRTH_SECONDS_FAILED),
268
272
  # the coin is 5 blocks old in this test
269
273
  (make_test_conds(before_height_relative=5), Err.ASSERT_BEFORE_HEIGHT_RELATIVE_FAILED),
270
274
  (make_test_conds(before_height_relative=6), None),
271
275
  # The block height is 15
272
- (make_test_conds(before_height_absolute=15), Err.ASSERT_BEFORE_HEIGHT_ABSOLUTE_FAILED),
273
- (make_test_conds(before_height_absolute=16), None),
276
+ (make_test_conds(before_height_absolute=PREV_BLOCK_HEIGHT), Err.ASSERT_BEFORE_HEIGHT_ABSOLUTE_FAILED),
277
+ (make_test_conds(before_height_absolute=uint64(PREV_BLOCK_HEIGHT + 1)), None),
274
278
  # the coin is 150 seconds old in this test
275
279
  (make_test_conds(before_seconds_relative=150), Err.ASSERT_BEFORE_SECONDS_RELATIVE_FAILED),
276
280
  (make_test_conds(before_seconds_relative=151), None),
277
281
  # The block timestamp is 10150
278
- (make_test_conds(before_seconds_absolute=10150), Err.ASSERT_BEFORE_SECONDS_ABSOLUTE_FAILED),
279
- (make_test_conds(before_seconds_absolute=10151), None),
282
+ (make_test_conds(before_seconds_absolute=PREV_BLOCK_TIMESTAMP), Err.ASSERT_BEFORE_SECONDS_ABSOLUTE_FAILED),
283
+ (make_test_conds(before_seconds_absolute=uint64(PREV_BLOCK_TIMESTAMP + 1)), None),
280
284
  ],
281
285
  )
282
286
  def test_conditions(
@@ -286,7 +290,7 @@ class TestCheckTimeLocks:
286
290
  ) -> None:
287
291
  assert (
288
292
  mempool_check_time_locks(
289
- self.REMOVALS,
293
+ dict(self.REMOVALS),
290
294
  conds,
291
295
  self.PREV_BLOCK_HEIGHT,
292
296
  self.PREV_BLOCK_TIMESTAMP,
@@ -379,7 +383,7 @@ def test_compute_assert_height(conds: SpendBundleConditions, expected: TimelockC
379
383
 
380
384
 
381
385
  def spend_bundle_from_conditions(
382
- conditions: List[List[Any]], coin: Coin = TEST_COIN, aggsig: G2Element = G2Element()
386
+ conditions: list[list[Any]], coin: Coin = TEST_COIN, aggsig: G2Element = G2Element()
383
387
  ) -> SpendBundle:
384
388
  solution = SerializedProgram.to(conditions)
385
389
  coin_spend = make_spend(coin, IDENTITY_PUZZLE, solution)
@@ -388,7 +392,7 @@ def spend_bundle_from_conditions(
388
392
 
389
393
  async def add_spendbundle(
390
394
  mempool_manager: MempoolManager, sb: SpendBundle, sb_name: bytes32
391
- ) -> Tuple[Optional[uint64], MempoolInclusionStatus, Optional[Err]]:
395
+ ) -> tuple[Optional[uint64], MempoolInclusionStatus, Optional[Err]]:
392
396
  sbc = await mempool_manager.pre_validate_spendbundle(sb, sb_name)
393
397
  ret = await mempool_manager.add_spend_bundle(sb, sbc, sb_name, TEST_HEIGHT)
394
398
  invariant_check_mempool(mempool_manager.mempool)
@@ -397,10 +401,10 @@ async def add_spendbundle(
397
401
 
398
402
  async def generate_and_add_spendbundle(
399
403
  mempool_manager: MempoolManager,
400
- conditions: List[List[Any]],
404
+ conditions: list[list[Any]],
401
405
  coin: Coin = TEST_COIN,
402
406
  aggsig: G2Element = G2Element(),
403
- ) -> Tuple[SpendBundle, bytes32, Tuple[Optional[uint64], MempoolInclusionStatus, Optional[Err]]]:
407
+ ) -> tuple[SpendBundle, bytes32, tuple[Optional[uint64], MempoolInclusionStatus, Optional[Err]]]:
404
408
  sb = spend_bundle_from_conditions(conditions, coin, aggsig)
405
409
  sb_name = sb.name()
406
410
  result = await add_spendbundle(mempool_manager, sb, sb_name)
@@ -409,9 +413,9 @@ async def generate_and_add_spendbundle(
409
413
 
410
414
  def make_bundle_spends_map_and_fee(
411
415
  spend_bundle: SpendBundle, conds: SpendBundleConditions
412
- ) -> Tuple[Dict[bytes32, BundleCoinSpend], uint64]:
413
- bundle_coin_spends: Dict[bytes32, BundleCoinSpend] = {}
414
- eligibility_and_additions: Dict[bytes32, EligibilityAndAdditions] = {}
416
+ ) -> tuple[dict[bytes32, BundleCoinSpend], uint64]:
417
+ bundle_coin_spends: dict[bytes32, BundleCoinSpend] = {}
418
+ eligibility_and_additions: dict[bytes32, EligibilityAndAdditions] = {}
415
419
  removals_amount = 0
416
420
  additions_amount = 0
417
421
  for spend in conds.spends:
@@ -551,7 +555,7 @@ async def test_reserve_fee_condition() -> None:
551
555
 
552
556
  @pytest.mark.anyio
553
557
  async def test_unknown_unspent() -> None:
554
- async def get_coin_records(_: Collection[bytes32]) -> List[CoinRecord]:
558
+ async def get_coin_records(_: Collection[bytes32]) -> list[CoinRecord]:
555
559
  return []
556
560
 
557
561
  mempool_manager = await instantiate_mempool_manager(get_coin_records)
@@ -598,7 +602,7 @@ async def test_sb_twice_with_eligible_coin_and_different_spends_order() -> None:
598
602
  sk = AugSchemeMPL.key_gen(b"6" * 32)
599
603
  g1 = sk.get_g1()
600
604
  sig = AugSchemeMPL.sign(sk, IDENTITY_PUZZLE_HASH, g1)
601
- sb2_conditions: List[List[Any]] = [
605
+ sb2_conditions: list[list[Any]] = [
602
606
  [ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, 3],
603
607
  [ConditionOpcode.AGG_SIG_UNSAFE, bytes(g1), IDENTITY_PUZZLE_HASH],
604
608
  ]
@@ -726,7 +730,7 @@ def test_optional_max() -> None:
726
730
 
727
731
 
728
732
  def mk_item(
729
- coins: List[Coin],
733
+ coins: list[Coin],
730
734
  *,
731
735
  cost: int = 1,
732
736
  fee: int = 0,
@@ -762,8 +766,8 @@ def mk_item(
762
766
  )
763
767
 
764
768
 
765
- def make_test_coins() -> List[Coin]:
766
- ret: List[Coin] = []
769
+ def make_test_coins() -> list[Coin]:
770
+ ret: list[Coin] = []
767
771
  for i in range(5):
768
772
  ret.append(Coin(height_hash(i), height_hash(i + 100), uint64(i * 100)))
769
773
  return ret
@@ -904,7 +908,7 @@ coins = make_test_coins()
904
908
  ),
905
909
  ],
906
910
  )
907
- def test_can_replace(existing_items: List[MempoolItem], new_item: MempoolItem, expected: bool) -> None:
911
+ def test_can_replace(existing_items: list[MempoolItem], new_item: MempoolItem, expected: bool) -> None:
908
912
  removals = {c.name() for c in new_item.spend_bundle.removals()}
909
913
  assert can_replace(existing_items, removals, new_item) == expected
910
914
 
@@ -956,10 +960,10 @@ async def test_get_items_not_in_filter() -> None:
956
960
 
957
961
  @pytest.mark.anyio
958
962
  async def test_total_mempool_fees() -> None:
959
- coin_records: Dict[bytes32, CoinRecord] = {}
963
+ coin_records: dict[bytes32, CoinRecord] = {}
960
964
 
961
- async def get_coin_records(coin_ids: Collection[bytes32]) -> List[CoinRecord]:
962
- ret: List[CoinRecord] = []
965
+ async def get_coin_records(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
966
+ ret: list[CoinRecord] = []
963
967
  for name in coin_ids:
964
968
  r = coin_records.get(name)
965
969
  if r is not None:
@@ -997,7 +1001,7 @@ async def test_create_bundle_from_mempool(reverse_tx_order: bool) -> None:
997
1001
  async def get_unspent_lineage_info_for_puzzle_hash(_: bytes32) -> Optional[UnspentLineageInfo]:
998
1002
  assert False # pragma: no cover
999
1003
 
1000
- async def make_coin_spends(coins: List[Coin], *, high_fees: bool = True) -> List[CoinSpend]:
1004
+ async def make_coin_spends(coins: list[Coin], *, high_fees: bool = True) -> list[CoinSpend]:
1001
1005
  spends_list = []
1002
1006
  for i in range(0, len(coins)):
1003
1007
  coin_spend = make_spend(
@@ -1010,7 +1014,7 @@ async def test_create_bundle_from_mempool(reverse_tx_order: bool) -> None:
1010
1014
  spends_list.append(coin_spend)
1011
1015
  return spends_list
1012
1016
 
1013
- async def send_spends_to_mempool(coin_spends: List[CoinSpend]) -> None:
1017
+ async def send_spends_to_mempool(coin_spends: list[CoinSpend]) -> None:
1014
1018
  g2 = G2Element()
1015
1019
  for cs in coin_spends:
1016
1020
  sb = SpendBundle([cs], g2)
@@ -1035,36 +1039,63 @@ async def test_create_bundle_from_mempool(reverse_tx_order: bool) -> None:
1035
1039
  @pytest.mark.parametrize("num_skipped_items", [PRIORITY_TX_THRESHOLD, MAX_SKIPPED_ITEMS])
1036
1040
  @pytest.mark.anyio
1037
1041
  async def test_create_bundle_from_mempool_on_max_cost(num_skipped_items: int, caplog: pytest.LogCaptureFixture) -> None:
1042
+ """
1043
+ This test exercises the path where an item's inclusion would exceed the
1044
+ maximum cumulative cost, so it gets skipped as a result.
1045
+
1046
+ NOTE:
1047
+ 1. After PRIORITY_TX_THRESHOLD, we skip items with eligible coins.
1048
+ 2. After skipping MAX_SKIPPED_ITEMS, we stop processing further items.
1049
+ """
1050
+
1038
1051
  async def get_unspent_lineage_info_for_puzzle_hash(_: bytes32) -> Optional[UnspentLineageInfo]:
1039
1052
  assert False # pragma: no cover
1040
1053
 
1041
- # This test exercises the path where an item's inclusion would exceed the
1042
- # maximum cumulative cost, so it gets skipped as a result
1054
+ MAX_BLOCK_CLVM_COST = 550_000_000
1043
1055
 
1044
- # NOTE:
1045
- # 1. After PRIORITY_TX_THRESHOLD, we skip items with eligible coins.
1046
- # 2. After skipping MAX_SKIPPED_ITEMS, we stop processing further items.
1056
+ mempool_manager, coins = await setup_mempool_with_coins(
1057
+ coin_amounts=list(range(1_000_000_000, 1_000_000_030)),
1058
+ max_block_clvm_cost=MAX_BLOCK_CLVM_COST,
1059
+ max_tx_clvm_cost=uint64(MAX_BLOCK_CLVM_COST),
1060
+ mempool_block_buffer=20,
1061
+ )
1047
1062
 
1048
1063
  async def make_and_send_big_cost_sb(coin: Coin) -> None:
1064
+ """
1065
+ Creates a spend bundle with a big enough cost that gets it close to the
1066
+ maximum block clvm cost limit.
1067
+ """
1049
1068
  conditions = []
1050
1069
  sk = AugSchemeMPL.key_gen(b"7" * 32)
1051
1070
  g1 = sk.get_g1()
1052
1071
  sig = AugSchemeMPL.sign(sk, IDENTITY_PUZZLE_HASH, g1)
1053
1072
  aggsig = G2Element()
1054
- for _ in range(169):
1073
+ # Let's get as close to `MAX_BLOCK_CLVM_COST` (550_000_000) as possible.
1074
+ # We start by accounting for execution cost
1075
+ spend_bundle_cost = 44
1076
+ # And then the created coin
1077
+ conditions.append([ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, coin.amount - 10_000_000])
1078
+ TEST_CREATE_COIN_SPEND_BYTESIZE = 93
1079
+ TEST_CREATE_COIN_CONDITION_COST = (
1080
+ ConditionCost.CREATE_COIN.value + TEST_CREATE_COIN_SPEND_BYTESIZE * DEFAULT_CONSTANTS.COST_PER_BYTE
1081
+ )
1082
+ spend_bundle_cost += TEST_CREATE_COIN_CONDITION_COST
1083
+ # We're using agg sig conditions to increase the spend bundle's cost
1084
+ # and reach our target cost.
1085
+ TEST_AGG_SIG_SPEND_BYTESIZE = 88
1086
+ TEST_AGGSIG_CONDITION_COST = (
1087
+ ConditionCost.AGG_SIG.value + TEST_AGG_SIG_SPEND_BYTESIZE * DEFAULT_CONSTANTS.COST_PER_BYTE
1088
+ )
1089
+ while spend_bundle_cost + TEST_AGGSIG_CONDITION_COST < MAX_BLOCK_CLVM_COST:
1055
1090
  conditions.append([ConditionOpcode.AGG_SIG_UNSAFE, g1, IDENTITY_PUZZLE_HASH])
1056
1091
  aggsig += sig
1057
- conditions.append([ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, coin.amount - 10_000_000])
1058
- # Create a spend bundle with a big enough cost that gets it close to the limit
1092
+ spend_bundle_cost += TEST_AGGSIG_CONDITION_COST
1093
+ # We now have a spend bundle with a big enough cost that gets it close to the limit
1059
1094
  _, _, res = await generate_and_add_spendbundle(mempool_manager, conditions, coin, aggsig)
1060
- assert res[1] == MempoolInclusionStatus.SUCCESS
1095
+ cost, status, _ = res
1096
+ assert status == MempoolInclusionStatus.SUCCESS
1097
+ assert cost == spend_bundle_cost
1061
1098
 
1062
- mempool_manager, coins = await setup_mempool_with_coins(
1063
- coin_amounts=list(range(1_000_000_000, 1_000_000_030)),
1064
- max_block_clvm_cost=550_000_000,
1065
- max_tx_clvm_cost=uint64(550_000_000),
1066
- mempool_block_buffer=20,
1067
- )
1068
1099
  # Create the spend bundles with a big enough cost that they get close to the limit
1069
1100
  for i in range(num_skipped_items):
1070
1101
  await make_and_send_big_cost_sb(coins[i])
@@ -1149,9 +1180,9 @@ async def test_create_bundle_from_mempool_on_max_cost(num_skipped_items: int, ca
1149
1180
  async def test_assert_before_expiration(
1150
1181
  opcode: ConditionOpcode, arg: int, expect_eviction: bool, expect_limit: Optional[int]
1151
1182
  ) -> None:
1152
- async def get_coin_records(coin_ids: Collection[bytes32]) -> List[CoinRecord]:
1183
+ async def get_coin_records(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
1153
1184
  all_coins = {TEST_COIN.name(): CoinRecord(TEST_COIN, uint32(5), uint32(0), False, uint64(9900))}
1154
- ret: List[CoinRecord] = []
1185
+ ret: list[CoinRecord] = []
1155
1186
  for name in coin_ids:
1156
1187
  r = all_coins.get(name)
1157
1188
  if r is not None:
@@ -1187,9 +1218,9 @@ async def test_assert_before_expiration(
1187
1218
  assert expect_limit is not None
1188
1219
  item = mempool_manager.get_mempool_item(bundle_name)
1189
1220
  assert item is not None
1190
- if opcode in [co.ASSERT_BEFORE_SECONDS_ABSOLUTE, co.ASSERT_BEFORE_SECONDS_RELATIVE]:
1221
+ if opcode in {co.ASSERT_BEFORE_SECONDS_ABSOLUTE, co.ASSERT_BEFORE_SECONDS_RELATIVE}:
1191
1222
  assert item.assert_before_seconds == expect_limit
1192
- elif opcode in [co.ASSERT_BEFORE_HEIGHT_ABSOLUTE, co.ASSERT_BEFORE_HEIGHT_RELATIVE]:
1223
+ elif opcode in {co.ASSERT_BEFORE_HEIGHT_ABSOLUTE, co.ASSERT_BEFORE_HEIGHT_RELATIVE}:
1193
1224
  assert item.assert_before_height == expect_limit
1194
1225
  else:
1195
1226
  assert False
@@ -1209,7 +1240,7 @@ def make_test_spendbundle(coin: Coin, *, fee: int = 0, eligible_spend: bool = Fa
1209
1240
  async def send_spendbundle(
1210
1241
  mempool_manager: MempoolManager,
1211
1242
  sb: SpendBundle,
1212
- expected_result: Tuple[MempoolInclusionStatus, Optional[Err]] = (MempoolInclusionStatus.SUCCESS, None),
1243
+ expected_result: tuple[MempoolInclusionStatus, Optional[Err]] = (MempoolInclusionStatus.SUCCESS, None),
1213
1244
  ) -> None:
1214
1245
  result = await add_spendbundle(mempool_manager, sb, sb.name())
1215
1246
  assert (result[1], result[2]) == expected_result
@@ -1220,7 +1251,7 @@ async def make_and_send_spendbundle(
1220
1251
  coin: Coin,
1221
1252
  *,
1222
1253
  fee: int = 0,
1223
- expected_result: Tuple[MempoolInclusionStatus, Optional[Err]] = (MempoolInclusionStatus.SUCCESS, None),
1254
+ expected_result: tuple[MempoolInclusionStatus, Optional[Err]] = (MempoolInclusionStatus.SUCCESS, None),
1224
1255
  ) -> SpendBundle:
1225
1256
  sb = make_test_spendbundle(coin, fee=fee)
1226
1257
  await send_spendbundle(mempool_manager, sb, expected_result)
@@ -1529,8 +1560,8 @@ async def test_coin_spending_different_ways_then_finding_it_spent_in_new_peak(ne
1529
1560
  coin_id = coin.name()
1530
1561
  test_coin_records = {coin_id: CoinRecord(coin, uint32(0), uint32(0), False, uint64(0))}
1531
1562
 
1532
- async def get_coin_records(coin_ids: Collection[bytes32]) -> List[CoinRecord]:
1533
- ret: List[CoinRecord] = []
1563
+ async def get_coin_records(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
1564
+ ret: list[CoinRecord] = []
1534
1565
  for name in coin_ids:
1535
1566
  r = test_coin_records.get(name)
1536
1567
  if r is not None:
@@ -1592,7 +1623,7 @@ async def test_identical_spend_aggregation_e2e(
1592
1623
  def get_sb_names_by_coin_id(
1593
1624
  full_node_api: FullNodeSimulator,
1594
1625
  spent_coin_id: bytes32,
1595
- ) -> Set[bytes32]:
1626
+ ) -> set[bytes32]:
1596
1627
  return {
1597
1628
  i.spend_bundle_name
1598
1629
  for i in full_node_api.full_node.mempool_manager.mempool.get_items_by_coin_id(spent_coin_id)
@@ -1616,7 +1647,7 @@ async def test_identical_spend_aggregation_e2e(
1616
1647
 
1617
1648
  async def make_setup_and_coins(
1618
1649
  full_node_api: FullNodeSimulator, wallet_node: WalletNode
1619
- ) -> Tuple[Wallet, list[WalletCoinRecord], bytes32]:
1650
+ ) -> tuple[Wallet, list[WalletCoinRecord], bytes32]:
1620
1651
  wallet = wallet_node.wallet_state_manager.main_wallet
1621
1652
  ph = await wallet.get_new_puzzlehash()
1622
1653
  phs = [await wallet.get_new_puzzlehash() for _ in range(3)]
@@ -1712,7 +1743,7 @@ async def test_identical_spend_aggregation_e2e(
1712
1743
  assert tx_f.spend_bundle is not None
1713
1744
  # Create transaction E now that spends e_coin to create another eligible
1714
1745
  # coin as well as the announcement consumed by D and F
1715
- conditions: List[List[Any]] = [
1746
+ conditions: list[list[Any]] = [
1716
1747
  [ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, 42],
1717
1748
  [ConditionOpcode.CREATE_COIN_ANNOUNCEMENT, message],
1718
1749
  ]
@@ -1898,7 +1929,7 @@ async def test_identical_spend_aggregation_e2e(
1898
1929
  ),
1899
1930
  ],
1900
1931
  )
1901
- async def test_mempool_timelocks(cond1: List[object], cond2: List[object], expected: Optional[Err]) -> None:
1932
+ async def test_mempool_timelocks(cond1: list[object], cond2: list[object], expected: Optional[Err]) -> None:
1902
1933
  coins = []
1903
1934
  test_coin_records = {}
1904
1935
 
@@ -1909,8 +1940,8 @@ async def test_mempool_timelocks(cond1: List[object], cond2: List[object], expec
1909
1940
  coins.append(coin)
1910
1941
  test_coin_records[coin.name()] = CoinRecord(coin, uint32(20), uint32(0), False, uint64(2000))
1911
1942
 
1912
- async def get_coin_records(coin_ids: Collection[bytes32]) -> List[CoinRecord]:
1913
- ret: List[CoinRecord] = []
1943
+ async def get_coin_records(coin_ids: Collection[bytes32]) -> list[CoinRecord]:
1944
+ ret: list[CoinRecord] = []
1914
1945
  for name in coin_ids:
1915
1946
  r = test_coin_records.get(name)
1916
1947
  if r is not None:
@@ -1987,7 +2018,7 @@ async def test_fill_rate_block_validation(
1987
2018
 
1988
2019
  async def fill_mempool_with_test_sbs(
1989
2020
  full_node_api: FullNodeSimulator,
1990
- ) -> List[Tuple[bytes32, SerializedProgram, bytes32]]:
2021
+ ) -> list[tuple[bytes32, SerializedProgram, bytes32]]:
1991
2022
  coins_and_puzzles = []
1992
2023
  # Create different puzzles and use different (parent) coins to reduce
1993
2024
  # the effects of block compression as much as possible.
@@ -2015,9 +2046,7 @@ async def test_fill_rate_block_validation(
2015
2046
  # and without them we won't be able to get the test bundle in.
2016
2047
  # This defaults to `MAX_BLOCK_COST_CLVM // 2`
2017
2048
  full_node_api.full_node._mempool_manager.max_tx_clvm_cost = max_block_clvm_cost
2018
- # This defaults to `MAX_BLOCK_COST_CLVM * BLOCK_SIZE_LIMIT_FACTOR`
2019
- # TODO: Revisit this when we eventually raise the fille rate to 100%
2020
- # and `BLOCK_SIZE_LIMIT_FACTOR` is no longer relevant.
2049
+ # This defaults to `MAX_BLOCK_COST_CLVM - BLOCK_OVERHEAD`
2021
2050
  full_node_api.full_node._mempool_manager.mempool.mempool_info = dataclasses.replace(
2022
2051
  full_node_api.full_node._mempool_manager.mempool.mempool_info,
2023
2052
  max_block_clvm_cost=CLVMCost(max_block_clvm_cost),
@@ -1,12 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import List
4
-
5
3
  import pytest
6
4
 
7
- from chia._tests.util.misc import BenchmarkRunner, add_blocks_in_batches, wallet_height_at_least
5
+ from chia._tests.util.misc import BenchmarkRunner, wallet_height_at_least
8
6
  from chia._tests.util.setup_nodes import OldSimulatorsAndWallets
9
7
  from chia._tests.util.time_out_assert import time_out_assert
8
+ from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
10
9
  from chia.types.full_block import FullBlock
11
10
  from chia.types.mempool_inclusion_status import MempoolInclusionStatus
12
11
  from chia.types.peer_info import PeerInfo
@@ -24,7 +23,7 @@ async def wallet_balance_at_least(wallet_node: WalletNode, balance: uint128) ->
24
23
  @pytest.mark.anyio
25
24
  async def test_mempool_update_performance(
26
25
  wallet_nodes_mempool_perf: OldSimulatorsAndWallets,
27
- default_400_blocks: List[FullBlock],
26
+ default_400_blocks: list[FullBlock],
28
27
  self_hostname: str,
29
28
  benchmark_runner: BenchmarkRunner,
30
29
  ) -> None:
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
- from typing import Any, Dict, List, Optional, Tuple
4
+ from typing import Any, Optional
5
5
 
6
6
  import pytest
7
7
  from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
@@ -17,7 +17,7 @@ from chia._tests.core.mempool.test_mempool_manager import (
17
17
  spend_bundle_from_conditions,
18
18
  )
19
19
  from chia._tests.util.key_tool import KeyTool
20
- from chia.clvm.spend_sim import SimClient, SpendSim, sim_and_client
20
+ from chia._tests.util.spend_sim import SimClient, SpendSim, sim_and_client
21
21
  from chia.consensus.default_constants import DEFAULT_CONSTANTS
22
22
  from chia.types.blockchain_format.coin import Coin
23
23
  from chia.types.blockchain_format.program import Program
@@ -206,7 +206,7 @@ def test_perform_the_fast_forward() -> None:
206
206
  parent_parent_id=test_child_coin.parent_coin_info,
207
207
  )
208
208
  # Start from a fresh state of fast forward spends
209
- fast_forward_spends: Dict[bytes32, UnspentLineageInfo] = {}
209
+ fast_forward_spends: dict[bytes32, UnspentLineageInfo] = {}
210
210
  # Perform the fast forward on the test coin (the grandparent)
211
211
  new_coin_spend, patched_additions = perform_the_fast_forward(
212
212
  test_unspent_lineage_info, test_spend_data, fast_forward_spends
@@ -246,14 +246,14 @@ def sign_delegated_puz(del_puz: Program, coin: Coin) -> G2Element:
246
246
  async def make_and_send_spend_bundle(
247
247
  sim: SpendSim,
248
248
  sim_client: SimClient,
249
- coin_spends: List[CoinSpend],
249
+ coin_spends: list[CoinSpend],
250
250
  is_eligible_for_ff: bool = True,
251
251
  *,
252
252
  is_launcher_coin: bool = False,
253
253
  signing_puzzle: Optional[Program] = None,
254
254
  signing_coin: Optional[Coin] = None,
255
255
  aggsig: G2Element = G2Element(),
256
- ) -> Tuple[MempoolInclusionStatus, Optional[Err]]:
256
+ ) -> tuple[MempoolInclusionStatus, Optional[Err]]:
257
257
  if is_launcher_coin or not is_eligible_for_ff:
258
258
  assert signing_puzzle is not None
259
259
  assert signing_coin is not None
@@ -268,7 +268,7 @@ async def make_and_send_spend_bundle(
268
268
  return status, error
269
269
 
270
270
 
271
- async def get_singleton_and_remaining_coins(sim: SpendSim) -> Tuple[Coin, List[Coin]]:
271
+ async def get_singleton_and_remaining_coins(sim: SpendSim) -> tuple[Coin, list[Coin]]:
272
272
  coins = await sim.all_non_reward_coins()
273
273
  singletons = [coin for coin in coins if coin.amount & 1]
274
274
  assert len(singletons) == 1
@@ -281,9 +281,9 @@ def make_singleton_coin_spend(
281
281
  parent_coin_spend: CoinSpend,
282
282
  coin_to_spend: Coin,
283
283
  inner_puzzle: Program,
284
- inner_conditions: List[List[Any]],
284
+ inner_conditions: list[list[Any]],
285
285
  is_eve_spend: bool = False,
286
- ) -> Tuple[CoinSpend, Program]:
286
+ ) -> tuple[CoinSpend, Program]:
287
287
  lineage_proof = singleton_top_layer.lineage_proof_for_coinsol(parent_coin_spend)
288
288
  delegated_puzzle = Program.to((1, inner_conditions))
289
289
  inner_solution = Program.to([[], delegated_puzzle, []])
@@ -300,7 +300,7 @@ def make_singleton_coin_spend(
300
300
 
301
301
  async def prepare_singleton_eve(
302
302
  sim: SpendSim, sim_client: SimClient, is_eligible_for_ff: bool, start_amount: uint64, singleton_amount: uint64
303
- ) -> Tuple[Program, CoinSpend, Program]:
303
+ ) -> tuple[Program, CoinSpend, Program]:
304
304
  # Generate starting info
305
305
  key_lookup = KeyTool()
306
306
  pk = G1Element.from_bytes(public_key_for_index(1, key_lookup))
@@ -350,7 +350,7 @@ async def prepare_singleton_eve(
350
350
 
351
351
  async def prepare_and_test_singleton(
352
352
  sim: SpendSim, sim_client: SimClient, is_eligible_for_ff: bool, start_amount: uint64, singleton_amount: uint64
353
- ) -> Tuple[Coin, CoinSpend, Program, Coin]:
353
+ ) -> tuple[Coin, CoinSpend, Program, Coin]:
354
354
  inner_puzzle, eve_coin_spend, eve_signing_puzzle = await prepare_singleton_eve(
355
355
  sim, sim_client, is_eligible_for_ff, start_amount, singleton_amount
356
356
  )
@@ -407,7 +407,7 @@ async def test_singleton_fast_forward_different_block(is_eligible_for_ff: bool)
407
407
  sk = AugSchemeMPL.key_gen(b"1" * 32)
408
408
  g1 = sk.get_g1()
409
409
  sig = AugSchemeMPL.sign(sk, b"foobar", g1)
410
- inner_conditions: List[List[Any]] = [
410
+ inner_conditions: list[list[Any]] = [
411
411
  [ConditionOpcode.AGG_SIG_UNSAFE, bytes(g1), b"foobar"],
412
412
  [ConditionOpcode.CREATE_COIN, inner_puzzle_hash, SINGLETON_CHILD_AMOUNT],
413
413
  ]
@@ -501,7 +501,7 @@ async def test_singleton_fast_forward_same_block() -> None:
501
501
  sk = AugSchemeMPL.key_gen(b"9" * 32)
502
502
  g1 = sk.get_g1()
503
503
  sig = AugSchemeMPL.sign(sk, b"foobar", g1)
504
- inner_conditions: List[List[Any]] = [
504
+ inner_conditions: list[list[Any]] = [
505
505
  [ConditionOpcode.AGG_SIG_UNSAFE, bytes(g1), b"foobar"],
506
506
  [ConditionOpcode.CREATE_COIN, inner_puzzle_hash, SINGLETON_CHILD_AMOUNT],
507
507
  ]