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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
@@ -5,12 +5,13 @@ import json
5
5
  import logging
6
6
  import math
7
7
  import time
8
- from typing import TYPE_CHECKING, Any, ClassVar, Dict, List, Optional, Set, Tuple, Type, TypeVar, cast
8
+ from typing import TYPE_CHECKING, Any, ClassVar, Optional, TypeVar, cast
9
9
 
10
10
  from chia_rs import AugSchemeMPL, G1Element, G2Element
11
11
  from clvm.casts import int_from_bytes, int_to_bytes
12
12
  from typing_extensions import Unpack
13
13
 
14
+ import chia.server.api_protocol
14
15
  import chia.wallet.singleton
15
16
  from chia.protocols.wallet_protocol import CoinState
16
17
  from chia.server.ws_connection import WSChiaConnection
@@ -81,7 +82,7 @@ class NFTWallet:
81
82
 
82
83
  @classmethod
83
84
  async def create_new_nft_wallet(
84
- cls: Type[_T_NFTWallet],
85
+ cls: type[_T_NFTWallet],
85
86
  wallet_state_manager: Any,
86
87
  wallet: Wallet,
87
88
  did_id: Optional[bytes32] = None,
@@ -111,7 +112,7 @@ class NFTWallet:
111
112
 
112
113
  @classmethod
113
114
  async def create(
114
- cls: Type[_T_NFTWallet],
115
+ cls: type[_T_NFTWallet],
115
116
  wallet_state_manager: Any,
116
117
  wallet: Wallet,
117
118
  wallet_info: WalletInfo,
@@ -138,22 +139,22 @@ class NFTWallet:
138
139
  def get_did(self) -> Optional[bytes32]:
139
140
  return self.did_id
140
141
 
141
- async def get_confirmed_balance(self, record_list: Optional[Set[WalletCoinRecord]] = None) -> uint128:
142
+ async def get_confirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128:
142
143
  """The NFT wallet doesn't really have a balance."""
143
144
  return uint128(0)
144
145
 
145
- async def get_unconfirmed_balance(self, record_list: Optional[Set[WalletCoinRecord]] = None) -> uint128:
146
+ async def get_unconfirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128:
146
147
  """The NFT wallet doesn't really have a balance."""
147
148
  return uint128(0)
148
149
 
149
- async def get_spendable_balance(self, unspent_records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
150
+ async def get_spendable_balance(self, unspent_records: Optional[set[WalletCoinRecord]] = None) -> uint128:
150
151
  """The NFT wallet doesn't really have a balance."""
151
152
  return uint128(0)
152
153
 
153
154
  async def get_pending_change_balance(self) -> uint64:
154
155
  return uint64(0)
155
156
 
156
- async def get_max_send_amount(self, records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
157
+ async def get_max_send_amount(self, records: Optional[set[WalletCoinRecord]] = None) -> uint128:
157
158
  """This is the confirmed balance, which we set to 0 as the NFT wallet doesn't have one."""
158
159
  return uint128(0)
159
160
 
@@ -191,15 +192,15 @@ class NFTWallet:
191
192
  metadata, p2_puzzle_hash = get_metadata_and_phs(uncurried_nft, data.parent_coin_spend.solution)
192
193
  self.log.debug("Got back puzhash from solution: %s", p2_puzzle_hash)
193
194
  self.log.debug("Got back updated metadata: %s", metadata)
194
- derivation_record: Optional[DerivationRecord] = (
195
- await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(p2_puzzle_hash)
196
- )
195
+ derivation_record: Optional[
196
+ DerivationRecord
197
+ ] = await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(p2_puzzle_hash)
197
198
  self.log.debug("Record for %s is: %s", p2_puzzle_hash, derivation_record)
198
199
  if derivation_record is None:
199
200
  self.log.debug("Not our NFT, pointing to %s, skipping", p2_puzzle_hash)
200
201
  return
201
202
  p2_puzzle = puzzle_for_pk(derivation_record.pubkey)
202
- launcher_coin_states: List[CoinState] = await self.wallet_state_manager.wallet_node.get_coin_state(
203
+ launcher_coin_states: list[CoinState] = await self.wallet_state_manager.wallet_node.get_coin_state(
203
204
  [singleton_id], peer=peer
204
205
  )
205
206
  assert (
@@ -291,14 +292,14 @@ class NFTWallet:
291
292
  if did_wallet_info.origin_coin.name() == self.did_id:
292
293
  return
293
294
  self.log.info(f"No NFT, deleting wallet {self.wallet_info.name} ...")
294
- await self.wallet_state_manager.user_store.delete_wallet(self.wallet_info.id)
295
+ await self.wallet_state_manager.delete_wallet(self.wallet_info.id)
295
296
  self.wallet_state_manager.wallets.pop(self.wallet_info.id)
296
297
  else:
297
298
  self.log.info("Tried removing NFT coin that doesn't exist: %s", coin.name())
298
299
 
299
300
  async def get_did_approval_info(
300
301
  self,
301
- nft_ids: List[bytes32],
302
+ nft_ids: list[bytes32],
302
303
  action_scope: WalletActionScope,
303
304
  did_id: Optional[bytes32] = None,
304
305
  ) -> bytes32:
@@ -334,7 +335,7 @@ class NFTWallet:
334
335
  percentage: uint16 = uint16(0),
335
336
  did_id: Optional[bytes] = None,
336
337
  fee: uint64 = uint64(0),
337
- extra_conditions: Tuple[Condition, ...] = tuple(),
338
+ extra_conditions: tuple[Condition, ...] = tuple(),
338
339
  ) -> bytes32:
339
340
  """
340
341
  This must be called under the wallet state manager lock
@@ -443,7 +444,7 @@ class NFTWallet:
443
444
  uri: str,
444
445
  action_scope: WalletActionScope,
445
446
  fee: uint64 = uint64(0),
446
- extra_conditions: Tuple[Condition, ...] = tuple(),
447
+ extra_conditions: tuple[Condition, ...] = tuple(),
447
448
  ) -> None:
448
449
  uncurried_nft = UncurriedNFT.uncurry(*nft_coin_info.full_puzzle.uncurry())
449
450
  assert uncurried_nft is not None
@@ -466,7 +467,7 @@ class NFTWallet:
466
467
  await self.update_coin_status(nft_coin_info.coin.name(), True)
467
468
  self.wallet_state_manager.state_changed("nft_coin_updated", self.wallet_info.id)
468
469
 
469
- async def get_current_nfts(self, start_index: int = 0, count: int = 50) -> List[NFTCoinInfo]:
470
+ async def get_current_nfts(self, start_index: int = 0, count: int = 50) -> list[NFTCoinInfo]:
470
471
  return await self.nft_store.get_nft_list(wallet_id=self.id(), start_index=start_index, count=count)
471
472
 
472
473
  async def get_nft_count(self) -> int:
@@ -502,7 +503,7 @@ class NFTWallet:
502
503
  else:
503
504
  return puzzle_info
504
505
 
505
- async def sign_message(self, message: str, nft: NFTCoinInfo, mode: SigningMode) -> Tuple[G1Element, G2Element]:
506
+ async def sign_message(self, message: str, nft: NFTCoinInfo, mode: SigningMode) -> tuple[G1Element, G2Element]:
506
507
  uncurried_nft = UncurriedNFT.uncurry(*nft.full_puzzle.uncurry())
507
508
  if uncurried_nft is not None:
508
509
  p2_puzzle = uncurried_nft.p2_puzzle
@@ -527,7 +528,7 @@ class NFTWallet:
527
528
  nft_id: bytes32,
528
529
  *args: Any,
529
530
  **kwargs: Any,
530
- ) -> Set[Coin]:
531
+ ) -> set[Coin]:
531
532
  nft_coin: Optional[NFTCoinInfo] = await self.get_nft(nft_id)
532
533
  if nft_coin is None:
533
534
  raise ValueError("An asset ID was specified that this wallet doesn't track")
@@ -565,21 +566,21 @@ class NFTWallet:
565
566
 
566
567
  async def generate_signed_transaction(
567
568
  self,
568
- amounts: List[uint64],
569
- puzzle_hashes: List[bytes32],
569
+ amounts: list[uint64],
570
+ puzzle_hashes: list[bytes32],
570
571
  action_scope: WalletActionScope,
571
572
  fee: uint64 = uint64(0),
572
- coins: Optional[Set[Coin]] = None,
573
- memos: Optional[List[List[bytes]]] = None,
574
- extra_conditions: Tuple[Condition, ...] = tuple(),
573
+ coins: Optional[set[Coin]] = None,
574
+ memos: Optional[list[list[bytes]]] = None,
575
+ extra_conditions: tuple[Condition, ...] = tuple(),
575
576
  **kwargs: Unpack[GSTOptionalArgs],
576
577
  ) -> None:
577
578
  nft_coin: Optional[NFTCoinInfo] = kwargs.get("nft_coin", None)
578
579
  new_owner: Optional[bytes] = kwargs.get("new_owner", None)
579
580
  new_did_inner_hash: Optional[bytes] = kwargs.get("new_did_inner_hash", None)
580
581
  trade_prices_list: Optional[Program] = kwargs.get("trade_prices_list", None)
581
- additional_bundles: List[WalletSpendBundle] = kwargs.get("additional_bundles", [])
582
- metadata_update: Optional[Tuple[str, str]] = kwargs.get("metadata_update", None)
582
+ additional_bundles: list[WalletSpendBundle] = kwargs.get("additional_bundles", [])
583
+ metadata_update: Optional[tuple[str, str]] = kwargs.get("metadata_update", None)
583
584
  if memos is None:
584
585
  memos = [[] for _ in range(len(puzzle_hashes))]
585
586
 
@@ -588,7 +589,7 @@ class NFTWallet:
588
589
 
589
590
  payments = []
590
591
  for amount, puzhash, memo_list in zip(amounts, puzzle_hashes, memos):
591
- memos_with_hint: List[bytes] = [puzhash]
592
+ memos_with_hint: list[bytes] = [puzhash]
592
593
  memos_with_hint.extend(memo_list)
593
594
  payments.append(Payment(puzhash, amount, memos_with_hint))
594
595
 
@@ -605,13 +606,13 @@ class NFTWallet:
605
606
  metadata_update=metadata_update,
606
607
  extra_conditions=extra_conditions,
607
608
  )
608
- spend_bundle = WalletSpendBundle.aggregate([unsigned_spend_bundle] + additional_bundles)
609
+ spend_bundle = WalletSpendBundle.aggregate([unsigned_spend_bundle, *additional_bundles])
609
610
 
610
611
  async with action_scope.use() as interface:
611
- other_tx_removals: Set[Coin] = {
612
+ other_tx_removals: set[Coin] = {
612
613
  removal for tx in interface.side_effects.transactions for removal in tx.removals
613
614
  }
614
- other_tx_additions: Set[Coin] = {
615
+ other_tx_additions: set[Coin] = {
615
616
  addition for tx in interface.side_effects.transactions for addition in tx.additions
616
617
  }
617
618
  tx = TransactionRecord(
@@ -638,16 +639,16 @@ class NFTWallet:
638
639
 
639
640
  async def generate_unsigned_spendbundle(
640
641
  self,
641
- payments: List[Payment],
642
+ payments: list[Payment],
642
643
  action_scope: WalletActionScope,
643
644
  fee: uint64 = uint64(0),
644
- coins: Optional[Set[Coin]] = None,
645
+ coins: Optional[set[Coin]] = None,
645
646
  new_owner: Optional[bytes] = None,
646
647
  new_did_inner_hash: Optional[bytes] = None,
647
648
  trade_prices_list: Optional[Program] = None,
648
- metadata_update: Optional[Tuple[str, str]] = None,
649
+ metadata_update: Optional[tuple[str, str]] = None,
649
650
  nft_coin: Optional[NFTCoinInfo] = None,
650
- extra_conditions: Tuple[Condition, ...] = tuple(),
651
+ extra_conditions: tuple[Condition, ...] = tuple(),
651
652
  ) -> WalletSpendBundle:
652
653
  if nft_coin is None:
653
654
  if coins is None or not len(coins) == 1:
@@ -671,10 +672,10 @@ class NFTWallet:
671
672
  if unft.supports_did:
672
673
  if new_owner is None:
673
674
  # If no new owner was specified and we're sending this to ourselves, let's not reset the DID
674
- derivation_record: Optional[DerivationRecord] = (
675
- await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(
676
- payments[0].puzzle_hash
677
- )
675
+ derivation_record: Optional[
676
+ DerivationRecord
677
+ ] = await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(
678
+ payments[0].puzzle_hash
678
679
  )
679
680
  if derivation_record is not None:
680
681
  new_owner = unft.owner_did
@@ -720,10 +721,10 @@ class NFTWallet:
720
721
 
721
722
  @staticmethod
722
723
  def royalty_calculation(
723
- royalty_assets_dict: Dict[Any, Tuple[Any, uint16]],
724
- fungible_asset_dict: Dict[Any, uint64],
725
- ) -> Dict[Any, List[Dict[str, Any]]]:
726
- summary_dict: Dict[Any, List[Dict[str, Any]]] = {}
724
+ royalty_assets_dict: dict[Any, tuple[Any, uint16]],
725
+ fungible_asset_dict: dict[Any, uint64],
726
+ ) -> dict[Any, list[dict[str, Any]]]:
727
+ summary_dict: dict[Any, list[dict[str, Any]]] = {}
727
728
  for id, royalty_info in royalty_assets_dict.items():
728
729
  address, percentage = royalty_info
729
730
  summary_dict[id] = []
@@ -741,14 +742,14 @@ class NFTWallet:
741
742
  @staticmethod
742
743
  async def make_nft1_offer(
743
744
  wallet_state_manager: Any,
744
- offer_dict: Dict[Optional[bytes32], int],
745
- driver_dict: Dict[bytes32, PuzzleInfo],
745
+ offer_dict: dict[Optional[bytes32], int],
746
+ driver_dict: dict[bytes32, PuzzleInfo],
746
747
  action_scope: WalletActionScope,
747
748
  fee: uint64,
748
- extra_conditions: Tuple[Condition, ...],
749
+ extra_conditions: tuple[Condition, ...],
749
750
  ) -> Offer:
750
751
  # First, let's take note of all the royalty enabled NFTs
751
- royalty_nft_asset_dict: Dict[bytes32, int] = {}
752
+ royalty_nft_asset_dict: dict[bytes32, int] = {}
752
753
  for asset, amount in offer_dict.items():
753
754
  if asset is not None and driver_dict[asset].check_type( # check if asset is an Royalty Enabled NFT
754
755
  [
@@ -761,7 +762,7 @@ class NFTWallet:
761
762
  royalty_nft_asset_dict[asset] = amount
762
763
 
763
764
  # Then, all of the things that trigger royalties
764
- fungible_asset_dict: Dict[Optional[bytes32], int] = {}
765
+ fungible_asset_dict: dict[Optional[bytes32], int] = {}
765
766
  for asset, amount in offer_dict.items():
766
767
  if asset is None or driver_dict[asset].type() != AssetType.SINGLETON.value:
767
768
  fungible_asset_dict[asset] = amount
@@ -775,7 +776,7 @@ class NFTWallet:
775
776
  elif amount < 0:
776
777
  offer_side_royalty_split += 1
777
778
 
778
- trade_prices: List[Tuple[uint64, bytes32]] = []
779
+ trade_prices: list[tuple[uint64, bytes32]] = []
779
780
  for asset, amount in fungible_asset_dict.items(): # requested fungible items
780
781
  if amount > 0 and offer_side_royalty_split > 0:
781
782
  settlement_ph: bytes32 = (
@@ -783,8 +784,8 @@ class NFTWallet:
783
784
  )
784
785
  trade_prices.append((uint64(math.floor(amount / offer_side_royalty_split)), settlement_ph))
785
786
 
786
- required_royalty_info: List[Tuple[bytes32, bytes32, uint16]] = [] # [(launcher_id, address, percentage)]
787
- offered_royalty_percentages: Dict[bytes32, uint16] = {}
787
+ required_royalty_info: list[tuple[bytes32, bytes32, uint16]] = [] # [(launcher_id, address, percentage)]
788
+ offered_royalty_percentages: dict[bytes32, uint16] = {}
788
789
  for asset, amount in royalty_nft_asset_dict.items(): # royalty enabled NFTs
789
790
  transfer_info = driver_dict[asset].also().also() # type: ignore
790
791
  assert isinstance(transfer_info, PuzzleInfo)
@@ -806,10 +807,10 @@ class NFTWallet:
806
807
  else:
807
808
  offered_royalty_percentages[asset] = uint16(royalty_percentage)
808
809
 
809
- royalty_payments: Dict[Optional[bytes32], List[Tuple[bytes32, Payment]]] = {}
810
+ royalty_payments: dict[Optional[bytes32], list[tuple[bytes32, Payment]]] = {}
810
811
  for asset, amount in fungible_asset_dict.items(): # offered fungible items
811
812
  if amount < 0 and request_side_royalty_split > 0:
812
- payment_list: List[Tuple[bytes32, Payment]] = []
813
+ payment_list: list[tuple[bytes32, Payment]] = []
813
814
  for launcher_id, address, percentage in required_royalty_info:
814
815
  extra_royalty_amount = uint64(
815
816
  math.floor(math.floor(abs(amount) / request_side_royalty_split) * (percentage / 10000))
@@ -823,14 +824,14 @@ class NFTWallet:
823
824
  p2_ph = await wallet_state_manager.main_wallet.get_puzzle_hash(
824
825
  new=not action_scope.config.tx_config.reuse_puzhash
825
826
  )
826
- requested_payments: Dict[Optional[bytes32], List[Payment]] = {}
827
+ requested_payments: dict[Optional[bytes32], list[Payment]] = {}
827
828
  for asset, amount in offer_dict.items():
828
829
  if amount > 0:
829
830
  requested_payments[asset] = [Payment(p2_ph, uint64(amount), [p2_ph] if asset is not None else [])]
830
831
 
831
832
  # Find all the coins we're offering
832
- offered_coins_by_asset: Dict[Optional[bytes32], Set[Coin]] = {}
833
- all_offered_coins: Set[Coin] = set()
833
+ offered_coins_by_asset: dict[Optional[bytes32], set[Coin]] = {}
834
+ all_offered_coins: set[Coin] = set()
834
835
  for asset, amount in offer_dict.items():
835
836
  if amount < 0:
836
837
  if asset is None:
@@ -845,17 +846,17 @@ class NFTWallet:
845
846
  coin_amount_needed: int = abs(amount) + royalty_amount + fee
846
847
  else:
847
848
  coin_amount_needed = abs(amount) + royalty_amount
848
- offered_coins: Set[Coin] = await wallet.get_coins_to_offer(asset, coin_amount_needed, action_scope)
849
+ offered_coins: set[Coin] = await wallet.get_coins_to_offer(asset, coin_amount_needed, action_scope)
849
850
  if len(offered_coins) == 0:
850
851
  raise ValueError(f"Did not have asset ID {asset.hex() if asset is not None else 'XCH'} to offer")
851
852
  offered_coins_by_asset[asset] = offered_coins
852
853
  all_offered_coins.update(offered_coins)
853
854
 
854
855
  # Notarize the payments and get the announcements for the bundle
855
- notarized_payments: Dict[Optional[bytes32], List[NotarizedPayment]] = Offer.notarize_payments(
856
+ notarized_payments: dict[Optional[bytes32], list[NotarizedPayment]] = Offer.notarize_payments(
856
857
  requested_payments, list(all_offered_coins)
857
858
  )
858
- announcements_to_assert: List[AssertPuzzleAnnouncement] = Offer.calculate_announcements(
859
+ announcements_to_assert: list[AssertPuzzleAnnouncement] = Offer.calculate_announcements(
859
860
  notarized_payments, driver_dict
860
861
  )
861
862
  for asset, payments in royalty_payments.items():
@@ -877,8 +878,8 @@ class NFTWallet:
877
878
  )
878
879
 
879
880
  # Create all of the transactions
880
- all_transactions: List[TransactionRecord] = []
881
- additional_bundles: List[WalletSpendBundle] = []
881
+ all_transactions: list[TransactionRecord] = []
882
+ additional_bundles: list[WalletSpendBundle] = []
882
883
  # standard pays the fee if possible
883
884
  fee_left_to_pay: uint64 = uint64(0) if None in offer_dict and offer_dict[None] < 0 else fee
884
885
 
@@ -923,8 +924,8 @@ class NFTWallet:
923
924
  else:
924
925
  payments = royalty_payments[asset] if asset in royalty_payments else []
925
926
  await wallet.generate_signed_transaction(
926
- [abs(amount), sum(p.amount for _, p in payments)],
927
- [OFFER_MOD_HASH, OFFER_MOD_HASH],
927
+ [abs(amount)] + ([sum(p.amount for _, p in payments)] if payments != [] else []),
928
+ [OFFER_MOD_HASH] + ([OFFER_MOD_HASH] if payments != [] else []),
928
929
  inner_action_scope,
929
930
  fee=fee_left_to_pay,
930
931
  coins=offered_coins_by_asset[asset],
@@ -949,8 +950,8 @@ class NFTWallet:
949
950
  royalty_coin: Optional[Coin] = None
950
951
  parent_spend: Optional[CoinSpend] = None
951
952
  while True:
952
- duplicate_payments: List[Tuple[bytes32, Payment]] = []
953
- deduped_payment_list: List[Tuple[bytes32, Payment]] = []
953
+ duplicate_payments: list[tuple[bytes32, Payment]] = []
954
+ deduped_payment_list: list[tuple[bytes32, Payment]] = []
954
955
  for launcher_id, payment in payments:
955
956
  if payment in [p for _, p in deduped_payment_list]:
956
957
  duplicate_payments.append((launcher_id, payment))
@@ -1050,12 +1051,12 @@ class NFTWallet:
1050
1051
 
1051
1052
  async def set_bulk_nft_did(
1052
1053
  self,
1053
- nft_list: List[NFTCoinInfo],
1054
+ nft_list: list[NFTCoinInfo],
1054
1055
  did_id: bytes,
1055
1056
  action_scope: WalletActionScope,
1056
1057
  fee: uint64 = uint64(0),
1057
- announcement_ids: List[bytes32] = [],
1058
- extra_conditions: Tuple[Condition, ...] = tuple(),
1058
+ announcement_ids: list[bytes32] = [],
1059
+ extra_conditions: tuple[Condition, ...] = tuple(),
1059
1060
  ) -> None:
1060
1061
  self.log.debug("Setting NFT DID with parameters: nft=%s did=%s", nft_list, did_id)
1061
1062
  nft_ids = []
@@ -1094,11 +1095,11 @@ class NFTWallet:
1094
1095
 
1095
1096
  async def bulk_transfer_nft(
1096
1097
  self,
1097
- nft_list: List[NFTCoinInfo],
1098
+ nft_list: list[NFTCoinInfo],
1098
1099
  puzzle_hash: bytes32,
1099
1100
  action_scope: WalletActionScope,
1100
1101
  fee: uint64 = uint64(0),
1101
- extra_conditions: Tuple[Condition, ...] = tuple(),
1102
+ extra_conditions: tuple[Condition, ...] = tuple(),
1102
1103
  ) -> None:
1103
1104
  self.log.debug("Transfer NFTs %s to %s", nft_list, puzzle_hash.hex())
1104
1105
  first = True
@@ -1125,7 +1126,7 @@ class NFTWallet:
1125
1126
  did_id: bytes,
1126
1127
  action_scope: WalletActionScope,
1127
1128
  fee: uint64 = uint64(0),
1128
- extra_conditions: Tuple[Condition, ...] = tuple(),
1129
+ extra_conditions: tuple[Condition, ...] = tuple(),
1129
1130
  ) -> None:
1130
1131
  self.log.debug("Setting NFT DID with parameters: nft=%s did=%s", nft_coin_info, did_id)
1131
1132
  unft = UncurriedNFT.uncurry(*nft_coin_info.full_puzzle.uncurry())
@@ -1152,19 +1153,19 @@ class NFTWallet:
1152
1153
 
1153
1154
  async def mint_from_did(
1154
1155
  self,
1155
- metadata_list: List[Dict[str, Any]],
1156
+ metadata_list: list[dict[str, Any]],
1156
1157
  action_scope: WalletActionScope,
1157
- target_list: Optional[List[bytes32]] = [],
1158
+ target_list: Optional[list[bytes32]] = [],
1158
1159
  mint_number_start: Optional[int] = 1,
1159
1160
  mint_total: Optional[int] = None,
1160
- xch_coins: Optional[Set[Coin]] = None,
1161
+ xch_coins: Optional[set[Coin]] = None,
1161
1162
  xch_change_ph: Optional[bytes32] = None,
1162
1163
  new_innerpuzhash: Optional[bytes32] = None,
1163
1164
  new_p2_puzhash: Optional[bytes32] = None,
1164
1165
  did_coin: Optional[Coin] = None,
1165
1166
  did_lineage_parent: Optional[bytes32] = None,
1166
1167
  fee: Optional[uint64] = uint64(0),
1167
- extra_conditions: Tuple[Condition, ...] = tuple(),
1168
+ extra_conditions: tuple[Condition, ...] = tuple(),
1168
1169
  ) -> None:
1169
1170
  """
1170
1171
  Minting NFTs from the DID linked wallet, also used for bulk minting NFTs.
@@ -1246,8 +1247,8 @@ class NFTWallet:
1246
1247
 
1247
1248
  # Empty set to load with the announcements we will assert from DID to
1248
1249
  # match the announcements from the intermediate launcher puzzle
1249
- did_announcements: Set[Any] = set()
1250
- puzzle_assertions: Set[Any] = set()
1250
+ did_announcements: set[Any] = set()
1251
+ puzzle_assertions: set[Any] = set()
1251
1252
  amount = uint64(1)
1252
1253
  intermediate_coin_spends = []
1253
1254
  launcher_spends = []
@@ -1353,7 +1354,7 @@ class NFTWallet:
1353
1354
  # Extract Puzzle Announcement from eve spend
1354
1355
  eve_sol = eve_sb.coin_spends[0].solution.to_program()
1355
1356
  conds = eve_fullpuz.run(eve_sol)
1356
- eve_puzzle_announcement = [x for x in conds.as_python() if int_from_bytes(x[0]) == 62][0][1]
1357
+ eve_puzzle_announcement = next(x for x in conds.as_python() if int_from_bytes(x[0]) == 62)[1]
1357
1358
  assertion = std_hash(eve_fullpuz.get_tree_hash() + eve_puzzle_announcement)
1358
1359
  puzzle_assertions.add(assertion)
1359
1360
 
@@ -1368,11 +1369,11 @@ class NFTWallet:
1368
1369
  xch_coins_iter = iter(xch_coins)
1369
1370
  xch_coin = next(xch_coins_iter)
1370
1371
 
1371
- message_list: List[bytes32] = [c.name() for c in xch_coins]
1372
+ message_list: list[bytes32] = [c.name() for c in xch_coins]
1372
1373
  message_list.append(Coin(xch_coin.name(), xch_payment.puzzle_hash, xch_payment.amount).name())
1373
1374
  message: bytes32 = std_hash(b"".join(message_list))
1374
1375
 
1375
- xch_extra_conditions: Tuple[Condition, ...] = (
1376
+ xch_extra_conditions: tuple[Condition, ...] = (
1376
1377
  AssertCoinAnnouncement(asserted_id=did_coin.name(), asserted_msg=message),
1377
1378
  )
1378
1379
  if len(xch_coins) > 1:
@@ -1437,7 +1438,7 @@ class NFTWallet:
1437
1438
  did_spend = make_spend(did_coin, did_full_puzzle, did_full_sol)
1438
1439
 
1439
1440
  # Collect up all the coin spends and sign them
1440
- list_of_coinspends = [did_spend] + intermediate_coin_spends + launcher_spends + xch_spend.coin_spends
1441
+ list_of_coinspends = [did_spend, *intermediate_coin_spends, *launcher_spends, *xch_spend.coin_spends]
1441
1442
  unsigned_spend_bundle = WalletSpendBundle(list_of_coinspends, G2Element())
1442
1443
 
1443
1444
  # Aggregate everything into a single spend bundle
@@ -1457,15 +1458,15 @@ class NFTWallet:
1457
1458
 
1458
1459
  async def mint_from_xch(
1459
1460
  self,
1460
- metadata_list: List[Dict[str, Any]],
1461
+ metadata_list: list[dict[str, Any]],
1461
1462
  action_scope: WalletActionScope,
1462
- target_list: Optional[List[bytes32]] = [],
1463
+ target_list: Optional[list[bytes32]] = [],
1463
1464
  mint_number_start: Optional[int] = 1,
1464
1465
  mint_total: Optional[int] = None,
1465
- xch_coins: Optional[Set[Coin]] = None,
1466
+ xch_coins: Optional[set[Coin]] = None,
1466
1467
  xch_change_ph: Optional[bytes32] = None,
1467
1468
  fee: Optional[uint64] = uint64(0),
1468
- extra_conditions: Tuple[Condition, ...] = tuple(),
1469
+ extra_conditions: tuple[Condition, ...] = tuple(),
1469
1470
  ) -> None:
1470
1471
  """
1471
1472
  Minting NFTs from a single XCH spend using intermediate launcher puzzle
@@ -1507,8 +1508,8 @@ class NFTWallet:
1507
1508
 
1508
1509
  # Empty set to load with the announcements we will assert from XCH to
1509
1510
  # match the announcements from the intermediate launcher puzzle
1510
- coin_announcements: Set[bytes32] = set()
1511
- puzzle_assertions: Set[bytes32] = set()
1511
+ coin_announcements: set[bytes32] = set()
1512
+ puzzle_assertions: set[bytes32] = set()
1512
1513
  primaries = []
1513
1514
  amount = uint64(1)
1514
1515
  intermediate_coin_spends = []
@@ -1610,7 +1611,7 @@ class NFTWallet:
1610
1611
  # Extract Puzzle Announcement from eve spend
1611
1612
  eve_sol = eve_sb.coin_spends[0].solution.to_program()
1612
1613
  conds = eve_fullpuz.run(eve_sol)
1613
- eve_puzzle_announcement = [x for x in conds.as_python() if int_from_bytes(x[0]) == 62][0][1]
1614
+ eve_puzzle_announcement = next(x for x in conds.as_python() if int_from_bytes(x[0]) == 62)[1]
1614
1615
  assertion = std_hash(eve_fullpuz.get_tree_hash() + eve_puzzle_announcement)
1615
1616
  puzzle_assertions.add(assertion)
1616
1617
 
@@ -1627,7 +1628,7 @@ class NFTWallet:
1627
1628
  for xch_coin in xch_coins:
1628
1629
  puzzle: Program = await self.standard_wallet.puzzle_for_puzzle_hash(xch_coin.puzzle_hash)
1629
1630
  if first:
1630
- message_list: List[bytes32] = [c.name() for c in xch_coins]
1631
+ message_list: list[bytes32] = [c.name() for c in xch_coins]
1631
1632
  message_list.append(Coin(xch_coin.name(), xch_payment.puzzle_hash, xch_payment.amount).name())
1632
1633
  message: bytes32 = std_hash(b"".join(message_list))
1633
1634
 
@@ -1637,7 +1638,7 @@ class NFTWallet:
1637
1638
  extra_conditions += tuple(AssertPuzzleAnnouncement(ann) for ann in puzzle_assertions)
1638
1639
 
1639
1640
  solution: Program = self.standard_wallet.make_solution(
1640
- primaries=[xch_payment] + primaries,
1641
+ primaries=[xch_payment, *primaries],
1641
1642
  fee=fee,
1642
1643
  conditions=extra_conditions,
1643
1644
  )
@@ -1670,7 +1671,7 @@ class NFTWallet:
1670
1671
  self,
1671
1672
  amount: uint64,
1672
1673
  action_scope: WalletActionScope,
1673
- ) -> Set[Coin]:
1674
+ ) -> set[Coin]:
1674
1675
  raise RuntimeError("NFTWallet does not support select_coins()")
1675
1676
 
1676
1677
  def require_derivation_paths(self) -> bool:
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Callable, List, Optional, Tuple, Union
4
+ from typing import Callable, Optional, Union
5
5
 
6
6
  from clvm_tools.binutils import disassemble
7
7
 
@@ -16,7 +16,7 @@ OWNERSHIP_LAYER_MOD = load_clvm_maybe_recompile(
16
16
  )
17
17
 
18
18
 
19
- def match_ownership_layer_puzzle(puzzle: UncurriedPuzzle) -> Tuple[bool, List[Program]]:
19
+ def match_ownership_layer_puzzle(puzzle: UncurriedPuzzle) -> tuple[bool, list[Program]]:
20
20
  if puzzle.mod == OWNERSHIP_LAYER_MOD:
21
21
  return True, list(puzzle.args.as_iter())
22
22
  return False, []
@@ -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, Optional
4
+ from typing import Any, Callable, Optional
5
5
 
6
6
  from chia.types.blockchain_format.coin import Coin
7
7
  from chia.types.blockchain_format.program import Program
@@ -39,7 +39,7 @@ class SingletonOuterPuzzle:
39
39
  assert launcher_id is not None
40
40
  launcher_ph = launcher_struct[1].atom
41
41
  assert launcher_ph is not None
42
- constructor_dict: Dict[str, Any] = {
42
+ constructor_dict: dict[str, Any] = {
43
43
  "type": "singleton",
44
44
  "launcher_id": "0x" + launcher_id.hex(),
45
45
  "launcher_ph": "0x" + launcher_ph.hex(),
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Callable, List, Optional, Tuple
4
+ from typing import Callable, Optional
5
5
 
6
6
  from chia.types.blockchain_format.program import Program
7
7
  from chia.types.blockchain_format.sized_bytes import bytes32
@@ -17,7 +17,7 @@ TRANSFER_PROGRAM_MOD = load_clvm_maybe_recompile(
17
17
  )
18
18
 
19
19
 
20
- def match_transfer_program_puzzle(puzzle: UncurriedPuzzle) -> Tuple[bool, List[Program]]:
20
+ def match_transfer_program_puzzle(puzzle: UncurriedPuzzle) -> tuple[bool, list[Program]]:
21
21
  if puzzle.mod == TRANSFER_PROGRAM_MOD:
22
22
  return True, list(puzzle.args.as_iter())
23
23
  return False, []
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
  from dataclasses import dataclass
5
- from typing import Optional, Type, TypeVar
5
+ from typing import Optional, TypeVar
6
6
 
7
7
  from chia.protocols.wallet_protocol import CoinState
8
8
  from chia.types.blockchain_format.program import Program
@@ -91,7 +91,7 @@ class UncurriedNFT(Streamable):
91
91
  trade_price_percentage: Optional[uint16]
92
92
 
93
93
  @classmethod
94
- def uncurry(cls: Type[_T_UncurriedNFT], mod: Program, curried_args: Program) -> Optional[_T_UncurriedNFT]:
94
+ def uncurry(cls: type[_T_UncurriedNFT], mod: Program, curried_args: Program) -> Optional[_T_UncurriedNFT]:
95
95
  """
96
96
  Try to uncurry a NFT puzzle
97
97
  :param cls UncurriedNFT class
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import Any, Dict, List, Optional, Set, Tuple
4
+ from typing import Any, Optional
5
5
 
6
6
  from chia_rs import G2Element
7
7
 
@@ -53,8 +53,8 @@ class NotificationManager:
53
53
  ):
54
54
  return False
55
55
  else:
56
- memos: Dict[bytes32, List[bytes]] = compute_memos_for_spend(parent_spend)
57
- coin_memos: List[bytes] = memos.get(coin_name, [])
56
+ memos: dict[bytes32, list[bytes]] = compute_memos_for_spend(parent_spend)
57
+ coin_memos: list[bytes] = memos.get(coin_name, [])
58
58
  if len(coin_memos) == 0 or len(coin_memos[0]) != 32:
59
59
  return False
60
60
  wallet_identifier = await self.wallet_state_manager.get_wallet_identifier_for_puzzle_hash(
@@ -87,9 +87,9 @@ class NotificationManager:
87
87
  amount: uint64,
88
88
  action_scope: WalletActionScope,
89
89
  fee: uint64 = uint64(0),
90
- extra_conditions: Tuple[Condition, ...] = tuple(),
90
+ extra_conditions: tuple[Condition, ...] = tuple(),
91
91
  ) -> None:
92
- coins: Set[Coin] = await self.wallet_state_manager.main_wallet.select_coins(uint64(amount + fee), action_scope)
92
+ coins: set[Coin] = await self.wallet_state_manager.main_wallet.select_coins(uint64(amount + fee), action_scope)
93
93
  origin_coin: bytes32 = next(iter(coins)).name()
94
94
  notification_puzzle: Program = construct_notification(target, amount)
95
95
  notification_hash: bytes32 = notification_puzzle.get_tree_hash()