chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
@@ -1,10 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import sys
4
+ from collections.abc import AsyncIterator, Iterable
4
5
  from contextlib import asynccontextmanager
5
6
  from dataclasses import dataclass, field
6
7
  from pathlib import Path
7
- from typing import Any, AsyncIterator, Dict, Iterable, List, Optional, Tuple, Type, Union, cast
8
+ from typing import Any, Optional, Union, cast
8
9
 
9
10
  from chia_rs import Coin, G2Element
10
11
 
@@ -19,7 +20,7 @@ from chia.rpc.data_layer_rpc_client import DataLayerRpcClient
19
20
  from chia.rpc.farmer_rpc_client import FarmerRpcClient
20
21
  from chia.rpc.full_node_rpc_client import FullNodeRpcClient
21
22
  from chia.rpc.rpc_client import RpcClient
22
- from chia.rpc.wallet_request_types import SendTransactionMultiResponse
23
+ from chia.rpc.wallet_request_types import GetSyncStatusResponse, SendTransactionMultiResponse
23
24
  from chia.rpc.wallet_rpc_client import WalletRpcClient
24
25
  from chia.simulator.simulator_full_node_rpc_client import SimulatorFullNodeRpcClient
25
26
  from chia.types.blockchain_format.sized_bytes import bytes32
@@ -40,25 +41,25 @@ from chia.wallet.wallet_spend_bundle import WalletSpendBundle
40
41
  # Any functions that are the same for every command being tested should be below.
41
42
  # Functions that are specific to a command should be in the test file for that command.
42
43
 
43
- logType = Dict[str, Optional[List[Tuple[Any, ...]]]]
44
+ logType = dict[str, Optional[list[tuple[Any, ...]]]]
44
45
 
45
46
 
46
47
  @dataclass
47
48
  class TestRpcClient:
48
- client_type: Type[RpcClient]
49
+ client_type: type[RpcClient]
49
50
  rpc_port: Optional[uint16] = None
50
51
  root_path: Optional[Path] = None
51
- config: Optional[Dict[str, Any]] = None
52
+ config: Optional[dict[str, Any]] = None
52
53
  create_called: bool = field(init=False, default=False)
53
- rpc_log: Dict[str, List[Tuple[Any, ...]]] = field(init=False, default_factory=dict)
54
+ rpc_log: dict[str, list[tuple[Any, ...]]] = field(init=False, default_factory=dict)
54
55
 
55
- async def create(self, _: str, rpc_port: uint16, root_path: Path, config: Dict[str, Any]) -> None:
56
+ async def create(self, _: str, rpc_port: uint16, root_path: Path, config: dict[str, Any]) -> None:
56
57
  self.rpc_port = rpc_port
57
58
  self.root_path = root_path
58
59
  self.config = config
59
60
  self.create_called = True
60
61
 
61
- def add_to_log(self, method_name: str, args: Tuple[Any, ...]) -> None:
62
+ def add_to_log(self, method_name: str, args: tuple[Any, ...]) -> None:
62
63
  if method_name not in self.rpc_log:
63
64
  self.rpc_log[method_name] = []
64
65
  self.rpc_log[method_name].append(args)
@@ -73,24 +74,20 @@ class TestRpcClient:
73
74
 
74
75
  @dataclass
75
76
  class TestFarmerRpcClient(TestRpcClient):
76
- client_type: Type[FarmerRpcClient] = field(init=False, default=FarmerRpcClient)
77
+ client_type: type[FarmerRpcClient] = field(init=False, default=FarmerRpcClient)
77
78
 
78
79
 
79
80
  @dataclass
80
81
  class TestWalletRpcClient(TestRpcClient):
81
- client_type: Type[WalletRpcClient] = field(init=False, default=WalletRpcClient)
82
+ client_type: type[WalletRpcClient] = field(init=False, default=WalletRpcClient)
82
83
  fingerprint: int = field(init=False, default=0)
83
84
  wallet_index: int = field(init=False, default=0)
84
85
 
85
- async def get_sync_status(self) -> bool:
86
+ async def get_sync_status(self) -> GetSyncStatusResponse:
86
87
  self.add_to_log("get_sync_status", ())
87
- return False
88
+ return GetSyncStatusResponse(synced=True, syncing=False)
88
89
 
89
- async def get_synced(self) -> bool:
90
- self.add_to_log("get_synced", ())
91
- return True
92
-
93
- async def get_wallets(self, wallet_type: Optional[WalletType] = None) -> List[Dict[str, Union[str, int]]]:
90
+ async def get_wallets(self, wallet_type: Optional[WalletType] = None) -> list[dict[str, Union[str, int]]]:
94
91
  self.add_to_log("get_wallets", (wallet_type,))
95
92
  # we cant start with zero because ints cant have a leading zero
96
93
  if wallet_type is not None:
@@ -135,21 +132,21 @@ class TestWalletRpcClient(TestRpcClient):
135
132
  self.add_to_log("get_cat_name", (wallet_id,))
136
133
  return "test" + str(wallet_id)
137
134
 
138
- async def sign_message_by_address(self, address: str, message: str) -> Tuple[str, str, str]:
135
+ async def sign_message_by_address(self, address: str, message: str) -> tuple[str, str, str]:
139
136
  self.add_to_log("sign_message_by_address", (address, message))
140
137
  pubkey = bytes([3] * 48).hex()
141
138
  signature = bytes([6] * 576).hex()
142
139
  signing_mode = SigningMode.CHIP_0002.value
143
140
  return pubkey, signature, signing_mode
144
141
 
145
- async def sign_message_by_id(self, id: str, message: str) -> Tuple[str, str, str]:
142
+ async def sign_message_by_id(self, id: str, message: str) -> tuple[str, str, str]:
146
143
  self.add_to_log("sign_message_by_id", (id, message))
147
144
  pubkey = bytes([4] * 48).hex()
148
145
  signature = bytes([7] * 576).hex()
149
146
  signing_mode = SigningMode.CHIP_0002.value
150
147
  return pubkey, signature, signing_mode
151
148
 
152
- async def cat_asset_id_to_name(self, asset_id: bytes32) -> Optional[Tuple[Optional[uint32], str]]:
149
+ async def cat_asset_id_to_name(self, asset_id: bytes32) -> Optional[tuple[Optional[uint32], str]]:
153
150
  """
154
151
  if bytes32([1] * 32), return (uint32(2), "test1"), if bytes32([1] * 32), return (uint32(3), "test2")
155
152
  """
@@ -161,7 +158,7 @@ class TestWalletRpcClient(TestRpcClient):
161
158
  else:
162
159
  return None
163
160
 
164
- async def get_nft_info(self, coin_id: str, latest: bool = True) -> Dict[str, Any]:
161
+ async def get_nft_info(self, coin_id: str, latest: bool = True) -> dict[str, Any]:
165
162
  self.add_to_log("get_nft_info", (coin_id, latest))
166
163
  coin_id_bytes = bytes32.fromhex(coin_id)
167
164
  nft_info = NFTInfo(
@@ -190,9 +187,9 @@ class TestWalletRpcClient(TestRpcClient):
190
187
 
191
188
  async def nft_calculate_royalties(
192
189
  self,
193
- royalty_assets_dict: Dict[Any, Tuple[Any, uint16]],
194
- fungible_asset_dict: Dict[Any, uint64],
195
- ) -> Dict[Any, List[Dict[str, Any]]]:
190
+ royalty_assets_dict: dict[Any, tuple[Any, uint16]],
191
+ fungible_asset_dict: dict[Any, uint64],
192
+ ) -> dict[Any, list[dict[str, Any]]]:
196
193
  self.add_to_log("nft_calculate_royalties", (royalty_assets_dict, fungible_asset_dict))
197
194
  return NFTWallet.royalty_calculation(
198
195
  royalty_assets_dict=royalty_assets_dict,
@@ -203,7 +200,7 @@ class TestWalletRpcClient(TestRpcClient):
203
200
  self,
204
201
  wallet_id: int,
205
202
  coin_selection_config: CoinSelectionConfig,
206
- ) -> Tuple[List[CoinRecord], List[CoinRecord], List[Coin]]:
203
+ ) -> tuple[list[CoinRecord], list[CoinRecord], list[Coin]]:
207
204
  """
208
205
  We return a tuple containing: (confirmed records, unconfirmed removals, unconfirmed additions)
209
206
  """
@@ -250,9 +247,9 @@ class TestWalletRpcClient(TestRpcClient):
250
247
  async def send_transaction_multi(
251
248
  self,
252
249
  wallet_id: int,
253
- additions: List[Dict[str, object]],
250
+ additions: list[dict[str, object]],
254
251
  tx_config: TXConfig,
255
- coins: Optional[List[Coin]] = None,
252
+ coins: Optional[list[Coin]] = None,
256
253
  fee: uint64 = uint64(0),
257
254
  push: bool = True,
258
255
  timelock_info: ConditionValidTimes = ConditionValidTimes(),
@@ -287,17 +284,17 @@ class TestWalletRpcClient(TestRpcClient):
287
284
 
288
285
  @dataclass
289
286
  class TestFullNodeRpcClient(TestRpcClient):
290
- client_type: Type[FullNodeRpcClient] = field(init=False, default=FullNodeRpcClient)
287
+ client_type: type[FullNodeRpcClient] = field(init=False, default=FullNodeRpcClient)
291
288
 
292
289
  async def get_fee_estimate(
293
290
  self,
294
- target_times: Optional[List[int]],
291
+ target_times: Optional[list[int]],
295
292
  cost: Optional[int],
296
- ) -> Dict[str, Any]:
293
+ ) -> dict[str, Any]:
297
294
  return {}
298
295
 
299
- async def get_blockchain_state(self) -> Dict[str, Any]:
300
- response: Dict[str, Any] = {
296
+ async def get_blockchain_state(self) -> dict[str, Any]:
297
+ response: dict[str, Any] = {
301
298
  "peak": cast(BlockRecord, create_test_block_record()),
302
299
  "genesis_challenge_initialized": True,
303
300
  "sync": {
@@ -335,12 +332,12 @@ class TestFullNodeRpcClient(TestRpcClient):
335
332
 
336
333
  @dataclass
337
334
  class TestDataLayerRpcClient(TestRpcClient):
338
- client_type: Type[DataLayerRpcClient] = field(init=False, default=DataLayerRpcClient)
335
+ client_type: type[DataLayerRpcClient] = field(init=False, default=DataLayerRpcClient)
339
336
 
340
337
 
341
338
  @dataclass
342
339
  class TestSimulatorFullNodeRpcClient(TestRpcClient):
343
- client_type: Type[SimulatorFullNodeRpcClient] = field(init=False, default=SimulatorFullNodeRpcClient)
340
+ client_type: type[SimulatorFullNodeRpcClient] = field(init=False, default=SimulatorFullNodeRpcClient)
344
341
 
345
342
 
346
343
  @dataclass
@@ -358,7 +355,7 @@ class TestRpcClients:
358
355
  default_factory=TestSimulatorFullNodeRpcClient
359
356
  )
360
357
 
361
- def get_client(self, client_type: Type[_T_RpcClient]) -> _T_RpcClient:
358
+ def get_client(self, client_type: type[_T_RpcClient]) -> _T_RpcClient:
362
359
  if client_type == FarmerRpcClient:
363
360
  return cast(FarmerRpcClient, self.farmer_rpc_client) # type: ignore[return-value]
364
361
  elif client_type == WalletRpcClient:
@@ -383,12 +380,12 @@ def create_service_and_wallet_client_generators(test_rpc_clients: TestRpcClients
383
380
 
384
381
  @asynccontextmanager
385
382
  async def test_get_any_service_client(
386
- client_type: Type[_T_RpcClient],
383
+ client_type: type[_T_RpcClient],
384
+ root_path: Path,
387
385
  rpc_port: Optional[int] = None,
388
- root_path: Optional[Path] = None,
389
386
  consume_errors: bool = True,
390
387
  use_ssl: bool = True,
391
- ) -> AsyncIterator[Tuple[_T_RpcClient, Dict[str, Any]]]:
388
+ ) -> AsyncIterator[tuple[_T_RpcClient, dict[str, Any]]]:
392
389
  if root_path is None:
393
390
  root_path = default_root
394
391
 
@@ -412,11 +409,11 @@ def create_service_and_wallet_client_generators(test_rpc_clients: TestRpcClients
412
409
 
413
410
  @asynccontextmanager
414
411
  async def test_get_wallet_client(
412
+ root_path: Path = default_root,
415
413
  wallet_rpc_port: Optional[int] = None,
416
414
  fingerprint: Optional[int] = None,
417
- root_path: Path = default_root,
418
- ) -> AsyncIterator[Tuple[WalletRpcClient, int, Dict[str, Any]]]:
419
- async with test_get_any_service_client(WalletRpcClient, wallet_rpc_port, root_path) as (wallet_client, config):
415
+ ) -> AsyncIterator[tuple[WalletRpcClient, int, dict[str, Any]]]:
416
+ async with test_get_any_service_client(WalletRpcClient, root_path, wallet_rpc_port) as (wallet_client, config):
420
417
  wallet_client.fingerprint = fingerprint # type: ignore
421
418
  assert fingerprint is not None
422
419
  yield wallet_client, fingerprint, config
@@ -434,7 +431,7 @@ def create_service_and_wallet_client_generators(test_rpc_clients: TestRpcClients
434
431
  chia.cmds.wallet_funcs.cli_confirm = cli_confirm # type: ignore[attr-defined]
435
432
 
436
433
 
437
- def run_cli_command(capsys: object, chia_root: Path, command_list: List[str]) -> str:
434
+ def run_cli_command(capsys: object, chia_root: Path, command_list: list[str]) -> str:
438
435
  """
439
436
  This is just an easy way to run the chia CLI with the given command list.
440
437
  """
@@ -442,8 +439,8 @@ def run_cli_command(capsys: object, chia_root: Path, command_list: List[str]) ->
442
439
  exited_cleanly = True
443
440
  argv_temp = sys.argv
444
441
  try:
445
- sys.argv = ["chia", "--root-path", str(chia_root)] + command_list
446
- chia_cli() # pylint: disable=no-value-for-parameter
442
+ sys.argv = ["chia", "--root-path", str(chia_root), *command_list]
443
+ chia_cli()
447
444
  except SystemExit as e:
448
445
  if e.code != 0:
449
446
  exited_cleanly = False
@@ -463,7 +460,7 @@ def cli_assert_shortcut(output: str, strings_to_assert: Iterable[str]) -> None:
463
460
 
464
461
 
465
462
  def run_cli_command_and_assert(
466
- capsys: object, chia_root: Path, command_list: List[str], strings_to_assert: Iterable[str]
463
+ capsys: object, chia_root: Path, command_list: list[str], strings_to_assert: Iterable[str]
467
464
  ) -> None:
468
465
  """
469
466
  Runs the command and asserts that all the strings in strings_to_assert are in the output
@@ -1,8 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import tempfile
4
+ from collections.abc import Iterator
4
5
  from pathlib import Path
5
- from typing import Iterator, Tuple
6
6
 
7
7
  import pytest
8
8
 
@@ -11,7 +11,7 @@ from chia.util.config import create_default_chia_config
11
11
 
12
12
 
13
13
  @pytest.fixture(scope="module") # every file has its own config generated, just to be safe
14
- def get_test_cli_clients() -> Iterator[Tuple[TestRpcClients, Path]]:
14
+ def get_test_cli_clients() -> Iterator[tuple[TestRpcClients, Path]]:
15
15
  # we cant use the normal config fixture because it only supports function scope.
16
16
  with tempfile.TemporaryDirectory() as tmp_path:
17
17
  root_path: Path = Path(tmp_path) / "chia_root"
@@ -2,11 +2,12 @@ from __future__ import annotations
2
2
 
3
3
  from decimal import Decimal
4
4
  from pathlib import Path
5
- from typing import Any, cast
6
5
 
6
+ import click
7
7
  import pytest
8
- from click import BadParameter, Context
8
+ from click import BadParameter
9
9
 
10
+ from chia.cmds.cmd_classes import ChiaCliContext
10
11
  from chia.cmds.param_types import (
11
12
  AddressParamType,
12
13
  AmountParamType,
@@ -37,11 +38,9 @@ overflow_decimal_str = "18446744.073709551616"
37
38
  overflow_decimal = Decimal(overflow_decimal_str)
38
39
 
39
40
 
40
- class FakeContext:
41
- obj: dict[Any, Any] = {}
42
-
43
- def __init__(self, obj: dict[Any, Any]):
44
- self.obj = obj
41
+ @click.command()
42
+ def a_command_for_testing() -> None:
43
+ pass # pragma: no cover
45
44
 
46
45
 
47
46
  def test_click_tx_fee_type() -> None:
@@ -67,7 +66,7 @@ def test_click_tx_fee_type() -> None:
67
66
  TransactionFeeParamType().convert(overflow_decimal_str, None, None)
68
67
  # Test Type Failures
69
68
  with pytest.raises(BadParameter):
70
- TransactionFeeParamType().convert(float(0.01), None, None)
69
+ TransactionFeeParamType().convert(0.01, None, None)
71
70
 
72
71
 
73
72
  def test_click_amount_type() -> None:
@@ -115,7 +114,11 @@ def test_click_amount_type() -> None:
115
114
 
116
115
 
117
116
  def test_click_address_type() -> None:
118
- context = cast(Context, FakeContext(obj={"expected_prefix": "xch"})) # this makes us not have to use a config file
117
+ context = click.Context(command=a_command_for_testing)
118
+ chia_context = ChiaCliContext.set_default(context)
119
+ # this makes us not have to use a config file
120
+ chia_context.expected_prefix = "xch"
121
+
119
122
  std_cli_address = CliAddress(burn_ph, burn_address, AddressType.XCH)
120
123
  nft_cli_address = CliAddress(burn_ph, burn_nft_addr, AddressType.DID)
121
124
  # Test CliAddress (Generally is not used)
@@ -133,13 +136,13 @@ def test_click_address_type() -> None:
133
136
  # check error handling
134
137
  with pytest.raises(BadParameter):
135
138
  AddressParamType().convert("test", None, None)
136
- with pytest.raises(AttributeError): # attribute error because the context does not have a real error handler
139
+ with pytest.raises(click.BadParameter):
137
140
  AddressParamType().convert(burn_address_txch, None, context)
138
141
  with pytest.raises(BadParameter):
139
142
  AddressParamType().convert(burn_bad_prefix, None, None)
140
143
  # Test Type Failures
141
144
  with pytest.raises(BadParameter):
142
- AddressParamType().convert(float(0.01), None, None)
145
+ AddressParamType().convert(0.01, None, None)
143
146
 
144
147
  # check class error handling
145
148
  with pytest.raises(ValueError):
@@ -149,13 +152,15 @@ def test_click_address_type() -> None:
149
152
 
150
153
 
151
154
  def test_click_address_type_config(root_path_populated_with_config: Path) -> None:
155
+ context = click.Context(command=a_command_for_testing)
156
+ chia_context = ChiaCliContext.set_default(context)
152
157
  # set a root path in context.
153
- context = cast(Context, FakeContext(obj={"root_path": root_path_populated_with_config}))
158
+ chia_context.root_path = root_path_populated_with_config
154
159
  # run test that should pass
155
160
  assert AddressParamType().convert(burn_address, None, context) == CliAddress(burn_ph, burn_address, AddressType.XCH)
156
- assert context.obj["expected_prefix"] == "xch" # validate that the prefix was set correctly
161
+ assert ChiaCliContext.set_default(context).expected_prefix == "xch" # validate that the prefix was set correctly
157
162
  # use txch address
158
- with pytest.raises(AttributeError): # attribute error because the context does not have a real error handler
163
+ with pytest.raises(click.BadParameter):
159
164
  AddressParamType().convert(burn_address_txch, None, context)
160
165
 
161
166
 
@@ -170,7 +175,7 @@ def test_click_bytes32_type() -> None:
170
175
  Bytes32ParamType().convert("test", None, None)
171
176
  # Test Type Failures
172
177
  with pytest.raises(BadParameter):
173
- Bytes32ParamType().convert(float(0.01), None, None)
178
+ Bytes32ParamType().convert(0.01, None, None)
174
179
 
175
180
 
176
181
  def test_click_uint64_type() -> None:
@@ -192,4 +197,4 @@ def test_click_uint64_type() -> None:
192
197
  Uint64ParamType().convert(str(overflow_ammt), None, None)
193
198
  # Test Type Failures
194
199
  with pytest.raises(BadParameter):
195
- Uint64ParamType().convert(float(0.01), None, None)
200
+ Uint64ParamType().convert(0.01, None, None)