chia-blockchain 2.5.0rc1__py3-none-any.whl → 2.5.1__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.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.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.0rc1.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import logging
4
4
  import time
5
5
  import traceback
6
- from typing import TYPE_CHECKING, Dict, List, Optional, Set, Tuple, Type, TypeVar, Union
6
+ from typing import TYPE_CHECKING, Optional, TypeVar, Union
7
7
 
8
8
  from chia_rs import G1Element, G2Element
9
9
  from clvm.casts import int_to_bytes
@@ -63,7 +63,7 @@ class VCWallet:
63
63
 
64
64
  @classmethod
65
65
  async def create_new_vc_wallet(
66
- cls: Type[_T_VCWallet],
66
+ cls: type[_T_VCWallet],
67
67
  wallet_state_manager: WalletStateManager,
68
68
  wallet: Wallet,
69
69
  name: Optional[str] = None,
@@ -80,7 +80,7 @@ class VCWallet:
80
80
 
81
81
  @classmethod
82
82
  async def create(
83
- cls: Type[_T_VCWallet],
83
+ cls: type[_T_VCWallet],
84
84
  wallet_state_manager: WalletStateManager,
85
85
  wallet: Wallet,
86
86
  wallet_info: WalletInfo,
@@ -110,7 +110,7 @@ class VCWallet:
110
110
  """
111
111
  # TODO Use coin_data instead of calling peer API
112
112
  wallet_node = self.wallet_state_manager.wallet_node
113
- coin_states: Optional[List[CoinState]] = await wallet_node.get_coin_state([coin.parent_coin_info], peer=peer)
113
+ coin_states: Optional[list[CoinState]] = await wallet_node.get_coin_state([coin.parent_coin_info], peer=peer)
114
114
  if coin_states is None:
115
115
  self.log.error(
116
116
  f"Cannot find parent coin of the verified credential coin: {coin.name().hex()}"
@@ -165,7 +165,7 @@ class VCWallet:
165
165
  action_scope: WalletActionScope,
166
166
  inner_puzzle_hash: Optional[bytes32] = None,
167
167
  fee: uint64 = uint64(0),
168
- extra_conditions: Tuple[Condition, ...] = tuple(),
168
+ extra_conditions: tuple[Condition, ...] = tuple(),
169
169
  ) -> VCRecord:
170
170
  """
171
171
  Given the DID ID of a proof provider, mint a brand new VC with an empty slot for proofs.
@@ -204,8 +204,8 @@ class VCWallet:
204
204
  coin_spends.append(make_spend(coin, puzzle, solution))
205
205
  spend_bundle = WalletSpendBundle(coin_spends, G2Element())
206
206
  now = uint64(int(time.time()))
207
- add_list: List[Coin] = list(spend_bundle.additions())
208
- rem_list: List[Coin] = list(spend_bundle.removals())
207
+ add_list: list[Coin] = list(spend_bundle.additions())
208
+ rem_list: list[Coin] = list(spend_bundle.removals())
209
209
  vc_record: VCRecord = VCRecord(vc, uint32(0))
210
210
  async with action_scope.use() as interface:
211
211
  interface.side_effects.transactions.append(
@@ -238,7 +238,7 @@ class VCWallet:
238
238
  action_scope: WalletActionScope,
239
239
  fee: uint64 = uint64(0),
240
240
  new_inner_puzhash: Optional[bytes32] = None,
241
- extra_conditions: Tuple[Condition, ...] = tuple(),
241
+ extra_conditions: tuple[Condition, ...] = tuple(),
242
242
  **kwargs: Unpack[GSTOptionalArgs],
243
243
  ) -> None:
244
244
  new_proof_hash: Optional[bytes32] = kwargs.get(
@@ -265,7 +265,7 @@ class VCWallet:
265
265
  if new_inner_puzhash is None:
266
266
  new_inner_puzhash = inner_puzhash
267
267
 
268
- primaries: List[Payment] = [Payment(new_inner_puzhash, uint64(vc_record.vc.coin.amount), [new_inner_puzhash])]
268
+ primaries: list[Payment] = [Payment(new_inner_puzhash, uint64(vc_record.vc.coin.amount), [new_inner_puzhash])]
269
269
 
270
270
  if fee > 0:
271
271
  coin_name = vc_record.vc.coin.name()
@@ -301,7 +301,7 @@ class VCWallet:
301
301
  primaries=primaries,
302
302
  conditions=extra_conditions,
303
303
  )
304
- did_announcement, coin_spend, vc = vc_record.vc.do_spend(inner_puzzle, innersol, new_proof_hash)
304
+ did_announcement, coin_spend, _vc = vc_record.vc.do_spend(inner_puzzle, innersol, new_proof_hash)
305
305
  spend_bundle = WalletSpendBundle([coin_spend], G2Element())
306
306
  if did_announcement is not None:
307
307
  # Need to spend DID
@@ -316,8 +316,8 @@ class VCWallet:
316
316
  raise ValueError(
317
317
  f"Cannot find the required DID {vc_record.vc.proof_provider.hex()}."
318
318
  ) # pragma: no cover
319
- add_list: List[Coin] = list(spend_bundle.additions())
320
- rem_list: List[Coin] = list(spend_bundle.removals())
319
+ add_list: list[Coin] = list(spend_bundle.additions())
320
+ rem_list: list[Coin] = list(spend_bundle.removals())
321
321
  now = uint64(int(time.time()))
322
322
 
323
323
  async with action_scope.use() as interface:
@@ -349,9 +349,9 @@ class VCWallet:
349
349
  peer: WSChiaConnection,
350
350
  action_scope: WalletActionScope,
351
351
  fee: uint64 = uint64(0),
352
- extra_conditions: Tuple[Condition, ...] = tuple(),
352
+ extra_conditions: tuple[Condition, ...] = tuple(),
353
353
  ) -> None:
354
- vc_coin_states: List[CoinState] = await self.wallet_state_manager.wallet_node.get_coin_state(
354
+ vc_coin_states: list[CoinState] = await self.wallet_state_manager.wallet_node.get_coin_state(
355
355
  [parent_id], peer=peer
356
356
  )
357
357
  if vc_coin_states is None:
@@ -377,7 +377,7 @@ class VCWallet:
377
377
  )
378
378
  return
379
379
 
380
- recovery_info: Optional[Tuple[bytes32, bytes32, uint64]] = await did_wallet.get_info_for_recovery()
380
+ recovery_info: Optional[tuple[bytes32, bytes32, uint64]] = await did_wallet.get_info_for_recovery()
381
381
  if recovery_info is None:
382
382
  raise RuntimeError("DID could not currently be accessed while trying to revoke VC") # pragma: no cover
383
383
  _, provider_inner_puzhash, _ = recovery_info
@@ -387,8 +387,8 @@ class VCWallet:
387
387
  coins.add(vc.coin)
388
388
  if fee > 0:
389
389
  coins.update(await self.standard_wallet.select_coins(fee, action_scope))
390
- sorted_coins: List[Coin] = sorted(coins, key=Coin.name)
391
- sorted_coin_list: List[List[Union[bytes32, uint64]]] = [coin_as_list(c) for c in sorted_coins]
390
+ sorted_coins: list[Coin] = sorted(coins, key=Coin.name)
391
+ sorted_coin_list: list[list[Union[bytes32, uint64]]] = [coin_as_list(c) for c in sorted_coins]
392
392
  nonce: bytes32 = SerializedProgram.to(sorted_coin_list).get_tree_hash()
393
393
  vc_announcement: AssertCoinAnnouncement = AssertCoinAnnouncement(asserted_id=vc.coin.name(), asserted_msg=nonce)
394
394
 
@@ -408,7 +408,7 @@ class VCWallet:
408
408
 
409
409
  async def add_vc_authorization(
410
410
  self, offer: Offer, solver: Solver, action_scope: WalletActionScope
411
- ) -> Tuple[Offer, Solver]:
411
+ ) -> tuple[Offer, Solver]:
412
412
  """
413
413
  This method takes an existing offer and adds a VC authorization spend to it where it can/is willing.
414
414
  The only coins types that it looks for to approve are CR-CATs at the moment.
@@ -422,9 +422,9 @@ class VCWallet:
422
422
  send the change back to it's original puzzle hash or else a taker wallet will not approve it.
423
423
  """
