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
@@ -6,6 +6,7 @@ import pytest
6
6
  from chia_rs.sized_bytes import bytes32
7
7
  from chia_rs.sized_ints import uint64
8
8
 
9
+ from chia._tests.environments.wallet import WalletStateTransition, WalletTestFramework
9
10
  from chia._tests.util.time_out_assert import time_out_assert
10
11
  from chia.data_layer.data_layer_wallet import DataLayerWallet
11
12
  from chia.wallet.puzzle_drivers import Solver
@@ -13,7 +14,6 @@ from chia.wallet.trade_record import TradeRecord
13
14
  from chia.wallet.trading.offer import Offer
14
15
  from chia.wallet.trading.trade_status import TradeStatus
15
16
  from chia.wallet.util.merkle_utils import build_merkle_tree, simplify_merkle_proof
16
- from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
17
17
 
18
18
 
19
19
  async def is_singleton_confirmed_and_root(dl_wallet: DataLayerWallet, lid: bytes32, root: bytes32) -> bool:
@@ -37,50 +37,106 @@ def get_parent_branch(value: bytes32, proof: tuple[int, list[bytes32]]) -> tuple
37
37
  return branch, new_proof
38
38
 
39
39
 
40
- @pytest.mark.parametrize("trusted", [True, False])
40
+ @pytest.mark.limit_consensus_modes
41
+ @pytest.mark.parametrize("wallet_environments", [{"num_environments": 2, "blocks_needed": [2, 2]}], indirect=True)
41
42
  @pytest.mark.anyio
42
- async def test_dl_offers(wallets_prefarm: Any, trusted: bool) -> None:
43
- (
44
- [wallet_node_maker, maker_funds],
45
- [wallet_node_taker, taker_funds],
46
- full_node_api,
47
- ) = wallets_prefarm
48
- assert wallet_node_maker.wallet_state_manager is not None
49
- assert wallet_node_taker.wallet_state_manager is not None
50
- wsm_maker = wallet_node_maker.wallet_state_manager
51
- wsm_taker = wallet_node_taker.wallet_state_manager
52
-
53
- async with wsm_maker.lock:
54
- dl_wallet_maker = await DataLayerWallet.create_new_dl_wallet(wsm_maker)
55
- async with wsm_taker.lock:
56
- dl_wallet_taker = await DataLayerWallet.create_new_dl_wallet(wsm_taker)
57
-
58
- MAKER_ROWS = [bytes32([i] * 32) for i in range(0, 10)]
59
- TAKER_ROWS = [bytes32([i] * 32) for i in range(0, 10)]
43
+ async def test_dl_offers(wallet_environments: WalletTestFramework) -> None:
44
+ env_maker = wallet_environments.environments[0]
45
+ env_taker = wallet_environments.environments[1]
46
+ wsm_maker = env_maker.wallet_state_manager
47
+ wsm_taker = env_taker.wallet_state_manager
48
+
49
+ env_maker.wallet_aliases = {
50
+ "xch": 1,
51
+ "dl": 2,
52
+ }
53
+ env_taker.wallet_aliases = {
54
+ "xch": 1,
55
+ "dl": 2,
56
+ }
57
+
58
+ dl_wallet_maker = await DataLayerWallet.create_new_dl_wallet(wsm_maker)
59
+ dl_wallet_taker = await DataLayerWallet.create_new_dl_wallet(wsm_taker)
60
+
61
+ await env_maker.change_balances({"dl": {"init": True}})
62
+ await env_taker.change_balances({"dl": {"init": True}})
63
+
64
+ MAKER_ROWS = [bytes32([i] * 32) for i in range(10)]
65
+ TAKER_ROWS = [bytes32([i] * 32) for i in range(10)]
60
66
  maker_root, _ = build_merkle_tree(MAKER_ROWS)
61
67
  taker_root, _ = build_merkle_tree(TAKER_ROWS)
62
68
 
