chia-blockchain 2.5.4rc1__py3-none-any.whl → 2.5.5__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 (453) hide show
  1. chia/_tests/blockchain/blockchain_test_utils.py +2 -3
  2. chia/_tests/blockchain/test_augmented_chain.py +2 -3
  3. chia/_tests/blockchain/test_blockchain.py +261 -44
  4. chia/_tests/blockchain/test_blockchain_transactions.py +4 -3
  5. chia/_tests/blockchain/test_build_chains.py +197 -1
  6. chia/_tests/blockchain/test_get_block_generator.py +1 -1
  7. chia/_tests/blockchain/test_lookup_fork_chain.py +1 -1
  8. chia/_tests/clvm/benchmark_costs.py +1 -1
  9. chia/_tests/clvm/coin_store.py +3 -4
  10. chia/_tests/clvm/test_message_conditions.py +2 -2
  11. chia/_tests/clvm/test_puzzle_compression.py +2 -3
  12. chia/_tests/clvm/test_puzzles.py +1 -2
  13. chia/_tests/clvm/test_singletons.py +2 -3
  14. chia/_tests/clvm/test_spend_sim.py +7 -7
  15. chia/_tests/cmds/cmd_test_utils.py +30 -25
  16. chia/_tests/cmds/test_dev_gh.py +1 -1
  17. chia/_tests/cmds/test_farm_cmd.py +1 -1
  18. chia/_tests/cmds/test_show.py +1 -2
  19. chia/_tests/cmds/wallet/test_did.py +101 -56
  20. chia/_tests/cmds/wallet/test_nft.py +109 -84
  21. chia/_tests/cmds/wallet/test_notifications.py +1 -1
  22. chia/_tests/cmds/wallet/test_offer.toffer +1 -1
  23. chia/_tests/cmds/wallet/test_vcs.py +8 -8
  24. chia/_tests/cmds/wallet/test_wallet.py +100 -46
  25. chia/_tests/conftest.py +31 -20
  26. chia/_tests/connection_utils.py +1 -1
  27. chia/_tests/core/consensus/stores/__init__.py +0 -0
  28. chia/_tests/core/consensus/stores/test_coin_store_protocol.py +40 -0
  29. chia/_tests/core/consensus/test_block_creation.py +2 -31
  30. chia/_tests/core/consensus/test_pot_iterations.py +38 -3
  31. chia/_tests/core/custom_types/test_proof_of_space.py +154 -26
  32. chia/_tests/core/custom_types/test_spend_bundle.py +2 -3
  33. chia/_tests/core/daemon/test_daemon.py +80 -0
  34. chia/_tests/core/data_layer/test_data_layer.py +1 -1
  35. chia/_tests/core/data_layer/test_data_layer_util.py +1 -1
  36. chia/_tests/core/data_layer/test_data_rpc.py +14 -10
  37. chia/_tests/core/data_layer/test_data_store.py +5 -5
  38. chia/_tests/core/farmer/test_farmer_api.py +2 -2
  39. chia/_tests/core/full_node/full_sync/test_full_sync.py +446 -406
  40. chia/_tests/core/full_node/ram_db.py +3 -1
  41. chia/_tests/core/full_node/stores/test_block_store.py +28 -16
  42. chia/_tests/core/full_node/stores/test_coin_store.py +277 -185
  43. chia/_tests/core/full_node/stores/test_full_node_store.py +11 -4
  44. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  45. chia/_tests/core/full_node/test_address_manager.py +200 -27
  46. chia/_tests/core/full_node/test_block_height_map.py +2 -2
  47. chia/_tests/core/full_node/test_conditions.py +7 -6
  48. chia/_tests/core/full_node/test_full_node.py +456 -40
  49. chia/_tests/core/full_node/test_generator_tools.py +32 -2
  50. chia/_tests/core/full_node/test_hint_management.py +1 -1
  51. chia/_tests/core/full_node/test_node_load.py +20 -21
  52. chia/_tests/core/full_node/test_performance.py +3 -4
  53. chia/_tests/core/full_node/test_prev_tx_block.py +43 -0
  54. chia/_tests/core/full_node/test_subscriptions.py +1 -2
  55. chia/_tests/core/full_node/test_transactions.py +9 -5
  56. chia/_tests/core/full_node/test_tx_processing_queue.py +1 -2
  57. chia/_tests/core/large_block.py +1 -2
  58. chia/_tests/core/make_block_generator.py +3 -4
  59. chia/_tests/core/mempool/test_mempool.py +36 -86
  60. chia/_tests/core/mempool/test_mempool_fee_estimator.py +1 -1
  61. chia/_tests/core/mempool/test_mempool_item_queries.py +1 -3
  62. chia/_tests/core/mempool/test_mempool_manager.py +529 -69
  63. chia/_tests/core/mempool/test_mempool_performance.py +3 -2
  64. chia/_tests/core/mempool/test_singleton_fast_forward.py +61 -132
  65. chia/_tests/core/server/flood.py +1 -1
  66. chia/_tests/core/server/test_dos.py +1 -1
  67. chia/_tests/core/server/test_node_discovery.py +41 -27
  68. chia/_tests/core/server/test_rate_limits.py +1 -1
  69. chia/_tests/core/server/test_server.py +1 -1
  70. chia/_tests/core/services/test_services.py +5 -5
  71. chia/_tests/core/ssl/test_ssl.py +1 -1
  72. chia/_tests/core/test_cost_calculation.py +6 -6
  73. chia/_tests/core/test_crawler.py +2 -2
  74. chia/_tests/core/test_crawler_rpc.py +1 -1
  75. chia/_tests/core/test_db_conversion.py +3 -1
  76. chia/_tests/core/test_db_validation.py +5 -3
  77. chia/_tests/core/test_farmer_harvester_rpc.py +15 -15
  78. chia/_tests/core/test_filter.py +4 -1
  79. chia/_tests/core/test_full_node_rpc.py +99 -82
  80. chia/_tests/core/test_program.py +2 -2
  81. chia/_tests/core/util/test_block_cache.py +1 -1
  82. chia/_tests/core/util/test_keychain.py +2 -2
  83. chia/_tests/core/util/test_lockfile.py +1 -1
  84. chia/_tests/core/util/test_log_exceptions.py +5 -5
  85. chia/_tests/core/util/test_streamable.py +81 -22
  86. chia/_tests/db/test_db_wrapper.py +1 -3
  87. chia/_tests/environments/wallet.py +5 -5
  88. chia/_tests/farmer_harvester/test_farmer.py +9 -7
  89. chia/_tests/farmer_harvester/test_farmer_harvester.py +11 -4
  90. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  91. chia/_tests/farmer_harvester/test_third_party_harvesters.py +15 -9
  92. chia/_tests/fee_estimation/test_fee_estimation_integration.py +1 -2
  93. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +7 -5
  94. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -1
  95. chia/_tests/generator/test_compression.py +1 -2
  96. chia/_tests/generator/test_rom.py +8 -4
  97. chia/_tests/plot_sync/test_plot_sync.py +3 -3
  98. chia/_tests/plot_sync/test_receiver.py +3 -3
  99. chia/_tests/plot_sync/test_sender.py +1 -1
  100. chia/_tests/plot_sync/test_sync_simulated.py +3 -3
  101. chia/_tests/plot_sync/util.py +2 -2
  102. chia/_tests/pools/test_pool_cmdline.py +48 -21
  103. chia/_tests/pools/test_pool_puzzles_lifecycle.py +2 -3
  104. chia/_tests/pools/test_pool_rpc.py +237 -105
  105. chia/_tests/pools/test_pool_wallet.py +11 -2
  106. chia/_tests/pools/test_wallet_pool_store.py +5 -4
  107. chia/_tests/rpc/test_rpc_client.py +1 -1
  108. chia/_tests/simulation/test_simulation.py +13 -8
  109. chia/_tests/simulation/test_simulator.py +2 -2
  110. chia/_tests/timelord/test_new_peak.py +191 -47
  111. chia/_tests/timelord/test_timelord.py +1 -1
  112. chia/_tests/tools/test_full_sync.py +0 -2
  113. chia/_tests/tools/test_run_block.py +3 -1
  114. chia/_tests/util/benchmark_cost.py +3 -3
  115. chia/_tests/util/benchmarks.py +2 -2
  116. chia/_tests/util/blockchain.py +11 -5
  117. chia/_tests/util/blockchain_mock.py +1 -4
  118. chia/_tests/util/coin_store.py +29 -0
  119. chia/_tests/util/constants.py +2 -18
  120. chia/_tests/util/full_sync.py +3 -3
  121. chia/_tests/util/generator_tools_testing.py +2 -3
  122. chia/_tests/util/key_tool.py +2 -3
  123. chia/_tests/util/misc.py +33 -31
  124. chia/_tests/util/network_protocol_data.py +19 -17
  125. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  126. chia/_tests/util/protocol_messages_json.py +3 -1
  127. chia/_tests/util/run_block.py +2 -2
  128. chia/_tests/util/setup_nodes.py +7 -7
  129. chia/_tests/util/spend_sim.py +47 -55
  130. chia/_tests/util/test_condition_tools.py +5 -4
  131. chia/_tests/util/test_config.py +2 -2
  132. chia/_tests/util/test_dump_keyring.py +1 -1
  133. chia/_tests/util/test_full_block_utils.py +12 -14
  134. chia/_tests/util/test_misc.py +2 -2
  135. chia/_tests/util/test_paginator.py +4 -4
  136. chia/_tests/util/test_priority_mutex.py +2 -2
  137. chia/_tests/util/test_replace_str_to_bytes.py +15 -5
  138. chia/_tests/util/test_ssl_check.py +1 -1
  139. chia/_tests/util/test_testnet_overrides.py +13 -3
  140. chia/_tests/util/time_out_assert.py +4 -2
  141. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +1 -1
  142. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -2
  143. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +352 -432
  144. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +3 -6
  145. chia/_tests/wallet/cat_wallet/test_trades.py +53 -77
  146. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -1
  147. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +3 -3
  148. chia/_tests/wallet/clawback/test_clawback_metadata.py +4 -2
  149. chia/_tests/wallet/conftest.py +11 -12
  150. chia/_tests/wallet/db_wallet/test_db_graftroot.py +11 -4
  151. chia/_tests/wallet/db_wallet/test_dl_offers.py +433 -130
  152. chia/_tests/wallet/db_wallet/test_dl_wallet.py +3 -3
  153. chia/_tests/wallet/did_wallet/test_did.py +2132 -2000
  154. chia/_tests/wallet/nft_wallet/config.py +1 -1
  155. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1610 -742
  156. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +486 -907
  157. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +4 -4
  158. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +517 -294
  159. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +133 -62
  160. chia/_tests/wallet/rpc/test_wallet_rpc.py +495 -265
  161. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +10 -6
  162. chia/_tests/wallet/sync/test_wallet_sync.py +89 -60
  163. chia/_tests/wallet/test_clvm_casts.py +88 -0
  164. chia/_tests/wallet/test_coin_management.py +1 -1
  165. chia/_tests/wallet/test_coin_selection.py +1 -1
  166. chia/_tests/wallet/test_conditions.py +1 -1
  167. chia/_tests/wallet/test_new_wallet_protocol.py +13 -11
  168. chia/_tests/wallet/test_notifications.py +5 -3
  169. chia/_tests/wallet/test_sign_coin_spends.py +6 -6
  170. chia/_tests/wallet/test_signer_protocol.py +13 -12
  171. chia/_tests/wallet/test_singleton.py +1 -1
  172. chia/_tests/wallet/test_singleton_lifecycle_fast.py +5 -7
  173. chia/_tests/wallet/test_util.py +2 -2
  174. chia/_tests/wallet/test_wallet.py +108 -29
  175. chia/_tests/wallet/test_wallet_action_scope.py +9 -2
  176. chia/_tests/wallet/test_wallet_blockchain.py +2 -3
  177. chia/_tests/wallet/test_wallet_key_val_store.py +1 -2
  178. chia/_tests/wallet/test_wallet_node.py +2 -4
  179. chia/_tests/wallet/test_wallet_retry.py +4 -2
  180. chia/_tests/wallet/test_wallet_state_manager.py +191 -5
  181. chia/_tests/wallet/test_wallet_test_framework.py +1 -1
  182. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +8 -8
  183. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -12
  184. chia/_tests/wallet/wallet_block_tools.py +6 -6
  185. chia/_tests/weight_proof/test_weight_proof.py +10 -48
  186. chia/apis.py +1 -1
  187. chia/cmds/beta.py +1 -1
  188. chia/cmds/chia.py +9 -9
  189. chia/cmds/cmd_classes.py +12 -11
  190. chia/cmds/cmd_helpers.py +1 -1
  191. chia/cmds/cmds_util.py +12 -9
  192. chia/cmds/coin_funcs.py +2 -2
  193. chia/cmds/configure.py +2 -2
  194. chia/cmds/data.py +0 -2
  195. chia/cmds/data_funcs.py +1 -1
  196. chia/cmds/db_validate_func.py +1 -2
  197. chia/cmds/dev/__init__.py +0 -0
  198. chia/cmds/dev/data.py +273 -0
  199. chia/cmds/{gh.py → dev/gh.py} +5 -5
  200. chia/cmds/dev/main.py +22 -0
  201. chia/cmds/dev/mempool.py +78 -0
  202. chia/cmds/dev/mempool_funcs.py +63 -0
  203. chia/cmds/farm_funcs.py +5 -4
  204. chia/cmds/init_funcs.py +11 -11
  205. chia/cmds/keys.py +2 -2
  206. chia/cmds/keys_funcs.py +4 -4
  207. chia/cmds/netspace_funcs.py +1 -1
  208. chia/cmds/peer_funcs.py +2 -2
  209. chia/cmds/plotnft_funcs.py +72 -26
  210. chia/cmds/rpc.py +1 -1
  211. chia/cmds/show_funcs.py +5 -5
  212. chia/cmds/signer.py +8 -7
  213. chia/cmds/sim_funcs.py +8 -9
  214. chia/cmds/wallet.py +2 -2
  215. chia/cmds/wallet_funcs.py +165 -131
  216. chia/{util → consensus}/augmented_chain.py +1 -2
  217. chia/consensus/block_body_validation.py +54 -40
  218. chia/consensus/block_creation.py +42 -76
  219. chia/consensus/block_header_validation.py +32 -26
  220. chia/consensus/block_record.py +0 -3
  221. chia/consensus/blockchain.py +23 -32
  222. chia/consensus/blockchain_interface.py +1 -5
  223. chia/consensus/check_time_locks.py +57 -0
  224. chia/consensus/coin_store_protocol.py +151 -0
  225. chia/consensus/coinbase.py +0 -6
  226. chia/consensus/condition_costs.py +4 -0
  227. chia/{util → consensus}/condition_tools.py +4 -5
  228. chia/consensus/cost_calculator.py +1 -1
  229. chia/consensus/default_constants.py +32 -9
  230. chia/consensus/deficit.py +1 -3
  231. chia/consensus/difficulty_adjustment.py +1 -2
  232. chia/consensus/find_fork_point.py +1 -3
  233. chia/consensus/full_block_to_block_record.py +1 -6
  234. chia/{util → consensus}/generator_tools.py +1 -3
  235. chia/consensus/get_block_challenge.py +30 -7
  236. chia/consensus/make_sub_epoch_summary.py +1 -5
  237. chia/consensus/multiprocess_validation.py +21 -20
  238. chia/consensus/pot_iterations.py +74 -13
  239. chia/{util → consensus}/prev_transaction_block.py +1 -1
  240. chia/consensus/vdf_info_computation.py +1 -3
  241. chia/daemon/keychain_proxy.py +5 -5
  242. chia/daemon/server.py +22 -5
  243. chia/data_layer/data_layer.py +92 -51
  244. chia/{rpc → data_layer}/data_layer_rpc_api.py +1 -1
  245. chia/{rpc → data_layer}/data_layer_rpc_util.py +3 -6
  246. chia/data_layer/data_layer_util.py +4 -6
  247. chia/data_layer/data_layer_wallet.py +42 -69
  248. chia/data_layer/dl_wallet_store.py +12 -6
  249. chia/data_layer/download_data.py +3 -3
  250. chia/data_layer/s3_plugin_service.py +0 -1
  251. chia/farmer/farmer.py +3 -4
  252. chia/farmer/farmer_api.py +11 -7
  253. chia/{rpc → farmer}/farmer_rpc_client.py +1 -1
  254. chia/full_node/block_height_map.py +7 -6
  255. chia/full_node/block_store.py +5 -7
  256. chia/full_node/bundle_tools.py +1 -2
  257. chia/full_node/coin_store.py +153 -124
  258. chia/{types → full_node}/eligible_coin_spends.py +39 -70
  259. chia/full_node/fee_estimator.py +1 -1
  260. chia/full_node/fee_estimator_interface.py +0 -8
  261. chia/full_node/fee_tracker.py +25 -25
  262. chia/full_node/full_node.py +70 -53
  263. chia/full_node/full_node_api.py +57 -40
  264. chia/{rpc → full_node}/full_node_rpc_api.py +87 -8
  265. chia/{rpc → full_node}/full_node_rpc_client.py +7 -6
  266. chia/full_node/full_node_store.py +23 -8
  267. chia/full_node/mempool.py +206 -53
  268. chia/full_node/mempool_check_conditions.py +20 -63
  269. chia/full_node/mempool_manager.py +53 -47
  270. chia/full_node/subscriptions.py +1 -3
  271. chia/full_node/tx_processing_queue.py +50 -3
  272. chia/full_node/weight_proof.py +46 -37
  273. chia/harvester/harvester.py +1 -1
  274. chia/harvester/harvester_api.py +22 -7
  275. chia/introducer/introducer.py +1 -1
  276. chia/introducer/introducer_api.py +1 -1
  277. chia/plot_sync/exceptions.py +1 -1
  278. chia/plot_sync/receiver.py +1 -1
  279. chia/plot_sync/sender.py +2 -2
  280. chia/pools/pool_puzzles.py +13 -18
  281. chia/pools/pool_wallet.py +23 -46
  282. chia/protocols/farmer_protocol.py +11 -3
  283. chia/protocols/full_node_protocol.py +1 -4
  284. chia/protocols/harvester_protocol.py +3 -3
  285. chia/protocols/pool_protocol.py +1 -2
  286. chia/protocols/shared_protocol.py +3 -3
  287. chia/protocols/timelord_protocol.py +1 -3
  288. chia/protocols/wallet_protocol.py +3 -3
  289. chia/rpc/rpc_client.py +7 -8
  290. chia/rpc/rpc_server.py +3 -3
  291. chia/rpc/util.py +3 -1
  292. chia/seeder/crawler.py +1 -1
  293. chia/seeder/crawler_api.py +1 -1
  294. chia/seeder/dns_server.py +2 -0
  295. chia/seeder/start_crawler.py +3 -3
  296. chia/server/address_manager.py +286 -38
  297. chia/server/address_manager_store.py +0 -215
  298. chia/{types → server}/aliases.py +7 -7
  299. chia/server/api_protocol.py +1 -1
  300. chia/server/chia_policy.py +1 -1
  301. chia/server/node_discovery.py +76 -113
  302. chia/server/rate_limits.py +1 -1
  303. chia/server/resolve_peer_info.py +43 -0
  304. chia/server/server.py +5 -5
  305. chia/server/start_data_layer.py +4 -4
  306. chia/server/start_farmer.py +5 -4
  307. chia/server/start_full_node.py +5 -4
  308. chia/server/start_harvester.py +7 -5
  309. chia/server/start_introducer.py +2 -2
  310. chia/server/start_service.py +1 -1
  311. chia/server/start_timelord.py +7 -5
  312. chia/server/start_wallet.py +7 -5
  313. chia/server/ws_connection.py +1 -1
  314. chia/simulator/add_blocks_in_batches.py +2 -2
  315. chia/simulator/block_tools.py +245 -201
  316. chia/simulator/full_node_simulator.py +38 -10
  317. chia/simulator/setup_services.py +12 -12
  318. chia/simulator/simulator_full_node_rpc_api.py +2 -2
  319. chia/simulator/simulator_full_node_rpc_client.py +2 -2
  320. chia/simulator/simulator_test_tools.py +2 -2
  321. chia/simulator/start_simulator.py +1 -1
  322. chia/simulator/wallet_tools.py +10 -18
  323. chia/ssl/create_ssl.py +1 -1
  324. chia/timelord/iters_from_block.py +14 -14
  325. chia/timelord/timelord.py +15 -11
  326. chia/timelord/timelord_api.py +14 -2
  327. chia/timelord/timelord_state.py +20 -14
  328. chia/types/blockchain_format/program.py +53 -10
  329. chia/types/blockchain_format/proof_of_space.py +73 -19
  330. chia/types/coin_spend.py +3 -56
  331. chia/types/generator_types.py +28 -0
  332. chia/types/internal_mempool_item.py +1 -2
  333. chia/types/mempool_item.py +12 -7
  334. chia/types/unfinished_header_block.py +1 -2
  335. chia/types/validation_state.py +1 -2
  336. chia/types/weight_proof.py +1 -3
  337. chia/util/action_scope.py +3 -3
  338. chia/util/block_cache.py +1 -2
  339. chia/util/byte_types.py +1 -1
  340. chia/util/casts.py +21 -0
  341. chia/util/config.py +0 -37
  342. chia/util/db_wrapper.py +8 -1
  343. chia/util/errors.py +3 -2
  344. chia/util/initial-config.yaml +21 -5
  345. chia/util/keychain.py +6 -7
  346. chia/util/keyring_wrapper.py +5 -5
  347. chia/util/limited_semaphore.py +1 -1
  348. chia/util/priority_mutex.py +1 -1
  349. chia/util/streamable.py +63 -5
  350. chia/util/task_timing.py +1 -1
  351. chia/util/virtual_project_analysis.py +1 -1
  352. chia/wallet/cat_wallet/cat_info.py +7 -3
  353. chia/wallet/cat_wallet/cat_outer_puzzle.py +9 -5
  354. chia/wallet/cat_wallet/cat_utils.py +1 -1
  355. chia/wallet/cat_wallet/cat_wallet.py +44 -36
  356. chia/wallet/cat_wallet/lineage_store.py +7 -0
  357. chia/wallet/cat_wallet/r_cat_wallet.py +274 -0
  358. chia/wallet/conditions.py +5 -10
  359. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -4
  360. chia/wallet/derivation_record.py +33 -0
  361. chia/wallet/derive_keys.py +3 -3
  362. chia/wallet/did_wallet/did_info.py +12 -3
  363. chia/wallet/did_wallet/did_wallet.py +132 -101
  364. chia/wallet/did_wallet/did_wallet_puzzles.py +9 -9
  365. chia/wallet/driver_protocol.py +3 -1
  366. chia/{types/spend_bundle.py → wallet/estimate_fees.py} +2 -7
  367. chia/wallet/nft_wallet/metadata_outer_puzzle.py +5 -3
  368. chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
  369. chia/wallet/nft_wallet/nft_wallet.py +69 -112
  370. chia/wallet/nft_wallet/ownership_outer_puzzle.py +5 -3
  371. chia/wallet/nft_wallet/singleton_outer_puzzle.py +6 -4
  372. chia/wallet/nft_wallet/transfer_program_puzzle.py +4 -2
  373. chia/wallet/nft_wallet/uncurry_nft.py +4 -6
  374. chia/wallet/notification_manager.py +2 -3
  375. chia/wallet/outer_puzzles.py +7 -2
  376. chia/wallet/puzzle_drivers.py +1 -1
  377. chia/wallet/puzzles/clawback/drivers.py +5 -4
  378. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -1
  379. chia/wallet/puzzles/singleton_top_layer.py +2 -1
  380. chia/wallet/puzzles/singleton_top_layer_v1_1.py +2 -1
  381. chia/wallet/puzzles/tails.py +1 -3
  382. chia/wallet/signer_protocol.py +5 -6
  383. chia/wallet/singleton.py +5 -4
  384. chia/wallet/singleton_record.py +1 -1
  385. chia/wallet/trade_manager.py +18 -20
  386. chia/wallet/trade_record.py +3 -6
  387. chia/wallet/trading/offer.py +12 -13
  388. chia/wallet/uncurried_puzzle.py +2 -2
  389. chia/wallet/util/compute_additions.py +58 -0
  390. chia/wallet/util/compute_hints.py +3 -3
  391. chia/wallet/util/compute_memos.py +4 -4
  392. chia/wallet/util/curry_and_treehash.py +2 -1
  393. chia/wallet/util/debug_spend_bundle.py +1 -1
  394. chia/wallet/util/merkle_tree.py +1 -1
  395. chia/wallet/util/peer_request_cache.py +1 -2
  396. chia/wallet/util/tx_config.py +3 -8
  397. chia/wallet/util/wallet_sync_utils.py +10 -5
  398. chia/wallet/util/wallet_types.py +1 -0
  399. chia/wallet/vc_wallet/cr_cat_drivers.py +17 -18
  400. chia/wallet/vc_wallet/cr_cat_wallet.py +30 -28
  401. chia/wallet/vc_wallet/cr_outer_puzzle.py +5 -3
  402. chia/wallet/vc_wallet/vc_drivers.py +50 -8
  403. chia/wallet/vc_wallet/vc_store.py +3 -5
  404. chia/wallet/vc_wallet/vc_wallet.py +15 -22
  405. chia/wallet/wallet.py +36 -46
  406. chia/wallet/wallet_action_scope.py +73 -4
  407. chia/wallet/wallet_blockchain.py +1 -3
  408. chia/wallet/wallet_interested_store.py +1 -1
  409. chia/wallet/wallet_nft_store.py +3 -3
  410. chia/wallet/wallet_node.py +17 -16
  411. chia/wallet/wallet_node_api.py +4 -5
  412. chia/wallet/wallet_pool_store.py +1 -1
  413. chia/wallet/wallet_protocol.py +2 -0
  414. chia/wallet/wallet_puzzle_store.py +1 -1
  415. chia/{rpc → wallet}/wallet_request_types.py +670 -81
  416. chia/{rpc → wallet}/wallet_rpc_api.py +735 -766
  417. chia/{rpc → wallet}/wallet_rpc_client.py +268 -420
  418. chia/wallet/wallet_singleton_store.py +8 -7
  419. chia/wallet/wallet_spend_bundle.py +4 -3
  420. chia/wallet/wallet_state_manager.py +320 -191
  421. chia/wallet/wallet_weight_proof_handler.py +1 -2
  422. chia/wallet/wsm_apis.py +98 -0
  423. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/METADATA +7 -7
  424. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/RECORD +443 -436
  425. mozilla-ca/cacert.pem +3 -165
  426. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +0 -145
  427. chia/cmds/dev.py +0 -18
  428. chia/types/blockchain_format/slots.py +0 -9
  429. chia/types/blockchain_format/sub_epoch_summary.py +0 -5
  430. chia/types/end_of_slot_bundle.py +0 -5
  431. chia/types/full_block.py +0 -5
  432. chia/types/header_block.py +0 -5
  433. chia/types/spend_bundle_conditions.py +0 -7
  434. chia/types/transaction_queue_entry.py +0 -56
  435. chia/types/unfinished_block.py +0 -5
  436. /chia/cmds/{installers.py → dev/installers.py} +0 -0
  437. /chia/cmds/{sim.py → dev/sim.py} +0 -0
  438. /chia/{util → cmds}/dump_keyring.py +0 -0
  439. /chia/{full_node → consensus}/signage_point.py +0 -0
  440. /chia/{rpc → data_layer}/data_layer_rpc_client.py +0 -0
  441. /chia/{rpc → farmer}/farmer_rpc_api.py +0 -0
  442. /chia/{util → full_node}/full_block_utils.py +0 -0
  443. /chia/{rpc → harvester}/harvester_rpc_api.py +0 -0
  444. /chia/{rpc → harvester}/harvester_rpc_client.py +0 -0
  445. /chia/{full_node → protocols}/fee_estimate.py +0 -0
  446. /chia/{server → protocols}/outbound_message.py +0 -0
  447. /chia/{rpc → seeder}/crawler_rpc_api.py +0 -0
  448. /chia/{util → simulator}/vdf_prover.py +0 -0
  449. /chia/{util → ssl}/ssl_check.py +0 -0
  450. /chia/{rpc → timelord}/timelord_rpc_api.py +0 -0
  451. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/LICENSE +0 -0
  452. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/WHEEL +0 -0
  453. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/entry_points.txt +0 -0
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import re
4
4
 
