chia-blockchain 2.5.0rc1__py3-none-any.whl → 2.5.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc1.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Dict, List, Optional, Sequence, Tuple, Union, cast
3
+ from collections.abc import Sequence
4
+ from typing import Any, Optional, Union, cast
4
5
 
5
6
  from chia.data_layer.data_layer_util import DLProof, VerifyProofResponse
6
7
  from chia.data_layer.data_layer_wallet import Mirror, SingletonRecord
@@ -45,6 +46,7 @@ from chia.rpc.wallet_request_types import (
45
46
  GatherSigningInfoResponse,
46
47
  GenerateMnemonicResponse,
47
48
  GetCATListResponse,
49
+ GetHeightInfoResponse,
48
50
  GetLoggedInFingerprintResponse,
49
51
  GetNotifications,
50
52
  GetNotificationsResponse,
@@ -52,6 +54,9 @@ from chia.rpc.wallet_request_types import (
52
54
  GetPrivateKey,
53
55
  GetPrivateKeyResponse,
54
56
  GetPublicKeysResponse,
57
+ GetSyncStatusResponse,
58
+ GetTimestampForHeight,
59
+ GetTimestampForHeightResponse,
55
60
  GetTransactionMemo,
56
61
  GetTransactionMemoResponse,
57
62
  LogIn,
@@ -69,15 +74,29 @@ from chia.rpc.wallet_request_types import (
69
74
  NFTTransferBulk,
70
75
  NFTTransferBulkResponse,
71
76
  NFTTransferNFTResponse,
77
+ PushTransactions,
78
+ PushTransactionsResponse,
79
+ PushTX,
72
80
  SendTransactionMultiResponse,
73
81
  SendTransactionResponse,
82
+ SetWalletResyncOnStartup,
74
83
  SplitCoins,
75
84
  SplitCoinsResponse,
76
85
  SubmitTransactions,
77
86
  SubmitTransactionsResponse,
78
87
  TakeOfferResponse,
88
+ VCAddProofs,
89
+ VCGet,
90
+ VCGetList,
91
+ VCGetListResponse,
92
+ VCGetProofsForRoot,
93
+ VCGetProofsForRootResponse,
94
+ VCGetResponse,
95
+ VCMint,
79
96
  VCMintResponse,
97
+ VCRevoke,
80
98
  VCRevokeResponse,
99
+ VCSpend,
81
100
  VCSpendResponse,
82
101
  VerifySignature,
83
102
  VerifySignatureResponse,
@@ -86,7 +105,6 @@ from chia.types.blockchain_format.coin import Coin
86
105
  from chia.types.blockchain_format.program import Program
87
106
  from chia.types.blockchain_format.sized_bytes import bytes32
88
107
  from chia.types.coin_record import CoinRecord
89
- from chia.util.bech32m import encode_puzzle_hash
90
108
  from chia.util.ints import uint16, uint32, uint64
91
109
  from chia.wallet.conditions import Condition, ConditionValidTimes, conditions_to_json_dicts
92
110
  from chia.wallet.puzzles.clawback.metadata import AutoClaimSettings
@@ -98,12 +116,10 @@ from chia.wallet.util.clvm_streamable import json_deserialize_with_clvm_streamab
98
116
  from chia.wallet.util.query_filter import TransactionTypeFilter
99
117
  from chia.wallet.util.tx_config import CoinSelectionConfig, TXConfig
100
118
  from chia.wallet.util.wallet_types import WalletType
101
- from chia.wallet.vc_wallet.vc_store import VCRecord
102
119
  from chia.wallet.wallet_coin_store import GetCoinRecords
103
- from chia.wallet.wallet_spend_bundle import WalletSpendBundle
104
120
 
105
121
 
106
- def parse_result_transactions(result: Dict[str, Any]) -> Dict[str, Any]:
122
+ def parse_result_transactions(result: dict[str, Any]) -> dict[str, Any]:
107
123
  result["transaction"] = TransactionRecord.from_json_dict(result["transaction"])
108
124
  result["transactions"] = [TransactionRecord.from_json_dict_convenience(tx) for tx in result["transactions"]]
109
125
  if result["fee_transaction"]:
@@ -124,9 +140,6 @@ class WalletRpcClient(RpcClient):
124
140
  async def log_in(self, request: LogIn) -> LogInResponse:
125
141
  return LogInResponse.from_json_dict(await self.fetch("log_in", request.to_json_dict()))
126
142
 
127
- async def set_wallet_resync_on_startup(self, enable: bool = True) -> Dict[str, Any]:
128
- return await self.fetch(path="set_wallet_resync_on_startup", request_json={"enable": enable})
129
-
130
143
  async def get_logged_in_fingerprint(self) -> GetLoggedInFingerprintResponse:
131
144
  return GetLoggedInFingerprintResponse.from_json_dict(await self.fetch("get_logged_in_fingerprint", {}))
132
145
 
@@ -152,39 +165,35 @@ class WalletRpcClient(RpcClient):
152
165
  await self.fetch("delete_all_keys", {})
153
166
 
154
167
  # Wallet Node APIs
155
- async def get_sync_status(self) -> bool:
156
- response = await self.fetch("get_sync_status", {})
157
- # TODO: casting due to lack of type checked deserialization
158
- return cast(bool, response["syncing"])
168
+ async def set_wallet_resync_on_startup(self, request: SetWalletResyncOnStartup) -> None:
169
+ await self.fetch("set_wallet_resync_on_startup", request.to_json_dict())
159
170
 
160
- async def get_synced(self) -> bool:
161
- response = await self.fetch("get_sync_status", {})
162
- # TODO: casting due to lack of type checked deserialization
163
- return cast(bool, response["synced"])
171
+ async def get_sync_status(self) -> GetSyncStatusResponse:
172
+ return GetSyncStatusResponse.from_json_dict(await self.fetch("get_sync_status", {}))
164
173
 
165
- async def get_height_info(self) -> uint32:
166
- response = await self.fetch("get_height_info", {})
167
- # TODO: casting due to lack of type checked deserialization
168
- return cast(uint32, response["height"])
174
+ async def get_height_info(self) -> GetHeightInfoResponse:
175
+ return GetHeightInfoResponse.from_json_dict(await self.fetch("get_height_info", {}))
169
176
 
170
- async def push_tx(self, spend_bundle: WalletSpendBundle) -> Dict[str, Any]:
171
- return await self.fetch("push_tx", {"spend_bundle": bytes(spend_bundle).hex()})
177
+ async def push_tx(self, request: PushTX) -> None:
178
+ await self.fetch("push_tx", request.to_json_dict())
172
179
 
173
180
  async def push_transactions(
174
- self, txs: List[TransactionRecord], fee: uint64 = uint64(0), sign: bool = False
175
- ) -> Dict[str, Any]:
176
- transactions = [bytes(tx).hex() for tx in txs]
177
-
178
- return await self.fetch("push_transactions", {"transactions": transactions, "fee": fee, "sign": sign})
179
-
180
- async def farm_block(self, address: str) -> Dict[str, Any]:
181
- return await self.fetch("farm_block", {"address": address})
181
+ self,
182
+ request: PushTransactions,
183
+ tx_config: TXConfig,
184
+ extra_conditions: tuple[Condition, ...] = tuple(),
185
+ timelock_info: ConditionValidTimes = ConditionValidTimes(),
186
+ ) -> PushTransactionsResponse:
187
+ return PushTransactionsResponse.from_json_dict(
188
+ await self.fetch(
189
+ "push_transactions", request.json_serialize_for_transport(tx_config, extra_conditions, timelock_info)
190
+ )
191
+ )
182
192
 
183
- async def get_timestamp_for_height(self, height: uint32) -> uint64:
184
- request = {"height": height}
185
- response = await self.fetch("get_timestamp_for_height", request)
186
- # TODO: casting due to lack of type checked deserialization
187
- return cast(uint64, response["timestamp"])
193
+ async def get_timestamp_for_height(self, request: GetTimestampForHeight) -> GetTimestampForHeightResponse:
194
+ return GetTimestampForHeightResponse.from_json_dict(
195
+ await self.fetch("get_timestamp_for_height", request.to_json_dict())
196
+ )
188
197
 
189
198
  async def set_auto_claim(self, request: AutoClaimSettings) -> AutoClaimSettings:
190
199
  return AutoClaimSettings.from_json_dict(await self.fetch("set_auto_claim", {**request.to_json_dict()}))
@@ -193,27 +202,27 @@ class WalletRpcClient(RpcClient):
193
202
  return AutoClaimSettings.from_json_dict(await self.fetch("get_auto_claim", {}))
194
203
 
195
204
  # Wallet Management APIs
196
- async def get_wallets(self, wallet_type: Optional[WalletType] = None) -> List[Dict[str, Any]]:
205
+ async def get_wallets(self, wallet_type: Optional[WalletType] = None) -> list[dict[str, Any]]:
197
206
  if wallet_type is None:
198
207
  request = {}
199
208
  else:
200
209
  request = {"type": wallet_type}
201
210
  response = await self.fetch("get_wallets", request)
202
211
  # TODO: casting due to lack of type checked deserialization
203
- return cast(List[Dict[str, Any]], response["wallets"])
212
+ return cast(list[dict[str, Any]], response["wallets"])
204
213
 
205
214
  # Wallet APIs
206
- async def get_wallet_balance(self, wallet_id: int) -> Dict[str, Any]:
215
+ async def get_wallet_balance(self, wallet_id: int) -> dict[str, Any]:
207
216
  request = {"wallet_id": wallet_id}
208
217
  response = await self.fetch("get_wallet_balance", request)
209
218
  # TODO: casting due to lack of type checked deserialization
210
- return cast(Dict[str, Any], response["wallet_balance"])
219
+ return cast(dict[str, Any], response["wallet_balance"])
211
220
 
212
- async def get_wallet_balances(self, wallet_ids: Optional[List[int]] = None) -> Dict[str, Dict[str, Any]]:
221
+ async def get_wallet_balances(self, wallet_ids: Optional[list[int]] = None) -> dict[str, dict[str, Any]]:
213
222
  request = {"wallet_ids": wallet_ids}
214
223
  response = await self.fetch("get_wallet_balances", request)
215
224
  # TODO: casting due to lack of type checked deserialization
216
- return cast(Dict[str, Dict[str, Any]], response["wallet_balances"])
225
+ return cast(dict[str, dict[str, Any]], response["wallet_balances"])
217
226
 
218
227
  async def get_transaction(self, transaction_id: bytes32) -> TransactionRecord:
219
228
  request = {"transaction_id": transaction_id.hex()}
@@ -230,8 +239,8 @@ class WalletRpcClient(RpcClient):
230
239
  to_address: Optional[str] = None,
231
240
  type_filter: Optional[TransactionTypeFilter] = None,
232
241
  confirmed: Optional[bool] = None,
233
- ) -> List[TransactionRecord]:
234
- request: Dict[str, Any] = {"wallet_id": wallet_id}
242
+ ) -> list[TransactionRecord]:
243
+ request: dict[str, Any] = {"wallet_id": wallet_id}
235
244
 
