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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from datetime import datetime, timezone
4
- from typing import Any, Dict, List, Optional
4
+ from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
5
5
 
6
6
  from chia.consensus.block_record import BlockRecord
7
7
  from chia.consensus.blockchain import Blockchain, BlockchainMutexPriority
@@ -33,7 +33,7 @@ from chia.util.math import make_monotonically_decreasing
33
33
  from chia.util.ws_message import WsRpcMessage, create_payload_dict
34
34
 
35
35
 
36
- def coin_record_dict_backwards_compat(coin_record: Dict[str, Any]) -> Dict[str, bool]:
36
+ def coin_record_dict_backwards_compat(coin_record: dict[str, Any]) -> dict[str, bool]:
37
37
  coin_record["spent"] = coin_record["spent_block_index"] > 0
38
38
  return coin_record
39
39
 
@@ -82,12 +82,17 @@ async def get_average_block_time(
82
82
 
83
83
 
84
84
  class FullNodeRpcApi:
85
+ if TYPE_CHECKING:
86
+ from chia.rpc.rpc_server import RpcApiProtocol
87
+
88
+ _protocol_check: ClassVar[RpcApiProtocol] = cast("FullNodeRpcApi", None)
89
+
85
90
  def __init__(self, service: FullNode) -> None:
86
91
  self.service = service
87
92
  self.service_name = "chia_full_node"
88
- self.cached_blockchain_state: Optional[Dict[str, Any]] = None
93
+ self.cached_blockchain_state: Optional[dict[str, Any]] = None
89
94
 
90
- def get_routes(self) -> Dict[str, Endpoint]:
95
+ def get_routes(self) -> dict[str, Endpoint]:
91
96
  return {
92
97
  # Blockchain
93
98
  "/get_blockchain_state": self.get_blockchain_state,
@@ -122,12 +127,12 @@ class FullNodeRpcApi:
122
127
  "/get_fee_estimate": self.get_fee_estimate,
123
128
  }
124
129
 
125
- async def _state_changed(self, change: str, change_data: Optional[Dict[str, Any]] = None) -> List[WsRpcMessage]:
130
+ async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]] = None) -> list[WsRpcMessage]:
126
131
  if change_data is None:
127
132
  change_data = {}
128
133
 
129
134
  payloads = []
130
- if change == "new_peak" or change == "sync_mode":
135
+ if change in {"new_peak", "sync_mode"}:
131
136
  data = await self.get_blockchain_state({})
132
137
  assert data is not None
133
138
  payloads.append(
@@ -147,7 +152,7 @@ class FullNodeRpcApi:
147
152
  )
148
153
  )
149
154
 
150
- if change in ("block", "signage_point"):
155
+ if change in {"block", "signage_point"}:
151
156
  payloads.append(create_payload_dict(change, change_data, self.service_name, "metrics"))
152
157
 
153
158
  if change == "unfinished_block":
@@ -155,7 +160,7 @@ class FullNodeRpcApi:
155
160
 
156
161
  return payloads
157
162
 
158
- async def get_blockchain_state(self, _: Dict[str, Any]) -> EndpointResult:
163
+ async def get_blockchain_state(self, _: dict[str, Any]) -> EndpointResult:
159
164
  """
160
165
  Returns a summary of the node's view of the blockchain.
161
166
  """
@@ -278,7 +283,7 @@ class FullNodeRpcApi:
278
283
  self.cached_blockchain_state = dict(response["blockchain_state"])
279
284
  return response
280
285
 
281
- async def get_recent_signage_point_or_eos(self, request: Dict[str, Any]) -> EndpointResult:
286
+ async def get_recent_signage_point_or_eos(self, request: dict[str, Any]) -> EndpointResult:
282
287
  if "sp_hash" not in request:
283
288
  challenge_hash: bytes32 = bytes32.from_hexstr(request["challenge_hash"])
284
289
  # This is the case of getting an end of slot
@@ -369,7 +374,7 @@ class FullNodeRpcApi:
369
374
 
370
375
  return {"signage_point": sp, "time_received": time_received, "reverted": True}
371
376
 
372
- async def get_block(self, request: Dict[str, Any]) -> EndpointResult:
377
+ async def get_block(self, request: dict[str, Any]) -> EndpointResult:
373
378
  if "header_hash" not in request:
374
379
  raise ValueError("No header_hash in request")
375
380
  header_hash = bytes32.from_hexstr(request["header_hash"])
@@ -380,7 +385,7 @@ class FullNodeRpcApi:
380
385
 
381
386
  return {"block": block}
382
387
 
383
- async def get_blocks(self, request: Dict[str, Any]) -> EndpointResult:
388
+ async def get_blocks(self, request: dict[str, Any]) -> EndpointResult:
384
389
  if "start" not in request:
385
390
  raise ValueError("No start in request")
386
391
  if "end" not in request:
@@ -397,7 +402,7 @@ class FullNodeRpcApi:
397
402
  block_range = []
398
403
  for a in range(start, end):
399
404
  block_range.append(uint32(a))
400
- blocks: List[FullBlock] = await self.service.block_store.get_full_blocks_at(block_range)
405
+ blocks: list[FullBlock] = await self.service.block_store.get_full_blocks_at(block_range)
401
406
  json_blocks = []
402
407
  for block in blocks:
403
408
  hh: bytes32 = block.header_hash
@@ -410,7 +415,7 @@ class FullNodeRpcApi:
410
415
  json_blocks.append(json)
411
416
  return {"blocks": json_blocks}
412
417
 
413
- async def get_block_count_metrics(self, _: Dict[str, Any]) -> EndpointResult:
418
+ async def get_block_count_metrics(self, _: dict[str, Any]) -> EndpointResult:
414
419
  compact_blocks = 0
415
420
  uncompact_blocks = 0
416
421
  with log_exceptions(self.service.log, consume=True):
@@ -430,7 +435,7 @@ class FullNodeRpcApi:
430
435
  }
431
436
  }
432
437
 
433
- async def get_block_records(self, request: Dict[str, Any]) -> EndpointResult:
438
+ async def get_block_records(self, request: dict[str, Any]) -> EndpointResult:
434
439
  if "start" not in request:
435
440
  raise ValueError("No start in request")
436
441
  if "end" not in request:
@@ -460,7 +465,7 @@ class FullNodeRpcApi:
460
465
  records.append(record)
461
466
  return {"block_records": records}
462
467
 
463
- async def get_block_spends(self, request: Dict[str, Any]) -> EndpointResult:
468
+ async def get_block_spends(self, request: dict[str, Any]) -> EndpointResult:
464
469
  if "header_hash" not in request:
465
470
  raise ValueError("No header_hash in request")
466
471
  header_hash = bytes32.from_hexstr(request["header_hash"])
@@ -468,7 +473,7 @@ class FullNodeRpcApi:
468
473
  if full_block is None:
469
474
  raise ValueError(f"Block {header_hash.hex()} not found")
470
475
 
471
- spends: List[CoinSpend] = []
476
+ spends: list[CoinSpend] = []
472
477
  block_generator = await get_block_generator(self.service.blockchain.lookup_block_generators, full_block)
473
478
  if block_generator is None: # if block is not a transaction block.
474
479
  return {"block_spends": spends}
@@ -477,7 +482,7 @@ class FullNodeRpcApi:
477
482
 
478
483
  return {"block_spends": spends}
479
484
 
480
- async def get_block_spends_with_conditions(self, request: Dict[str, Any]) -> EndpointResult:
485
+ async def get_block_spends_with_conditions(self, request: dict[str, Any]) -> EndpointResult:
481
486
  if "header_hash" not in request:
482
487
  raise ValueError("No header_hash in request")
483
488
  header_hash = bytes32.from_hexstr(request["header_hash"])
@@ -506,7 +511,7 @@ class FullNodeRpcApi:
506
511
  ]
507
512
  }
508
513
 
509
- async def get_block_record_by_height(self, request: Dict[str, Any]) -> EndpointResult:
514
+ async def get_block_record_by_height(self, request: dict[str, Any]) -> EndpointResult:
510
515
  if "height" not in request:
511
516
  raise ValueError("No height in request")
512
517
  height = request["height"]
@@ -525,7 +530,7 @@ class FullNodeRpcApi:
525
530
  raise ValueError(f"Block {header_hash} does not exist")
526
531
  return {"block_record": record}
527
532
 