424
424
  # Gather all of the CRCATs being spent and the CRCATs that each creates
425
- crcat_spends: List[CRCATSpend] = []
426
- other_spends: List[CoinSpend] = []
427
- spends_to_fix: Dict[bytes32, CoinSpend] = {}
425
+ crcat_spends: list[CRCATSpend] = []
426
+ other_spends: list[CoinSpend] = []
427
+ spends_to_fix: dict[bytes32, CoinSpend] = {}
428
428
  for spend in offer.to_valid_spend().coin_spends:
429
429
  if CRCAT.is_cr_cat(uncurry_puzzle(spend.puzzle_reveal))[0]:
430
430
  crcat_spend: CRCATSpend = CRCATSpend.from_coin_spend(spend)
@@ -440,13 +440,13 @@ class VCWallet:
440
440
  other_spends.append(spend)
441
441
 
442
442
  # Figure out what VC announcements are needed
443
- announcements_to_make: Dict[bytes32, List[CreatePuzzleAnnouncement]] = {}
444
- announcements_to_assert: Dict[bytes32, List[AssertCoinAnnouncement]] = {}
445
- vcs: Dict[bytes32, VerifiedCredential] = {}
446
- coin_args: Dict[str, List[str]] = {}
443
+ announcements_to_make: dict[bytes32, list[CreatePuzzleAnnouncement]] = {}
444
+ announcements_to_assert: dict[bytes32, list[AssertCoinAnnouncement]] = {}
445
+ vcs: dict[bytes32, VerifiedCredential] = {}
446
+ coin_args: dict[str, list[str]] = {}
447
447
  for crcat_spend in crcat_spends:
448
448
  # Check first whether we can approve...
449
- available_vcs: List[VCRecord] = [
449
+ available_vcs: list[VCRecord] = [
450
450
  vc_rec
451
451
  for vc_rec in await self.store.get_vc_records_by_providers(crcat_spend.crcat.authorized_providers)
452
452
  if vc_rec.confirmed_at_height != 0
@@ -556,7 +556,7 @@ class VCWallet:
556
556
  *(
557
557
  spend
558
558
  for spend in offer.to_spend_bundle().coin_spends
559
- if spend.coin.parent_coin_info == bytes32([0] * 32)
559
+ if spend.coin.parent_coin_info == bytes32.zeros
560
560
  ),
561
561
  *other_spends,
562
562
  ],
@@ -572,9 +572,9 @@ class VCWallet:
572
572
  ), Solver({"vc_authorizations": coin_args})
573
573
 
574
574
  async def get_vc_with_provider_in_and_proofs(
575
- self, authorized_providers: List[bytes32], proofs: List[str]
575
+ self, authorized_providers: list[bytes32], proofs: list[str]
576
576
  ) -> VerifiedCredential:
577
- vc_records: List[VCRecord] = await self.store.get_vc_records_by_providers(authorized_providers)
577
+ vc_records: list[VCRecord] = await self.store.get_vc_records_by_providers(authorized_providers)
578
578
  if len(vc_records) == 0: # pragma: no cover
579
579
  raise ValueError(f"VCWallet has no VCs with providers in the following list: {authorized_providers}")
580
580
  else:
@@ -588,7 +588,7 @@ class VCWallet:
588
588
  return rec.vc
589
589
  raise ValueError(f"No authorized VC has the correct proofs: {proofs}") # pragma: no cover
590
590
 
591
- async def proof_of_inclusions_for_root_and_keys(self, root: bytes32, keys: List[str]) -> Program:
591
+ async def proof_of_inclusions_for_root_and_keys(self, root: bytes32, keys: list[str]) -> Program:
592
592
  vc_proofs: Optional[VCProofs] = await self.store.get_proofs_for_root(root)
593
593
  if vc_proofs is None:
594
594
  raise RuntimeError(f"No proofs exist for VC root: {root.hex()}") # pragma: no cover
@@ -599,25 +599,25 @@ class VCWallet:
599
599
  self,
600
600
  amount: uint64,
601
601
  action_scope: WalletActionScope,
602
- ) -> Set[Coin]:
602
+ ) -> set[Coin]:
603
603
  raise RuntimeError("VCWallet does not support select_coins()") # pragma: no cover
604
604
 
605
- async def get_confirmed_balance(self, record_list: Optional[Set[WalletCoinRecord]] = None) -> uint128:
605
+ async def get_confirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128:
606
606
  """The VC wallet doesn't really have a balance."""
607
607
  return uint128(0) # pragma: no cover
608
608
 
609
- async def get_unconfirmed_balance(self, record_list: Optional[Set[WalletCoinRecord]] = None) -> uint128:
609
+ async def get_unconfirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128:
610
610
  """The VC wallet doesn't really have a balance."""
611
611
  return uint128(0) # pragma: no cover
612
612
 
