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
@@ -21,8 +21,8 @@ else:
21
21
  import threading
22
22
 
23
23
  sigmap = {
24
- signal.SIGINT: signal.CTRL_C_EVENT, # pylint: disable=E1101
25
- signal.SIGBREAK: signal.CTRL_BREAK_EVENT, # pylint: disable=E1101
24
+ signal.SIGINT: signal.CTRL_C_EVENT,
25
+ signal.SIGBREAK: signal.CTRL_BREAK_EVENT,
26
26
  }
27
27
 
28
28
  def kill(pid: int, signum: signal.Signals) -> None:
@@ -10,22 +10,9 @@ import os
10
10
  import random
11
11
  import time
12
12
  import traceback
13
+ from collections.abc import AsyncIterator, Awaitable
13
14
  from pathlib import Path
14
- from typing import (
15
- TYPE_CHECKING,
16
- Any,
17
- AsyncIterator,
18
- Awaitable,
19
- ClassVar,
20
- Dict,
21
- List,
22
- Optional,
23
- Set,
24
- Tuple,
25
- Union,
26
- cast,
27
- final,
28
- )
15
+ from typing import TYPE_CHECKING, Any, ClassVar, Optional, Union, cast, final
29
16
 
30
17
  import aiohttp
31
18
 
@@ -76,13 +63,14 @@ from chia.types.blockchain_format.sized_bytes import bytes32
76
63
  from chia.util.async_pool import Job, QueuedAsyncPool
77
64
  from chia.util.ints import uint32, uint64
78
65
  from chia.util.path import path_from_root
66
+ from chia.util.task_referencer import create_referenced_task
79
67
  from chia.wallet.trade_record import TradeRecord
80
68
  from chia.wallet.trading.offer import Offer as TradingOffer
81
69
  from chia.wallet.transaction_record import TransactionRecord
82
70
  from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
83
71
 
84
72
 
85
- async def get_plugin_info(plugin_remote: PluginRemote) -> Tuple[PluginRemote, Dict[str, Any]]:
73
+ async def get_plugin_info(plugin_remote: PluginRemote) -> tuple[PluginRemote, dict[str, Any]]:
86
74
  try:
87
75
  async with aiohttp.ClientSession() as session:
88
76
  async with session.post(
@@ -107,17 +95,17 @@ class DataLayer:
107
95
  _protocol_check: ClassVar[RpcServiceProtocol] = cast("DataLayer", None)
108
96
 
109
97
  db_path: Path
110
- config: Dict[str, Any]
98
+ config: dict[str, Any]
111
99
  root_path: Path
112
100
  log: logging.Logger
113
101
  wallet_rpc_init: Awaitable[WalletRpcClient]
114
- downloaders: List[PluginRemote]
115
- uploaders: List[PluginRemote]
102
+ downloaders: list[PluginRemote]
103
+ uploaders: list[PluginRemote]
116
104
  maximum_full_file_count: int
117
105
  server_files_location: Path
118
- unsubscribe_data_queue: List[UnsubscribeData]
106
+ unsubscribe_data_queue: list[UnsubscribeData]
119
107
  _server: Optional[ChiaServer] = None
120
- none_bytes: bytes32 = bytes32([0] * 32)
108
+ none_bytes: bytes32 = bytes32.zeros
121
109
  initialized: bool = False
122
110
  _data_store: Optional[DataStore] = None
123
111
  state_changed_callback: Optional[StateChangedProtocol] = None
@@ -161,11 +149,11 @@ class DataLayer:
161
149
  @classmethod
162
150
  def create(
163
151
  cls,
164
- config: Dict[str, Any],
152
+ config: dict[str, Any],
165
153
  root_path: Path,
166
154
  wallet_rpc_init: Awaitable[WalletRpcClient],
167
- downloaders: List[PluginRemote],
168
- uploaders: List[PluginRemote], # dont add FilesystemUploader to this, it is the default uploader
155
+ downloaders: list[PluginRemote],
156
+ uploaders: list[PluginRemote], # dont add FilesystemUploader to this, it is the default uploader
169
157
  name: Optional[str] = None,
170
158
  ) -> DataLayer:
171
159
  if name == "":
@@ -213,7 +201,7 @@ class DataLayer:
213
201
  self._wallet_rpc = await self.wallet_rpc_init
214
202
 
215
203
  await self._data_store.migrate_db()
216
- self.periodically_manage_data_task = asyncio.create_task(self.periodically_manage_data())
204
+ self.periodically_manage_data_task = create_referenced_task(self.periodically_manage_data())
217
205
  try:
218
206
  yield
219
207
  finally:
@@ -236,7 +224,7 @@ class DataLayer:
236
224
  async def on_connect(self, connection: WSChiaConnection) -> None:
237
225
  pass
238
226
 
239
- def get_connections(self, request_node_type: Optional[NodeType]) -> List[Dict[str, Any]]:
227
+ def get_connections(self, request_node_type: Optional[NodeType]) -> list[dict[str, Any]]:
240
228
  return default_get_connections(server=self.server, request_node_type=request_node_type)
241
229
 
242
230
  def set_server(self, server: ChiaServer) -> None:
@@ -250,9 +238,7 @@ class DataLayer:
250
238
 
251
239
  return result.fingerprint
252
240
 
253
- async def create_store(
254
- self, fee: uint64, root: bytes32 = bytes32([0] * 32)
255
- ) -> Tuple[List[TransactionRecord], bytes32]:
241
+ async def create_store(self, fee: uint64, root: bytes32 = bytes32.zeros) -> tuple[list[TransactionRecord], bytes32]:
256
242
  txs, store_id = await self.wallet_rpc.create_new_dl(root, fee)
257
243
  res = await self.data_store.create_tree(store_id=store_id)
258
244
  if res is None:
@@ -263,7 +249,7 @@ class DataLayer:
263
249
  async def batch_update(
264
250
  self,
265
251
  store_id: bytes32,
266
- changelist: List[Dict[str, Any]],
252
+ changelist: list[dict[str, Any]],
267
253
  fee: uint64,
268
254
  submit_on_chain: bool = True,
269
255
  ) -> Optional[TransactionRecord]:
@@ -287,11 +273,11 @@ class DataLayer:
287
273
 
288
274
  async def multistore_batch_update(
289
275
  self,
290
- store_updates: List[Dict[str, Any]],
276
+ store_updates: list[dict[str, Any]],
291
277
  fee: uint64,
292
278
  submit_on_chain: bool = True,
293
- ) -> List[TransactionRecord]:
294
- store_ids: Set[bytes32] = set()
279
+ ) -> list[TransactionRecord]:
280
+ store_ids: set[bytes32] = set()
295
281
  for update in store_updates:
296
282
  store_id = update["store_id"]
297
283
  changelist = update["changelist"]
@@ -306,7 +292,7 @@ class DataLayer:
306
292
  await self.data_store.clean_node_table()
307
293
 
308
294
  if submit_on_chain:
309
- update_dictionary: Dict[bytes32, bytes32] = {}
295
+ update_dictionary: dict[bytes32, bytes32] = {}
310
296
  for store_id in store_ids:
311
297
  await self._update_confirmation_status(store_id=store_id)
312
298
  root_hash = await self._get_publishable_root_hash(store_id=store_id)
@@ -332,9 +318,9 @@ class DataLayer:
332
318
  await self.data_store.change_root_status(pending_root, Status.PENDING)
333
319
  return await self.publish_update(store_id, fee)
334
320
 
335
- async def submit_all_pending_roots(self, fee: uint64) -> List[TransactionRecord]:
321
+ async def submit_all_pending_roots(self, fee: uint64) -> list[TransactionRecord]:
336
322
  pending_roots = await self.data_store.get_all_pending_batches_roots()
337
- update_dictionary: Dict[bytes32, bytes32] = {}
323
+ update_dictionary: dict[bytes32, bytes32] = {}
338
324
  if len(pending_roots) == 0:
339
325
  raise Exception("No pending roots found to submit")
340
326
  for pending_root in pending_roots:
@@ -347,7 +333,7 @@ class DataLayer:
347
333
  async def batch_insert(
348
334
  self,
349
335
  store_id: bytes32,
350
- changelist: List[Dict[str, Any]],
336
+ changelist: list[dict[str, Any]],
351
337
  status: Status = Status.PENDING,
352
338
  enable_batch_autoinsert: Optional[bool] = None,
353
339
  ) -> bytes32:
@@ -359,7 +345,7 @@ class DataLayer:
359
345
  raise Exception("Already have a pending root waiting for confirmation.")
360
346
 