5
5
  import pytest
6
- from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
6
+ from chia_rs import AugSchemeMPL, CoinSpend, G1Element, G2Element, PrivateKey
7
7
  from chia_rs.sized_bytes import bytes32
8
8
  from chia_rs.sized_ints import uint32, uint64
9
9
 
@@ -11,7 +11,7 @@ from chia.consensus.default_constants import DEFAULT_CONSTANTS
11
11
  from chia.types.blockchain_format.coin import Coin
12
12
  from chia.types.blockchain_format.program import Program
13
13
  from chia.types.blockchain_format.serialized_program import SerializedProgram
14
- from chia.types.coin_spend import CoinSpend, make_spend
14
+ from chia.types.coin_spend import make_spend
15
15
  from chia.types.condition_opcodes import ConditionOpcode
16
16
  from chia.util.db_wrapper import DBWrapper2, manage_connection
17
17
  from chia.wallet.derivation_record import DerivationRecord
@@ -47,11 +47,11 @@ additional_data: bytes32 = bytes32(DEFAULT_CONSTANTS.AGG_SIG_ME_ADDITIONAL_DATA)
47
47
 
48
48
  coin: Coin = Coin(bytes32.zeros, bytes32.zeros, uint64(0))
49
49
  puzzle = SerializedProgram.from_bytes(b"\x01")
