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
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from enum import IntEnum
5
- from typing import List, Optional, Tuple
5
+ from typing import Optional
6
6
 
7
7
  import chia_rs
8
8
 
@@ -100,7 +100,7 @@ class RejectHeaderRequest(Streamable):
100
100
  class RequestRemovals(Streamable):
101
101
  height: uint32
102
102
  header_hash: bytes32
103
- coin_names: Optional[List[bytes32]]
103
+ coin_names: Optional[list[bytes32]]
104
104
 
105
105
 
106
106
  @streamable
@@ -108,8 +108,8 @@ class RequestRemovals(Streamable):
108
108
  class RespondRemovals(Streamable):
109
109
  height: uint32
110
110
  header_hash: bytes32
111
- coins: List[Tuple[bytes32, Optional[Coin]]]
112
- proofs: Optional[List[Tuple[bytes32, bytes]]]
111
+ coins: list[tuple[bytes32, Optional[Coin]]]
112
+ proofs: Optional[list[tuple[bytes32, bytes]]]
113
113
 
114
114
 
115
115
  @streamable
@@ -124,7 +124,7 @@ class RejectRemovalsRequest(Streamable):
124
124
  class RequestAdditions(Streamable):
125
125
  height: uint32
126
126
  header_hash: Optional[bytes32]
127
- puzzle_hashes: Optional[List[bytes32]]
127
+ puzzle_hashes: Optional[list[bytes32]]
128
128
 
129
129
 
130
130
  @streamable
@@ -132,8 +132,8 @@ class RequestAdditions(Streamable):
132
132
  class RespondAdditions(Streamable):
133
133
  height: uint32
134
134
  header_hash: bytes32
135
- coins: List[Tuple[bytes32, List[Coin]]]
136
- proofs: Optional[List[Tuple[bytes32, bytes, Optional[bytes]]]]
135
+ coins: list[tuple[bytes32, list[Coin]]]
136
+ proofs: Optional[list[tuple[bytes32, bytes, Optional[bytes]]]]
137
137
 
138
138
 
139
139
  @streamable
@@ -148,7 +148,7 @@ class RejectAdditionsRequest(Streamable):
148
148
  class RespondBlockHeaders(Streamable):
149
149
  start_height: uint32
150
150
  end_height: uint32
151
- header_blocks: List[HeaderBlock]
151
+ header_blocks: list[HeaderBlock]
152
152
 
153
153
 
154
154
  @streamable
@@ -185,7 +185,7 @@ class RejectHeaderBlocks(Streamable):
185
185
  class RespondHeaderBlocks(Streamable):
186
186
  start_height: uint32
187
187
  end_height: uint32
188
- header_blocks: List[HeaderBlock]
188
+ header_blocks: list[HeaderBlock]
189
189
 
190
190
 
191
191
  # This class is implemented in Rust
@@ -200,7 +200,7 @@ class RespondHeaderBlocks(Streamable):
200
200
  @streamable
201
201
  @dataclass(frozen=True)
202
202
  class RegisterForPhUpdates(Streamable):
203
- puzzle_hashes: List[bytes32]
203
+ puzzle_hashes: list[bytes32]
204
204
  min_height: uint32
205
205
 
206
206
 
@@ -208,24 +208,24 @@ class RegisterForPhUpdates(Streamable):
208
208
  # @streamable
209
209
  # @dataclass(frozen=True)
210
210
  # class RespondToPhUpdates(Streamable):
211
- # puzzle_hashes: List[bytes32]
211
+ # puzzle_hashes: list[bytes32]
212
212
  # min_height: uint32
213
- # coin_states: List[CoinState]
213
+ # coin_states: list[CoinState]
214
214
 
215
215
 
216
216
  @streamable
217
217
  @dataclass(frozen=True)
218
218
  class RegisterForCoinUpdates(Streamable):
219
- coin_ids: List[bytes32]
219
+ coin_ids: list[bytes32]
220
220
  min_height: uint32
221
221
 
222
222
 
223
223
  @streamable
224
224
  @dataclass(frozen=True)
225
225
  class RespondToCoinUpdates(Streamable):
226
- coin_ids: List[bytes32]
226
+ coin_ids: list[bytes32]
227
227
  min_height: uint32
