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,10 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import builtins
3
4
  from dataclasses import dataclass
4
- from typing import Any, Dict, Generic, List, Optional, Tuple, Type, TypeVar
5
+ from typing import Any, Generic, Optional, TypeVar
6
+
7
+ from chia_rs import SpendBundle
5
8
 
6
9
  from chia.consensus.coinbase import farmer_parent_id, pool_parent_id
7
10
  from chia.types.blockchain_format.coin import Coin
@@ -24,7 +27,7 @@ minimum_send_attempts = 6
24
27
  @dataclass
25
28
  class ItemAndTransactionRecords(Generic[T]):
26
29
  item: T
27
- transaction_records: List[TransactionRecord]
30
+ transaction_records: list[TransactionRecord]
28
31
 
29
32
 
30
33
  @streamable
@@ -42,31 +45,31 @@ class TransactionRecordOld(Streamable):
42
45
  confirmed: bool
43
46
  sent: uint32
44
47
  spend_bundle: Optional[WalletSpendBundle]
45
- additions: List[Coin]
46
- removals: List[Coin]
48
+ additions: list[Coin]
49
+ removals: list[Coin]
47
50
  wallet_id: uint32
48
51
 
49
52
  # Represents the list of peers that we sent the transaction to, whether each one
50
53
  # included it in the mempool, and what the error message (if any) was
51
- sent_to: List[Tuple[str, uint8, Optional[str]]]
54
+ sent_to: list[tuple[str, uint8, Optional[str]]]
52
55
  trade_id: Optional[bytes32]
53
56
  type: uint32 # TransactionType
54
57
 
55
58
  # name is also called bundle_id and tx_id
56
59
  name: bytes32
57
- memos: List[Tuple[bytes32, List[bytes]]]
60
+ memos: list[tuple[bytes32, list[bytes]]]
58
61
 
59
62
  def is_in_mempool(self) -> bool:
60
63
  # If one of the nodes we sent it to responded with success or pending, we return True
61
64
  for _, mis, _ in self.sent_to:
62
- if MempoolInclusionStatus(mis) in (MempoolInclusionStatus.SUCCESS, MempoolInclusionStatus.PENDING):
65
+ if MempoolInclusionStatus(mis) in {MempoolInclusionStatus.SUCCESS, MempoolInclusionStatus.PENDING}:
63
66
  return True
64
67
  return False
65
68
 
66
69
  def height_farmed(self, genesis_challenge: bytes32) -> Optional[uint32]:
67
70
  if not self.confirmed:
68
71
  return None
69
- if self.type == TransactionType.FEE_REWARD or self.type == TransactionType.COINBASE_REWARD:
72
+ if self.type in {TransactionType.FEE_REWARD, TransactionType.COINBASE_REWARD}:
70
73
  for block_index in range(self.confirmed_at_height, self.confirmed_at_height - 100, -1):
71
74
  if block_index < 0:
72
75
  return None
@@ -78,19 +81,21 @@ class TransactionRecordOld(Streamable):
78
81
  return uint32(block_index)
79
82
  return None
80
83
 
81
- def get_memos(self) -> Dict[bytes32, List[bytes]]:
84
+ def get_memos(self) -> dict[bytes32, list[bytes]]:
82
85
  return {coin_id: ms for coin_id, ms in self.memos}
83
86
 
84
87
  @classmethod
85
- def from_json_dict_convenience(cls: Type[_T_TransactionRecord], modified_tx_input: Dict) -> _T_TransactionRecord:
88
+ def from_json_dict_convenience(
89
+ cls: builtins.type[_T_TransactionRecord], modified_tx_input: dict
90
+ ) -> _T_TransactionRecord:
86
91
  modified_tx = modified_tx_input.copy()
87
92
  if "to_address" in modified_tx:
88
93
  modified_tx["to_puzzle_hash"] = decode_puzzle_hash(modified_tx["to_address"]).hex()
89
94
  if "to_address" in modified_tx:
90
95
  del modified_tx["to_address"]
91
96
  # Converts memos from a flat dict into a nested list
92
- memos_dict: Dict[str, List[str]] = {}
93
- memos_list: List = []
97
+ memos_dict: dict[str, list[str]] = {}
98
+ memos_list: list = []
94
99
  if "memos" in modified_tx:
95
100
  for coin_id, memo in modified_tx["memos"].items():
96
101
  if coin_id not in memos_dict:
@@ -102,13 +107,13 @@ class TransactionRecordOld(Streamable):
102
107
  return cls.from_json_dict(modified_tx)
103
108
 
104
109
  @classmethod