236
245
  if start is not None:
237
246
  request["start"] = start
@@ -256,7 +265,7 @@ class WalletRpcClient(RpcClient):
256
265
  async def get_transaction_count(
257
266
  self, wallet_id: int, confirmed: Optional[bool] = None, type_filter: Optional[TransactionTypeFilter] = None
258
267
  ) -> int:
259
- request: Dict[str, Any] = {"wallet_id": wallet_id}
268
+ request: dict[str, Any] = {"wallet_id": wallet_id}
260
269
  if type_filter is not None:
261
270
  request["type_filter"] = type_filter.to_json_dict()
262
271
  if confirmed is not None:
@@ -278,9 +287,9 @@ class WalletRpcClient(RpcClient):
278
287
  address: str,
279
288
  tx_config: TXConfig,
280
289
  fee: uint64 = uint64(0),
281
- memos: Optional[List[str]] = None,
282
- puzzle_decorator_override: Optional[List[Dict[str, Union[str, int, bool]]]] = None,
283
- extra_conditions: Tuple[Condition, ...] = tuple(),
290
+ memos: Optional[list[str]] = None,
291
+ puzzle_decorator_override: Optional[list[dict[str, Union[str, int, bool]]]] = None,
292
+ extra_conditions: tuple[Condition, ...] = tuple(),
284
293
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
285
294
  push: bool = True,
286
295
  ) -> SendTransactionResponse:
@@ -303,9 +312,9 @@ class WalletRpcClient(RpcClient):
303
312
  async def send_transaction_multi(
304
313
  self,
305
314
  wallet_id: int,
306
- additions: List[Dict[str, Any]],
315
+ additions: list[dict[str, Any]],
307
316
  tx_config: TXConfig,
308
- coins: Optional[List[Coin]] = None,
317
+ coins: Optional[list[Coin]] = None,
309
318
  fee: uint64 = uint64(0),
310
319
  push: bool = True,
311
320
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
@@ -332,13 +341,13 @@ class WalletRpcClient(RpcClient):
332
341
 
333
342
  async def spend_clawback_coins(
334
343
  self,
335
- coin_ids: List[bytes32],
344
+ coin_ids: list[bytes32],
336
345
  fee: int = 0,
337
346
  force: bool = False,
338
347
  push: bool = True,
339
- extra_conditions: Tuple[Condition, ...] = tuple(),
348
+ extra_conditions: tuple[Condition, ...] = tuple(),
340
349
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
341
- ) -> Dict[str, Any]:
350
+ ) -> dict[str, Any]:
342
351
  request = {
343
352
  "coin_ids": [cid.hex() for cid in coin_ids],
344
353
  "fee": fee,
@@ -363,17 +372,17 @@ class WalletRpcClient(RpcClient):
363
372
  updated_index = response["index"]
364
373
  return str(updated_index)
365
374
 
366
- async def get_farmed_amount(self) -> Dict[str, Any]:
375
+ async def get_farmed_amount(self) -> dict[str, Any]:
367
376
  return await self.fetch("get_farmed_amount", {})
368
377
 
369
378
  async def create_signed_transactions(
370
379
  self,
371
- additions: List[Dict[str, Any]],
380
+ additions: list[dict[str, Any]],
372
381
  tx_config: TXConfig,
373
- coins: Optional[List[Coin]] = None,
382
+ coins: Optional[list[Coin]] = None,
374
383
  fee: uint64 = uint64(0),
375
384
  wallet_id: Optional[int] = None,
376
- extra_conditions: Tuple[Condition, ...] = tuple(),
385
+ extra_conditions: tuple[Condition, ...] = tuple(),
377
386
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
378
387
  push: bool = False,
379
388
  ) -> CreateSignedTransactionsResponse:
@@ -403,17 +412,17 @@ class WalletRpcClient(RpcClient):
403
412
  response = await self.fetch("create_signed_transaction", request)
404
413
  return json_deserialize_with_clvm_streamable(response, CreateSignedTransactionsResponse)
405
414
 
406
- async def select_coins(self, amount: int, wallet_id: int, coin_selection_config: CoinSelectionConfig) -> List[Coin]:
415
+ async def select_coins(self, amount: int, wallet_id: int, coin_selection_config: CoinSelectionConfig) -> list[Coin]:
407
416
  request = {"amount": amount, "wallet_id": wallet_id, **coin_selection_config.to_json_dict()}
408
417
  response = await self.fetch("select_coins", request)
409
418
  return [Coin.from_json_dict(coin) for coin in response["coins"]]
410
419
 
411
- async def get_coin_records(self, request: GetCoinRecords) -> Dict[str, Any]:
420
+ async def get_coin_records(self, request: GetCoinRecords) -> dict[str, Any]:
412
421
  return await self.fetch("get_coin_records", request.to_json_dict())
413
422
 
414
423
  async def get_spendable_coins(
415
424
  self, wallet_id: int, coin_selection_config: CoinSelectionConfig
416
- ) -> Tuple[List[CoinRecord], List[CoinRecord], List[Coin]]:
425
+ ) -> tuple[list[CoinRecord], list[CoinRecord], list[Coin]]:
417
426
  """
418
427
  We return a tuple containing: (confirmed records, unconfirmed removals, unconfirmed additions)
419
428
  """
@@ -426,11 +435,11 @@ class WalletRpcClient(RpcClient):
426
435
 
427
436
  async def get_coin_records_by_names(
428
437
  self,
429
- names: List[bytes32],
438
+ names: list[bytes32],
430
439
  include_spent_coins: bool = True,
431
440
  start_height: Optional[int] = None,
432
441
  end_height: Optional[int] = None,
433
- ) -> List[CoinRecord]:
442
+ ) -> list[CoinRecord]:
434
443
  names_hex = [name.hex() for name in names]
435
444
  request = {"names": names_hex, "include_spent_coins": include_spent_coins}
436
445
  if start_height is not None:
@@ -448,14 +457,14 @@ class WalletRpcClient(RpcClient):
448
457
  tx_config: TXConfig,
449
458
  fee: int = 0,
450
459
  name: Optional[str] = "DID Wallet",
451
- backup_ids: List[str] = [],
460
+ backup_ids: list[str] = [],
452
461
  required_num: int = 0,
453
462
  type: str = "new",
454
463
  backup_data: str = "",
455
464
  push: bool = True,
