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
chia/_tests/conftest.py CHANGED
@@ -1,8 +1,7 @@
1
- # flake8: noqa E402 # See imports after multiprocessing.set_start_method
1
+ # ruff: noqa: E402 # See imports after multiprocessing.set_start_method
2
2
  from __future__ import annotations
3
3
 
4
4
  import asyncio
5
- import dataclasses
6
5
  import datetime
7
6
  import functools
8
7
  import json
@@ -13,8 +12,9 @@ import os
13
12
  import random
14
13
  import sysconfig
15
14
  import tempfile
15
+ from collections.abc import AsyncIterator, Iterator
16
16
  from contextlib import AsyncExitStack
17
- from typing import Any, AsyncIterator, Callable, Dict, Iterator, List, Tuple, Union
17
+ from typing import Any, Callable, Union
18
18
 
19
19
  import aiohttp
20
20
  import pytest
@@ -23,7 +23,6 @@ import pytest
23
23
  from _pytest.fixtures import SubRequest
24
24
  from pytest import MonkeyPatch
25
25
 
26
- import chia._tests
27
26
  from chia._tests import ether
28
27
  from chia._tests.core.data_layer.util import ChiaRoot
29
28
  from chia._tests.core.node_height import node_height_at_least
@@ -46,16 +45,13 @@ from chia._tests.util.setup_nodes import (
46
45
  setup_simulators_and_wallets_service,
47
46
  setup_two_nodes,
48
47
  )
48
+ from chia._tests.util.spend_sim import CostLogger
49
49
  from chia._tests.util.time_out_assert import time_out_assert
50
- from chia.clvm.spend_sim import CostLogger
51
50
  from chia.consensus.constants import ConsensusConstants
52
- from chia.full_node.full_node import FullNode
53
51
  from chia.full_node.full_node_api import FullNodeAPI
54
52
  from chia.rpc.farmer_rpc_client import FarmerRpcClient
55
53
  from chia.rpc.harvester_rpc_client import HarvesterRpcClient
56
54
  from chia.rpc.wallet_rpc_client import WalletRpcClient
57
- from chia.seeder.crawler import Crawler
58
- from chia.seeder.crawler_api import CrawlerAPI
59
55
  from chia.seeder.dns_server import DNSServer
60
56
  from chia.server.server import ChiaServer
61
57
  from chia.server.start_service import Service
@@ -70,13 +66,10 @@ from chia.simulator.setup_services import (
70
66
  )
71
67
  from chia.simulator.start_simulator import SimulatorFullNodeService
72
68
  from chia.simulator.wallet_tools import WalletTool
73
- from chia.timelord.timelord import Timelord
74
- from chia.timelord.timelord_api import TimelordAPI
75
69
 
76
70
  # Set spawn after stdlib imports, but before other imports