228
- coin_states: List[CoinState]
228
+ coin_states: list[CoinState]
229
229
 
230
230
 
231
231
  @streamable
@@ -234,7 +234,7 @@ class CoinStateUpdate(Streamable):
234
234
  height: uint32
235
235
  fork_height: uint32
236
236
  peak_hash: bytes32
237
- items: List[CoinState]
237
+ items: list[CoinState]
238
238
 
239
239
 
240
240
  @streamable
@@ -246,7 +246,7 @@ class RequestChildren(Streamable):
246
246
  @streamable
247
247
  @dataclass(frozen=True)
248
248
  class RespondChildren(Streamable):
249
- coin_states: List[CoinState]
249
+ coin_states: list[CoinState]
250
250
 
251
251
 
252
252
  @streamable
@@ -259,18 +259,18 @@ class RequestSESInfo(Streamable):
259
259
  @streamable
260
260
  @dataclass(frozen=True)
261
261
  class RespondSESInfo(Streamable):
262
- reward_chain_hash: List[bytes32]
263
- heights: List[List[uint32]]
262
+ reward_chain_hash: list[bytes32]
263
+ heights: list[list[uint32]]
264
264
 
265
265
 
266
266
  @streamable
267
267
  @dataclass(frozen=True)
268
268
  class RequestFeeEstimates(Streamable):
269
269
  """
270
- time_targets (List[uint64]): Epoch timestamps in seconds to estimate FeeRates for.
270
+ time_targets (list[uint64]): Epoch timestamps in seconds to estimate FeeRates for.
271
271
  """
272
272
 
273
- time_targets: List[uint64]
273
+ time_targets: list[uint64]
274
274
 
275
275
 
276
276
  @streamable
@@ -282,25 +282,25 @@ class RespondFeeEstimates(Streamable):
282
282
  @streamable
283
283
  @dataclass(frozen=True)
284
284
  class RequestRemovePuzzleSubscriptions(Streamable):
285
- puzzle_hashes: Optional[List[bytes32]]
285
+ puzzle_hashes: Optional[list[bytes32]]
286
286
 
287
287
 
288
288
  @streamable
289
289
  @dataclass(frozen=True)
290
290
  class RespondRemovePuzzleSubscriptions(Streamable):
291
- puzzle_hashes: List[bytes32]
291
+ puzzle_hashes: list[bytes32]
292
292
 
293
293
 
294
294
  @streamable
295
295
  @dataclass(frozen=True)
296
296
  class RequestRemoveCoinSubscriptions(Streamable):
297
- coin_ids: Optional[List[bytes32]]
297
+ coin_ids: Optional[list[bytes32]]
298
298
 
299
299
 
300
300
  @streamable
301
301
  @dataclass(frozen=True)
302
302
  class RespondRemoveCoinSubscriptions(Streamable):
303
- coin_ids: List[bytes32]
303
+ coin_ids: list[bytes32]
304
304
 
305
305
 
306
306
  @streamable
@@ -315,7 +315,7 @@ class CoinStateFilters(Streamable):
315
315
  @streamable
316
316
  @dataclass(frozen=True)
317
317
  class RequestPuzzleState(Streamable):
318
- puzzle_hashes: List[bytes32]
318
+ puzzle_hashes: list[bytes32]
319
319
  previous_height: Optional[uint32]
320
320
  header_hash: bytes32
321
321
  filters: CoinStateFilters
@@ -325,11 +325,11 @@ class RequestPuzzleState(Streamable):
325
325
  @streamable
326
326
  @dataclass(frozen=True)
327
327
  class RespondPuzzleState(Streamable):
328
- puzzle_hashes: List[bytes32]
328
+ puzzle_hashes: list[bytes32]
329
329
  height: uint32
330
330
  header_hash: bytes32
331
331
  is_finished: bool
332
- coin_states: List[CoinState]
332
+ coin_states: list[CoinState]
333
333
 
334
334
 
335
335
  @streamable
@@ -341,7 +341,7 @@ class RejectPuzzleState(Streamable):
341
341
  @streamable
342
342
  @dataclass(frozen=True)
343
343
  class RequestCoinState(Streamable):
