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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc1.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from pathlib import Path
4
- from typing import Any, Dict, List, Optional
4
+ from typing import Any, Optional
5
5
 
6
6
  from chia.data_layer.data_layer_util import ClearPendingRootsRequest
7
7
  from chia.rpc.rpc_client import RpcClient
@@ -10,25 +10,25 @@ from chia.util.ints import uint64
10
10
 
11
11
 
12
12
  class DataLayerRpcClient(RpcClient):
13
- async def create_data_store(self, fee: Optional[uint64], verbose: bool) -> Dict[str, Any]:
13
+ async def create_data_store(self, fee: Optional[uint64], verbose: bool) -> dict[str, Any]:
14
14
  response = await self.fetch("create_data_store", {"fee": fee, "verbose": verbose})
15
15
  return response
16
16
 
17
- async def wallet_log_in(self, fingerprint: int) -> Dict[str, Any]:
18
- request: Dict[str, Any] = {"fingerprint": fingerprint}
17
+ async def wallet_log_in(self, fingerprint: int) -> dict[str, Any]:
18
+ request: dict[str, Any] = {"fingerprint": fingerprint}
19
19
  response = await self.fetch("wallet_log_in", request)
20
20
  return response
21
21
 
22
- async def get_value(self, store_id: bytes32, key: bytes, root_hash: Optional[bytes32]) -> Dict[str, Any]:
23
- request: Dict[str, Any] = {"id": store_id.hex(), "key": key.hex()}
22
+ async def get_value(self, store_id: bytes32, key: bytes, root_hash: Optional[bytes32]) -> dict[str, Any]:
23
+ request: dict[str, Any] = {"id": store_id.hex(), "key": key.hex()}
24
24
  if root_hash is not None:
25
25
  request["root_hash"] = root_hash.hex()
26
26
  response = await self.fetch("get_value", request)
27
27
  return response
28
28
 
29
29
  async def update_data_store(
30
- self, store_id: bytes32, changelist: List[Dict[str, str]], fee: Optional[uint64], submit_on_chain: bool = True
31
- ) -> Dict[str, Any]:
30
+ self, store_id: bytes32, changelist: list[dict[str, str]], fee: Optional[uint64], submit_on_chain: bool = True
31
+ ) -> dict[str, Any]:
32
32
  response = await self.fetch(
33
33
  "batch_update",
34
34
  {
@@ -41,8 +41,8 @@ class DataLayerRpcClient(RpcClient):
41
41
  return response
42
42
 
43
43
  async def update_multiple_stores(
44
- self, store_updates: List[Dict[str, Any]], fee: Optional[uint64], submit_on_chain: bool = True
45
- ) -> Dict[str, Any]:
44
+ self, store_updates: list[dict[str, Any]], fee: Optional[uint64], submit_on_chain: bool = True
45
+ ) -> dict[str, Any]:
46
46
  response = await self.fetch(
47
47
  "multistore_batch_update",
48
48
  {
@@ -53,18 +53,18 @@ class DataLayerRpcClient(RpcClient):
53
53
  )
54
54
  return response
55
55
 
56
- async def submit_pending_root(self, store_id: bytes32, fee: Optional[uint64]) -> Dict[str, Any]:
56
+ async def submit_pending_root(self, store_id: bytes32, fee: Optional[uint64]) -> dict[str, Any]:
57
57
  response = await self.fetch("submit_pending_root", {"id": store_id.hex(), "fee": fee})
58
58
  return response
59
59
 
60
- async def submit_all_pending_roots(self, fee: Optional[uint64]) -> Dict[str, Any]:
60
+ async def submit_all_pending_roots(self, fee: Optional[uint64]) -> dict[str, Any]:
61
61
  response = await self.fetch("submit_all_pending_roots", {"fee": fee})
62
62
  return response
63
63
 
64
64
  async def get_keys_values(
65
65
  self, store_id: bytes32, root_hash: Optional[bytes32], page: Optional[int], max_page_size: Optional[int]
66
- ) -> Dict[str, Any]:
67
- request: Dict[str, Any] = {"id": store_id.hex()}
66
+ ) -> dict[str, Any]:
67
+ request: dict[str, Any] = {"id": store_id.hex()}
68
68
  if root_hash is not None:
69
69
  request["root_hash"] = root_hash.hex()
70
70
  if page is not None:
@@ -76,8 +76,8 @@ class DataLayerRpcClient(RpcClient):
76
76
 
77
77
  async def get_keys(
78
78
  self, store_id: bytes32, root_hash: Optional[bytes32], page: Optional[int], max_page_size: Optional[int]
79
- ) -> Dict[str, Any]:
80
- request: Dict[str, Any] = {"id": store_id.hex()}
79
+ ) -> dict[str, Any]:
80
+ request: dict[str, Any] = {"id": store_id.hex()}
81
81
  if root_hash is not None:
82
82
  request["root_hash"] = root_hash.hex()
83
83
  if page is not None:
@@ -87,38 +87,38 @@ class DataLayerRpcClient(RpcClient):
87
87
  response = await self.fetch("get_keys", request)
88
88
  return response
89
89
 
90
- async def get_ancestors(self, store_id: bytes32, hash: bytes32) -> Dict[str, Any]:
90
+ async def get_ancestors(self, store_id: bytes32, hash: bytes32) -> dict[str, Any]:
91
91
  response = await self.fetch("get_ancestors", {"id": store_id.hex(), "hash": hash})
92
92
  return response
93
93
 
94
- async def get_root(self, store_id: bytes32) -> Dict[str, Any]:
94
+ async def get_root(self, store_id: bytes32) -> dict[str, Any]:
95
95
  response = await self.fetch("get_root", {"id": store_id.hex()})
96
96
  return response
97
97
 
98
- async def get_local_root(self, store_id: bytes32) -> Dict[str, Any]:
98
+ async def get_local_root(self, store_id: bytes32) -> dict[str, Any]:
99
99
  response = await self.fetch("get_local_root", {"id": store_id.hex()})
100
100
  return response
101
101
 
102
- async def get_roots(self, store_ids: List[bytes32]) -> Dict[str, Any]:
102
+ async def get_roots(self, store_ids: list[bytes32]) -> dict[str, Any]:
103
103
  response = await self.fetch("get_roots", {"ids": store_ids})
104
104
  return response
105
105
 
106
- async def subscribe(self, store_id: bytes32, urls: List[str]) -> Dict[str, Any]:
106
+ async def subscribe(self, store_id: bytes32, urls: list[str]) -> dict[str, Any]:
107
107
  response = await self.fetch("subscribe", {"id": store_id.hex(), "urls": urls})
108
108
  return response
109
109
 
110
- async def remove_subscriptions(self, store_id: bytes32, urls: List[str]) -> Dict[str, Any]:
110
+ async def remove_subscriptions(self, store_id: bytes32, urls: list[str]) -> dict[str, Any]:
111
111
  response = await self.fetch("remove_subscriptions", {"id": store_id.hex(), "urls": urls})
112
112
  return response
113
113
 
114
- async def unsubscribe(self, store_id: bytes32, retain: bool) -> Dict[str, Any]:
114
+ async def unsubscribe(self, store_id: bytes32, retain: bool) -> dict[str, Any]:
115
115
  response = await self.fetch("unsubscribe", {"id": store_id.hex(), "retain": retain})
116
116
  return response
117
117
 
118
118
  async def add_missing_files(
119
- self, store_ids: Optional[List[bytes32]], overwrite: Optional[bool], foldername: Optional[Path]
120
- ) -> Dict[str, Any]:
121
- request: Dict[str, Any] = {}
119
+ self, store_ids: Optional[list[bytes32]], overwrite: Optional[bool], foldername: Optional[Path]
120
+ ) -> dict[str, Any]:
121
+ request: dict[str, Any] = {}
122
122
  if store_ids is not None:
123
123
  request["ids"] = [store_id.hex() for store_id in store_ids]
124
124
  if overwrite is not None:
@@ -130,8 +130,8 @@ class DataLayerRpcClient(RpcClient):
130
130
 
131
131
  async def get_kv_diff(
132
132
  self, store_id: bytes32, hash_1: bytes32, hash_2: bytes32, page: Optional[int], max_page_size: Optional[int]
133
- ) -> Dict[str, Any]:
134
- request: Dict[str, Any] = {"id": store_id.hex(), "hash_1": hash_1.hex(), "hash_2": hash_2.hex()}
133
+ ) -> dict[str, Any]:
134
+ request: dict[str, Any] = {"id": store_id.hex(), "hash_1": hash_1.hex(), "hash_2": hash_2.hex()}
135
135
  if page is not None:
136
136
  request["page"] = page
137
137
  if max_page_size is not None:
@@ -139,50 +139,50 @@ class DataLayerRpcClient(RpcClient):
139
139
  response = await self.fetch("get_kv_diff", request)
140
140
  return response
141
141
 
142
- async def get_root_history(self, store_id: bytes32) -> Dict[str, Any]:
142
+ async def get_root_history(self, store_id: bytes32) -> dict[str, Any]:
143
143
  response = await self.fetch("get_root_history", {"id": store_id.hex()})
144
144
  return response
145
145
 
146
146
  async def add_mirror(
147
- self, store_id: bytes32, urls: List[str], amount: int, fee: Optional[uint64]
148
- ) -> Dict[str, Any]:
147
+ self, store_id: bytes32, urls: list[str], amount: int, fee: Optional[uint64]
148
+ ) -> dict[str, Any]:
149
149
  response = await self.fetch("add_mirror", {"id": store_id.hex(), "urls": urls, "amount": amount, "fee": fee})
150
150
  return response
151
151
 
152
- async def delete_mirror(self, coin_id: bytes32, fee: Optional[uint64]) -> Dict[str, Any]:
152
+ async def delete_mirror(self, coin_id: bytes32, fee: Optional[uint64]) -> dict[str, Any]:
153
153
  response = await self.fetch("delete_mirror", {"coin_id": coin_id.hex(), "fee": fee})
154
154
  return response
155
155
 
156
- async def get_mirrors(self, store_id: bytes32) -> Dict[str, Any]:
156
+ async def get_mirrors(self, store_id: bytes32) -> dict[str, Any]:
157
157
  response = await self.fetch("get_mirrors", {"id": store_id.hex()})
158
158
  return response
159
159
 
160
- async def get_subscriptions(self) -> Dict[str, Any]:
160
+ async def get_subscriptions(self) -> dict[str, Any]:
161
161
  response = await self.fetch("subscriptions", {})
162
162
  return response
163
163
 
164
- async def get_owned_stores(self) -> Dict[str, Any]:
164
+ async def get_owned_stores(self) -> dict[str, Any]:
165
165
  response = await self.fetch("get_owned_stores", {})
166
166
  return response
167
167
 
168
- async def get_sync_status(self, store_id: bytes32) -> Dict[str, Any]:
168
+ async def get_sync_status(self, store_id: bytes32) -> dict[str, Any]:
169
169
  response = await self.fetch("get_sync_status", {"id": store_id.hex()})
170
170
  return response
171
171
 
172
- async def check_plugins(self) -> Dict[str, Any]:
172
+ async def check_plugins(self) -> dict[str, Any]:
173
173
  response = await self.fetch("check_plugins", {})
174
174
  return response
175
175
 
176
- async def clear_pending_roots(self, store_id: bytes32) -> Dict[str, Any]:
176
+ async def clear_pending_roots(self, store_id: bytes32) -> dict[str, Any]:
177
177
  request = ClearPendingRootsRequest(store_id=store_id)
178
178
  response = await self.fetch("clear_pending_roots", request.marshal())
179
179
  return response
180
180
 
181
- async def get_proof(self, store_id: bytes32, keys: List[bytes]) -> Dict[str, Any]:
182
- request: Dict[str, Any] = {"store_id": store_id.hex(), "keys": [key.hex() for key in keys]}
181
+ async def get_proof(self, store_id: bytes32, keys: list[bytes]) -> dict[str, Any]:
182
+ request: dict[str, Any] = {"store_id": store_id.hex(), "keys": [key.hex() for key in keys]}
183
183
  response = await self.fetch("get_proof", request)
184
184
  return response
185
185
 
186
- async def verify_proof(self, proof: Dict[str, Any]) -> Dict[str, Any]:
186
+ async def verify_proof(self, proof: dict[str, Any]) -> dict[str, Any]:
187
187
  response = await self.fetch("verify_proof", proof)
188
188
  return response
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Dict, Type, TypeVar
3
+ from typing import Any, TypeVar
4
4
 
5
5
  from typing_extensions import Protocol
6
6
 
@@ -13,22 +13,18 @@ _T = TypeVar("_T")
13
13
 
14
14
  class MarshallableProtocol(Protocol):
15
15
  @classmethod