63
69
  fee = uint64(1_999_999_999_999)
64
70
 
65
- async with dl_wallet_maker.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
71
+ async with dl_wallet_maker.wallet_state_manager.new_action_scope(
72
+ wallet_environments.tx_config, push=True
73
+ ) as action_scope:
66
74
  launcher_id_maker = await dl_wallet_maker.generate_new_reporter(maker_root, action_scope, fee=fee)
67
75
  assert await dl_wallet_maker.get_latest_singleton(launcher_id_maker) is not None
68
- await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
69
- maker_funds -= fee
70
- maker_funds -= 1
76
+
77
+ await wallet_environments.process_pending_states(
78
+ [
79
+ WalletStateTransition(
80
+ pre_block_balance_updates={
81
+ "xch": {
82
+ "set_remainder": True,
83
+ },
84
+ "dl": {
85
+ "set_remainder": True,
86
+ },
87
+ },
88
+ post_block_balance_updates={
89
+ "xch": {
90
+ "set_remainder": True,
91
+ },
92
+ "dl": {
93
+ "set_remainder": True,
94
+ },
95
+ },
96
+ ),
97
+ WalletStateTransition(),
98
+ ]
99
+ )
100
+
71
101
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_maker, launcher_id_maker, maker_root)
72
102
 
73
- async with dl_wallet_taker.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
103
+ async with dl_wallet_taker.wallet_state_manager.new_action_scope(
104
+ wallet_environments.tx_config, push=True
105
+ ) as action_scope:
74
106
  launcher_id_taker = await dl_wallet_taker.generate_new_reporter(taker_root, action_scope, fee=fee)
75
107
  assert await dl_wallet_taker.get_latest_singleton(launcher_id_taker) is not None
76
- await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
77
- taker_funds -= fee
78
- taker_funds -= 1
108
+
109
+ await wallet_environments.process_pending_states(
110
+ [
111
+ WalletStateTransition(),
112
+ WalletStateTransition(
113
+ pre_block_balance_updates={
114
+ "xch": {
115
+ "set_remainder": True,
116
+ },
117
+ "dl": {
118
+ "set_remainder": True,
119
+ },
120
+ },
121
+ post_block_balance_updates={
122
+ "xch": {
123
+ "set_remainder": True,
124
+ },
125
+ "dl": {
126
+ "set_remainder": True,
127
+ },
128
+ },
129
+ ),
130
+ ]
131
+ )
132
+
79
133
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_taker, launcher_id_taker, taker_root)
80
134
 
81
- peer = wallet_node_taker.get_full_node_peer()
135
+ peer = env_taker.node.get_full_node_peer()
82
136
  await dl_wallet_maker.track_new_launcher_id(launcher_id_taker, peer)
83
137
  await dl_wallet_taker.track_new_launcher_id(launcher_id_maker, peer)
138
+ await env_maker.change_balances({"dl": {"unspent_coin_count": 1}})
139
+ await env_taker.change_balances({"dl": {"unspent_coin_count": 1}})
84
140
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_maker, launcher_id_taker, taker_root)
85
141
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_taker, launcher_id_maker, maker_root)
86
142
 
@@ -98,7 +154,9 @@ async def test_dl_offers(wallets_prefarm: Any, trusted: bool) -> None:
98
154
 
99
155
  fee = uint64(2_000_000_000_000)
100
156
 
101
- async with trade_manager_maker.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=False) as action_scope:
157
+ async with trade_manager_maker.wallet_state_manager.new_action_scope(
158
+ wallet_environments.tx_config, push=False
159
+ ) as action_scope:
102
160
  success, offer_maker, error = await trade_manager_maker.create_offer_for_ids(
103
161
  {launcher_id_maker: -1, launcher_id_taker: 1},
104
162
  action_scope,
@@ -136,11 +194,9 @@ async def test_dl_offers(wallets_prefarm: Any, trusted: bool) -> None:
136
194
  ]
137
195
  }