344
- coin_ids: List[bytes32]
344
+ coin_ids: list[bytes32]
345
345
  previous_height: Optional[uint32]
346
346
  header_hash: bytes32
347
347
  subscribe: bool
@@ -350,8 +350,8 @@ class RequestCoinState(Streamable):
350
350
  @streamable
351
351
  @dataclass(frozen=True)
352
352
  class RespondCoinState(Streamable):
353
- coin_ids: List[bytes32]
354
- coin_states: List[CoinState]
353
+ coin_ids: list[bytes32]
354
+ coin_states: list[CoinState]
355
355
 
356
356
 
357
357
  @streamable
@@ -375,13 +375,13 @@ class RemovedMempoolItem(Streamable):
375
375
  @streamable
376
376
  @dataclass(frozen=True)
377
377
  class MempoolItemsAdded(Streamable):
378
- transaction_ids: List[bytes32]
378
+ transaction_ids: list[bytes32]
379
379
 
380
380
 
381
381
  @streamable
382
382
  @dataclass(frozen=True)
383
383
  class MempoolItemsRemoved(Streamable):
384
- removed_items: List[RemovedMempoolItem]
384
+ removed_items: list[RemovedMempoolItem]
385
385
 
386
386
 
387
387
  @streamable
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import ipaddress
4
- from typing import Any, Dict, List, Optional
4
+ from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
5
5
 
6
6
  from chia.rpc.rpc_server import Endpoint, EndpointResult
7
7
  from chia.seeder.crawler import Crawler
@@ -9,28 +9,33 @@ from chia.util.ws_message import WsRpcMessage, create_payload_dict
9
9
 
10
10
 
11
11
  class CrawlerRpcApi:
12
+ if TYPE_CHECKING:
13
+ from chia.rpc.rpc_server import RpcApiProtocol
14
+
15
+ _protocol_check: ClassVar[RpcApiProtocol] = cast("CrawlerRpcApi", None)
16
+
12
17
  def __init__(self, crawler: Crawler):
13
18
  self.service = crawler
14
19
  self.service_name = "chia_crawler"
15
20
 
16
- def get_routes(self) -> Dict[str, Endpoint]:
21
+ def get_routes(self) -> dict[str, Endpoint]:
17
22
  return {
18
23
  "/get_peer_counts": self.get_peer_counts,
19
24
  "/get_ips_after_timestamp": self.get_ips_after_timestamp,
20
25
  }
21
26
 
22
- async def _state_changed(self, change: str, change_data: Optional[Dict[str, Any]] = None) -> List[WsRpcMessage]:
27
+ async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]] = None) -> list[WsRpcMessage]:
23
28
  payloads = []
24
29
 
25
30
  if change_data is None:
26
31
  change_data = await self.get_peer_counts({})
27
32
 
28
- if change in ("crawl_batch_completed", "loaded_initial_peers"):
33
+ if change in {"crawl_batch_completed", "loaded_initial_peers"}:
29
34
  payloads.append(create_payload_dict(change, change_data, self.service_name, "metrics"))
30
35
 
31
36
  return payloads
32
37
 
33
- async def get_peer_counts(self, _request: Dict[str, Any]) -> EndpointResult:
38
+ async def get_peer_counts(self, _request: dict[str, Any]) -> EndpointResult:
34
39
  ipv6_addresses_count = 0
35
40
  for host in self.service.best_timestamp_per_peer.keys():
36
41
  try:
@@ -54,7 +59,7 @@ class CrawlerRpcApi:
54
59
  }
55
60
  return data
56
61
 
57
- async def get_ips_after_timestamp(self, _request: Dict[str, Any]) -> EndpointResult:
62
+ async def get_ips_after_timestamp(self, _request: dict[str, Any]) -> EndpointResult:
58
63
  after = _request.get("after", None)
59
64
  if after is None:
60
65
  raise ValueError("`after` is required and must be a unix timestamp")
@@ -62,7 +67,7 @@ class CrawlerRpcApi:
62
67
  offset = _request.get("offset", 0)
63
68
  limit = _request.get("limit", 10000)
64
69
 
65
- matched_ips: List[str] = []
70
+ matched_ips: list[str] = []
66
71
  for ip, timestamp in self.service.best_timestamp_per_peer.items():