77
71
  from chia.types.aliases import (
78
72
  CrawlerService,
79
- DataLayerService,
80
73
  FarmerService,
81
74
  FullNodeService,
82
75
  HarvesterService,
@@ -91,16 +84,21 @@ from chia.util.keychain import Keychain
91
84
  from chia.util.task_timing import main as task_instrumentation_main
92
85
  from chia.util.task_timing import start_task_instrumentation, stop_task_instrumentation
93
86
  from chia.wallet.wallet_node import WalletNode
94
- from chia.wallet.wallet_node_api import WalletNodeAPI
95
87
 
96
88
  multiprocessing.set_start_method("spawn")
97
89
 
90
+ from dataclasses import replace
98
91
  from pathlib import Path
99
92
 
93
+ from chia._tests.environments.wallet import WalletEnvironment, WalletState, WalletTestFramework
100
94
  from chia._tests.util.setup_nodes import setup_farmer_multi_harvester
95
+ from chia.rpc.full_node_rpc_client import FullNodeRpcClient
101
96
  from chia.simulator.block_tools import BlockTools, create_block_tools_async, test_constants
102
97
  from chia.simulator.keyring import TempKeyring
98
+ from chia.util.ints import uint128
103
99
  from chia.util.keyring_wrapper import KeyringWrapper
100
+ from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG, TXConfig
101
+ from chia.wallet.wallet_node import Balance
104
102
 
105
103
 
106
104
  @pytest.fixture(name="ether_setup", autouse=True)
@@ -255,7 +253,7 @@ async def empty_blockchain(latest_db_version, blockchain_constants):
255
253
  """
256
254
  from chia._tests.util.blockchain import create_blockchain
257
255
 
258
- async with create_blockchain(blockchain_constants, latest_db_version) as (bc1, db_wrapper):
256
+ async with create_blockchain(blockchain_constants, latest_db_version) as (bc1, _):
259
257
  yield bc1
260
258
 
261
259
 
@@ -550,12 +548,12 @@ def pytest_configure(config):
550
548
  globals()[time_out_assert_repeat_fixture.__name__] = time_out_assert_repeat_fixture
551
549
 
552
550
 
553
- def pytest_collection_modifyitems(session, config: pytest.Config, items: List[pytest.Function]):
551
+ def pytest_collection_modifyitems(session, config: pytest.Config, items: list[pytest.Function]):
554
552
  # https://github.com/pytest-dev/pytest/issues/3730#issuecomment-567142496
555
553
  removed = []
556
554
  kept = []
557
- all_error_lines: List[str] = []
558
- limit_consensus_modes_problems: List[str] = []
555
+ all_error_lines: list[str] = []
556
+ limit_consensus_modes_problems: list[str] = []
559
557
  for item in items:
560
558
  limit_consensus_modes_marker = item.get_closest_marker("limit_consensus_modes")
561
559
  if limit_consensus_modes_marker is not None:
@@ -583,7 +581,7 @@ def pytest_collection_modifyitems(session, config: pytest.Config, items: List[py
583
581
  all_error_lines.append("@pytest.mark.limit_consensus_modes used without consensus_mode:")
584
582
  all_error_lines.extend(f" {line}" for line in limit_consensus_modes_problems)
585
583
 
586
- benchmark_problems: List[str] = []
584
+ benchmark_problems: list[str] = []
587
585
  for item in items:
588
586
  existing_benchmark_mark = item.get_closest_marker("benchmark")
589
587
  if existing_benchmark_mark is not None:
@@ -619,7 +617,7 @@ async def two_nodes(db_version: int, self_hostname, blockchain_constants: Consen
619
617
  @pytest.fixture(scope="function")
620
618
  async def setup_two_nodes_fixture(
621
619
  db_version: int, blockchain_constants: ConsensusConstants
622
- ) -> AsyncIterator[Tuple[List[FullNodeSimulator], List[Tuple[WalletNode, ChiaServer]], BlockTools]]:
620
+ ) -> AsyncIterator[tuple[list[FullNodeSimulator], list[tuple[WalletNode, ChiaServer]], BlockTools]]:
623
621
  async with setup_simulators_and_wallets(2, 0, blockchain_constants, db_version=db_version) as new:
624
622
  yield make_old_setup_simulators_and_wallets(new=new)
625
623
 
@@ -638,13 +636,12 @@ async def five_nodes(db_version: int, self_hostname, blockchain_constants):
638
636
 
639
637
  @pytest.fixture(scope="function")
640
638
  async def wallet_nodes(blockchain_constants, consensus_mode):
641
- constants = blockchain_constants
642
639
  async with setup_simulators_and_wallets(
643
640
  2,
644
641
  1,
645
642
  blockchain_constants.replace(MEMPOOL_BLOCK_BUFFER=1, MAX_BLOCK_COST_CLVM=400000000),
646
643
  ) as new:
647
- (nodes, wallets, bt) = make_old_setup_simulators_and_wallets(new=new)
644
+ (nodes, _wallets, bt) = make_old_setup_simulators_and_wallets(new=new)
648
645
  full_node_1 = nodes[0]
649
646
  full_node_2 = nodes[1]
650
647
  server_1 = full_node_1.full_node.server
@@ -681,7 +678,7 @@ async def wallet_node_100_pk(blockchain_constants: ConsensusConstants):
681
678
  @pytest.fixture(scope="function")
682
679
  async def simulator_and_wallet(
683
680
  blockchain_constants: ConsensusConstants,
684
- ) -> AsyncIterator[Tuple[List[FullNodeSimulator], List[Tuple[WalletNode, ChiaServer]], BlockTools]]:
681
+ ) -> AsyncIterator[tuple[list[FullNodeSimulator], list[tuple[WalletNode, ChiaServer]], BlockTools]]:
685
682
  async with setup_simulators_and_wallets(1, 1, blockchain_constants) as new:
686
683
  yield make_old_setup_simulators_and_wallets(new=new)
687
684
 
@@ -698,7 +695,7 @@ async def two_wallet_nodes(request, blockchain_constants: ConsensusConstants):
698
695
  @pytest.fixture(scope="function")
699
696
  async def two_wallet_nodes_services(
700
697
  blockchain_constants: ConsensusConstants,
701
- ) -> AsyncIterator[Tuple[List[SimulatorFullNodeService], List[WalletService], BlockTools]]:
698
+ ) -> AsyncIterator[tuple[list[SimulatorFullNodeService], list[WalletService], BlockTools]]:
702
699
  async with setup_simulators_and_wallets_service(1, 2, blockchain_constants) as _:
703
700
  yield _
704
701
 
@@ -764,7 +761,7 @@ async def wallet_nodes_perf(blockchain_constants: ConsensusConstants):
764
761
  async with setup_simulators_and_wallets(
765
762
  1, 1, blockchain_constants, config_overrides={"MEMPOOL_BLOCK_BUFFER": 1, "MAX_BLOCK_COST_CLVM": 11000000000}
766
763
  ) as new:
767
- (nodes, wallets, bt) = make_old_setup_simulators_and_wallets(new=new)
764
+ (nodes, _wallets, bt) = make_old_setup_simulators_and_wallets(new=new)
768
765
  full_node_1 = nodes[0]
769
766
  server_1 = full_node_1.full_node.server
770
767
  wallet_a = bt.get_pool_wallet_tool()
@@ -781,7 +778,7 @@ async def three_nodes_two_wallets(blockchain_constants: ConsensusConstants):
781
778
  @pytest.fixture(scope="function")
782
779
  async def one_node(
783
780
  blockchain_constants: ConsensusConstants,
784
- ) -> AsyncIterator[Tuple[List[Service], List[FullNodeSimulator], BlockTools]]:
781
+ ) -> AsyncIterator[tuple[list[Service], list[FullNodeSimulator], BlockTools]]:
785
782
  async with setup_simulators_and_wallets_service(1, 0, blockchain_constants) as _:
786
783
  yield _
787
784
 
@@ -789,7 +786,7 @@ async def one_node(
789
786
  @pytest.fixture(scope="function")
790
787
  async def one_node_one_block(
791
788
  blockchain_constants: ConsensusConstants,
792
- ) -> AsyncIterator[Tuple[Union[FullNodeAPI, FullNodeSimulator], ChiaServer, BlockTools]]:
789
+ ) -> AsyncIterator[tuple[Union[FullNodeAPI, FullNodeSimulator], ChiaServer, BlockTools]]:
793
790
  async with setup_simulators_and_wallets(1, 0, blockchain_constants) as new:
794
791
  (nodes, _, bt) = make_old_setup_simulators_and_wallets(new=new)
795
792
  full_node_1 = nodes[0]
@@ -849,7 +846,7 @@ async def farmer_one_harvester_simulator_wallet(
849
846
  tmp_path: Path,
850
847
  blockchain_constants: ConsensusConstants,
851
848
  ) -> AsyncIterator[
852
- Tuple[
849
+ tuple[
853
850
  HarvesterService,
854
851
  FarmerService,
855
852
  SimulatorFullNodeService,
@@ -866,7 +863,7 @@ async def farmer_one_harvester_simulator_wallet(
866
863
  yield harvester_services[0], farmer_service, nodes[0], wallets[0], bt
867
864
 
868
865
 
869
- FarmerOneHarvester = Tuple[List[HarvesterService], FarmerService, BlockTools]
866
+ FarmerOneHarvester = tuple[list[HarvesterService], FarmerService, BlockTools]
870
867
 
871
868
 
872
869
  @pytest.fixture(scope="function")
@@ -878,7 +875,7 @@ async def farmer_one_harvester(tmp_path: Path, get_b_tools: BlockTools) -> Async
878
875
  @pytest.fixture(scope="function")
879
876
  async def farmer_one_harvester_not_started(
880
877
  tmp_path: Path, get_b_tools: BlockTools
881
- ) -> AsyncIterator[Tuple[List[Service], Service]]:
878
+ ) -> AsyncIterator[tuple[list[Service], Service]]:
882
879
  async with setup_farmer_multi_harvester(get_b_tools, 1, tmp_path, get_b_tools.constants, start_services=False) as _:
883
880
  yield _
884
881
 
@@ -886,7 +883,7 @@ async def farmer_one_harvester_not_started(
886
883
  @pytest.fixture(scope="function")
887
884
  async def farmer_two_harvester_not_started(
888
885
  tmp_path: Path, get_b_tools: BlockTools
889
- ) -> AsyncIterator[Tuple[List[Service], Service]]:
886
+ ) -> AsyncIterator[tuple[list[Service], Service]]:
890
887
  async with setup_farmer_multi_harvester(get_b_tools, 2, tmp_path, get_b_tools.constants, start_services=False) as _:
891
888
  yield _
892
889
 
@@ -894,7 +891,7 @@ async def farmer_two_harvester_not_started(
894
891
  @pytest.fixture(scope="function")
895
892
  async def farmer_three_harvester_not_started(
896
893
  tmp_path: Path, get_b_tools: BlockTools
897
- ) -> AsyncIterator[Tuple[List[Service], Service]]:
894
+ ) -> AsyncIterator[tuple[list[Service], Service]]:
898
895
  async with setup_farmer_multi_harvester(get_b_tools, 3, tmp_path, get_b_tools.constants, start_services=False) as _:
899
896
  yield _
900
897
 
@@ -934,7 +931,7 @@ async def get_b_tools(get_temp_keyring):
934
931
  @pytest.fixture(scope="function")
935
932
  async def daemon_connection_and_temp_keychain(
936
933
  get_b_tools: BlockTools,
937
- ) -> AsyncIterator[Tuple[aiohttp.ClientWebSocketResponse, Keychain]]:
934
+ ) -> AsyncIterator[tuple[aiohttp.ClientWebSocketResponse, Keychain]]:
938
935
  async with setup_daemon(btools=get_b_tools) as daemon:
939
936
  keychain = daemon.keychain_server._default_keychain
940
937
  async with aiohttp.ClientSession() as session:
@@ -1128,13 +1125,13 @@ def root_path_populated_with_config(tmp_chia_root) -> Path:
1128
1125
 
1129
1126
 
1130
1127
  @pytest.fixture(scope="function")
1131
- def config(root_path_populated_with_config: Path) -> Dict[str, Any]:
1128
+ def config(root_path_populated_with_config: Path) -> dict[str, Any]:
1132
1129
  with lock_and_load_config(root_path_populated_with_config, "config.yaml") as config:
1133
1130
  return config
1134
1131
 
1135
1132
 
1136
1133
  @pytest.fixture(scope="function")
1137
- def config_with_address_prefix(root_path_populated_with_config: Path, prefix: str) -> Dict[str, Any]:
1134
+ def config_with_address_prefix(root_path_populated_with_config: Path, prefix: str) -> dict[str, Any]:
1138
1135
  with lock_and_load_config(root_path_populated_with_config, "config.yaml") as config:
1139
1136
  if prefix is not None:
1140
1137
  config["network_overrides"]["config"][config["selected_network"]]["address_prefix"] = prefix
@@ -1174,12 +1171,12 @@ async def simulation(bt, get_b_tools):
1174
1171
  yield full_system, get_b_tools
1175
1172
 
1176
1173
 
1177
- HarvesterFarmerEnvironment = Tuple[FarmerService, FarmerRpcClient, HarvesterService, HarvesterRpcClient, BlockTools]
1174
+ HarvesterFarmerEnvironment = tuple[FarmerService, FarmerRpcClient, HarvesterService, HarvesterRpcClient, BlockTools]
1178
1175
 
1179
1176
 
1180
1177
  @pytest.fixture(scope="function")
1181
1178
  async def harvester_farmer_environment(
1182
- farmer_one_harvester: Tuple[List[HarvesterService], FarmerService, BlockTools],
1179
+ farmer_one_harvester: tuple[list[HarvesterService], FarmerService, BlockTools],
1183
1180
  self_hostname: str,
1184
1181
  ) -> AsyncIterator[HarvesterFarmerEnvironment]:
1185
1182
  harvesters, farmer_service, bt = farmer_one_harvester
@@ -1229,7 +1226,7 @@ def populated_temp_file_keyring_fixture() -> Iterator[TempKeyring]:
1229
1226
  async def farmer_harvester_2_simulators_zero_bits_plot_filter(
1230
1227
  tmp_path: Path, get_temp_keyring: Keychain
1231
1228
  ) -> AsyncIterator[
1232
- Tuple[
1229
+ tuple[
1233
1230
  FarmerService,
1234
1231
  HarvesterService,
1235
1232
  Union[FullNodeService, SimulatorFullNodeService],
@@ -1248,7 +1245,7 @@ async def farmer_harvester_2_simulators_zero_bits_plot_filter(
1248
1245
  keychain=get_temp_keyring,
1249
1246
  )
1250
1247
 
1251
- config_overrides: Dict[str, int] = {"full_node.max_sync_wait": 0}
1248
+ config_overrides: dict[str, int] = {"full_node.max_sync_wait": 0}
1252
1249
 
1253
1250
  bts = [
1254
1251
  await create_block_tools_async(
@@ -1262,7 +1259,7 @@ async def farmer_harvester_2_simulators_zero_bits_plot_filter(
1262
1259
  for _ in range(2)
1263
1260
  ]
1264
1261
 
1265
- simulators: List[SimulatorFullNodeService] = [
1262
+ simulators: list[SimulatorFullNodeService] = [
1266
1263
  await async_exit_stack.enter_async_context(
1267
1264
  # Passing simulator=True gets us this type guaranteed
1268
1265
  setup_full_node( # type: ignore[arg-type]
@@ -1302,3 +1299,121 @@ async def recording_web_server_fixture(self_hostname: str) -> AsyncIterator[Reco
1302
1299
  )
1303
1300
  def use_delta_sync(request: SubRequest):
1304
1301
  return request.param
1302
+
1303
+
1304
+ # originally from _tests/wallet/conftest.py
1305
+ @pytest.fixture(scope="function", params=[True, False])
1306
+ def trusted_full_node(request: Any) -> bool:
1307
+ trusted: bool = request.param
1308
+ return trusted
1309
+
1310
+
1311
+ @pytest.fixture(scope="function", params=[True, False])
1312
+ def tx_config(request: Any) -> TXConfig:
1313
+ return replace(DEFAULT_TX_CONFIG, reuse_puzhash=request.param)
1314
+
1315
+
1316
+ # This fixture automatically creates 4 parametrized tests trusted/untrusted x reuse/new derivations
1317
+ # These parameterizations can be skipped by manually specifying "trusted" or "reuse puzhash" to the fixture
1318
+ @pytest.fixture(scope="function")
1319
+ async def wallet_environments(
1320
+ trusted_full_node: bool,
1321
+ tx_config: TXConfig,
1322
+ blockchain_constants: ConsensusConstants,
1323
+ request: pytest.FixtureRequest,
1324
+ ) -> AsyncIterator[WalletTestFramework]:
1325
+ if "trusted" in request.param:
1326
+ if request.param["trusted"] != trusted_full_node:
1327
+ pytest.skip("Skipping not specified trusted mode")
1328
+ if "reuse_puzhash" in request.param:
1329
+ if request.param["reuse_puzhash"] != tx_config.reuse_puzhash:
1330
+ pytest.skip("Skipping not specified reuse_puzhash mode")
1331
+ assert len(request.param["blocks_needed"]) == request.param["num_environments"]
1332
+ if "config_overrides" in request.param:
1333
+ config_overrides: dict[str, Any] = request.param["config_overrides"]
1334
+ else: # pragma: no cover
1335
+ config_overrides = {}
1336
+ async with setup_simulators_and_wallets_service(
1337
+ 1,
1338
+ request.param["num_environments"],
1339
+ blockchain_constants,
1340
+ initial_num_public_keys=config_overrides.get("initial_num_public_keys", 5),
1341
+ ) as wallet_nodes_services:
1342
+ full_node, wallet_services, bt = wallet_nodes_services
1343
+
1344
+ full_node[0]._api.full_node.config = {**full_node[0]._api.full_node.config, **config_overrides}
1345
+
1346
+ wallet_rpc_clients: list[WalletRpcClient] = []
1347
+ async with AsyncExitStack() as astack:
1348
+ for service in wallet_services:
1349
+ service._node.config = {
1350
+ **service._node.config,
1351
+ "trusted_peers": (
1352
+ {full_node[0]._api.server.node_id.hex(): full_node[0]._api.server.node_id.hex()}
1353
+ if trusted_full_node
1354
+ else {}
1355
+ ),
1356
+ **config_overrides,
1357
+ }
1358
+ service._node.wallet_state_manager.config = service._node.config
1359
+ # Shorten the 10 seconds default value
1360
+ service._node.coin_state_retry_seconds = 2
1361
+ await service._node.server.start_client(
1362
+ PeerInfo(bt.config["self_hostname"], full_node[0]._api.full_node.server.get_port()), None
1363
+ )
1364
+ wallet_rpc_clients.append(
1365
+ await astack.enter_async_context(
1366
+ WalletRpcClient.create_as_context(
1367
+ bt.config["self_hostname"],
1368
+ # Semantics guarantee us a non-None value here
1369
+ service.rpc_server.listen_port, # type: ignore[union-attr]
1370
+ service.root_path,
1371
+ service.config,
1372
+ )
1373
+ )
1374
+ )
1375
+
1376
+ wallet_states: list[WalletState] = []
1377
+ for service, blocks_needed in zip(wallet_services, request.param["blocks_needed"]):
1378
+ if blocks_needed > 0:
1379
+ await full_node[0]._api.farm_blocks_to_wallet(
1380
+ count=blocks_needed, wallet=service._node.wallet_state_manager.main_wallet
1381
+ )
1382
+ await full_node[0]._api.wait_for_wallet_synced(wallet_node=service._node, timeout=20)
1383
+ wallet_states.append(
1384
+ WalletState(
1385
+ Balance(
1386
+ confirmed_wallet_balance=uint128(2_000_000_000_000 * blocks_needed),
1387
+ unconfirmed_wallet_balance=uint128(2_000_000_000_000 * blocks_needed),
1388
+ spendable_balance=uint128(2_000_000_000_000 * blocks_needed),
1389
+ pending_change=uint64(0),
1390
+ max_send_amount=uint128(2_000_000_000_000 * blocks_needed),
1391
+ unspent_coin_count=uint32(2 * blocks_needed),
1392
+ pending_coin_removal_count=uint32(0),
1393
+ ),
1394
+ )
1395
+ )
1396
+
1397
+ assert full_node[0].rpc_server is not None
1398
+ client_node = await astack.enter_async_context(
1399
+ FullNodeRpcClient.create_as_context(
1400
+ bt.config["self_hostname"],
1401
+ full_node[0].rpc_server.listen_port,
1402
+ full_node[0].root_path,
1403
+ full_node[0].config,
1404
+ )
1405
+ )
1406
+ yield WalletTestFramework(
1407
+ full_node[0]._api,
1408
+ client_node,
1409
+ trusted_full_node,
1410
+ [
1411
+ WalletEnvironment(
1412
+ service=service,
1413
+ rpc_client=rpc_client,
1414
+ wallet_states={uint32(1): wallet_state},
1415
+ )
1416
+ for service, rpc_client, wallet_state in zip(wallet_services, wallet_rpc_clients, wallet_states)
1417
+ ],
1418
+ tx_config,
1419
+ )
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
  import asyncio
4
4
  import logging
5
5
  from pathlib import Path
6
- from typing import List, Set, Tuple
7
6
 
8
7
  import aiohttp
9
8
  from cryptography import x509
@@ -11,6 +10,7 @@ from cryptography.hazmat.backends import default_backend
11
10
  from cryptography.hazmat.primitives import hashes, serialization
12
11
 
13
12
  from chia._tests.util.time_out_assert import time_out_assert
13
+ from chia.apis import ApiProtocolRegistry
14
14
  from chia.protocols.shared_protocol import default_capabilities
15
15
  from chia.server.outbound_message import NodeType
16
16
  from chia.server.server import ChiaServer, ssl_context_for_client
@@ -44,8 +44,8 @@ async def add_dummy_connection(
44
44
  dummy_port: int,
45
45
  type: NodeType = NodeType.FULL_NODE,
46
46
  *,
47
- additional_capabilities: List[Tuple[uint16, str]] = [],
48
- ) -> Tuple[asyncio.Queue, bytes32]:
47
+ additional_capabilities: list[tuple[uint16, str]] = [],
48
+ ) -> tuple[asyncio.Queue, bytes32]:
49
49
  wsc, peer_id = await add_dummy_connection_wsc(
50
50
  server, self_hostname, dummy_port, type, additional_capabilities=additional_capabilities
51
51
  )
@@ -58,15 +58,15 @@ async def add_dummy_connection_wsc(
58
58
  self_hostname: str,
59
59
  dummy_port: int,
60
60
  type: NodeType = NodeType.FULL_NODE,
61
- additional_capabilities: List[Tuple[uint16, str]] = [],
62
- ) -> Tuple[WSChiaConnection, bytes32]:
61
+ additional_capabilities: list[tuple[uint16, str]] = [],
62
+ ) -> tuple[WSChiaConnection, bytes32]:
63
63
  timeout = aiohttp.ClientTimeout(total=10)
64
64
  session = aiohttp.ClientSession(timeout=timeout)
65
65
  config = load_config(server.root_path, "config.yaml")
66
66
 
67
67
  ca_crt_path: Path
68
68
  ca_key_path: Path
69
- authenticated_client_types: Set[NodeType] = {NodeType.HARVESTER}
69
+ authenticated_client_types: set[NodeType] = {NodeType.HARVESTER}
70
70
  if type in authenticated_client_types:
71
71
  private_ca_crt_path, private_ca_key_path = private_ssl_ca_paths(server.root_path, config)
72
72
  ca_crt_path = private_ca_crt_path
@@ -98,6 +98,7 @@ async def add_dummy_connection_wsc(
98
98
  100,
99
99
  30,
100
100
  local_capabilities_for_handshake=default_capabilities[type] + additional_capabilities,
101
+ class_for_type=ApiProtocolRegistry,
101
102
  )
102
103
  await wsc.perform_handshake(server._network_id, dummy_port, type)
103
104
  if wsc.incoming_message_task is not None:
@@ -342,7 +342,7 @@ def test_prepare_submission(
342
342
  assert output in result.output
343
343
 
344
344
  if exit_code == 0:
345
- submission_file = list(beta_path.rglob("*.zip"))[0]
345
+ submission_file = next(iter(beta_path.rglob("*.zip")))
346
346
  assert submission_file.name.startswith(f"submission_{choice - 1}")
347
347
  with zipfile.ZipFile(submission_file) as zip_file:
348
348
  all_files = [Path(info.filename) for info in zip_file.filelist]
@@ -378,5 +378,5 @@ def test_beta_status(root_path_populated_with_config: Path, enabled: bool, path:
378
378
 
379
379
  assert result.exit_code == 0
380
380
  assert f"enabled: {enabled}" in result.output
381
- assert f"path: {str(path)}" in result.output
382
- assert f"metrics log interval: {str(metrics_log_interval_default)}" in result.output
381
+ assert f"path: {path!s}" in result.output
382
+ assert f"metrics log interval: {metrics_log_interval_default!s}" in result.output
@@ -4,7 +4,7 @@ import json
4
4
  import os
5
5
  import re
6
6
  from pathlib import Path
7
- from typing import Dict, List, Optional
7
+ from typing import Optional
8
8
 
9
9
  import pytest
10
10
  from click.testing import CliRunner, Result
@@ -105,7 +105,7 @@ class TestKeysCommands:
105
105
  assert len(address_matches) > 1
106
106
  address = address_matches[0]
107
107
 
108
- config: Dict = load_config(tmp_path, "config.yaml")
108
+ config: dict = load_config(tmp_path, "config.yaml")
109
109
  assert config["farmer"]["xch_target_address"] == address
110
110
  assert config["pool"]["xch_target_address"] == address
111
111
 
@@ -153,7 +153,7 @@ class TestKeysCommands:
153
153
  assert len(address_matches) > 1
154
154
  address = address_matches[0]
155
155
 
156
- existing_config: Dict = load_config(tmp_path, "config.yaml")
156
+ existing_config: dict = load_config(tmp_path, "config.yaml")
157
157
  assert existing_config["farmer"]["xch_target_address"] == address
158
158
  assert existing_config["pool"]["xch_target_address"] == address
159
159
 
@@ -177,7 +177,7 @@ class TestKeysCommands:
177
177
  assert len(keychain.get_all_private_keys()) == 2
178
178
 
179
179
  # Verify that the config's xch_target_address entries have not changed
180
- config: Dict = load_config(tmp_path, "config.yaml")
180
+ config: dict = load_config(tmp_path, "config.yaml")
181
181
  assert config["farmer"]["xch_target_address"] == existing_config["farmer"]["xch_target_address"]
182
182
  assert config["pool"]["xch_target_address"] == existing_config["pool"]["xch_target_address"]
183
183
 
@@ -200,7 +200,7 @@ class TestKeysCommands:
200
200
  ],
201
201
  )
202
202
  def test_generate_and_add_label_parameter(
203
- self, cmd_params: List[str], label: Optional[str], input_str: Optional[str], tmp_path, empty_keyring
203
+ self, cmd_params: list[str], label: Optional[str], input_str: Optional[str], tmp_path, empty_keyring
204
204
  ):
205
205
  keychain = empty_keyring
206
206
  keys_root_path = keychain.keyring_wrapper.keys_root_path
@@ -1322,7 +1322,7 @@ class TestKeysCommands:
1322
1322
  assert result.exit_code == 0
1323
1323
  assert (
1324
1324
  result.output.find(
1325
- "Wallet address 9 (m/12381/8444/2/9): " "xch1p33y7kv48u7l68m490mr8levl6nkyxm3x8tfcnnec555egxzd3gs829wkl"
1325
+ "Wallet address 9 (m/12381/8444/2/9): xch1p33y7kv48u7l68m490mr8levl6nkyxm3x8tfcnnec555egxzd3gs829wkl"
1326
1326
  )
1327
1327
  != -1
1328
1328
  )
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Dict, Optional, Tuple
3
+ from typing import Any, Optional
4
4
 
5
5
  import pytest
6
6
 
@@ -12,14 +12,14 @@ TEST_DUCKSAUCE_ASSET_ID = "10000000000000000000000000000000000000000000000000000
12
12
  TEST_CRUNCHBERRIES_ASSET_ID = "1000000000000000000000000000000000000000000000000000000000000002"
13
13
  TEST_UNICORNTEARS_ASSET_ID = "1000000000000000000000000000000000000000000000000000000000000003"
14
14
 
15
- TEST_ASSET_ID_NAME_MAPPING: Dict[bytes32, Tuple[uint32, str]] = {
15
+ TEST_ASSET_ID_NAME_MAPPING: dict[bytes32, tuple[uint32, str]] = {
16
16
  bytes32.from_hexstr(TEST_DUCKSAUCE_ASSET_ID): (uint32(2), "DuckSauce"),
17
17
  bytes32.from_hexstr(TEST_CRUNCHBERRIES_ASSET_ID): (uint32(3), "CrunchBerries"),
18
18
  bytes32.from_hexstr(TEST_UNICORNTEARS_ASSET_ID): (uint32(4), "UnicornTears"),
19
19
  }
20
20
 
21
21
 
22
- async def cat_name_resolver(asset_id: bytes32) -> Optional[Tuple[Optional[uint32], str]]:
22
+ async def cat_name_resolver(asset_id: bytes32) -> Optional[tuple[Optional[uint32], str]]:
23
23
  return TEST_ASSET_ID_NAME_MAPPING.get(asset_id)
24
24
 
25
25
 
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import List
4
-
5
3
  import pytest
6
4
 
7
5
  from chia._tests.core.make_block_generator import make_block_generator
@@ -15,9 +13,9 @@ from chia.util.ints import uint32, uint64
15
13
 
16
14
  @pytest.mark.parametrize("add_amount", [[0], [1, 2, 3], []])
17
15
  @pytest.mark.parametrize("rem_amount", [[0], [1, 2, 3], []])
18
- def test_compute_block_fee(add_amount: List[int], rem_amount: List[int]) -> None:
19
- additions: List[Coin] = [Coin(bytes32.random(), bytes32.random(), uint64(amt)) for amt in add_amount]
20
- removals: List[Coin] = [Coin(bytes32.random(), bytes32.random(), uint64(amt)) for amt in rem_amount]
16
+ def test_compute_block_fee(add_amount: list[int], rem_amount: list[int]) -> None:
17
+ additions: list[Coin] = [Coin(bytes32.random(), bytes32.random(), uint64(amt)) for amt in add_amount]
18
+ removals: list[Coin] = [Coin(bytes32.random(), bytes32.random(), uint64(amt)) for amt in rem_amount]
21
19
 
22
20
  # the fee is the left-overs from the removals (spent) coins after deducting
23
21
  # the newly created coins (additions)
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import List
4
-
5
3
  import pytest
6
4
 
7
5
  from chia.types.blockchain_format.coin import Coin
@@ -65,7 +63,7 @@ def test_serialization():
65
63
  (0x7FFFFFFFFFFFFFFF, [0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]),
66
64
  ],
67
65
  )
68
- def test_name(amount: int, clvm: List[int]) -> None:
66
+ def test_name(amount: int, clvm: list[int]) -> None:
69
67
  H1 = bytes32(b"a" * 32)
70
68
  H2 = bytes32(b"b" * 32)
71
69
 
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  import random
4
4
  import unittest
5
- from typing import List, Tuple
6
5
 
7
6
  import pytest
8
7
  from chia_rs import G2Element
@@ -36,9 +35,9 @@ def rand_hash(rng: random.Random) -> bytes32:
36
35
  return bytes32(ret)
37
36
 
38
37
 
39
- def create_spends(num: int) -> Tuple[List[CoinSpend], List[Coin]]:
40
- spends: List[CoinSpend] = []
41
- create_coin: List[Coin] = []
38
+ def create_spends(num: int) -> tuple[list[CoinSpend], list[Coin]]:
39
+ spends: list[CoinSpend] = []
40
+ create_coin: list[Coin] = []
42
41
  rng = random.Random()
43
42
 
44
43
  puzzle = Program.to(1)