528
- async def get_block_record(self, request: Dict[str, Any]) -> EndpointResult:
533
+ async def get_block_record(self, request: dict[str, Any]) -> EndpointResult:
529
534
  if "header_hash" not in request:
530
535
  raise ValueError("header_hash not in request")
531
536
  header_hash_str = request["header_hash"]
@@ -539,12 +544,12 @@ class FullNodeRpcApi:
539
544
 
540
545
  return {"block_record": record}
541
546
 
542
- async def get_unfinished_block_headers(self, _request: Dict[str, Any]) -> EndpointResult:
547
+ async def get_unfinished_block_headers(self, _request: dict[str, Any]) -> EndpointResult:
543
548
  peak: Optional[BlockRecord] = self.service.blockchain.get_peak()
544
549
  if peak is None:
545
550
  return {"headers": []}
546
551
 
547
- response_headers: List[UnfinishedHeaderBlock] = []
552
+ response_headers: list[UnfinishedHeaderBlock] = []
548
553
  for block in self.service.full_node_store.get_unfinished_blocks(peak.height):
549
554
  unfinished_header_block = UnfinishedHeaderBlock(
550
555
  block.finished_sub_slots,
@@ -558,7 +563,7 @@ class FullNodeRpcApi:
558
563
  response_headers.append(unfinished_header_block)
559
564
  return {"headers": response_headers}
560
565
 
561
- async def get_network_space(self, request: Dict[str, Any]) -> EndpointResult:
566
+ async def get_network_space(self, request: dict[str, Any]) -> EndpointResult:
562
567
  """
563
568
  Retrieves an estimate of total space validating the chain
564
569
  between two block header hashes.
@@ -599,13 +604,13 @@ class FullNodeRpcApi:
599
604
  )
600
605
  return {"space": uint128(int(network_space_bytes_estimate))}
601
606
 
602
- async def get_coin_records_by_puzzle_hash(self, request: Dict[str, Any]) -> EndpointResult:
607
+ async def get_coin_records_by_puzzle_hash(self, request: dict[str, Any]) -> EndpointResult:
603
608
  """
604
609
  Retrieves the coins for a given puzzlehash, by default returns unspent coins.
605
610
  """
606
611
  if "puzzle_hash" not in request:
607
612
  raise ValueError("Puzzle hash not in request")
608
- kwargs: Dict[str, Any] = {"include_spent_coins": False, "puzzle_hash": hexstr_to_bytes(request["puzzle_hash"])}
613
+ kwargs: dict[str, Any] = {"include_spent_coins": False, "puzzle_hash": hexstr_to_bytes(request["puzzle_hash"])}
609
614
  if "start_height" in request:
610
615
  kwargs["start_height"] = uint32(request["start_height"])
611
616
  if "end_height" in request:
@@ -618,13 +623,13 @@ class FullNodeRpcApi:
618
623
 
619
624
  return {"coin_records": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in coin_records]}
620
625
 
621
- async def get_coin_records_by_puzzle_hashes(self, request: Dict[str, Any]) -> EndpointResult:
626
+ async def get_coin_records_by_puzzle_hashes(self, request: dict[str, Any]) -> EndpointResult:
622
627
  """
623
628
  Retrieves the coins for a given puzzlehash, by default returns unspent coins.
624
629
  """
625
630
  if "puzzle_hashes" not in request:
626
631
  raise ValueError("Puzzle hashes not in request")
627
- kwargs: Dict[str, Any] = {
632
+ kwargs: dict[str, Any] = {
628
633
  "include_spent_coins": False,
629
634
  "puzzle_hashes": [hexstr_to_bytes(ph) for ph in request["puzzle_hashes"]],
630
635
  }
@@ -640,7 +645,7 @@ class FullNodeRpcApi:
640
645
 
641
646
  return {"coin_records": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in coin_records]}
642
647
 
643
- async def get_coin_record_by_name(self, request: Dict[str, Any]) -> EndpointResult:
648
+ async def get_coin_record_by_name(self, request: dict[str, Any]) -> EndpointResult:
644
649
  """
645
650
  Retrieves a coin record by its name.
646
651
  """
@@ -654,13 +659,13 @@ class FullNodeRpcApi:
654
659
 
655
660
  return {"coin_record": coin_record_dict_backwards_compat(coin_record.to_json_dict())}
656
661
 
657
- async def get_coin_records_by_names(self, request: Dict[str, Any]) -> EndpointResult:
662
+ async def get_coin_records_by_names(self, request: dict[str, Any]) -> EndpointResult:
658
663
  """
659
664
  Retrieves the coins for given coin IDs, by default returns unspent coins.
660
665
  """
661
666
  if "names" not in request:
662
667
  raise ValueError("Names not in request")
663
- kwargs: Dict[str, Any] = {
668
+ kwargs: dict[str, Any] = {
664
669
  "include_spent_coins": False,
665
670
  "names": [hexstr_to_bytes(name) for name in request["names"]],
666
671
  }
@@ -676,13 +681,13 @@ class FullNodeRpcApi:
676
681
 
677
682
  return {"coin_records": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in coin_records]}
678
683
 
679
- async def get_coin_records_by_parent_ids(self, request: Dict[str, Any]) -> EndpointResult:
684
+ async def get_coin_records_by_parent_ids(self, request: dict[str, Any]) -> EndpointResult:
680
685
  """
681
686
  Retrieves the coins for given parent coin IDs, by default returns unspent coins.
682
687
  """
683
688
  if "parent_ids" not in request:
684
689
  raise ValueError("Parent IDs not in request")
685
- kwargs: Dict[str, Any] = {
690
+ kwargs: dict[str, Any] = {
686
691
  "include_spent_coins": False,
687
692
  "parent_ids": [hexstr_to_bytes(ph) for ph in request["parent_ids"]],
688
693
  }
@@ -698,7 +703,7 @@ class FullNodeRpcApi:
698
703
 
699
704
  return {"coin_records": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in coin_records]}
700
705
 
701
- async def get_coin_records_by_hint(self, request: Dict[str, Any]) -> EndpointResult:
706
+ async def get_coin_records_by_hint(self, request: dict[str, Any]) -> EndpointResult:
702
707
  """
703
708
  Retrieves coins by hint, by default returns unspent coins.
704
709
  """
@@ -708,9 +713,9 @@ class FullNodeRpcApi:
708
713
  if self.service.hint_store is None:
709
714
  return {"coin_records": []}
710
715
 
711
- names: List[bytes32] = await self.service.hint_store.get_coin_ids(bytes32.from_hexstr(request["hint"]))
716
+ names: list[bytes32] = await self.service.hint_store.get_coin_ids(bytes32.from_hexstr(request["hint"]))
712
717
 
713
- kwargs: Dict[str, Any] = {
718
+ kwargs: dict[str, Any] = {
714
719
  "include_spent_coins": False,
715
720
  "names": names,
716
721
  }
@@ -727,7 +732,7 @@ class FullNodeRpcApi:
727
732
 
728
733
  return {"coin_records": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in coin_records]}
729
734
 
730
- async def push_tx(self, request: Dict[str, Any]) -> EndpointResult:
735
+ async def push_tx(self, request: dict[str, Any]) -> EndpointResult:
731
736
  if "spend_bundle" not in request:
732
737
  raise ValueError("Spend bundle not in request")
733
738
 
@@ -752,7 +757,7 @@ class FullNodeRpcApi:
752
757
  "status": status.name,
753
758
  }
754
759
 
755
- async def get_puzzle_and_solution(self, request: Dict[str, Any]) -> EndpointResult:
760
+ async def get_puzzle_and_solution(self, request: dict[str, Any]) -> EndpointResult:
756
761
  coin_name: bytes32 = bytes32.from_hexstr(request["coin_id"])
757
762
  height = request["height"]
758
763
  coin_record = await self.service.coin_store.get_coin_record(coin_name)
@@ -776,7 +781,7 @@ class FullNodeRpcApi:
776
781
  )
777
782
  return {"coin_solution": CoinSpend(coin_record.coin, spend_info.puzzle, spend_info.solution)}
778
783
 
779
- async def get_additions_and_removals(self, request: Dict[str, Any]) -> EndpointResult:
784
+ async def get_additions_and_removals(self, request: dict[str, Any]) -> EndpointResult:
780
785
  if "header_hash" not in request:
781
786
  raise ValueError("No header_hash in request")
782
787
  header_hash = bytes32.from_hexstr(request["header_hash"])
@@ -788,28 +793,28 @@ class FullNodeRpcApi:
788
793
  async with self.service.blockchain.priority_mutex.acquire(priority=BlockchainMutexPriority.low):
789
794
  if self.service.blockchain.height_to_hash(block.height) != header_hash:
790
795
  raise ValueError(f"Block at {header_hash.hex()} is no longer in the blockchain (it's in a fork)")
791
- additions: List[CoinRecord] = await self.service.coin_store.get_coins_added_at_height(block.height)
792
- removals: List[CoinRecord] = await self.service.coin_store.get_coins_removed_at_height(block.height)
796
+ additions: list[CoinRecord] = await self.service.coin_store.get_coins_added_at_height(block.height)
797
+ removals: list[CoinRecord] = await self.service.coin_store.get_coins_removed_at_height(block.height)
793
798
 
794
799
  return {
795
800
  "additions": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in additions],
796
801
  "removals": [coin_record_dict_backwards_compat(cr.to_json_dict()) for cr in removals],
797
802
  }
798
803
 
799
- async def get_aggsig_additional_data(self, _: Dict[str, Any]) -> EndpointResult:
804
+ async def get_aggsig_additional_data(self, _: dict[str, Any]) -> EndpointResult:
800
805
  return {"additional_data": self.service.constants.AGG_SIG_ME_ADDITIONAL_DATA.hex()}
801
806
 
802
- async def get_all_mempool_tx_ids(self, _: Dict[str, Any]) -> EndpointResult:
807
+ async def get_all_mempool_tx_ids(self, _: dict[str, Any]) -> EndpointResult:
803
808
  ids = list(self.service.mempool_manager.mempool.all_item_ids())
804
809
  return {"tx_ids": ids}
805
810
 
806
- async def get_all_mempool_items(self, _: Dict[str, Any]) -> EndpointResult:
811
+ async def get_all_mempool_items(self, _: dict[str, Any]) -> EndpointResult:
807
812
  spends = {}
808
813
  for item in self.service.mempool_manager.mempool.all_items():
809
814
  spends[item.name.hex()] = item.to_json_dict()
810
815
  return {"mempool_items": spends}
811
816
 
812
- async def get_mempool_item_by_tx_id(self, request: Dict[str, Any]) -> EndpointResult:
817
+ async def get_mempool_item_by_tx_id(self, request: dict[str, Any]) -> EndpointResult:
813
818
  if "tx_id" not in request:
814
819
  raise ValueError("No tx_id in request")
815
820
  include_pending: bool = request.get("include_pending", False)
@@ -821,7 +826,7 @@ class FullNodeRpcApi:
821
826
 
822
827
  return {"mempool_item": item.to_json_dict()}
823
828
 
824
- async def get_mempool_items_by_coin_name(self, request: Dict[str, Any]) -> EndpointResult:
829
+ async def get_mempool_items_by_coin_name(self, request: dict[str, Any]) -> EndpointResult:
825
830
  if "coin_name" not in request:
826
831
  raise ValueError("No coin_name in request")
827
832
 
@@ -849,7 +854,7 @@ class FullNodeRpcApi:
849
854
  }
850
855
  return uint64(tx_cost_estimates[name])
851
856
 
852
- async def _validate_fee_estimate_cost(self, request: Dict[str, Any]) -> uint64:
857
+ async def _validate_fee_estimate_cost(self, request: dict[str, Any]) -> uint64:
853
858
  c = 0
854
859
  ns = ["spend_bundle", "cost", "spend_type"]
855
860
  for n in ns:
@@ -869,17 +874,17 @@ class FullNodeRpcApi:
869
874
  cost *= request.get("spend_count", 1)
870
875
  return uint64(cost)
871
876
 
872
- def _validate_target_times(self, request: Dict[str, Any]) -> None:
877
+ def _validate_target_times(self, request: dict[str, Any]) -> None:
873
878
  if "target_times" not in request:
874
879
  raise ValueError("Request must contain 'target_times' array")
875
880
  if any(t < 0 for t in request["target_times"]):
876
881
  raise ValueError("'target_times' array members must be non-negative")
877
882
 
878
- async def get_fee_estimate(self, request: Dict[str, Any]) -> Dict[str, Any]:
883
+ async def get_fee_estimate(self, request: dict[str, Any]) -> dict[str, Any]:
879
884
  self._validate_target_times(request)
880
885
  spend_cost = await self._validate_fee_estimate_cost(request)
881
886
 
882
- target_times: List[int] = request["target_times"]
887
+ target_times: list[int] = request["target_times"]
883
888
  estimator: FeeEstimatorInterface = self.service.mempool_manager.mempool.fee_estimator
884
889
  target_times.sort()
885
890
  estimates = [
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Dict, List, Optional, Tuple, cast
3
+ from typing import Any, Optional, cast
4
4
 
5
5
  from chia.consensus.block_record import BlockRecord
6
6
  from chia.full_node.signage_point import SignagePoint
@@ -15,7 +15,7 @@ from chia.types.unfinished_header_block import UnfinishedHeaderBlock
15
15
  from chia.util.ints import uint32
16
16
 
17
17
 
18
- def coin_record_dict_backwards_compat(coin_record: Dict[str, Any]) -> Dict[str, Any]:
18
+ def coin_record_dict_backwards_compat(coin_record: dict[str, Any]) -> dict[str, Any]:
19
19
  del coin_record["spent"]
20
20
  return coin_record
21
21
 
@@ -29,11 +29,11 @@ class FullNodeRpcClient(RpcClient):
29
29
  to the full node.
30
30
  """
31
31
 
32
- async def get_blockchain_state(self) -> Dict[str, Any]:
32
+ async def get_blockchain_state(self) -> dict[str, Any]:
33
33
  response = await self.fetch("get_blockchain_state", {})
34
34
  if response["blockchain_state"]["peak"] is not None:
35
35
  response["blockchain_state"]["peak"] = BlockRecord.from_json_dict(response["blockchain_state"]["peak"])
36
- return cast(Dict[str, Any], response["blockchain_state"])
36
+ return cast(dict[str, Any], response["blockchain_state"])
37
37
 
38
38
  async def get_block(self, header_hash: bytes32) -> Optional[FullBlock]:
39
39
  try:
@@ -42,7 +42,7 @@ class FullNodeRpcClient(RpcClient):
42
42
  return None
43
43
  return FullBlock.from_json_dict(response["block"])
44
44
 
45
- async def get_blocks(self, start: int, end: int, exclude_reorged: bool = False) -> List[FullBlock]:
45
+ async def get_blocks(self, start: int, end: int, exclude_reorged: bool = False) -> list[FullBlock]:
46
46
  response = await self.fetch(
47
47
  "get_blocks", {"start": start, "end": end, "exclude_header_hash": True, "exclude_reorged": exclude_reorged}
48
48
  )
@@ -64,11 +64,11 @@ class FullNodeRpcClient(RpcClient):
64
64
  return None
65
65
  return BlockRecord.from_json_dict(response["block_record"])
66
66
 
67
- async def get_unfinished_block_headers(self) -> List[UnfinishedHeaderBlock]:
67
+ async def get_unfinished_block_headers(self) -> list[UnfinishedHeaderBlock]:
68
68
  response = await self.fetch("get_unfinished_block_headers", {})
69
69
  return [UnfinishedHeaderBlock.from_json_dict(r) for r in response["headers"]]
70
70
 
71
- async def get_all_block(self, start: uint32, end: uint32) -> List[FullBlock]:
71
+ async def get_all_block(self, start: uint32, end: uint32) -> list[FullBlock]:
72
72
  response = await self.fetch("get_blocks", {"start": start, "end": end, "exclude_header_hash": True})
73
73
  return [FullBlock.from_json_dict(r) for r in response["blocks"]]
74
74
 
@@ -93,11 +93,11 @@ class FullNodeRpcClient(RpcClient):
93
93
 
94
94
  async def get_coin_records_by_names(
95
95
  self,
96
- names: List[bytes32],
96
+ names: list[bytes32],
97
97
  include_spent_coins: bool = True,
98
98
  start_height: Optional[int] = None,
99
99
  end_height: Optional[int] = None,
100
- ) -> List[CoinRecord]:
100
+ ) -> list[CoinRecord]:
101
101
  names_hex = [name.hex() for name in names]