50
- solution_h = SerializedProgram.from_program(
51
- Program.to([[ConditionOpcode.AGG_SIG_UNSAFE, pk1_h, msg1], [ConditionOpcode.AGG_SIG_ME, pk2_h_synth, msg2]])
50
+ solution_h = Program.to(
51
+ [[ConditionOpcode.AGG_SIG_UNSAFE, pk1_h, msg1], [ConditionOpcode.AGG_SIG_ME, pk2_h_synth, msg2]]
52
52
  )
53
- solution_u = SerializedProgram.from_program(
54
- Program.to([[ConditionOpcode.AGG_SIG_UNSAFE, pk1_u, msg1], [ConditionOpcode.AGG_SIG_ME, pk2_u_synth, msg2]])
53
+ solution_u = Program.to(
54
+ [[ConditionOpcode.AGG_SIG_UNSAFE, pk1_u, msg1], [ConditionOpcode.AGG_SIG_ME, pk2_u_synth, msg2]]
55
55
  )
56
56
  spend_h: CoinSpend = make_spend(
57
57
  coin,
@@ -5,7 +5,7 @@ from typing import Optional
5
5
 
6
6
  import click
7
7
  import pytest
8
- from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
8
+ from chia_rs import AugSchemeMPL, CoinSpend, G1Element, G2Element, PrivateKey
9
9
  from chia_rs.sized_bytes import bytes32
10
10
  from chia_rs.sized_ints import uint64
11
11
  from click.testing import CliRunner
@@ -26,17 +26,9 @@ from chia.cmds.signer import (
26
26
  SPOut,
27
27
  )
28
28
  from chia.rpc.util import ALL_TRANSLATION_LAYERS
29
- from chia.rpc.wallet_request_types import (
30
- ApplySignatures,
31
- ExecuteSigningInstructions,
32
- GatherSigningInfo,
33
- GatherSigningInfoResponse,
34
- SubmitTransactions,
35
- )
36
- from chia.rpc.wallet_rpc_client import WalletRpcClient
37
29
  from chia.types.blockchain_format.coin import Coin as ConsensusCoin
38
30
  from chia.types.blockchain_format.program import Program
39
- from chia.types.coin_spend import CoinSpend, make_spend
31
+ from chia.types.coin_spend import make_spend
40
32
  from chia.util.hash import std_hash
41
33
  from chia.util.streamable import Streamable
42
34
  from chia.wallet.conditions import AggSigMe
@@ -76,8 +68,15 @@ from chia.wallet.util.clvm_streamable import (
76
68
  json_deserialize_with_clvm_streamable,
77
69
  json_serialize_with_clvm_streamable,
78
70
  )
79
- from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
80
71
  from chia.wallet.wallet import Wallet
72
+ from chia.wallet.wallet_request_types import (
73
+ ApplySignatures,
74
+ ExecuteSigningInstructions,
75
+ GatherSigningInfo,
76
+ GatherSigningInfoResponse,
77
+ SubmitTransactions,
78
+ )
79
+ from chia.wallet.wallet_rpc_client import WalletRpcClient
81
80
  from chia.wallet.wallet_spend_bundle import WalletSpendBundle
82
81
  from chia.wallet.wallet_state_manager import WalletStateManager
83
82
 
@@ -614,7 +613,9 @@ async def test_signer_commands(wallet_environments: WalletTestFramework) -> None
614
613
  )
615
614
 
616
615
  AMOUNT = uint64(1)
617
- async with wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, sign=False, push=False) as action_scope:
616
+ async with wallet_state_manager.new_action_scope(
617
+ wallet_environments.tx_config, sign=False, push=False
618
+ ) as action_scope:
618
619
  await wallet.generate_signed_transaction([AMOUNT], [bytes32.zeros], action_scope)
619
620
  [tx] = action_scope.side_effects.transactions
620
621
 
@@ -4,8 +4,8 @@ import pytest
4
4
  from chia_rs.sized_bytes import bytes32
5
5
  from clvm_tools import binutils
6
6
 
7
+ from chia.consensus.condition_tools import parse_sexp_to_conditions
7
8
  from chia.types.blockchain_format.program import INFINITE_COST, Program
8
- from chia.util.condition_tools import parse_sexp_to_conditions
9
9
  from chia.wallet.conditions import AssertPuzzleAnnouncement
10
10
  from chia.wallet.puzzles.singleton_top_layer import P2_SINGLETON_MOD, SINGLETON_MOD, SINGLETON_MOD_HASH
11
11
  from chia.wallet.puzzles.singleton_top_layer import SINGLETON_LAUNCHER_HASH as LAUNCHER_PUZZLE_HASH
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from dataclasses import dataclass
4
4
  from typing import Any, Callable, Optional, TypeVar, cast, get_args, get_origin
5
5
 
6
- from chia_rs import G1Element, G2Element
6
+ from chia_rs import CoinSpend, G1Element, G2Element
7
7
  from chia_rs.sized_bytes import bytes32
8
8
  from chia_rs.sized_ints import uint32, uint64
9
9
  from clvm_tools import binutils
@@ -14,8 +14,7 @@ from chia.pools.pool_puzzles import POOL_MEMBER_MOD
14
14
  from chia.pools.pool_puzzles import POOL_WAITING_ROOM_MOD as POOL_WAITINGROOM_MOD
15
15
  from chia.types.blockchain_format.coin import Coin
16
16
  from chia.types.blockchain_format.program import Program
17
- from chia.types.blockchain_format.serialized_program import SerializedProgram
18
- from chia.types.coin_spend import CoinSpend, compute_additions, make_spend
17
+ from chia.types.coin_spend import make_spend
19
18
  from chia.types.condition_opcodes import ConditionOpcode
20
19
  from chia.wallet.conditions import AssertCoinAnnouncement
21
20
  from chia.wallet.puzzles.singleton_top_layer import (
@@ -24,6 +23,7 @@ from chia.wallet.puzzles.singleton_top_layer import (
24
23
  from chia.wallet.puzzles.singleton_top_layer import P2_SINGLETON_OR_DELAYED_MOD_HASH as P2_SINGLETON_MOD_HASH
25
24
  from chia.wallet.puzzles.singleton_top_layer import SINGLETON_LAUNCHER, SINGLETON_MOD, SINGLETON_MOD_HASH
26
25
  from chia.wallet.puzzles.singleton_top_layer import SINGLETON_LAUNCHER_HASH as LAUNCHER_PUZZLE_HASH
26
+ from chia.wallet.util.compute_additions import compute_additions
27
27
  from chia.wallet.util.debug_spend_bundle import debug_spend_bundle
28
28
  from chia.wallet.wallet_spend_bundle import WalletSpendBundle
29
29
 
@@ -328,7 +328,7 @@ def launcher_conditions_and_spend_bundle(
328
328
  launcher_amount=launcher_amount,
329
329
  metadata=metadata,
330
330
  )
331
- coin_spend = make_spend(launcher_coin, SerializedProgram.from_program(launcher_puzzle), solution)
331
+ coin_spend = make_spend(launcher_coin, launcher_puzzle, solution)
332
332
  spend_bundle = WalletSpendBundle([coin_spend], G2Element())
333
333
  return launcher_id, expected_conditions, spend_bundle
334
334
 
@@ -387,9 +387,7 @@ def claim_p2_singleton(
387
387
  singleton_inner_puzzle_hash=inner_puzzle_hash,
388
388
  p2_singleton_coin_name=bytes32(p2_singleton_coin_name),
389
389
  )
390
- p2_singleton_coin_spend = make_spend(
391
- p2_singleton_coin, SerializedProgram.from_program(p2_singleton_puzzle), p2_singleton_solution
392
- )
390
+ p2_singleton_coin_spend = make_spend(p2_singleton_coin, p2_singleton_puzzle, p2_singleton_solution)
393
391
  expected_p2_singleton_announcement = AssertCoinAnnouncement(
394
392
  asserted_id=p2_singleton_coin_name, asserted_msg=b"$"
395
393
  ).msg_calc
@@ -44,11 +44,11 @@ def test_compute_spend_hints_and_additions() -> None:
44
44
 
45
45
  with pytest.raises(ValidationError):
46
46
  compute_spend_hints_and_additions(
47
- make_spend(parent_coin.coin, Program.to(1), Program.to([[51, bytes32.zeros, 0] for _ in range(0, 10000)]))
47
+ make_spend(parent_coin.coin, Program.to(1), Program.to([[51, bytes32.zeros, 0] for _ in range(10000)]))
48
48
  )
49
49
  with pytest.raises(ValidationError):
50
50
  compute_spend_hints_and_additions(
51
- make_spend(parent_coin.coin, Program.to(1), Program.to([[50, bytes48.zeros, b""] for _ in range(0, 10000)]))
51
+ make_spend(parent_coin.coin, Program.to(1), Program.to([[50, bytes48.zeros, b""] for _ in range(10000)]))
52
52
  )
53
53
 
54
54
 
@@ -5,33 +5,33 @@ from pathlib import Path
5
5
  from typing import Any, Optional
6
6
 
7
7
  import pytest
8
- from chia_rs import AugSchemeMPL, G1Element, G2Element
8
+ from chia_rs import AugSchemeMPL, CoinSpend, G1Element, G2Element
9
9
  from chia_rs.sized_bytes import bytes32
10
10
  from chia_rs.sized_ints import uint16, uint32, uint64
11
11
 
12
12
  from chia._tests.environments.wallet import WalletStateTransition, WalletTestFramework
13
13
  from chia._tests.util.time_out_assert import time_out_assert
14
- from chia.rpc.wallet_request_types import GetTransactionMemo
15
14
  from chia.server.server import ChiaServer
16
15
  from chia.simulator.block_tools import BlockTools
17
16
  from chia.simulator.full_node_simulator import FullNodeSimulator
18
17
  from chia.simulator.simulator_protocol import ReorgProtocol
19
18
  from chia.types.blockchain_format.program import Program
20
- from chia.types.coin_spend import CoinSpend, compute_additions
21
19
  from chia.types.peer_info import PeerInfo
22
20
  from chia.types.signing_mode import CHIP_0002_SIGN_MESSAGE_PREFIX
23
- from chia.types.spend_bundle import estimate_fees
24
21
  from chia.util.bech32m import encode_puzzle_hash
25
22
  from chia.util.errors import Err
26
- from chia.wallet.conditions import ConditionValidTimes, CreateCoin
23
+ from chia.wallet.conditions import ConditionValidTimes
27
24
  from chia.wallet.derive_keys import master_sk_to_wallet_sk
25
+ from chia.wallet.estimate_fees import estimate_fees
28
26
  from chia.wallet.puzzles.clawback.metadata import AutoClaimSettings
29
27
  from chia.wallet.transaction_record import TransactionRecord
28
+ from chia.wallet.util.compute_additions import compute_additions
30
29
  from chia.wallet.util.query_filter import TransactionTypeFilter
31
30
  from chia.wallet.util.transaction_type import TransactionType
32
31
  from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
33
32
  from chia.wallet.util.wallet_types import CoinType
34
33
  from chia.wallet.wallet_node import WalletNode, get_wallet_db_path
34
+ from chia.wallet.wallet_request_types import GetTransactionMemo
35
35
 
36
36
 
37
37
  class TestWalletSimulator:
@@ -187,10 +187,11 @@ class TestWalletSimulator:
187
187
  wsm_1 = env_1.wallet_state_manager
188
188
 
189
189
  tx_amount = 500
190
- normal_puzhash = await wallet_1.get_new_puzzlehash()
190
+ async with wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
191
+ normal_puzhash = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
191
192
 
192
193
  # Transfer to normal wallet
193
- for _ in range(0, number_of_coins):
194
+ for _ in range(number_of_coins):
194
195
  async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
195
196
  await wallet.generate_signed_transaction(
196
197
  [uint64(tx_amount)],
@@ -337,7 +338,9 @@ class TestWalletSimulator:
337
338
  api_1 = env_2.rpc_api
338
339
 
339
340
  tx_amount = 500
340
- normal_puzhash = await wallet_1.get_new_puzzlehash()
341
+ async with wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
342
+ normal_puzhash = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
343
+
341
344
  # Transfer to normal wallet
342
345
  async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
343
346
  await wallet.generate_signed_transaction(
@@ -398,7 +401,11 @@ class TestWalletSimulator:
398
401
 
399
402
  test_fee = 10
400
403
  resp = await api_0.spend_clawback_coins(
401
- {"coin_ids": [normal_puzhash.hex(), merkle_coin.name().hex()], "fee": test_fee}
404
+ {
405
+ "coin_ids": [normal_puzhash.hex(), merkle_coin.name().hex()],
406
+ "fee": test_fee,
407
+ **wallet_environments.tx_config.to_json_dict(),
408
+ }
402
409
  )
403
410
  assert resp["success"]
404
411
  assert len(resp["transaction_ids"]) == 1
@@ -479,9 +486,9 @@ class TestWalletSimulator:
479
486
  api_0 = env.rpc_api
480
487
 
481
488
  tx_amount = 500
482
- normal_puzhash = await wallet.get_new_puzzlehash()
483
489
  # Transfer to normal wallet
484
490
  async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
491
+ normal_puzhash = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
485
492
  await wallet.generate_signed_transaction(
486
493
  [uint64(tx_amount)],
487
494
  [normal_puzhash],
@@ -527,7 +534,11 @@ class TestWalletSimulator:
527
534
  merkle_coin = tx.additions[0] if tx.additions[0].amount == tx_amount else tx.additions[1]
528
535
  test_fee = 10
529
536
  resp = await api_0.spend_clawback_coins(
530
- {"coin_ids": [merkle_coin.name().hex(), normal_puzhash.hex()], "fee": test_fee}
537
+ {
538
+ "coin_ids": [merkle_coin.name().hex(), normal_puzhash.hex()],
539
+ "fee": test_fee,
540
+ **wallet_environments.tx_config.to_json_dict(),
541
+ }
531
542
  )
532
543
  assert resp["success"]
533
544
  assert len(resp["transaction_ids"]) == 1
@@ -596,7 +607,8 @@ class TestWalletSimulator:
596
607
  api_1 = env_2.rpc_api
597
608
 
598
609
  tx_amount = 500
599
- normal_puzhash = await wallet_1.get_new_puzzlehash()
610
+ async with wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
611
+ normal_puzhash = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
600
612
  # Transfer to normal wallet
601
613
  async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
602
614
  await wallet.generate_signed_transaction(
@@ -659,7 +671,11 @@ class TestWalletSimulator:
659
671
  merkle_coin = tx.additions[0] if tx.additions[0].amount == tx_amount else tx.additions[1]
660
672
  test_fee = 10
661
673
  resp = await api_1.spend_clawback_coins(
662
- {"coin_ids": [merkle_coin.name().hex(), normal_puzhash.hex()], "fee": test_fee}
674
+ {
675
+ "coin_ids": [merkle_coin.name().hex(), normal_puzhash.hex()],
676
+ "fee": test_fee,
677
+ **wallet_environments.tx_config.to_json_dict(),
678
+ }
663
679
  )
664
680
  assert resp["success"]
665
681
  assert len(resp["transaction_ids"]) == 1
@@ -728,7 +744,8 @@ class TestWalletSimulator:
728
744
  wallet_1 = env_2.xch_wallet
729
745
 
730
746
  tx_amount = 500
731
- normal_puzhash = await wallet_1.get_new_puzzlehash()
747
+ async with wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
748
+ normal_puzhash = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
732
749
  # Transfer to normal wallet
733
750
  async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
734
751
  await wallet.generate_signed_transaction(
@@ -976,8 +993,10 @@ class TestWalletSimulator:
976
993
  wallet_2 = env_2.xch_wallet
977
994
  api_1 = env_1.rpc_api
978
995
 
979
- wallet_1_puzhash = await wallet_1.get_new_puzzlehash()
980
- wallet_2_puzhash = await wallet_2.get_new_puzzlehash()
996
+ async with wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
997
+ wallet_1_puzhash = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
998
+ async with wallet_2.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
999
+ wallet_2_puzhash = await action_scope.get_puzzle_hash(wallet_2.wallet_state_manager)
981
1000
 
982
1001
  tx_amount = 500
983
1002
  # Transfer to normal wallet
@@ -1332,10 +1351,14 @@ class TestWalletSimulator:
1332
1351
  wallet_1 = env_1.xch_wallet
1333
1352
 
1334
1353
  tx_amount = 10
1354
+ async with wallet_1.wallet_state_manager.new_action_scope(
1355
+ wallet_environments.tx_config, push=True
1356
+ ) as action_scope:
1357
+ wallet_1_ph = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
1335
1358
  async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
1336
1359
  await wallet_0.generate_signed_transaction(
1337
1360
  [uint64(tx_amount)],
1338
- [await wallet_1.get_puzzle_hash(False)],
1361
+ [wallet_1_ph],
1339
1362
  action_scope,
1340
1363
  uint64(0),
1341
1364
  )
@@ -1378,10 +1401,12 @@ class TestWalletSimulator:
1378
1401
  )
1379
1402
 
1380
1403
  tx_amount = 5
1404
+ async with wallet_0.wallet_state_manager.new_action_scope(
1405
+ wallet_environments.tx_config, push=True
1406
+ ) as action_scope:
1407
+ wallet_0_ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
1381
1408
  async with wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
1382
- await wallet_1.generate_signed_transaction(
1383
- [uint64(tx_amount)], [await wallet_0.get_puzzle_hash(False)], action_scope, uint64(0)
1384
- )
1409
+ await wallet_1.generate_signed_transaction([uint64(tx_amount)], [wallet_0_ph], action_scope, uint64(0))
1385
1410
 
1386
1411
  await wallet_environments.process_pending_states(
1387
1412
  [
@@ -1435,10 +1460,14 @@ class TestWalletSimulator:
1435
1460
 
1436
1461
  tx_amount = 1_750_000_000_000 # ensures we grab both coins
1437
1462
  tx_fee = 10
1463
+ async with wallet_1.wallet_state_manager.new_action_scope(
1464
+ wallet_environments.tx_config, push=True
1465
+ ) as action_scope:
1466
+ wallet_1_ph = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
1438
1467
  async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
1439
1468
  await wallet_0.generate_signed_transaction(
1440
1469
  [uint64(tx_amount)],
1441
- [await wallet_1.get_new_puzzlehash()],
1470
+ [wallet_1_ph],
1442
1471
  action_scope,
1443
1472
  uint64(tx_fee),
1444
1473
  )
@@ -1501,7 +1530,8 @@ class TestWalletSimulator:
1501
1530
 
1502
1531
  tx_amount = 1_750_000_000_000 # ensures we grab both coins
1503
1532
  tx_fee = 10
1504
- ph_2 = await wallet_1.get_new_puzzlehash()
1533
+ async with wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
1534
+ ph_2 = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
1505
1535
  async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
1506
1536
  await wallet_0.generate_signed_transaction(
1507
1537
  [uint64(tx_amount)], [ph_2], action_scope, uint64(tx_fee), memos=[[ph_2]]
@@ -1578,9 +1608,8 @@ class TestWalletSimulator:
1578
1608
  env = wallet_environments.environments[0]
1579
1609
  wallet = env.xch_wallet
1580
1610
 
1581
- ph = await wallet.get_puzzle_hash(False)
1582
- primaries = [CreateCoin(ph, uint64(1000000000 + i)) for i in range(int(wallet.max_send_quantity) + 1)]
1583
1611
  async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
1612
+ ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
1584
1613
  await wallet.generate_signed_transaction(
1585
1614
  [uint64(1)] + [uint64(1000000000 + i) for i in range(int(wallet.max_send_quantity) + 1)],
1586
1615
  [ph] * (wallet.max_send_quantity + 2),
@@ -1608,7 +1637,7 @@ class TestWalletSimulator:
1608
1637
  ">=#max_send_amount": 1, # any amount increase
1609
1638
  "<=#pending_change": -1, # any amount decrease
1610
1639
  "pending_coin_removal_count": -1,
1611
- "unspent_coin_count": len(primaries) + 1,
1640
+ "unspent_coin_count": wallet.max_send_quantity + 2,
1612
1641
  }
1613
1642
  },
1614
1643
  ),
@@ -1743,10 +1772,12 @@ class TestWalletSimulator:
1743
1772
  assert reorg_height is not None
1744
1773
  await full_node_api.farm_blocks_to_puzzlehash(count=3)
1745
1774
 
1775
+ async with wallet_2.wallet_state_manager.new_action_scope(
1776
+ wallet_environments.tx_config, push=True
1777
+ ) as action_scope:
1778
+ wallet_2_ph = await action_scope.get_puzzle_hash(wallet_2.wallet_state_manager)
1746
1779
  async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
1747
- await wallet.generate_signed_transaction(
1748
- [uint64(tx_amount)], [await wallet_2.get_puzzle_hash(False)], action_scope, coins={coin}
1749
- )
1780
+ await wallet.generate_signed_transaction([uint64(tx_amount)], [wallet_2_ph], action_scope, coins={coin})
1750
1781
 
1751
1782
  await wallet_environments.process_pending_states(
1752
1783
  [
@@ -1973,7 +2004,9 @@ class TestWalletSimulator:
1973
2004
 
1974
2005
  # Test general string
1975
2006
  message = "Hello World"
1976
- ph = await env.xch_wallet.get_puzzle_hash(False)
2007
+
2008
+ async with env.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
2009
+ ph = await action_scope.get_puzzle_hash(env.wallet_state_manager)
1977
2010
  response = await api_0.sign_message_by_address({"address": encode_puzzle_hash(ph, "xch"), "message": message})
1978
2011
  puzzle: Program = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, message))
1979
2012
 
@@ -2084,6 +2117,52 @@ class TestWalletSimulator:
2084
2117
  ]
2085
2118
  )
2086
2119
 
2120
+ @pytest.mark.parametrize(
2121
+ "wallet_environments",
2122
+ [{"num_environments": 1, "blocks_needed": [1], "reuse_puzhash": True, "trusted": True}],
2123
+ indirect=True,
2124
+ )
2125
+ @pytest.mark.limit_consensus_modes
2126
+ @pytest.mark.anyio
2127
+ async def test_forced_new_puzzle_hash(self, wallet_environments: WalletTestFramework) -> None:
2128
+ env = wallet_environments.environments[0]
2129
+ wallet = env.xch_wallet
2130
+
2131
+ with wallet_environments.new_puzzle_hashes_allowed():
2132
+ async with wallet.wallet_state_manager.new_action_scope(
2133
+ wallet_environments.tx_config, push=True
2134
+ ) as action_scope:
2135
+ coins = await wallet.select_coins(uint64(1), action_scope)
2136
+ coin_list = list(coins)
2137
+ assert len(coin_list) == 1
2138
+ await wallet.generate_signed_transaction(
2139
+ [uint64(coin_list[0].amount / 2)],
2140
+ [coin_list[0].puzzle_hash],
2141
+ action_scope,
2142
+ coins=coins,
2143
+ )
2144
+ [tx] = action_scope.side_effects.transactions
2145
+ assert tx.spend_bundle is not None
2146
+ assert len(list(set(coin.puzzle_hash for coin in tx.spend_bundle.additions()))) == 2
2147
+
2148
+ @pytest.mark.parametrize(
2149
+ "wallet_environments",
2150
+ [{"num_environments": 1, "blocks_needed": [1], "reuse_puzhash": True, "trusted": True}],
2151
+ indirect=True,
2152
+ )
2153
+ @pytest.mark.limit_consensus_modes
2154
+ @pytest.mark.anyio
2155
+ async def test_puzzle_hashes_not_committed(self, wallet_environments: WalletTestFramework) -> None:
2156
+ env = wallet_environments.environments[0]
2157
+ wallet = env.xch_wallet
2158
+
2159
+ # Our framework
2160
+ async with wallet.wallet_state_manager.new_action_scope(
2161
+ wallet_environments.tx_config,
2162
+ push=False,
2163
+ ) as action_scope:
2164
+ await action_scope.get_puzzle_hash(wallet.wallet_state_manager, override_reuse_puzhash_with=False)
2165
+
2087
2166
 
2088
2167
  def test_get_wallet_db_path_v2_r1() -> None:
2089
2168
  root_path: Path = Path("/x/y/z/.chia/mainnet").resolve()
@@ -4,7 +4,7 @@ from dataclasses import dataclass
4
4
  from typing import Optional
5
5
 
6
6
  import pytest
7
- from chia_rs import G2Element
7
+ from chia_rs import G2Element, Program
8
8
  from chia_rs.sized_bytes import bytes32
9
9
  from chia_rs.sized_ints import uint64
10
10
 
@@ -83,6 +83,7 @@ async def test_wallet_action_scope() -> None:
83
83
  sign=True,
84
84
  additional_signing_responses=[],
85
85
  extra_spends=[],
86
+ puzzle_for_pk=lambda _: Program.to(1),
86
87
  ) as action_scope:
87
88
  async with action_scope.use() as interface:
88
89
  interface.side_effects.transactions = [STD_TX]
@@ -94,7 +95,13 @@ async def test_wallet_action_scope() -> None:
94
95
  assert wsm.most_recent_call == ([STD_TX], True, False, True, [], [], [])
95
96
 
96
97
  async with wsm.new_action_scope( # type: ignore[attr-defined]
97
- DEFAULT_TX_CONFIG, push=False, merge_spends=True, sign=True, additional_signing_responses=[], extra_spends=[]
98
+ DEFAULT_TX_CONFIG,
99
+ push=False,
100
+ merge_spends=True,
101
+ sign=True,
102
+ additional_signing_responses=[],
103
+ extra_spends=[],
104
+ puzzle_for_pk=lambda _: Program.to(1),
98
105
  ) as action_scope:
99
106
  async with action_scope.use() as interface:
100
107
  interface.side_effects.transactions = []
@@ -1,17 +1,16 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import pytest
4
+ from chia_rs import FullBlock, HeaderBlock
4
5
  from chia_rs.sized_ints import uint8, uint32
5
6
 
6
7
  from chia._tests.util.db_connection import DBConnection
7
8
  from chia._tests.util.setup_nodes import OldSimulatorsAndWallets
8
9
  from chia.consensus.blockchain import AddBlockResult
10
+ from chia.consensus.generator_tools import get_block_header
9
11
  from chia.protocols import full_node_protocol
10
12
  from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
11
13
  from chia.types.blockchain_format.vdf import VDFProof
12
- from chia.types.full_block import FullBlock
13
- from chia.types.header_block import HeaderBlock
14
- from chia.util.generator_tools import get_block_header
15
14
  from chia.wallet.key_val_store import KeyValStore
16
15
  from chia.wallet.wallet_blockchain import WalletBlockchain
17
16
 
@@ -1,11 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import pytest
4
+ from chia_rs import FullBlock, HeaderBlock
4
5
 
5
6
  from chia._tests.util.db_connection import DBConnection
6
7
  from chia.simulator.block_tools import BlockTools
7
- from chia.types.full_block import FullBlock
8
- from chia.types.header_block import HeaderBlock
9
8
  from chia.wallet.key_val_store import KeyValStore
10
9
 
11
10
 
@@ -8,7 +8,7 @@ from pathlib import Path
8
8
  from typing import Any, Optional
9
9
 
10
10
  import pytest
11
- from chia_rs import G1Element, PrivateKey
11
+ from chia_rs import CoinState, FullBlock, G1Element, PrivateKey
12
12
  from chia_rs.sized_bytes import bytes32
13
13
  from chia_rs.sized_ints import uint8, uint32, uint64, uint128
14
14
 
@@ -16,14 +16,12 @@ from chia._tests.util.misc import CoinGenerator, patch_request_handler
16
16
  from chia._tests.util.setup_nodes import OldSimulatorsAndWallets
17
17
  from chia._tests.util.time_out_assert import time_out_assert
18
18
  from chia.protocols import wallet_protocol
19
+ from chia.protocols.outbound_message import Message, make_msg
19
20
  from chia.protocols.protocol_message_types import ProtocolMessageTypes
20
- from chia.protocols.wallet_protocol import CoinState
21
21
  from chia.server.api_protocol import Self
22
- from chia.server.outbound_message import Message, make_msg
23
22
  from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
24
23
  from chia.simulator.block_tools import test_constants
25
24
  from chia.types.blockchain_format.coin import Coin
26
- from chia.types.full_block import FullBlock
27
25
  from chia.types.mempool_inclusion_status import MempoolInclusionStatus
28
26
  from chia.types.peer_info import PeerInfo
29
27
  from chia.util.config import load_config
@@ -47,7 +47,8 @@ async def test_wallet_tx_retry(
47
47
  wallet_node_1.config["tx_resend_timeout_secs"] = 5
48
48
  wallet_server_1 = wallets[0][1]
49
49
  wallet_1 = wallet_node_1.wallet_state_manager.main_wallet
50
- reward_ph = await wallet_1.get_new_puzzlehash()
50
+ async with wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
51
+ reward_ph = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
51
52
 
52
53
  await wallet_server_1.start_client(PeerInfo(self_hostname, server_1.get_port()), None)
53
54
 
@@ -74,7 +75,8 @@ async def test_wallet_tx_retry(
74
75
  # Wait some time so wallet will retry
75
76
  await asyncio.sleep(2)
76
77
 
77
- our_ph = await wallet_1.get_new_puzzlehash()
78
+ async with wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
79
+ our_ph = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
78
80
  await farm_blocks(full_node_1, our_ph, 2)
79
81
 
80
82
  # Wait for wallet to catch up