138
196
 
139
- [_maker_offer], signing_response = await wallet_node_maker.wallet_state_manager.sign_offers(
140
- [Offer.from_bytes(offer_maker.offer)]
141
- )
197
+ [_maker_offer], signing_response = await wsm_maker.sign_offers([Offer.from_bytes(offer_maker.offer)])
142
198
  async with trade_manager_taker.wallet_state_manager.new_action_scope(
143
- DEFAULT_TX_CONFIG, push=True, additional_signing_responses=signing_response
199
+ wallet_environments.tx_config, push=True, additional_signing_responses=signing_response
144
200
  ) as action_scope:
145
201
  offer_taker = await trade_manager_taker.respond_to_offer(
146
202
  Offer.from_bytes(offer_maker.offer),
@@ -200,20 +256,56 @@ async def test_dl_offers(wallets_prefarm: Any, trusted: bool) -> None:
200
256
  ]
201
257
  }
202
258
 
203
- wallet_maker = wsm_maker.main_wallet
204
- wallet_taker = wsm_taker.main_wallet
205
-
206
- await time_out_assert(15, wallet_maker.get_unconfirmed_balance, maker_funds)
207
- await time_out_assert(15, wallet_taker.get_unconfirmed_balance, taker_funds - fee)
208
-
209
- await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
210
- maker_funds -= fee
211
- taker_funds -= fee
212
-
213
- await time_out_assert(15, wallet_maker.get_confirmed_balance, maker_funds)
214
- await time_out_assert(15, wallet_maker.get_unconfirmed_balance, maker_funds)
215
- await time_out_assert(15, wallet_taker.get_confirmed_balance, taker_funds)
216
- await time_out_assert(15, wallet_taker.get_unconfirmed_balance, taker_funds)
259
+ await wallet_environments.process_pending_states(
260
+ [
261
+ WalletStateTransition(
262
+ pre_block_balance_updates={
263
+ "xch": {
264
+ "spendable_balance": -fee,
265
+ "max_send_amount": -fee,
266
+ "pending_coin_removal_count": 2,
267
+ },
268
+ "dl": {
269
+ "pending_coin_removal_count": 1,
270
+ },
271
+ },
272
+ post_block_balance_updates={
273
+ "xch": {
274
+ "unconfirmed_wallet_balance": -fee,
275
+ "confirmed_wallet_balance": -fee,
276
+ "pending_coin_removal_count": -2,
277
+ "unspent_coin_count": -2,
278
+ },
279
+ "dl": {
280
+ "pending_coin_removal_count": -1,
281
+ },
282
+ },
283
+ ),
284
+ WalletStateTransition(
285
+ pre_block_balance_updates={
286
+ "xch": {
287
+ "unconfirmed_wallet_balance": -fee,
288
+ "spendable_balance": -fee,
289
+ "max_send_amount": -fee,
290
+ "pending_coin_removal_count": 2,
291
+ },
292
+ "dl": {
293
+ "pending_coin_removal_count": 2,
294
+ },
295
+ },
296
+ post_block_balance_updates={
297
+ "xch": {
298
+ "confirmed_wallet_balance": -fee,
299
+ "pending_coin_removal_count": -2,
300
+ "unspent_coin_count": -2,
301
+ },
302
+ "dl": {
303
+ "pending_coin_removal_count": -2,
304
+ },
305
+ },
306
+ ),
307
+ ]
308
+ )
217
309
 
218
310
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_maker, launcher_id_taker, taker_root)
219
311
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_taker, launcher_id_maker, maker_root)
@@ -229,43 +321,121 @@ async def test_dl_offers(wallets_prefarm: Any, trusted: bool) -> None:
229
321
 
230
322
  await time_out_assert(15, is_singleton_generation, True, dl_wallet_taker, launcher_id_taker, 2)
231
323
 