67
72
  if timestamp > after:
68
73
  matched_ips.append(ip)
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
4
  from pathlib import Path
5
- from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union, cast
5
+ from typing import TYPE_CHECKING, Any, ClassVar, Optional, Union, cast
6
6
 
7
7
  from chia.data_layer.data_layer_errors import OfferIntegrityError
8
8
  from chia.data_layer.data_layer_util import (
@@ -44,9 +44,9 @@ if TYPE_CHECKING:
44
44
  from chia.data_layer.data_layer import DataLayer
45
45
 
46
46
 
47
- def process_change(change: Dict[str, Any]) -> Dict[str, Any]:
47
+ def process_change(change: dict[str, Any]) -> dict[str, Any]:
48
48
  # TODO: A full class would likely be nice for this so downstream doesn't
49
- # have to deal with maybe-present attributes or Dict[str, Any] hints.
49
+ # have to deal with maybe-present attributes or dict[str, Any] hints.
50
50
  reference_node_hash = change.get("reference_node_hash")
51
51
  if reference_node_hash is not None:
52
52
  reference_node_hash = bytes32.from_hexstr(reference_node_hash)
@@ -68,20 +68,20 @@ def process_change(change: Dict[str, Any]) -> Dict[str, Any]:
68
68
  }
69
69
 
70
70
 
71
- def process_change_multistore(update: Dict[str, Any]) -> Dict[str, Any]:
71
+ def process_change_multistore(update: dict[str, Any]) -> dict[str, Any]:
72
72
  store_id = update.get("store_id")
73
73
  if store_id is None:
74
74
  raise Exception("Each update must specify a store_id")
75
75
  changelist = update.get("changelist")
76
76
  if changelist is None:
77
77
  raise Exception("Each update must specify a changelist")
78
- res: Dict[str, Any] = {}
78
+ res: dict[str, Any] = {}
79
79
  res["store_id"] = bytes32.from_hexstr(store_id)
80
80
  res["changelist"] = [process_change(change) for change in changelist]
81
81
  return res
82
82
 
83
83
 
84
- def get_fee(config: Dict[str, Any], request: Dict[str, Any]) -> uint64:
84
+ def get_fee(config: dict[str, Any], request: dict[str, Any]) -> uint64:
85
85
  fee = request.get("fee")
86
86
  if fee is None:
87
87
  fee = 0 # DL no longer reads the fee from the config
@@ -89,12 +89,17 @@ def get_fee(config: Dict[str, Any], request: Dict[str, Any]) -> uint64:
89
89
 
90
90
 
91
91
  class DataLayerRpcApi:
92
+ if TYPE_CHECKING:
93
+ from chia.rpc.rpc_server import RpcApiProtocol
94
+
95
+ _protocol_check: ClassVar[RpcApiProtocol] = cast("DataLayerRpcApi", None)
96
+
92
97
  # TODO: other RPC APIs do not accept a wallet and the service start does not expect to provide one
93
98
  def __init__(self, data_layer: DataLayer): # , wallet: DataLayerWallet):
94
99
  self.service: DataLayer = data_layer
95
100
  self.service_name = "chia_data_layer"
96
101
 
97
- def get_routes(self) -> Dict[str, Endpoint]:
102
+ def get_routes(self) -> dict[str, Endpoint]:
98
103
  return {
99
104
  "/wallet_log_in": self.wallet_log_in,
100
105
  "/create_data_store": self.create_data_store,
@@ -133,17 +138,17 @@ class DataLayerRpcApi:
133
138
  "/verify_proof": self.verify_proof,
134
139
  }
135
140
 
136
- async def _state_changed(self, change: str, change_data: Optional[Dict[str, Any]]) -> List[WsRpcMessage]:
141
+ async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]]) -> list[WsRpcMessage]:
137
142
  return []
138
143
 
139
- async def wallet_log_in(self, request: Dict[str, Any]) -> EndpointResult:
144
+ async def wallet_log_in(self, request: dict[str, Any]) -> EndpointResult:
140
145
  if self.service is None:
141
146
  raise Exception("Data layer not created")
142
147
  fingerprint = cast(int, request["fingerprint"])
