chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass, field
4
- from typing import Any, Dict, Optional, Union
4
+ from typing import Any, Optional, Union
5
5
 
6
6
  from chia.types.blockchain_format.coin import Coin
7
7
  from chia.types.blockchain_format.sized_bytes import bytes32
@@ -56,7 +56,7 @@ class WalletCoinRecord:
56
56
  def to_coin_record(self, timestamp: uint64) -> CoinRecord:
57
57
  return CoinRecord(self.coin, self.confirmed_block_height, self.spent_block_height, self.coinbase, timestamp)
58
58
 
59
- def to_json_dict_parsed_metadata(self) -> Dict[str, Any]:
59
+ def to_json_dict_parsed_metadata(self) -> dict[str, Any]:
60
60
  # TODO: Merge wallet_type and wallet_id into `wallet_identifier`, make `spent` an attribute based
61
61
  # on `spent_height` make `WalletCoinRecord` streamable and use Streamable.to_json_dict as base here if we have
62
62
  # streamable enums.
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import sqlite3
4
4
  from dataclasses import dataclass
5
5
  from enum import IntEnum
6
- from typing import Dict, List, Optional, Set
6
+ from typing import Optional
7
7
 
8
8
  from chia.types.blockchain_format.coin import Coin
9
9
  from chia.types.blockchain_format.sized_bytes import bytes32
@@ -47,8 +47,8 @@ class GetCoinRecords(Streamable):
47
47
 
48
48
  @dataclass(frozen=True)
49
49
  class GetCoinRecordsResult:
50
- records: List[WalletCoinRecord]
51
- coin_id_to_record: Dict[bytes32, WalletCoinRecord]
50
+ records: list[WalletCoinRecord]
51
+ coin_id_to_record: dict[bytes32, WalletCoinRecord]
52
52
  total_count: Optional[uint32]
53
53
 
54
54
 
@@ -252,8 +252,8 @@ class WalletCoinStore:
252
252
  total_count = uint32(row[0])
253
253
  self.total_count_cache.put(cache_hash, total_count)
254
254
 
255
- records: List[WalletCoinRecord] = []
256
- coin_id_to_record: Dict[bytes32, WalletCoinRecord] = {}
255
+ records: list[WalletCoinRecord] = []
256
+ coin_id_to_record: dict[bytes32, WalletCoinRecord] = {}
257
257
  for row in rows:
258
258
  records.append(self.coin_record_from_row(row))
259
259
  coin_id_to_record[bytes32.fromhex(row[0])] = records[-1]
@@ -266,7 +266,7 @@ class WalletCoinStore:
266
266
 
267
267
  async def get_coin_records_between(
268
268
  self, wallet_id: int, start: int, end: int, reverse: bool = False, coin_type: CoinType = CoinType.NORMAL
269
- ) -> List[WalletCoinRecord]:
269
+ ) -> list[WalletCoinRecord]:
270
270
  """Return a list of coins between start and end index. List is in reverse chronological order.
271
271
  start = 0 is most recent transaction
272
272
  """
@@ -293,7 +293,7 @@ class WalletCoinStore:
293
293
 
294
294
  async def get_unspent_coins_for_wallet(
295
295
  self, wallet_id: int, coin_type: CoinType = CoinType.NORMAL
296
- ) -> Set[WalletCoinRecord]:
296
+ ) -> set[WalletCoinRecord]:
297
297
  """Returns set of CoinRecords that have not been spent yet for a wallet."""
298
298
  async with self.db_wrapper.reader_no_transaction() as conn:
299
299
  rows = await conn.execute_fetchall(
@@ -302,7 +302,7 @@ class WalletCoinStore:
302
302
  )
303
303
  return {self.coin_record_from_row(row) for row in rows}
304
304
 
305
- async def get_all_unspent_coins(self, coin_type: CoinType = CoinType.NORMAL) -> Set[WalletCoinRecord]:
305
+ async def get_all_unspent_coins(self, coin_type: CoinType = CoinType.NORMAL) -> set[WalletCoinRecord]:
306
306
  """Returns set of CoinRecords that have not been spent yet for a wallet."""
307
307
  async with self.db_wrapper.reader_no_transaction() as conn:
308
308
  rows = await conn.execute_fetchall(
@@ -311,7 +311,7 @@ class WalletCoinStore:
311
311
  return {self.coin_record_from_row(row) for row in rows}
312
312
 
313
313
  # Checks DB and DiffStores for CoinRecords with puzzle_hash and returns them
314
- async def get_coin_records_by_puzzle_hash(self, puzzle_hash: bytes32) -> List[WalletCoinRecord]:
314
+ async def get_coin_records_by_puzzle_hash(self, puzzle_hash: bytes32) -> list[WalletCoinRecord]:
315
315
  """Returns a list of all coin records with the given puzzle hash"""
316
316
  async with self.db_wrapper.reader_no_transaction() as conn:
317
317
  rows = await conn.execute_fetchall("SELECT * from coin_record WHERE puzzle_hash=?", (puzzle_hash.hex(),))
@@ -319,7 +319,7 @@ class WalletCoinStore:
319
319
  return [self.coin_record_from_row(row) for row in rows]
320
320
 
321
321
  # Checks DB and DiffStores for CoinRecords with parent_coin_info and returns them
322
- async def get_coin_records_by_parent_id(self, parent_coin_info: bytes32) -> List[WalletCoinRecord]:
322
+ async def get_coin_records_by_parent_id(self, parent_coin_info: bytes32) -> list[WalletCoinRecord]:
323
323
  """Returns a list of all coin records with the given parent id"""
324
324
  async with self.db_wrapper.reader_no_transaction() as conn:
325
325
  rows = await conn.execute_fetchall(
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import List
5
4
 
6
5
  from chia.util.ints import uint8, uint32
7
6
  from chia.util.streamable import Streamable, streamable
@@ -33,4 +32,4 @@ class WalletInfoBackup(Streamable):
33
32
  Used for transforming list of WalletInfo objects into bytes.
34
33
  """
35
34
 
36
- wallet_list: List[WalletInfo]
35
+ wallet_list: list[WalletInfo]
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import List, Optional, Tuple
3
+ from typing import Optional
4
4
 
5
5
  from chia.protocols.wallet_protocol import CoinState
6
6
  from chia.types.blockchain_format.sized_bytes import bytes32
@@ -38,7 +38,7 @@ class WalletInterestedStore:
38
38
 
39
39
  return self
40
40
 
41
- async def get_interested_coin_ids(self) -> List[bytes32]:
41
+ async def get_interested_coin_ids(self) -> list[bytes32]:
42
42
  async with self.db_wrapper.writer_maybe_transaction() as conn:
43
43
  cursor = await conn.execute("SELECT coin_name FROM interested_coins")
44
44
  rows_hex = await cursor.fetchall()
@@ -54,7 +54,7 @@ class WalletInterestedStore:
54
54
  cursor = await conn.execute("DELETE FROM interested_coins WHERE coin_name=?", (coin_id.hex(),))
55
55
  await cursor.close()
56
56
 
57
- async def get_interested_puzzle_hashes(self) -> List[Tuple[bytes32, int]]:
57
+ async def get_interested_puzzle_hashes(self) -> list[tuple[bytes32, int]]:
58
58
  async with self.db_wrapper.reader_no_transaction() as conn:
59
59
  cursor = await conn.execute("SELECT puzzle_hash, wallet_id FROM interested_puzzle_hashes")
60
60
  rows_hex = await cursor.fetchall()
@@ -111,7 +111,7 @@ class WalletInterestedStore:
111
111
  )
112
112
  await cursor.close()
113
113
 
114
- async def get_unacknowledged_tokens(self) -> List:
114
+ async def get_unacknowledged_tokens(self) -> list:
115
115
  """
116
116
  Get a list of all unacknowledged CATs
117
117
  :return: A json style list of unacknowledged CATs
@@ -147,7 +147,7 @@ class WalletInterestedStore:
147
147
  )
148
148
  await cursor.close()
149
149
 
150
- async def get_unacknowledged_states_for_asset_id(self, asset_id: bytes32) -> List[Tuple[CoinState, uint32]]:
150
+ async def get_unacknowledged_states_for_asset_id(self, asset_id: bytes32) -> list[tuple[CoinState, uint32]]:
151
151
  """
152
152
  Return all states for a particular asset ID that were ignored
153
153
  :param asset_id: CAT asset ID
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import json
4
4
  import logging
5
5
  from sqlite3 import Row
6
- from typing import List, Optional, Type, TypeVar, Union
6
+ from typing import Optional, TypeVar, Union
7
7
 
8
8
  from chia.types.blockchain_format.coin import Coin
9
9
  from chia.types.blockchain_format.program import Program
@@ -41,7 +41,7 @@ class WalletNftStore:
41
41
  db_wrapper: DBWrapper2
42
42
 
43
43
  @classmethod
44
- async def create(cls: Type[_T_WalletNftStore], db_wrapper: DBWrapper2) -> _T_WalletNftStore:
44
+ async def create(cls: type[_T_WalletNftStore], db_wrapper: DBWrapper2) -> _T_WalletNftStore:
45
45
  self = cls()
46
46
  self.db_wrapper = db_wrapper
47
47
  async with self.db_wrapper.writer_maybe_transaction() as conn:
@@ -144,7 +144,7 @@ class WalletNftStore:
144
144
 
145
145
  async def count(self, wallet_id: Optional[uint32] = None, did_id: Optional[bytes32] = None) -> int:
146
146
  sql = "SELECT COUNT(nft_id) FROM users_nfts WHERE removed_height is NULL"
147
- params: List[Union[uint32, bytes32]] = []
147
+ params: list[Union[uint32, bytes32]] = []
148
148
  if wallet_id is not None:
149
149
  sql += " AND wallet_id=?"
150
150
  params.append(wallet_id)
@@ -159,7 +159,7 @@ class WalletNftStore:
159
159
 
160
160
  async def is_empty(self, wallet_id: Optional[uint32] = None) -> bool:
161
161
  sql = "SELECT 1 FROM users_nfts WHERE removed_height is NULL"
162
- params: List[Union[uint32, bytes32]] = []
162
+ params: list[Union[uint32, bytes32]] = []
163
163
  if wallet_id is not None:
164
164
  sql += " AND wallet_id=?"
165
165
  params.append(wallet_id)
@@ -176,7 +176,7 @@ class WalletNftStore:
176
176
  did_id: Optional[bytes32] = None,
177
177
  start_index: int = 0,
178
178
  count: int = 50,
179
- ) -> List[NFTCoinInfo]:
179
+ ) -> list[NFTCoinInfo]:
180
180
  try:
181
181
  start_index = int(start_index)
182
182
  except ValueError:
@@ -240,7 +240,7 @@ class WalletNftStore:
240
240
  async def get_nft_by_id(self, nft_id: bytes32, wallet_id: Optional[uint32] = None) -> Optional[NFTCoinInfo]:
241
241
  async with self.db_wrapper.reader_no_transaction() as conn:
242
242
  sql = f"SELECT {NFT_COIN_INFO_COLUMNS} from users_nfts WHERE removed_height is NULL and nft_id=?"
243
- params: List[Union[uint32, str]] = [nft_id.hex()]
243
+ params: list[Union[uint32, str]] = [nft_id.hex()]
244
244
  if wallet_id:
245
245
  sql += " and wallet_id=?"
246
246
  params.append(wallet_id)
@@ -9,22 +9,9 @@ import random
9
9
  import sys
10
10
  import time
11
11
  import traceback
12
+ from collections.abc import AsyncIterator
12
13
  from pathlib import Path
13
- from typing import (
14
- TYPE_CHECKING,
15
- Any,
16
- AsyncIterator,
17
- ClassVar,
18
- Dict,
19
- List,
20
- Literal,
21
- Optional,
22
- Set,
23
- Tuple,
24
- Union,
25
- cast,
26
- overload,
27
- )
14
+ from typing import TYPE_CHECKING, Any, ClassVar, Literal, Optional, Union, cast, overload
28
15
 
29
16
  import aiosqlite
30
17
  from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
@@ -68,6 +55,7 @@ from chia.util.keychain import Keychain
68
55
  from chia.util.path import path_from_root
69
56
  from chia.util.profiler import mem_profile_task, profile_task
70
57
  from chia.util.streamable import Streamable, streamable
58
+ from chia.util.task_referencer import create_referenced_task
71
59
  from chia.wallet.puzzles.clawback.metadata import AutoClaimSettings
72
60
  from chia.wallet.transaction_record import TransactionRecord
73
61
  from chia.wallet.util.new_peak_queue import NewPeakItem, NewPeakQueue, NewPeakQueueTypes
@@ -88,7 +76,7 @@ from chia.wallet.wallet_state_manager import WalletStateManager
88
76
  from chia.wallet.wallet_weight_proof_handler import WalletWeightProofHandler, get_wp_fork_point
89
77
 
90
78
 
91
- def get_wallet_db_path(root_path: Path, config: Dict[str, Any], key_fingerprint: str) -> Path:
79
+ def get_wallet_db_path(root_path: Path, config: dict[str, Any], key_fingerprint: str) -> Path:
92
80
  """
93
81
  Construct a path to the wallet db. Uses config values and the wallet key's fingerprint to
94
82
  determine the wallet db filename.
@@ -124,7 +112,7 @@ class WalletNode:
124
112
 
125
113
  _protocol_check: ClassVar[RpcServiceProtocol] = cast("WalletNode", None)
126
114
 
127
- config: Dict[str, Any]
115
+ config: dict[str, Any]
128
116
  root_path: Path
129
117
  constants: ConsensusConstants
130
118
  local_keychain: Optional[Keychain] = None
@@ -140,11 +128,11 @@ class WalletNode:
140
128
  logged_in_fingerprint: Optional[int] = None
141
129
  logged_in: bool = False
142
130
  _keychain_proxy: Optional[KeychainProxy] = None
143
- _balance_cache: Dict[int, Balance] = dataclasses.field(default_factory=dict)
131
+ _balance_cache: dict[int, Balance] = dataclasses.field(default_factory=dict)
144
132
  # Peers that we have long synced to
145
- synced_peers: Set[bytes32] = dataclasses.field(default_factory=set)
133
+ synced_peers: set[bytes32] = dataclasses.field(default_factory=set)
146
134
  wallet_peers: Optional[WalletPeers] = None
147
- peer_caches: Dict[bytes32, PeerRequestCache] = dataclasses.field(default_factory=dict)
135
+ peer_caches: dict[bytes32, PeerRequestCache] = dataclasses.field(default_factory=dict)
148
136
  validation_semaphore: Optional[asyncio.Semaphore] = None
149
137
  local_node_synced: bool = False
150
138
  LONG_SYNC_THRESHOLD: int = 300
@@ -158,7 +146,7 @@ class WalletNode:
158
146
  _process_new_subscriptions_task: Optional[asyncio.Task[None]] = None
159
147
  _retry_failed_states_task: Optional[asyncio.Task[None]] = None
160
148
  _secondary_peer_sync_task: Optional[asyncio.Task[None]] = None
161
- _tx_messages_in_progress: Dict[bytes32, List[bytes32]] = dataclasses.field(default_factory=dict)
149
+ _tx_messages_in_progress: dict[bytes32, list[bytes32]] = dataclasses.field(default_factory=dict)
162
150
 
163
151
  @contextlib.asynccontextmanager
164
152
  async def manage(self) -> AsyncIterator[None]:
@@ -205,7 +193,7 @@ class WalletNode:
205
193
 
206
194
  return self._new_peak_queue
207
195
 
208
- def get_connections(self, request_node_type: Optional[NodeType]) -> List[Dict[str, Any]]:
196
+ def get_connections(self, request_node_type: Optional[NodeType]) -> list[dict[str, Any]]:
209
197
  return default_get_connections(server=self.server, request_node_type=request_node_type)
210
198
 
211
199
  async def ensure_keychain_proxy(self) -> KeychainProxy:
@@ -306,7 +294,7 @@ class WalletNode:
306
294
  self.log.info("Disabled resync for wallet fingerprint: %s", fingerprint)
307
295
  save_config(self.root_path, "config.yaml", config)
308
296
 
309
- def set_auto_claim(self, auto_claim_config: AutoClaimSettings) -> Dict[str, Any]:
297
+ def set_auto_claim(self, auto_claim_config: AutoClaimSettings) -> dict[str, Any]:
310
298
  if auto_claim_config.batch_size < 1:
311
299
  auto_claim_config = dataclasses.replace(auto_claim_config, batch_size=uint16(50))
312
300
  auto_claim_config_json = auto_claim_config.to_json_dict()
@@ -356,7 +344,7 @@ class WalletNode:
356
344
  self.log.info("Resetting wallet sync data...")
357
345
  rows = list(await conn.execute_fetchall("SELECT name FROM sqlite_master WHERE type='table'"))
358
346
  names = {x[0] for x in rows}
359
- names = names - set(known_tables)
347
+ names -= set(known_tables)
360
348
  tables_to_drop = []
361
349
  for name in names:
362
350
  for ignore_name in ignore_tables:
@@ -439,10 +427,10 @@ class WalletNode:
439
427
  if sys.getprofile() is not None:
440
428
  self.log.warning("not enabling profiler, getprofile() is already set")
441
429
  else:
442
- asyncio.create_task(profile_task(self.root_path, "wallet", self.log))
430
+ create_referenced_task(profile_task(self.root_path, "wallet", self.log), known_unreferenced=True)
443
431
 
444
432
  if self.config.get("enable_memory_profiler", False):
445
- asyncio.create_task(mem_profile_task(self.root_path, "wallet", self.log))
433
+ create_referenced_task(mem_profile_task(self.root_path, "wallet", self.log), known_unreferenced=True)
446
434
 
447
435
  path: Path = get_wallet_db_path(self.root_path, self.config, str(fingerprint))
448
436
  path.parent.mkdir(parents=True, exist_ok=True)
@@ -468,8 +456,8 @@ class WalletNode:
468
456
  self.wallet_tx_resend_timeout_secs = self.config.get("tx_resend_timeout_secs", 60 * 60)
469
457
  self.wallet_state_manager.set_pending_callback(self._pending_tx_handler)
470
458
  self._shut_down = False
471
- self._process_new_subscriptions_task = asyncio.create_task(self._process_new_subscriptions())
472
- self._retry_failed_states_task = asyncio.create_task(self._retry_failed_states())
459
+ self._process_new_subscriptions_task = create_referenced_task(self._process_new_subscriptions())
460
+ self._retry_failed_states_task = create_referenced_task(self._retry_failed_states())
473
461
 
474
462
  self.sync_event = asyncio.Event()
475
463
  self.log_in(fingerprint)
@@ -530,7 +518,7 @@ class WalletNode:
530
518
  def _pending_tx_handler(self) -> None:
531
519
  if self._wallet_state_manager is None:
532
520
  return None
533
- asyncio.create_task(self._resend_queue())
521
+ create_referenced_task(self._resend_queue(), known_unreferenced=True)
534
522
 
535
523
  async def _resend_queue(self) -> None:
536
524
  if self._shut_down or self._server is None or self._wallet_state_manager is None:
@@ -554,17 +542,17 @@ class WalletNode:
554
542
  self._tx_messages_in_progress.setdefault(peer.peer_node_id, [])
555
543
  self._tx_messages_in_progress[peer.peer_node_id].append(msg_name)
556
544
 
557
- async def _messages_to_resend(self) -> List[Tuple[Message, Set[bytes32]]]:
545
+ async def _messages_to_resend(self) -> list[tuple[Message, set[bytes32]]]:
558
546
  if self._wallet_state_manager is None or self._shut_down:
559
547
  return []
560
- messages: List[Tuple[Message, Set[bytes32]]] = []
548
+ messages: list[tuple[Message, set[bytes32]]] = []
561
549
 
562
550
  current_time = int(time.time())
563
551
  retry_accepted_txs = False
564
552
  if self.last_wallet_tx_resend_time < current_time - self.wallet_tx_resend_timeout_secs:
565
553
  self.last_wallet_tx_resend_time = current_time
566
554
  retry_accepted_txs = True
567
- records: List[TransactionRecord] = await self.wallet_state_manager.tx_store.get_not_sent(
555
+ records: list[TransactionRecord] = await self.wallet_state_manager.tx_store.get_not_sent(
568
556
  include_accepted_txs=retry_accepted_txs
569
557
  )
570
558
 
@@ -626,15 +614,15 @@ class WalletNode:
626
614
  # Subscriptions are the highest priority, because we don't want to process any more peaks or
627
615
  # state updates until we are sure that we subscribed to everything that we need to. Otherwise,
628
616
  # we might not be able to process some state.
629
- coin_ids: List[bytes32] = item.data
617
+ coin_ids: list[bytes32] = item.data
630
618
  for peer in self.server.get_connections(NodeType.FULL_NODE):
631
- coin_states: List[CoinState] = await subscribe_to_coin_updates(coin_ids, peer, 0)
619
+ coin_states: list[CoinState] = await subscribe_to_coin_updates(coin_ids, peer, 0)
632
620
  if len(coin_states) > 0:
633
621
  async with self.wallet_state_manager.lock:
634
622
  await self.add_states_from_peer(coin_states, peer)
635
623
  elif item.item_type == NewPeakQueueTypes.PUZZLE_HASH_SUBSCRIPTION:
636
624
  self.log.debug("Pulled from queue: %s %s", item.item_type.name, item.data)
637
- puzzle_hashes: List[bytes32] = item.data
625
+ puzzle_hashes: list[bytes32] = item.data
638
626
  for peer in self.server.get_connections(NodeType.FULL_NODE):
639
627
  # Puzzle hash subscription
640
628
  coin_states = await subscribe_to_phs(puzzle_hashes, peer, 0)
@@ -731,7 +719,7 @@ class WalletNode:
731
719
  default_port,
732
720
  self.log,
733
721
  )
734
- asyncio.create_task(self.wallet_peers.start())
722
+ create_referenced_task(self.wallet_peers.start())
735
723
 
736
724
  async def on_disconnect(self, peer: WSChiaConnection) -> None:
737
725
  if self.is_trusted(peer):
@@ -839,7 +827,7 @@ class WalletNode:
839
827
  # Things, so we don't have to reprocess these later. There can be many things in ph_update_res.
840
828
  use_delta_sync = self.config.get("use_delta_sync", False)
841
829
  min_height_for_subscriptions = fork_height if use_delta_sync else 0
842
- already_checked_ph: Set[bytes32] = set()
830
+ already_checked_ph: set[bytes32] = set()
843
831
  while not self._shut_down:
844
832
  await self.wallet_state_manager.create_more_puzzle_hashes()
845
833
  all_puzzle_hashes = await self.get_puzzle_hashes_to_subscribe()
@@ -847,7 +835,7 @@ class WalletNode:
847
835
  if not_checked_puzzle_hashes == set():
848
836
  break
849
837
  for batch in to_batches(not_checked_puzzle_hashes, 1000):
850
- ph_update_res: List[CoinState] = await subscribe_to_phs(
838
+ ph_update_res: list[CoinState] = await subscribe_to_phs(
851
839
  batch.entries, full_node, min_height_for_subscriptions
852
840
  )
853
841
  ph_update_res = list(filter(is_new_state_update, ph_update_res))
@@ -860,14 +848,14 @@ class WalletNode:
860
848
 
861
849
  # The number of coin id updates are usually going to be significantly less than ph updates, so we can
862
850
  # sync from 0 every time.
863
- already_checked_coin_ids: Set[bytes32] = set()
851
+ already_checked_coin_ids: set[bytes32] = set()
864
852
  while not self._shut_down:
865
853
  all_coin_ids = await self.get_coin_ids_to_subscribe()
866
854
  not_checked_coin_ids = set(all_coin_ids) - already_checked_coin_ids
867
855
  if not_checked_coin_ids == set():
868
856
  break
869
857
  for batch in to_batches(not_checked_coin_ids, 1000):
870
- c_update_res: List[CoinState] = await subscribe_to_coin_updates(
858
+ c_update_res: list[CoinState] = await subscribe_to_coin_updates(
871
859
  batch.entries, full_node, min_height_for_subscriptions
872
860
  )
873
861
 
@@ -892,7 +880,7 @@ class WalletNode:
892
880
 
893
881
  async def add_states_from_peer(
894
882
  self,
895
- items_input: List[CoinState],
883
+ items_input: list[CoinState],
896
884
  peer: WSChiaConnection,
897
885
  fork_height: Optional[uint32] = None,
898
886
  height: Optional[uint32] = None,
@@ -932,7 +920,7 @@ class WalletNode:
932
920
  # Rollback race_cache not in clear_after_height to avoid applying rollbacks from new peak processing
933
921
  cache.rollback_race_cache(fork_height=fork_height)
934
922
 
935
- all_tasks: List[asyncio.Task[None]] = []
923
+ all_tasks: list[asyncio.Task[None]] = []
936
924
  target_concurrent_tasks: int = 30
937
925
 
938
926
  # Ensure the list is sorted
@@ -943,7 +931,7 @@ class WalletNode:
943
931
  if num_filtered > 0:
944
932
  self.log.info(f"Filtered {num_filtered} spam transactions")
945
933
 
946
- async def validate_and_add(inner_states: List[CoinState], inner_idx_start: int) -> None:
934
+ async def validate_and_add(inner_states: list[CoinState], inner_idx_start: int) -> None:
947
935
  try:
948
936
  assert self.validation_semaphore is not None
949
937
  async with self.validation_semaphore:
@@ -1012,7 +1000,7 @@ class WalletNode:
1012
1000
  self.log.info("Terminating receipt and validation due to shut down request")
1013
1001
  await asyncio.gather(*all_tasks)
1014
1002
  return False
1015
- all_tasks.append(asyncio.create_task(validate_and_add(batch.entries, idx)))
1003
+ all_tasks.append(create_referenced_task(validate_and_add(batch.entries, idx)))
1016
1004
  idx += len(batch.entries)
1017
1005
 
1018
1006
  still_connected = self._server is not None and peer.peer_node_id in self.server.all_connections
@@ -1046,12 +1034,12 @@ class WalletNode:
1046
1034
  """
1047
1035
  Get a full node, preferring synced & trusted > synced & untrusted > unsynced & trusted > unsynced & untrusted
1048
1036
  """
1049
- full_nodes: List[WSChiaConnection] = self.get_full_node_peers_in_order()
1037
+ full_nodes: list[WSChiaConnection] = self.get_full_node_peers_in_order()
1050
1038
  if len(full_nodes) == 0:
1051
1039
  raise ValueError("No peer connected")
1052
1040
  return full_nodes[0]
1053
1041
 
1054
- def get_full_node_peers_in_order(self) -> List[WSChiaConnection]:
1042
+ def get_full_node_peers_in_order(self) -> list[WSChiaConnection]:
1055
1043
  """
1056
1044
  Get all full nodes sorted:
1057
1045
  preferring synced & trusted > synced & untrusted > unsynced & trusted > unsynced & untrusted
@@ -1059,11 +1047,11 @@ class WalletNode:
1059
1047
  if self._server is None:
1060
1048
  return []
1061
1049
 
1062
- synced_and_trusted: List[WSChiaConnection] = []
1063
- synced: List[WSChiaConnection] = []
1064
- trusted: List[WSChiaConnection] = []
1065
- neither: List[WSChiaConnection] = []
1066
- all_nodes: List[WSChiaConnection] = self.server.get_connections(NodeType.FULL_NODE)
1050
+ synced_and_trusted: list[WSChiaConnection] = []
1051
+ synced: list[WSChiaConnection] = []
1052
+ trusted: list[WSChiaConnection] = []
1053
+ neither: list[WSChiaConnection] = []
1054
+ all_nodes: list[WSChiaConnection] = self.server.get_connections(NodeType.FULL_NODE)
1067
1055
  random.shuffle(all_nodes)
1068
1056
  for node in all_nodes:
1069
1057
  we_synced_to_it = node.peer_node_id in self.synced_peers
@@ -1092,7 +1080,7 @@ class WalletNode:
1092
1080
  block = cache.get_block(uint32(request_height))
1093
1081
  if block is None:
1094
1082
  self.log.debug(f"get_timestamp_for_height_from_peer cache miss for height {request_height}")
1095
- response: Optional[List[HeaderBlock]] = await request_header_blocks(
1083
+ response: Optional[list[HeaderBlock]] = await request_header_blocks(
1096
1084
  peer, uint32(request_height), uint32(request_height)
1097
1085
  )
1098
1086
  if response is not None and len(response) > 0:
@@ -1124,10 +1112,14 @@ class WalletNode:
1124
1112
  # When logging out of wallet
1125
1113
  self.log.debug("state manager is None (shutdown)")
1126
1114
  return
1127
- trusted: bool = self.is_trusted(peer)
1115
+
1128
1116
  peak_hb: Optional[HeaderBlock] = await self.wallet_state_manager.blockchain.get_peak_block()
1117
+ if peak_hb is not None and peak_hb.header_hash == new_peak.header_hash:
1118
+ self.log.debug("skip known peak.")
1119
+ return
1120
+
1129
1121
  if peak_hb is not None and new_peak.weight < peak_hb.weight:
1130
- # Discards old blocks, but accepts blocks that are equal in weight to peak
1122
+ # Discards old blocks, accept only heavier peaks blocks that are equal in weight to peak
1131
1123
  self.log.debug("skip block with lower weight.")
1132
1124
  return
1133
1125
 
@@ -1152,6 +1144,7 @@ class WalletNode:
1152
1144
  # dont disconnect from peer, this might be a reorg
1153
1145
  return
1154
1146
 
1147
+ trusted: bool = self.is_trusted(peer)
1155
1148
  latest_timestamp = await self.get_timestamp_for_height_from_peer(new_peak_hb.height, peer)
1156
1149
  if latest_timestamp is None or not self.is_timestamp_in_sync(latest_timestamp):
1157
1150
  if trusted:
@@ -1162,7 +1155,9 @@ class WalletNode:
1162
1155
  return
1163
1156
 
1164
1157
  if self.is_trusted(peer):
1165
- await self.new_peak_from_trusted(new_peak_hb, latest_timestamp, peer)
1158
+ await self.new_peak_from_trusted(
1159
+ new_peak_hb, latest_timestamp, peer, new_peak.fork_point_with_previous_peak
1160
+ )
1166
1161
  else:
1167
1162
  if not await self.new_peak_from_untrusted(new_peak_hb, peer):
1168
1163
  return
@@ -1179,15 +1174,16 @@ class WalletNode:
1179
1174
  await self.wallet_state_manager.blockchain.set_finished_sync_up_to(new_peak.height)
1180
1175
 
1181
1176
  async def new_peak_from_trusted(
1182
- self, new_peak_hb: HeaderBlock, latest_timestamp: uint64, peer: WSChiaConnection
1177
+ self, new_peak_hb: HeaderBlock, latest_timestamp: uint64, peer: WSChiaConnection, fork_point: uint32
1183
1178
  ) -> None:
1184
1179
  async with self.wallet_state_manager.set_sync_mode(new_peak_hb.height) as current_height:
1185
1180
  await self.wallet_state_manager.blockchain.set_peak_block(new_peak_hb, latest_timestamp)
1186
- # Sync to trusted node if we haven't done so yet. As long as we have synced once (and not
1187
- # disconnected), we assume that the full node will continue to give us state updates, so we do
1188
- # not need to resync.
1189
1181
  if peer.peer_node_id not in self.synced_peers:
1190
1182
  await self.long_sync(new_peak_hb.height, peer, uint32(max(0, current_height - 256)), rollback=True)
1183
+ elif fork_point < current_height - 1:
1184
+ await self.long_sync(
1185
+ new_peak_hb.height, peer, uint32(min(fork_point, current_height - 256)), rollback=True
1186
+ )
1191
1187
 
1192
1188
  async def new_peak_from_untrusted(self, new_peak_hb: HeaderBlock, peer: WSChiaConnection) -> bool:
1193
1189
  far_behind: bool = (
@@ -1243,7 +1239,7 @@ class WalletNode:
1243
1239
  self.log.info("Secondary peer syncing")
1244
1240
  # In this case we will not rollback so it's OK to check some older updates as well, to ensure
1245
1241
  # that no recent transactions are being hidden.
1246
- self._secondary_peer_sync_task = asyncio.create_task(
1242
+ self._secondary_peer_sync_task = create_referenced_task(
1247
1243
  self.long_sync(new_peak_hb.height, peer, 0, rollback=False)
1248
1244
  )
1249
1245
 
@@ -1263,10 +1259,10 @@ class WalletNode:
1263
1259
  # Edge case, this happens when the peak < WEIGHT_PROOF_RECENT_BLOCKS
1264
1260
  # we still want to subscribe for all phs and coins.
1265
1261
  # (Hints are not in filter)
1266
- all_coin_ids: List[bytes32] = await self.get_coin_ids_to_subscribe()
1267
- phs: List[bytes32] = await self.get_puzzle_hashes_to_subscribe()
1268
- ph_updates: List[CoinState] = await subscribe_to_phs(phs, peer, min_height_for_subscriptions)
1269
- coin_updates: List[CoinState] = await subscribe_to_coin_updates(
1262
+ all_coin_ids: list[bytes32] = await self.get_coin_ids_to_subscribe()
1263
+ phs: list[bytes32] = await self.get_puzzle_hashes_to_subscribe()
1264
+ ph_updates: list[CoinState] = await subscribe_to_phs(phs, peer, min_height_for_subscriptions)
1265
+ coin_updates: list[CoinState] = await subscribe_to_coin_updates(
1270
1266
  all_coin_ids, peer, min_height_for_subscriptions
1271
1267
  )
1272
1268
  success = await self.add_states_from_peer(
@@ -1373,7 +1369,7 @@ class WalletNode:
1373
1369
 
1374
1370
  return get_wp_fork_point(self.constants, old_proof, weight_proof)
1375
1371
 
1376
- async def get_puzzle_hashes_to_subscribe(self) -> List[bytes32]:
1372
+ async def get_puzzle_hashes_to_subscribe(self) -> list[bytes32]:
1377
1373
  all_puzzle_hashes = await self.wallet_state_manager.puzzle_store.get_all_puzzle_hashes(1)
1378
1374
  # Get all phs from interested store
1379
1375
  interested_puzzle_hashes = [
@@ -1382,7 +1378,7 @@ class WalletNode:
1382
1378
  all_puzzle_hashes.update(interested_puzzle_hashes)
1383
1379
  return list(all_puzzle_hashes)
1384
1380
 
1385
- async def get_coin_ids_to_subscribe(self) -> List[bytes32]:
1381
+ async def get_coin_ids_to_subscribe(self) -> list[bytes32]:
1386
1382
  coin_ids = await self.wallet_state_manager.trade_manager.get_coins_of_interest()
1387
1383
  coin_ids.update(await self.wallet_state_manager.interested_store.get_interested_coin_ids())
1388
1384
  return list(coin_ids)
@@ -1475,7 +1471,7 @@ class WalletNode:
1475
1471
  # Peer is telling us that coin that was previously known to be spent is not spent anymore
1476
1472
  # Check old state
1477
1473
 
1478
- spent_state_blocks: Optional[List[HeaderBlock]] = await request_header_blocks(
1474
+ spent_state_blocks: Optional[list[HeaderBlock]] = await request_header_blocks(
1479
1475
  peer, current.spent_block_height, current.spent_block_height
1480
1476
  )
1481
1477
  if spent_state_blocks is None:
@@ -1601,7 +1597,7 @@ class WalletNode:
1601
1597
  return False
1602
1598
  all_peers_c = self.server.get_connections(NodeType.FULL_NODE)
1603
1599
  all_peers = [(con, self.is_trusted(con)) for con in all_peers_c]
1604
- blocks: Optional[List[HeaderBlock]] = await fetch_header_blocks_in_range(
1600
+ blocks: Optional[list[HeaderBlock]] = await fetch_header_blocks_in_range(
1605
1601
  start, end, peer_request_cache, all_peers
1606
1602
  )
1607
1603
  if blocks is None:
@@ -1618,9 +1614,9 @@ class WalletNode:
1618
1614
  if last != weight_proof.sub_epochs[inserted].reward_chain_hash:
1619
1615
  self.log.error("Failed validation 4")
1620
1616
  return False
1621
- pk_m_sig: List[Tuple[G1Element, bytes32, G2Element]] = []
1622
- sigs_to_cache: List[HeaderBlock] = []
1623
- blocks_to_cache: List[Tuple[bytes32, uint32]] = []
1617
+ pk_m_sig: list[tuple[G1Element, bytes32, G2Element]] = []
1618
+ sigs_to_cache: list[HeaderBlock] = []
1619
+ blocks_to_cache: list[tuple[bytes32, uint32]] = []
1624
1620
 
1625
1621
  signatures_to_validate: int = 30
1626
1622
  for idx in range(len(blocks)):
@@ -1684,10 +1680,10 @@ class WalletNode:
1684
1680
  return True
1685
1681
 
1686
1682
  async def get_coin_state(
1687
- self, coin_names: List[bytes32], peer: WSChiaConnection, fork_height: Optional[uint32] = None
1688
- ) -> List[CoinState]:
1683
+ self, coin_names: list[bytes32], peer: WSChiaConnection, fork_height: Optional[uint32] = None
1684
+ ) -> list[CoinState]:
1689
1685
  msg = RegisterForCoinUpdates(coin_names, uint32(0))
1690
- coin_state: Optional[RespondToCoinUpdates] = await peer.call_api(FullNodeAPI.register_interest_in_coin, msg)
1686
+ coin_state: Optional[RespondToCoinUpdates] = await peer.call_api(FullNodeAPI.register_for_coin_updates, msg)
1691
1687
  if coin_state is None or not isinstance(coin_state, RespondToCoinUpdates):
1692
1688
  raise PeerRequestException(f"Was not able to get states for {coin_names}")
1693
1689
 
@@ -1709,7 +1705,7 @@ class WalletNode:
1709
1705
 
1710
1706
  async def fetch_children(
1711
1707
  self, coin_name: bytes32, peer: WSChiaConnection, fork_height: Optional[uint32] = None
1712
- ) -> List[CoinState]:
1708
+ ) -> list[CoinState]:
1713
1709
  response: Optional[RespondChildren] = await peer.call_api(
1714
1710
  FullNodeAPI.request_children, RequestChildren(coin_name)
1715
1711
  )
@@ -1747,7 +1743,7 @@ class WalletNode:
1747
1743
  pending_change = await wallet.get_pending_change_balance()
1748
1744
  max_send_amount = await wallet.get_max_send_amount(unspent_records)
1749
1745
 
1750
- unconfirmed_removals: Dict[bytes32, Coin] = await wallet.wallet_state_manager.unconfirmed_removals_for_wallet(
1746
+ unconfirmed_removals: dict[bytes32, Coin] = await wallet.wallet_state_manager.unconfirmed_removals_for_wallet(
1751
1747
  wallet_id
1752
1748
  )
1753
1749
  self._balance_cache[wallet_id] = Balance(