232
- async with dl_wallet_taker.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
324
+ async with dl_wallet_taker.wallet_state_manager.new_action_scope(
325
+ wallet_environments.tx_config, push=True
326
+ ) as action_scope:
233
327
  await dl_wallet_taker.create_update_state_spend(launcher_id_taker, bytes32([2] * 32), action_scope)
234
- await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
235
328
 
329
+ await wallet_environments.process_pending_states(
330
+ [
331
+ WalletStateTransition(),
332
+ WalletStateTransition(
333
+ pre_block_balance_updates={
334
+ "xch": {
335
+ "set_remainder": True,
336
+ },
337
+ "dl": {
338
+ "set_remainder": True,
339
+ },
340
+ },
341
+ post_block_balance_updates={
342
+ "xch": {
343
+ "set_remainder": True,
344
+ },
345
+ "dl": {
346
+ "set_remainder": True,
347
+ },
348
+ },
349
+ ),
350
+ ]
351
+ )
236
352
 
237
- @pytest.mark.parametrize(
238
- "trusted",
239
- [True, False],
240
- )
353
+
354
+ @pytest.mark.limit_consensus_modes
355
+ @pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [3]}], indirect=True)
241
356
  @pytest.mark.anyio
242
- async def test_dl_offer_cancellation(wallets_prefarm: Any, trusted: bool) -> None:
243
- [wallet_node, _], [_, _], full_node_api = wallets_prefarm
244
- assert wallet_node.wallet_state_manager is not None
245
- wsm = wallet_node.wallet_state_manager
357
+ async def test_dl_offer_cancellation(wallet_environments: WalletTestFramework) -> None:
358
+ env_maker = wallet_environments.environments[0]
359
+ env_maker.wallet_aliases = {
360
+ "xch": 1,
361
+ "dl": 2,
362
+ }
246
363
 
247
- async with wsm.lock:
248
- dl_wallet = await DataLayerWallet.create_new_dl_wallet(wsm)
364
+ dl_wallet = await DataLayerWallet.create_new_dl_wallet(env_maker.wallet_state_manager)
365
+ await env_maker.change_balances({"dl": {"init": True}})
249
366
 
250
- ROWS = [bytes32([i] * 32) for i in range(0, 10)]
367
+ ROWS = [bytes32([i] * 32) for i in range(10)]
251
368
  root, _ = build_merkle_tree(ROWS)
252
369
 
253
- async with dl_wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
370
+ async with dl_wallet.wallet_state_manager.new_action_scope(
371
+ wallet_environments.tx_config, push=True
372
+ ) as action_scope:
254
373
  launcher_id = await dl_wallet.generate_new_reporter(root, action_scope)
255
374
  assert await dl_wallet.get_latest_singleton(launcher_id) is not None
256
- await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
375
+
376
+ await wallet_environments.process_pending_states(
377
+ [
378
+ WalletStateTransition(
379
+ pre_block_balance_updates={
380
+ "xch": {
381
+ "set_remainder": True,
382
+ },
383
+ "dl": {
384
+ "set_remainder": True,
385
+ },
386
+ },
387
+ post_block_balance_updates={
388
+ "xch": {
389
+ "set_remainder": True,
390
+ },
391
+ "dl": {
392
+ "set_remainder": True,
393
+ },
394
+ },
395
+ ),
396
+ ]
397
+ )
398
+
257
399
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet, launcher_id, root)
258
- async with dl_wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
400
+ async with dl_wallet.wallet_state_manager.new_action_scope(
401
+ wallet_environments.tx_config, push=True
402
+ ) as action_scope:
259
403
  launcher_id_2 = await dl_wallet.generate_new_reporter(root, action_scope)
260
- await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
261
404
 