16
- def unmarshal(cls: Type[_T], marshalled: Dict[str, Any]) -> _T: ...
16
+ def unmarshal(cls: type[_T], marshalled: dict[str, Any]) -> _T: ...
17
17
 
18
- def marshal(self) -> Dict[str, Any]: ...
18
+ def marshal(self) -> dict[str, Any]: ...
19
19
 
20
20
 
21
21
  class UnboundRoute(Protocol):
22
- async def __call__(self, request: Dict[str, Any]) -> Dict[str, Any]:
22
+ async def __call__(self, request: dict[str, Any]) -> dict[str, Any]:
23
23
  pass
24
24
 
25
25
 
26
26
  class UnboundMarshalledRoute(Protocol):
27
- # Ignoring pylint complaint about the name of the first argument since this is a
28
- # special case.
29
- async def __call__( # pylint: disable=E0213
30
- protocol_self, self: Any, request: MarshallableProtocol
31
- ) -> MarshallableProtocol:
27
+ async def __call__(protocol_self, self: Any, request: MarshallableProtocol) -> MarshallableProtocol:
32
28
  pass
33
29
 
34
30
 
@@ -42,9 +38,9 @@ def marshal() -> RouteDecorator:
42
38
  from typing import get_type_hints
43
39
 
44
40
  hints = get_type_hints(route)
45
- request_class: Type[MarshallableProtocol] = hints["request"]
41
+ request_class: type[MarshallableProtocol] = hints["request"]
46
42
 
47
- async def wrapper(self: object, request: Dict[str, object]) -> Dict[str, object]:
43
+ async def wrapper(self: object, request: dict[str, object]) -> dict[str, object]:
48
44
  # import json
49
45
  # name = route.__name__
50
46
  # print(f"\n ==== {name} request.json\n{json.dumps(request, indent=2)}")
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
4
  import operator
5
- from typing import Any, Callable, ClassVar, Dict, List, Optional, Tuple
5
+ from typing import TYPE_CHECKING, Any, Callable, ClassVar, Optional, cast
6
6
 
7
7
  from typing_extensions import Protocol
8
8
 
@@ -23,7 +23,7 @@ class PaginatedRequestData(Protocol):
23
23
  page: uint32
24
24
  page_size: uint32
25
25
 
26
- __match_args__: ClassVar[Tuple[str, ...]] = ()
26
+ __match_args__: ClassVar[tuple[str, ...]] = ()
27
27
 
28
28
 
29
29
  @streamable
@@ -39,11 +39,11 @@ class PlotInfoRequestData(Streamable):
39
39
  node_id: bytes32
40
40
  page: uint32
41
41
  page_size: uint32
42
- filter: List[FilterItem] = dataclasses.field(default_factory=list)
42
+ filter: list[FilterItem] = dataclasses.field(default_factory=list)
43
43
  sort_key: str = "filename"
44
44
  reverse: bool = False
45
45
 
46
- __match_args__: ClassVar[Tuple[str, ...]] = ()
46
+ __match_args__: ClassVar[tuple[str, ...]] = ()
47
47
 
48
48
 
49
49
  @streamable
@@ -52,13 +52,13 @@ class PlotPathRequestData(Streamable):
52
52
  node_id: bytes32
53
53
  page: uint32
54
54
  page_size: uint32
55
- filter: List[str] = dataclasses.field(default_factory=list)
55
+ filter: list[str] = dataclasses.field(default_factory=list)
56
56
  reverse: bool = False
57
57
 
58
- __match_args__: ClassVar[Tuple[str, ...]] = ()
58
+ __match_args__: ClassVar[tuple[str, ...]] = ()
59
59
 
60
60
 
61
- def paginated_plot_request(source: List[Any], request: PaginatedRequestData) -> Dict[str, object]:
61
+ def paginated_plot_request(source: list[Any], request: PaginatedRequestData) -> dict[str, object]:
62
62
  paginator: Paginator = Paginator(source, request.page_size)