143
148
  await self.service.wallet_log_in(fingerprint=fingerprint)
144
149
  return {}
145
150
 
146
- async def create_data_store(self, request: Dict[str, Any]) -> EndpointResult:
151
+ async def create_data_store(self, request: dict[str, Any]) -> EndpointResult:
147
152
  if self.service is None:
148
153
  raise Exception("Data layer not created")
149
154
  fee = get_fee(self.service.config, request)
@@ -154,13 +159,13 @@ class DataLayerRpcApi:
154
159
  else:
155
160
  return {"id": value.hex()}
156
161
 
157
- async def get_owned_stores(self, request: Dict[str, Any]) -> EndpointResult:
162
+ async def get_owned_stores(self, request: dict[str, Any]) -> EndpointResult:
158
163
  if self.service is None:
159
164
  raise Exception("Data layer not created")
160
165
  singleton_records = await self.service.get_owned_stores()
161
166
  return {"store_ids": [singleton.launcher_id.hex() for singleton in singleton_records]}
162
167
 
163
- async def get_value(self, request: Dict[str, Any]) -> EndpointResult:
168
+ async def get_value(self, request: dict[str, Any]) -> EndpointResult:
164
169
  store_id = bytes32.from_hexstr(request["id"])
165
170
  key = hexstr_to_bytes(request["key"])
166
171
  # NOTE: being outside the rpc, this retains the none-means-unspecified semantics
@@ -178,7 +183,7 @@ class DataLayerRpcApi:
178
183
  hex = value.hex()
179
184
  return {"value": hex}
180
185
 
181
- async def get_keys(self, request: Dict[str, Any]) -> EndpointResult:
186
+ async def get_keys(self, request: dict[str, Any]) -> EndpointResult:
182
187
  store_id = bytes32.from_hexstr(request["id"])
183
188
  # NOTE: being outside the rpc, this retains the none-means-unspecified semantics
184
189
  root_hash: Optional[str] = request.get("root_hash")
@@ -199,7 +204,7 @@ class DataLayerRpcApi:
199
204
  keys = keys_paginated.keys
200
205
 
201
206
  # NOTE: here we do support zeros as the empty root
202
- if keys == [] and resolved_root_hash is not unspecified and resolved_root_hash != bytes32([0] * 32):
207
+ if keys == [] and resolved_root_hash is not unspecified and resolved_root_hash != bytes32.zeros:
203
208
  raise Exception(f"Can't find keys for {resolved_root_hash}")
204
209
 
205
210
  response: EndpointResult = {"keys": [f"0x{key.hex()}" for key in keys]}
@@ -215,7 +220,7 @@ class DataLayerRpcApi:
215
220
 
216
221
  return response
217
222
 
218
- async def get_keys_values(self, request: Dict[str, Any]) -> EndpointResult:
223
+ async def get_keys_values(self, request: dict[str, Any]) -> EndpointResult:
219
224
  store_id = bytes32.from_hexstr(request["id"])
220
225
  # NOTE: being outside the rpc, this retains the none-means-unspecified semantics
221
226
  root_hash: Optional[str] = request.get("root_hash")
@@ -239,7 +244,7 @@ class DataLayerRpcApi:
239
244
 
240
245
  json_nodes = [recurse_jsonify(dataclasses.asdict(node)) for node in keys_values]
241
246
  # NOTE: here we do support zeros as the empty root
242
- if not json_nodes and resolved_root_hash is not unspecified and resolved_root_hash != bytes32([0] * 32):
247
+ if not json_nodes and resolved_root_hash is not unspecified and resolved_root_hash != bytes32.zeros:
243
248
  raise Exception(f"Can't find keys and values for {resolved_root_hash}")
244
249
 
245
250
  response: EndpointResult = {"keys_values": json_nodes}
@@ -255,7 +260,7 @@ class DataLayerRpcApi:
255
260
 
256
261
  return response
257
262
 
258
- async def get_ancestors(self, request: Dict[str, Any]) -> EndpointResult:
263
+ async def get_ancestors(self, request: dict[str, Any]) -> EndpointResult:
259
264
  store_id = bytes32.from_hexstr(request["id"])
260
265
  node_hash = bytes32.from_hexstr(request["hash"])
261
266
  if self.service is None:
@@ -263,7 +268,7 @@ class DataLayerRpcApi:
263
268
  value = await self.service.get_ancestors(node_hash, store_id)
264
269
  return {"ancestors": value}
265
270
 
266
- async def batch_update(self, request: Dict[str, Any]) -> EndpointResult:
271
+ async def batch_update(self, request: dict[str, Any]) -> EndpointResult:
267
272
  """
268
273
  id - the id of the store we are operating on
269
274
  changelist - a list of changes to apply on store
@@ -285,7 +290,7 @@ class DataLayerRpcApi:
285
290
  raise Exception("Transaction submitted on chain, but submit_on_chain set to False")
286
291
  return {}
287
292
 
288
- async def multistore_batch_update(self, request: Dict[str, Any]) -> EndpointResult:
293
+ async def multistore_batch_update(self, request: dict[str, Any]) -> EndpointResult:
289
294
  fee = get_fee(self.service.config, request)
290
295
  store_updates = [process_change_multistore(update) for update in request["store_updates"]]
291
296
  submit_on_chain = request.get("submit_on_chain", True)
@@ -301,18 +306,18 @@ class DataLayerRpcApi:
301
306
  raise Exception("Transaction submitted on chain, but submit_on_chain set to False")
302
307
  return {}
303
308
 
304
- async def submit_pending_root(self, request: Dict[str, Any]) -> EndpointResult:
309
+ async def submit_pending_root(self, request: dict[str, Any]) -> EndpointResult:
305
310
  store_id = bytes32.from_hexstr(request["id"])
306
311
  fee = get_fee(self.service.config, request)
307
312
  transaction_record = await self.service.submit_pending_root(store_id, uint64(fee))
308
313
  return {"tx_id": transaction_record.name}
309
314
 
310
- async def submit_all_pending_roots(self, request: Dict[str, Any]) -> EndpointResult:
315
+ async def submit_all_pending_roots(self, request: dict[str, Any]) -> EndpointResult:
311
316
  fee = get_fee(self.service.config, request)
312
317
  transaction_records = await self.service.submit_all_pending_roots(uint64(fee))
313
318
  return {"tx_id": [transaction_record.name for transaction_record in transaction_records]}
314
319
 
315
- async def insert(self, request: Dict[str, Any]) -> EndpointResult:
320
+ async def insert(self, request: dict[str, Any]) -> EndpointResult:
316
321
  """
317
322
  rows_to_add a list of clvm objects as bytes to add to table
318
323
  rows_to_remove a list of row hashes to remove
@@ -329,7 +334,7 @@ class DataLayerRpcApi:
329
334
  assert transaction_record is not None
330
335
  return {"tx_id": transaction_record.name}
331
336
 
332
- async def delete_key(self, request: Dict[str, Any]) -> EndpointResult:
337
+ async def delete_key(self, request: dict[str, Any]) -> EndpointResult:
333
338
  """
334
339
  rows_to_add a list of clvm objects as bytes to add to table
335
340
  rows_to_remove a list of row hashes to remove
@@ -345,7 +350,7 @@ class DataLayerRpcApi:
345
350
  assert transaction_record is not None
346
351
  return {"tx_id": transaction_record.name}
347
352
 
348
- async def get_root(self, request: Dict[str, Any]) -> EndpointResult:
353
+ async def get_root(self, request: dict[str, Any]) -> EndpointResult:
349
354
  """get hash of latest tree root"""
350
355
  store_id = bytes32.from_hexstr(request["id"])
351
356
  # todo input checks
@@ -356,7 +361,7 @@ class DataLayerRpcApi:
356
361
  raise Exception(f"Failed to get root for {store_id.hex()}")
357
362
  return {"hash": rec.root, "confirmed": rec.confirmed, "timestamp": rec.timestamp}
358
363
 
359
- async def get_local_root(self, request: Dict[str, Any]) -> EndpointResult:
364
+ async def get_local_root(self, request: dict[str, Any]) -> EndpointResult:
360
365
  """get hash of latest tree root saved in our local datastore"""
361
366
  store_id = bytes32.from_hexstr(request["id"])
362
367
  # todo input checks
@@ -365,7 +370,7 @@ class DataLayerRpcApi:
365
370
  res = await self.service.get_local_root(store_id)
366
371
  return {"hash": res}
367
372
 
368
- async def get_roots(self, request: Dict[str, Any]) -> EndpointResult:
373
+ async def get_roots(self, request: dict[str, Any]) -> EndpointResult:
369
374
  """