262
- trade_manager = wsm.trade_manager
405
+ await wallet_environments.process_pending_states(
406
+ [
407
+ WalletStateTransition(
408
+ pre_block_balance_updates={
409
+ "xch": {
410
+ "set_remainder": True,
411
+ },
412
+ "dl": {
413
+ "set_remainder": True,
414
+ },
415
+ },
416
+ post_block_balance_updates={
417
+ "xch": {
418
+ "set_remainder": True,
419
+ },
420
+ "dl": {
421
+ "set_remainder": True,
422
+ },
423
+ },
424
+ ),
425
+ ]
426
+ )
427
+
428
+ trade_manager = env_maker.wallet_state_manager.trade_manager
263
429
 
264
430
  addition = bytes32([101] * 32)
265
431
  ROWS.append(addition)
266
432
  root, _proofs = build_merkle_tree(ROWS)
267
433
 
268
- async with trade_manager.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=False) as action_scope:
434
+ FEE = uint64(2_000_000_000_000)
435
+
436
+ async with trade_manager.wallet_state_manager.new_action_scope(
437
+ wallet_environments.tx_config, push=False
438
+ ) as action_scope:
269
439
  success, offer, error = await trade_manager.create_offer_for_ids(
270
440
  {launcher_id: -1, launcher_id_2: 1},
271
441
  action_scope,
@@ -282,83 +452,181 @@ async def test_dl_offer_cancellation(wallets_prefarm: Any, trusted: bool) -> Non
282
452
  }
283
453
  }
284
454
  ),
285
- fee=uint64(2_000_000_000_000),
455
+ fee=FEE,
286
456
  )
287
457
  assert error is None
288
458
  assert success is True
289
459
  assert offer is not None
290
460
 
291
- async with trade_manager.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
292
- await trade_manager.cancel_pending_offers(
293
- [offer.trade_id], action_scope, fee=uint64(2_000_000_000_000), secure=True
294
- )
461
+ await env_maker.change_balances(
462
+ {
463
+ "xch": {
464
+ "spendable_balance": -FEE,
465
+ "max_send_amount": -FEE,
466
+ "pending_coin_removal_count": 2,
467
+ },
468
+ "dl": {
469
+ "pending_coin_removal_count": 1,
470
+ },
471
+ }
472
+ )
473
+ await env_maker.check_balances()
474
+
475
+ async with trade_manager.wallet_state_manager.new_action_scope(
476
+ wallet_environments.tx_config, push=True
477
+ ) as action_scope:
478
+ await trade_manager.cancel_pending_offers([offer.trade_id], action_scope, fee=FEE, secure=True)
479
+
295
480
  # One outgoing for cancel, one outgoing for fee, one incoming from cancel
296
481
  assert len(action_scope.side_effects.transactions) == 3
297
482
  await time_out_assert(15, get_trade_and_status, TradeStatus.PENDING_CANCEL, trade_manager, offer)
298
- await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
483
+
484
+ await wallet_environments.process_pending_states(
485
+ [
486
+ WalletStateTransition(
487
+ pre_block_balance_updates={
488
+ "xch": {
489
+ "unconfirmed_wallet_balance": -FEE,
490
+ "spendable_balance": -FEE,
491
+ "max_send_amount": -FEE,
492
+ "pending_coin_removal_count": 2,
493
+ },
494
+ "dl": {},
495
+ },
496
+ post_block_balance_updates={
497
+ "xch": {
498
+ "confirmed_wallet_balance": -FEE,
499
+ "spendable_balance": FEE,
500
+ "max_send_amount": FEE,
501
+ "pending_coin_removal_count": -4,
502
+ "unspent_coin_count": -2,
503
+ },
504
+ "dl": {
505
+ "pending_coin_removal_count": -1,
506
+ },
507
+ },
508
+ )
509
+ ]
510
+ )
511
+
299
512
  await time_out_assert(15, get_trade_and_status, TradeStatus.CANCELLED, trade_manager, offer)
300
513
 
301
514
 
302
- @pytest.mark.parametrize("trusted", [True, False])
515
+ @pytest.mark.limit_consensus_modes
516
+ @pytest.mark.parametrize("wallet_environments", [{"num_environments": 2, "blocks_needed": [3, 3]}], indirect=True)
303
517
  @pytest.mark.anyio