105
- def from_json_dict(cls: Type[_T_TransactionRecord], json_dict: Dict[str, Any]) -> _T_TransactionRecord:
110
+ def from_json_dict(cls: builtins.type[_T_TransactionRecord], json_dict: dict[str, Any]) -> _T_TransactionRecord:
106
111
  try:
107
112
  return super().from_json_dict(json_dict)
108
113
  except Exception:
109
114
  return cls.from_json_dict_convenience(json_dict)
110
115
 
111
- def to_json_dict_convenience(self, config: Dict) -> Dict:
116
+ def to_json_dict_convenience(self, config: dict) -> dict:
112
117
  selected = config["selected_network"]
113
118
  prefix = config["network_overrides"]["config"][selected]["address_prefix"]
114
119
  formatted = self.to_json_dict()
@@ -128,12 +133,12 @@ class TransactionRecordOld(Streamable):
128
133
  if any(x[1] == MempoolInclusionStatus.SUCCESS for x in self.sent_to):
129
134
  # we managed to push it to mempool at least once
130
135
  return True
131
- if any(x[2] in (Err.INVALID_FEE_LOW_FEE.name, Err.INVALID_FEE_TOO_CLOSE_TO_ZERO.name) for x in self.sent_to):
136
+ if any(x[2] in {Err.INVALID_FEE_LOW_FEE.name, Err.INVALID_FEE_TOO_CLOSE_TO_ZERO.name} for x in self.sent_to):
132
137
  # we tried to push it to mempool and got a fee error so it's a temporary error
133
138
  return True
134
139
  return False
135
140
 
136
- def hint_dict(self) -> Dict[bytes32, bytes32]:
141
+ def hint_dict(self) -> dict[bytes32, bytes32]:
137
142
  return {coin_id: bytes32(memos[0]) for coin_id, memos in self.memos if len(memos) > 0 and len(memos[0]) == 32}
138
143
 
139
144
 
@@ -141,3 +146,13 @@ class TransactionRecordOld(Streamable):
141
146
  @dataclass(frozen=True)
142
147
  class TransactionRecord(TransactionRecordOld):
143
148
  valid_times: ConditionValidTimes
149
+
150
+
151
+ @streamable
152
+ @dataclass(frozen=True)
153
+ class LightTransactionRecord(Streamable):
154
+ name: bytes32
155
+ type: uint32
156
+ additions: list[Coin]
157
+ removals: list[Coin]
158
+ spend_bundle: Optional[SpendBundle]
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from enum import Enum
4
- from typing import Any, Dict, Set
4
+ from typing import Any
5
5
 
6
6
  from chia.util.bech32m import bech32_decode, convertbits
7
7
  from chia.util.config import selected_network_address_prefix
@@ -12,7 +12,7 @@ class AddressType(Enum):
12
12
  NFT = "nft"
13
13
  DID = "did:chia:"
14
14
 
15
- def hrp(self, config: Dict[str, Any]) -> str:
15
+ def hrp(self, config: dict[str, Any]) -> str:
16
16
  if self == AddressType.XCH:
17
17
  # Special case to map XCH to the current network's address prefix
18
18
  return selected_network_address_prefix(config)
@@ -24,7 +24,7 @@ class AddressType(Enum):
24
24
  return 32
25
25
 
26
26
 
27
- def is_valid_address(address: str, allowed_types: Set[AddressType], config: Dict[str, Any]) -> bool:
27
+ def is_valid_address(address: str, allowed_types: set[AddressType], config: dict[str, Any]) -> bool:
28
28
  try:
29
29
  ensure_valid_address(address, allowed_types=allowed_types, config=config)
30
30
  return True
