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 Dict, Optional, Tuple
3
+ from typing import Optional
4
4
 
5
5
  import pytest
6
6
  from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
@@ -8,8 +8,8 @@ from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
8
8
  from chia._tests.clvm.benchmark_costs import cost_of_spend_bundle
9
9
  from chia._tests.clvm.test_puzzles import public_key_for_index, secret_exponent_for_index
10
10
  from chia._tests.util.key_tool import KeyTool
11
+ from chia._tests.util.spend_sim import CostLogger, SimClient, SpendSim, sim_and_client
11
12
  from chia._tests.util.time_out_assert import time_out_assert
12
- from chia.clvm.spend_sim import CostLogger, SimClient, SpendSim, sim_and_client
13
13
  from chia.consensus.default_constants import DEFAULT_CONSTANTS
14
14
  from chia.types.blockchain_format.program import INFINITE_COST, Program
15
15
  from chia.types.blockchain_format.sized_bytes import bytes32
@@ -48,7 +48,7 @@ async def do_spend(
48
48
  sim: SpendSim,
49
49
  sim_client: SimClient,
50
50
  spend_bundle: WalletSpendBundle,
51
- expected_result: Tuple[MempoolInclusionStatus, Optional[Err]],
51
+ expected_result: tuple[MempoolInclusionStatus, Optional[Err]],
52
52
  cost_logger: Optional[CostLogger] = None,
53
53
  cost_log_msg: str = "",
54
54
  ) -> int:
@@ -66,7 +66,7 @@ async def do_spend(
66
66
  class TestClawbackLifecycle:
67
67
  # Helper function
68
68
  def sign_coin_spend(self, coin_spend: CoinSpend, index: int) -> G2Element:
69
- synthetic_secret_key: PrivateKey = calculate_synthetic_secret_key( # noqa
69
+ synthetic_secret_key: PrivateKey = calculate_synthetic_secret_key(
70
70
  PrivateKey.from_bytes(
71
71
  secret_exponent_for_index(index).to_bytes(32, "big"),
72
72
  ),
@@ -277,7 +277,7 @@ class TestClawbackLifecycle:
277
277
  cb_sender_sol = create_merkle_solution(timelock, sender_ph, recipient_ph, sender_puz, sender_sol)
278
278
 
279
279
  conds = conditions_dict_for_solution(clawback_puz, cb_sender_sol, INFINITE_COST)
280
- assert isinstance(conds, Dict)
280
+ assert isinstance(conds, dict)
281
281
  create_coins = conds[ConditionOpcode.CREATE_COIN]
282
282
  assert len(create_coins) == 1
283
283
  assert create_coins[0].vars[0] == sender_ph
@@ -286,7 +286,7 @@ class TestClawbackLifecycle:
286
286
  cb_recipient_sol = create_merkle_solution(timelock, sender_ph, recipient_ph, recipient_puz, recipient_sol)
287
287
  clawback_puz.run(cb_recipient_sol)
288
288
  conds = conditions_dict_for_solution(clawback_puz, cb_recipient_sol, INFINITE_COST)
289
- assert isinstance(conds, Dict)
289
+ assert isinstance(conds, dict)
290
290
  create_coins = conds[ConditionOpcode.CREATE_COIN]
291
291
  assert len(create_coins) == 1
292
292
  assert create_coins[0].vars[0] == recipient_ph
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import random
4
- from typing import List, Tuple
5
4
 
6
5
  import pytest
7
6
 
@@ -21,7 +20,7 @@ from chia.wallet.wallet_node import WalletNode
21
20
  )
22
21
  @pytest.mark.anyio
23
22
  async def test_is_recipient(
24
- simulator_and_wallet: Tuple[List[FullNodeSimulator], List[Tuple[WalletNode, ChiaServer]], BlockTools],
23
+ simulator_and_wallet: tuple[list[FullNodeSimulator], list[tuple[WalletNode, ChiaServer]], BlockTools],
25
24
  trusted: bool,
26
25
  self_hostname: str,
27
26
  seeded_random: random.Random,
@@ -1,20 +1,30 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import contextlib
4
+ import unittest
5
+ from collections.abc import AsyncIterator, Awaitable
3
6
  from contextlib import AsyncExitStack
4
7
  from dataclasses import replace
5
- from typing import Any, AsyncIterator, Awaitable, Callable, Dict, List, Literal, Optional, Tuple
8
+ from typing import Any, Callable, Literal, Optional
6
9
 
7
10
  import pytest
11
+ from chia_rs import (
12
+ DONT_VALIDATE_SIGNATURE,
13
+ SpendBundleConditions,
14
+ get_flags_for_height_and_constants,
15
+ run_block_generator,
16
+ run_block_generator2,
17
+ )
8
18
 
9
- from chia._tests.environments.wallet import WalletEnvironment, WalletState, WalletTestFramework
19
+ from chia._tests.environments.wallet import NewPuzzleHashError, WalletEnvironment, WalletState, WalletTestFramework
10
20
  from chia._tests.util.setup_nodes import setup_simulators_and_wallets_service
11
21
  from chia._tests.wallet.wallet_block_tools import WalletBlockTools
12
22
  from chia.consensus.constants import ConsensusConstants
13
- from chia.consensus.cost_calculator import NPCResult
14
23
  from chia.full_node.full_node import FullNode
15
24
  from chia.rpc.full_node_rpc_client import FullNodeRpcClient
16
25
  from chia.rpc.wallet_rpc_client import WalletRpcClient
17
26
  from chia.types.blockchain_format.sized_bytes import bytes32
27
+ from chia.types.full_block import FullBlock
18
28
  from chia.types.peer_info import PeerInfo
19
29
  from chia.util.ints import uint32, uint64, uint128
20
30
  from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG, TXConfig
@@ -55,8 +65,8 @@ async def ignore_block_validation(
55
65
  if "standard_block_tools" in request.keywords:
56
66
  return None
57
67
 
58
- async def validate_block_body(*args: Any, **kwargs: Any) -> Tuple[Literal[None], NPCResult]:
59
- return None, args[7]
68
+ async def validate_block_body(*args: Any, **kwargs: Any) -> Literal[None]:
69
+ return None
60
70
 
61
71
  def create_wrapper(original_create: Any) -> Any:
62
72
  async def new_create(*args: Any, **kwargs: Any) -> Any:
@@ -73,9 +83,34 @@ async def ignore_block_validation(
73
83
 
74
84
  return new_create
75
85
 
86
+ def run_block(
87
+ block: FullBlock, prev_generators: list[bytes], constants: ConsensusConstants
88
+ ) -> tuple[Optional[int], Optional[SpendBundleConditions]]:
89
+ assert block.transactions_generator is not None
90
+ assert block.transactions_info is not None
91
+ flags = get_flags_for_height_and_constants(block.height, constants) | DONT_VALIDATE_SIGNATURE
92
+ if block.height >= constants.HARD_FORK_HEIGHT:
93
+ run_block = run_block_generator2
94
+ else:
95
+ run_block = run_block_generator
96
+ err, conds = run_block(
97
+ bytes(block.transactions_generator),
98
+ prev_generators,
99
+ block.transactions_info.cost,
100
+ flags,
101
+ block.transactions_info.aggregated_signature,
102
+ None,
103
+ constants,
104
+ )
105
+ # pretend that the signatures are OK
106
+ if conds is not None:
107
+ conds = conds.replace(validated_signature=True)
108
+ return err, conds
109
+
76
110
  monkeypatch.setattr("chia.simulator.block_tools.BlockTools", WalletBlockTools)
77
111
  monkeypatch.setattr(FullNode, "create", create_wrapper(FullNode.create))
78
112
  monkeypatch.setattr("chia.consensus.blockchain.validate_block_body", validate_block_body)
113
+ monkeypatch.setattr("chia.consensus.multiprocess_validation._run_block", run_block)
79
114
  monkeypatch.setattr(
80
115
  "chia.consensus.block_header_validation.validate_unfinished_header_block", lambda *_, **__: (uint64(1), None)
81
116
  )
@@ -86,7 +121,7 @@ async def ignore_block_validation(
86
121
  "chia.consensus.multiprocess_validation.validate_finished_header_block", lambda *_, **__: (uint64(1), None)
87
122
  )
88
123
  monkeypatch.setattr(
89
- "chia.consensus.multiprocess_validation.verify_and_get_quality_string", lambda *_, **__: bytes32([0] * 32)
124
+ "chia.consensus.multiprocess_validation.verify_and_get_quality_string", lambda *_, **__: bytes32.zeros
90
125
  )
91
126
  monkeypatch.setattr("chia.consensus.block_record.BlockRecord.sp_total_iters", lambda *_: uint128(0))
92
127
  monkeypatch.setattr("chia.consensus.block_record.BlockRecord.ip_sub_slot_total_iters", lambda *_: uint128(0))
@@ -111,6 +146,28 @@ def tx_config(request: Any) -> TXConfig:
111
146
  return replace(DEFAULT_TX_CONFIG, reuse_puzhash=request.param)
112
147
 
113
148
 
149
+ def new_action_scope_wrapper(func: Any) -> Any:
150
+ @contextlib.asynccontextmanager
151
+ async def wrapped_new_action_scope(self: WalletStateManager, *args: Any, **kwargs: Any) -> Any:
152
+ # Take note of the number of puzzle hashes if we're supposed to be reusing
153
+ ph_indexes: dict[uint32, int] = {}
154
+ for wallet_id in self.wallets:
155
+ ph_indexes[wallet_id] = await self.puzzle_store.get_unused_count(wallet_id)
156
+
157
+ async with func(self, *args, **kwargs) as action_scope:
158
+ yield action_scope
159
+
160
+ # Finally, check that the number of puzzle hashes did or did not increase by the specified amount
161
+ if action_scope.config.tx_config.reuse_puzhash:
162
+ for wallet_id, ph_index in zip(self.wallets, ph_indexes):
163
+ if not ph_indexes[wallet_id] == (await self.puzzle_store.get_unused_count(wallet_id)):
164
+ raise NewPuzzleHashError(
165
+ f"wallet ID {wallet_id} generated new puzzle hashes while reuse_puzhash was False"
166
+ )
167
+
168
+ return wrapped_new_action_scope
169
+
170
+
114
171
  # This fixture automatically creates 4 parametrized tests trusted/untrusted x reuse/new derivations
115
172
  # These parameterizations can be skipped by manually specifying "trusted" or "reuse puzhash" to the fixture
116
173
  @pytest.fixture(scope="function")
@@ -128,7 +185,7 @@ async def wallet_environments(
128
185
  pytest.skip("Skipping not specified reuse_puzhash mode")
129
186
  assert len(request.param["blocks_needed"]) == request.param["num_environments"]
130
187
  if "config_overrides" in request.param:
131
- config_overrides: Dict[str, Any] = request.param["config_overrides"]
188
+ config_overrides: dict[str, Any] = request.param["config_overrides"]
132
189
  else: # pragma: no cover
133
190
  config_overrides = {}
134
191
  async with setup_simulators_and_wallets_service(
@@ -141,77 +198,81 @@ async def wallet_environments(
141
198
 
142
199
  full_node[0]._api.full_node.config = {**full_node[0]._api.full_node.config, **config_overrides}
143
200
 
144
- wallet_rpc_clients: List[WalletRpcClient] = []
145
- async with AsyncExitStack() as astack:
146
- for service in wallet_services:
147
- service._node.config = {
148
- **service._node.config,
149
- "trusted_peers": (
150
- {full_node[0]._api.server.node_id.hex(): full_node[0]._api.server.node_id.hex()}
151
- if trusted_full_node
152
- else {}
153
- ),
154
- **config_overrides,
155
- }
156
- service._node.wallet_state_manager.config = service._node.config
157
- # Shorten the 10 seconds default value
158
- service._node.coin_state_retry_seconds = 2
159
- await service._node.server.start_client(
160
- PeerInfo(bt.config["self_hostname"], full_node[0]._api.full_node.server.get_port()), None
161
- )
162
- wallet_rpc_clients.append(
163
- await astack.enter_async_context(
164
- WalletRpcClient.create_as_context(
165
- bt.config["self_hostname"],
166
- # Semantics guarantee us a non-None value here
167
- service.rpc_server.listen_port, # type: ignore[union-attr]
168
- service.root_path,
169
- service.config,
201
+ new_action_scope_wrapped = new_action_scope_wrapper(WalletStateManager.new_action_scope)
202
+ with unittest.mock.patch(
203
+ "chia.wallet.wallet_state_manager.WalletStateManager.new_action_scope", new=new_action_scope_wrapped
204
+ ):
205
+ wallet_rpc_clients: list[WalletRpcClient] = []
206
+ async with AsyncExitStack() as astack:
207
+ for service in wallet_services:
208
+ service._node.config = {
209
+ **service._node.config,
210
+ "trusted_peers": (
211
+ {full_node[0]._api.server.node_id.hex(): full_node[0]._api.server.node_id.hex()}
212
+ if trusted_full_node
213
+ else {}
214
+ ),
215
+ **config_overrides,
216
+ }
217
+ service._node.wallet_state_manager.config = service._node.config
218
+ # Shorten the 10 seconds default value
219
+ service._node.coin_state_retry_seconds = 2
220
+ await service._node.server.start_client(
221
+ PeerInfo(bt.config["self_hostname"], full_node[0]._api.full_node.server.get_port()), None
222
+ )
223
+ wallet_rpc_clients.append(
224
+ await astack.enter_async_context(
225
+ WalletRpcClient.create_as_context(
226
+ bt.config["self_hostname"],
227
+ # Semantics guarantee us a non-None value here
228
+ service.rpc_server.listen_port, # type: ignore[union-attr]
229
+ service.root_path,
230
+ service.config,
231
+ )
170
232
  )
171
233
  )
172
- )
173
234
 
174
- wallet_states: List[WalletState] = []
175
- for service, blocks_needed in zip(wallet_services, request.param["blocks_needed"]):
176
- if blocks_needed > 0:
177
- await full_node[0]._api.farm_blocks_to_wallet(
178
- count=blocks_needed, wallet=service._node.wallet_state_manager.main_wallet
235
+ wallet_states: list[WalletState] = []
236
+ for service, blocks_needed in zip(wallet_services, request.param["blocks_needed"]):
237
+ if blocks_needed > 0:
238
+ await full_node[0]._api.farm_blocks_to_wallet(
239
+ count=blocks_needed, wallet=service._node.wallet_state_manager.main_wallet
240
+ )
241
+ await full_node[0]._api.wait_for_wallet_synced(wallet_node=service._node, timeout=20)
242
+ wallet_states.append(
243
+ WalletState(
244
+ Balance(
245
+ confirmed_wallet_balance=uint128(2_000_000_000_000 * blocks_needed),
246
+ unconfirmed_wallet_balance=uint128(2_000_000_000_000 * blocks_needed),
247
+ spendable_balance=uint128(2_000_000_000_000 * blocks_needed),
248
+ pending_change=uint64(0),
249
+ max_send_amount=uint128(2_000_000_000_000 * blocks_needed),
250
+ unspent_coin_count=uint32(2 * blocks_needed),
251
+ pending_coin_removal_count=uint32(0),
252
+ ),
253
+ )
179
254
  )
180
- await full_node[0]._api.wait_for_wallet_synced(wallet_node=service._node, timeout=20)
181
- wallet_states.append(
182
- WalletState(
183
- Balance(
184
- confirmed_wallet_balance=uint128(2_000_000_000_000 * blocks_needed),
185
- unconfirmed_wallet_balance=uint128(2_000_000_000_000 * blocks_needed),
186
- spendable_balance=uint128(2_000_000_000_000 * blocks_needed),
187
- pending_change=uint64(0),
188
- max_send_amount=uint128(2_000_000_000_000 * blocks_needed),
189
- unspent_coin_count=uint32(2 * blocks_needed),
190
- pending_coin_removal_count=uint32(0),
191
- ),
255
+
256
+ assert full_node[0].rpc_server is not None
257
+ client_node = await astack.enter_async_context(
258
+ FullNodeRpcClient.create_as_context(
259
+ bt.config["self_hostname"],
260
+ full_node[0].rpc_server.listen_port,
261
+ full_node[0].root_path,
262
+ full_node[0].config,
192
263
  )
193
264
  )
194
-
195
- assert full_node[0].rpc_server is not None
196
- client_node = await astack.enter_async_context(
197
- FullNodeRpcClient.create_as_context(
198
- bt.config["self_hostname"],
199
- full_node[0].rpc_server.listen_port,
200
- full_node[0].root_path,
201
- full_node[0].config,
265
+ yield WalletTestFramework(
266
+ full_node[0]._api,
267
+ client_node,
268
+ trusted_full_node,
269
+ [
270
+ WalletEnvironment(
271
+ service=service,
272
+ rpc_client=rpc_client,
273
+ wallet_states={uint32(1): wallet_state},
274
+ )
275
+ for service, rpc_client, wallet_state in zip(wallet_services, wallet_rpc_clients, wallet_states)
276
+ ],
277
+ tx_config,
202
278
  )
203
- )
204
- yield WalletTestFramework(
205
- full_node[0]._api,
206
- client_node,
207
- trusted_full_node,
208
- [
209
- WalletEnvironment(
210
- service=service,
211
- rpc_client=rpc_client,
212
- wallet_states={uint32(1): wallet_state},
213
- )
214
- for service, rpc_client, wallet_state in zip(wallet_services, wallet_rpc_clients, wallet_states)
215
- ],
216
- tx_config,
217
- )
@@ -1,12 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, List, Optional, Tuple
3
+ from typing import Any, Optional
4
4
 
5
5
  import pytest
6
6
  from chia_rs import AugSchemeMPL
7
7
  from clvm.casts import int_to_bytes
8
8
 
9
- from chia.clvm.spend_sim import SimClient, SpendSim, sim_and_client
9
+ from chia._tests.util.spend_sim import SimClient, SpendSim, sim_and_client
10
10
  from chia.types.blockchain_format.coin import Coin
11
11
  from chia.types.blockchain_format.program import INFINITE_COST, Program
12
12
  from chia.types.blockchain_format.sized_bytes import bytes32
@@ -537,12 +537,16 @@ def test_validator() -> None:
537
537
 
538
538
  # Setup the spend_p2_singleton (proposal inner puz)
539
539
  spend_p2_singleton = SPEND_P2_SINGLETON_MOD.curry(
540
- treasury_struct, CAT_MOD_HASH, conditions, [], p2_singleton_puzhash # tailhash conds
540
+ treasury_struct,
541
+ CAT_MOD_HASH,
542
+ conditions,
543
+ [],
544
+ p2_singleton_puzhash, # tailhash conds
541
545
  )
542
546
  spend_p2_singleton_puzhash = spend_p2_singleton.get_tree_hash()
543
547
 
544
548
  parent_amt_list = [[parent_id, locked_amount]]
545
- cat_parent_amt_list: List[Optional[Any]] = []
549
+ cat_parent_amt_list: list[Optional[Any]] = []
546
550
  spend_p2_singleton_solution = Program.to([parent_amt_list, cat_parent_amt_list, treasury_inner.get_tree_hash()])
547
551
 
548
552
  output_conds = spend_p2_singleton.run(spend_p2_singleton_solution)
@@ -592,8 +596,6 @@ def test_validator() -> None:
592
596
  conds = proposal_validator.run(solution)
593
597
  assert len(conds.as_python()) == 3
594
598
 
595
- return
596
-
597
599
 
598
600
  def test_spend_p2_singleton() -> None:
599
601
  # Curried values
@@ -721,7 +723,7 @@ def test_merge_p2_singleton() -> None:
721
723
  ]
722
724
  amounts = [uint64(1000), uint64(2000), uint64(3000)]
723
725
  parent_puzhash_amounts = []
724
- merge_coin_ids: List[bytes32] = []
726
+ merge_coin_ids: list[bytes32] = []
725
727
  for pid, amt in zip(parent_ids, amounts):
726
728
  parent_puzhash_amounts.append([pid, my_puzhash, amt])
727
729
  merge_coin_ids.append(Coin(pid, my_puzhash, amt).name())
@@ -747,8 +749,6 @@ def test_merge_p2_singleton() -> None:
747
749
  assert cca in agg_acas
748
750
  assert merge_conds[ConditionOpcode.ASSERT_MY_COIN_ID][0].vars[0] == coin_id
749
751
 
750
- return
751
-
752
752
 
753
753
  def test_treasury() -> None:
754
754
  """
@@ -820,12 +820,16 @@ def test_treasury() -> None:
820
820
 
821
821
  # Setup the spend_p2_singleton (proposal inner puz)
822
822
  spend_p2_singleton = SPEND_P2_SINGLETON_MOD.curry(
823
- treasury_struct, CAT_MOD_HASH, conditions, [], p2_singleton_puzhash # tailhash conds
823
+ treasury_struct,
824
+ CAT_MOD_HASH,
825
+ conditions,
826
+ [],
827
+ p2_singleton_puzhash, # tailhash conds
824
828
  )
825
829
  spend_p2_singleton_puzhash = spend_p2_singleton.get_tree_hash()
826
830
 
827
831
  parent_amt_list = [[parent_id, locked_amount]]
828
- cat_parent_amt_list: List[Optional[Any]] = []
832
+ cat_parent_amt_list: list[Optional[Any]] = []
829
833
  spend_p2_singleton_solution = Program.to([parent_amt_list, cat_parent_amt_list, treasury_inner.get_tree_hash()])
830
834
 
831
835
  proposal: Program = proposal_curry_one.curry(
@@ -1067,12 +1071,16 @@ def test_proposal_lifecycle() -> None:
1067
1071
 
1068
1072
  # Setup the spend_p2_singleton (proposal inner puz)
1069
1073
  spend_p2_singleton = SPEND_P2_SINGLETON_MOD.curry(
1070
- treasury_singleton_struct, CAT_MOD_HASH, conditions, [], p2_singleton_puzhash # tailhash conds
1074
+ treasury_singleton_struct,
1075
+ CAT_MOD_HASH,
1076
+ conditions,
1077
+ [],
1078
+ p2_singleton_puzhash, # tailhash conds
1071
1079
  )
1072
1080
  spend_p2_singleton_puzhash = spend_p2_singleton.get_tree_hash()
1073
1081
 
1074
1082
  parent_amt_list = [[parent_id, locked_amount]]
1075
- cat_parent_amt_list: List[Optional[Any]] = []
1083
+ cat_parent_amt_list: list[Optional[Any]] = []
1076
1084
  spend_p2_singleton_solution = Program.to([parent_amt_list, cat_parent_amt_list, treasury_inner_puzhash])
1077
1085
 
1078
1086
  # Setup Proposal
@@ -1242,10 +1250,10 @@ def test_proposal_lifecycle() -> None:
1242
1250
  async def do_spend(
1243
1251
  sim: SpendSim,
1244
1252
  sim_client: SimClient,
1245
- coins: List[Coin],
1246
- puzzles: List[Program],
1247
- solutions: List[Program],
1248
- ) -> Tuple[MempoolInclusionStatus, Optional[Err]]:
1253
+ coins: list[Coin],
1254
+ puzzles: list[Program],
1255
+ solutions: list[Program],
1256
+ ) -> tuple[MempoolInclusionStatus, Optional[Err]]:
1249
1257
  spends = []
1250
1258
  for coin, puzzle, solution in zip(coins, puzzles, solutions):
1251
1259
  spends.append(make_spend(coin, puzzle, solution))