304
- async def test_multiple_dl_offers(wallets_prefarm: Any, trusted: bool) -> None:
305
- (
306
- [wallet_node_maker, maker_funds],
307
- [wallet_node_taker, taker_funds],
308
- full_node_api,
309
- ) = wallets_prefarm
310
- assert wallet_node_maker.wallet_state_manager is not None
311
- assert wallet_node_taker.wallet_state_manager is not None
312
- wsm_maker = wallet_node_maker.wallet_state_manager
313
- wsm_taker = wallet_node_taker.wallet_state_manager
314
-
315
- async with wsm_maker.lock:
316
- dl_wallet_maker = await DataLayerWallet.create_new_dl_wallet(wsm_maker)
317
- async with wsm_taker.lock:
318
- dl_wallet_taker = await DataLayerWallet.create_new_dl_wallet(wsm_taker)
319
-
320
- MAKER_ROWS = [bytes32([i] * 32) for i in range(0, 10)]
518
+ async def test_multiple_dl_offers(wallet_environments: WalletTestFramework) -> None:
519
+ env_maker = wallet_environments.environments[0]
520
+ env_taker = wallet_environments.environments[1]
521
+ wsm_maker = env_maker.wallet_state_manager
522
+ wsm_taker = env_taker.wallet_state_manager
523
+
524
+ env_maker.wallet_aliases = {
525
+ "xch": 1,
526
+ "dl": 2,
527
+ }
528
+ env_taker.wallet_aliases = {
529
+ "xch": 1,
530
+ "dl": 2,
531
+ }
532
+
533
+ dl_wallet_maker = await DataLayerWallet.create_new_dl_wallet(wsm_maker)
534
+ dl_wallet_taker = await DataLayerWallet.create_new_dl_wallet(wsm_taker)
535
+ await env_maker.change_balances({"dl": {"init": True}})
536
+ await env_taker.change_balances({"dl": {"init": True}})
537
+
538
+ MAKER_ROWS = [bytes32([i] * 32) for i in range(10)]
321
539
  TAKER_ROWS = [bytes32([i] * 32) for i in range(10, 20)]
322
540
  maker_root, _ = build_merkle_tree(MAKER_ROWS)
323
541
  taker_root, _ = build_merkle_tree(TAKER_ROWS)
324
542
 
325
543
  fee = uint64(1_999_999_999_999)
326
544
 
327
- async with dl_wallet_maker.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
545
+ async with dl_wallet_maker.wallet_state_manager.new_action_scope(
546
+ wallet_environments.tx_config, push=True
547
+ ) as action_scope:
328
548
  launcher_id_maker_1 = await dl_wallet_maker.generate_new_reporter(maker_root, action_scope, fee=fee)
329
549
  assert await dl_wallet_maker.get_latest_singleton(launcher_id_maker_1) is not None
330
- await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
331
- maker_funds -= fee
332
- maker_funds -= 1
333
- await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_maker, launcher_id_maker_1, maker_root)
334
- async with dl_wallet_maker.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
550
+
551
+ async with dl_wallet_maker.wallet_state_manager.new_action_scope(
552
+ wallet_environments.tx_config, push=True
553
+ ) as action_scope:
335
554
  launcher_id_maker_2 = await dl_wallet_maker.generate_new_reporter(maker_root, action_scope, fee=fee)
336
555
  assert await dl_wallet_maker.get_latest_singleton(launcher_id_maker_2) is not None
337
- await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
338
- maker_funds -= fee
339
- maker_funds -= 1
556
+
557
+ await wallet_environments.process_pending_states(
558
+ [
559
+ WalletStateTransition(
560
+ pre_block_balance_updates={
561
+ "xch": {
562
+ "set_remainder": True,
563
+ },
564
+ "dl": {
565
+ "set_remainder": True,
566
+ },
567
+ },
568
+ post_block_balance_updates={
569
+ "xch": {
570
+ "set_remainder": True,
571
+ },
572
+ "dl": {
573
+ "set_remainder": True,
574
+ },
575
+ },
576
+ ),
577
+ WalletStateTransition(),
578
+ ]
579
+ )
580
+
581
+ await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_maker, launcher_id_maker_1, maker_root)
340
582
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_maker, launcher_id_maker_2, maker_root)
341
583
 