102
102
  d = {"names": names_hex, "include_spent_coins": include_spent_coins}
103
103
  if start_height is not None:
@@ -114,7 +114,7 @@ class FullNodeRpcClient(RpcClient):
114
114
  include_spent_coins: bool = True,
115
115
  start_height: Optional[int] = None,
116
116
  end_height: Optional[int] = None,
117
- ) -> List[CoinRecord]:
117
+ ) -> list[CoinRecord]:
118
118
  d = {"puzzle_hash": puzzle_hash.hex(), "include_spent_coins": include_spent_coins}
119
119
  if start_height is not None:
120
120
  d["start_height"] = start_height
@@ -126,11 +126,11 @@ class FullNodeRpcClient(RpcClient):
126
126
 
127
127
  async def get_coin_records_by_puzzle_hashes(
128
128
  self,
129
- puzzle_hashes: List[bytes32],
129
+ puzzle_hashes: list[bytes32],
130
130
  include_spent_coins: bool = True,
131
131
  start_height: Optional[int] = None,
132
132
  end_height: Optional[int] = None,
133
- ) -> List[CoinRecord]:
133
+ ) -> list[CoinRecord]:
134
134
  puzzle_hashes_hex = [ph.hex() for ph in puzzle_hashes]
135
135
  d = {"puzzle_hashes": puzzle_hashes_hex, "include_spent_coins": include_spent_coins}
