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
@@ -5,25 +5,26 @@ import sys
5
5
  import time
6
6
  import types
7
7
  from pathlib import Path
8
- from typing import Any, Dict, List, Optional
8
+ from typing import Any, Optional
9
9
 
10
10
  import pytest
11
11
  from chia_rs import G1Element, PrivateKey
12
12
 
13
- from chia._tests.util.misc import CoinGenerator, add_blocks_in_batches
13
+ from chia._tests.util.misc import CoinGenerator, patch_request_handler
14
14
  from chia._tests.util.setup_nodes import OldSimulatorsAndWallets
15
15
  from chia._tests.util.time_out_assert import time_out_assert
16
16
  from chia.protocols import wallet_protocol
17
17
  from chia.protocols.protocol_message_types import ProtocolMessageTypes
18
18
  from chia.protocols.wallet_protocol import CoinState
19
+ from chia.server.api_protocol import Self
19
20
  from chia.server.outbound_message import Message, make_msg
21
+ from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
20
22
  from chia.simulator.block_tools import test_constants
21
23
  from chia.types.blockchain_format.coin import Coin
22
24
  from chia.types.blockchain_format.sized_bytes import bytes32
23
25
  from chia.types.full_block import FullBlock
24
26
  from chia.types.mempool_inclusion_status import MempoolInclusionStatus
25
27
  from chia.types.peer_info import PeerInfo
26
- from chia.util.api_decorators import Self, api_request
27
28
  from chia.util.config import load_config
28
29
  from chia.util.errors import Err
29
30
  from chia.util.ints import uint8, uint32, uint64, uint128