342
- async with dl_wallet_taker.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
584
+ async with dl_wallet_taker.wallet_state_manager.new_action_scope(
585
+ wallet_environments.tx_config, push=True
586
+ ) as action_scope:
343
587
  launcher_id_taker_1 = await dl_wallet_taker.generate_new_reporter(taker_root, action_scope, fee=fee)
344
588
  assert await dl_wallet_taker.get_latest_singleton(launcher_id_taker_1) is not None
345
- await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
346
- taker_funds -= fee
347
- taker_funds -= 1
348
- await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_taker, launcher_id_taker_1, taker_root)
349
- async with dl_wallet_taker.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
589
+
590
+ async with dl_wallet_taker.wallet_state_manager.new_action_scope(
591
+ wallet_environments.tx_config, push=True
592
+ ) as action_scope:
350
593
  launcher_id_taker_2 = await dl_wallet_taker.generate_new_reporter(taker_root, action_scope, fee=fee)
351
594
  assert await dl_wallet_taker.get_latest_singleton(launcher_id_taker_2) is not None
352
- await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
353
- taker_funds -= fee
354
- taker_funds -= 1
595
+
596
+ await wallet_environments.process_pending_states(
597
+ [
598
+ WalletStateTransition(),
599
+ WalletStateTransition(
600
+ pre_block_balance_updates={
601
+ "xch": {
602
+ "set_remainder": True,
603
+ },
604
+ "dl": {
605
+ "set_remainder": True,
606
+ },
607
+ },
608
+ post_block_balance_updates={
609
+ "xch": {
610
+ "set_remainder": True,
611
+ },
612
+ "dl": {
613
+ "set_remainder": True,
614
+ },
615
+ },
616
+ ),
617
+ ]
618
+ )
619
+
620
+ await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_taker, launcher_id_taker_1, taker_root)
355
621
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_taker, launcher_id_taker_2, taker_root)
356
622
 
357
- peer = wallet_node_taker.get_full_node_peer()
623
+ peer = env_taker.node.get_full_node_peer()
358
624
  await dl_wallet_maker.track_new_launcher_id(launcher_id_taker_1, peer)
359
625
  await dl_wallet_maker.track_new_launcher_id(launcher_id_taker_2, peer)
360
626
  await dl_wallet_taker.track_new_launcher_id(launcher_id_maker_1, peer)
361
627
  await dl_wallet_taker.track_new_launcher_id(launcher_id_maker_2, peer)
628
+ await env_maker.change_balances({"dl": {"unspent_coin_count": 2}})
629
+ await env_taker.change_balances({"dl": {"unspent_coin_count": 2}})
362
630
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_maker, launcher_id_taker_1, taker_root)
363
631
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_maker, launcher_id_taker_2, taker_root)
364
632
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_taker, launcher_id_maker_1, maker_root)
@@ -378,7 +646,9 @@ async def test_multiple_dl_offers(wallets_prefarm: Any, trusted: bool) -> None:
378
646
 
379
647
  fee = uint64(2_000_000_000_000)
380
648
 