63
63
  return {
64
64
  "node_id": request.node_id.hex(),
@@ -78,11 +78,16 @@ def plot_matches_filter(plot: Plot, filter_item: FilterItem) -> bool:
78
78
 
79
79
 
80
80
  class FarmerRpcApi:
81
+ if TYPE_CHECKING:
82
+ from chia.rpc.rpc_server import RpcApiProtocol
83
+
84
+ _protocol_check: ClassVar[RpcApiProtocol] = cast("FarmerRpcApi", None)
85
+
81
86
  def __init__(self, farmer: Farmer):
82
87
  self.service = farmer
83
88
  self.service_name = "chia_farmer"
84
89
 
85
- def get_routes(self) -> Dict[str, Endpoint]:
90
+ def get_routes(self) -> dict[str, Endpoint]:
86
91
  return {
87
92
  "/get_signage_point": self.get_signage_point,
88
93
  "/get_signage_points": self.get_signage_points,
@@ -99,7 +104,7 @@ class FarmerRpcApi:
99
104
  "/get_pool_login_link": self.get_pool_login_link,
100
105
  }
101
106
 
102
- async def _state_changed(self, change: str, change_data: Optional[Dict[str, Any]]) -> List[WsRpcMessage]:
107
+ async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]]) -> list[WsRpcMessage]:
103
108
  payloads = []
104
109
 
105
110
  if change_data is None:
@@ -233,7 +238,7 @@ class FarmerRpcApi:
233
238
 
234
239
  return payloads
235
240
 
236
- async def get_signage_point(self, request: Dict[str, Any]) -> EndpointResult:
241
+ async def get_signage_point(self, request: dict[str, Any]) -> EndpointResult:
237
242
  sp_hash = bytes32.from_hexstr(request["sp_hash"])
238
243
  sps = self.service.sps.get(sp_hash)
239
244
  if sps is None or len(sps) < 1:
@@ -253,8 +258,8 @@ class FarmerRpcApi:
253
258
  "proofs": pospaces,
254
259
  }
255
260
 
256
- async def get_signage_points(self, _: Dict[str, Any]) -> EndpointResult:
257
- result: List[Dict[str, Any]] = []
261
+ async def get_signage_points(self, _: dict[str, Any]) -> EndpointResult:
262
+ result: list[dict[str, Any]] = []
258
263
  for sps in self.service.sps.values():
259
264
  for sp in sps:
260
265
  pospaces = self.service.proofs_of_space.get(sp.challenge_chain_sp, [])
@@ -273,12 +278,12 @@ class FarmerRpcApi:
273
278
  )
274
279
  return {"signage_points": result}
275
280
 
276
- async def get_reward_targets(self, request: Dict[str, Any]) -> EndpointResult:
281
+ async def get_reward_targets(self, request: dict[str, Any]) -> EndpointResult:
277
282
  search_for_private_key = request["search_for_private_key"]
278
283
  max_ph_to_search = request.get("max_ph_to_search", 500)
279
284
  return await self.service.get_reward_targets(search_for_private_key, max_ph_to_search)
280
285
 
281
- async def set_reward_targets(self, request: Dict[str, Any]) -> EndpointResult:
286
+ async def set_reward_targets(self, request: dict[str, Any]) -> EndpointResult:
282
287
  farmer_target, pool_target = None, None
283
288
  if "farmer_target" in request:
284
289
  farmer_target = request["farmer_target"]
@@ -296,7 +301,7 @@ class FarmerRpcApi:
296
301
  )
297
302
  return plot_count
298
303
 
299
- async def get_pool_state(self, request: Dict[str, Any]) -> EndpointResult:
304
+ async def get_pool_state(self, request: dict[str, Any]) -> EndpointResult:
300
305
  pools_list = []
301
306
  for p2_singleton_puzzle_hash, pool_dict in self.service.pool_state.items():
302
307
  pool_state = pool_dict.copy()
@@ -304,26 +309,26 @@ class FarmerRpcApi:
304
309
  pools_list.append(pool_state)
305
310
  return {"pool_state": pools_list}
306
311
 
307
- async def set_payout_instructions(self, request: Dict[str, Any]) -> EndpointResult:
312
+ async def set_payout_instructions(self, request: dict[str, Any]) -> EndpointResult:
308
313
  launcher_id: bytes32 = bytes32.from_hexstr(request["launcher_id"])
309
314
  await self.service.set_payout_instructions(launcher_id, request["payout_instructions"])
310
315
  return {}
311
316
 
312
- async def get_harvesters(self, request: Dict[str, Any]) -> EndpointResult:
317
+ async def get_harvesters(self, request: dict[str, Any]) -> EndpointResult:
313
318
  return await self.service.get_harvesters(False)
