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,9 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import functools
4
+ from collections.abc import Iterable
4
5
  from dataclasses import dataclass, replace
5
6
  from enum import IntEnum
6
- from typing import Iterable, List, Optional, Tuple, Type, TypeVar
7
+ from typing import Optional, TypeVar
7
8
 
8
9
  from clvm.casts import int_to_bytes
9
10
 
@@ -94,7 +95,7 @@ CREDENTIAL_STRUCT_HASH: bytes32 = CREDENTIAL_STRUCT.get_tree_hash()
94
95
 
95
96
  # Basic drivers
96
97
  def construct_cr_layer(
97
- authorized_providers: List[bytes32],
98
+ authorized_providers: list[bytes32],
98
99
  proofs_checker: Program,
99
100
  inner_puzzle: Program,
100
101
  ) -> Program:
@@ -128,7 +129,7 @@ def construct_cr_layer_hash(
128
129
 
129
130
  def match_cr_layer(
130
131
  uncurried_puzzle: UncurriedPuzzle,
131
- ) -> Optional[Tuple[List[bytes32], Program, Program]]:
132
+ ) -> Optional[tuple[list[bytes32], Program, Program]]:
132
133
  extra_uncurried_puzzle = uncurry_puzzle(uncurried_puzzle.mod)
133
134
  if extra_uncurried_puzzle.mod == CREDENTIAL_RESTRICTION:
134
135
  return (
@@ -176,24 +177,24 @@ class CRCAT:
176
177
  coin: Coin
177
178
  tail_hash: bytes32
178
179
  lineage_proof: LineageProof
179
- authorized_providers: List[bytes32]
180
+ authorized_providers: list[bytes32]
180
181
  proofs_checker: Program
181
182
  inner_puzzle_hash: bytes32
182
183
 
183
184
  @classmethod
184
185
  def launch(
185
- cls: Type[_T_CRCAT],
186
+ cls: type[_T_CRCAT],
186
187
  # General CAT launching info
187
188
  origin_coin: Coin,
188
189
  payment: Payment,
189
190
  tail: Program,
190
191
  tail_solution: Program,
191
192
  # CR Layer params
192
- authorized_providers: List[bytes32],
193
+ authorized_providers: list[bytes32],
193
194
  proofs_checker: Program,
194
195
  # Probably never need this but some tail might
195
196
  optional_lineage_proof: Optional[LineageProof] = None,
196
- ) -> Tuple[Program, CoinSpend, CRCAT]:
197
+ ) -> tuple[Program, CoinSpend, CRCAT]:
197
198
  """
198
199
  Launch a new CR-CAT from XCH.
199
200
 
@@ -288,7 +289,7 @@ class CRCAT:
288
289
  )
289
290
 
290
291
  @staticmethod
291
- def is_cr_cat(puzzle_reveal: UncurriedPuzzle) -> Tuple[bool, str]:
292
+ def is_cr_cat(puzzle_reveal: UncurriedPuzzle) -> tuple[bool, str]:
292
293
  """
293
294
  This takes an (uncurried) puzzle reveal and returns a boolean for whether the puzzle is a CR-CAT and an error
294
295
  message for if the puzzle is a mismatch.
@@ -310,7 +311,7 @@ class CRCAT:
310
311
  return solution.at("f").at("rrrrrrf")
311
312
 
312
313
  @classmethod
313
- def get_current_from_coin_spend(cls: Type[_T_CRCAT], spend: CoinSpend) -> CRCAT: # pragma: no cover
314
+ def get_current_from_coin_spend(cls: type[_T_CRCAT], spend: CoinSpend) -> CRCAT: # pragma: no cover
314
315
  uncurried_puzzle: UncurriedPuzzle = uncurry_puzzle(spend.puzzle_reveal)
315
316
  first_uncurried_cr_layer: UncurriedPuzzle = uncurry_puzzle(uncurried_puzzle.args.at("rrf"))
316
317
  second_uncurried_cr_layer: UncurriedPuzzle = uncurry_puzzle(first_uncurried_cr_layer.mod)
@@ -329,10 +330,10 @@ class CRCAT:
329
330
 
330
331
  @classmethod
