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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc1.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
@@ -1,19 +1,26 @@
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.protocols import full_node_protocol, introducer_protocol, wallet_protocol
7
+ from chia.server.api_protocol import ApiMetadata
6
8
  from chia.server.outbound_message import NodeType
7
9
  from chia.server.ws_connection import WSChiaConnection
8
10
  from chia.types.mempool_inclusion_status import MempoolInclusionStatus
9
- from chia.util.api_decorators import api_request
10
11
  from chia.util.errors import Err
11
12
  from chia.wallet.wallet_node import WalletNode
12
13
 
13
14
 
14
15
  class WalletNodeAPI:
16
+ if TYPE_CHECKING:
17
+ from chia.server.api_protocol import ApiProtocol
18
+
19
+ _protocol_check: ClassVar[ApiProtocol] = cast("WalletNodeAPI", None)
20
+
15
21
  log: logging.Logger
16
22
  wallet_node: WalletNode
23
+ metadata: ClassVar[ApiMetadata] = ApiMetadata()
17
24
 
18
25
  def __init__(self, wallet_node) -> None:
19
26
  self.log = logging.getLogger(__name__)
@@ -22,7 +29,7 @@ class WalletNodeAPI:
22
29
  def ready(self) -> bool:
23
30
  return self.wallet_node.logged_in
24
31
 
25
- @api_request(peer_required=True)
32
+ @metadata.request(peer_required=True)
26
33
  async def respond_removals(self, response: wallet_protocol.RespondRemovals, peer: WSChiaConnection):
27
34
  pass
28
35
 
@@ -32,14 +39,14 @@ class WalletNodeAPI:
32
39
  """
33
40
  pass
34
41
 
35
- @api_request()
42
+ @metadata.request()
36
43
  async def reject_additions_request(self, response: wallet_protocol.RejectAdditionsRequest):
37
44
  """
38
45
  The full node has rejected our request for additions.
39
46
  """
40
47
  pass
41
48
 
42
- @api_request(peer_required=True, execute_task=True)
49
+ @metadata.request(peer_required=True, execute_task=True)
43
50
  async def new_peak_wallet(self, peak: wallet_protocol.NewPeakWallet, peer: WSChiaConnection):
44
51
  """
45
52
  The full node sent as a new peak
@@ -69,26 +76,26 @@ class WalletNodeAPI:
69
76
 
70
77
  await self.wallet_node.new_peak_queue.new_peak_wallet(peak, peer)
71
78
 
72
- @api_request()
79
+ @metadata.request()
73
80
  async def reject_header_request(self, response: wallet_protocol.RejectHeaderRequest):
74
81
  """
75
82
  The full node has rejected our request for a header.
76
83
  """
77
84
  pass
78
85
 
79
- @api_request()
86
+ @metadata.request()
80
87
  async def respond_block_header(self, response: wallet_protocol.RespondBlockHeader):
81
88
  pass
82
89
 
83
- @api_request(peer_required=True)
90
+ @metadata.request(peer_required=True)
84
91
  async def respond_additions(self, response: wallet_protocol.RespondAdditions, peer: WSChiaConnection):
85
92
  pass
86
93
 
87
- @api_request()
94
+ @metadata.request()
88
95
  async def respond_proof_of_weight(self, response: full_node_protocol.RespondProofOfWeight):
89
96
  pass
90
97
 
91
- @api_request(peer_required=True)
98
+ @metadata.request(peer_required=True)
92
99
  async def transaction_ack(self, ack: wallet_protocol.TransactionAck, peer: WSChiaConnection):