314
319
 
315
- async def get_harvesters_summary(self, _: Dict[str, object]) -> EndpointResult:
320
+ async def get_harvesters_summary(self, _: dict[str, object]) -> EndpointResult:
316
321
  return await self.service.get_harvesters(True)
317
322
 
318
- async def get_harvester_plots_valid(self, request_dict: Dict[str, object]) -> EndpointResult:
319
- # TODO: Consider having a extra List[PlotInfo] in Receiver to avoid rebuilding the list for each call
323
+ async def get_harvester_plots_valid(self, request_dict: dict[str, object]) -> EndpointResult:
324
+ # TODO: Consider having a extra list[PlotInfo] in Receiver to avoid rebuilding the list for each call
320
325
  request = PlotInfoRequestData.from_json_dict(request_dict)
321
326
  plot_list = list(self.service.get_receiver(request.node_id).plots().values())
322
327
  # Apply filter
323
328
  plot_list = [
324
329
  plot for plot in plot_list if all(plot_matches_filter(plot, filter_item) for filter_item in request.filter)
325
330
  ]
326
- restricted_sort_keys: List[str] = ["pool_contract_puzzle_hash", "pool_public_key", "plot_public_key"]
331
+ restricted_sort_keys: list[str] = ["pool_contract_puzzle_hash", "pool_public_key", "plot_public_key"]
327
332
  # Apply sort_key and reverse if sort_key is not restricted
328
333
  if request.sort_key in restricted_sort_keys:
329
334
  raise KeyError(f"Can't sort by optional attributes: {restricted_sort_keys}")
@@ -332,8 +337,8 @@ class FarmerRpcApi:
332
337
  return paginated_plot_request(plot_list, request)
333
338
 
334
339
  def paginated_plot_path_request(
335
- self, source_func: Callable[[Receiver], List[str]], request_dict: Dict[str, object]
336
- ) -> Dict[str, object]:
340
+ self, source_func: Callable[[Receiver], list[str]], request_dict: dict[str, object]
341
+ ) -> dict[str, object]:
337
342
  request: PlotPathRequestData = PlotPathRequestData.from_json_dict(request_dict)
338
343
  receiver = self.service.get_receiver(request.node_id)
339
344
  source = source_func(receiver)
@@ -343,16 +348,16 @@ class FarmerRpcApi:
343
348
  source = sorted(source, reverse=request.reverse)
344
349
  return paginated_plot_request(source, request)
345
350
 
346
- async def get_harvester_plots_invalid(self, request_dict: Dict[str, object]) -> EndpointResult:
351
+ async def get_harvester_plots_invalid(self, request_dict: dict[str, object]) -> EndpointResult:
347
352
  return self.paginated_plot_path_request(Receiver.invalid, request_dict)
348
353
 
349
- async def get_harvester_plots_keys_missing(self, request_dict: Dict[str, object]) -> EndpointResult:
354
+ async def get_harvester_plots_keys_missing(self, request_dict: dict[str, object]) -> EndpointResult:
350
355
  return self.paginated_plot_path_request(Receiver.keys_missing, request_dict)
351
356
 
352
- async def get_harvester_plots_duplicates(self, request_dict: Dict[str, object]) -> EndpointResult:
357
+ async def get_harvester_plots_duplicates(self, request_dict: dict[str, object]) -> EndpointResult:
353
358
  return self.paginated_plot_path_request(Receiver.duplicates, request_dict)
354
359
 
355
- async def get_pool_login_link(self, request: Dict[str, Any]) -> EndpointResult:
360
+ async def get_pool_login_link(self, request: dict[str, Any]) -> EndpointResult:
356
361
  launcher_id: bytes32 = bytes32.from_hexstr(request["launcher_id"])
357
362
  login_link: Optional[str] = await self.service.generate_login_link(launcher_id)
358
363
  if login_link is None:
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Dict, List, Optional, cast
3
+ from typing import Any, Optional, cast
4
4
 
5
5
  from chia.rpc.farmer_rpc_api import PlotInfoRequestData, PlotPathRequestData
6
6
  from chia.rpc.rpc_client import RpcClient
@@ -17,16 +17,16 @@ class FarmerRpcClient(RpcClient):
17
17
  to the full node.