370
375
  get state hashes for a list of roots
371
376
  """
@@ -381,7 +386,7 @@ class DataLayerRpcApi:
381
386
  roots.append({"id": id_bytes, "hash": rec.root, "confirmed": rec.confirmed, "timestamp": rec.timestamp})
382
387
  return {"root_hashes": roots}
383
388
 
384
- async def subscribe(self, request: Dict[str, Any]) -> EndpointResult:
389
+ async def subscribe(self, request: dict[str, Any]) -> EndpointResult:
385
390
  """
386
391
  subscribe to singleton
387
392
  """
@@ -396,7 +401,7 @@ class DataLayerRpcApi:
396
401
  await self.service.subscribe(store_id=store_id_bytes, urls=urls)
397
402
  return {}
398
403
 
399
- async def unsubscribe(self, request: Dict[str, Any]) -> EndpointResult:
404
+ async def unsubscribe(self, request: dict[str, Any]) -> EndpointResult:
400
405
  """
401
406
  unsubscribe from singleton
402
407
  """
@@ -410,16 +415,16 @@ class DataLayerRpcApi:
410
415
  await self.service.unsubscribe(store_id_bytes, retain_data)
411
416
  return {}
412
417
 
413
- async def subscriptions(self, request: Dict[str, Any]) -> EndpointResult:
418
+ async def subscriptions(self, request: dict[str, Any]) -> EndpointResult:
414
419
  """
415
420
  List current subscriptions
416
421
  """
417
422
  if self.service is None:
418
423
  raise Exception("Data layer not created")
419
- subscriptions: List[Subscription] = await self.service.get_subscriptions()
424
+ subscriptions: list[Subscription] = await self.service.get_subscriptions()
420
425
  return {"store_ids": [sub.store_id.hex() for sub in subscriptions]}
421
426
 
422
- async def remove_subscriptions(self, request: Dict[str, Any]) -> EndpointResult:
427
+ async def remove_subscriptions(self, request: dict[str, Any]) -> EndpointResult:
423
428
  if self.service is None:
424
429
  raise Exception("Data layer not created")
425
430
  store_id = request.get("id")
@@ -430,7 +435,7 @@ class DataLayerRpcApi:
430
435
  await self.service.remove_subscriptions(store_id=store_id_bytes, urls=urls)
431
436
  return {}
432
437
 
433
- async def add_missing_files(self, request: Dict[str, Any]) -> EndpointResult:
438
+ async def add_missing_files(self, request: dict[str, Any]) -> EndpointResult:
434
439
  """
435
440
  complete the data server files.
436
441
  """
@@ -438,7 +443,7 @@ class DataLayerRpcApi:
438
443
  store_ids = request["ids"]
439
444
  ids_bytes = [bytes32.from_hexstr(id) for id in store_ids]
440
445
  else:
441
- subscriptions: List[Subscription] = await self.service.get_subscriptions()
446
+ subscriptions: list[Subscription] = await self.service.get_subscriptions()
442
447
  ids_bytes = [subscription.store_id for subscription in subscriptions]
443
448
  overwrite = request.get("overwrite", False)
444
449
  foldername: Optional[Path] = None
@@ -448,7 +453,7 @@ class DataLayerRpcApi:
448
453
  await self.service.add_missing_files(store_id, overwrite, foldername)
449
454
  return {}
450
455
 
451
- async def get_root_history(self, request: Dict[str, Any]) -> EndpointResult:
456
+ async def get_root_history(self, request: dict[str, Any]) -> EndpointResult:
452
457
  """
453
458
  get history of state hashes for a store