93
100
  """
94
101
  This is an ack for our previous SendTransaction call. This removes the transaction from
@@ -128,7 +135,7 @@ class WalletNodeAPI:
128
135
  else:
129
136
  await wallet_state_manager.remove_from_queue(ack.txid, name, status, None)
130
137
 
131
- @api_request(peer_required=True)
138
+ @metadata.request(peer_required=True)
132
139
  async def respond_peers_introducer(
133
140
  self, request: introducer_protocol.RespondPeersIntroducer, peer: WSChiaConnection
134
141
  ):
@@ -138,7 +145,7 @@ class WalletNodeAPI:
138
145
  if peer is not None and peer.connection_type is NodeType.INTRODUCER:
139
146
  await peer.close()
140
147
 
141
- @api_request(peer_required=True)
148
+ @metadata.request(peer_required=True)
142
149
  async def respond_peers(self, request: full_node_protocol.RespondPeers, peer: WSChiaConnection):
143
150
  if self.wallet_node.wallet_peers is None:
144
151
  return None
@@ -148,54 +155,53 @@ class WalletNodeAPI:
148
155
 
149
156
  return None
150
157
 
151
- @api_request()
158
+ @metadata.request()
152
159
  async def respond_puzzle_solution(self, request: wallet_protocol.RespondPuzzleSolution):
153
160
  self.log.error("Unexpected message `respond_puzzle_solution`. Peer might be slow to respond")
154
- return None
155
161
 
156
- @api_request()
162
+ @metadata.request()
157
163
  async def reject_puzzle_solution(self, request: wallet_protocol.RejectPuzzleSolution):
158
164
  self.log.warning(f"Reject puzzle solution: {request}")
159
165
 
160
- @api_request()
166
+ @metadata.request()
161
167
  async def respond_header_blocks(self, request: wallet_protocol.RespondHeaderBlocks):
162
168
  pass
163
169
 
164
- @api_request()
170
+ @metadata.request()
165
171
  async def respond_block_headers(self, request: wallet_protocol.RespondBlockHeaders):
166
172
  pass
167
173
 
168
- @api_request()
174
+ @metadata.request()
169
175
  async def reject_header_blocks(self, request: wallet_protocol.RejectHeaderBlocks):
170
176
  self.log.warning(f"Reject header blocks: {request}")
171
177
 
172
- @api_request()
178
+ @metadata.request()
173
179
  async def reject_block_headers(self, request: wallet_protocol.RejectBlockHeaders):
174
180
  pass
175
181
 
176
- @api_request(peer_required=True, execute_task=True)
182
+ @metadata.request(peer_required=True, execute_task=True)
177
183
  async def coin_state_update(self, request: wallet_protocol.CoinStateUpdate, peer: WSChiaConnection):
178
184
  await self.wallet_node.new_peak_queue.full_node_state_updated(request, peer)
179
185
 
180
186
  # TODO: Review this hinting issue around this rust type not being a Streamable
181
187
  # subclass, as you might expect it wouldn't be. Maybe we can get the
182
- # protocol working right back at the api_request definition.
183
- @api_request() # type: ignore[type-var]
184
- async def respond_to_ph_update(self, request: wallet_protocol.RespondToPhUpdates):
188
+ # protocol working right back at the api.request definition.
189
+ @metadata.request() # type: ignore[type-var]
190
+ async def respond_to_ph_updates(self, request: wallet_protocol.RespondToPhUpdates):
185
191
  pass
186
192
 
187
- @api_request()
188
- async def respond_to_coin_update(self, request: wallet_protocol.RespondToCoinUpdates):
193
+ @metadata.request()
194
+ async def respond_to_coin_updates(self, request: wallet_protocol.RespondToCoinUpdates):
189
195
  pass
190
196
 
191
- @api_request()
197
+ @metadata.request()
192
198
  async def respond_children(self, request: wallet_protocol.RespondChildren):
193
199
  pass
194
200
 
195
- @api_request()
201
+ @metadata.request()
196
202
  async def respond_ses_hashes(self, request: wallet_protocol.RespondSESInfo):
197
203
  pass
198
204
 
199
- @api_request()
205
+ @metadata.request()
200
206
  async def respond_blocks(self, request: full_node_protocol.RespondBlocks) -> None:
201
207
  pass
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import List, Tuple
5
4
 
6
5
  from chia.types.coin_spend import CoinSpend
7
6
  from chia.util.db_wrapper import DBWrapper2
@@ -89,7 +88,7 @@ class WalletPoolStore:
89
88
  )
90
89
  await cursor.close()
91
90
 
92
- async def get_spends_for_wallet(self, wallet_id: int) -> List[Tuple[uint32, CoinSpend]]:
91
+ async def get_spends_for_wallet(self, wallet_id: int) -> list[tuple[uint32, CoinSpend]]:
93
92
  """
94
93
  Retrieves all entries for a wallet ID.
95
94
  """
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import TYPE_CHECKING, List, Optional, Set, Tuple, TypeVar
3
+ from typing import TYPE_CHECKING, Optional, TypeVar
4
4
 
5
5
  from chia_rs import G1Element
6
6
  from typing_extensions import NotRequired, Protocol, TypedDict
@@ -20,32 +20,34 @@ from chia.wallet.wallet_spend_bundle import WalletSpendBundle
20
20
  if TYPE_CHECKING:
21
21
  from chia.wallet.wallet_state_manager import WalletStateManager
22
22
 
23
- T = TypeVar("T", contravariant=True)
23
+ T_contra = TypeVar("T_contra", contravariant=True)
24
24
 
25
25
 
26
- class WalletProtocol(Protocol[T]):
26
+ class WalletProtocol(Protocol[T_contra]):
27
27
  @classmethod
28
28
  def type(cls) -> WalletType: ...
29
29
 
30
30
  def id(self) -> uint32: ...
31
31
 
32
- async def coin_added(self, coin: Coin, height: uint32, peer: WSChiaConnection, coin_data: Optional[T]) -> None: ...
32
+ async def coin_added(
33
+ self, coin: Coin, height: uint32, peer: WSChiaConnection, coin_data: Optional[T_contra]
34
+ ) -> None: ...
33
35
 
34
36
  async def select_coins(
35
37
  self,
36
38
  amount: uint64,
37
39
  action_scope: WalletActionScope,
38
- ) -> Set[Coin]: ...
40
+ ) -> set[Coin]: ...
39
41
 
40
- async def get_confirmed_balance(self, record_list: Optional[Set[WalletCoinRecord]] = None) -> uint128: ...
42
+ async def get_confirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128: ...
41
43
 
42
- async def get_unconfirmed_balance(self, unspent_records: Optional[Set[WalletCoinRecord]] = None) -> uint128: ...
44
+ async def get_unconfirmed_balance(self, unspent_records: Optional[set[WalletCoinRecord]] = None) -> uint128: ...
43
45
 
44
- async def get_spendable_balance(self, unspent_records: Optional[Set[WalletCoinRecord]] = None) -> uint128: ...
46
+ async def get_spendable_balance(self, unspent_records: Optional[set[WalletCoinRecord]] = None) -> uint128: ...
45
47
 
46
48
  async def get_pending_change_balance(self) -> uint64: ...
47
49
 
48
- async def get_max_send_amount(self, records: Optional[Set[WalletCoinRecord]] = None) -> uint128: ...
50
+ async def get_max_send_amount(self, records: Optional[set[WalletCoinRecord]] = None) -> uint128: ...
49
51
 
50
52
  # not all wallet supports this. To signal support, make
51
53
  # require_derivation_paths() return true
@@ -58,9 +60,7 @@ class WalletProtocol(Protocol[T]):
58
60
  async def match_hinted_coin(self, coin: Coin, hint: bytes32) -> bool: ...
59
61
 
60
62
  wallet_info: WalletInfo
61
- # WalletStateManager is only imported for type hinting thus leaving pylint
62
- # unable to process this
63
- wallet_state_manager: WalletStateManager # pylint: disable=used-before-assignment
63
+ wallet_state_manager: WalletStateManager
64
64
 
65
65
 
66
66
  class GSTOptionalArgs(TypedDict):
@@ -71,14 +71,14 @@ class GSTOptionalArgs(TypedDict):
71
71
  add_pending_singleton: NotRequired[bool]
72
72
  announce_new_state: NotRequired[bool]
73
73
  # CATWallet
74
- cat_discrepancy: NotRequired[Optional[Tuple[int, Program, Program]]]
74
+ cat_discrepancy: NotRequired[Optional[tuple[int, Program, Program]]]
75
75
  # NFTWallet
76
76
  nft_coin: NotRequired[Optional[NFTCoinInfo]]
77
77
  new_owner: NotRequired[Optional[bytes]]
78
78
  new_did_inner_hash: NotRequired[Optional[bytes]]
79
79
  trade_prices_list: NotRequired[Optional[Program]]
80
- additional_bundles: NotRequired[List[WalletSpendBundle]]
81
- metadata_update: NotRequired[Optional[Tuple[str, str]]]
80
+ additional_bundles: NotRequired[list[WalletSpendBundle]]
81
+ metadata_update: NotRequired[Optional[tuple[str, str]]]
82
82
  # CR-CAT Wallet
83
83
  add_authorizations_to_cr_cats: NotRequired[bool]
84
84
  # VCWallet
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import asyncio
4
4
  import logging
5
- from typing import Dict, List, Optional, Set
5
+ from typing import Optional
6
6
 
7
7
  from chia_rs import G1Element
8
8
 
@@ -27,7 +27,7 @@ class WalletPuzzleStore:
27
27
  db_wrapper: DBWrapper2
28
28
  wallet_identifier_cache: LRUCache
29
29
  # maps wallet_id -> last_derivation_index
30
- last_wallet_derivation_index: Dict[uint32, uint32]
30
+ last_wallet_derivation_index: dict[uint32, uint32]
31
31
  last_derivation_index: Optional[uint32]
32
32
 
33
33
  @classmethod
@@ -68,7 +68,7 @@ class WalletPuzzleStore:
68
68
  self.last_wallet_derivation_index = {}
69
69
  return self
70
70
 
71
- async def add_derivation_paths(self, records: List[DerivationRecord]) -> None:
71
+ async def add_derivation_paths(self, records: list[DerivationRecord]) -> None:
72
72
  """
73
73
  Insert many derivation paths into the database.
74
74
  """
@@ -267,7 +267,7 @@ class WalletPuzzleStore:
267
267
 
268
268
  return None
269
269
 
270
- async def get_all_puzzle_hashes(self, wallet_id: Optional[int] = None) -> Set[bytes32]:
270
+ async def get_all_puzzle_hashes(self, wallet_id: Optional[int] = None) -> set[bytes32]:
271
271
  """
272
272
  Return a set containing all puzzle_hashes we generated.
273
273
  """
@@ -343,6 +343,22 @@ class WalletPuzzleStore:
343
343
 
344
344
  return None
345
345
 
346
+ async def get_unused_derivation_path_for_wallet(self, wallet_id: uint32) -> Optional[uint32]:
347
+ """
348
+ Returns the first unused derivation path by derivation_index.
349
+ """
350
+ async with self.db_wrapper.reader_no_transaction() as conn:
351
+ row = await execute_fetchone(
352
+ conn,
353
+ "SELECT MIN(derivation_index) FROM derivation_paths WHERE wallet_id=? AND used=0 AND hardened=0;",
354
+ (wallet_id,),
355
+ )
356
+
357
+ if row is not None and row[0] is not None:
358
+ return uint32(row[0])
359
+
360
+ return None
361
+
346
362
  async def delete_wallet(self, wallet_id: uint32) -> None:
347
363
  async with self.db_wrapper.writer_maybe_transaction() as conn:
348
364
  # First fetch all puzzle hashes since we need them to drop them from the cache
@@ -363,3 +379,18 @@ class WalletPuzzleStore:
363
379
  except KeyError:
364
380
  pass
365
381
  self.last_derivation_index = None
382
+
383
+ async def get_unused_count(self, wallet_id: uint32) -> int:
384
+ """
385
+ Returns a count of unused derivation indexes
386
+ """
387
+
388
+ async with self.db_wrapper.reader_no_transaction() as conn:
389
+ row = await execute_fetchone(
390
+ conn,
391
+ "SELECT COUNT(*) FROM derivation_paths WHERE wallet_id=? AND used=1",
392
+ (wallet_id,),
393
+ )
394
+ row_count = 0 if row is None else row[0]
395
+
396
+ return row_count
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import List, Optional, Tuple
3
+ from typing import Optional
4
4
 
5
5
  from chia_rs import CoinState
6
6
 
@@ -30,7 +30,7 @@ class WalletRetryStore:
30
30
 
31
31
  return self
32
32
 
33
- async def get_all_states_to_retry(self) -> List[Tuple[CoinState, bytes32, uint32]]:
33
+ async def get_all_states_to_retry(self) -> list[tuple[CoinState, bytes32, uint32]]:
34
34
  """
35
35
  Return all states that were failed to sync
36
36
  """
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import json
4
4
  import logging
5
5
  from sqlite3 import Row
6
- from typing import List, Optional, Type, TypeVar, Union
6
+ from typing import Optional, TypeVar, Union
7
7
 
8
8
  from clvm.casts import int_from_bytes
9
9
 
@@ -28,7 +28,7 @@ class WalletSingletonStore:
28
28
  db_wrapper: DBWrapper2
29
29
 
30
30
  @classmethod
31
- async def create(cls: Type[_T_WalletSingletonStore], wrapper: DBWrapper2) -> _T_WalletSingletonStore:
31
+ async def create(cls: type[_T_WalletSingletonStore], wrapper: DBWrapper2) -> _T_WalletSingletonStore:
32
32
  self = cls()
33
33
  self.db_wrapper = wrapper
34
34
 
@@ -102,7 +102,9 @@ class WalletSingletonStore:
102
102
  coin_state.puzzle_reveal, coin_state.solution, DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM
103
103
  )
104
104
 
105
- cc_cond = [cond for cond in conditions[ConditionOpcode.CREATE_COIN] if int_from_bytes(cond.vars[1]) % 2 == 1][0]
105
+ cc_cond = next(
106
+ cond for cond in conditions[ConditionOpcode.CREATE_COIN] if int_from_bytes(cond.vars[1]) % 2 == 1
107
+ )
106
108
 
107
109
  coin = Coin(coin_state.coin.name(), cc_cond.vars[0], uint64(int_from_bytes(cc_cond.vars[1])))
108
110
  inner_puz = get_inner_puzzle_from_singleton(coin_state.puzzle_reveal)
@@ -125,7 +127,6 @@ class WalletSingletonStore:
125
127
  current_records = await self.get_records_by_coin_id(coin_state.coin.name())
126
128
  if len(current_records) > 0:
127
129
  await self.delete_singleton_by_coin_id(coin_state.coin.name(), block_height)
128
- return
129
130
 
130
131
  def _to_singleton_record(self, row: Row) -> SingletonRecord:
131
132
  return SingletonRecord(
@@ -183,7 +184,7 @@ class WalletSingletonStore:
183
184
  )
184
185
  return c.rowcount > 0
185
186
 
186
- async def get_records_by_wallet_id(self, wallet_id: int) -> List[SingletonRecord]:
187
+ async def get_records_by_wallet_id(self, wallet_id: int) -> list[SingletonRecord]:
187
188
  """
188
189
  Retrieves all entries for a wallet ID.
189
190
  """
@@ -195,7 +196,7 @@ class WalletSingletonStore:
195
196
  )
196
197
  return [self._to_singleton_record(row) for row in rows]
197
198
 
198
- async def get_records_by_coin_id(self, coin_id: bytes32) -> List[SingletonRecord]:
199
+ async def get_records_by_coin_id(self, coin_id: bytes32) -> list[SingletonRecord]:
199
200
  """
200
201
  Retrieves all entries for a coin ID.
201
202
  """
@@ -207,7 +208,7 @@ class WalletSingletonStore:
207
208
  )
208
209
  return [self._to_singleton_record(row) for row in rows]
209
210
 
210
- async def get_records_by_singleton_id(self, singleton_id: bytes32) -> List[SingletonRecord]:
211
+ async def get_records_by_singleton_id(self, singleton_id: bytes32) -> list[SingletonRecord]:
211
212
  """
212
213
  Retrieves all entries for a singleton ID.
213
214
  """
@@ -234,7 +235,7 @@ class WalletSingletonStore:
234
235
 
235
236
  async def count(self, wallet_id: Optional[uint32] = None) -> int:
236
237
  sql = "SELECT COUNT(singleton_id) FROM singletons WHERE removed_height=0"
237
- params: List[uint32] = []
238
+ params: list[uint32] = []
238
239
  if wallet_id is not None:
239
240
  sql += " AND wallet_id=?"
240
241
  params.append(wallet_id)
@@ -246,7 +247,7 @@ class WalletSingletonStore:
246
247
 
247
248
  async def is_empty(self, wallet_id: Optional[uint32] = None) -> bool:
248
249
  sql = "SELECT 1 FROM singletons WHERE removed_height=0"
249
- params: List[Union[uint32, bytes32]] = []
250
+ params: list[Union[uint32, bytes32]] = []
250
251
  if wallet_id is not None:
251
252
  sql += " AND wallet_id=?"
252
253
  params.append(wallet_id)
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Dict, List, Tuple
3
+ from collections.abc import Sequence
4
4
 
5
5
  from chia_rs import AugSchemeMPL, G2Element
6
6
 
@@ -11,26 +11,10 @@ from chia.wallet.util.debug_spend_bundle import debug_spend_bundle
11
11
 
12
12
 
13
13
  class WalletSpendBundle(SpendBundle):
14
-
15
- @classmethod
16
- def from_bytes(cls, bytes: bytes) -> WalletSpendBundle:
17
- sb = SpendBundle.from_bytes(bytes)
18
- return cls(sb.coin_spends, sb.aggregated_signature)
19
-
20
- @classmethod
21
- def parse_rust(cls, blob: bytes, flag: bool = False) -> Tuple[WalletSpendBundle, int]:
22
- bundle, advance = super(WalletSpendBundle, WalletSpendBundle).parse_rust(blob)
23
- return cls(bundle.coin_spends, bundle.aggregated_signature), advance
24
-
25
- @classmethod
26
- def from_json_dict(cls, json_dict: Dict[str, Any]) -> WalletSpendBundle:
27
- sb = SpendBundle.from_json_dict(json_dict)
28
- return cls(sb.coin_spends, sb.aggregated_signature)
29
-
30
14
  @classmethod
31
- def aggregate(cls, spend_bundles: List[T_SpendBundle]) -> WalletSpendBundle:
32
- coin_spends: List[CoinSpend] = []
33
- sigs: List[G2Element] = []
15
+ def aggregate(cls, spend_bundles: Sequence[T_SpendBundle]) -> WalletSpendBundle:
16
+ coin_spends: list[CoinSpend] = []
17
+ sigs: list[G2Element] = []
34
18
  for bundle in spend_bundles:
35
19
  coin_spends += bundle.coin_spends
36
20
  sigs.append(bundle.aggregated_signature)