456
- extra_conditions: Tuple[Condition, ...] = tuple(),
465
+ extra_conditions: tuple[Condition, ...] = tuple(),
457
466
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
458
- ) -> Dict[str, Any]:
467
+ ) -> dict[str, Any]:
459
468
  request = {
460
469
  "wallet_type": "did_wallet",
461
470
  "did_type": type,
@@ -473,17 +482,17 @@ class WalletRpcClient(RpcClient):
473
482
  response = await self.fetch("create_new_wallet", request)
474
483
  return response
475
484
 
476
- async def get_did_id(self, wallet_id: int) -> Dict[str, Any]:
485
+ async def get_did_id(self, wallet_id: int) -> dict[str, Any]:
477
486
  request = {"wallet_id": wallet_id}
478
487
  response = await self.fetch("did_get_did", request)
479
488
  return response
480
489
 
481
- async def get_did_info(self, coin_id: str, latest: bool) -> Dict[str, Any]:
490
+ async def get_did_info(self, coin_id: str, latest: bool) -> dict[str, Any]:
482
491
  request = {"coin_id": coin_id, "latest": latest}
483
492
  response = await self.fetch("did_get_info", request)
484
493
  return response
485
494
 
486
- async def create_did_backup_file(self, wallet_id: int, filename: str) -> Dict[str, Any]:
495
+ async def create_did_backup_file(self, wallet_id: int, filename: str) -> dict[str, Any]:
487
496
  request = {"wallet_id": wallet_id, "filename": filename}
488
497
  response = await self.fetch("did_create_backup_file", request)
489
498
  return response
@@ -491,10 +500,10 @@ class WalletRpcClient(RpcClient):
491
500
  async def update_did_recovery_list(
492
501
  self,
493
502
  wallet_id: int,
494
- recovery_list: List[str],
503
+ recovery_list: list[str],
495
504
  num_verification: int,
496
505
  tx_config: TXConfig,
497
- extra_conditions: Tuple[Condition, ...] = tuple(),
506
+ extra_conditions: tuple[Condition, ...] = tuple(),
498
507
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
499
508
  push: bool = True,
500
509
  ) -> DIDUpdateRecoveryIDsResponse:
@@ -510,7 +519,7 @@ class WalletRpcClient(RpcClient):
510
519
  response = await self.fetch("did_update_recovery_ids", request)
511
520
  return json_deserialize_with_clvm_streamable(response, DIDUpdateRecoveryIDsResponse)
512
521
 
513
- async def get_did_recovery_list(self, wallet_id: int) -> Dict[str, Any]:
522
+ async def get_did_recovery_list(self, wallet_id: int) -> dict[str, Any]:
514
523
  request = {"wallet_id": wallet_id}
515
524
  response = await self.fetch("did_get_recovery_list", request)
516
525
  return response
@@ -519,7 +528,7 @@ class WalletRpcClient(RpcClient):
519
528
  self,
520
529
  wallet_id: int,
521
530
  tx_config: TXConfig,
522
- extra_conditions: Tuple[Condition, ...] = tuple(),
531
+ extra_conditions: tuple[Condition, ...] = tuple(),
523
532
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
524
533
  push: bool = False,
525
534
  ) -> DIDMessageSpendResponse:
@@ -536,9 +545,9 @@ class WalletRpcClient(RpcClient):
536
545
  async def update_did_metadata(
537
546
  self,
538
547
  wallet_id: int,
539
- metadata: Dict[str, Any],
548
+ metadata: dict[str, Any],
540
549
  tx_config: TXConfig,
541
- extra_conditions: Tuple[Condition, ...] = tuple(),
550
+ extra_conditions: tuple[Condition, ...] = tuple(),
542
551
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
543
552
  push: bool = True,
544
553
  ) -> DIDUpdateMetadataResponse:
@@ -556,7 +565,7 @@ class WalletRpcClient(RpcClient):
556
565
  async def get_did_pubkey(self, request: DIDGetPubkey) -> DIDGetPubkeyResponse:
557
566
  return DIDGetPubkeyResponse.from_json_dict(await self.fetch("did_get_pubkey", request.to_json_dict()))
558
567
 
559
- async def get_did_metadata(self, wallet_id: int) -> Dict[str, Any]:
568
+ async def get_did_metadata(self, wallet_id: int) -> dict[str, Any]:
560
569
  request = {"wallet_id": wallet_id}
561
570
  response = await self.fetch("did_get_metadata", request)
562
571
  return response
@@ -565,10 +574,10 @@ class WalletRpcClient(RpcClient):
565
574
  self,
566
575
  coin_id: str,
567
576
  recovery_list_hash: Optional[str],
568
- metadata: Optional[Dict[str, Any]],
577
+ metadata: Optional[dict[str, Any]],
569
578
  num_verification: Optional[int],
570
- ) -> Dict[str, Any]:
571
- request: Dict[str, Any] = {"coin_id": coin_id}
579
+ ) -> dict[str, Any]:
580
+ request: dict[str, Any] = {"coin_id": coin_id}
572
581
  if recovery_list_hash is not None:
573
582
  request["recovery_list_hash"] = recovery_list_hash
574
583
  if metadata is not None:
@@ -578,7 +587,7 @@ class WalletRpcClient(RpcClient):
578
587
  response = await self.fetch("did_find_lost_did", request)
579
588
  return response
580
589
 
581
- async def create_new_did_wallet_from_recovery(self, filename: str) -> Dict[str, Any]:
590
+ async def create_new_did_wallet_from_recovery(self, filename: str) -> dict[str, Any]:
582
591
  request = {"wallet_type": "did_wallet", "did_type": "recovery", "filename": filename}
583
592
  response = await self.fetch("create_new_wallet", request)
584
593
  return response
@@ -590,9 +599,9 @@ class WalletRpcClient(RpcClient):
590
599
  pubkey: str,
591
600
  puzhash: str,
592
601
  file_name: str,
593
- extra_conditions: Tuple[Condition, ...] = tuple(),
602
+ extra_conditions: tuple[Condition, ...] = tuple(),
594
603
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
595
- ) -> Dict[str, Any]:
604
+ ) -> dict[str, Any]:
596
605
  request = {
597
606
  "wallet_id": wallet_id,
598
607
  "coin_name": coin_name,
@@ -615,7 +624,7 @@ class WalletRpcClient(RpcClient):
615
624
  await self.fetch("did_get_current_coin_info", request.to_json_dict())
616
625
  )
617
626
 
618
- async def did_recovery_spend(self, wallet_id: int, attest_filenames: str) -> Dict[str, Any]:
627
+ async def did_recovery_spend(self, wallet_id: int, attest_filenames: str) -> dict[str, Any]:
619
628
  request = {"wallet_id": wallet_id, "attest_filenames": attest_filenames}
620
629
  response = await self.fetch("did_recovery_spend", request)
621
630
  return response
@@ -627,7 +636,7 @@ class WalletRpcClient(RpcClient):
627
636
  fee: int,
628
637
  with_recovery: bool,
629
638
  tx_config: TXConfig,
630
- extra_conditions: Tuple[Condition, ...] = tuple(),
639
+ extra_conditions: tuple[Condition, ...] = tuple(),
631
640
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
632
641
  push: bool = True,
633
642
  ) -> DIDTransferDIDResponse:
@@ -644,12 +653,12 @@ class WalletRpcClient(RpcClient):
644
653
  response = await self.fetch("did_transfer_did", request)
645
654
  return json_deserialize_with_clvm_streamable(response, DIDTransferDIDResponse)
646
655
 
647
- async def did_set_wallet_name(self, wallet_id: int, name: str) -> Dict[str, Any]:
656
+ async def did_set_wallet_name(self, wallet_id: int, name: str) -> dict[str, Any]:
648
657
  request = {"wallet_id": wallet_id, "name": name}
649
658
  response = await self.fetch("did_set_wallet_name", request)
650
659
  return response
651
660
 
652
- async def did_get_wallet_name(self, wallet_id: int) -> Dict[str, Any]:
661
+ async def did_get_wallet_name(self, wallet_id: int) -> dict[str, Any]:
653
662
  request = {"wallet_id": wallet_id}
654
663
  response = await self.fetch("did_get_wallet_name", request)
655
664
  return response
@@ -666,7 +675,7 @@ class WalletRpcClient(RpcClient):
666
675
  fee: uint64,
667
676
  p2_singleton_delay_time: Optional[uint64] = None,
668
677
  p2_singleton_delayed_ph: Optional[bytes32] = None,
669
- extra_conditions: Tuple[Condition, ...] = tuple(),
678
+ extra_conditions: tuple[Condition, ...] = tuple(),
670
679
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
671
680
  ) -> TransactionRecord:
672
681
  request = {
@@ -689,14 +698,14 @@ class WalletRpcClient(RpcClient):
689
698
  res = await self.fetch("create_new_wallet", request)
690
699
  return TransactionRecord.from_json_dict(res["transaction"])
691
700
 
692
- async def pw_self_pool(self, wallet_id: int, fee: uint64) -> Dict[str, Any]:
701
+ async def pw_self_pool(self, wallet_id: int, fee: uint64) -> dict[str, Any]:
693
702
  reply = await self.fetch("pw_self_pool", {"wallet_id": wallet_id, "fee": fee})
694
703
  reply = parse_result_transactions(reply)
695
704
  return reply
696
705
 
697
706
  async def pw_join_pool(
698
707
  self, wallet_id: int, target_puzzlehash: bytes32, pool_url: str, relative_lock_height: uint32, fee: uint64
699
- ) -> Dict[str, Any]:
708
+ ) -> dict[str, Any]:
700
709
  request = {
701
710
  "wallet_id": int(wallet_id),
702
711
  "target_puzzlehash": target_puzzlehash.hex(),
@@ -710,7 +719,7 @@ class WalletRpcClient(RpcClient):
710
719
 
711
720
  async def pw_absorb_rewards(
712
721
  self, wallet_id: int, fee: uint64 = uint64(0), max_spends_in_tx: Optional[int] = None
713
- ) -> Dict[str, Any]:
722
+ ) -> dict[str, Any]:
714
723
  reply = await self.fetch(
715
724
  "pw_absorb_rewards", {"wallet_id": wallet_id, "fee": fee, "max_spends_in_tx": max_spends_in_tx}
716
725
  )
@@ -718,7 +727,7 @@ class WalletRpcClient(RpcClient):
718
727
  reply = parse_result_transactions(reply)
719
728
  return reply
720
729
 
721
- async def pw_status(self, wallet_id: int) -> Tuple[PoolWalletInfo, List[TransactionRecord]]:
730
+ async def pw_status(self, wallet_id: int) -> tuple[PoolWalletInfo, list[TransactionRecord]]:
722
731
  json_dict = await self.fetch("pw_status", {"wallet_id": wallet_id})
723
732
  return (
724
733
  PoolWalletInfo.from_json_dict(json_dict["state"]),
@@ -728,11 +737,11 @@ class WalletRpcClient(RpcClient):
728
737
  # CATS
729
738
  async def create_new_cat_and_wallet(
730
739
  self, amount: uint64, fee: uint64 = uint64(0), test: bool = False
731
- ) -> Dict[str, Any]:
740
+ ) -> dict[str, Any]:
732
741
  request = {"wallet_type": "cat_wallet", "mode": "new", "amount": amount, "fee": fee, "test": test}
733
742
  return await self.fetch("create_new_wallet", request)
734
743
 
735
- async def create_wallet_for_existing_cat(self, asset_id: bytes) -> Dict[str, Any]:
744
+ async def create_wallet_for_existing_cat(self, asset_id: bytes) -> dict[str, Any]:
736
745
  request = {"wallet_type": "cat_wallet", "asset_id": asset_id.hex(), "mode": "existing"}
737
746
  return await self.fetch("create_new_wallet", request)
738
747
 
@@ -740,12 +749,12 @@ class WalletRpcClient(RpcClient):
740
749
  request = {"wallet_id": wallet_id}
741
750
  return bytes32.from_hexstr((await self.fetch("cat_get_asset_id", request))["asset_id"])
742
751
 
743
- async def get_stray_cats(self) -> List[Dict[str, Any]]:
752
+ async def get_stray_cats(self) -> list[dict[str, Any]]:
744
753
  response = await self.fetch("get_stray_cats", {})
745
754
  # TODO: casting due to lack of type checked deserialization
746
- return cast(List[Dict[str, Any]], response["stray_cats"])
755
+ return cast(list[dict[str, Any]], response["stray_cats"])
747
756
 
748
- async def cat_asset_id_to_name(self, asset_id: bytes32) -> Optional[Tuple[Optional[uint32], str]]:
757
+ async def cat_asset_id_to_name(self, asset_id: bytes32) -> Optional[tuple[Optional[uint32], str]]:
749
758
  request = {"asset_id": asset_id.hex()}
750
759
  try:
751
760
  res = await self.fetch("cat_asset_id_to_name", request)
@@ -762,7 +771,7 @@ class WalletRpcClient(RpcClient):
762
771
  return cast(str, response["name"])
763
772
 
764
773
  async def set_cat_name(self, wallet_id: int, name: str) -> None:
765
- request: Dict[str, Any] = {
774
+ request: dict[str, Any] = {
766
775
  "wallet_id": wallet_id,
767
776
  "name": name,
768
777
  }
@@ -775,15 +784,15 @@ class WalletRpcClient(RpcClient):
775
784
  amount: Optional[uint64] = None,
776
785
  inner_address: Optional[str] = None,
777
786
  fee: uint64 = uint64(0),
778
- memos: Optional[List[str]] = None,
779
- additions: Optional[List[Dict[str, Any]]] = None,
780
- removals: Optional[List[Coin]] = None,
781
- cat_discrepancy: Optional[Tuple[int, Program, Program]] = None, # (extra_delta, tail_reveal, tail_solution)
782
- extra_conditions: Tuple[Condition, ...] = tuple(),
787
+ memos: Optional[list[str]] = None,
788
+ additions: Optional[list[dict[str, Any]]] = None,
789
+ removals: Optional[list[Coin]] = None,
790
+ cat_discrepancy: Optional[tuple[int, Program, Program]] = None, # (extra_delta, tail_reveal, tail_solution)
791
+ extra_conditions: tuple[Condition, ...] = tuple(),
783
792
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
784
793
  push: bool = True,
785
794
  ) -> CATSpendResponse:
786
- send_dict: Dict[str, Any] = {
795
+ send_dict: dict[str, Any] = {
787
796
  "wallet_id": wallet_id,
788
797
  "fee": fee,
789
798
  "memos": memos if memos is not None else [],
@@ -816,16 +825,16 @@ class WalletRpcClient(RpcClient):
816
825
  # Offers
817
826
  async def create_offer_for_ids(
818
827
  self,
819
- offer_dict: Dict[Union[uint32, str], int],
828
+ offer_dict: dict[Union[uint32, str], int],
820
829
  tx_config: TXConfig,
821
- driver_dict: Optional[Dict[str, Any]] = None,
822
- solver: Optional[Dict[str, Any]] = None,
830
+ driver_dict: Optional[dict[str, Any]] = None,
831
+ solver: Optional[dict[str, Any]] = None,
823
832
  fee: int = 0,
824
833
  validate_only: bool = False,
825
- extra_conditions: Tuple[Condition, ...] = tuple(),
834
+ extra_conditions: tuple[Condition, ...] = tuple(),
826
835
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
827
836
  ) -> CreateOfferForIDsResponse:
828
- send_dict: Dict[str, int] = {str(key): value for key, value in offer_dict.items()}
837
+ send_dict: dict[str, int] = {str(key): value for key, value in offer_dict.items()}
829
838
 
830
839
  req = {
831
840
  "offer": send_dict,
@@ -844,11 +853,11 @@ class WalletRpcClient(RpcClient):
844
853
 
845
854
  async def get_offer_summary(
846
855
  self, offer: Offer, advanced: bool = False
847
- ) -> Tuple[bytes32, Dict[str, Dict[str, int]]]:
856
+ ) -> tuple[bytes32, dict[str, dict[str, int]]]:
848
857
  res = await self.fetch("get_offer_summary", {"offer": offer.to_bech32(), "advanced": advanced})
849
858
  return bytes32.from_hexstr(res["id"]), res["summary"]
850
859
 
851
- async def check_offer_validity(self, offer: Offer) -> Tuple[bytes32, bool]:
860
+ async def check_offer_validity(self, offer: Offer) -> tuple[bytes32, bool]:
852
861
  res = await self.fetch("check_offer_validity", {"offer": offer.to_bech32()})
853
862
  return bytes32.from_hexstr(res["id"]), res["valid"]
854
863
 
@@ -856,9 +865,9 @@ class WalletRpcClient(RpcClient):
856
865
  self,
857
866
  offer: Offer,
858
867
  tx_config: TXConfig,
859
- solver: Optional[Dict[str, Any]] = None,
868
+ solver: Optional[dict[str, Any]] = None,
860
869
  fee: int = 0,
861
- extra_conditions: Tuple[Condition, ...] = tuple(),
870
+ extra_conditions: tuple[Condition, ...] = tuple(),
862
871
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
863
872
  push: bool = True,
864
873
  ) -> TakeOfferResponse:
@@ -890,7 +899,7 @@ class WalletRpcClient(RpcClient):
890
899
  exclude_my_offers: bool = False,
891
900
  exclude_taken_offers: bool = False,
892
901
  include_completed: bool = False,
893
- ) -> List[TradeRecord]:
902
+ ) -> list[TradeRecord]:
894
903
  res = await self.fetch(
895
904
  "get_all_offers",
896
905
  {
@@ -924,7 +933,7 @@ class WalletRpcClient(RpcClient):
924
933
  tx_config: TXConfig,
925
934
  fee: int = 0,
926
935
  secure: bool = True,
927
- extra_conditions: Tuple[Condition, ...] = tuple(),
936
+ extra_conditions: tuple[Condition, ...] = tuple(),
928
937
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
929
938
  push: bool = True,
930
939
  ) -> CancelOfferResponse:
@@ -951,7 +960,7 @@ class WalletRpcClient(RpcClient):
951
960
  batch_size: int = 5,
952
961
  cancel_all: bool = False,
953
962
  asset_id: Optional[bytes32] = None,
954
- extra_conditions: Tuple[Condition, ...] = tuple(),
963
+ extra_conditions: tuple[Condition, ...] = tuple(),
955
964
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
956
965
  push: bool = True,
957
966
  ) -> CancelOffersResponse:
@@ -960,7 +969,6 @@ class WalletRpcClient(RpcClient):
960
969
  {
961
970
  "secure": secure,
962
971
  "batch_fee": batch_fee,
963
- "secure": secure,
964
972
  "batch_size": batch_size,
965
973
  "cancel_all": cancel_all,
966
974
  "asset_id": None if asset_id is None else asset_id.hex(),
@@ -977,7 +985,7 @@ class WalletRpcClient(RpcClient):
977
985
  return GetCATListResponse.from_json_dict(await self.fetch("get_cat_list", {}))
978
986
 
979
987
  # NFT wallet
980
- async def create_new_nft_wallet(self, did_id: Optional[str], name: Optional[str] = None) -> Dict[str, Any]:
988
+ async def create_new_nft_wallet(self, did_id: Optional[str], name: Optional[str] = None) -> dict[str, Any]:
981
989
  request = {"wallet_type": "nft_wallet", "did_id": did_id, "name": name}
982
990
  response = await self.fetch("create_new_wallet", request)
983
991
  return response
@@ -988,18 +996,18 @@ class WalletRpcClient(RpcClient):
988
996
  royalty_address: Optional[str],
989
997
  target_address: Optional[str],
990
998
  hash: str,
991
- uris: List[str],
999
+ uris: list[str],
992
1000
  tx_config: TXConfig,
993
1001
  meta_hash: Optional[str] = "",
994
- meta_uris: List[str] = [],
1002
+ meta_uris: list[str] = [],
995
1003
  license_hash: Optional[str] = "",
996
- license_uris: List[str] = [],
1004
+ license_uris: list[str] = [],
997
1005
  edition_total: Optional[int] = 1,
998
1006
  edition_number: Optional[int] = 1,
999
1007
  fee: int = 0,
1000
1008
  royalty_percentage: int = 0,
1001
1009
  did_id: Optional[str] = None,
1002
- extra_conditions: Tuple[Condition, ...] = tuple(),
1010
+ extra_conditions: tuple[Condition, ...] = tuple(),
1003
1011
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1004
1012
  push: bool = True,
1005
1013
  ) -> NFTMintNFTResponse:
@@ -1034,7 +1042,7 @@ class WalletRpcClient(RpcClient):
1034
1042
  uri: str,
1035
1043
  fee: int,
1036
1044
  tx_config: TXConfig,
1037
- extra_conditions: Tuple[Condition, ...] = tuple(),
1045
+ extra_conditions: tuple[Condition, ...] = tuple(),
1038
1046
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1039
1047
  push: bool = True,
1040
1048
  ) -> NFTAddURIResponse:
@@ -1054,9 +1062,9 @@ class WalletRpcClient(RpcClient):
1054
1062
 
1055
1063
  async def nft_calculate_royalties(
1056
1064
  self,
1057
- royalty_assets_dict: Dict[Any, Tuple[Any, uint16]],
1058
- fungible_asset_dict: Dict[Any, uint64],
1059
- ) -> Dict[str, List[Dict[str, Any]]]:
1065
+ royalty_assets_dict: dict[Any, tuple[Any, uint16]],
1066
+ fungible_asset_dict: dict[Any, uint64],
1067
+ ) -> dict[str, list[dict[str, Any]]]:
1060
1068
  request = {
1061
1069
  "royalty_assets": [
1062
1070
  {"asset": id, "royalty_address": royalty_info[0], "royalty_percentage": royalty_info[1]}
@@ -1068,7 +1076,7 @@ class WalletRpcClient(RpcClient):
1068
1076
  del response["success"]
1069
1077
  return response
1070
1078
 
1071
- async def get_nft_info(self, coin_id: str, latest: bool = True) -> Dict[str, Any]:
1079
+ async def get_nft_info(self, coin_id: str, latest: bool = True) -> dict[str, Any]:
1072
1080
  request = {"coin_id": coin_id, "latest": latest}
1073
1081
  response = await self.fetch("nft_get_info", request)
1074
1082
  return response
@@ -1080,7 +1088,7 @@ class WalletRpcClient(RpcClient):
1080
1088
  target_address: str,
1081
1089
  fee: int,
1082
1090
  tx_config: TXConfig,
1083
- extra_conditions: Tuple[Condition, ...] = tuple(),
1091
+ extra_conditions: tuple[Condition, ...] = tuple(),
1084
1092
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1085
1093
  push: bool = True,
1086
1094
  ) -> NFTTransferNFTResponse:
@@ -1097,12 +1105,12 @@ class WalletRpcClient(RpcClient):
1097
1105
  response = await self.fetch("nft_transfer_nft", request)
1098
1106
  return json_deserialize_with_clvm_streamable(response, NFTTransferNFTResponse)
1099
1107
 
1100
- async def count_nfts(self, wallet_id: Optional[int]) -> Dict[str, Any]:
1108
+ async def count_nfts(self, wallet_id: Optional[int]) -> dict[str, Any]:
1101
1109
  request = {"wallet_id": wallet_id}
1102
1110
  response = await self.fetch("nft_count_nfts", request)
1103
1111
  return response
1104
1112
 
1105
- async def list_nfts(self, wallet_id: int, num: int = 50, start_index: int = 0) -> Dict[str, Any]:
1113
+ async def list_nfts(self, wallet_id: int, num: int = 50, start_index: int = 0) -> dict[str, Any]:
1106
1114
  request = {"wallet_id": wallet_id, "num": num, "start_index": start_index}
1107
1115
  response = await self.fetch("nft_get_nfts", request)
1108
1116
  return response
@@ -1117,7 +1125,7 @@ class WalletRpcClient(RpcClient):
1117
1125
  nft_coin_id: str,
1118
1126
  fee: int,
1119
1127
  tx_config: TXConfig,
1120
- extra_conditions: Tuple[Condition, ...] = tuple(),
1128
+ extra_conditions: tuple[Condition, ...] = tuple(),
1121
1129
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1122
1130
  push: bool = True,
1123
1131
  ) -> NFTSetNFTDIDResponse:
@@ -1138,7 +1146,7 @@ class WalletRpcClient(RpcClient):
1138
1146
  async def set_nft_status(self, request: NFTSetNFTStatus) -> None:
1139
1147
  await self.fetch("nft_set_nft_status", request.to_json_dict())
1140
1148
 
1141
- async def get_nft_wallet_did(self, wallet_id: int) -> Dict[str, Any]:
1149
+ async def get_nft_wallet_did(self, wallet_id: int) -> dict[str, Any]:
1142
1150
  request = {"wallet_id": wallet_id}
1143
1151
  response = await self.fetch("nft_get_wallet_did", request)
1144
1152
  return response
@@ -1149,21 +1157,21 @@ class WalletRpcClient(RpcClient):
1149
1157
  async def nft_mint_bulk(
1150
1158
  self,
1151
1159
  wallet_id: int,
1152
- metadata_list: List[Dict[str, Any]],
1160
+ metadata_list: list[dict[str, Any]],
1153
1161
  royalty_percentage: Optional[int],
1154
1162
  royalty_address: Optional[str],
1155
1163
  tx_config: TXConfig,
1156
- target_list: Optional[List[str]] = None,
1164
+ target_list: Optional[list[str]] = None,
1157
1165
  mint_number_start: Optional[int] = 1,
1158
1166
  mint_total: Optional[int] = None,
1159
- xch_coins: Optional[List[Dict[str, Any]]] = None,
1167
+ xch_coins: Optional[list[dict[str, Any]]] = None,
1160
1168
  xch_change_target: Optional[str] = None,
1161
1169
  new_innerpuzhash: Optional[str] = None,
1162
- did_coin: Optional[Dict[str, Any]] = None,
1170
+ did_coin: Optional[dict[str, Any]] = None,
1163
1171
  did_lineage_parent: Optional[str] = None,
1164
1172
  mint_from_did: Optional[bool] = False,
1165
1173
  fee: Optional[int] = 0,
1166
- extra_conditions: Tuple[Condition, ...] = tuple(),
1174
+ extra_conditions: tuple[Condition, ...] = tuple(),
1167
1175
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1168
1176
  push: bool = False,
1169
1177
  ) -> NFTMintBulkResponse:
@@ -1194,7 +1202,7 @@ class WalletRpcClient(RpcClient):
1194
1202
  self,
1195
1203
  request: NFTSetDIDBulk,
1196
1204
  tx_config: TXConfig,
1197
- extra_conditions: Tuple[Condition, ...] = tuple(),
1205
+ extra_conditions: tuple[Condition, ...] = tuple(),
1198
1206
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1199
1207
  ) -> NFTSetDIDBulkResponse:
1200
1208
  return NFTSetDIDBulkResponse.from_json_dict(
@@ -1207,7 +1215,7 @@ class WalletRpcClient(RpcClient):
1207
1215
  self,
1208
1216
  request: NFTTransferBulk,
1209
1217
  tx_config: TXConfig,
1210
- extra_conditions: Tuple[Condition, ...] = tuple(),
1218
+ extra_conditions: tuple[Condition, ...] = tuple(),
1211
1219
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1212
1220
  ) -> NFTTransferBulkResponse:
1213
1221
  return NFTTransferBulkResponse.from_json_dict(
@@ -1221,9 +1229,9 @@ class WalletRpcClient(RpcClient):
1221
1229
  self,
1222
1230
  root: bytes32,
1223
1231
  fee: uint64,
1224
- extra_conditions: Tuple[Condition, ...] = tuple(),
1232
+ extra_conditions: tuple[Condition, ...] = tuple(),
1225
1233
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1226
- ) -> Tuple[List[TransactionRecord], bytes32]:
1234
+ ) -> tuple[list[TransactionRecord], bytes32]:
1227
1235
  request = {
1228
1236
  "root": root.hex(),
1229
1237
  "fee": fee,
@@ -1250,7 +1258,7 @@ class WalletRpcClient(RpcClient):
1250
1258
  response = await self.fetch("dl_latest_singleton", request)
1251
1259
  return None if response["singleton"] is None else SingletonRecord.from_json_dict(response["singleton"])
1252
1260
 
1253
- async def dl_singletons_by_root(self, launcher_id: bytes32, root: bytes32) -> List[SingletonRecord]:
1261
+ async def dl_singletons_by_root(self, launcher_id: bytes32, root: bytes32) -> list[SingletonRecord]:
1254
1262
  request = {"launcher_id": launcher_id.hex(), "root": root.hex()}
1255
1263
  response = await self.fetch("dl_singletons_by_root", request)
1256
1264
  return [SingletonRecord.from_json_dict(single) for single in response["singletons"]]
@@ -1260,7 +1268,7 @@ class WalletRpcClient(RpcClient):
1260
1268
  launcher_id: bytes32,
1261
1269
  new_root: bytes32,
1262
1270
  fee: uint64,
1263
- extra_conditions: Tuple[Condition, ...] = tuple(),
1271
+ extra_conditions: tuple[Condition, ...] = tuple(),
1264
1272
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1265
1273
  ) -> TransactionRecord:
1266
1274
  request = {
@@ -1275,11 +1283,11 @@ class WalletRpcClient(RpcClient):
1275
1283
 
1276
1284
  async def dl_update_multiple(
1277
1285
  self,
1278
- update_dictionary: Dict[bytes32, bytes32],
1286
+ update_dictionary: dict[bytes32, bytes32],
1279
1287
  fee: uint64,
1280
- extra_conditions: Tuple[Condition, ...] = tuple(),
1288
+ extra_conditions: tuple[Condition, ...] = tuple(),
1281
1289
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1282
- ) -> List[TransactionRecord]:
1290
+ ) -> list[TransactionRecord]:
1283
1291
  updates_as_strings = {str(lid): str(root) for lid, root in update_dictionary.items()}
1284
1292
  request = {
1285
1293
  "updates": updates_as_strings,
@@ -1296,7 +1304,7 @@ class WalletRpcClient(RpcClient):
1296
1304
  min_generation: Optional[uint32] = None,
1297
1305
  max_generation: Optional[uint32] = None,
1298
1306
  num_results: Optional[uint32] = None,
1299
- ) -> List[SingletonRecord]:
1307
+ ) -> list[SingletonRecord]:
1300
1308
  request = {"launcher_id": launcher_id.hex()}
1301
1309
 
1302
1310
  if min_generation is not None:
@@ -1309,11 +1317,11 @@ class WalletRpcClient(RpcClient):
1309
1317
  response = await self.fetch("dl_history", request)
1310
1318
  return [SingletonRecord.from_json_dict(single) for single in response["history"]]
1311
1319
 
1312
- async def dl_owned_singletons(self) -> List[SingletonRecord]:
1320
+ async def dl_owned_singletons(self) -> list[SingletonRecord]:
1313
1321
  response = await self.fetch(path="dl_owned_singletons", request_json={})
1314
1322
  return [SingletonRecord.from_json_dict(singleton) for singleton in response["singletons"]]
1315
1323
 
1316
- async def dl_get_mirrors(self, launcher_id: bytes32) -> List[Mirror]:
1324
+ async def dl_get_mirrors(self, launcher_id: bytes32) -> list[Mirror]:
1317
1325
  response = await self.fetch(path="dl_get_mirrors", request_json={"launcher_id": launcher_id.hex()})
1318
1326
  return [Mirror.from_json_dict(mirror) for mirror in response["mirrors"]]
1319
1327
 
@@ -1321,11 +1329,11 @@ class WalletRpcClient(RpcClient):
1321
1329
  self,
1322
1330
  launcher_id: bytes32,
1323
1331
  amount: uint64,
1324
- urls: List[bytes],
1332
+ urls: list[bytes],
1325
1333
  fee: uint64 = uint64(0),
1326
- extra_conditions: Tuple[Condition, ...] = tuple(),
1334
+ extra_conditions: tuple[Condition, ...] = tuple(),
1327
1335
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1328
- ) -> List[TransactionRecord]:
1336
+ ) -> list[TransactionRecord]:
1329
1337
  response = await self.fetch(
1330
1338
  path="dl_new_mirror",
1331
1339
  request_json={
@@ -1343,9 +1351,9 @@ class WalletRpcClient(RpcClient):
1343
1351
  self,
1344
1352
  coin_id: bytes32,
1345
1353
  fee: uint64 = uint64(0),
1346
- extra_conditions: Tuple[Condition, ...] = tuple(),
1354
+ extra_conditions: tuple[Condition, ...] = tuple(),
1347
1355
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1348
- ) -> List[TransactionRecord]:
1356
+ ) -> list[TransactionRecord]:
1349
1357
  response = await self.fetch(
1350
1358
  path="dl_delete_mirror",
1351
1359
  request_json={
@@ -1380,7 +1388,7 @@ class WalletRpcClient(RpcClient):
1380
1388
  msg: bytes,
1381
1389
  amount: uint64,
1382
1390
  fee: uint64 = uint64(0),
1383
- extra_conditions: Tuple[Condition, ...] = tuple(),
1391
+ extra_conditions: tuple[Condition, ...] = tuple(),
1384
1392
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1385
1393
  push: bool = True,
1386
1394
  ) -> TransactionRecord:
@@ -1398,13 +1406,13 @@ class WalletRpcClient(RpcClient):
1398
1406
  )
1399
1407
  return TransactionRecord.from_json_dict_convenience(response["tx"])
1400
1408
 
1401
- async def sign_message_by_address(self, address: str, message: str) -> Tuple[str, str, str]:
1409
+ async def sign_message_by_address(self, address: str, message: str) -> tuple[str, str, str]:
1402
1410
  response = await self.fetch("sign_message_by_address", {"address": address, "message": message})
1403
1411
  return response["pubkey"], response["signature"], response["signing_mode"]
1404
1412
 
1405
1413
  async def sign_message_by_id(
1406
1414
  self, id: str, message: str, is_hex: bool = False, safe_mode: bool = True
1407
- ) -> Tuple[str, str, str]:
1415
+ ) -> tuple[str, str, str]:
1408
1416
  response = await self.fetch(
1409
1417
  "sign_message_by_id", {"id": id, "message": message, "is_hex": is_hex, "safe_mode": safe_mode}
1410
1418
  )
@@ -1423,18 +1431,18 @@ class WalletRpcClient(RpcClient):
1423
1431
  self,
1424
1432
  mode: str,
1425
1433
  tx_config: TXConfig,
1426
- dao_rules: Optional[Dict[str, uint64]] = None,
1434
+ dao_rules: Optional[dict[str, uint64]] = None,
1427
1435
  amount_of_cats: Optional[uint64] = None,
1428
1436
  treasury_id: Optional[bytes32] = None,
1429
1437
  filter_amount: uint64 = uint64(1),
1430
1438
  name: Optional[str] = None,
1431
1439
  fee: uint64 = uint64(0),
1432
1440
  fee_for_cat: uint64 = uint64(0),
1433
- extra_conditions: Tuple[Condition, ...] = tuple(),
1441
+ extra_conditions: tuple[Condition, ...] = tuple(),
1434
1442
  push: bool = True,
1435
1443
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1436
1444
  ) -> CreateNewDAOWalletResponse:
1437
- request: Dict[str, Any] = {
1445
+ request: dict[str, Any] = {
1438
1446
  "wallet_type": "dao_wallet",
1439
1447
  "mode": mode,
1440
1448
  "treasury_id": treasury_id.hex() if treasury_id is not None else treasury_id,
@@ -1452,12 +1460,12 @@ class WalletRpcClient(RpcClient):
1452
1460
  response = await self.fetch("create_new_wallet", request)
1453
1461
  return json_deserialize_with_clvm_streamable(response, CreateNewDAOWalletResponse)
1454
1462
 
1455
- async def dao_get_treasury_id(self, wallet_id: int) -> Dict[str, Any]:
1463
+ async def dao_get_treasury_id(self, wallet_id: int) -> dict[str, Any]:
1456
1464
  request = {"wallet_id": wallet_id}
1457
1465
  response = await self.fetch("dao_get_treasury_id", request)
1458
1466
  return response
1459
1467
 
1460
- async def dao_get_rules(self, wallet_id: int) -> Dict[str, Any]:
1468
+ async def dao_get_rules(self, wallet_id: int) -> dict[str, Any]:
1461
1469
  request = {"wallet_id": wallet_id}
1462
1470
  response = await self.fetch("dao_get_rules", request)
1463
1471
  return response
@@ -1467,19 +1475,19 @@ class WalletRpcClient(RpcClient):
1467
1475
  wallet_id: int,
1468
1476
  proposal_type: str,
1469
1477
  tx_config: TXConfig,
1470
- additions: Optional[List[Dict[str, Any]]] = None,
1478
+ additions: Optional[list[dict[str, Any]]] = None,
1471
1479
  amount: Optional[uint64] = None,
1472
1480
  inner_address: Optional[str] = None,
1473
1481
  asset_id: Optional[str] = None,
1474
1482
  cat_target_address: Optional[str] = None,
1475
1483
  vote_amount: Optional[int] = None,
1476
- new_dao_rules: Optional[Dict[str, Optional[uint64]]] = None,
1484
+ new_dao_rules: Optional[dict[str, Optional[uint64]]] = None,
1477
1485
  fee: uint64 = uint64(0),
1478
- extra_conditions: Tuple[Condition, ...] = tuple(),
1486
+ extra_conditions: tuple[Condition, ...] = tuple(),
1479
1487
  push: bool = True,
1480
1488
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1481
1489
  ) -> DAOCreateProposalResponse:
1482
- request: Dict[str, Any] = {
1490
+ request: dict[str, Any] = {
1483
1491
  "wallet_id": wallet_id,
1484
1492
  "proposal_type": proposal_type,
1485
1493
  "additions": additions,
@@ -1498,12 +1506,12 @@ class WalletRpcClient(RpcClient):
1498
1506
  response = await self.fetch("dao_create_proposal", request)
1499
1507
  return json_deserialize_with_clvm_streamable(response, DAOCreateProposalResponse)
1500
1508
 
1501
- async def dao_get_proposal_state(self, wallet_id: int, proposal_id: str) -> Dict[str, Any]:
1509
+ async def dao_get_proposal_state(self, wallet_id: int, proposal_id: str) -> dict[str, Any]:
1502
1510
  request = {"wallet_id": wallet_id, "proposal_id": proposal_id}
1503
1511
  response = await self.fetch("dao_get_proposal_state", request)
1504
1512
  return response
1505
1513
 
1506
- async def dao_parse_proposal(self, wallet_id: int, proposal_id: str) -> Dict[str, Any]:
1514
+ async def dao_parse_proposal(self, wallet_id: int, proposal_id: str) -> dict[str, Any]:
1507
1515
  request = {"wallet_id": wallet_id, "proposal_id": proposal_id}
1508
1516
  response = await self.fetch("dao_parse_proposal", request)
1509
1517
  return response
@@ -1516,11 +1524,11 @@ class WalletRpcClient(RpcClient):
1516
1524
  tx_config: TXConfig,
1517
1525
  is_yes_vote: bool = True,
1518
1526
  fee: uint64 = uint64(0),
1519
- extra_conditions: Tuple[Condition, ...] = tuple(),
1527
+ extra_conditions: tuple[Condition, ...] = tuple(),
1520
1528
  push: bool = True,
1521
1529
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1522
1530
  ) -> DAOVoteOnProposalResponse:
1523
- request: Dict[str, Any] = {
1531
+ request: dict[str, Any] = {
1524
1532
  "wallet_id": wallet_id,
1525
1533
  "proposal_id": proposal_id,
1526
1534
  "vote_amount": vote_amount,
@@ -1534,7 +1542,7 @@ class WalletRpcClient(RpcClient):
1534
1542
  response = await self.fetch("dao_vote_on_proposal", request)
1535
1543
  return json_deserialize_with_clvm_streamable(response, DAOVoteOnProposalResponse)
1536
1544
 
1537
- async def dao_get_proposals(self, wallet_id: int, include_closed: bool = True) -> Dict[str, Any]:
1545
+ async def dao_get_proposals(self, wallet_id: int, include_closed: bool = True) -> dict[str, Any]:
1538
1546
  request = {"wallet_id": wallet_id, "include_closed": include_closed}
1539
1547
  response = await self.fetch("dao_get_proposals", request)
1540
1548
  return response
@@ -1546,11 +1554,11 @@ class WalletRpcClient(RpcClient):
1546
1554
  tx_config: TXConfig,
1547
1555
  self_destruct: Optional[bool] = None,
1548
1556
  fee: uint64 = uint64(0),
1549
- extra_conditions: Tuple[Condition, ...] = tuple(),
1557
+ extra_conditions: tuple[Condition, ...] = tuple(),
1550
1558
  push: bool = True,
1551
1559
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1552
1560
  ) -> DAOCloseProposalResponse:
1553
- request: Dict[str, Any] = {
1561
+ request: dict[str, Any] = {
1554
1562
  "wallet_id": wallet_id,
1555
1563
  "proposal_id": proposal_id,
1556
1564
  "self_destruct": self_destruct,
@@ -1568,11 +1576,11 @@ class WalletRpcClient(RpcClient):
1568
1576
  wallet_id: int,
1569
1577
  tx_config: TXConfig,
1570
1578
  fee: uint64 = uint64(0),
1571
- extra_conditions: Tuple[Condition, ...] = tuple(),
1579
+ extra_conditions: tuple[Condition, ...] = tuple(),
1572
1580
  push: bool = True,
1573
1581
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1574
1582
  ) -> DAOFreeCoinsFromFinishedProposalsResponse:
1575
- request: Dict[str, Any] = {
1583
+ request: dict[str, Any] = {
1576
1584
  "wallet_id": wallet_id,
1577
1585
  "fee": fee,
1578
1586
  "extra_conditions": list(extra_conditions),
@@ -1582,7 +1590,7 @@ class WalletRpcClient(RpcClient):
1582
1590
  response = await self.fetch("dao_free_coins_from_finished_proposals", request)
1583
1591
  return json_deserialize_with_clvm_streamable(response, DAOFreeCoinsFromFinishedProposalsResponse)
1584
1592
 
1585
- async def dao_get_treasury_balance(self, wallet_id: int) -> Dict[str, Any]:
1593
+ async def dao_get_treasury_balance(self, wallet_id: int) -> dict[str, Any]:
1586
1594
  request = {"wallet_id": wallet_id}
1587
1595
  response = await self.fetch("dao_get_treasury_balance", request)
1588
1596
  return response
@@ -1594,11 +1602,11 @@ class WalletRpcClient(RpcClient):
1594
1602
  amount: uint64,
1595
1603
  tx_config: TXConfig,
1596
1604
  fee: uint64 = uint64(0),
1597
- extra_conditions: Tuple[Condition, ...] = tuple(),
1605
+ extra_conditions: tuple[Condition, ...] = tuple(),
1598
1606
  push: bool = True,
1599
1607
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1600
1608
  ) -> DAOAddFundsToTreasuryResponse:
1601
- request: Dict[str, Any] = {
1609
+ request: dict[str, Any] = {
1602
1610
  "wallet_id": wallet_id,
1603
1611
  "funding_wallet_id": funding_wallet_id,
1604
1612
  "amount": amount,
@@ -1617,11 +1625,11 @@ class WalletRpcClient(RpcClient):
1617
1625
  amount: uint64,
1618
1626
  tx_config: TXConfig,
1619
1627
  fee: uint64 = uint64(0),
1620
- extra_conditions: Tuple[Condition, ...] = tuple(),
1628
+ extra_conditions: tuple[Condition, ...] = tuple(),
1621
1629
  push: bool = True,
1622
1630
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1623
1631
  ) -> DAOSendToLockupResponse:
1624
- request: Dict[str, Any] = {
1632
+ request: dict[str, Any] = {
1625
1633
  "wallet_id": wallet_id,
1626
1634
  "amount": amount,
1627
1635
  "fee": fee,
@@ -1637,13 +1645,13 @@ class WalletRpcClient(RpcClient):
1637
1645
  self,
1638
1646
  wallet_id: int,
1639
1647
  tx_config: TXConfig,
1640
- coins: Optional[List[Dict[str, Any]]] = None,
1648
+ coins: Optional[list[dict[str, Any]]] = None,
1641
1649
  fee: uint64 = uint64(0),
1642
- extra_conditions: Tuple[Condition, ...] = tuple(),
1650
+ extra_conditions: tuple[Condition, ...] = tuple(),
1643
1651
  push: bool = True,
1644
1652
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1645
1653
  ) -> DAOExitLockupResponse:
1646
- request: Dict[str, Any] = {
1654
+ request: dict[str, Any] = {
1647
1655
  "wallet_id": wallet_id,
1648
1656
  "coins": coins,
1649
1657
  "fee": fee,
@@ -1655,101 +1663,63 @@ class WalletRpcClient(RpcClient):
1655
1663
  response = await self.fetch("dao_exit_lockup", request)
1656
1664
  return json_deserialize_with_clvm_streamable(response, DAOExitLockupResponse)
1657
1665
 
1658
- async def dao_adjust_filter_level(self, wallet_id: int, filter_level: int) -> Dict[str, Any]:
1666
+ async def dao_adjust_filter_level(self, wallet_id: int, filter_level: int) -> dict[str, Any]:
1659
1667
  request = {"wallet_id": wallet_id, "filter_level": filter_level}
1660
1668
  response = await self.fetch("dao_adjust_filter_level", request)
1661
1669
  return response
1662
1670
 
1663
1671
  async def vc_mint(
1664
1672
  self,
1665
- did_id: bytes32,
1673
+ request: VCMint,
1666
1674
  tx_config: TXConfig,
1667
- target_address: Optional[bytes32] = None,
1668
- fee: uint64 = uint64(0),
1669
- extra_conditions: Tuple[Condition, ...] = tuple(),
1675
+ extra_conditions: tuple[Condition, ...] = tuple(),
1670
1676
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1671
- push: bool = True,
1672
1677
  ) -> VCMintResponse:
1673
- response = await self.fetch(
1674
- "vc_mint",
1675
- {
1676
- "did_id": encode_puzzle_hash(did_id, "rpc"),
1677
- "target_address": encode_puzzle_hash(target_address, "rpc") if target_address is not None else None,
1678
- "fee": fee,
1679
- "extra_conditions": conditions_to_json_dicts(extra_conditions),
1680
- "push": push,
1681
- **tx_config.to_json_dict(),
1682
- **timelock_info.to_json_dict(),
1683
- },
1678
+ return VCMintResponse.from_json_dict(
1679
+ await self.fetch(
1680
+ "vc_mint", request.json_serialize_for_transport(tx_config, extra_conditions, timelock_info)
1681
+ )
1684
1682
  )
1685
- return json_deserialize_with_clvm_streamable(response, VCMintResponse)
1686
1683
 
1687
- async def vc_get(self, vc_id: bytes32) -> Optional[VCRecord]:
1688
- response = await self.fetch("vc_get", {"vc_id": vc_id.hex()})
1689
- return None if response["vc_record"] is None else VCRecord.from_json_dict(response["vc_record"])
1684
+ async def vc_get(self, request: VCGet) -> VCGetResponse:
1685
+ return VCGetResponse.from_json_dict(await self.fetch("vc_get", request.to_json_dict()))
1690
1686
 
1691
- async def vc_get_list(self, start: int = 0, count: int = 50) -> Tuple[List[VCRecord], Dict[str, Any]]:
1692
- response = await self.fetch("vc_get_list", {"start": start, "count": count})
1693
- return [VCRecord.from_json_dict(rec) for rec in response["vc_records"]], response["proofs"]
1687
+ async def vc_get_list(self, request: VCGetList) -> VCGetListResponse:
1688
+ return VCGetListResponse.from_json_dict(await self.fetch("vc_get_list", request.to_json_dict()))
1694
1689
 
1695
1690
  async def vc_spend(
1696
1691
  self,
1697
- vc_id: bytes32,
1692
+ request: VCSpend,
1698
1693
  tx_config: TXConfig,
1699
- new_puzhash: Optional[bytes32] = None,
1700
- new_proof_hash: Optional[bytes32] = None,
1701
- provider_inner_puzhash: Optional[bytes32] = None,
1702
- fee: uint64 = uint64(0),
1703
- extra_conditions: Tuple[Condition, ...] = tuple(),
1694
+ extra_conditions: tuple[Condition, ...] = tuple(),
1704
1695
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1705
- push: bool = True,
1706
1696
  ) -> VCSpendResponse:
1707
- response = await self.fetch(
1708
- "vc_spend",
1709
- {
1710
- "vc_id": vc_id.hex(),
1711
- "new_puzhash": new_puzhash.hex() if new_puzhash is not None else new_puzhash,
1712
- "new_proof_hash": new_proof_hash.hex() if new_proof_hash is not None else new_proof_hash,
1713
- "provider_inner_puzhash": (
1714
- provider_inner_puzhash.hex() if provider_inner_puzhash is not None else provider_inner_puzhash
1715
- ),
1716
- "fee": fee,
1717
- "extra_conditions": conditions_to_json_dicts(extra_conditions),
1718
- "push": push,
1719
- **tx_config.to_json_dict(),
1720
- **timelock_info.to_json_dict(),
1721
- },
1697
+ return VCSpendResponse.from_json_dict(
1698
+ await self.fetch(
1699
+ "vc_spend", request.json_serialize_for_transport(tx_config, extra_conditions, timelock_info)
1700
+ )
1722
1701
  )
1723
- return json_deserialize_with_clvm_streamable(response, VCSpendResponse)
1724
1702
 
1725
- async def vc_add_proofs(self, proofs: Dict[str, Any]) -> None:
1726
- await self.fetch("vc_add_proofs", {"proofs": proofs})
1703
+ async def vc_add_proofs(self, request: VCAddProofs) -> None:
1704
+ await self.fetch("vc_add_proofs", request.to_json_dict())
1727
1705
 
1728
- async def vc_get_proofs_for_root(self, root: bytes32) -> Dict[str, Any]:
1729
- response = await self.fetch("vc_get_proofs_for_root", {"root": root.hex()})
1730
- return cast(Dict[str, Any], response["proofs"])
1706
+ async def vc_get_proofs_for_root(self, request: VCGetProofsForRoot) -> VCGetProofsForRootResponse:
1707
+ return VCGetProofsForRootResponse.from_json_dict(
1708
+ await self.fetch("vc_get_proofs_for_root", request.to_json_dict())
1709
+ )
1731
1710
 
1732
1711
  async def vc_revoke(
1733
1712
  self,
1734
- vc_parent_id: bytes32,
1713
+ request: VCRevoke,
1735
1714
  tx_config: TXConfig,
1736
- fee: uint64 = uint64(0),
1737
- extra_conditions: Tuple[Condition, ...] = tuple(),
1715
+ extra_conditions: tuple[Condition, ...] = tuple(),
1738
1716
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1739
- push: bool = True,
1740
1717
  ) -> VCRevokeResponse:
1741
- response = await self.fetch(
1742
- "vc_revoke",
1743
- {
1744
- "vc_parent_id": vc_parent_id.hex(),
1745
- "fee": fee,
1746
- "extra_conditions": conditions_to_json_dicts(extra_conditions),
1747
- "push": push,
1748
- **tx_config.to_json_dict(),
1749
- **timelock_info.to_json_dict(),
1750
- },
1718
+ return VCRevokeResponse.from_json_dict(
1719
+ await self.fetch(
1720
+ "vc_revoke", request.json_serialize_for_transport(tx_config, extra_conditions, timelock_info)
1721
+ )
1751
1722
  )
1752
- return json_deserialize_with_clvm_streamable(response, VCRevokeResponse)
1753
1723
 
1754
1724
  async def crcat_approve_pending(
1755
1725
  self,
@@ -1759,7 +1729,7 @@ class WalletRpcClient(RpcClient):
1759
1729
  fee: uint64 = uint64(0),
1760
1730
  push: bool = True,
1761
1731
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1762
- ) -> List[TransactionRecord]:
1732
+ ) -> list[TransactionRecord]:
1763
1733
  response = await self.fetch(
1764
1734
  "crcat_approve_pending",
1765
1735
  {
@@ -1821,7 +1791,7 @@ class WalletRpcClient(RpcClient):
1821
1791
  self,
1822
1792
  args: SplitCoins,
1823
1793
  tx_config: TXConfig,
1824
- extra_conditions: Tuple[Condition, ...] = tuple(),
1794
+ extra_conditions: tuple[Condition, ...] = tuple(),
1825
1795
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1826
1796
  ) -> SplitCoinsResponse:
1827
1797
  return SplitCoinsResponse.from_json_dict(
@@ -1834,7 +1804,7 @@ class WalletRpcClient(RpcClient):
1834
1804
  self,
1835
1805
  args: CombineCoins,
1836
1806
  tx_config: TXConfig,
1837
- extra_conditions: Tuple[Condition, ...] = tuple(),
1807
+ extra_conditions: tuple[Condition, ...] = tuple(),
1838
1808
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
1839
1809
  ) -> CombineCoinsResponse:
1840
1810
  return CombineCoinsResponse.from_json_dict(