136
136
  if start_height is not None:
@@ -143,11 +143,11 @@ class FullNodeRpcClient(RpcClient):
143
143
 
144
144
  async def get_coin_records_by_parent_ids(
145
145
  self,
146
- parent_ids: List[bytes32],
146
+ parent_ids: list[bytes32],
147
147
  include_spent_coins: bool = True,
148
148
  start_height: Optional[int] = None,
149
149
  end_height: Optional[int] = None,
150
- ) -> List[CoinRecord]:
150
+ ) -> list[CoinRecord]:
151
151
  parent_ids_hex = [pid.hex() for pid in parent_ids]
152
152
  d = {"parent_ids": parent_ids_hex, "include_spent_coins": include_spent_coins}
153
153
  if start_height is not None:
@@ -168,7 +168,7 @@ class FullNodeRpcClient(RpcClient):
168
168
  include_spent_coins: bool = True,
169
169
  start_height: Optional[int] = None,
170
170
  end_height: Optional[int] = None,
171
- ) -> List[CoinRecord]:
171
+ ) -> list[CoinRecord]:
172
172
  d = {"hint": hint.hex(), "include_spent_coins": include_spent_coins}
173
173
  if start_height is not None:
174
174
  d["start_height"] = start_height
@@ -178,7 +178,7 @@ class FullNodeRpcClient(RpcClient):
178
178
  response = await self.fetch("get_coin_records_by_hint", d)