18
18
  """
19
19
 
20
- async def get_signage_point(self, sp_hash: bytes32) -> Optional[Dict[str, Any]]:
20
+ async def get_signage_point(self, sp_hash: bytes32) -> Optional[dict[str, Any]]:
21
21
  try:
22
22
  return await self.fetch("get_signage_point", {"sp_hash": sp_hash.hex()})
23
23
  except ValueError:
24
24
  return None
25
25
 
26
- async def get_signage_points(self) -> List[Dict[str, Any]]:
27
- return cast(List[Dict[str, Any]], (await self.fetch("get_signage_points", {}))["signage_points"])
26
+ async def get_signage_points(self) -> list[dict[str, Any]]:
27
+ return cast(list[dict[str, Any]], (await self.fetch("get_signage_points", {}))["signage_points"])
28
28
 
29
- async def get_reward_targets(self, search_for_private_key: bool, max_ph_to_search: int = 500) -> Dict[str, Any]:
29
+ async def get_reward_targets(self, search_for_private_key: bool, max_ph_to_search: int = 500) -> dict[str, Any]:
30
30
  response = await self.fetch(
31
31
  "get_reward_targets",
32
32
  {"search_for_private_key": search_for_private_key, "max_ph_to_search": max_ph_to_search},
@@ -45,7 +45,7 @@ class FarmerRpcClient(RpcClient):
45
45
  self,
46
46
  farmer_target: Optional[str] = None,
47
47
  pool_target: Optional[str] = None,
48
- ) -> Dict[str, Any]:
48
+ ) -> dict[str, Any]:
49
49
  request = {}
50
50
  if farmer_target is not None:
51
51
  request["farmer_target"] = farmer_target
@@ -53,29 +53,29 @@ class FarmerRpcClient(RpcClient):
53
53
  request["pool_target"] = pool_target
54
54
  return await self.fetch("set_reward_targets", request)
55
55
 
56
- async def get_pool_state(self) -> Dict[str, Any]:
56
+ async def get_pool_state(self) -> dict[str, Any]:
57
57
  return await self.fetch("get_pool_state", {})
58
58
 
59
- async def set_payout_instructions(self, launcher_id: bytes32, payout_instructions: str) -> Dict[str, Any]:
59
+ async def set_payout_instructions(self, launcher_id: bytes32, payout_instructions: str) -> dict[str, Any]:
60
60
  request = {"launcher_id": launcher_id.hex(), "payout_instructions": payout_instructions}
61
61
  return await self.fetch("set_payout_instructions", request)
62
62
 
63
- async def get_harvesters(self) -> Dict[str, Any]:
63
+ async def get_harvesters(self) -> dict[str, Any]:
64
64
  return await self.fetch("get_harvesters", {})
65
65
 
66
- async def get_harvesters_summary(self) -> Dict[str, Any]:
66
+ async def get_harvesters_summary(self) -> dict[str, Any]:
67
67
  return await self.fetch("get_harvesters_summary", {})
68
68
 
69
- async def get_harvester_plots_valid(self, request: PlotInfoRequestData) -> Dict[str, Any]:
69
+ async def get_harvester_plots_valid(self, request: PlotInfoRequestData) -> dict[str, Any]:
70
70
  return await self.fetch("get_harvester_plots_valid", recurse_jsonify(request))
71
71
 
72
- async def get_harvester_plots_invalid(self, request: PlotPathRequestData) -> Dict[str, Any]:
72
+ async def get_harvester_plots_invalid(self, request: PlotPathRequestData) -> dict[str, Any]:
73
73
  return await self.fetch("get_harvester_plots_invalid", recurse_jsonify(request))
74
74
 
75
- async def get_harvester_plots_keys_missing(self, request: PlotPathRequestData) -> Dict[str, Any]:
75
+ async def get_harvester_plots_keys_missing(self, request: PlotPathRequestData) -> dict[str, Any]:
76
76
  return await self.fetch("get_harvester_plots_keys_missing", recurse_jsonify(request))
77
77
 
78
- async def get_harvester_plots_duplicates(self, request: PlotPathRequestData) -> Dict[str, Any]:
78
+ async def get_harvester_plots_duplicates(self, request: PlotPathRequestData) -> dict[str, Any]:
79
79
  return await self.fetch("get_harvester_plots_duplicates", recurse_jsonify(request))
80
80
 
81
81
  async def get_pool_login_link(self, launcher_id: bytes32) -> Optional[str]: