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,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Dict
3
+ from typing import Any
4
4
 
5
5
  import pytest
6
6
 
@@ -8,19 +8,19 @@ from chia.wallet.util.address_type import AddressType, ensure_valid_address, is_
8
8
 
9
9
 
10
10
  @pytest.mark.parametrize("prefix", [None])
11
- def test_xch_hrp_for_default_config(config_with_address_prefix: Dict[str, Any]) -> None:
11
+ def test_xch_hrp_for_default_config(config_with_address_prefix: dict[str, Any]) -> None:
12
12
  config = config_with_address_prefix
13
13
  assert AddressType.XCH.hrp(config) == "xch"
14
14
 
15
15
 
16
16
  @pytest.mark.parametrize("prefix", ["txch"])
17
- def test_txch_hrp_for_testnet(config_with_address_prefix: Dict[str, Any]) -> None:
17
+ def test_txch_hrp_for_testnet(config_with_address_prefix: dict[str, Any]) -> None:
18
18
  config = config_with_address_prefix
19
19
  assert AddressType.XCH.hrp(config) == "txch"
20
20
 
21
21
 
22
22
  @pytest.mark.parametrize("prefix", [None])
23
- def test_is_valid_address_xch(config_with_address_prefix: Dict[str, Any]) -> None:
23
+ def test_is_valid_address_xch(config_with_address_prefix: dict[str, Any]) -> None:
24
24
  config = config_with_address_prefix