331
332
  def get_next_from_coin_spend(
332
- cls: Type[_T_CRCAT],
333
+ cls: type[_T_CRCAT],
333
334
  parent_spend: CoinSpend,
334
335
  conditions: Optional[Program] = None, # For optimization purposes, the conditions may already have been run
335
- ) -> List[CRCAT]:
336
+ ) -> list[CRCAT]:
336
337
  """
337
338
  Given a coin spend, this will return the next CR-CATs that were created as an output of that spend.
338
339
  Inner puzzle output conditions may also be supplied as an optimization.
@@ -388,12 +389,12 @@ class CRCAT:
388
389
  uint64(parent_spend.coin.amount),
389
390
  )
390
391
 
391
- all_conditions: List[Program] = list(conditions.as_iter())
392
+ all_conditions: list[Program] = list(conditions.as_iter())
392
393
  if len(all_conditions) > 1000:
393
394
  raise RuntimeError("More than 1000 conditions not currently supported by CRCAT drivers") # pragma: no cover
394
395
 
395
396
  # Almost complete except the coin's full puzzle hash which we want to use the class method to calculate
396
- partially_completed_crcats: List[CRCAT] = [
397
+ partially_completed_crcats: list[CRCAT] = [
397
398
  CRCAT(
398
399
  Coin(coin_name, bytes(32), uint64(condition.at("rrf").as_int())),
399
400
  bytes32(tail_hash_as_prog.as_atom()),
@@ -438,7 +439,7 @@ class CRCAT:
438
439
  inner_solution: Program,
439
440
  # For optimization purposes the conditions may already have been run
440
441
  conditions: Optional[Iterable[Program]] = None,
441
- ) -> Tuple[List[AssertCoinAnnouncement], CoinSpend, List[CRCAT]]:
442
+ ) -> tuple[list[AssertCoinAnnouncement], CoinSpend, list[CRCAT]]:
442
443
  """
443
444
  Spend a CR-CAT.
444
445
 
@@ -449,8 +450,8 @@ class CRCAT:
449
450
  Likely, spend_many is more useful.
450
451
  """
451
452
  # Gather the output information
452
- announcements: List[AssertCoinAnnouncement] = []
453
- new_inner_puzzle_hashes_and_amounts: List[Tuple[bytes32, uint64]] = []
453
+ announcements: list[AssertCoinAnnouncement] = []
454
+ new_inner_puzzle_hashes_and_amounts: list[tuple[bytes32, uint64]] = []
454
455
  if conditions is None:
455
456
  conditions = inner_puzzle.run(inner_solution).as_iter() # pragma: no cover
456
457
  assert conditions is not None
@@ -518,15 +519,15 @@ class CRCAT:
518
519
 
519
520
  @classmethod
520
521
  def spend_many(
521
- cls: Type[_T_CRCAT],
522
- inner_spends: List[Tuple[_T_CRCAT, int, Program, Program]], # CRCAT, extra_delta, inner puzzle, inner solution
522
+ cls: type[_T_CRCAT],
523
+ inner_spends: list[tuple[_T_CRCAT, int, Program, Program]], # CRCAT, extra_delta, inner puzzle, inner solution
523
524
  # CR layer solving info
524
525
  proof_of_inclusions: Program,
525
526
  proof_checker_solution: Program,
526
527
  provider_id: bytes32,
527
528
  vc_launcher_id: bytes32,
528
529
  vc_inner_puzhash: Optional[bytes32], # Optional for incomplete spends
529
- ) -> Tuple[List[AssertCoinAnnouncement], List[CoinSpend], List[CRCAT]]:
530
+ ) -> tuple[list[AssertCoinAnnouncement], list[CoinSpend], list[CRCAT]]:
530
531
  """
531
532
  Spend a multiple CR-CATs.
532
533
 
@@ -541,19 +542,19 @@ class CRCAT:
541
542
  def prev_index(index: int) -> int:
542
543
  return index - 1
543
544
 
544
- sorted_inner_spends: List[Tuple[_T_CRCAT, int, Program, Program]] = sorted(
545
+ sorted_inner_spends: list[tuple[_T_CRCAT, int, Program, Program]] = sorted(
545
546
  inner_spends,
546
547
  key=lambda spend: spend[0].coin.name(),
547
548
  )
548
549
 
549
- all_expected_announcements: List[AssertCoinAnnouncement] = []
550
- all_coin_spends: List[CoinSpend] = []
551
- all_new_crcats: List[CRCAT] = []
550
+ all_expected_announcements: list[AssertCoinAnnouncement] = []
551
+ all_coin_spends: list[CoinSpend] = []
552
+ all_new_crcats: list[CRCAT] = []
552
553
 
553
554
  subtotal: int = 0
554
555
  for i, inner_spend in enumerate(sorted_inner_spends):
555
556
  crcat, extra_delta, inner_puzzle, inner_solution = inner_spend
556
- conditions: List[Program] = list(inner_puzzle.run(inner_solution).as_iter())
557
+ conditions: list[Program] = list(inner_puzzle.run(inner_solution).as_iter())
557
558
  output_amount: int = (
558
559
  sum(
559
560
  c.at("rrf").as_int()
@@ -604,9 +605,9 @@ class CRCATSpend:
604
605
  crcat: CRCAT
605
606
  inner_puzzle: Program
606
607
  inner_solution: Program
607
- children: List[CRCAT]
608
+ children: list[CRCAT]
608
609
  incomplete: bool
609
- inner_conditions: List[Program]
610
+ inner_conditions: list[Program]
610
611
  proof_of_inclusions: Program
611
612
 
612
613
  @classmethod
@@ -628,7 +629,7 @@ class CRCATSpend:
628
629
  @streamable
629
630
  @dataclass(frozen=True)
630
631
  class ProofsChecker(Streamable):
631
- flags: List[str]
632
+ flags: list[str]
632
633
 
633
634
  def as_program(self) -> Program:
634
635
  def byte_sort_flags(f1: str, f2: str) -> int:
@@ -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, Any, Dict, List, Optional, Set, Tuple
6
+ from typing import TYPE_CHECKING, Any, Optional
7
7
 
8
8
  from chia_rs import G1Element, G2Element
9
9
  from typing_extensions import Unpack
@@ -82,7 +82,7 @@ class CRCATWallet(CATWallet):
82
82
  async def create_new_cat_wallet(
83
83
  wallet_state_manager: WalletStateManager,
84
84
  wallet: Wallet,
85
- cat_tail_info: Dict[str, Any],
85
+ cat_tail_info: dict[str, Any],
86
86
  amount: uint64,
87
87
  action_scope: WalletActionScope,
88
88
  fee: uint64 = uint64(0),
@@ -97,7 +97,7 @@ class CRCATWallet(CATWallet):
97
97
  wallet: Wallet,
98
98
  limitations_program_hash_hex: str,
99
99
  name: Optional[str] = None,
100
- authorized_providers: Optional[List[bytes32]] = None,
100
+ authorized_providers: Optional[list[bytes32]] = None,
101
101
  proofs_checker: Optional[ProofsChecker] = None,
102
102
  ) -> CRCATWallet:
103
103
  if authorized_providers is None or proofs_checker is None: # pragma: no cover
@@ -134,7 +134,7 @@ class CRCATWallet(CATWallet):
134
134
  puzzle_driver: PuzzleInfo,
135
135
  name: Optional[str] = None,
136
136
  # We're hinting this as Any for mypy by should explore adding this to the wallet protocol and hinting properly
137
- potential_subclasses: Dict[AssetType, Any] = {},
137
+ potential_subclasses: dict[AssetType, Any] = {},
138
138
  ) -> Any:
139
139
  cr_layer: Optional[PuzzleInfo] = puzzle_driver.also()
140
140
  if cr_layer is None: # pragma: no cover
@@ -167,7 +167,7 @@ class CRCATWallet(CATWallet):
167
167
  async def convert_to_cr(
168
168
  cls,
169
169
  cat_wallet: CATWallet,
170
- authorized_providers: List[bytes32],
170
+ authorized_providers: list[bytes32],
171
171
  proofs_checker: ProofsChecker,
172
172
  ) -> None:
173
173
  replace_self = cls()
@@ -216,13 +216,13 @@ class CRCATWallet(CATWallet):
216
216
 
217
217
  async def add_crcat_coin(self, coin_spend: CoinSpend, coin: Coin, height: uint32) -> None:
218
218
  try:
219
- new_cr_cats: List[CRCAT] = CRCAT.get_next_from_coin_spend(coin_spend)
219
+ new_cr_cats: list[CRCAT] = CRCAT.get_next_from_coin_spend(coin_spend)
220
220
  hint_dict = {
221
221
  id: hc.hint
222
222
  for id, hc in compute_spend_hints_and_additions(coin_spend)[0].items()
223
223
  if hc.hint is not None
224
224
  }
225
- cr_cat: CRCAT = list(filter(lambda c: c.coin.name() == coin.name(), new_cr_cats))[0]
225
+ cr_cat: CRCAT = next(filter(lambda c: c.coin.name() == coin.name(), new_cr_cats))
226
226
  if (
227
227
  await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(
228
228
  cr_cat.inner_puzzle_hash
@@ -316,10 +316,10 @@ class CRCATWallet(CATWallet):
316
316
  "inner_puzzle_for_cat_puzhash is a legacy method and is not available on CR-CAT wallets"
317
317
  )
318
318
 
319
- async def get_cat_spendable_coins(self, records: Optional[Set[WalletCoinRecord]] = None) -> List[WalletCoinRecord]:
320
- result: List[WalletCoinRecord] = []
319
+ async def get_cat_spendable_coins(self, records: Optional[set[WalletCoinRecord]] = None) -> list[WalletCoinRecord]:
320
+ result: list[WalletCoinRecord] = []
321
321
 
322
- record_list: Set[WalletCoinRecord] = await self.wallet_state_manager.get_spendable_coins_for_wallet(
322
+ record_list: set[WalletCoinRecord] = await self.wallet_state_manager.get_spendable_coins_for_wallet(
323
323
  self.id(), records
324
324
  )
325
325
 
@@ -330,7 +330,7 @@ class CRCATWallet(CATWallet):
330
330
 
331
331
  return result
332
332
 
333
- async def get_confirmed_balance(self, record_list: Optional[Set[WalletCoinRecord]] = None) -> uint128:
333
+ async def get_confirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128:
334
334
  if record_list is None:
335
335
  record_list = await self.wallet_state_manager.coin_store.get_unspent_coins_for_wallet(
336
336
  self.id(), CoinType.CRCAT
@@ -344,7 +344,7 @@ class CRCATWallet(CATWallet):
344
344
  self.log.info(f"Confirmed balance for cat wallet {self.id()} is {amount}")
345
345
  return uint128(amount)
346
346
 
347
- async def get_pending_approval_balance(self, record_list: Optional[Set[WalletCoinRecord]] = None) -> uint128:
347
+ async def get_pending_approval_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128:
348
348
  if record_list is None:
349
349
  record_list = await self.wallet_state_manager.coin_store.get_unspent_coins_for_wallet(
350
350
  self.id(), CoinType.CRCAT_PENDING
@@ -397,12 +397,12 @@ class CRCATWallet(CATWallet):
397
397
 
398
398
  async def _generate_unsigned_spendbundle(
399
399
  self,
400
- payments: List[Payment],
400
+ payments: list[Payment],
401
401
  action_scope: WalletActionScope,
402
402
  fee: uint64 = uint64(0),
403
- cat_discrepancy: Optional[Tuple[int, Program, Program]] = None, # (extra_delta, tail_reveal, tail_solution)
404
- coins: Optional[Set[Coin]] = None,
405
- extra_conditions: Tuple[Condition, ...] = tuple(),
403
+ cat_discrepancy: Optional[tuple[int, Program, Program]] = None, # (extra_delta, tail_reveal, tail_solution)
404
+ coins: Optional[set[Coin]] = None,
405
+ extra_conditions: tuple[Condition, ...] = tuple(),
406
406
  add_authorizations_to_cr_cats: bool = True,
407
407
  ) -> WalletSpendBundle:
408
408
  if cat_discrepancy is not None:
@@ -438,12 +438,14 @@ class CRCATWallet(CATWallet):
438
438
 
439
439
  # Calculate standard puzzle solutions
440
440
  change = selected_cat_amount - starting_amount
441
- primaries: List[Payment] = []
441
+ primaries: list[Payment] = []
442
442
  for payment in payments:
443
443
  primaries.append(payment)
444
444
 
445
445
  if change > 0:
446
- origin_crcat_record = await self.wallet_state_manager.coin_store.get_coin_record(list(cat_coins)[0].name())
446
+ origin_crcat_record = await self.wallet_state_manager.coin_store.get_coin_record(
447
+ next(iter(cat_coins)).name()
448
+ )
447
449
  if origin_crcat_record is None:
448
450
  raise RuntimeError("A CR-CAT coin was selected that we don't have a record for") # pragma: no cover
449
451
  origin_crcat = self.coin_record_to_crcat(origin_crcat_record)
@@ -456,10 +458,10 @@ class CRCATWallet(CATWallet):
456
458
  for payment in payments:
457
459
  if change_puzhash == payment.puzzle_hash and change == payment.amount:
458
460
  # We cannot create two coins has same id, create a new puzhash for the change
459
- change_puzhash = await self.get_new_inner_hash()
461
+ change_puzhash = await self.standard_wallet.get_puzzle_hash(new=True)
460
462
  break
461
463
  else:
462
- change_puzhash = await self.get_new_inner_hash()
464
+ change_puzhash = await self.standard_wallet.get_puzzle_hash(new=True)
463
465
  primaries.append(Payment(change_puzhash, uint64(change), [change_puzhash]))
464
466
 
465
467
  # Find the VC Wallet
@@ -474,12 +476,12 @@ class CRCATWallet(CATWallet):
474
476
 
475
477
  # Loop through the coins we've selected and gather the information we need to spend them
476
478
  vc: Optional[VerifiedCredential] = None
477
- vc_announcements_to_make: List[bytes] = []
478
- inner_spends: List[Tuple[CRCAT, int, Program, Program]] = []
479
+ vc_announcements_to_make: list[bytes] = []
480
+ inner_spends: list[tuple[CRCAT, int, Program, Program]] = []
479
481
  first = True
480
482
  announcement: CreateCoinAnnouncement
481
- coin_ids: List[bytes32] = [coin.name() for coin in cat_coins]
482
- coin_records: List[WalletCoinRecord] = (
483
+ coin_ids: list[bytes32] = [coin.name() for coin in cat_coins]
484
+ coin_records: list[WalletCoinRecord] = (
483
485
  await self.wallet_state_manager.coin_store.get_coin_records(coin_id_filter=HashFilter.include(coin_ids))
484
486
  ).records
485
487
  assert len(coin_records) == len(cat_coins)
@@ -596,17 +598,17 @@ class CRCATWallet(CATWallet):
596
598
 
597
599
  async def generate_signed_transaction(
598
600
  self,
599
- amounts: List[uint64],
600
- puzzle_hashes: List[bytes32],
601
+ amounts: list[uint64],
602
+ puzzle_hashes: list[bytes32],
601
603
  action_scope: WalletActionScope,
602
604
  fee: uint64 = uint64(0),
603
- coins: Optional[Set[Coin]] = None,
604
- memos: Optional[List[List[bytes]]] = None,
605
- extra_conditions: Tuple[Condition, ...] = tuple(),
605
+ coins: Optional[set[Coin]] = None,
606
+ memos: Optional[list[list[bytes]]] = None,
607
+ extra_conditions: tuple[Condition, ...] = tuple(),
606
608
  **kwargs: Unpack[GSTOptionalArgs],
607
609
  ) -> None:
608
610
  # (extra_delta, tail_reveal, tail_solution)
609
- cat_discrepancy: Optional[Tuple[int, Program, Program]] = kwargs.get("cat_discrepancy", None)
611
+ cat_discrepancy: Optional[tuple[int, Program, Program]] = kwargs.get("cat_discrepancy", None)
610
612
  add_authorizations_to_cr_cats: bool = kwargs.get("add_authorizations_to_cr_cats", True)
611
613
  if memos is None:
612
614
  memos = [[] for _ in range(len(puzzle_hashes))]
@@ -616,7 +618,7 @@ class CRCATWallet(CATWallet):
616
618
 
617
619
  payments = []
618
620
  for amount, puzhash, memo_list in zip(amounts, puzzle_hashes, memos):
619
- memos_with_hint: List[bytes] = [puzhash]
621
+ memos_with_hint: list[bytes] = [puzhash]
620
622
  memos_with_hint.extend(memo_list)
621
623
  # Force wrap the outgoing coins in the pending state if not going to us
622
624
  payments.append(
@@ -643,10 +645,10 @@ class CRCATWallet(CATWallet):
643
645
  )
644
646
 
645
647
  async with action_scope.use() as interface:
646
- other_tx_removals: Set[Coin] = {
648
+ other_tx_removals: set[Coin] = {
647
649
  removal for tx in interface.side_effects.transactions for removal in tx.removals
648
650
  }
649
- other_tx_additions: Set[Coin] = {
651
+ other_tx_additions: set[Coin] = {
650
652
  addition for tx in interface.side_effects.transactions for addition in tx.additions
651
653
  }
652
654
  tx_list = [
@@ -679,15 +681,15 @@ class CRCATWallet(CATWallet):
679
681
  min_amount_to_claim: uint64,
680
682
  action_scope: WalletActionScope,
681
683
  fee: uint64 = uint64(0),
682
- coins: Optional[Set[Coin]] = None,
684
+ coins: Optional[set[Coin]] = None,
683
685
  min_coin_amount: Optional[uint64] = None,
684
686
  max_coin_amount: Optional[uint64] = None,
685
- excluded_coin_amounts: Optional[List[uint64]] = None,
687
+ excluded_coin_amounts: Optional[list[uint64]] = None,
686
688
  reuse_puzhash: Optional[bool] = None,
687
- extra_conditions: Tuple[Condition, ...] = tuple(),
689
+ extra_conditions: tuple[Condition, ...] = tuple(),
688
690
  ) -> None:
689
691
  # Select the relevant CR-CAT coins
690
- crcat_records: Set[WalletCoinRecord] = await self.wallet_state_manager.coin_store.get_unspent_coins_for_wallet(
692
+ crcat_records: set[WalletCoinRecord] = await self.wallet_state_manager.coin_store.get_unspent_coins_for_wallet(
691
693
  self.id(), CoinType.CRCAT_PENDING
692
694
  )
693
695
  if coins is None:
@@ -730,7 +732,7 @@ class CRCATWallet(CATWallet):
730
732
  ).get_tree_hash()
731
733
 
732
734
  # Make CR-CAT bundle
733
- crcats_and_puzhashes: List[Tuple[CRCAT, bytes32]] = [
735
+ crcats_and_puzhashes: list[tuple[CRCAT, bytes32]] = [
734
736
  (crcat, CRCATWallet.get_metadata_from_record(record).inner_puzzle_hash)
735
737
  for record in [r for r in crcat_records if r.coin in coins]
736
738
  for crcat in [self.coin_record_to_crcat(record)]
@@ -775,8 +777,8 @@ class CRCATWallet(CATWallet):
775
777
  )
776
778
 
777
779
  async with action_scope.use() as interface:
778
- other_additions: Set[Coin] = {rem for tx in interface.side_effects.transactions for rem in tx.additions}
779
- other_removals: Set[Coin] = {rem for tx in interface.side_effects.transactions for rem in tx.removals}
780
+ other_additions: set[Coin] = {rem for tx in interface.side_effects.transactions for rem in tx.additions}
781
+ other_removals: set[Coin] = {rem for tx in interface.side_effects.transactions for rem in tx.removals}
780
782
  interface.side_effects.transactions.append(
781
783
  TransactionRecord(
782
784
  confirmed_at_height=uint32(0),
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Any, Callable, Dict, List, Optional, Tuple
4
+ from typing import Any, Callable, Optional
5
5
 
6
6
  from clvm_tools.binutils import disassemble
7
7
 
@@ -23,11 +23,11 @@ class CROuterPuzzle:
23
23
  _get_inner_solution: Callable[[PuzzleInfo, Program], Optional[Program]]
24
24
 
25
25
  def match(self, puzzle: UncurriedPuzzle) -> Optional[PuzzleInfo]:
26
- args: Optional[Tuple[List[bytes32], Program, Program]] = match_cr_layer(puzzle)
26
+ args: Optional[tuple[list[bytes32], Program, Program]] = match_cr_layer(puzzle)
27
27
  if args is None:
28
28
  return None
29
29
  authorized_providers, proofs_checker, inner_puzzle = args
30
- constructor_dict: Dict[str, Any] = {
30
+ constructor_dict: dict[str, Any] = {
31
31
  "type": "credential restricted",
32
32
  "authorized_providers": ["0x" + ap.hex() for ap in authorized_providers],
33
33
  "proofs_checker": disassemble(proofs_checker),
@@ -38,7 +38,7 @@ class CROuterPuzzle:
38
38
  return PuzzleInfo(constructor_dict)
39
39
 
40
40
  def get_inner_puzzle(self, constructor: PuzzleInfo, puzzle_reveal: UncurriedPuzzle) -> Optional[Program]:
41
- args: Optional[Tuple[List[bytes32], Program, Program]] = match_cr_layer(puzzle_reveal)
41
+ args: Optional[tuple[list[bytes32], Program, Program]] = match_cr_layer(puzzle_reveal)
42
42
  if args is None:
43
43
  raise ValueError("This driver is not for the specified puzzle reveal") # pragma: no cover
44
44
  _, _, inner_puzzle = args
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass, replace
4
- from typing import List, Optional, Tuple, Type, TypeVar
4
+ from typing import Optional, TypeVar
5
5
 
6
6
  from chia.types.blockchain_format.coin import Coin
7
7
  from chia.types.blockchain_format.program import Program
@@ -103,7 +103,7 @@ def create_covenant_layer(initial_puzzle_hash: bytes32, parent_morpher: Program,
103
103
  )
104
104
 
105
105
 
106
- def match_covenant_layer(uncurried_puzzle: UncurriedPuzzle) -> Optional[Tuple[bytes32, Program, Program]]:
106
+ def match_covenant_layer(uncurried_puzzle: UncurriedPuzzle) -> Optional[tuple[bytes32, Program, Program]]:
107
107
  if uncurried_puzzle.mod == COVENANT_LAYER:
108
108
  return (
109
109
  bytes32(uncurried_puzzle.args.at("f").as_atom()),
@@ -166,7 +166,7 @@ def create_did_tp(
166
166
  EML_DID_TP_FULL_HASH = create_did_tp().get_tree_hash()
167
167
 
168
168
 
169
- def match_did_tp(uncurried_puzzle: UncurriedPuzzle) -> Optional[Tuple[()]]:
169
+ def match_did_tp(uncurried_puzzle: UncurriedPuzzle) -> Optional[tuple[()]]:
170
170
  if uncurried_puzzle.mod == EML_DID_TP:
171
171
  return ()
172
172
  else:
@@ -198,7 +198,7 @@ def create_viral_backdoor(hidden_puzzle_hash: bytes32, inner_puzzle_hash: bytes3
198
198
  )
199
199
 
200
200
 
201
- def match_viral_backdoor(uncurried_puzzle: UncurriedPuzzle) -> Optional[Tuple[bytes32, bytes32]]:
201
+ def match_viral_backdoor(uncurried_puzzle: UncurriedPuzzle) -> Optional[tuple[bytes32, bytes32]]:
202
202
  if uncurried_puzzle.mod == VIRAL_BACKDOOR:
203
203
  return bytes32(uncurried_puzzle.args.at("rf").as_atom()), bytes32(uncurried_puzzle.args.at("rrf").as_atom())
204
204
  else:
@@ -328,14 +328,14 @@ class VerifiedCredential(Streamable):
328
328
 
329
329
  @classmethod
330
330
  def launch(
331
- cls: Type[_T_VerifiedCredential],
332
- origin_coins: List[Coin],
331
+ cls: type[_T_VerifiedCredential],
332
+ origin_coins: list[Coin],
333
333
  provider_id: bytes32,
334
334
  new_inner_puzzle_hash: bytes32,
335
- memos: List[bytes32],
335
+ memos: list[bytes32],
336
336
  fee: uint64 = uint64(0),
337
- extra_conditions: Tuple[Condition, ...] = tuple(),
338
- ) -> Tuple[List[Program], List[CoinSpend], _T_VerifiedCredential]:
337
+ extra_conditions: tuple[Condition, ...] = tuple(),
338
+ ) -> tuple[list[Program], list[CoinSpend], _T_VerifiedCredential]:
339
339
  """
340
340
  Launch a VC.
341
341
 
@@ -414,7 +414,7 @@ class VerifiedCredential(Streamable):
414
414
  )
415
415
 
416
416
  primary_dpuz: Program = Program.to((1, create_launcher_conditions))
417
- additional_dpuzs: List[Program] = [Program.to((1, [[61, second_launcher_announcement_hash]]))]
417
+ additional_dpuzs: list[Program] = [Program.to((1, [[61, second_launcher_announcement_hash]]))]
418
418
  return (
419
419
  [primary_dpuz, *additional_dpuzs],
420
420
  [
@@ -496,7 +496,7 @@ class VerifiedCredential(Streamable):
496
496
  ####################################################################################################################
497
497
 
498
498
  @staticmethod
499
- def is_vc(puzzle_reveal: UncurriedPuzzle) -> Tuple[bool, str]:
499
+ def is_vc(puzzle_reveal: UncurriedPuzzle) -> tuple[bool, str]:
500
500
  """
501
501
  This takes an (uncurried) puzzle reveal and returns a boolean for whether the puzzle is a VC and an error
502
502
  message for if the puzzle is a mismatch. Returns True for VC launcher spends.
@@ -555,7 +555,7 @@ class VerifiedCredential(Streamable):
555
555
  return True, ""
556
556
 
557
557
  @classmethod
558
- def get_next_from_coin_spend(cls: Type[_T_VerifiedCredential], parent_spend: CoinSpend) -> _T_VerifiedCredential:
558
+ def get_next_from_coin_spend(cls: type[_T_VerifiedCredential], parent_spend: CoinSpend) -> _T_VerifiedCredential:
559
559
  """
560
560
  Given a coin spend, this will return the next VC that was create as an output of that spend. This is the main
561
561
  method to use when syncing. If a spend has been identified as having a VC puzzle reveal, running this method
@@ -585,7 +585,7 @@ class VerifiedCredential(Streamable):
585
585
  dpuz: Program = solution.at("rrf").at("f").at("f")
586
586
  dsol: Program = solution.at("rrf").at("f").at("rf")
587
587
 
588
- conditions: List[Program] = list(dpuz.run(dsol).as_iter())
588
+ conditions: list[Program] = list(dpuz.run(dsol).as_iter())
589
589
  remark_condition: Program = next(c for c in conditions if c.at("f").as_int() == 1)
590
590
  inner_puzzle_hash = bytes32(remark_condition.at("rf").as_atom())
591
591
  magic_condition: Program = next(c for c in conditions if c.at("f").as_int() == -10)
@@ -707,7 +707,7 @@ class VerifiedCredential(Streamable):
707
707
  inner_solution: Program,
708
708
  new_proof_hash: Optional[bytes32] = None,
709
709
  new_proof_provider: Optional[bytes32] = None,
710
- ) -> Tuple[Optional[CreatePuzzleAnnouncement], CoinSpend, VerifiedCredential]:
710
+ ) -> tuple[Optional[CreatePuzzleAnnouncement], CoinSpend, VerifiedCredential]:
711
711
  """
712
712
  Given an inner puzzle reveal and solution, spend the VC (potentially updating the proofs in the process).
713
713
  Note that the inner puzzle is already expected to output the 'magic' condition (which can be created above).
@@ -760,7 +760,7 @@ class VerifiedCredential(Streamable):
760
760
 
761
761
  def activate_backdoor(
762
762
  self, provider_innerpuzhash: bytes32, announcement_nonce: Optional[bytes32] = None
763
- ) -> Tuple[CreatePuzzleAnnouncement, CoinSpend]:
763
+ ) -> tuple[CreatePuzzleAnnouncement, CoinSpend]:
764
764
  """
765
765
  Activates the backdoor in the VC to revoke the credentials and remove the provider's DID.
766
766
 
@@ -810,7 +810,7 @@ class VerifiedCredential(Streamable):
810
810
  Private method that creates the next VC class instance.
811
811
  """
812
812
  slightly_incomplete_vc: VerifiedCredential = VerifiedCredential(
813
- Coin(self.coin.name(), bytes32([0] * 32), next_amount),
813
+ Coin(self.coin.name(), bytes32.zeros, next_amount),
814
814
  LineageProof(
815
815
  self.coin.parent_coin_info,
816
816
  self.construct_exigent_metadata_layer().get_tree_hash(),
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
4
  from functools import cmp_to_key
5
- from typing import Dict, List, Optional, Tuple, Type, TypeVar
5
+ from typing import Optional, TypeVar
6
6
 
7
7
  from aiosqlite import Row
8
8
 
@@ -19,10 +19,10 @@ from chia.wallet.vc_wallet.vc_drivers import VCLineageProof, VerifiedCredential
19
19
 
20
20
  @dataclasses.dataclass(frozen=True)
21
21
  class VCProofs:
22
- key_value_pairs: Dict[str, str]
22
+ key_value_pairs: dict[str, str]
23
23
 
24
24
  def as_program(self) -> Program:
25
- def byte_sort_pairs(f1: Tuple[str, str], f2: Tuple[str, str]) -> int:
25
+ def byte_sort_pairs(f1: tuple[str, str], f2: tuple[str, str]) -> int:
26
26
  return 1 if Program.to([10, (1, f1[0]), (1, f2[0])]).run([]) == Program.to(None) else -1
27
27
 
28
28
  prog: Program = Program.to(
@@ -45,7 +45,7 @@ class VCProofs:
45
45
  first: Program = prog.at("f")
46
46
  rest: Program = prog.at("r")
47
47
  if first.atom is None and rest.atom is None:
48
- final_dict: Dict[str, str] = {}
48
+ final_dict: dict[str, str] = {}
49
49
  final_dict.update(VCProofs.from_program(first).key_value_pairs)
50
50
  final_dict.update(VCProofs.from_program(rest).key_value_pairs)
51
51
  return VCProofs(final_dict)
@@ -54,7 +54,7 @@ class VCProofs:
54
54
  else:
55
55
  raise ValueError("Malformatted VCProofs program") # pragma: no cover
56
56
 
57
- def prove_keys(self, keys: List[str], tree: Optional[Program] = None) -> Program:
57
+ def prove_keys(self, keys: list[str], tree: Optional[Program] = None) -> Program:
58
58
  if tree is None:
59
59
  tree = self.as_program()
60
60
 
@@ -114,7 +114,7 @@ class VCStore:
114
114
  db_wrapper: DBWrapper2
115
115
 
116
116
  @classmethod
117
- async def create(cls: Type[_T_VCStore], db_wrapper: DBWrapper2) -> _T_VCStore:
117
+ async def create(cls: type[_T_VCStore], db_wrapper: DBWrapper2) -> _T_VCStore:
118
118
  self = cls()
119
119
 
120
120
  self.db_wrapper = db_wrapper
@@ -191,7 +191,7 @@ class VCStore:
191
191
  return _row_to_vc_record(row)
192
192
  return None
193
193
 
194
- async def get_vc_records_by_providers(self, provider_ids: List[bytes32]) -> List[VCRecord]: # pragma: no cover
194
+ async def get_vc_records_by_providers(self, provider_ids: list[bytes32]) -> list[VCRecord]: # pragma: no cover
195
195
  """
196
196
  Checks DB for VCs with a proof_provider in a specified list and returns them.
197
197
  """
@@ -206,7 +206,7 @@ class VCStore:
206
206
 
207
207
  return [_row_to_vc_record(row) for row in rows]
208
208
 
209
- async def get_unconfirmed_vcs(self) -> List[VCRecord]:
209
+ async def get_unconfirmed_vcs(self) -> list[VCRecord]:
210
210
  """
211
211
  Returns all VCs that have not yet been marked confirmed (confirmed_height == 0)
212
212
  """
@@ -222,7 +222,7 @@ class VCStore:
222
222
  self,
223
223
  start_index: int = 0,
224
224
  count: int = 50,
225
- ) -> List[VCRecord]:
225
+ ) -> list[VCRecord]:
226
226
  """
227
227
  Return all VCs
228
228
  :param start_index: Start index