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
chia/daemon/client.py CHANGED
@@ -3,14 +3,16 @@ from __future__ import annotations
3
3
  import asyncio
4
4
  import json
5
5
  import ssl
6
+ from collections.abc import AsyncIterator
6
7
  from contextlib import asynccontextmanager
7
8
  from pathlib import Path
8
- from typing import Any, AsyncIterator, Dict, List, Optional
9
+ from typing import Any, Optional
9
10
 
10
11
  import aiohttp
11
12
 
12
13
  from chia.util.ints import uint32
13
14
  from chia.util.json_util import dict_to_json_str
15
+ from chia.util.task_referencer import create_referenced_task
14
16
  from chia.util.ws_message import WsRpcMessage, create_payload_dict
15
17
 
16
18
 
@@ -23,32 +25,42 @@ class DaemonProxy:
23
25
  max_message_size: int = 50 * 1000 * 1000,
24
26
  ):
25
27
  self._uri = uri
26
- self._request_dict: Dict[str, asyncio.Event] = {}
27
- self.response_dict: Dict[str, WsRpcMessage] = {}
28
+ self._request_dict: dict[str, asyncio.Event] = {}
29
+ self.response_dict: dict[str, WsRpcMessage] = {}
28
30
  self.ssl_context = ssl_context
29
31
  self.heartbeat = heartbeat
30
32
  self.client_session: Optional[aiohttp.ClientSession] = None
31
33
  self.websocket: Optional[aiohttp.ClientWebSocketResponse] = None
32
34
  self.max_message_size = max_message_size
33
35
 
34
- def format_request(self, command: str, data: Dict[str, Any]) -> WsRpcMessage:
36
+ def format_request(self, command: str, data: dict[str, Any]) -> WsRpcMessage:
35
37
  request = create_payload_dict(command, data, "client", "daemon")
36
38
  return request
37
39
 
38
- async def start(self) -> None:
39
- try:
40
- self.client_session = aiohttp.ClientSession()
41
- self.websocket = await self.client_session.ws_connect(
42
- self._uri,
43
- autoclose=True,
44
- autoping=True,
45
- heartbeat=self.heartbeat,
46
- ssl=self.ssl_context if self.ssl_context is not None else True,
47
- max_msg_size=self.max_message_size,
48
- )
49
- except Exception:
40
+ async def start(self, wait_for_start: bool = False) -> None:
41
+ self.client_session = aiohttp.ClientSession()
42
+
43
+ connect_backoff = 2
44
+ while (self.websocket is None or self.websocket.closed) and connect_backoff <= 60:
45
+ try:
46
+ self.websocket = await self.client_session.ws_connect(
47
+ self._uri,
48
+ autoclose=True,
49
+ autoping=True,
50
+ heartbeat=self.heartbeat,
51
+ ssl=self.ssl_context if self.ssl_context is not None else True,
52
+ max_msg_size=self.max_message_size,
53
+ )
54
+ break
55
+ except aiohttp.ClientError:
56
+ if not wait_for_start:
57
+ break
58
+ await asyncio.sleep(connect_backoff)
59
+ connect_backoff *= 2
60
+
61
+ if self.websocket is None or self.websocket.closed:
50
62
  await self.close()
51
- raise
63
+ raise Exception("Failed to connect to daemon")
52
64
 
53
65
  async def listener_task() -> None:
54
66
  try:
@@ -56,7 +68,7 @@ class DaemonProxy:
56
68
  finally:
57
69
  await self.close()
58
70
 
59
- asyncio.create_task(listener_task())
71
+ create_referenced_task(listener_task(), known_unreferenced=True)
60
72
  await asyncio.sleep(1)
61
73
 
62
74
  async def listener(self) -> None:
@@ -80,7 +92,7 @@ class DaemonProxy:
80
92
  string = dict_to_json_str(request)
81
93
  if self.websocket is None or self.websocket.closed:
82
94
  raise Exception("Websocket is not connected")
83
- asyncio.create_task(self.websocket.send_str(string))
95
+ create_referenced_task(self.websocket.send_str(string), known_unreferenced=True)
84
96
  try:
85
97
  await asyncio.wait_for(self._request_dict[request_id].wait(), timeout=30)
86
98
  self._request_dict.pop(request_id)
@@ -92,13 +104,13 @@ class DaemonProxy:
92
104
  raise Exception(f"No response from daemon for request_id: {request_id}")
93
105
 
94
106
  async def get_version(self) -> WsRpcMessage:
95
- data: Dict[str, Any] = {}
107
+ data: dict[str, Any] = {}
96
108
  request = self.format_request("get_version", data)
97
109
  response = await self._get(request)
98
110
  return response
99
111
 
100
112
  async def get_network_info(self) -> WsRpcMessage:
101
- data: Dict[str, Any] = {}
113
+ data: dict[str, Any] = {}
102
114
  request = self.format_request("get_network_info", data)
103
115
  response = await self._get(request)
104
116
  return response
@@ -124,7 +136,7 @@ class DaemonProxy:
124
136
  return False
125
137
 
126
138
  async def is_keyring_locked(self) -> bool:
127
- data: Dict[str, Any] = {}
139
+ data: dict[str, Any] = {}
128
140
  request = self.format_request("is_keyring_locked", data)
129
141
  response = await self._get(request)
130
142
  if "is_keyring_locked" in response["data"]:
@@ -152,7 +164,7 @@ class DaemonProxy:
152
164
  request = self.format_request("exit", {})
153
165
  return await self._get(request)
154
166
 
155
- async def get_keys_for_plotting(self, fingerprints: Optional[List[uint32]] = None) -> WsRpcMessage:
167
+ async def get_keys_for_plotting(self, fingerprints: Optional[list[uint32]] = None) -> WsRpcMessage:
156
168
  data = {"fingerprints": fingerprints} if fingerprints else {}
157
169
  request = self.format_request("get_keys_for_plotting", data)
158
170
  response = await self._get(request)
@@ -160,7 +172,12 @@ class DaemonProxy:
160
172
 
161
173
 
162
174
  async def connect_to_daemon(
163
- self_hostname: str, daemon_port: int, max_message_size: int, ssl_context: ssl.SSLContext, heartbeat: int
175
+ self_hostname: str,
176
+ daemon_port: int,
177
+ max_message_size: int,
178
+ ssl_context: ssl.SSLContext,
179
+ heartbeat: int,
180
+ wait_for_start: bool = False,
164
181
  ) -> DaemonProxy:
165
182
  """
166
183
  Connect to the local daemon.
@@ -172,12 +189,13 @@ async def connect_to_daemon(
172
189
  max_message_size=max_message_size,
173
190
  heartbeat=heartbeat,
174
191
  )
175
- await client.start()
192
+
193
+ await client.start(wait_for_start=wait_for_start)
176
194
  return client
177
195
 
178
196
 
179
197
  async def connect_to_daemon_and_validate(
180
- root_path: Path, config: Dict[str, Any], quiet: bool = False
198
+ root_path: Path, config: dict[str, Any], quiet: bool = False, wait_for_start: bool = False
181
199
  ) -> Optional[DaemonProxy]:
182
200
  """
183
201
  Connect to the local daemon and do a ping to ensure that something is really
@@ -199,6 +217,7 @@ async def connect_to_daemon_and_validate(
199
217
  max_message_size=daemon_max_message_size,
200
218
  ssl_context=ssl_context,
201
219
  heartbeat=daemon_heartbeat,
220
+ wait_for_start=wait_for_start,
202
221
  )
203
222
  r = await connection.ping()
204
223
 