179
179
  return [CoinRecord.from_json_dict(coin_record_dict_backwards_compat(coin)) for coin in response["coin_records"]]
180
180
 
181
- async def get_additions_and_removals(self, header_hash: bytes32) -> Tuple[List[CoinRecord], List[CoinRecord]]:
181
+ async def get_additions_and_removals(self, header_hash: bytes32) -> tuple[list[CoinRecord], list[CoinRecord]]:
182
182
  try:
183
183
  response = await self.fetch("get_additions_and_removals", {"header_hash": header_hash.hex()})
184
184
  except Exception:
@@ -191,7 +191,7 @@ class FullNodeRpcClient(RpcClient):
191
191
  additions.append(CoinRecord.from_json_dict(coin_record_dict_backwards_compat(coin_record)))
192
192
  return additions, removals
193
193
 
194
- async def get_block_records(self, start: int, end: int) -> List[Dict[str, Any]]:
194
+ async def get_block_records(self, start: int, end: int) -> list[dict[str, Any]]:
195
195
  try:
196
196
  response = await self.fetch("get_block_records", {"start": start, "end": end})
197
197
  if response["block_records"] is None:
@@ -199,9 +199,9 @@ class FullNodeRpcClient(RpcClient):
199
199
  except Exception:
200
200
  return []