361
347
  # check before any DL changes that this singleton is currently owned by this wallet
362
- singleton_records: List[SingletonRecord] = await self.get_owned_stores()
348
+ singleton_records: list[SingletonRecord] = await self.get_owned_stores()
363
349
  if not any(store_id == singleton.launcher_id for singleton in singleton_records):
364
350
  raise ValueError(f"Singleton with launcher ID {store_id} is not owned by DL Wallet")
365
351
 
@@ -417,7 +403,7 @@ class DataLayer:
417
403
  self,
418
404
  store_id: bytes32,
419
405
  root_hash: Union[bytes32, Unspecified],
420
- ) -> List[TerminalNode]:
406
+ ) -> list[TerminalNode]:
421
407
  await self._update_confirmation_status(store_id=store_id)
422
408
 
423
409
  res = await self.data_store.get_keys_values(store_id, root_hash)
@@ -439,7 +425,7 @@ class DataLayer:
439
425
  res = await self.data_store.get_keys_values_paginated(store_id, page, max_page_size, root_hash)
440
426
  return res
441
427
 
442
- async def get_keys(self, store_id: bytes32, root_hash: Union[bytes32, Unspecified]) -> List[bytes]:
428
+ async def get_keys(self, store_id: bytes32, root_hash: Union[bytes32, Unspecified]) -> list[bytes]:
443
429
  await self._update_confirmation_status(store_id=store_id)
444
430
 
445
431
  res = await self.data_store.get_keys(store_id, root_hash)
@@ -459,7 +445,7 @@ class DataLayer:
459
445
  res = await self.data_store.get_keys_paginated(store_id, page, max_page_size, root_hash)
460
446
  return res
461
447
 
462
- async def get_ancestors(self, node_hash: bytes32, store_id: bytes32) -> List[InternalNode]:
448
+ async def get_ancestors(self, node_hash: bytes32, store_id: bytes32) -> list[InternalNode]:
463
449
  await self._update_confirmation_status(store_id=store_id)
464
450
 
465
451
  res = await self.data_store.get_ancestors(node_hash=node_hash, store_id=store_id)
@@ -482,7 +468,7 @@ class DataLayer:
482
468
  return None
483
469
  return res.node_hash
484
470
 
485
- async def get_root_history(self, store_id: bytes32) -> List[SingletonRecord]:
471
+ async def get_root_history(self, store_id: bytes32) -> list[SingletonRecord]:
486
472
  records = await self.wallet_rpc.dl_history(store_id)
487
473
  if records is None:
488
474
  self.log.error(f"Failed to get root history for {store_id.hex()}")
@@ -793,7 +779,7 @@ class DataLayer:
793
779
  else:
794
780
  self.log.debug(f"uploaded to uploader {uploader}")
795
781
 
796
- async def subscribe(self, store_id: bytes32, urls: List[str]) -> Subscription:
782
+ async def subscribe(self, store_id: bytes32, urls: list[str]) -> Subscription:
797
783
  parsed_urls = [url.rstrip("/") for url in urls]
798
784
  subscription = Subscription(store_id, [ServerInfo(url, 0, 0) for url in parsed_urls])
799
785
  await self.wallet_rpc.dl_track_new(subscription.store_id)
@@ -802,7 +788,7 @@ class DataLayer:
802
788
  self.log.info(f"Done adding subscription: {subscription.store_id}")
803
789
  return subscription
804
790
 
805
- async def remove_subscriptions(self, store_id: bytes32, urls: List[str]) -> None:
791
+ async def remove_subscriptions(self, store_id: bytes32, urls: list[str]) -> None:
806
792
  parsed_urls = [url.rstrip("/") for url in urls]
807
793
  async with self.subscription_lock:
808
794
  await self.data_store.remove_subscriptions(store_id, parsed_urls)
@@ -821,7 +807,7 @@ class DataLayer:
821
807
  subscriptions = await self.data_store.get_subscriptions()
822
808
  if store_id not in (subscription.store_id for subscription in subscriptions):
823
809
  raise RuntimeError("No subscription found for the given store_id.")
824
- paths: List[Path] = []
810
+ paths: list[Path] = []
825
811
  if await self.data_store.store_id_exists(store_id) and not retain_data:
826
812
  generation = await self.data_store.get_tree_generation(store_id)
827
813
  all_roots = await self.data_store.get_roots_between(store_id, 1, generation + 1)