@@ -213,7 +232,7 @@ async def connect_to_daemon_and_validate(
213
232
 
214
233
  @asynccontextmanager
215
234
  async def acquire_connection_to_daemon(
216
- root_path: Path, config: Dict[str, Any], quiet: bool = False
235
+ root_path: Path, config: dict[str, Any], quiet: bool = False
217
236
  ) -> AsyncIterator[Optional[DaemonProxy]]:
218
237
  """
219
238
  Asynchronous context manager which attempts to create a connection to the daemon.
@@ -5,7 +5,7 @@ import logging
5
5
  import ssl
6
6
  import traceback
7
7
  from pathlib import Path
8
- from typing import Any, Dict, List, Literal, Optional, Tuple, Union, overload
8
+ from typing import Any, Literal, Optional, Union, overload
9
9
 
10
10
  from aiohttp import ClientConnectorError, ClientSession
11
11
  from chia_rs import AugSchemeMPL, G1Element, PrivateKey
@@ -31,6 +31,7 @@ from chia.util.errors import (
31
31
  KeychainProxyConnectionTimeout,
32
32
  )
33
33
  from chia.util.keychain import Keychain, KeyData, bytes_to_mnemonic, mnemonic_to_seed
34
+ from chia.util.task_referencer import create_referenced_task
34
35
  from chia.util.ws_message import WsRpcMessage
35
36
 
36
37
 
@@ -71,7 +72,7 @@ class KeychainProxy(DaemonProxy):
71
72
  """
72
73
  return self.keychain is not None
73
74
 
74
- def format_request(self, command: str, data: Dict[str, Any]) -> WsRpcMessage:
75
+ def format_request(self, command: str, data: dict[str, Any]) -> WsRpcMessage:
75
76
  """
76
77
  Overrides DaemonProxy.format_request() to add keychain-specific RPC params
77
78
  """
@@ -98,8 +99,8 @@ class KeychainProxy(DaemonProxy):
98
99
  except asyncio.TimeoutError:
99
100
  raise KeychainProxyConnectionTimeout()
100
101
 
101
- async def start(self) -> None:
102
- self.keychain_connection_task = asyncio.create_task(self.connect_to_keychain())
102
+ async def start(self, wait_for_start: bool = False) -> None:
103
+ self.keychain_connection_task = create_referenced_task(self.connect_to_keychain())
103
104
  await self.connection_established.wait() # wait until connection is established.
104
105
 
105
106
  async def connect_to_keychain(self) -> None:
@@ -141,7 +142,7 @@ class KeychainProxy(DaemonProxy):
141
142
  if self.keychain_connection_task is not None:
142
143
  await self.keychain_connection_task
143
144
 
144
- async def get_response_for_request(self, request_name: str, data: Dict[str, Any]) -> Tuple[WsRpcMessage, bool]:
145
+ async def get_response_for_request(self, request_name: str, data: dict[str, Any]) -> tuple[WsRpcMessage, bool]:
145
146
  request = self.format_request(request_name, data)
146
147
  response = await self._get(request)
147
148
  success = response["data"].get("success", False)
@@ -252,11 +253,11 @@ class KeychainProxy(DaemonProxy):
252
253
  if not success:
253
254
  self.handle_error(response)
254
255
 
255
- async def get_all_private_keys(self) -> List[Tuple[PrivateKey, bytes]]:
256
+ async def get_all_private_keys(self) -> list[tuple[PrivateKey, bytes]]:
256
257
  """
257
258
  Forwards to Keychain.get_all_private_keys()
258
259
  """
259
- keys: List[Tuple[PrivateKey, bytes]] = []
260
+ keys: list[tuple[PrivateKey, bytes]] = []
260
261
  if self.use_local_keychain():
261
262
  keys = self.keychain.get_all_private_keys()
262
263
  else:
@@ -415,11 +416,11 @@ class KeychainProxy(DaemonProxy):
415
416
  self.handle_error(response)
416
417
  return key_data
417
418
 
418
- async def get_keys(self, include_secrets: bool = False) -> List[KeyData]:
419
+ async def get_keys(self, include_secrets: bool = False) -> list[KeyData]:
419
420
  """
420
421
  Returns all KeyData
421
422
  """
422
- keys: List[KeyData] = []
423
+ keys: list[KeyData] = []
423
424
  if self.use_local_keychain():
424
425
  keys = self.keychain.get_keys(include_secrets)
425
426
  else:
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import logging
4
4
  from dataclasses import dataclass, field
5
5
  from pathlib import Path
6
- from typing import Any, Dict, List, Type
6
+ from typing import Any
7
7
 
8
8
  from chia_rs import PrivateKey
9
9
 
@@ -65,7 +65,7 @@ class GetKeyRequest(Streamable):
65
65
  @streamable
66
66
  @dataclass(frozen=True)
67
67
  class GetKeysResponse(Streamable):
68
- keys: List[KeyData]
68
+ keys: list[KeyData]
69
69
 
70
70
 
71
71
  @streamable
@@ -91,7 +91,7 @@ class GetPublicKeyRequest(Streamable):
91
91
  class GetPublicKeyResponse(Streamable):
92
92
  key: KeyData
93
93
 
94
- def to_json_dict(self) -> Dict[str, Any]:
94
+ def to_json_dict(self) -> dict[str, Any]:
95
95
  # Ensure that only approved keys are returned
96
96
  approved_keys = ["fingerprint", "public_key", "label"]
97
97
  key_dict = self.key.to_json_dict()
@@ -108,9 +108,9 @@ class GetPublicKeysRequest(Streamable):
108
108
  @streamable
109
109
  @dataclass(frozen=True)
110
110
  class GetPublicKeysResponse(Streamable):
111
- keys: List[KeyData]
111
+ keys: list[KeyData]
112
112
 
113
- def to_json_dict(self) -> Dict[str, Any]:
113
+ def to_json_dict(self) -> dict[str, Any]:
114
114
  # Ensure that only approved keys are returned
115
115
  approved_keys = ["fingerprint", "public_key", "label"]
116
116
  return {
@@ -149,9 +149,9 @@ class KeychainServer:
149
149
  """
150
150
 
151
151
  _default_keychain: Keychain = field(default_factory=Keychain)
152
- _alt_keychains: Dict[str, Keychain] = field(default_factory=dict)
152
+ _alt_keychains: dict[str, Keychain] = field(default_factory=dict)
153
153
 
154
- def get_keychain_for_request(self, request: Dict[str, Any]) -> Keychain:
154
+ def get_keychain_for_request(self, request: dict[str, Any]) -> Keychain:
155
155
  """
156
156
  Keychain instances can have user and service strings associated with them.
157
157
  The keychain backends ultimately point to the same data stores, but the user
@@ -171,7 +171,7 @@ class KeychainServer:
171
171
  self._alt_keychains[key] = keychain
172
172
  return keychain
173
173
 
174
- async def handle_command(self, command: str, data: Dict[str, Any]) -> Dict[str, Any]:
174
+ async def handle_command(self, command: str, data: dict[str, Any]) -> dict[str, Any]:
175
175
  try:
176
176
  if command == "add_private_key":
177
177
  data["private"] = True
@@ -208,7 +208,7 @@ class KeychainServer:
208
208
  log.exception(e)
209
209
  return {"success": False, "error": str(e), "command": command}
210
210
 
211
- async def add_key(self, request: Dict[str, Any]) -> Dict[str, Any]:
211
+ async def add_key(self, request: dict[str, Any]) -> dict[str, Any]:
212
212
  if self.get_keychain_for_request(request).is_keyring_locked():
213
213
  return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
214
214
 
@@ -245,7 +245,7 @@ class KeychainServer:
245
245
 
246
246
  return {"success": True, "fingerprint": fingerprint}
247
247
 
248
- async def check_keys(self, request: Dict[str, Any]) -> Dict[str, Any]:
248
+ async def check_keys(self, request: dict[str, Any]) -> dict[str, Any]:
249
249
  if self.get_keychain_for_request(request).is_keyring_locked():
250
250
  return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
251
251
 
@@ -261,7 +261,7 @@ class KeychainServer:
261
261
 
262
262
  return {"success": True}
263
263
 
264
- async def delete_all_keys(self, request: Dict[str, Any]) -> Dict[str, Any]:
264
+ async def delete_all_keys(self, request: dict[str, Any]) -> dict[str, Any]:
265
265
  if self.get_keychain_for_request(request).is_keyring_locked():
266
266
  return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
267
267
 
@@ -269,7 +269,7 @@ class KeychainServer:
269
269
 
270
270
  return {"success": True}
271
271
 
272
- async def delete_key_by_fingerprint(self, request: Dict[str, Any]) -> Dict[str, Any]:
272
+ async def delete_key_by_fingerprint(self, request: dict[str, Any]) -> dict[str, Any]:
273
273
  if self.get_keychain_for_request(request).is_keyring_locked():
274
274
  return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
275
275
 
@@ -285,7 +285,7 @@ class KeychainServer:
285
285
 
286
286
  return {"success": True}
287
287
 
288
- async def run_request(self, request_dict: Dict[str, Any], request_type: Type[Any]) -> Dict[str, Any]:
288
+ async def run_request(self, request_dict: dict[str, Any], request_type: type[Any]) -> dict[str, Any]:
289
289
  keychain = self.get_keychain_for_request(request_dict)
290
290
  if keychain.is_keyring_locked():
291
291
  return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
@@ -314,8 +314,8 @@ class KeychainServer:
314
314
  "error_details": {"message": str(e)},
315
315
  }
316
316
 
317
- async def get_all_private_keys(self, request: Dict[str, Any]) -> Dict[str, Any]:
318
- all_keys: List[Dict[str, Any]] = []
317
+ async def get_all_private_keys(self, request: dict[str, Any]) -> dict[str, Any]:
318
+ all_keys: list[dict[str, Any]] = []
319
319
  if self.get_keychain_for_request(request).is_keyring_locked():
320
320
  return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
321
321
 
@@ -325,8 +325,8 @@ class KeychainServer:
325
325
 
326
326
  return {"success": True, "private_keys": all_keys}
327
327
 
328
- async def get_first_private_key(self, request: Dict[str, Any]) -> Dict[str, Any]:
329
- key: Dict[str, Any] = {}
328
+ async def get_first_private_key(self, request: dict[str, Any]) -> dict[str, Any]:
329
+ key: dict[str, Any] = {}
330
330
  if self.get_keychain_for_request(request).is_keyring_locked():
331
331
  return {"success": False, "error": KEYCHAIN_ERR_LOCKED}
332
332
 
@@ -340,7 +340,7 @@ class KeychainServer:
340
340
 
341
341
  return {"success": True, "private_key": key}
342
342
 
343
- async def get_key_for_fingerprint(self, request: Dict[str, Any]) -> Dict[str, Any]:
343
+ async def get_key_for_fingerprint(self, request: dict[str, Any]) -> dict[str, Any]:
344
344
  keychain = self.get_keychain_for_request(request)
345
345
  if keychain.is_keyring_locked():
346
346
  return {"success": False, "error": KEYCHAIN_ERR_LOCKED}