381
- async with trade_manager_maker.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=False) as action_scope:
649
+ async with trade_manager_maker.wallet_state_manager.new_action_scope(
650
+ wallet_environments.tx_config, push=False
651
+ ) as action_scope:
382
652
  success, offer_maker, error = await trade_manager_maker.create_offer_for_ids(
383
653
  {launcher_id_maker_1: -1, launcher_id_taker_1: 1, launcher_id_maker_2: -1, launcher_id_taker_2: 1},
384
654
  action_scope,
@@ -414,11 +684,9 @@ async def test_multiple_dl_offers(wallets_prefarm: Any, trusted: bool) -> None:
414
684
  assert success is True
415
685
  assert offer_maker is not None
416
686
 
417
- [_maker_offer], signing_response = await wallet_node_maker.wallet_state_manager.sign_offers(
418
- [Offer.from_bytes(offer_maker.offer)]
419
- )
687
+ [_maker_offer], signing_response = await wsm_maker.sign_offers([Offer.from_bytes(offer_maker.offer)])
420
688
  async with trade_manager_taker.wallet_state_manager.new_action_scope(
421
- DEFAULT_TX_CONFIG, push=True, additional_signing_responses=signing_response
689
+ wallet_environments.tx_config, push=True, additional_signing_responses=signing_response
422
690
  ) as action_scope:
423
691
  offer_taker = await trade_manager_taker.respond_to_offer(
424
692
  Offer.from_bytes(offer_maker.offer),
@@ -466,21 +734,56 @@ async def test_multiple_dl_offers(wallets_prefarm: Any, trusted: bool) -> None:
466
734
  )
467
735
  assert offer_taker is not None
468
736
 
469
- wallet_maker = wsm_maker.main_wallet
470
- wallet_taker = wsm_taker.main_wallet
471
-
472
- await time_out_assert(15, wallet_maker.get_unconfirmed_balance, maker_funds)
473
- await time_out_assert(15, wallet_taker.get_unconfirmed_balance, taker_funds - fee)
474
-
475
- await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
476
-
477
- maker_funds -= fee
478
- taker_funds -= fee
479
-
480
- await time_out_assert(15, wallet_maker.get_confirmed_balance, maker_funds)
481
- await time_out_assert(15, wallet_maker.get_unconfirmed_balance, maker_funds)
482
- await time_out_assert(15, wallet_taker.get_confirmed_balance, taker_funds)
483
- await time_out_assert(15, wallet_taker.get_unconfirmed_balance, taker_funds)
737
+ await wallet_environments.process_pending_states(
738
+ [
739
+ WalletStateTransition(
740
+ pre_block_balance_updates={
741
+ "xch": {
742
+ "spendable_balance": -fee,
743
+ "max_send_amount": -fee,
744
+ "pending_coin_removal_count": 2,
745
+ },
746
+ "dl": {
747
+ "pending_coin_removal_count": 2,
748
+ },
749
+ },
750
+ post_block_balance_updates={
751
+ "xch": {
752
+ "unconfirmed_wallet_balance": -fee,
753
+ "confirmed_wallet_balance": -fee,
754
+ "pending_coin_removal_count": -2,
755
+ "unspent_coin_count": -2,
756
+ },
757
+ "dl": {
758
+ "pending_coin_removal_count": -2,
759
+ },
760
+ },
761
+ ),
762
+ WalletStateTransition(
763
+ pre_block_balance_updates={
764
+ "xch": {
765
+ "unconfirmed_wallet_balance": -fee,
766
+ "spendable_balance": -fee,
767
+ "max_send_amount": -fee,
768
+ "pending_coin_removal_count": 2,
769
+ },
770
+ "dl": {
771
+ "pending_coin_removal_count": 4,
772
+ },
773
+ },
774
+ post_block_balance_updates={
775
+ "xch": {
776
+ "confirmed_wallet_balance": -fee,
777
+ "pending_coin_removal_count": -2,
778
+ "unspent_coin_count": -2,
779
+ },
780
+ "dl": {
781
+ "pending_coin_removal_count": -4,
782
+ },
783
+ },
784
+ ),
785
+ ]
786
+ )
484
787
 
485
788
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_maker, launcher_id_taker_1, taker_root)
486
789
  await time_out_assert(15, is_singleton_confirmed_and_root, True, dl_wallet_maker, launcher_id_taker_2, taker_root)