@@ -112,7 +113,7 @@ async def test_get_private_key_missing_key_use_default(
112
113
  async def test_get_public_key(root_path_populated_with_config: Path, get_temp_keyring: Keychain) -> None:
113
114
  root_path: Path = root_path_populated_with_config
114
115
  keychain: Keychain = get_temp_keyring
115
- config: Dict[str, Any] = load_config(root_path, "config.yaml", "wallet")
116
+ config: dict[str, Any] = load_config(root_path, "config.yaml", "wallet")
116
117
  node: WalletNode = WalletNode(config, root_path, test_constants, keychain)
117
118
  pk: G1Element = keychain.add_key(
118
119
  "c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
@@ -132,7 +133,7 @@ async def test_get_public_key(root_path_populated_with_config: Path, get_temp_ke
132
133
  async def test_get_public_key_default_key(root_path_populated_with_config: Path, get_temp_keyring: Keychain) -> None:
133
134
  root_path: Path = root_path_populated_with_config
134
135
  keychain: Keychain = get_temp_keyring
135
- config: Dict[str, Any] = load_config(root_path, "config.yaml", "wallet")
136
+ config: dict[str, Any] = load_config(root_path, "config.yaml", "wallet")
136
137
  node: WalletNode = WalletNode(config, root_path, test_constants, keychain)
137
138
  pk: G1Element = keychain.add_key(
138
139
  "c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
@@ -168,7 +169,7 @@ async def test_get_public_key_missing_key(
168
169
  ) -> None:
169
170
  root_path: Path = root_path_populated_with_config
170
171
  keychain: Keychain = get_temp_keyring # empty keyring
171
- config: Dict[str, Any] = load_config(root_path, "config.yaml", "wallet")
172
+ config: dict[str, Any] = load_config(root_path, "config.yaml", "wallet")
172
173
  node: WalletNode = WalletNode(config, root_path, test_constants, keychain)
173
174
 
174
175
  # Keyring is empty, so requesting a key by fingerprint or None should return None
@@ -183,7 +184,7 @@ async def test_get_public_key_missing_key_use_default(
183
184
  ) -> None:
184
185
  root_path: Path = root_path_populated_with_config
185
186
  keychain: Keychain = get_temp_keyring
186
- config: Dict[str, Any] = load_config(root_path, "config.yaml", "wallet")
187
+ config: dict[str, Any] = load_config(root_path, "config.yaml", "wallet")
187
188
  node: WalletNode = WalletNode(config, root_path, test_constants, keychain)
188
189
  pk: G1Element = keychain.add_key(
189
190
  "c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
@@ -299,7 +300,7 @@ def test_get_last_used_fingerprint_file_doesnt_exist(root_path_populated_with_co
299
300
 
300
301
 
301
302
  def test_get_last_used_fingerprint_file_cant_read_unix(root_path_populated_with_config: Path) -> None:
302
- if sys.platform in ["win32", "cygwin"]:
303
+ if sys.platform in {"win32", "cygwin"}:
303
304
  pytest.skip("Setting UNIX file permissions doesn't apply to Windows")
304
305
 
305
306
  root_path = root_path_populated_with_config
@@ -331,7 +332,7 @@ def test_get_last_used_fingerprint_file_cant_read_unix(root_path_populated_with_
331
332
  def test_get_last_used_fingerprint_file_cant_read_win32(
332
333
  root_path_populated_with_config: Path, monkeypatch: pytest.MonkeyPatch
333
334
  ) -> None:
334
- if sys.platform not in ["win32", "cygwin"]:
335
+ if sys.platform not in {"win32", "cygwin"}:
335
336
  pytest.skip("Windows-specific test")
336
337
 
337
338
  called_read_text = False
@@ -439,7 +440,7 @@ async def test_get_timestamp_for_height_from_peer(
439
440
  await wallet_server.start_client(PeerInfo(self_hostname, full_node_api.server.get_port()), None)
440
441
  wallet = wallet_node.wallet_state_manager.main_wallet
441
442
  await full_node_api.farm_blocks_to_wallet(2, wallet)
442
- full_node_peer = list(wallet_server.all_connections.values())[0]
443
+ full_node_peer = next(iter(wallet_server.all_connections.values()))
443
444
  # There should be no timestamp available for height 10
444
445
  assert await get_timestamp(10) is None
445
446
  # The timestamp at peak height should match the one from the full node block_store.
@@ -493,9 +494,9 @@ async def test_unique_puzzle_hash_subscriptions(simulator_and_wallet: OldSimulat
493
494
  @pytest.mark.anyio
494
495
  @pytest.mark.standard_block_tools
495
496
  async def test_get_balance(
496
- simulator_and_wallet: OldSimulatorsAndWallets, self_hostname: str, default_400_blocks: List[FullBlock]
497
+ simulator_and_wallet: OldSimulatorsAndWallets, self_hostname: str, default_400_blocks: list[FullBlock]
497
498
  ) -> None:
498
- [full_node_api], [(wallet_node, wallet_server)], bt = simulator_and_wallet
499
+ [full_node_api], [(wallet_node, wallet_server)], _bt = simulator_and_wallet
499
500
  full_node_server = full_node_api.full_node.server
500
501
 
501
502
  def wallet_synced() -> bool:
@@ -578,7 +579,7 @@ async def test_add_states_from_peer_reorg_failure(
578
579
  coin_generator = CoinGenerator()
579
580
  coin_states = [CoinState(coin_generator.get().coin, None, None)]
580
581
  with caplog.at_level(logging.DEBUG):
581
- full_node_peer = list(wallet_server.all_connections.values())[0]
582
+ full_node_peer = next(iter(wallet_server.all_connections.values()))
582
583
  # Close the connection to trigger a state processing failure during reorged coin processing.
583
584
  await full_node_peer.close()
584
585
  assert not await wallet_node.add_states_from_peer(coin_states, full_node_peer)
@@ -599,7 +600,9 @@ async def test_add_states_from_peer_untrusted_shutdown(
599
600
  # Generate enough coin states to fill up the max number validation/add tasks.
600
601
  coin_states = [CoinState(coin_generator.get().coin, uint32(i), uint32(i)) for i in range(3000)]
601
602
  with caplog.at_level(logging.INFO):
602
- assert not await wallet_node.add_states_from_peer(coin_states, list(wallet_server.all_connections.values())[0])
603
+ assert not await wallet_node.add_states_from_peer(
604
+ coin_states, next(iter(wallet_server.all_connections.values()))
605
+ )
603
606
  assert "Terminating receipt and validation due to shut down request" in caplog.text
604
607
 
605
608
 
@@ -622,7 +625,6 @@ async def test_transaction_send_cache(
622
625
  # Replacing the normal logic a full node has for processing transactions with a function that just logs what it gets
623
626
  logged_spends = []
624
627
 
625
- @api_request()
626
628
  async def send_transaction(
627
629
  self: Self, request: wallet_protocol.SendTransaction, *, test: bool = False
628
630
  ) -> Optional[Message]:
@@ -630,48 +632,46 @@ async def test_transaction_send_cache(
630
632
  return None
631
633
 
632
634
  assert full_node_api.full_node._server is not None
633
- monkeypatch.setattr(
634
- full_node_api.full_node._server.get_connections()[0].api,
635
- "send_transaction",
636
- types.MethodType(send_transaction, full_node_api.full_node._server.get_connections()[0].api),
637
- )
638
-
639
- # Generate the transaction
640
- async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
641
- await wallet.generate_signed_transaction(uint64(0), bytes32([0] * 32), action_scope)
642
- [tx] = action_scope.side_effects.transactions
643
-
644
- # Make sure it is sent to the peer
645
- await wallet_node._resend_queue()
635
+ with patch_request_handler(api=full_node_api.full_node._server.get_connections()[0].api, handler=send_transaction):
636
+ # Generate the transaction
637
+ async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
638
+ await wallet.generate_signed_transaction(uint64(0), bytes32.zeros, action_scope)
639
+ [tx] = action_scope.side_effects.transactions
640
+
641
+ # Make sure it is sent to the peer
642
+ await wallet_node._resend_queue()
643
+
644
+ def logged_spends_len() -> int:
645
+ return len(logged_spends)
646
+
647
+ await time_out_assert(5, logged_spends_len, 1)
648
+
649
+ # Make sure queue processing again does not result in another spend
650
+ await wallet_node._resend_queue()
651
+ with pytest.raises(AssertionError):
652
+ await time_out_assert(5, logged_spends_len, 2)
653
+
654
+ # Tell the wallet that we recieved the spend (but failed to process it so it should send again)
655
+ msg = make_msg(
656
+ ProtocolMessageTypes.transaction_ack,
657
+ wallet_protocol.TransactionAck(
658
+ tx.name, uint8(MempoolInclusionStatus.FAILED), Err.GENERATOR_RUNTIME_ERROR.name
659
+ ),
660
+ )
661
+ assert simulator_and_wallet[1][0][0]._server is not None
662
+ await simulator_and_wallet[1][0][0]._server.get_connections()[0].incoming_queue.put(msg)
646
663
 
647
- def logged_spends_len() -> int:
648
- return len(logged_spends)
664
+ # Make sure the cache is emptied
665
+ def check_wallet_cache_empty() -> bool:
666
+ return wallet_node._tx_messages_in_progress == {}
649
667
 
650
- await time_out_assert(5, logged_spends_len, 1)
668
+ await time_out_assert(5, check_wallet_cache_empty, True)
651
669
 
652
- # Make sure queue processing again does not result in another spend
653
- await wallet_node._resend_queue()
654
- with pytest.raises(AssertionError):
670
+ # Re-process the queue again and this time it should result in a resend
671
+ await wallet_node._resend_queue()
655
672
  await time_out_assert(5, logged_spends_len, 2)
673
+ assert logged_spends == [tx.name, tx.name]
656
674
 
657
- # Tell the wallet that we recieved the spend (but failed to process it so it should send again)
658
- msg = make_msg(
659
- ProtocolMessageTypes.transaction_ack,
660
- wallet_protocol.TransactionAck(tx.name, uint8(MempoolInclusionStatus.FAILED), Err.GENERATOR_RUNTIME_ERROR.name),
661
- )
662
- assert simulator_and_wallet[1][0][0]._server is not None
663
- await simulator_and_wallet[1][0][0]._server.get_connections()[0].incoming_queue.put(msg)
664
-
665
- # Make sure the cache is emptied
666
- def check_wallet_cache_empty() -> bool:
667
- return wallet_node._tx_messages_in_progress == {}
668
-
669
- await time_out_assert(5, check_wallet_cache_empty, True)
670
-
671
- # Re-process the queue again and this time it should result in a resend
672
- await wallet_node._resend_queue()
673
- await time_out_assert(5, logged_spends_len, 2)
674
- assert logged_spends == [tx.name, tx.name]
675
675
  await time_out_assert(5, check_wallet_cache_empty, False)
676
676
 
677
677
  # Disconnect from the peer to make sure their entry in the cache is also deleted
@@ -688,14 +688,13 @@ async def test_wallet_node_bad_coin_state_ignore(
688
688
 
689
689
  await wallet_server.start_client(PeerInfo(self_hostname, full_node_api.server.get_port()), None)
690
690
 
691
- @api_request()
692
- async def register_interest_in_coin(
691
+ async def register_for_coin_updates(
693
692
  self: Self, request: wallet_protocol.RegisterForCoinUpdates, *, test: bool = False
694
693
  ) -> Optional[Message]:
695
694
  return make_msg(
696
- ProtocolMessageTypes.respond_to_coin_update,
695
+ ProtocolMessageTypes.respond_to_coin_updates,
697
696
  wallet_protocol.RespondToCoinUpdates(
698
- [], uint32(0), [CoinState(Coin(bytes32([0] * 32), bytes32([0] * 32), uint64(0)), uint32(0), uint32(0))]
697
+ [], uint32(0), [CoinState(Coin(bytes32.zeros, bytes32.zeros, uint64(0)), uint32(0), uint32(0))]
699
698
  ),
700
699
  )
701
700
 
@@ -704,27 +703,25 @@ async def test_wallet_node_bad_coin_state_ignore(
704
703
  return True # pragma: no cover
705
704
 
706
705
  assert full_node_api.full_node._server is not None
707
- monkeypatch.setattr(
708
- full_node_api.full_node._server.get_connections()[0].api,
709
- "register_interest_in_coin",
710
- types.MethodType(register_interest_in_coin, full_node_api.full_node._server.get_connections()[0].api),
711
- )
712
- monkeypatch.setattr(
713
- wallet_node,
714
- "validate_received_state_from_peer",
715
- types.MethodType(validate_received_state_from_peer, wallet_node),
716
- )
706
+ with patch_request_handler(
707
+ api=full_node_api.full_node._server.get_connections()[0].api, handler=register_for_coin_updates
708
+ ):
709
+ monkeypatch.setattr(
710
+ wallet_node,
711
+ "validate_received_state_from_peer",
712
+ types.MethodType(validate_received_state_from_peer, wallet_node),
713
+ )
717
714
 
718
- with pytest.raises(PeerRequestException):
719
- await wallet_node.get_coin_state([], wallet_node.get_full_node_peer())
715
+ with pytest.raises(PeerRequestException):
716
+ await wallet_node.get_coin_state([], wallet_node.get_full_node_peer())
720
717
 
721
718
 
722
719
  @pytest.mark.anyio
723
720
  @pytest.mark.standard_block_tools
724
721
  async def test_start_with_multiple_key_types(
725
- simulator_and_wallet: OldSimulatorsAndWallets, self_hostname: str, default_400_blocks: List[FullBlock]
722
+ simulator_and_wallet: OldSimulatorsAndWallets, self_hostname: str, default_400_blocks: list[FullBlock]
726
723
  ) -> None:
727
- [full_node_api], [(wallet_node, wallet_server)], bt = simulator_and_wallet
724
+ [_full_node_api], [(wallet_node, _wallet_server)], _bt = simulator_and_wallet
728
725
 
729
726
  async def restart_with_fingerprint(fingerprint: Optional[int]) -> None:
730
727
  wallet_node._close()
@@ -753,9 +750,9 @@ async def test_start_with_multiple_key_types(
753
750
  @pytest.mark.anyio
754
751
  @pytest.mark.standard_block_tools
755
752
  async def test_start_with_multiple_keys(
756
- simulator_and_wallet: OldSimulatorsAndWallets, self_hostname: str, default_400_blocks: List[FullBlock]
753
+ simulator_and_wallet: OldSimulatorsAndWallets, self_hostname: str, default_400_blocks: list[FullBlock]
757
754
  ) -> None:
758
- [full_node_api], [(wallet_node, wallet_server)], bt = simulator_and_wallet
755
+ [_full_node_api], [(wallet_node, _wallet_server)], _bt = simulator_and_wallet
759
756
 
760
757
  async def restart_with_fingerprint(fingerprint: Optional[int]) -> None:
761
758
  wallet_node._close()
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import asyncio
4
- from typing import Any, List, Tuple
4
+ from typing import Any
5
5
 
6
6
  import pytest
7
7
 
@@ -36,11 +36,11 @@ def evict_from_pool(node: FullNodeAPI, sb: WalletSpendBundle) -> None:
36
36
 
37
37
  @pytest.mark.anyio
38
38
  async def test_wallet_tx_retry(
39
- setup_two_nodes_and_wallet_fast_retry: Tuple[List[FullNodeSimulator], List[Tuple[Any, Any]], BlockTools],
39
+ setup_two_nodes_and_wallet_fast_retry: tuple[list[FullNodeSimulator], list[tuple[Any, Any]], BlockTools],
40
40
  self_hostname: str,
41
41
  ) -> None:
42
42
  wait_secs = 20
43
- nodes, wallets, bt = setup_two_nodes_and_wallet_fast_retry
43
+ nodes, wallets, _bt = setup_two_nodes_and_wallet_fast_retry
44
44
  server_1 = nodes[0].full_node.server
45
45
  full_node_1: FullNodeSimulator = nodes[0]
46
46
  wallet_node_1: WalletNode = wallets[0][0]
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from collections.abc import AsyncIterator
3
4
  from contextlib import asynccontextmanager
4
- from typing import AsyncIterator, List
5
5
 
6
6
  import pytest
7
7
  from chia_rs import G2Element
@@ -9,6 +9,7 @@ from chia_rs import G2Element
9
9
  from chia._tests.environments.wallet import WalletStateTransition, WalletTestFramework
10
10
  from chia._tests.util.setup_nodes import OldSimulatorsAndWallets
11
11
  from chia.protocols.wallet_protocol import CoinState
12
+ from chia.rpc.wallet_request_types import PushTransactions
12
13
  from chia.server.outbound_message import NodeType
13
14
  from chia.types.blockchain_format.coin import Coin
14
15
  from chia.types.blockchain_format.program import Program
@@ -125,20 +126,20 @@ async def test_commit_transactions_to_db(wallet_environments: WalletTestFramewor
125
126
  coins = list(await wsm.main_wallet.select_coins(uint64(2_000_000_000_000), action_scope))
126
127
  await wsm.main_wallet.generate_signed_transaction(
127
128
  uint64(0),
128
- bytes32([0] * 32),
129
+ bytes32.zeros,
129
130
  action_scope,
130
131
  coins={coins[0]},
131
132
  )
132
133
  await wsm.main_wallet.generate_signed_transaction(
133
134
  uint64(0),
134
- bytes32([0] * 32),
135
+ bytes32.zeros,
135
136
  action_scope,
136
137
  coins={coins[1]},
137
138
  )
138
139
 
139
140
  created_txs = action_scope.side_effects.transactions
140
141
 
141
- def flatten_spend_bundles(txs: List[TransactionRecord]) -> List[WalletSpendBundle]:
142
+ def flatten_spend_bundles(txs: list[TransactionRecord]) -> list[WalletSpendBundle]:
142
143
  return [tx.spend_bundle for tx in txs if tx.spend_bundle is not None]
143
144
 
144
145
  assert (
@@ -224,7 +225,13 @@ async def test_confirming_txs_not_ours(wallet_environments: WalletTestFramework)
224
225
  action_scope,
225
226
  )
226
227
 
227
- await env_2.rpc_client.push_transactions(action_scope.side_effects.transactions)
228
+ await env_2.rpc_client.push_transactions(
229
+ PushTransactions(
230
+ transactions=action_scope.side_effects.transactions,
231
+ sign=False,
232
+ ),
233
+ wallet_environments.tx_config,
234
+ )
228
235
 
229
236
  await wallet_environments.process_pending_states(
230
237
  [
@@ -133,7 +133,7 @@ async def test_valid_times_migration() -> None:
133
133
  )
134
134
 
135
135
  fake_offer = Offer({}, WalletSpendBundle([], G2Element()), {})
136
- fake_coin = Coin(bytes32([0] * 32), bytes32([0] * 32), uint64(0))
136
+ fake_coin = Coin(bytes32.zeros, bytes32.zeros, uint64(0))
137
137
  old_record = TradeRecordOld(
138
138
  confirmed_at_index=uint32(0),
139
139
  accepted_at_time=None,
@@ -143,7 +143,7 @@ async def test_valid_times_migration() -> None:
143
143
  offer=bytes(fake_offer),
144
144
  taken_offer=None,
145
145
  coins_of_interest=[fake_coin],
146
- trade_id=bytes32([0] * 32),
146
+ trade_id=bytes32.zeros,
147
147
  status=uint32(TradeStatus.PENDING_ACCEPT.value),
148
148
  sent_to=[],
149
149
  )
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Collection, Dict, List, Optional, Set, Tuple
3
+ from collections.abc import Collection
4
+ from typing import Optional
4
5
 
5
6
  import pytest
6
7
  from chia_rs import Coin, CoinState
@@ -22,7 +23,7 @@ coin_states = [
22
23
  ]
23
24
 
24
25
 
25
- def assert_race_cache(cache: PeerRequestCache, expected_entries: Dict[int, Set[CoinState]]) -> None:
26
+ def assert_race_cache(cache: PeerRequestCache, expected_entries: dict[int, set[CoinState]]) -> None:
26
27
  for i in range(100):
27
28
  if i in expected_entries:
28
29
  assert cache.get_race_cache(i) == expected_entries[i], f"failed for {i}"
@@ -39,7 +40,7 @@ def dummy_coin_state(*, created_height: Optional[int], spent_height: Optional[in
39
40
  )
40
41
 
41
42
 
42
- def heights(coin_states: Collection[CoinState]) -> List[Tuple[Optional[int], Optional[int]]]:
43
+ def heights(coin_states: Collection[CoinState]) -> list[tuple[Optional[int], Optional[int]]]:
43
44
  return [(coin_state.created_height, coin_state.spent_height) for coin_state in coin_states]
44
45
 
45
46
 
@@ -67,7 +68,7 @@ def test_sort_coin_states() -> None:
67
68
 
68
69
  def test_add_states_to_race_cache() -> None:
69
70
  cache = PeerRequestCache()
70
- expected_entries: Dict[int, Set[CoinState]] = {}
71
+ expected_entries: dict[int, set[CoinState]] = {}
71
72
  assert_race_cache(cache, expected_entries)
72
73
 
73
74
  # Repeated adding of the same coin state should not have any impact
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import List, Optional
3
+ from typing import Optional
4
4
 
5
5
  from chia.types.blockchain_format.coin import Coin
6
6
  from chia.types.blockchain_format.program import Program
@@ -20,7 +20,7 @@ from chia.wallet.vc_wallet.cr_cat_drivers import construct_cr_layer
20
20
 
21
21
 
22
22
  def test_cat_outer_puzzle() -> None:
23
- authorized_providers: List[bytes32] = [bytes32([0] * 32), bytes32([0] * 32)]
23
+ authorized_providers: list[bytes32] = [bytes32.zeros, bytes32.zeros]
24
24
  proofs_checker: Program = Program.to(None)
25
25
  ACS: Program = Program.to(1)
26
26
  cr_puzzle: Program = construct_cr_layer(authorized_providers, proofs_checker, ACS)
@@ -42,7 +42,7 @@ def test_cat_outer_puzzle() -> None:
42
42
  assert create_asset_id(cr_driver) is None
43
43
 
44
44
  # Set up for solve
45
- coin: Coin = Coin(bytes32([0] * 32), bytes32([0] * 32), uint64(0))
45
+ coin: Coin = Coin(bytes32.zeros, bytes32.zeros, uint64(0))
46
46
  coin_as_hex: str = (
47
47
  "0x" + coin.parent_coin_info.hex() + coin.puzzle_hash.hex() + uint64(coin.amount).stream_to_bytes().hex()
48
48
  )
@@ -1,12 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import itertools
4
- from typing import List, Optional, Tuple
4
+ from typing import Optional
5
5
 
6
6
  import pytest
7
7
  from chia_rs import G2Element
8
8
 
9
- from chia.clvm.spend_sim import CostLogger, sim_and_client
9
+ from chia._tests.util.spend_sim import CostLogger, sim_and_client
10
10
  from chia.types.blockchain_format.coin import Coin
11
11
  from chia.types.blockchain_format.program import Program
12
12
  from chia.types.blockchain_format.sized_bytes import bytes32
@@ -47,7 +47,7 @@ ACS_PH: bytes32 = ACS.get_tree_hash()
47
47
  ACS_2_PH: bytes32 = ACS_2.get_tree_hash()
48
48
  MOCK_SINGLETON_MOD: Program = Program.to([2, 5, 11])
49
49
  MOCK_SINGLETON_MOD_HASH: bytes32 = MOCK_SINGLETON_MOD.get_tree_hash()
50
- MOCK_LAUNCHER_ID: bytes32 = bytes32([0] * 32)
50
+ MOCK_LAUNCHER_ID: bytes32 = bytes32.zeros
51
51
  MOCK_LAUNCHER_HASH: bytes32 = bytes32([1] * 32)
52
52
  MOCK_SINGLETON: Program = MOCK_SINGLETON_MOD.curry(
53
53
  (MOCK_SINGLETON_MOD_HASH, (MOCK_LAUNCHER_ID, MOCK_LAUNCHER_HASH)),
@@ -105,7 +105,7 @@ async def test_covenant_layer(cost_logger: CostLogger) -> None:
105
105
  ].coin
106
106
 
107
107
  # With the honest coin, attempt to spend the non-eve case too soon
108
- result: Tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
108
+ result: tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
109
109
  WalletSpendBundle(
110
110
  [
111
111
  make_spend(
@@ -193,7 +193,7 @@ async def test_did_tp(cost_logger: CostLogger) -> None:
193
193
  # (mod (METADATA TP solution) (a (q . (c (c (q . 1) (c 2 (c 5 ()))) 11)) (a TP (list METADATA () solution))))
194
194
  # (a (q 4 (c (q . 1) (c 2 (c 5 ()))) 11) (a 5 (c 2 (c () (c 11 ())))))
195
195
  MOCK_OWNERSHIP_LAYER: Program = Program.fromhex(
196
- "ff02ffff01ff04ffff04ffff0101ffff04ff02ffff04ff05ff80808080ff0b80ffff02ff05ffff04ff02ffff04ff80ffff04ff0bff808080808080" # noqa: E501
196
+ "ff02ffff01ff04ffff04ffff0101ffff04ff02ffff04ff05ff80808080ff0b80ffff02ff05ffff04ff02ffff04ff80ffff04ff0bff808080808080"
197
197
  )
198
198
  # Create it with mock singleton info
199
199
  transfer_program: Program = create_did_tp(MOCK_SINGLETON_MOD_HASH, MOCK_LAUNCHER_HASH)
@@ -210,10 +210,10 @@ async def test_did_tp(cost_logger: CostLogger) -> None:
210
210
  my_coin_id: bytes32 = eml_coin.name()
211
211
  new_metadata: Program = Program.to("SUCCESS")
212
212
  new_tp_hash = Program.to("NEW TP").get_tree_hash()
213
- bad_data: bytes32 = bytes32([0] * 32)
213
+ bad_data: bytes32 = bytes32.zeros
214
214
 
215
215
  # Try to update metadata and tp without any announcement
216
- result: Tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
216
+ result: tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
217
217
  WalletSpendBundle(
218
218
  [
219
219
  make_spend(
@@ -327,7 +327,7 @@ async def test_viral_backdoor(cost_logger: CostLogger) -> None:
327
327
  )[0].coin
328
328
 
329
329
  # Reveal the wrong puzzle
330
- result: Tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
330
+ result: tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
331
331
  WalletSpendBundle(
332
332
  [
333
333
  make_spend(
@@ -354,7 +354,7 @@ async def test_viral_backdoor(cost_logger: CostLogger) -> None:
354
354
  p2_either_puzzle,
355
355
  solve_viral_backdoor(
356
356
  hidden_puzzle,
357
- Program.to(bytes32([0] * 32)),
357
+ Program.to(bytes32.zeros),
358
358
  hidden=True,
359
359
  ),
360
360
  )
@@ -365,7 +365,7 @@ async def test_viral_backdoor(cost_logger: CostLogger) -> None:
365
365
  assert result == (MempoolInclusionStatus.FAILED, Err.ASSERT_ANNOUNCE_CONSUMED_FAILED)
366
366
 
367
367
  # Spend the inner puzzle
368
- brick_hash: bytes32 = bytes32([0] * 32)
368
+ brick_hash: bytes32 = bytes32.zeros
369
369
  wrapped_brick_hash: bytes32 = create_viral_backdoor(
370
370
  hidden_puzzle_hash,
371
371
  brick_hash,
@@ -399,7 +399,7 @@ async def test_viral_backdoor(cost_logger: CostLogger) -> None:
399
399
  @pytest.mark.parametrize("num_proofs", range(1, 6))
400
400
  async def test_proofs_checker(cost_logger: CostLogger, num_proofs: int) -> None:
401
401
  async with sim_and_client() as (sim, client):
402
- flags: List[str] = [str(i) for i in range(0, num_proofs)]
402
+ flags: list[str] = [str(i) for i in range(0, num_proofs)]
403
403
  proofs_checker: ProofsChecker = ProofsChecker(flags)
404
404
 
405
405
  # (mod (PROOFS_CHECKER proofs) (if (a PROOFS_CHECKER (list proofs)) () (x)))
@@ -415,7 +415,7 @@ async def test_proofs_checker(cost_logger: CostLogger, num_proofs: int) -> None:
415
415
 
416
416
  block_height: uint32 = sim.block_height
417
417
  for i, proof_list in enumerate(itertools.permutations(flags, num_proofs)):
418
- result: Tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
418
+ result: tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
419
419
  cost_logger.add_cost(
420
420
  f"Proofs Checker only - num_proofs: {num_proofs} - permutation: {i}",
421
421
  WalletSpendBundle(
@@ -504,9 +504,9 @@ async def test_vc_lifecycle(test_syncing: bool, cost_logger: CostLogger) -> None
504
504
  [vc_fund_coin],
505
505
  launcher_id,
506
506
  ACS_PH,
507
- [bytes32([0] * 32)],
507
+ [bytes32.zeros],
508
508
  )
509
- result: Tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
509
+ result: tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
510
510
  cost_logger.add_cost(
511
511
  "Launch VC",
512
512
  WalletSpendBundle(
@@ -612,7 +612,7 @@ async def test_vc_lifecycle(test_syncing: bool, cost_logger: CostLogger) -> None
612
612
  else:
613
613
  proofs = ["test", "test2"]
614
614
  proofs_checker: ProofsChecker = ProofsChecker(proofs)
615
- AUTHORIZED_PROVIDERS: List[bytes32] = [launcher_id]
615
+ AUTHORIZED_PROVIDERS: list[bytes32] = [launcher_id]
616
616
  dpuz_1, launch_crcat_spend_1, cr_1 = CRCAT.launch(
617
617
  cr_coin_1,
618
618
  Payment(ACS_PH, uint64(cr_coin_1.amount), []),
@@ -716,7 +716,7 @@ async def test_vc_lifecycle(test_syncing: bool, cost_logger: CostLogger) -> None
716
716
  62,
717
717
  (
718
718
  cr_1.expected_announcement()
719
- if error not in ["use_malicious_cats", "attempt_honest_cat_piggyback"]
719
+ if error not in {"use_malicious_cats", "attempt_honest_cat_piggyback"}
720
720
  else malicious_cr_1.expected_announcement()
721
721
  ),
722
722
  ],
@@ -724,7 +724,7 @@ async def test_vc_lifecycle(test_syncing: bool, cost_logger: CostLogger) -> None
724
724
  62,
725
725
  (
726
726
  cr_2.expected_announcement()
727
- if error not in ["use_malicious_cats", "attempt_honest_cat_piggyback"]
727
+ if error not in {"use_malicious_cats", "attempt_honest_cat_piggyback"}
728
728
  else malicious_cr_2.expected_announcement()
729
729
  ),
730
730
  ],
@@ -755,7 +755,7 @@ async def test_vc_lifecycle(test_syncing: bool, cost_logger: CostLogger) -> None
755
755
  else:
756
756
  vc = new_vc
757
757
  await sim.farm_block()
758
- elif error in ["forget_vc", "use_malicious_cats", "attempt_honest_cat_piggyback"]:
758
+ elif error in {"forget_vc", "use_malicious_cats", "attempt_honest_cat_piggyback"}:
759
759
  assert result == (MempoolInclusionStatus.FAILED, Err.ASSERT_ANNOUNCE_CONSUMED_FAILED)
760
760
  elif error == "make_banned_announcement":
761
761
  assert result == (MempoolInclusionStatus.FAILED, Err.GENERATOR_RUNTIME_ERROR)