201
201
  # TODO: return block records
202
- return cast(List[Dict[str, Any]], response["block_records"])
202
+ return cast(list[dict[str, Any]], response["block_records"])
203
203
 
204
- async def get_block_spends(self, header_hash: bytes32) -> Optional[List[CoinSpend]]:
204
+ async def get_block_spends(self, header_hash: bytes32) -> Optional[list[CoinSpend]]:
205
205
  try:
206
206
  response = await self.fetch("get_block_spends", {"header_hash": header_hash.hex()})
207
207
  block_spends = []
@@ -211,10 +211,10 @@ class FullNodeRpcClient(RpcClient):
211
211
  except Exception:
212
212
  return None
213
213
 
214
- async def get_block_spends_with_conditions(self, header_hash: bytes32) -> Optional[List[CoinSpendWithConditions]]:
214
+ async def get_block_spends_with_conditions(self, header_hash: bytes32) -> Optional[list[CoinSpendWithConditions]]:
215
215
  try:
216
216
  response = await self.fetch("get_block_spends_with_conditions", {"header_hash": header_hash.hex()})
217
- block_spends: List[CoinSpendWithConditions] = []
217
+ block_spends: list[CoinSpendWithConditions] = []
218
218
  for block_spend in response["block_spends_with_conditions"]:
219
219
  block_spends.append(CoinSpendWithConditions.from_json_dict(block_spend))
220
220
  return block_spends
@@ -222,7 +222,7 @@ class FullNodeRpcClient(RpcClient):
222
222
  except Exception:
223
223
  return None
224
224
 
225
- async def push_tx(self, spend_bundle: SpendBundle) -> Dict[str, Any]:
225
+ async def push_tx(self, spend_bundle: SpendBundle) -> dict[str, Any]:
226
226
  return await self.fetch("push_tx", {"spend_bundle": spend_bundle.to_json_dict()})
227
227
 
228
228
  async def get_puzzle_and_solution(self, coin_id: bytes32, height: uint32) -> Optional[CoinSpend]:
@@ -232,13 +232,13 @@ class FullNodeRpcClient(RpcClient):
232
232
  except Exception:
233
233
  return None
234
234
 
235
- async def get_all_mempool_tx_ids(self) -> List[bytes32]:
235
+ async def get_all_mempool_tx_ids(self) -> list[bytes32]:
236
236
  response = await self.fetch("get_all_mempool_tx_ids", {})
237
237
  return [bytes32.from_hexstr(tx_id_hex) for tx_id_hex in response["tx_ids"]]
238
238
 
239
- async def get_all_mempool_items(self) -> Dict[bytes32, Dict[str, Any]]:
239
+ async def get_all_mempool_items(self) -> dict[bytes32, dict[str, Any]]:
240
240
  response = await self.fetch("get_all_mempool_items", {})
241
- converted: Dict[bytes32, Dict[str, Any]] = {}
241
+ converted: dict[bytes32, dict[str, Any]] = {}
242
242
  for tx_id_hex, item in response["mempool_items"].items():
243
243
  converted[bytes32.from_hexstr(tx_id_hex)] = item
244
244
  return converted
@@ -247,16 +247,16 @@ class FullNodeRpcClient(RpcClient):
247
247
  self,
248
248
  tx_id: bytes32,
249
249
  include_pending: bool = False,
250
- ) -> Optional[Dict[str, Any]]:
250
+ ) -> Optional[dict[str, Any]]:
251
251
  try:
252
252
  response = await self.fetch(
253
253
  "get_mempool_item_by_tx_id", {"tx_id": tx_id.hex(), "include_pending": include_pending}
254
254
  )
255
- return cast(Dict[str, Any], response["mempool_item"])
255
+ return cast(dict[str, Any], response["mempool_item"])
256
256
  except Exception:
257
257
  return None
258
258
 
259
- async def get_mempool_items_by_coin_name(self, coin_name: bytes32) -> Dict[str, Any]:
259
+ async def get_mempool_items_by_coin_name(self, coin_name: bytes32) -> dict[str, Any]:
260
260
  response = await self.fetch("get_mempool_items_by_coin_name", {"coin_name": coin_name.hex()})
261
261
  return response
262
262
 
@@ -285,8 +285,8 @@ class FullNodeRpcClient(RpcClient):
285
285
 
286
286
  async def get_fee_estimate(
287
287
  self,
288
- target_times: Optional[List[int]],
288
+ target_times: Optional[list[int]],
289
289
  cost: Optional[int],
290
- ) -> Dict[str, Any]:
290
+ ) -> dict[str, Any]:
291
291
  response = await self.fetch("get_fee_estimate", {"cost": cost, "target_times": target_times})
292
292
  return response