25
25
  valid = is_valid_address(
26
26
  "xch1mnr0ygu7lvmk3nfgzmncfk39fwu0dv933yrcv97nd6pmrt7fzmhs8taffd", allowed_types={AddressType.XCH}, config=config
@@ -29,7 +29,7 @@ def test_is_valid_address_xch(config_with_address_prefix: Dict[str, Any]) -> Non
29
29
 
30
30
 
31
31
  @pytest.mark.parametrize("prefix", ["txch"])
32
- def test_is_valid_address_txch(config_with_address_prefix: Dict[str, Any]) -> None:
32
+ def test_is_valid_address_txch(config_with_address_prefix: dict[str, Any]) -> None:
33
33
  config = config_with_address_prefix
34
34
  # TXCH address validation requires a config
35
35
  valid = is_valid_address(
@@ -41,7 +41,7 @@ def test_is_valid_address_txch(config_with_address_prefix: Dict[str, Any]) -> No
41
41
 
42
42
 
43
43
  @pytest.mark.parametrize("prefix", [None])
44
- def test_is_valid_address_xch_bad_address(config_with_address_prefix: Dict[str, Any]) -> None:
44
+ def test_is_valid_address_xch_bad_address(config_with_address_prefix: dict[str, Any]) -> None:
45
45
  config = config_with_address_prefix
46
46
  valid = is_valid_address(
47
47
  "xch1mnr0ygu7lvmk3nfgzmncfk39fwu0dv933yrcv97nd6pmrt7fzmhs8xxxxx", allowed_types={AddressType.XCH}, config=config
@@ -50,7 +50,7 @@ def test_is_valid_address_xch_bad_address(config_with_address_prefix: Dict[str,
50
50
 
51
51
 
52
52
  @pytest.mark.parametrize("prefix", [None])
53
- def test_is_valid_address_nft(config_with_address_prefix: Dict[str, Any]) -> None:
53
+ def test_is_valid_address_nft(config_with_address_prefix: dict[str, Any]) -> None:
54
54
  config = config_with_address_prefix
55
55
  valid = is_valid_address(
56
56
  "nft1mx2nkvml2eekjtqwdmxvmf3js8g083hpszzhkhtwvhcss8efqzhqtza773", allowed_types={AddressType.NFT}, config=config
@@ -59,7 +59,7 @@ def test_is_valid_address_nft(config_with_address_prefix: Dict[str, Any]) -> Non
59
59
 
60
60
 
61
61
  @pytest.mark.parametrize("prefix", ["txch"])
62
- def test_is_valid_address_nft_with_testnet(config_with_address_prefix: Dict[str, Any]) -> None:
62
+ def test_is_valid_address_nft_with_testnet(config_with_address_prefix: dict[str, Any]) -> None:
63
63
  config = config_with_address_prefix
64
64
  valid = is_valid_address(
65
65
  "nft1mx2nkvml2eekjtqwdmxvmf3js8g083hpszzhkhtwvhcss8efqzhqtza773", allowed_types={AddressType.NFT}, config=config
@@ -68,7 +68,7 @@ def test_is_valid_address_nft_with_testnet(config_with_address_prefix: Dict[str,
68
68
 
69
69
 
70
70
  @pytest.mark.parametrize("prefix", [None])
71
- def test_is_valid_address_nft_bad_address(config_with_address_prefix: Dict[str, Any]) -> None:
71
+ def test_is_valid_address_nft_bad_address(config_with_address_prefix: dict[str, Any]) -> None:
72
72
  config = config_with_address_prefix
73
73
  valid = is_valid_address(
74
74
  "nft1mx2nkvml2eekjtqwdmxvmf3js8g083hpszzhkhtwvhcss8efqzhqtxxxxx", allowed_types={AddressType.NFT}, config=config
@@ -77,7 +77,7 @@ def test_is_valid_address_nft_bad_address(config_with_address_prefix: Dict[str,
77
77
 
78
78
 
79
79
  @pytest.mark.parametrize("prefix", [None])
80
- def test_is_valid_address_did(config_with_address_prefix: Dict[str, Any]) -> None:
80
+ def test_is_valid_address_did(config_with_address_prefix: dict[str, Any]) -> None:
81
81
  config = config_with_address_prefix
82
82
  valid = is_valid_address(
83
83
  "did:chia:14jxdtqcyp3gk8ka0678eq8mmtnktgpmp2vuqq3vtsl2e5qr7fyrsr9gsr7",
@@ -88,7 +88,7 @@ def test_is_valid_address_did(config_with_address_prefix: Dict[str, Any]) -> Non
88
88
 
89
89
 
90
90
  @pytest.mark.parametrize("prefix", ["txch"])
91
- def test_is_valid_address_did_with_testnet(config_with_address_prefix: Dict[str, Any]) -> None:
91
+ def test_is_valid_address_did_with_testnet(config_with_address_prefix: dict[str, Any]) -> None:
92
92
  config = config_with_address_prefix
93
93
  valid = is_valid_address(
94
94
  "did:chia:14jxdtqcyp3gk8ka0678eq8mmtnktgpmp2vuqq3vtsl2e5qr7fyrsr9gsr7",
@@ -99,7 +99,7 @@ def test_is_valid_address_did_with_testnet(config_with_address_prefix: Dict[str,
99
99
 
100
100
 
101
101
  @pytest.mark.parametrize("prefix", [None])
102
- def test_is_valid_address_did_bad_address(config_with_address_prefix: Dict[str, Any]) -> None:
102
+ def test_is_valid_address_did_bad_address(config_with_address_prefix: dict[str, Any]) -> None:
103
103
  config = config_with_address_prefix
104
104
  valid = is_valid_address(
105
105
  "did:chia:14jxdtqcyp3gk8ka0678eq8mmtnktgpmp2vuqq3vtsl2e5qr7fyrsrxxxxx",
@@ -110,7 +110,7 @@ def test_is_valid_address_did_bad_address(config_with_address_prefix: Dict[str,
110
110
 
111
111
 
112
112
  @pytest.mark.parametrize("prefix", [None])
113
- def test_ensure_valid_address_xch(config_with_address_prefix: Dict[str, Any]) -> None:
113
+ def test_ensure_valid_address_xch(config_with_address_prefix: dict[str, Any]) -> None:
114
114
  config = config_with_address_prefix
115
115
  address = ensure_valid_address(
116
116
  "xch1mnr0ygu7lvmk3nfgzmncfk39fwu0dv933yrcv97nd6pmrt7fzmhs8taffd", allowed_types={AddressType.XCH}, config=config
@@ -119,7 +119,7 @@ def test_ensure_valid_address_xch(config_with_address_prefix: Dict[str, Any]) ->
119
119
 
120
120
 
121
121
  @pytest.mark.parametrize("prefix", ["txch"])
122
- def test_ensure_valid_address_txch(config_with_address_prefix: Dict[str, Any]) -> None:
122
+ def test_ensure_valid_address_txch(config_with_address_prefix: dict[str, Any]) -> None:
123
123
  config = config_with_address_prefix
124
124
  address = ensure_valid_address(
125
125
  "txch1mnr0ygu7lvmk3nfgzmncfk39fwu0dv933yrcv97nd6pmrt7fzmhs2v6lg7",
@@ -130,7 +130,7 @@ def test_ensure_valid_address_txch(config_with_address_prefix: Dict[str, Any]) -
130
130
 
131
131
 
132
132
  @pytest.mark.parametrize("prefix", [None])
133
- def test_ensure_valid_address_xch_bad_address(config_with_address_prefix: Dict[str, Any]) -> None:
133
+ def test_ensure_valid_address_xch_bad_address(config_with_address_prefix: dict[str, Any]) -> None:
134
134
  config = config_with_address_prefix
135
135
  with pytest.raises(ValueError):
136
136
  ensure_valid_address(
@@ -141,7 +141,7 @@ def test_ensure_valid_address_xch_bad_address(config_with_address_prefix: Dict[s
141
141
 
142
142
 
143
143
  @pytest.mark.parametrize("prefix", [None])
144
- def test_ensure_valid_address_nft(config_with_address_prefix: Dict[str, Any]) -> None:
144
+ def test_ensure_valid_address_nft(config_with_address_prefix: dict[str, Any]) -> None:
145
145
  config = config_with_address_prefix
146
146
  address = ensure_valid_address(
147
147
  "nft1mx2nkvml2eekjtqwdmxvmf3js8g083hpszzhkhtwvhcss8efqzhqtza773", allowed_types={AddressType.NFT}, config=config
@@ -150,7 +150,7 @@ def test_ensure_valid_address_nft(config_with_address_prefix: Dict[str, Any]) ->
150
150
 
151
151
 
152
152
  @pytest.mark.parametrize("prefix", [None])
153
- def test_ensure_valid_address_nft_bad_address(config_with_address_prefix: Dict[str, Any]) -> None:
153
+ def test_ensure_valid_address_nft_bad_address(config_with_address_prefix: dict[str, Any]) -> None:
154
154
  config = config_with_address_prefix
155
155
  with pytest.raises(ValueError):
156
156
  ensure_valid_address(
@@ -161,7 +161,7 @@ def test_ensure_valid_address_nft_bad_address(config_with_address_prefix: Dict[s
161
161
 
162
162
 
163
163
  @pytest.mark.parametrize("prefix", [None])
164
- def test_ensure_valid_address_did(config_with_address_prefix: Dict[str, Any]) -> None:
164
+ def test_ensure_valid_address_did(config_with_address_prefix: dict[str, Any]) -> None:
165
165
  config = config_with_address_prefix
166
166
  address = ensure_valid_address(
167
167
  "did:chia:14jxdtqcyp3gk8ka0678eq8mmtnktgpmp2vuqq3vtsl2e5qr7fyrsr9gsr7",
@@ -172,7 +172,7 @@ def test_ensure_valid_address_did(config_with_address_prefix: Dict[str, Any]) ->
172
172
 
173
173
 
174
174
  @pytest.mark.parametrize("prefix", [None])
175
- def test_ensure_valid_address_did_bad_address(config_with_address_prefix: Dict[str, Any]) -> None:
175
+ def test_ensure_valid_address_did_bad_address(config_with_address_prefix: dict[str, Any]) -> None:
176
176
  config = config_with_address_prefix
177
177
  with pytest.raises(ValueError):
178
178
  ensure_valid_address(
@@ -183,7 +183,7 @@ def test_ensure_valid_address_did_bad_address(config_with_address_prefix: Dict[s
183
183
 
184
184
 
185
185
  @pytest.mark.parametrize("prefix", [None])
186
- def test_ensure_valid_address_bad_length(config_with_address_prefix: Dict[str, Any]) -> None:
186
+ def test_ensure_valid_address_bad_length(config_with_address_prefix: dict[str, Any]) -> None:
187
187
  config = config_with_address_prefix
188
188
  with pytest.raises(ValueError):
189
189
  ensure_valid_address("xch1qqqqqqqqqqqqqqqqwygzk5", allowed_types={AddressType.XCH}, config=config)
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
- from typing import List, Optional, Tuple
4
+ from typing import Optional
5
5
 
6
6
  import pytest
7
7
 
@@ -78,14 +78,14 @@ def test_nested_serialization() -> None:
78
78
  @dataclasses.dataclass(frozen=True)
79
79
  class Compound(Streamable):
80
80
  optional: Optional[BasicCLVMStreamable]
81
- list: List[BasicCLVMStreamable]
81
+ list: list[BasicCLVMStreamable]
82
82
 
83
83
 
84
84
  @clvm_streamable
85
85
  @dataclasses.dataclass(frozen=True)
86
86
  class CompoundCLVM(Streamable):
87
87
  optional: Optional[BasicCLVMStreamable]
88
- list: List[BasicCLVMStreamable]
88
+ list: list[BasicCLVMStreamable]
89
89
 
90
90
 
91
91
  def test_compound_type_serialization() -> None:
@@ -153,7 +153,7 @@ def test_compound_type_serialization() -> None:
153
153
  @clvm_streamable
154
154
  @dataclasses.dataclass(frozen=True)
155
155
  class DoesntWork(Streamable):
156
- tuples_are_not_supported: Tuple[str]
156
+ tuples_are_not_supported: tuple[str]
157
157
 
158
158
 
159
159
  @clvm_streamable
@@ -190,7 +190,7 @@ def test_translation_layer() -> None:
190
190
  ]
191
191
  )
192
192
 
193
- coin = Coin(bytes32([0] * 32), bytes32([0] * 32), uint64(0))
193
+ coin = Coin(bytes32.zeros, bytes32.zeros, uint64(0))
194
194
  spend = Spend(
195
195
  coin,
196
196
  Program.to("puzzle"),
@@ -0,0 +1,354 @@
1
+ from __future__ import annotations
2
+
3
+ import io
4
+ import textwrap
5
+ from dataclasses import dataclass, replace
6
+ from decimal import Decimal
7
+ from typing import Any
8
+ from unittest.mock import patch
9
+
10
+ import pytest
11
+
12
+ from chia._tests.cmds.test_cmd_framework import check_click_parsing
13
+ from chia._tests.environments.wallet import STANDARD_TX_ENDPOINT_ARGS, WalletStateTransition, WalletTestFramework
14
+ from chia.cmds.cmd_helpers import NeedsCoinSelectionConfig, NeedsWalletRPC, WalletClientInfo
15
+ from chia.cmds.coins import CombineCMD, ListCMD, SplitCMD
16
+ from chia.cmds.param_types import CliAmount, cli_amount_none
17
+ from chia.rpc.wallet_request_types import GetSyncStatusResponse
18
+ from chia.types.blockchain_format.sized_bytes import bytes32
19
+ from chia.util.ints import uint64
20
+ from chia.wallet.cat_wallet.cat_wallet import CATWallet
21
+
22
+ ONE_TRILLION = 1_000_000_000_000
23
+
24
+
25
+ @dataclass
26
+ class ValueAndArgs:
27
+ value: Any
28
+ args: list[str]
29
+
30
+
31
+ @pytest.mark.parametrize(
32
+ "id",
33
+ [ValueAndArgs(1, []), ValueAndArgs(123, ["--id", "123"])],
34
+ )
35
+ @pytest.mark.parametrize(
36
+ "show_unconfirmed",
37
+ [ValueAndArgs(False, []), ValueAndArgs(True, ["--show-unconfirmed"])],
38
+ )
39
+ @pytest.mark.parametrize(
40
+ "paginate",
41
+ [ValueAndArgs(None, []), ValueAndArgs(True, ["--paginate"]), ValueAndArgs(False, ["--no-paginate"])],
42
+ )
43
+ def test_list_parsing(id: ValueAndArgs, show_unconfirmed: ValueAndArgs, paginate: ValueAndArgs) -> None:
44
+ check_click_parsing(
45
+ ListCMD(
46
+ rpc_info=NeedsWalletRPC(client_info=None, wallet_rpc_port=None, fingerprint=None),
47
+ coin_selection_config=NeedsCoinSelectionConfig(
48
+ min_coin_amount=cli_amount_none,
49
+ max_coin_amount=cli_amount_none,
50
+ coins_to_exclude=(),
51
+ amounts_to_exclude=(),
52
+ ),
53
+ id=id.value,
54
+ show_unconfirmed=show_unconfirmed.value,
55
+ paginate=paginate.value,
56
+ ),
57
+ *id.args,
58
+ *show_unconfirmed.args,
59
+ *paginate.args,
60
+ )
61
+
62
+
63
+ @pytest.mark.parametrize(
64
+ "wallet_environments",
65
+ [
66
+ {
67
+ "num_environments": 1,
68
+ "blocks_needed": [3], # 6 coins to test pagination
69
+ "reuse_puzhash": True, # irrelevent
70
+ "trusted": True, # irrelevent
71
+ }
72
+ ],
73
+ indirect=True,
74
+ )
75
+ @pytest.mark.limit_consensus_modes(reason="irrelevant")
76
+ @pytest.mark.anyio
77
+ async def test_list(wallet_environments: WalletTestFramework, capsys: pytest.CaptureFixture[str]) -> None:
78
+ env = wallet_environments.environments[0]
79
+ env.wallet_aliases = {
80
+ "xch": 1,
81
+ "cat": 2,
82
+ }
83
+
84
+ client_info = WalletClientInfo(
85
+ env.rpc_client,
86
+ env.wallet_state_manager.root_pubkey.get_fingerprint(),
87
+ env.wallet_state_manager.config,
88
+ )
89
+
90
+ wallet_coins = [cr.coin for cr in (await env.wallet_state_manager.coin_store.get_coin_records()).records]
91
+
92
+ base_command = ListCMD(
93
+ rpc_info=NeedsWalletRPC(client_info=client_info),
94
+ coin_selection_config=NeedsCoinSelectionConfig(
95
+ min_coin_amount=cli_amount_none,
96
+ max_coin_amount=cli_amount_none,
97
+ coins_to_exclude=(),
98
+ amounts_to_exclude=(),
99
+ ),
100
+ id=env.wallet_aliases["xch"],
101
+ show_unconfirmed=True,
102
+ paginate=None,
103
+ )
104
+
105
+ # Test an error real quick
106
+ await replace(base_command, id=50).run()
107
+ output = (capsys.readouterr()).out
108
+ assert "Wallet id: 50 not found" in output
109
+
110
+ await base_command.run()
111
+
112
+ output = capsys.readouterr().out
113
+ assert (
114
+ textwrap.dedent(
115
+ f"""\
116
+ There are a total of {len(wallet_coins)} coins in wallet {env.wallet_aliases['xch']}.
117
+ {len(wallet_coins)} confirmed coins.
118
+ 0 unconfirmed additions.
119
+ 0 unconfirmed removals.
120
+ Confirmed coins:
121
+ """
122
+ )
123
+ in output
124
+ )
125
+ for coin in wallet_coins:
126
+ assert coin.name().hex() in output
127
+ assert str(coin.amount) in output # make sure we're always showing mojos as that's the only source of truth
128
+
129
+ # Test pagination
130
+ with patch("sys.stdin", new=io.StringIO("c\n")):
131
+ await replace(base_command, paginate=True).run()
132
+
133
+ output = capsys.readouterr().out
134
+ assert (
135
+ textwrap.dedent(
136
+ f"""\
137
+ There are a total of {len(wallet_coins)} coins in wallet {env.wallet_aliases['xch']}.
138
+ {len(wallet_coins)} confirmed coins.
139
+ 0 unconfirmed additions.
140
+ 0 unconfirmed removals.
141
+ Confirmed coins:
142
+ """
143
+ )
144
+ in output
145
+ )
146
+ for coin in wallet_coins:
147
+ assert coin.name().hex() in output
148
+
149
+ with patch("sys.stdin", new=io.StringIO("q\n")):
150
+ await replace(base_command, paginate=True).run()
151
+
152
+ output = capsys.readouterr().out
153
+ assert (
154
+ textwrap.dedent(
155
+ f"""\
156
+ There are a total of {len(wallet_coins)} coins in wallet {env.wallet_aliases['xch']}.
157
+ {len(wallet_coins)} confirmed coins.
158
+ 0 unconfirmed additions.
159
+ 0 unconfirmed removals.
160
+ Confirmed coins:
161
+ """
162
+ )
163
+ in output
164
+ )
165
+ count = 0
166
+ for coin in wallet_coins:
167
+ count += 1 if coin.name().hex() in output else 0
168
+ assert count == 5
169
+
170
+ # Create a cat wallet
171
+ CAT_AMOUNT = uint64(50)
172
+ async with env.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
173
+ await CATWallet.create_new_cat_wallet(
174
+ env.wallet_state_manager,
175
+ env.xch_wallet,
176
+ {"identifier": "genesis_by_id"},
177
+ CAT_AMOUNT,
178
+ action_scope,
179
+ )
180
+
181
+ # Test showing unconfirmed
182
+ # Currently:
183
+ # - 1 XCH coin is pending
184
+ # - 1 change will be created
185
+ # - 1 CAT ephemeral coin happened (1 removal & 1 addition)
186
+ # - 1 CAT coin is waiting to be created
187
+ coin_used_in_tx = next(
188
+ c for tx in action_scope.side_effects.transactions for c in tx.removals if c.amount != CAT_AMOUNT
189
+ )
190
+ change_coin = next(
191
+ c for tx in action_scope.side_effects.transactions for c in tx.additions if c.amount != CAT_AMOUNT
192
+ )
193
+
194
+ await replace(base_command, show_unconfirmed=True).run()
195
+
196
+ output = capsys.readouterr().out
197
+ assert (
198
+ textwrap.dedent(
199
+ f"""\
200
+ There are a total of {len(wallet_coins)} coins in wallet {env.wallet_aliases['xch']}.
201
+ {len(wallet_coins) - 1} confirmed coins.
202
+ 1 unconfirmed additions.
203
+ 1 unconfirmed removals.
204
+ Confirmed coins:
205
+ """
206
+ )
207
+ in output
208
+ )
209
+ assert coin_used_in_tx.name().hex() in output
210
+ assert change_coin.name().hex() in output
211
+
212
+ await wallet_environments.process_pending_states(
213
+ [
214
+ WalletStateTransition(
215
+ # no need to test this, it is tested elsewhere
216
+ pre_block_balance_updates={
217
+ "xch": {"set_remainder": True},
218
+ "cat": {"init": True, "set_remainder": True},
219
+ },
220
+ post_block_balance_updates={
221
+ "xch": {"set_remainder": True},
222
+ "cat": {"set_remainder": True},
223
+ },
224
+ )
225
+ ]
226
+ )
227
+
228
+ # Test CAT display
229
+ all_removals = {c for tx in action_scope.side_effects.transactions for c in tx.removals}
230
+ cat_coin = next(
231
+ c
232
+ for tx in action_scope.side_effects.transactions
233
+ for c in tx.additions
234
+ if c.amount == CAT_AMOUNT and c not in all_removals
235
+ )
236
+
237
+ await replace(base_command, id=env.wallet_aliases["cat"]).run()
238
+
239
+ output = capsys.readouterr().out
240
+ assert (
241
+ textwrap.dedent(
242
+ f"""\
243
+ There are a total of 1 coins in wallet {env.wallet_aliases['cat']}.
244
+ 1 confirmed coins.
245
+ 0 unconfirmed additions.
246
+ 0 unconfirmed removals.
247
+ Confirmed coins:
248
+ """
249
+ )
250
+ in output
251
+ )
252
+ assert cat_coin.name().hex() in output
253
+ assert str(CAT_AMOUNT) in output
254
+
255
+ # Test a not synced error
256
+ assert base_command.rpc_info.client_info is not None
257
+
258
+ async def not_synced() -> GetSyncStatusResponse:
259
+ return GetSyncStatusResponse(False, False)
260
+
261
+ base_command.rpc_info.client_info.client.get_sync_status = not_synced # type: ignore[method-assign]
262
+ await base_command.run()
263
+ output = (capsys.readouterr()).out
264
+ assert "Wallet not synced. Please wait." in output
265
+
266
+
267
+ @pytest.mark.parametrize(
268
+ "id",
269
+ [ValueAndArgs(1, []), ValueAndArgs(123, ["--id", "123"])],
270
+ )
271
+ @pytest.mark.parametrize(
272
+ "target_amount",
273
+ [ValueAndArgs(None, []), ValueAndArgs(CliAmount(amount=Decimal("0.01"), mojos=False), ["--target-amount", "0.01"])],
274
+ )
275
+ @pytest.mark.parametrize(
276
+ "number_of_coins",
277
+ [ValueAndArgs(500, []), ValueAndArgs(1, ["--number-of-coins", "1"])],
278
+ )
279
+ @pytest.mark.parametrize(
280
+ "input_coins",
281
+ [
282
+ ValueAndArgs((), []),
283
+ ValueAndArgs((bytes32([0] * 32),), ["--input-coin", bytes32([0] * 32).hex()]),
284
+ ValueAndArgs(
285
+ (bytes32([0] * 32), bytes32([1] * 32)),
286
+ ["--input-coin", bytes32([0] * 32).hex(), "--input-coin", bytes32([1] * 32).hex()],
287
+ ),
288
+ ],
289
+ )
290
+ @pytest.mark.parametrize(
291
+ "largest_first",
292
+ [ValueAndArgs(False, []), ValueAndArgs(True, ["--largest-first"])],
293
+ )
294
+ def test_combine_parsing(
295
+ id: ValueAndArgs,
296
+ target_amount: ValueAndArgs,
297
+ number_of_coins: ValueAndArgs,
298
+ input_coins: ValueAndArgs,
299
+ largest_first: ValueAndArgs,
300
+ ) -> None:
301
+ check_click_parsing(
302
+ CombineCMD(
303
+ **STANDARD_TX_ENDPOINT_ARGS,
304
+ id=id.value,
305
+ target_amount=target_amount.value,
306
+ number_of_coins=number_of_coins.value,
307
+ input_coins=input_coins.value,
308
+ largest_first=largest_first.value,
309
+ ),
310
+ *id.args,
311
+ *target_amount.args,
312
+ *number_of_coins.args,
313
+ *input_coins.args,
314
+ *largest_first.args,
315
+ )
316
+
317
+
318
+ @pytest.mark.parametrize(
319
+ "id",
320
+ [ValueAndArgs(1, []), ValueAndArgs(123, ["--id", "123"])],
321
+ )
322
+ @pytest.mark.parametrize(
323
+ "number_of_coins",
324
+ [ValueAndArgs(1, ["--number-of-coins", "1"])],
325
+ )
326
+ @pytest.mark.parametrize(
327
+ "amount_per_coin",
328
+ [ValueAndArgs(CliAmount(amount=Decimal("0.01"), mojos=False), ["--amount-per-coin", "0.01"])],
329
+ )
330
+ @pytest.mark.parametrize(
331
+ "target_coin_id",
332
+ [
333
+ ValueAndArgs(bytes32([0] * 32), ["--target-coin-id", bytes32([0] * 32).hex()]),
334
+ ],
335
+ )
336
+ def test_split_parsing(
337
+ id: ValueAndArgs,
338
+ number_of_coins: ValueAndArgs,
339
+ amount_per_coin: ValueAndArgs,
340
+ target_coin_id: ValueAndArgs,
341
+ ) -> None:
342
+ check_click_parsing(
343
+ SplitCMD(
344
+ **STANDARD_TX_ENDPOINT_ARGS,
345
+ id=id.value,
346
+ number_of_coins=number_of_coins.value,
347
+ amount_per_coin=amount_per_coin.value,
348
+ target_coin_id=target_coin_id.value,
349
+ ),
350
+ *id.args,
351
+ *number_of_coins.args,
352
+ *amount_per_coin.args,
353
+ *target_coin_id.args,
354
+ )