454
459
  """
@@ -457,12 +462,12 @@ class DataLayerRpcApi:
457
462
  store_id = request["id"]
458
463
  id_bytes = bytes32.from_hexstr(store_id)
459
464
  records = await self.service.get_root_history(id_bytes)
460
- res: List[Dict[str, Any]] = []
465
+ res: list[dict[str, Any]] = []
461
466
  for rec in records:
462
467
  res.insert(0, {"root_hash": rec.root, "confirmed": rec.confirmed, "timestamp": rec.timestamp})
463
468
  return {"root_history": res}
464
469
 
465
- async def get_kv_diff(self, request: Dict[str, Any]) -> EndpointResult:
470
+ async def get_kv_diff(self, request: dict[str, Any]) -> EndpointResult:
466
471
  """
467
472
  get kv diff between two root hashes
468
473
  """
@@ -476,7 +481,7 @@ class DataLayerRpcApi:
476
481
  hash_2_bytes = bytes32.from_hexstr(hash_2)
477
482
  page = request.get("page", None)
478
483
  max_page_size = request.get("max_page_size", None)
479
- res: List[Dict[str, Any]] = []
484
+ res: list[dict[str, Any]] = []
480
485
 
481
486
  if page is None:
482
487
  records_dict = await self.service.get_kv_diff(id_bytes, hash_1_bytes, hash_2_bytes)
@@ -501,7 +506,7 @@ class DataLayerRpcApi:
501
506
 
502
507
  return response
503
508
 
504
- async def add_mirror(self, request: Dict[str, Any]) -> EndpointResult:
509
+ async def add_mirror(self, request: dict[str, Any]) -> EndpointResult:
505
510
  store_id = request["id"]
506
511
  id_bytes = bytes32.from_hexstr(store_id)
507
512
  urls = request["urls"]
@@ -510,17 +515,17 @@ class DataLayerRpcApi:
510
515
  await self.service.add_mirror(id_bytes, urls, amount, fee)
511
516
  return {}
512
517
 
513
- async def delete_mirror(self, request: Dict[str, Any]) -> EndpointResult:
518
+ async def delete_mirror(self, request: dict[str, Any]) -> EndpointResult:
514
519
  coin_id = request["coin_id"]
515
520
  coin_id_bytes = bytes32.from_hexstr(coin_id)
516
521
  fee = get_fee(self.service.config, request)
517
522
  await self.service.delete_mirror(coin_id_bytes, fee)
518
523
  return {}
519
524
 
520
- async def get_mirrors(self, request: Dict[str, Any]) -> EndpointResult:
525
+ async def get_mirrors(self, request: dict[str, Any]) -> EndpointResult:
521
526
  store_id = request["id"]
522
527
  id_bytes = bytes32.from_hexstr(store_id)
523
- mirrors: List[Mirror] = await self.service.get_mirrors(id_bytes)
528
+ mirrors: list[Mirror] = await self.service.get_mirrors(id_bytes)
524
529
  return {"mirrors": [mirror.to_json_dict() for mirror in mirrors]}
525
530
 
526
531
  @marshal() # type: ignore[arg-type]
@@ -566,7 +571,7 @@ class DataLayerRpcApi:
566
571
 
567
572
  return CancelOfferResponse(success=True)
568
573
 
569
- async def get_sync_status(self, request: Dict[str, Any]) -> EndpointResult:
574
+ async def get_sync_status(self, request: dict[str, Any]) -> EndpointResult:
570
575
  store_id = request["id"]
571
576
  id_bytes = bytes32.from_hexstr(store_id)
572
577
  if self.service is None:
@@ -582,7 +587,7 @@ class DataLayerRpcApi:
582
587
  }
583
588
  }
584
589
 
585
- async def check_plugins(self, request: Dict[str, Any]) -> EndpointResult:
590
+ async def check_plugins(self, request: dict[str, Any]) -> EndpointResult:
586
591
  if self.service is None:
587
592
  raise Exception("Data layer not created")
588
593
  plugin_status = await self.service.check_plugins()
@@ -601,7 +606,7 @@ class DataLayerRpcApi:
601
606
  if root is None:
602
607
  raise ValueError("no root")
603
608
 
604
- all_proofs: List[HashOnlyProof] = []
609
+ all_proofs: list[HashOnlyProof] = []
605
610
  for key in request.keys:
606
611
  node = await self.service.data_store.get_node_by_key(store_id=request.store_id, key=key)
607
612
  pi = await self.service.data_store.get_proof_of_inclusion_by_hash(