@@ -860,11 +846,11 @@ class DataLayer:
860
846
  except FileNotFoundError:
861
847
  pass
862
848
 
863
- async def get_subscriptions(self) -> List[Subscription]:
849
+ async def get_subscriptions(self) -> list[Subscription]:
864
850
  async with self.subscription_lock:
865
851
  return await self.data_store.get_subscriptions()
866
852
 
867
- async def add_mirror(self, store_id: bytes32, urls: List[str], amount: uint64, fee: uint64) -> None:
853
+ async def add_mirror(self, store_id: bytes32, urls: list[str], amount: uint64, fee: uint64) -> None:
868
854
  if not urls:
869
855
  raise RuntimeError("URL list can't be empty")
870
856
  bytes_urls = [bytes(url, "utf8") for url in urls]
@@ -873,22 +859,22 @@ class DataLayer:
873
859
  async def delete_mirror(self, coin_id: bytes32, fee: uint64) -> None:
874
860
  await self.wallet_rpc.dl_delete_mirror(coin_id, fee)
875
861
 
876
- async def get_mirrors(self, store_id: bytes32) -> List[Mirror]:
877
- mirrors: List[Mirror] = await self.wallet_rpc.dl_get_mirrors(store_id)
862
+ async def get_mirrors(self, store_id: bytes32) -> list[Mirror]:
863
+ mirrors: list[Mirror] = await self.wallet_rpc.dl_get_mirrors(store_id)
878
864
  return [mirror for mirror in mirrors if mirror.urls]
879
865
 
880
866
  async def update_subscriptions_from_wallet(self, store_id: bytes32) -> None:
881
- mirrors: List[Mirror] = await self.wallet_rpc.dl_get_mirrors(store_id)
882
- urls: List[str] = []
867
+ mirrors: list[Mirror] = await self.wallet_rpc.dl_get_mirrors(store_id)
868
+ urls: list[str] = []
883
869
  for mirror in mirrors:
884
- urls = urls + [url.decode("utf8") for url in mirror.urls]
870
+ urls += [url.decode("utf8") for url in mirror.urls]
885
871
  urls = [url.rstrip("/") for url in urls]
886
872
  await self.data_store.update_subscriptions_from_wallet(store_id, urls)
887
873
 
888
- async def get_owned_stores(self) -> List[SingletonRecord]:
874
+ async def get_owned_stores(self) -> list[SingletonRecord]:
889
875
  return await self.wallet_rpc.dl_owned_singletons()
890
876
 
891
- async def get_kv_diff(self, store_id: bytes32, hash_1: bytes32, hash_2: bytes32) -> Set[DiffData]:
877
+ async def get_kv_diff(self, store_id: bytes32, hash_1: bytes32, hash_2: bytes32) -> set[DiffData]:
892
878
  return await self.data_store.get_kv_diff(store_id, hash_1, hash_2)
893
879
 
894
880
  async def get_kv_diff_paginated(
@@ -935,10 +921,14 @@ class DataLayer:
935
921
  # Need this to make sure we process updates and generate DAT files
936
922
  try:
937
923
  owned_stores = await self.get_owned_stores()
938
- except ValueError:
924
+ except (ValueError, aiohttp.client_exceptions.ClientConnectorError):
939
925
  # Sometimes the DL wallet isn't available, so we can't get the owned stores.
940
926
  # We'll try again next time.
941
927
  owned_stores = []
928
+ except Exception as e:
929
+ self.log.error(f"Exception while fetching owned stores: {type(e)} {e} {traceback.format_exc()}")
930
+ owned_stores = []
931
+
942
932
  subscription_store_ids = {subscription.store_id for subscription in subscriptions}
943
933
  for record in owned_stores:
944
934
  store_id = record.launcher_id
@@ -1006,10 +996,10 @@ class DataLayer:
1006
996
  async def build_offer_changelist(
1007
997
  self,
1008
998
  store_id: bytes32,
1009
- inclusions: Tuple[KeyValue, ...],
1010
- ) -> List[Dict[str, Any]]:
999
+ inclusions: tuple[KeyValue, ...],
1000
+ ) -> list[dict[str, Any]]:
1011
1001
  async with self.data_store.transaction():
1012
- changelist: List[Dict[str, Any]] = []
1002
+ changelist: list[dict[str, Any]] = []
1013
1003
  for entry in inclusions:
1014
1004
  try:
1015
1005
  existing_value = await self.get_value(store_id=store_id, key=entry.key)
@@ -1039,12 +1029,12 @@ class DataLayer:
1039
1029
 
1040
1030
  return changelist
1041
1031
 
1042
- async def process_offered_stores(self, offer_stores: Tuple[OfferStore, ...]) -> Dict[bytes32, StoreProofs]:
1032
+ async def process_offered_stores(self, offer_stores: tuple[OfferStore, ...]) -> dict[bytes32, StoreProofs]:
1043
1033
  for offer_store in offer_stores:
1044
1034
  await self._update_confirmation_status(store_id=offer_store.store_id)
1045
1035
 
1046
1036
  async with self.data_store.transaction():
1047
- our_store_proofs: Dict[bytes32, StoreProofs] = {}
1037
+ our_store_proofs: dict[bytes32, StoreProofs] = {}
1048
1038
  for offer_store in offer_stores:
1049
1039
  changelist = await self.build_offer_changelist(
1050
1040
  store_id=offer_store.store_id,
@@ -1066,7 +1056,7 @@ class DataLayer:
1066
1056
  if new_root_hash is None:
1067
1057
  raise Exception("only inserts are supported so a None root hash should not be possible")
1068
1058
 
1069
- proofs: List[Proof] = []
1059
+ proofs: list[Proof] = []
1070
1060
  for entry in offer_store.inclusions:
1071
1061
  node_hash = await self.get_key_value_hash(
1072
1062
  store_id=offer_store.store_id,
@@ -1098,21 +1088,20 @@ class DataLayer:
1098
1088
 
1099
1089
  async def make_offer(
1100
1090
  self,
1101
- maker: Tuple[OfferStore, ...],
1102
- taker: Tuple[OfferStore, ...],
1091
+ maker: tuple[OfferStore, ...],
1092
+ taker: tuple[OfferStore, ...],
1103
1093
  fee: uint64,
1104
1094
  ) -> Offer:
1105
1095
  async with self.data_store.transaction():
1106
1096
  our_store_proofs = await self.process_offered_stores(offer_stores=maker)
1107
1097
 
1108
- offer_dict: Dict[Union[uint32, str], int] = {
1098
+ offer_dict: dict[Union[uint32, str], int] = {
1109
1099
  **{offer_store.store_id.hex(): -1 for offer_store in maker},
1110
1100
  **{offer_store.store_id.hex(): 1 for offer_store in taker},
1111
1101
  }
1112
1102
 
1113
- solver: Dict[str, Any] = {
1114
- "0x"
1115
- + our_offer_store.store_id.hex(): {
1103
+ solver: dict[str, Any] = {
1104
+ "0x" + our_offer_store.store_id.hex(): {
1116
1105
  "new_root": "0x" + our_store_proofs[our_offer_store.store_id].proofs[0].root().hex(),
1117
1106
  "dependencies": [
1118
1107
  {
@@ -1158,8 +1147,8 @@ class DataLayer:
1158
1147
  async def take_offer(
1159
1148
  self,
1160
1149
  offer_bytes: bytes,
1161
- taker: Tuple[OfferStore, ...],
1162
- maker: Tuple[StoreProofs, ...],
1150
+ taker: tuple[OfferStore, ...],
1151
+ maker: tuple[StoreProofs, ...],
1163
1152
  fee: uint64,
1164
1153
  ) -> TradeRecord:
1165
1154
  async with self.data_store.transaction():
@@ -1170,10 +1159,10 @@ class DataLayer:
1170
1159
 
1171
1160
  verify_offer(maker=maker, taker=taker, summary=summary)
1172
1161
 
1173
- all_store_proofs: Dict[bytes32, StoreProofs] = {
1162
+ all_store_proofs: dict[bytes32, StoreProofs] = {
1174
1163
  store_proofs.proofs[0].root(): store_proofs for store_proofs in [*maker, *our_store_proofs.values()]
1175
1164
  }
1176
- proofs_of_inclusion: List[Tuple[str, str, List[str]]] = []
1165
+ proofs_of_inclusion: list[tuple[str, str, list[str]]] = []
1177
1166
  for root, store_proofs in all_store_proofs.items():
1178
1167
  for proof in store_proofs.proofs:
1179
1168
  layers = [
@@ -1194,11 +1183,10 @@ class DataLayer:
1194
1183
  )
1195
1184
  )
1196
1185
 
1197
- solver: Dict[str, Any] = {
1186
+ solver: dict[str, Any] = {
1198
1187
  "proofs_of_inclusion": proofs_of_inclusion,
1199
1188
  **{
1200
- "0x"
1201
- + our_offer_store.store_id.hex(): {
1189
+ "0x" + our_offer_store.store_id.hex(): {
1202
1190
  "new_root": "0x" + root.hex(),
1203
1191
  "dependencies": [
1204
1192
  {
@@ -1232,7 +1220,7 @@ class DataLayer:
1232
1220
  return trade_record
1233
1221
 
1234
1222
  async def cancel_offer(self, trade_id: bytes32, secure: bool, fee: uint64) -> None:
1235
- store_ids: List[bytes32] = []
1223
+ store_ids: list[bytes32] = []
1236
1224
 
1237
1225
  if not secure:
1238
1226
  trade_record = await self.wallet_rpc.get_offer(trade_id=trade_id, file_contents=True)
@@ -1270,7 +1258,7 @@ class DataLayer:
1270
1258
  target_generation=singleton_record.generation,
1271
1259
  )
1272
1260
 
1273
- async def get_uploaders(self, store_id: bytes32) -> List[PluginRemote]:
1261
+ async def get_uploaders(self, store_id: bytes32) -> list[PluginRemote]:
1274
1262
  uploaders = []
1275
1263
  for uploader in self.uploaders:
1276
1264
  async with aiohttp.ClientSession() as session:
@@ -1,14 +1,22 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
+ from typing import TYPE_CHECKING, ClassVar, cast
4
5
 
5
6
  from chia.data_layer.data_layer import DataLayer
7
+ from chia.server.api_protocol import ApiMetadata
6
8
  from chia.server.server import ChiaServer
7
9
 
8
10
 
9
11
  class DataLayerAPI:
12
+ if TYPE_CHECKING:
13
+ from chia.server.api_protocol import ApiProtocol
14
+
15
+ _protocol_check: ClassVar[ApiProtocol] = cast("DataLayerAPI", None)
16
+
10
17
  log: logging.Logger
11
18
  data_layer: DataLayer
19
+ metadata: ClassVar[ApiMetadata] = ApiMetadata()
12
20
 
13
21
  def __init__(self, data_layer: DataLayer) -> None:
14
22
  self.log = logging.getLogger(__name__)
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Iterable, List
3
+ from collections.abc import Iterable
4
4
 
5
5
  from chia.types.blockchain_format.sized_bytes import bytes32
6
6
 
@@ -14,7 +14,7 @@ def build_message_with_hashes(message: str, bytes_objects: Iterable[bytes]) -> s
14
14
 
15
15
 
16
16
  class TreeGenerationIncrementingError(IntegrityError):
17
- def __init__(self, store_ids: List[bytes32]) -> None:
17
+ def __init__(self, store_ids: list[bytes32]) -> None:
18
18
  super().__init__(
19
19
  build_message_with_hashes(
20
20
  message="Found trees with generations not properly incrementing:",
@@ -24,7 +24,7 @@ class TreeGenerationIncrementingError(IntegrityError):
24
24
 
25
25
 
26
26
  class NodeHashError(IntegrityError):
27
- def __init__(self, node_hashes: List[bytes32]) -> None:
27
+ def __init__(self, node_hashes: list[bytes32]) -> None:
28
28
  super().__init__(
29
29
  build_message_with_hashes(
30
30
  message="Found nodes with incorrect hashes:",
@@ -7,7 +7,7 @@ import sys
7
7
  from dataclasses import dataclass, field
8
8
  from pathlib import Path
9
9
  from types import FrameType
10
- from typing import Any, Dict, Optional
10
+ from typing import Any, Optional
11
11
 
12
12
  import click
13
13
  from aiohttp import web
@@ -35,7 +35,7 @@ log = logging.getLogger(__name__)
35
35
  @dataclass
36
36
  class DataLayerServer:
37
37
  root_path: Path
38
- config: Dict[str, Any]
38
+ config: dict[str, Any]
39
39
  log: logging.Logger
40
40
  shutdown_event: asyncio.Event
41
41
  webserver: Optional[WebServer] = None