@@ -32,7 +32,7 @@ def is_valid_address(address: str, allowed_types: Set[AddressType], config: Dict
32
32
  return False
33
33
 
34
34
 
35
- def ensure_valid_address(address: str, *, allowed_types: Set[AddressType], config: Dict[str, Any]) -> str:
35
+ def ensure_valid_address(address: str, *, allowed_types: set[AddressType], config: dict[str, Any]) -> str:
36
36
  hrp, b32data = bech32_decode(address)
37
37
  if not b32data or not hrp:
38
38
  raise ValueError(f"Invalid address: {address}")
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass, field
4
- from typing import List
5
4
 
6
5
  from chia.types.blockchain_format.sized_bytes import bytes32
7
6
  from chia.util.ints import uint64
@@ -18,9 +17,6 @@ from chia.wallet.signer_protocol import (
18
17
  )
19
18
  from chia.wallet.util.clvm_streamable import TranslationLayer, TranslationLayerMapping, clvm_streamable
20
19
 
21
- # Pylint doesn't understand that these classes are in fact dataclasses
22
- # pylint: disable=invalid-field-call
23
-
24
20
 
25
21
  @clvm_streamable
26
22
  @dataclass(frozen=True)
@@ -41,7 +37,7 @@ class BSTLSigningTarget(Streamable):
41
37
  @clvm_streamable
42
38
  @dataclass(frozen=True)
43
39
  class BSTLSumHint(Streamable):
44
- fingerprints: List[bytes] = field(metadata=dict(key="f"))
40
+ fingerprints: list[bytes] = field(metadata=dict(key="f"))
45
41
  synthetic_offset: bytes = field(metadata=dict(key="o"))
46
42
  final_pubkey: bytes = field(metadata=dict(key="p"))
47
43
 
@@ -58,7 +54,7 @@ class BSTLSumHint(Streamable):
58
54
  @dataclass(frozen=True)
59
55
  class BSTLPathHint(Streamable):
60
56
  root_fingerprint: bytes = field(metadata=dict(key="f"))
61
- path: List[uint64] = field(metadata=dict(key="p"))
57
+ path: list[uint64] = field(metadata=dict(key="p"))
62
58
 
63
59
  @staticmethod
64
60
  def from_wallet_api(_from: PathHint) -> BSTLPathHint:
@@ -72,9 +68,9 @@ class BSTLPathHint(Streamable):
72
68
  @clvm_streamable
73
69
  @dataclass(frozen=True)
74
70
  class BSTLSigningInstructions(Streamable):
75
- sum_hints: List[BSTLSumHint] = field(metadata=dict(key="s"))
76
- path_hints: List[BSTLPathHint] = field(metadata=dict(key="p"))
77
- targets: List[BSTLSigningTarget] = field(metadata=dict(key="t"))
71
+ sum_hints: list[BSTLSumHint] = field(metadata=dict(key="s"))
72
+ path_hints: list[BSTLPathHint] = field(metadata=dict(key="p"))
73
+ targets: list[BSTLSigningTarget] = field(metadata=dict(key="t"))
78
74
 
79
75
  @staticmethod
80
76
  def from_wallet_api(_from: SigningInstructions) -> BSTLSigningInstructions:
@@ -98,9 +94,9 @@ class BSTLSigningInstructions(Streamable):
98
94
  @clvm_streamable
99
95
  @dataclass(frozen=True)
100
96
  class BSTLUnsignedTransaction(Streamable):
101
- sum_hints: List[BSTLSumHint] = field(metadata=dict(key="s"))
102
- path_hints: List[BSTLPathHint] = field(metadata=dict(key="p"))
103
- targets: List[BSTLSigningTarget] = field(metadata=dict(key="t"))
97
+ sum_hints: list[BSTLSumHint] = field(metadata=dict(key="s"))
98
+ path_hints: list[BSTLPathHint] = field(metadata=dict(key="p"))
99
+ targets: list[BSTLSigningTarget] = field(metadata=dict(key="t"))
104
100
 
105
101
  @staticmethod
106
102
  def from_wallet_api(_from: UnsignedTransaction) -> BSTLUnsignedTransaction:
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import dataclasses
4
4
  import functools
5
5
  from types import MappingProxyType
6
- from typing import Any, Callable, Dict, Generic, List, Optional, Type, TypeVar, Union, get_args, get_type_hints
6
+ from typing import Any, Callable, Generic, Optional, TypeVar, Union, get_args, get_type_hints
7
7
 
8
8
  from hsms.clvm_serde import from_program_for_type, to_program_for_type
9
9
  from typing_extensions import TypeGuard
@@ -22,8 +22,8 @@ from chia.util.streamable import (
22
22
  _T_Streamable = TypeVar("_T_Streamable", bound=Streamable)
23
23
 
24
24
 
25
- def clvm_streamable(cls: Type[Streamable]) -> Type[Streamable]:
26
- wrapped_cls: Type[Streamable] = streamable(cls)
25
+ def clvm_streamable(cls: type[Streamable]) -> type[Streamable]:
26
+ wrapped_cls: type[Streamable] = streamable(cls)
27
27
  setattr(wrapped_cls, "_clvm_streamable", True)
28
28
 
29
29
  hints = get_type_hints(cls)
@@ -55,10 +55,10 @@ def byte_serialize_clvm_streamable(
55
55
 
56
56
  def json_serialize_with_clvm_streamable(
57
57
  streamable: object,
58
- next_recursion_step: Optional[Callable[..., Dict[str, Any]]] = None,
58
+ next_recursion_step: Optional[Callable[..., dict[str, Any]]] = None,
59
59
  translation_layer: Optional[TranslationLayer] = None,
60
60
  **next_recursion_env: Any,
61
- ) -> Union[str, Dict[str, Any]]:
61
+ ) -> Union[str, dict[str, Any]]:
62
62
  if next_recursion_step is None:
63
63
  next_recursion_step = recurse_jsonify
64
64
  if is_clvm_streamable(streamable):
@@ -71,9 +71,9 @@ def json_serialize_with_clvm_streamable(
71
71
 
72
72
 
73
73
  def program_deserialize_clvm_streamable(
74
- program: Program, clvm_streamable_type: Type[_T_Streamable], translation_layer: Optional[TranslationLayer] = None
74
+ program: Program, clvm_streamable_type: type[_T_Streamable], translation_layer: Optional[TranslationLayer] = None
75
75
  ) -> _T_Streamable:
76
- type_to_deserialize_from: Type[Streamable] = clvm_streamable_type
76
+ type_to_deserialize_from: type[Streamable] = clvm_streamable_type
77
77
  if translation_layer is not None:
78
78
  mapping = translation_layer.get_mapping(clvm_streamable_type)
79
79
  if mapping is not None:
@@ -87,7 +87,7 @@ def program_deserialize_clvm_streamable(
87
87
 
88
88
 
89
89
  def byte_deserialize_clvm_streamable(
90
- blob: bytes, clvm_streamable_type: Type[_T_Streamable], translation_layer: Optional[TranslationLayer] = None
90
+ blob: bytes, clvm_streamable_type: type[_T_Streamable], translation_layer: Optional[TranslationLayer] = None
91
91
  ) -> _T_Streamable:
92
92
  return program_deserialize_clvm_streamable(
93
93
  Program.from_bytes(blob), clvm_streamable_type, translation_layer=translation_layer
@@ -100,7 +100,7 @@ def is_compound_type(typ: Any) -> bool:
100
100
 
101
101
  # TODO: this is more than _just_ a Streamable, but it is also a Streamable and that's
102
102
  # useful for now
103
- def is_clvm_streamable_type(v: Type[object]) -> TypeGuard[Type[Streamable]]:
103
+ def is_clvm_streamable_type(v: type[object]) -> TypeGuard[type[Streamable]]:
104
104
  return issubclass(v, Streamable) and hasattr(v, "_clvm_streamable")
105
105
 
106
106
 
@@ -111,8 +111,8 @@ def is_clvm_streamable(v: object) -> TypeGuard[Streamable]:
111
111
 
112
112
 
113
113
  def json_deserialize_with_clvm_streamable(
114
- json_dict: Union[str, Dict[str, Any]],
115
- streamable_type: Type[_T_Streamable],
114
+ json_dict: Union[str, dict[str, Any]],
115
+ streamable_type: type[_T_Streamable],
116
116
  translation_layer: Optional[TranslationLayer] = None,
117
117
  ) -> _T_Streamable:
118
118
  if isinstance(json_dict, str):
@@ -165,18 +165,18 @@ _T_TLClvmStreamable = TypeVar("_T_TLClvmStreamable", bound="Streamable")
165
165
 
166
166
  @dataclasses.dataclass(frozen=True)
167
167
  class TranslationLayerMapping(Generic[_T_ClvmStreamable, _T_TLClvmStreamable]):
168
- from_type: Type[_T_ClvmStreamable]
169
- to_type: Type[_T_TLClvmStreamable]
168
+ from_type: type[_T_ClvmStreamable]
169
+ to_type: type[_T_TLClvmStreamable]
170
170
  serialize_function: Callable[[_T_ClvmStreamable], _T_TLClvmStreamable]
171
171
  deserialize_function: Callable[[_T_TLClvmStreamable], _T_ClvmStreamable]
172
172
 
173
173
 
174
174
  @dataclasses.dataclass(frozen=True)
175
175
  class TranslationLayer:
176
- type_mappings: List[TranslationLayerMapping[Any, Any]]
176
+ type_mappings: list[TranslationLayerMapping[Any, Any]]
177
177
 
178
178
  def get_mapping(
179
- self, _type: Type[_T_ClvmStreamable]
179
+ self, _type: type[_T_ClvmStreamable]
180
180
  ) -> Optional[TranslationLayerMapping[_T_ClvmStreamable, Streamable]]:
181
181
  mappings = [m for m in self.type_mappings if m.from_type == _type]
182
182
  if len(mappings) == 1:
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Dict, Optional, Tuple
4
+ from typing import Optional
5
5
 
6
6
  from chia.consensus.condition_costs import ConditionCost
7
7
  from chia.consensus.default_constants import DEFAULT_CONSTANTS
@@ -24,16 +24,16 @@ def compute_spend_hints_and_additions(
24
24
  cs: CoinSpend,
25
25
  *,
26
26
  max_cost: int = DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM,
27
- ) -> Tuple[Dict[bytes32, HintedCoin], int]:
27
+ ) -> tuple[dict[bytes32, HintedCoin], int]:
28
28
  cost, result_program = cs.puzzle_reveal.run_with_cost(max_cost, cs.solution)
29
29
 
30
- hinted_coins: Dict[bytes32, HintedCoin] = {}
30
+ hinted_coins: dict[bytes32, HintedCoin] = {}
31
31
  for condition in result_program.as_iter():
32
32
  if cost > max_cost:
33
33
  raise ValidationError(Err.BLOCK_COST_EXCEEDS_MAX, "compute_spend_hints_and_additions() for CoinSpend")
34
34
  atoms = condition.as_iter()
35
35
  op = next(atoms).atom
36
- if op in [
36
+ if op in {
37
37
  ConditionOpcode.AGG_SIG_PARENT,
38
38
  ConditionOpcode.AGG_SIG_PUZZLE,
39
39
  ConditionOpcode.AGG_SIG_AMOUNT,
@@ -42,7 +42,7 @@ def compute_spend_hints_and_additions(
42
42
  ConditionOpcode.AGG_SIG_PARENT_PUZZLE,
43
43
  ConditionOpcode.AGG_SIG_UNSAFE,
44
44
  ConditionOpcode.AGG_SIG_ME,
45
- ]:
45
+ }:
46
46
  cost += ConditionCost.AGG_SIG.value
47
47
  continue
48
48
  if op != ConditionOpcode.CREATE_COIN.value:
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Dict, List
4
-
5
3
  from clvm.casts import int_from_bytes
6
4
 
7
5
  from chia.types.blockchain_format.coin import Coin
@@ -13,9 +11,9 @@ from chia.util.ints import uint64
13
11
  from chia.wallet.wallet_spend_bundle import WalletSpendBundle
14
12
 
15
13
 
16
- def compute_memos_for_spend(coin_spend: CoinSpend) -> Dict[bytes32, List[bytes]]:
14
+ def compute_memos_for_spend(coin_spend: CoinSpend) -> dict[bytes32, list[bytes]]:
17
15
  _, result = coin_spend.puzzle_reveal.run_with_cost(INFINITE_COST, coin_spend.solution)
18
- memos: Dict[bytes32, List[bytes]] = {}
16
+ memos: dict[bytes32, list[bytes]] = {}
19
17
  for condition in result.as_python():
20
18
  if condition[0] == ConditionOpcode.CREATE_COIN and len(condition) >= 4:
21
19
  # If only 3 elements (opcode + 2 args), there is no memo, this is ph, amount
@@ -27,13 +25,13 @@ def compute_memos_for_spend(coin_spend: CoinSpend) -> Dict[bytes32, List[bytes]]
27
25
  return memos
28
26
 
29
27
 
30
- def compute_memos(bundle: WalletSpendBundle) -> Dict[bytes32, List[bytes]]:
28
+ def compute_memos(bundle: WalletSpendBundle) -> dict[bytes32, list[bytes]]:
31
29
  """
32
30
  Retrieves the memos for additions in this spend_bundle, which are formatted as a list in the 3rd parameter of
33
31
  CREATE_COIN. If there are no memos, the addition coin_id is not included. If they are not formatted as a list
34
32
  of bytes, they are not included. This is expensive to call, it should not be used in full node code.
35
33
  """
36
- memos: Dict[bytes32, List[bytes]] = {}
34
+ memos: dict[bytes32, list[bytes]] = {}
37
35
  for coin_spend in bundle.coin_spends:
38
36
  spend_memos = compute_memos_for_spend(coin_spend)
39
37
  for coin_name, coin_memos in spend_memos.items():
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from collections.abc import Sequence
3
4
  from hashlib import sha256
4
- from typing import Callable, List, Sequence
5
+ from typing import Callable
5
6
 
6
7
  from clvm.casts import int_to_bytes
7
8
 
@@ -56,7 +57,7 @@ def shatree_int(val: int) -> bytes32:
56
57
  # `1` if R is 0
57
58
 
58
59
 
59
- def curried_values_tree_hash(arguments: List[bytes32]) -> bytes32:
60
+ def curried_values_tree_hash(arguments: list[bytes32]) -> bytes32:
60
61
  if len(arguments) == 0:
61
62
  return ONE_TREEHASH
62
63
 
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import List
4
-
5
3
  from chia_rs import AugSchemeMPL
6
4
  from clvm.operators import KEYWORD_FROM_ATOM
7
5
  from clvm_tools.binutils import disassemble as bu_disassemble
@@ -14,7 +12,7 @@ from chia.util.condition_tools import conditions_dict_for_solution, pkm_pairs_fo
14
12
  from chia.util.hash import std_hash
15
13
  from chia.wallet.uncurried_puzzle import UncurriedPuzzle
16
14
 
17
- CONDITIONS = {k: bytes(v)[0] for k, v in ConditionOpcode.__members__.items()} # pylint: disable=E1101
15
+ CONDITIONS = {opcode.name: opcode.value[0] for opcode in ConditionOpcode}
18
16
  KFA = {v: k for k, v in CONDITIONS.items()}
19
17
 
20
18
 
@@ -76,9 +74,9 @@ def debug_spend_bundle(spend_bundle, agg_sig_additional_data=DEFAULT_CONSTANTS.A
76
74
  pks = []
77
75
  msgs = []
78
76
 
79
- created_coin_announcements: List[List[bytes]] = []
77
+ created_coin_announcements: list[list[bytes]] = []
80
78
  asserted_coin_announcements = []
81
- created_puzzle_announcements: List[List[bytes]] = []
79
+ created_puzzle_announcements: list[list[bytes]] = []
82
80
  asserted_puzzle_announcements = []
83
81
 
84
82
  print("=" * 80)
@@ -110,7 +108,7 @@ def debug_spend_bundle(spend_bundle, agg_sig_additional_data=DEFAULT_CONSTANTS.A
110
108
  pks.append(pk)
111
109
  msgs.append(m)
112
110
  print()
113
- cost, r = puzzle_reveal.run_with_cost(INFINITE_COST, solution)
111
+ _cost, r = puzzle_reveal.run_with_cost(INFINITE_COST, solution)
114
112
  print(disassemble(r))
115
113
  create_coin_conditions = [con for con in r.as_iter() if con.first().as_int() == 51]
116
114
  print()
@@ -141,13 +139,13 @@ def debug_spend_bundle(spend_bundle, agg_sig_additional_data=DEFAULT_CONSTANTS.A
141
139
 
142
140
  print(f" {disassemble(as_prog)}")
143
141
  created_coin_announcements.extend(
144
- [coin_name] + _.vars for _ in conditions.get(ConditionOpcode.CREATE_COIN_ANNOUNCEMENT, [])
142
+ [coin_name, *_.vars] for _ in conditions.get(ConditionOpcode.CREATE_COIN_ANNOUNCEMENT, [])
145
143
  )
146
144
  asserted_coin_announcements.extend(
147
145
  [_.vars[0].hex() for _ in conditions.get(ConditionOpcode.ASSERT_COIN_ANNOUNCEMENT, [])]
148
146
  )
149
147
  created_puzzle_announcements.extend(
150
- [puzzle_reveal.get_tree_hash()] + _.vars
148
+ [puzzle_reveal.get_tree_hash(), *_.vars]
151
149
  for _ in conditions.get(ConditionOpcode.CREATE_PUZZLE_ANNOUNCEMENT, [])
152
150
  )
153
151
  asserted_puzzle_announcements.extend(
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import math
4
4
  from enum import Enum
5
- from typing import List, Optional, Tuple
5
+ from typing import Optional
6
6
 
7
7
  from clvm.casts import int_to_bytes
8
8
 
@@ -28,13 +28,13 @@ class TreeType(Enum):
28
28
 
29
29
  class MerkleTree:
30
30
  type: TreeType
31
- nodes: List[bytes32]
31
+ nodes: list[bytes32]
32
32
 
33
- def __init__(self, nodes: List[bytes32], waterfall: bool = False) -> None:
33
+ def __init__(self, nodes: list[bytes32], waterfall: bool = False) -> None:
34
34
  self.type = TreeType.WATERFALL if waterfall else TreeType.TREE
35
35
  self.nodes = nodes
36
36
 
37
- def split_list(self, puzzle_hashes: List[bytes32]) -> Tuple[List[bytes32], List[bytes32]]:
37
+ def split_list(self, puzzle_hashes: list[bytes32]) -> tuple[list[bytes32], list[bytes32]]:
38
38
  if self.type == TreeType.TREE:
39
39
  mid_index = math.ceil(len(puzzle_hashes) / 2)
40
40
  first = puzzle_hashes[0:mid_index]
@@ -45,7 +45,7 @@ class MerkleTree:
45
45
 
46
46
  return first, rest
47
47
 
48
- def _root(self, puzzle_hashes: List[bytes32]) -> bytes32:
48
+ def _root(self, puzzle_hashes: list[bytes32]) -> bytes32:
49
49
  if len(puzzle_hashes) == 1:
50
50
  return hash_an_atom(puzzle_hashes[0])
51
51
  else:
@@ -56,8 +56,8 @@ class MerkleTree:
56
56
  return self._root(self.nodes)
57
57
 
58
58
  def _proof(
59
- self, puzzle_hashes: List[bytes32], searching_for: bytes32
60
- ) -> Tuple[Optional[int], Optional[List[bytes32]], bytes32, Optional[int]]:
59
+ self, puzzle_hashes: list[bytes32], searching_for: bytes32
60
+ ) -> tuple[Optional[int], Optional[list[bytes32]], bytes32, Optional[int]]:
61
61
  if len(puzzle_hashes) == 1:
62
62
  atom_hash = hash_an_atom(puzzle_hashes[0])
63
63
  if puzzle_hashes[0] == searching_for:
@@ -76,14 +76,14 @@ class MerkleTree:
76
76
  if first_hash[0] is not None:
77
77
  final_list = first_hash[1]
78
78
  # TODO: handle hints
79
- # error: Item "None" of "Optional[List[bytes32]]" has no attribute "append" [union-attr]
79
+ # error: Item "None" of "Optional[list[bytes32]]" has no attribute "append" [union-attr]
80
80
  final_list.append(rest_hash[2]) # type: ignore[union-attr]
81
81
  bit_num = first_hash[3]
82
82
  final_path = first_hash[0]
83
83
  elif rest_hash[0] is not None:
84
84
  final_list = rest_hash[1]
85
85
  # TODO: handle hints
86
- # error: Item "None" of "Optional[List[bytes32]]" has no attribute "append" [union-attr]
86
+ # error: Item "None" of "Optional[list[bytes32]]" has no attribute "append" [union-attr]
87
87
  final_list.append(first_hash[2]) # type: ignore[union-attr]
88
88
  bit_num = rest_hash[3]
89
89
  # TODO: handle hints
@@ -95,6 +95,6 @@ class MerkleTree:
95
95
 
96
96
  return (final_path, final_list, pair_hash, bit_num + 1 if bit_num is not None else None)
97
97
 
98
- def generate_proof(self, leaf_reveal: bytes32) -> Tuple[Optional[int], List[Optional[List[bytes32]]]]:
98
+ def generate_proof(self, leaf_reveal: bytes32) -> tuple[Optional[int], list[Optional[list[bytes32]]]]:
99
99
  proof = self._proof(self.nodes, leaf_reveal)
100
100
  return (proof[0], [proof[1]])
@@ -1,12 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import hashlib
4
- from typing import Any, Dict, List, Tuple
4
+ from typing import Any
5
5
 
6
6
  from chia.types.blockchain_format.sized_bytes import bytes32
7
7
 
8
- TupleTree = Any # Union[bytes32, Tuple["TupleTree", "TupleTree"]]
9
- Proof_Tree_Type = Any # Union[bytes32, Tuple[bytes32, "Proof_Tree_Type"]]
8
+ TupleTree = Any # Union[bytes32, tuple["TupleTree", "TupleTree"]]
9
+ Proof_Tree_Type = Any # Union[bytes32, tuple[bytes32, "Proof_Tree_Type"]]
10
10
 
11
11
 
12
12
  HASH_TREE_PREFIX = bytes([2])
@@ -24,7 +24,7 @@ def sha256(*args: bytes) -> bytes32:
24
24
  return bytes32(hashlib.sha256(b"".join(args)).digest())
25
25
 
26
26
 
27
- def build_merkle_tree_from_binary_tree(tuples: TupleTree) -> Tuple[bytes32, Dict[bytes32, Tuple[int, List[bytes32]]]]:
27
+ def build_merkle_tree_from_binary_tree(tuples: TupleTree) -> tuple[bytes32, dict[bytes32, tuple[int, list[bytes32]]]]:
28
28
  if isinstance(tuples, bytes):
29
29
  tuples = bytes32(tuples)
30
30
  return sha256(HASH_LEAF_PREFIX, tuples), {tuples: (0, [])}
@@ -45,7 +45,7 @@ def build_merkle_tree_from_binary_tree(tuples: TupleTree) -> Tuple[bytes32, Dict
45
45
  return new_root, new_proofs
46
46
 
47
47
 
48
- def list_to_binary_tree(objects: List[Any]) -> Any:
48
+ def list_to_binary_tree(objects: list[Any]) -> Any:
49
49
  size = len(objects)
50
50
  if size == 0:
51
51
  raise ValueError("Cannot build a tree out of 0 objects")
@@ -57,7 +57,7 @@ def list_to_binary_tree(objects: List[Any]) -> Any:
57
57
  return (list_to_binary_tree(first_half), list_to_binary_tree(last_half))
58
58
 
59
59
 
60
- def build_merkle_tree(objects: List[bytes32]) -> Tuple[bytes32, Dict[bytes32, Tuple[int, List[bytes32]]]]:
60
+ def build_merkle_tree(objects: list[bytes32]) -> tuple[bytes32, dict[bytes32, tuple[int, list[bytes32]]]]:
61
61
  """
62
62
  return (merkle_root, dict_of_proofs)
63
63
  """
@@ -65,7 +65,7 @@ def build_merkle_tree(objects: List[bytes32]) -> Tuple[bytes32, Dict[bytes32, Tu
65
65
  return build_merkle_tree_from_binary_tree(objects_binary_tree)
66
66
 
67
67
 
68
- def merkle_proof_from_path_and_tree(node_path: int, proof_tree: Proof_Tree_Type) -> Tuple[int, List[bytes32]]:
68
+ def merkle_proof_from_path_and_tree(node_path: int, proof_tree: Proof_Tree_Type) -> tuple[int, list[bytes32]]:
69
69
  proof_path = 0
70
70
  proof = []
71
71
  while not isinstance(proof_tree, bytes32):
@@ -82,7 +82,7 @@ def merkle_proof_from_path_and_tree(node_path: int, proof_tree: Proof_Tree_Type)
82
82
  return proof_path, proof
83
83
 
84
84
 
85
- def _simplify_merkle_proof(tree_hash: bytes32, proof: Tuple[int, List[bytes32]]) -> bytes32:
85
+ def _simplify_merkle_proof(tree_hash: bytes32, proof: tuple[int, list[bytes32]]) -> bytes32:
86
86
  # we return the expected merkle root
87
87
  path, nodes = proof
88
88
  for node in nodes:
@@ -94,9 +94,9 @@ def _simplify_merkle_proof(tree_hash: bytes32, proof: Tuple[int, List[bytes32]])
94
94
  return tree_hash
95
95
 
96
96
 
97
- def simplify_merkle_proof(tree_hash: bytes32, proof: Tuple[int, List[bytes32]]) -> bytes32:
97
+ def simplify_merkle_proof(tree_hash: bytes32, proof: tuple[int, list[bytes32]]) -> bytes32:
98
98
  return _simplify_merkle_proof(sha256(HASH_LEAF_PREFIX, tree_hash), proof)
99
99
 
100
100
 
101
- def check_merkle_proof(merkle_root: bytes32, tree_hash: bytes32, proof: Tuple[int, List[bytes32]]) -> bool:
101
+ def check_merkle_proof(merkle_root: bytes32, tree_hash: bytes32, proof: tuple[int, list[bytes32]]) -> bool:
102
102
  return merkle_root == simplify_merkle_proof(tree_hash, proof)
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import asyncio
4
4
  import dataclasses
5
5
  from enum import IntEnum
6
- from typing import Any, List
6
+ from typing import Any
7
7
 
8
8
  from chia.protocols.wallet_protocol import CoinStateUpdate, NewPeakWallet
9
9
  from chia.server.ws_connection import WSChiaConnection
@@ -57,11 +57,11 @@ class NewPeakQueue:
57
57
  self._inner_queue: asyncio.PriorityQueue = inner_queue
58
58
  self._pending_data_process_items: int = 0
59
59
 
60
- async def subscribe_to_coin_ids(self, coin_ids: List[bytes32]):
60
+ async def subscribe_to_coin_ids(self, coin_ids: list[bytes32]):
61
61
  self._pending_data_process_items += 1
62
62
  await self._inner_queue.put(NewPeakItem(NewPeakQueueTypes.COIN_ID_SUBSCRIPTION, coin_ids))
63
63
 
64
- async def subscribe_to_puzzle_hashes(self, puzzle_hashes: List[bytes32]):
64
+ async def subscribe_to_puzzle_hashes(self, puzzle_hashes: list[bytes32]):
65
65
  self._pending_data_process_items += 1
66
66
  await self._inner_queue.put(NewPeakItem(NewPeakQueueTypes.PUZZLE_HASH_SUBSCRIPTION, puzzle_hashes))
67
67