613
- async def get_spendable_balance(self, unspent_records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
613
+ async def get_spendable_balance(self, unspent_records: Optional[set[WalletCoinRecord]] = None) -> uint128:
614
614
  """The VC wallet doesn't really have a balance."""
615
615
  return uint128(0) # pragma: no cover
616
616
 
617
617
  async def get_pending_change_balance(self) -> uint64:
618
618
  return uint64(0) # pragma: no cover
619
619
 
620
- async def get_max_send_amount(self, records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
620
+ async def get_max_send_amount(self, records: Optional[set[WalletCoinRecord]] = None) -> uint128:
621
621
  """This is the confirmed balance, which we set to 0 as the VC wallet doesn't have one."""
622
622
  return uint128(0) # pragma: no cover
623
623
 
chia/wallet/wallet.py CHANGED
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
  import time
5
- from typing import TYPE_CHECKING, Any, ClassVar, Dict, List, Optional, Set, Tuple, cast
5
+ from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
6
6
 
7
7
  from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
8
8
  from typing_extensions import Unpack
@@ -94,14 +94,14 @@ class Wallet:
94
94
  # avoid full block TXs
95
95
  return int(self.wallet_state_manager.constants.MAX_BLOCK_COST_CLVM / 5 / self.cost_of_single_tx)
96
96
 
97
- async def get_max_spendable_coins(self, records: Optional[Set[WalletCoinRecord]] = None) -> Set[WalletCoinRecord]:
98
- spendable: List[WalletCoinRecord] = list(
97
+ async def get_max_spendable_coins(self, records: Optional[set[WalletCoinRecord]] = None) -> set[WalletCoinRecord]:
98
+ spendable: list[WalletCoinRecord] = list(
99
99
  await self.wallet_state_manager.get_spendable_coins_for_wallet(self.id(), records)
100
100
  )
101
101
  spendable.sort(reverse=True, key=lambda record: record.coin.amount)
102
102
  return set(spendable[0 : min(len(spendable), self.max_send_quantity)])
103
103
 
104
- async def get_max_send_amount(self, records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
104
+ async def get_max_send_amount(self, records: Optional[set[WalletCoinRecord]] = None) -> uint128:
105
105
  return uint128(sum(cr.coin.amount for cr in await self.get_max_spendable_coins()))
106
106
 
107
107
  @classmethod
@@ -111,20 +111,20 @@ class Wallet:
111
111
  def id(self) -> uint32:
112
112
  return self.wallet_id
113
113
 
114
- async def get_confirmed_balance(self, record_list: Optional[Set[WalletCoinRecord]] = None) -> uint128:
114
+ async def get_confirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128:
115
115
  return await self.wallet_state_manager.get_confirmed_balance_for_wallet(self.id(), record_list)
116
116
 
117
- async def get_unconfirmed_balance(self, unspent_records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
117
+ async def get_unconfirmed_balance(self, unspent_records: Optional[set[WalletCoinRecord]] = None) -> uint128:
118
118
  return await self.wallet_state_manager.get_unconfirmed_balance(self.id(), unspent_records)
119
119
 
120
- async def get_spendable_balance(self, unspent_records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
120
+ async def get_spendable_balance(self, unspent_records: Optional[set[WalletCoinRecord]] = None) -> uint128:
121
121
  spendable = await self.wallet_state_manager.get_confirmed_spendable_balance_for_wallet(
122
122
  self.id(), unspent_records
123
123
  )
124
124
  return spendable
125
125
 
126
126
  async def get_pending_change_balance(self) -> uint64:
127
- unconfirmed_tx: List[TransactionRecord] = await self.wallet_state_manager.tx_store.get_unconfirmed_for_wallet(
127
+ unconfirmed_tx: list[TransactionRecord] = await self.wallet_state_manager.tx_store.get_unconfirmed_for_wallet(
128
128
  self.id()
129
129
  )
130
130
  addition_amount = 0
@@ -181,9 +181,9 @@ class Wallet:
181
181
  if new:
182
182
  return await self.get_new_puzzle()
183
183
  else:
184
- record: Optional[DerivationRecord] = (
185
- await self.wallet_state_manager.get_current_derivation_record_for_wallet(self.id())
186
- )
184
+ record: Optional[
185
+ DerivationRecord
186
+ ] = await self.wallet_state_manager.get_current_derivation_record_for_wallet(self.id())
187
187
  if record is None:
188
188
  return await self.get_new_puzzle() # pragma: no cover
189
189
  puzzle = puzzle_for_pk(record.pubkey)
@@ -193,9 +193,9 @@ class Wallet:
193
193
  if new:
194
194
  return await self.get_new_puzzlehash()
195
195
  else:
196
- record: Optional[DerivationRecord] = (
197
- await self.wallet_state_manager.get_current_derivation_record_for_wallet(self.id())
198
- )
196
+ record: Optional[
197
+ DerivationRecord
198
+ ] = await self.wallet_state_manager.get_current_derivation_record_for_wallet(self.id())
199
199
  if record is None:
200
200
  return await self.get_new_puzzlehash()
201
201
  return record.puzzle_hash
@@ -206,12 +206,12 @@ class Wallet:
206
206
 
207
207
  def make_solution(
208
208
  self,
209
- primaries: List[Payment],
210
- conditions: Tuple[Condition, ...] = tuple(),
209
+ primaries: list[Payment],
210
+ conditions: tuple[Condition, ...] = tuple(),
211
211
  fee: uint64 = uint64(0),
212
212
  ) -> Program:
213
213
  assert fee >= 0
214
- condition_list: List[Any] = [condition.to_program() for condition in conditions]
214
+ condition_list: list[Any] = [condition.to_program() for condition in conditions]
215
215
  if len(primaries) > 0:
216
216
  for primary in primaries:
217
217
  condition_list.append(make_create_coin_condition(primary.puzzle_hash, primary.amount, primary.memos))
@@ -229,17 +229,17 @@ class Wallet:
229
229
  self,
230
230
  amount: uint64,
231
231
  action_scope: WalletActionScope,
232
- ) -> Set[Coin]:
232
+ ) -> set[Coin]:
233
233
  """
234
234
  Returns a set of coins that can be used for generating a new transaction.
235
235
  Note: Must be called under wallet state manager lock
236
236
  """
237
237
  spendable_amount: uint128 = await self.get_spendable_balance()
238
- spendable_coins: List[WalletCoinRecord] = list(await self.get_max_spendable_coins())
238
+ spendable_coins: list[WalletCoinRecord] = list(await self.get_max_spendable_coins())
239
239
 
240
240
  # Try to use coins from the store, if there isn't enough of "unused"
241
241
  # coins use change coins that are not confirmed yet
242
- unconfirmed_removals: Dict[bytes32, Coin] = await self.wallet_state_manager.unconfirmed_removals_for_wallet(
242
+ unconfirmed_removals: dict[bytes32, Coin] = await self.wallet_state_manager.unconfirmed_removals_for_wallet(
243
243
  self.id()
244
244
  )
245
245
  async with action_scope.use() as interface:
@@ -262,13 +262,13 @@ class Wallet:
262
262
  action_scope: WalletActionScope,
263
263
  fee: uint64 = uint64(0),
264
264
  origin_id: Optional[bytes32] = None,
265
- coins: Optional[Set[Coin]] = None,
266
- primaries_input: Optional[List[Payment]] = None,
267
- memos: Optional[List[bytes]] = None,
265
+ coins: Optional[set[Coin]] = None,
266
+ primaries_input: Optional[list[Payment]] = None,
267
+ memos: Optional[list[bytes]] = None,
268
268
  negative_change_allowed: bool = False,
269
- puzzle_decorator_override: Optional[List[Dict[str, Any]]] = None,
270
- extra_conditions: Tuple[Condition, ...] = tuple(),
271
- ) -> List[CoinSpend]:
269
+ puzzle_decorator_override: Optional[list[dict[str, Any]]] = None,
270
+ extra_conditions: tuple[Condition, ...] = tuple(),
271
+ ) -> list[CoinSpend]:
272
272
  """
273
273
  Generates a unsigned transaction in form of List(Puzzle, Solutions)
274
274
  Note: this must be called under a wallet state manager lock
@@ -303,7 +303,7 @@ class Wallet:
303
303
 
304
304
  assert change >= 0
305
305
 
306
- spends: List[CoinSpend] = []
306
+ spends: list[CoinSpend] = []
307
307
  primary_announcement: Optional[AssertCoinAnnouncement] = None
308
308
 
309
309
  # Check for duplicates
@@ -312,13 +312,13 @@ class Wallet:
312
312
  raise ValueError("Cannot create two identical coins")
313
313
  for coin in coins:
314
314
  # Only one coin creates outputs
315
- if origin_id in (None, coin.name()):
315
+ if origin_id in {None, coin.name()}:
316
316
  origin_id = coin.name()
317
317
  inner_puzzle = await self.puzzle_for_puzzle_hash(coin.puzzle_hash)
318
318
  decorated_target_puzzle_hash = decorator_manager.decorate_target_puzzle_hash(
319
319
  inner_puzzle, newpuzzlehash
320
320
  )
321
- target_primary: List[Payment] = []
321
+ target_primary: list[Payment] = []
322
322
  if memos is None:
323
323
  memos = []
324
324
  memos = decorator_manager.decorate_memos(inner_puzzle, newpuzzlehash, memos)
@@ -337,7 +337,7 @@ class Wallet:
337
337
  else:
338
338
  change_puzzle_hash = await self.get_new_puzzlehash()
339
339
  primaries.append(Payment(change_puzzle_hash, uint64(change)))
340
- message_list: List[bytes32] = [c.name() for c in coins]
340
+ message_list: list[bytes32] = [c.name() for c in coins]
341
341
  for primary in primaries:
342
342
  message_list.append(Coin(coin.name(), primary.puzzle_hash, primary.amount).name())
343
343
  message: bytes32 = std_hash(b"".join(message_list))
@@ -375,7 +375,7 @@ class Wallet:
375
375
  self.log.debug(f"Spends is {spends}")
376
376
  return spends
377
377
 
378
- async def sign_message(self, message: str, puzzle_hash: bytes32, mode: SigningMode) -> Tuple[G1Element, G2Element]:
378
+ async def sign_message(self, message: str, puzzle_hash: bytes32, mode: SigningMode) -> tuple[G1Element, G2Element]:
379
379
  # CHIP-0002 message signing as documented at:
380
380
  # https://github.com/Chia-Network/chips/blob/80e4611fe52b174bf1a0382b9dff73805b18b8c6/CHIPs/chip-0002.md#signmessage
381
381
  private = await self.wallet_state_manager.get_private_key(puzzle_hash)
@@ -397,11 +397,11 @@ class Wallet:
397
397
  puzzle_hash: bytes32,
398
398
  action_scope: WalletActionScope,
399
399
  fee: uint64 = uint64(0),
400
- coins: Optional[Set[Coin]] = None,
401
- primaries: Optional[List[Payment]] = None,
402
- memos: Optional[List[bytes]] = None,
403
- puzzle_decorator_override: Optional[List[Dict[str, Any]]] = None,
404
- extra_conditions: Tuple[Condition, ...] = tuple(),
400
+ coins: Optional[set[Coin]] = None,
401
+ primaries: Optional[list[Payment]] = None,
402
+ memos: Optional[list[bytes]] = None,
403
+ puzzle_decorator_override: Optional[list[dict[str, Any]]] = None,
404
+ extra_conditions: tuple[Condition, ...] = tuple(),
405
405
  **kwargs: Unpack[GSTOptionalArgs],
406
406
  ) -> None:
407
407
  origin_id: Optional[bytes32] = kwargs.get("origin_id", None)
@@ -434,8 +434,8 @@ class Wallet:
434
434
  spend_bundle = WalletSpendBundle(transaction, G2Element())
435
435
 
436
436
  now = uint64(int(time.time()))
437
- add_list: List[Coin] = list(spend_bundle.additions())
438
- rem_list: List[Coin] = list(spend_bundle.removals())
437
+ add_list: list[Coin] = list(spend_bundle.additions())
438
+ rem_list: list[Coin] = list(spend_bundle.removals())
439
439
 
440
440
  output_amount = sum(a.amount for a in add_list) + fee
441
441
  input_amount = sum(r.amount for r in rem_list)
@@ -471,7 +471,7 @@ class Wallet:
471
471
  self,
472
472
  fee: uint64,
473
473
  action_scope: WalletActionScope,
474
- extra_conditions: Tuple[Condition, ...] = tuple(),
474
+ extra_conditions: tuple[Condition, ...] = tuple(),
475
475
  ) -> None:
476
476
  chia_coins = await self.select_coins(fee, action_scope)
477
477
  await self.generate_signed_transaction(
@@ -488,7 +488,7 @@ class Wallet:
488
488
  asset_id: Optional[bytes32],
489
489
  amount: uint64,
490
490
  action_scope: WalletActionScope,
491
- ) -> Set[Coin]:
491
+ ) -> set[Coin]:
492
492
  if asset_id is not None:
493
493
  raise ValueError(f"The standard wallet cannot offer coins with asset id {asset_id}")
494
494
  balance = await self.get_spendable_balance()
@@ -501,7 +501,7 @@ class Wallet:
501
501
  # WSChiaConnection is only imported for type checking
502
502
  async def coin_added(
503
503
  self, coin: Coin, height: uint32, peer: WSChiaConnection, coin_data: Optional[Streamable]
504
- ) -> None: # pylint: disable=used-before-assignment
504
+ ) -> None:
505
505
  pass
506
506
 
507
507
  def get_name(self) -> str:
@@ -509,9 +509,9 @@ class Wallet:
509
509
 
510
510
  async def match_hinted_coin(self, coin: Coin, hint: bytes32) -> bool:
511
511
  if hint == coin.puzzle_hash:
512
- wallet_identifier: Optional[WalletIdentifier] = (
513
- await self.wallet_state_manager.puzzle_store.get_wallet_identifier_for_puzzle_hash(coin.puzzle_hash)
514
- )
512
+ wallet_identifier: Optional[
513
+ WalletIdentifier
514
+ ] = await self.wallet_state_manager.puzzle_store.get_wallet_identifier_for_puzzle_hash(coin.puzzle_hash)
515
515
  if wallet_identifier is not None and wallet_identifier.id == self.id():
516
516
  return True
517
517
  return False
@@ -557,18 +557,18 @@ class Wallet:
557
557
 
558
558
  async def execute_signing_instructions(
559
559
  self, signing_instructions: SigningInstructions, partial_allowed: bool = False
560
- ) -> List[SigningResponse]:
560
+ ) -> list[SigningResponse]:
561
561
  root_pubkey: G1Element = self.wallet_state_manager.root_pubkey
562
- pk_lookup: Dict[int, G1Element] = (
562
+ pk_lookup: dict[int, G1Element] = (
563
563
  {root_pubkey.get_fingerprint(): root_pubkey} if self.wallet_state_manager.private_key is not None else {}
564
564
  )
565
- sk_lookup: Dict[int, PrivateKey] = (
565
+ sk_lookup: dict[int, PrivateKey] = (
566
566
  {root_pubkey.get_fingerprint(): self.wallet_state_manager.get_master_private_key()}
567
567
  if self.wallet_state_manager.private_key is not None
568
568
  else {}
569
569
  )
570
570
  aggregate_responses_at_end: bool = True
571
- responses: List[SigningResponse] = []
571
+ responses: list[SigningResponse] = []
572
572
 
573
573
  # TODO: expand path hints and sum hints recursively (a sum hint can give a new key to path hint)
574
574
  # Next, expand our pubkey set with path hints
@@ -593,9 +593,9 @@ class Wallet:
593
593
  sk_lookup[derive_child_pk_unhardened.get_fingerprint()] = derive_child_sk_unhardened
594
594
 
595
595
  # Next, expand our pubkey set with sum hints
596
- sum_hint_lookup: Dict[int, List[int]] = {}
596
+ sum_hint_lookup: dict[int, list[int]] = {}
597
597
  for sum_hint in signing_instructions.key_hints.sum_hints:
598
- fingerprints_we_have: List[int] = []
598
+ fingerprints_we_have: list[int] = []
599
599
  for fingerprint in sum_hint.fingerprints:
600
600
  fingerprint_as_int = int.from_bytes(fingerprint, "big")
601
601
  if fingerprint_as_int not in pk_lookup:
@@ -635,7 +635,7 @@ class Wallet:
635
635
  )
636
636
  )
637
637
  else: # Implicit if pk_fingerprint in sum_hint_lookup
638
- signatures: List[G2Element] = []
638
+ signatures: list[G2Element] = []
639
639
  for partial_fingerprint in sum_hint_lookup[pk_fingerprint]:
640
640
  signatures.append(
641
641
  AugSchemeMPL.sign(sk_lookup[partial_fingerprint], target.message, pk_lookup[pk_fingerprint])
@@ -660,8 +660,8 @@ class Wallet:
660
660
 
661
661
  # If we have the full set of signing responses for the instructions, aggregate them as much as possible
662
662
  if aggregate_responses_at_end:
663
- new_responses: List[SigningResponse] = []
664
- grouped_responses: Dict[bytes32, List[SigningResponse]] = {}
663
+ new_responses: list[SigningResponse] = []
664
+ grouped_responses: dict[bytes32, list[SigningResponse]] = {}
665
665
  for response in responses:
666
666
  grouped_responses.setdefault(response.hook, [])
667
667
  grouped_responses[response.hook].append(response)
@@ -677,7 +677,7 @@ class Wallet:
677
677
  return responses
678
678
 
679
679
  async def apply_signatures(
680
- self, spends: List[Spend], signing_responses: List[SigningResponse]
680
+ self, spends: list[Spend], signing_responses: list[SigningResponse]
681
681
  ) -> SignedTransaction:
682
682
  signing_responses_set = set(signing_responses)
683
683
  return SignedTransaction(
@@ -1,8 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import contextlib
4
+ from collections.abc import AsyncIterator
4
5
  from dataclasses import dataclass, field, replace
5
- from typing import TYPE_CHECKING, AsyncIterator, List, Optional, cast, final
6
+ from typing import TYPE_CHECKING, Optional, cast, final
6
7
 
7
8
  from chia.types.blockchain_format.coin import Coin
8
9
  from chia.util.action_scope import ActionScope
@@ -20,18 +21,18 @@ if TYPE_CHECKING:
20
21
  @streamable
21
22
  @dataclass(frozen=True)
22
23
  class _StreamableWalletSideEffects(Streamable):
23
- transactions: List[TransactionRecord]
24
- signing_responses: List[SigningResponse]
25
- extra_spends: List[WalletSpendBundle]
26
- selected_coins: List[Coin]
24
+ transactions: list[TransactionRecord]
25
+ signing_responses: list[SigningResponse]
26
+ extra_spends: list[WalletSpendBundle]
27
+ selected_coins: list[Coin]
27
28
 
28
29
 
29
30
  @dataclass
30
31
  class WalletSideEffects:
31
- transactions: List[TransactionRecord] = field(default_factory=list)
32
- signing_responses: List[SigningResponse] = field(default_factory=list)
33
- extra_spends: List[WalletSpendBundle] = field(default_factory=list)
34
- selected_coins: List[Coin] = field(default_factory=list)
32
+ transactions: list[TransactionRecord] = field(default_factory=list)
33
+ signing_responses: list[SigningResponse] = field(default_factory=list)
34
+ extra_spends: list[WalletSpendBundle] = field(default_factory=list)
35
+ selected_coins: list[Coin] = field(default_factory=list)
35
36
 
36
37
  def __bytes__(self) -> bytes:
37
38
  return bytes(_StreamableWalletSideEffects(**self.__dict__))
@@ -47,8 +48,8 @@ class WalletActionConfig:
47
48
  push: bool
48
49
  merge_spends: bool
49
50
  sign: Optional[bool]
50
- additional_signing_responses: List[SigningResponse]
51
- extra_spends: List[WalletSpendBundle]
51
+ additional_signing_responses: list[SigningResponse]
52
+ extra_spends: list[WalletSpendBundle]
52
53
  tx_config: TXConfig
53
54
 
54
55
  def adjust_for_side_effects(self, side_effects: WalletSideEffects) -> WalletActionConfig:
@@ -71,8 +72,8 @@ async def new_wallet_action_scope(
71
72
  push: bool = False,
72
73
  merge_spends: bool = True,
73
74
  sign: Optional[bool] = None,
74
- additional_signing_responses: List[SigningResponse] = [],
75
- extra_spends: List[WalletSpendBundle] = [],
75
+ additional_signing_responses: list[SigningResponse] = [],
76
+ extra_spends: list[WalletSpendBundle] = [],
76
77
  ) -> AsyncIterator[WalletActionScope]:
77
78
  async with ActionScope.new_scope(
78
79
  WalletSideEffects,
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import TYPE_CHECKING, ClassVar, Dict, List, Optional, Tuple, cast
4
+ from typing import TYPE_CHECKING, ClassVar, Optional, cast
5
5
 
6
6
  from chia.consensus.block_header_validation import validate_finished_header_block
7
7
  from chia.consensus.block_record import BlockRecord
@@ -11,6 +11,7 @@ from chia.consensus.find_fork_point import find_fork_point_in_chain
11
11
  from chia.consensus.full_block_to_block_record import block_to_block_record
12
12
  from chia.types.blockchain_format.sized_bytes import bytes32
13
13
  from chia.types.header_block import HeaderBlock
14
+ from chia.types.validation_state import ValidationState
14
15
  from chia.types.weight_proof import WeightProof
15
16
  from chia.util.errors import Err
16
17
  from chia.util.ints import uint32, uint64
@@ -35,8 +36,8 @@ class WalletBlockchain:
35
36
  _finished_sync_up_to: uint32
36
37
 
37
38
  _peak: Optional[HeaderBlock]
38
- _height_to_hash: Dict[uint32, bytes32]
39
- _block_records: Dict[bytes32, BlockRecord]
39
+ _height_to_hash: dict[uint32, bytes32]
40
+ _block_records: dict[bytes32, BlockRecord]
40
41
  _latest_timestamp: uint64
41
42
  _sub_slot_iters: uint64
42
43
  _difficulty: uint64
@@ -69,7 +70,7 @@ class WalletBlockchain:
69
70
 
70
71
  return self
71
72
 
72
- async def new_valid_weight_proof(self, weight_proof: WeightProof, records: List[BlockRecord]) -> None:
73
+ async def new_valid_weight_proof(self, weight_proof: WeightProof, records: list[BlockRecord]) -> None:
73
74
  peak: Optional[HeaderBlock] = await self.get_peak_block()
74
75
 
75
76
  if peak is not None and weight_proof.recent_chain_data[-1].weight <= peak.weight:
@@ -93,7 +94,7 @@ class WalletBlockchain:
93
94
  await self.set_peak_block(weight_proof.recent_chain_data[-1], latest_timestamp)
94
95
  await self.clean_block_records()
95
96
 
96
- async def add_block(self, block: HeaderBlock) -> Tuple[AddBlockResult, Optional[Err]]:
97
+ async def add_block(self, block: HeaderBlock) -> tuple[AddBlockResult, Optional[Err]]:
97
98
  if self.contains_block(block.header_hash):
98
99
  return AddBlockResult.ALREADY_HAVE_BLOCK, None
99
100
  if not self.contains_block(block.prev_header_hash) and block.height > 0:
@@ -110,9 +111,8 @@ class WalletBlockchain:
110
111
  difficulty = self._difficulty
111
112
 
112
113
  # Validation requires a block cache (self) that goes back to a subepoch barrier
113
- required_iters, error = validate_finished_header_block(
114
- self.constants, self, block, False, difficulty, sub_slot_iters, False
115
- )
114
+ expected_vs = ValidationState(sub_slot_iters, difficulty, None)
115
+ required_iters, error = validate_finished_header_block(self.constants, self, block, False, expected_vs, False)
116
116
  if error is not None:
117
117
  return AddBlockResult.INVALID_BLOCK, error.code
118
118
  if required_iters is None:
@@ -217,7 +217,7 @@ class WalletBlockchain:
217
217
  # blockchain_interface
218
218
  return self._block_records.get(header_hash)
219
219
 
220
- async def prev_block_hash(self, header_hashes: List[bytes32]) -> List[bytes32]:
220
+ async def prev_block_hash(self, header_hashes: list[bytes32]) -> list[bytes32]:
221
221
  ret = []
222
222
  for h in header_hashes:
223
223
  ret.append(self._block_records[h].prev_hash)
@@ -235,7 +235,7 @@ class WalletBlockchain:
235
235
  if len(self._block_records) < self.CACHE_SIZE:
236
236
  return None
237
237
 
238
- to_remove: List[bytes32] = []
238
+ to_remove: list[bytes32] = []
239
239
  for header_hash, block_record in self._block_records.items():
240
240
  if block_record.height < height_limit:
241
241
  to_remove.append(header_hash)