chia-blockchain 2.5.0rc1__py3-none-any.whl → 2.5.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc1.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
@@ -6,10 +6,15 @@ from pathlib import Path
6
6
  import pytest
7
7
 
8
8
  from chia._tests.conftest import ConsensusMode
9
- from chia._tests.environments.wallet import WalletEnvironment, WalletStateTransition, WalletTestFramework
9
+ from chia._tests.environments.wallet import (
10
+ NewPuzzleHashError,
11
+ WalletEnvironment,
12
+ WalletStateTransition,
13
+ WalletTestFramework,
14
+ )
10
15
  from chia._tests.util.time_out_assert import time_out_assert, time_out_assert_not_none
11
16
  from chia.protocols.wallet_protocol import CoinState
12
- from chia.rpc.wallet_request_types import GetTransactionMemo
17
+ from chia.rpc.wallet_request_types import GetTransactionMemo, PushTX
13
18
  from chia.simulator.simulator_protocol import ReorgProtocol
14
19
  from chia.types.blockchain_format.coin import Coin, coin_as_list
15
20
  from chia.types.blockchain_format.program import Program
@@ -54,7 +59,7 @@ async def test_cat_creation(wallet_environments: WalletTestFramework) -> None:
54
59
  full_node_api = wallet_environments.full_node
55
60
  wsm = wallet_environments.environments[0].wallet_state_manager
56
61
  wallet = wallet_environments.environments[0].xch_wallet
57
-
62
+ wallet_node = wallet_environments.environments[0].node
58
63
  wallet_environments.environments[0].wallet_aliases = {
59
64
  "xch": 1,
60
65
  "cat": 2,
@@ -138,7 +143,7 @@ async def test_cat_creation(wallet_environments: WalletTestFramework) -> None:
138
143
  await full_node_api.reorg_from_index_to_new_index(
139
144
  ReorgProtocol(uint32(height - 1), uint32(height + 1), bytes32(32 * b"1"), None)
140
145
  )
141
-
146
+ await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, peak_height=uint32(height + 1))
142
147
  # The "set_remainder" sections here are due to a peculiarity with how the creation method creates an incoming TX
143
148
  # The creation method is for testing purposes only so we're not going to bother fixing it for any real reason
144
149
  await wallet_environments.process_pending_states(
@@ -318,7 +323,7 @@ async def test_cat_spend(wallet_environments: WalletTestFramework) -> None:
318
323
 
319
324
  assert cat_wallet.cat_info.limitations_program_hash == cat_wallet_2.cat_info.limitations_program_hash
320
325
 
321
- cat_2_hash = await cat_wallet_2.get_new_inner_hash()
326
+ cat_2_hash = await cat_wallet_2.standard_wallet.get_puzzle_hash(new=False)
322
327
  async with cat_wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
323
328
  await cat_wallet.generate_signed_transaction([uint64(60)], [cat_2_hash], action_scope, fee=uint64(1))
324
329
  tx_id = None
@@ -389,7 +394,6 @@ async def test_cat_spend(wallet_environments: WalletTestFramework) -> None:
389
394
  "cat": {
390
395
  "confirmed_wallet_balance": 60,
391
396
  "unconfirmed_wallet_balance": 60,
392
- "pending_coin_removal_count": 0,
393
397
  "spendable_balance": 60,
394
398
  "max_send_amount": 60,
395
399
  "pending_change": 0,
@@ -409,7 +413,7 @@ async def test_cat_spend(wallet_environments: WalletTestFramework) -> None:
409
413
  memos = await env_2.rpc_client.get_transaction_memo(GetTransactionMemo(transaction_id=tx_id))
410
414
  assert len(memos.coins_with_memos) == 2
411
415
  assert memos.coins_with_memos[1].memos[0] == cat_2_hash
412
- cat_hash = await cat_wallet.get_new_inner_hash()
416
+ cat_hash = await cat_wallet.standard_wallet.get_puzzle_hash(new=False)
413
417
  async with cat_wallet_2.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
414
418
  await cat_wallet_2.generate_signed_transaction([uint64(15)], [cat_hash], action_scope)
415
419
 
@@ -459,7 +463,7 @@ async def test_cat_spend(wallet_environments: WalletTestFramework) -> None:
459
463
  await full_node_api.reorg_from_index_to_new_index(
460
464
  ReorgProtocol(uint32(height - 1), uint32(height + 1), bytes32(32 * b"1"), None)
461
465
  )
462
- await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node)
466
+ await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, peak_height=uint32(height + 1))
463
467
  await env_1.change_balances(
464
468
  {
465
469
  "cat": {
@@ -611,7 +615,7 @@ async def test_cat_doesnt_see_eve(wallet_environments: WalletTestFramework) -> N
611
615
 
612
616
  assert cat_wallet.cat_info.limitations_program_hash == cat_wallet_2.cat_info.limitations_program_hash
613
617
 
614
- cat_2_hash = await cat_wallet_2.get_new_inner_hash()
618
+ cat_2_hash = await cat_wallet_2.standard_wallet.get_puzzle_hash(new=False)
615
619
  async with cat_wallet.wallet_state_manager.new_action_scope(
616
620
  wallet_environments.tx_config, push=True
617
621
  ) as action_scope:
@@ -674,7 +678,6 @@ async def test_cat_doesnt_see_eve(wallet_environments: WalletTestFramework) -> N
674
678
  "cat": {
675
679
  "confirmed_wallet_balance": 60,
676
680
  "unconfirmed_wallet_balance": 60,
677
- "pending_coin_removal_count": 0,
678
681
  "spendable_balance": 60,
679
682
  "max_send_amount": 60,
680
683
  "pending_change": 0,
@@ -686,7 +689,7 @@ async def test_cat_doesnt_see_eve(wallet_environments: WalletTestFramework) -> N
686
689
  ]
687
690
  )
688
691
 
689
- cc2_ph = await cat_wallet_2.get_new_cat_puzzle_hash()
692
+ cc2_ph = await cat_wallet_2.get_cat_puzzle_hash(new=False)
690
693
  async with wallet.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
691
694
  await wallet.wallet_state_manager.main_wallet.generate_signed_transaction(uint64(10), cc2_ph, action_scope)
692
695
 
@@ -819,8 +822,8 @@ async def test_cat_spend_multiple(wallet_environments: WalletTestFramework) -> N
819
822
  assert cat_wallet_0.cat_info.limitations_program_hash == cat_wallet_1.cat_info.limitations_program_hash
820
823
  assert cat_wallet_0.cat_info.limitations_program_hash == cat_wallet_2.cat_info.limitations_program_hash
821
824
 
822
- cat_1_hash = await cat_wallet_1.get_new_inner_hash()
823
- cat_2_hash = await cat_wallet_2.get_new_inner_hash()
825
+ cat_1_hash = await cat_wallet_1.standard_wallet.get_puzzle_hash(new=False)
826
+ cat_2_hash = await cat_wallet_2.standard_wallet.get_puzzle_hash(new=False)
824
827
 
825
828
  async with cat_wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
826
829
  await cat_wallet_0.generate_signed_transaction([uint64(60), uint64(20)], [cat_1_hash, cat_2_hash], action_scope)
@@ -866,7 +869,6 @@ async def test_cat_spend_multiple(wallet_environments: WalletTestFramework) -> N
866
869
  "cat": {
867
870
  "confirmed_wallet_balance": 60,
868
871
  "unconfirmed_wallet_balance": 60,
869
- "pending_coin_removal_count": 0,
870
872
  "spendable_balance": 60,
871
873
  "max_send_amount": 60,
872
874
  "pending_change": 0,
@@ -892,7 +894,6 @@ async def test_cat_spend_multiple(wallet_environments: WalletTestFramework) -> N
892
894
  "cat": {
893
895
  "confirmed_wallet_balance": 20,
894
896
  "unconfirmed_wallet_balance": 20,
895
- "pending_coin_removal_count": 0,
896
897
  "spendable_balance": 20,
897
898
  "max_send_amount": 20,
898
899
  "pending_change": 0,
@@ -904,7 +905,7 @@ async def test_cat_spend_multiple(wallet_environments: WalletTestFramework) -> N
904
905
  ]
905
906
  )
906
907
 
907
- cat_hash = await cat_wallet_0.get_new_inner_hash()
908
+ cat_hash = await cat_wallet_0.standard_wallet.get_puzzle_hash(new=False)
908
909
 
909
910
  async with cat_wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
910
911
  await cat_wallet_1.generate_signed_transaction([uint64(15)], [cat_hash], action_scope)
@@ -1049,7 +1050,7 @@ async def test_cat_spend_multiple(wallet_environments: WalletTestFramework) -> N
1049
1050
  assert len(memos) == 2 # One for tx, one for change
1050
1051
  assert b"Markus Walburg" in [v for v_list in memos.values() for v in v_list]
1051
1052
  assert tx.spend_bundle is not None
1052
- assert list(memos.keys())[0] in [a.name() for a in tx.spend_bundle.additions()]
1053
+ assert next(iter(memos.keys())) in [a.name() for a in tx.spend_bundle.additions()]
1053
1054
 
1054
1055
 
1055
1056
  @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
@@ -1111,7 +1112,7 @@ async def test_cat_max_amount_send(wallet_environments: WalletTestFramework) ->
1111
1112
 
1112
1113
  assert cat_wallet.cat_info.limitations_program_hash is not None
1113
1114
 
1114
- cat_2 = await cat_wallet.get_new_inner_puzzle()
1115
+ cat_2 = await cat_wallet.standard_wallet.get_puzzle(new=False)
1115
1116
  cat_2_hash = cat_2.get_tree_hash()
1116
1117
  amounts = []
1117
1118
  puzzle_hashes = []
@@ -1170,14 +1171,14 @@ async def test_cat_max_amount_send(wallet_environments: WalletTestFramework) ->
1170
1171
  async with cat_wallet.wallet_state_manager.new_action_scope(
1171
1172
  wallet_environments.tx_config, push=False
1172
1173
  ) as action_scope:
1173
- await cat_wallet.generate_signed_transaction([uint64(max_sent_amount - 1)], [bytes32([0] * 32)], action_scope)
1174
+ await cat_wallet.generate_signed_transaction([uint64(max_sent_amount - 1)], [bytes32.zeros], action_scope)
1174
1175
  assert action_scope.side_effects.transactions[0].amount == uint64(max_sent_amount - 1)
1175
1176
 
1176
1177
  # 2) Generate transaction that is equal to limit
1177
1178
  async with cat_wallet.wallet_state_manager.new_action_scope(
1178
1179
  wallet_environments.tx_config, push=False
1179
1180
  ) as action_scope:
1180
- await cat_wallet.generate_signed_transaction([uint64(max_sent_amount)], [bytes32([0] * 32)], action_scope)
1181
+ await cat_wallet.generate_signed_transaction([uint64(max_sent_amount)], [bytes32.zeros], action_scope)
1181
1182
  assert action_scope.side_effects.transactions[0].amount == uint64(max_sent_amount)
1182
1183
 
1183
1184
  # 3) Generate transaction that is greater than limit
@@ -1185,9 +1186,7 @@ async def test_cat_max_amount_send(wallet_environments: WalletTestFramework) ->
1185
1186
  async with cat_wallet.wallet_state_manager.new_action_scope(
1186
1187
  wallet_environments.tx_config, push=False
1187
1188
  ) as action_scope:
1188
- await cat_wallet.generate_signed_transaction(
1189
- [uint64(max_sent_amount + 1)], [bytes32([0] * 32)], action_scope
1190
- )
1189
+ await cat_wallet.generate_signed_transaction([uint64(max_sent_amount + 1)], [bytes32.zeros], action_scope)
1191
1190
 
1192
1191
 
1193
1192
  @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
@@ -1388,7 +1387,7 @@ async def test_cat_hint(wallet_environments: WalletTestFramework) -> None:
1388
1387
  cat_wallet_2 = wallet_node_2.wallet_state_manager.wallets[uint32(2)]
1389
1388
  assert isinstance(cat_wallet_2, CATWallet)
1390
1389
 
1391
- cat_hash = await cat_wallet.get_new_inner_hash()
1390
+ cat_hash = await cat_wallet.standard_wallet.get_puzzle_hash(new=False)
1392
1391
  async with cat_wallet_2.wallet_state_manager.new_action_scope(
1393
1392
  wallet_environments.tx_config, push=True
1394
1393
  ) as action_scope:
@@ -1537,7 +1536,7 @@ async def test_cat_change_detection(wallet_environments: WalletTestFramework) ->
1537
1536
  1,
1538
1537
  [
1539
1538
  [51, inner_puzhash, cat_amount_1],
1540
- [51, bytes32([0] * 32), cat_amount_0 - cat_amount_1],
1539
+ [51, bytes32.zeros, cat_amount_0 - cat_amount_1],
1541
1540
  ],
1542
1541
  ),
1543
1542
  None,
@@ -1555,7 +1554,7 @@ async def test_cat_change_detection(wallet_environments: WalletTestFramework) ->
1555
1554
  ),
1556
1555
  ],
1557
1556
  )
1558
- await env.rpc_client.push_tx(eve_spend)
1557
+ await env.rpc_client.push_tx(PushTX(eve_spend))
1559
1558
  await time_out_assert_not_none(5, full_node_api.full_node.mempool_manager.get_spendbundle, eve_spend.name())
1560
1559
  await wallet_environments.process_pending_states(
1561
1560
  [
@@ -1590,7 +1589,7 @@ async def test_unacknowledged_cat_table() -> None:
1590
1589
  return bytes32([i] * 32)
1591
1590
 
1592
1591
  def coin_state(i: int) -> CoinState:
1593
- return CoinState(Coin(bytes32([0] * 32), bytes32([0] * 32), uint64(i)), None, None)
1592
+ return CoinState(Coin(bytes32.zeros, bytes32.zeros, uint64(i)), None, None)
1594
1593
 
1595
1594
  await interested_store.add_unacknowledged_coin_state(asset_id(0), coin_state(0), None)
1596
1595
  await interested_store.add_unacknowledged_coin_state(asset_id(1), coin_state(1), 100)
@@ -1667,7 +1666,7 @@ async def test_cat_melt_balance(wallet_environments: WalletTestFramework) -> Non
1667
1666
  )
1668
1667
  ],
1669
1668
  )
1670
- await env.rpc_client.push_tx(spend_to_wallet)
1669
+ await env.rpc_client.push_tx(PushTX(spend_to_wallet))
1671
1670
  await time_out_assert(10, simulator.tx_id_in_mempool, True, spend_to_wallet.name())
1672
1671
 
1673
1672
  await wallet_environments.process_pending_states(
@@ -1717,7 +1716,7 @@ async def test_cat_melt_balance(wallet_environments: WalletTestFramework) -> Non
1717
1716
  ],
1718
1717
  )
1719
1718
  signed_spend, _ = await env.wallet_state_manager.sign_bundle(new_spend.coin_spends)
1720
- await env.rpc_client.push_tx(signed_spend)
1719
+ await env.rpc_client.push_tx(PushTX(signed_spend))
1721
1720
  await time_out_assert(10, simulator.tx_id_in_mempool, True, signed_spend.name())
1722
1721
 
1723
1722
  await wallet_environments.process_pending_states(
@@ -1736,3 +1735,92 @@ async def test_cat_melt_balance(wallet_environments: WalletTestFramework) -> Non
1736
1735
  )
1737
1736
  ]
1738
1737
  )
1738
+
1739
+
1740
+ @pytest.mark.parametrize(
1741
+ "wallet_environments",
1742
+ [
1743
+ {
1744
+ "num_environments": 1,
1745
+ "blocks_needed": [1],
1746
+ "trusted": True, # Parameter doesn't matter for this test
1747
+ "reuse_puzhash": True, # Important to test this is ignored in the duplicate change scenario
1748
+ }
1749
+ ],
1750
+ indirect=True,
1751
+ )
1752
+ @pytest.mark.limit_consensus_modes([ConsensusMode.PLAIN], reason="irrelevant")
1753
+ @pytest.mark.anyio
1754
+ async def test_cat_puzzle_hashes(wallet_environments: WalletTestFramework) -> None:
1755
+ env = wallet_environments.environments[0]
1756
+ wallet = env.xch_wallet
1757
+
1758
+ env.wallet_aliases = {
1759
+ "xch": 1,
1760
+ "cat": 2,
1761
+ }
1762
+
1763
+ async with env.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
1764
+ cat_wallet = await CATWallet.create_new_cat_wallet(
1765
+ env.node.wallet_state_manager,
1766
+ wallet,
1767
+ {"identifier": "genesis_by_id"},
1768
+ uint64(100),
1769
+ action_scope,
1770
+ )
1771
+
1772
+ await wallet_environments.process_pending_states(
1773
+ [
1774
+ WalletStateTransition(
1775
+ pre_block_balance_updates={
1776
+ "xch": {"set_remainder": True},
1777
+ "cat": {"init": True, "set_remainder": True},
1778
+ },
1779
+ post_block_balance_updates={
1780
+ "xch": {"set_remainder": True},
1781
+ "cat": {
1782
+ "confirmed_wallet_balance": 100,
1783
+ "unconfirmed_wallet_balance": 0,
1784
+ "spendable_balance": 100,
1785
+ "max_send_amount": 100,
1786
+ "pending_change": -100,
1787
+ "pending_coin_removal_count": -1,
1788
+ "unspent_coin_count": 1,
1789
+ },
1790
+ },
1791
+ ),
1792
+ ]
1793
+ )
1794
+
1795
+ # Test that we attempt a new puzzle hash here even though everything says we shouldn't
1796
+ with pytest.raises(NewPuzzleHashError):
1797
+ async with env.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
1798
+ await cat_wallet.generate_signed_transaction(
1799
+ [uint64(50)], [await cat_wallet.standard_wallet.get_puzzle_hash(new=False)], action_scope
1800
+ )
1801
+
1802
+ # Test new puzzle hash getting
1803
+ current_derivation_index = await env.wallet_state_manager.puzzle_store.get_current_derivation_record_for_wallet(
1804
+ uint32(env.wallet_aliases["cat"])
1805
+ )
1806
+ assert current_derivation_index is not None
1807
+ await cat_wallet.get_cat_puzzle_hash(new=True)
1808
+ next_derivation_index = await env.wallet_state_manager.puzzle_store.get_current_derivation_record_for_wallet(
1809
+ uint32(env.wallet_aliases["cat"])
1810
+ )
1811
+ assert next_derivation_index is not None
1812
+ assert current_derivation_index.index < next_derivation_index.index
1813
+
1814
+ # Test a weird edge case where a new puzzle hash needs to get generated
1815
+ # First, we reset the used status of all puzzle hashes by re-adding them
1816
+ for puzhash in await env.wallet_state_manager.puzzle_store.get_all_puzzle_hashes():
1817
+ dr = await env.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(puzhash)
1818
+ assert dr is not None
1819
+ await env.wallet_state_manager.puzzle_store.add_derivation_paths([dr])
1820
+
1821
+ # Then we make sure that even though we asked for a used puzzle hash, it still gives us an unused one
1822
+ unused_count = await env.wallet_state_manager.puzzle_store.get_unused_count(uint32(env.wallet_aliases["cat"]))
1823
+ await cat_wallet.get_cat_puzzle_hash(new=False)
1824
+ assert unused_count < await env.wallet_state_manager.puzzle_store.get_unused_count(
1825
+ uint32(env.wallet_aliases["cat"])
1826
+ )
@@ -1,11 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Dict, List, Optional
3
+ from typing import Any, Optional
4
4
 
5
5
  import pytest
6
6
  from chia_rs import G2Element
7
7
 
8
- from chia.clvm.spend_sim import CostLogger, SimClient, SpendSim, sim_and_client
8
+ from chia._tests.util.spend_sim import CostLogger, SimClient, SpendSim, sim_and_client
9
9
  from chia.types.blockchain_format.coin import Coin
10
10
  from chia.types.blockchain_format.program import Program
11
11
  from chia.types.blockchain_format.serialized_program import SerializedProgram
@@ -45,10 +45,10 @@ def str_to_cat_hash(tail_str: str) -> bytes32:
45
45
 
46
46
  # This method takes a dictionary of strings mapping to amounts and generates the appropriate CAT/XCH coins
47
47
  async def generate_coins(
48
- sim: SpendSim, sim_client: SimClient, requested_coins: Dict[Optional[str], List[int]]
49
- ) -> Dict[Optional[str], List[Coin]]:
48
+ sim: SpendSim, sim_client: SimClient, requested_coins: dict[Optional[str], list[int]]
49
+ ) -> dict[Optional[str], list[Coin]]:
50
50
  await sim.farm_block(acs_ph)
51
- parent_coin = [cr.coin for cr in await sim_client.get_coin_records_by_puzzle_hash(acs_ph)][0]
51
+ parent_coin = next(cr.coin for cr in await sim_client.get_coin_records_by_puzzle_hash(acs_ph))
52
52
 
53
53
  # We need to gather a list of initial coins to create as well as spends that do the eve spend for every CAT
54
54
  payments = []
@@ -87,7 +87,7 @@ async def generate_coins(
87
87
  await sim.farm_block()
88
88
 
89
89
  # Search for all of the coins and put them into a dictionary
90
- coin_dict: Dict[Optional[str], List[Coin]] = {}
90
+ coin_dict: dict[Optional[str], list[Coin]] = {}
91
91
  for tail_str, _ in requested_coins.items():
92
92
  if tail_str:
93
93
  tail_hash = str_to_tail_hash(tail_str)
@@ -112,15 +112,15 @@ async def generate_coins(
112
112
  # `generate_secure_bundle` simulates a wallet's `generate_signed_transaction`
113
113
  # but doesn't bother with non-offer announcements
114
114
  def generate_secure_bundle(
115
- selected_coins: List[Coin],
116
- announcements: List[AssertPuzzleAnnouncement],
115
+ selected_coins: list[Coin],
116
+ announcements: list[AssertPuzzleAnnouncement],
117
117
  offered_amount: uint64,
118
118
  tail_str: Optional[str] = None,
119
119
  ) -> WalletSpendBundle:
120
120
  announcement_assertions = [a.to_program() for a in announcements]
121
121
  selected_coin_amount = sum(c.amount for c in selected_coins)
122
122
  non_primaries = [] if len(selected_coins) < 2 else selected_coins[1:]
123
- inner_solution: List[Any] = [
123
+ inner_solution: list[Any] = [
124
124
  [51, Offer.ph(), offered_amount], # Offered coin
125
125
  [51, acs_ph, uint64(selected_coin_amount - offered_amount)], # Change
126
126
  *announcement_assertions,
@@ -178,7 +178,7 @@ async def test_complex_offer(cost_logger: CostLogger) -> None:
178
178
  driver_dict_as_infos = {key.hex(): value.info for key, value in driver_dict.items()}
179
179
 
180
180
  # Create an XCH Offer for RED
181
- chia_requested_payments: Dict[Optional[bytes32], List[Payment]] = {
181
+ chia_requested_payments: dict[Optional[bytes32], list[Payment]] = {
182
182
  str_to_tail_hash("red"): [Payment(acs_ph, uint64(100), [b"memo"]), Payment(acs_ph, uint64(200), [b"memo"])]
183
183
  }
184
184
  chia_notarized_payments = Offer.notarize_payments(chia_requested_payments, chia_coins)
@@ -190,7 +190,7 @@ async def test_complex_offer(cost_logger: CostLogger) -> None:
190
190
  # Create a RED Offer for XCH
191
191
  red_coins_1 = red_coins[0:1]
192
192
  red_coins_2 = red_coins[1:]
193
- red_requested_payments: Dict[Optional[bytes32], List[Payment]] = {
193
+ red_requested_payments: dict[Optional[bytes32], list[Payment]] = {
194
194
  None: [Payment(acs_ph, uint64(300), [b"red memo"]), Payment(acs_ph, uint64(350), [b"red memo"])]
195
195
  }
196
196
  red_notarized_payments = Offer.notarize_payments(red_requested_payments, red_coins_1)
@@ -201,7 +201,7 @@ async def test_complex_offer(cost_logger: CostLogger) -> None:
201
201
  red_offer = Offer(red_notarized_payments, red_secured_bundle, driver_dict)
202
202
  assert not red_offer.is_valid()
203
203
 
204
- red_requested_payments_2: Dict[Optional[bytes32], List[Payment]] = {
204
+ red_requested_payments_2: dict[Optional[bytes32], list[Payment]] = {
205
205
  None: [Payment(acs_ph, uint64(50), [b"red memo"])]
206
206
  }
207
207
  red_notarized_payments_2 = Offer.notarize_payments(red_requested_payments_2, red_coins_2)
@@ -219,7 +219,7 @@ async def test_complex_offer(cost_logger: CostLogger) -> None:
219
219
  assert new_offer.is_valid()
220
220
 
221
221
  # Create yet another offer of BLUE for XCH and RED
222
- blue_requested_payments: Dict[Optional[bytes32], List[Payment]] = {
222
+ blue_requested_payments: dict[Optional[bytes32], list[Payment]] = {
223
223
  None: [Payment(acs_ph, uint64(200), [b"blue memo"])],
224
224
  str_to_tail_hash("red"): [Payment(acs_ph, uint64(50), [b"blue memo"])],
225
225
  }
@@ -252,7 +252,7 @@ async def test_complex_offer(cost_logger: CostLogger) -> None:
252
252
 
253
253
  # Test preventing TAIL from running during exchange
254
254
  blue_cat_puz = construct_cat_puzzle(CAT_MOD, str_to_tail_hash("blue"), OFFER_MOD)
255
- random_hash = bytes32([0] * 32)
255
+ random_hash = bytes32.zeros
256
256
  blue_spend = make_spend(
257
257
  Coin(random_hash, blue_cat_puz.get_tree_hash(), uint64(0)),
258
258
  blue_cat_puz,
@@ -261,7 +261,7 @@ async def test_complex_offer(cost_logger: CostLogger) -> None:
261
261
  new_spends_list = [blue_spend, *new_offer.to_spend_bundle().coin_spends]
262
262
  tail_offer = Offer.from_spend_bundle(WalletSpendBundle(new_spends_list, G2Element()))
263
263
  valid_spend = tail_offer.to_valid_spend(random_hash)
264
- real_blue_spend = [spend for spend in valid_spend.coin_spends if b"hey there" in bytes(spend)][0]
264
+ real_blue_spend = next(spend for spend in valid_spend.coin_spends if b"hey there" in bytes(spend))
265
265
  real_blue_spend_replaced = real_blue_spend.replace(
266
266
  solution=SerializedProgram.from_program(
267
267
  real_blue_spend.solution.to_program().replace(
@@ -1,22 +1,24 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
- from typing import Any, Dict, List, Union
4
+ from typing import Any, Union
5
5
 
6
6
  import pytest
7
7
  from chia_rs import G2Element
8
8
 
9
9
  from chia._tests.conftest import SOFTFORK_HEIGHTS
10
10
  from chia._tests.environments.wallet import WalletStateTransition, WalletTestFramework
11
+ from chia._tests.util.get_name_puzzle_conditions import get_name_puzzle_conditions
11
12
  from chia._tests.util.time_out_assert import time_out_assert
12
13
  from chia._tests.wallet.vc_wallet.test_vc_wallet import mint_cr_cat
13
14
  from chia.consensus.cost_calculator import NPCResult
14
15
  from chia.consensus.default_constants import DEFAULT_CONSTANTS
15
16
  from chia.full_node.bundle_tools import simple_solution_generator
16
- from chia.full_node.mempool_check_conditions import get_name_puzzle_conditions
17
+ from chia.rpc.wallet_request_types import VCAddProofs, VCGetList, VCGetProofsForRoot, VCMint, VCSpend
17
18
  from chia.types.blockchain_format.program import INFINITE_COST, Program
18
19
  from chia.types.blockchain_format.sized_bytes import bytes32
19
20
  from chia.types.spend_bundle import SpendBundle
21
+ from chia.util.bech32m import encode_puzzle_hash
20
22
  from chia.util.hash import std_hash
21
23
  from chia.util.ints import uint32, uint64
22
24
  from chia.wallet.cat_wallet.cat_wallet import CATWallet
@@ -36,7 +38,7 @@ from chia.wallet.vc_wallet.vc_store import VCProofs
36
38
  from chia.wallet.wallet_node import WalletNode
37
39
  from chia.wallet.wallet_spend_bundle import WalletSpendBundle
38
40
 
39
- OfferSummary = Dict[Union[int, bytes32], int]
41
+ OfferSummary = dict[Union[int, bytes32], int]
40
42
 
41
43
 
42
44
  async def get_trade_and_status(trade_manager: TradeManager, trade: TradeRecord) -> TradeStatus:
@@ -166,7 +168,7 @@ async def test_cat_trades(
166
168
  tail_taker = Program.to([3, (1, "taker"), None, None])
167
169
  proofs_checker_maker = ProofsChecker(["foo", "bar"])
168
170
  proofs_checker_taker = ProofsChecker(["bar", "zap"])
169
- authorized_providers: List[bytes32] = [did_id_maker, did_id_taker]
171
+ authorized_providers: list[bytes32] = [did_id_maker, did_id_taker]
170
172
  cat_wallet_maker: CATWallet = await CRCATWallet.get_or_create_wallet_for_cat(
171
173
  wallet_node_maker.wallet_state_manager,
172
174
  wallet_maker,
@@ -237,12 +239,22 @@ async def test_cat_trades(
237
239
  # Mint some VCs that can spend the CR-CATs
238
240
  vc_record_maker = (
239
241
  await client_maker.vc_mint(
240
- did_id_maker, wallet_environments.tx_config, target_address=await wallet_maker.get_new_puzzlehash()
242
+ VCMint(
243
+ did_id=encode_puzzle_hash(did_id_maker, "did"),
244
+ target_address=encode_puzzle_hash(await wallet_maker.get_new_puzzlehash(), "txch"),
245
+ push=True,
246
+ ),
247
+ wallet_environments.tx_config,
241
248
  )
242
249
  ).vc_record
243
250
  vc_record_taker = (
244
251
  await client_taker.vc_mint(
245
- did_id_taker, wallet_environments.tx_config, target_address=await wallet_taker.get_new_puzzlehash()
252
+ VCMint(
253
+ did_id=encode_puzzle_hash(did_id_taker, "did"),
254
+ target_address=encode_puzzle_hash(await wallet_taker.get_new_puzzlehash(), "txch"),
255
+ push=True,
256
+ ),
257
+ wallet_environments.tx_config,
246
258
  )
247
259
  ).vc_record
248
260
  await wallet_environments.process_pending_states(
@@ -274,17 +286,23 @@ async def test_cat_trades(
274
286
  proofs_maker = VCProofs({"foo": "1", "bar": "1", "zap": "1"})
275
287
  proof_root_maker: bytes32 = proofs_maker.root()
276
288
  await client_maker.vc_spend(
277
- vc_record_maker.vc.launcher_id,
289
+ VCSpend(
290
+ vc_id=vc_record_maker.vc.launcher_id,
291
+ new_proof_hash=proof_root_maker,
292
+ push=True,
293
+ ),
278
294
  wallet_environments.tx_config,
279
- new_proof_hash=proof_root_maker,
280
295
  )
281
296
 
282
297
  proofs_taker = VCProofs({"foo": "1", "bar": "1", "zap": "1"})
283
298
  proof_root_taker: bytes32 = proofs_taker.root()
284
299
  await client_taker.vc_spend(
285
- vc_record_taker.vc.launcher_id,
300
+ VCSpend(
301
+ vc_id=vc_record_taker.vc.launcher_id,
302
+ new_proof_hash=proof_root_taker,
303
+ push=True,
304
+ ),
286
305
  wallet_environments.tx_config,
287
- new_proof_hash=proof_root_taker,
288
306
  )
289
307
  await wallet_environments.process_pending_states(
290
308
  [
@@ -374,17 +392,21 @@ async def test_cat_trades(
374
392
  )
375
393
 
376
394
  if credential_restricted:
377
- await client_maker.vc_add_proofs(proofs_maker.key_value_pairs)
378
- assert await client_maker.vc_get_proofs_for_root(proof_root_maker) == proofs_maker.key_value_pairs
379
- vc_records, fetched_proofs = await client_maker.vc_get_list()
380
- assert len(vc_records) == 1
381
- assert fetched_proofs[proof_root_maker.hex()] == proofs_maker.key_value_pairs
382
-
383
- await client_taker.vc_add_proofs(proofs_taker.key_value_pairs)
384
- assert await client_taker.vc_get_proofs_for_root(proof_root_taker) == proofs_taker.key_value_pairs
385
- vc_records, fetched_proofs = await client_taker.vc_get_list()
386
- assert len(vc_records) == 1
387
- assert fetched_proofs[proof_root_taker.hex()] == proofs_taker.key_value_pairs
395
+ await client_maker.vc_add_proofs(VCAddProofs.from_vc_proofs(proofs_maker))
396
+ assert (
397
+ await client_maker.vc_get_proofs_for_root(VCGetProofsForRoot(proof_root_maker))
398
+ ).to_vc_proofs().key_value_pairs == proofs_maker.key_value_pairs
399
+ get_list_reponse = await client_maker.vc_get_list(VCGetList())
400
+ assert len(get_list_reponse.vc_records) == 1
401
+ assert get_list_reponse.proof_dict[proof_root_maker] == proofs_maker.key_value_pairs
402
+
403
+ await client_taker.vc_add_proofs(VCAddProofs.from_vc_proofs(proofs_taker))
404
+ assert (
405
+ await client_taker.vc_get_proofs_for_root(VCGetProofsForRoot(proof_root_taker))
406
+ ).to_vc_proofs().key_value_pairs == proofs_taker.key_value_pairs
407
+ get_list_reponse = await client_taker.vc_get_list(VCGetList())
408
+ assert len(get_list_reponse.vc_records) == 1
409
+ assert get_list_reponse.proof_dict[proof_root_taker] == proofs_taker.key_value_pairs
388
410
 
389
411
  # Add the taker's CAT to the maker's wallet
390
412
  if credential_restricted:
@@ -445,10 +467,10 @@ async def test_cat_trades(
445
467
  new_cat_wallet_maker.id(): 15,
446
468
  }
447
469
 
448
- driver_dict: Dict[bytes32, PuzzleInfo] = {}
470
+ driver_dict: dict[bytes32, PuzzleInfo] = {}
449
471
  for wallet in (cat_wallet_maker, new_cat_wallet_maker):
450
472
  asset_id: str = wallet.get_asset_id()
451
- driver_item: Dict[str, Any] = {
473
+ driver_item: dict[str, Any] = {
452
474
  "type": AssetType.CAT.value,
453
475
  "tail": "0x" + asset_id,
454
476
  }
@@ -1701,7 +1723,7 @@ async def test_trade_cancellation(wallet_environments: WalletTestFramework) -> N
1701
1723
  wallet_environments.tx_config, push=False
1702
1724
  ) as action_scope:
1703
1725
  await trade_manager_maker.cancel_pending_offers(
1704
- [trade_make.trade_id, bytes32([0] * 32)], action_scope, secure=False
1726
+ [trade_make.trade_id, bytes32.zeros], action_scope, secure=False
1705
1727
  )
1706
1728
  await time_out_assert(15, get_trade_and_status, TradeStatus.CANCELLED, trade_manager_maker, trade_make)
1707
1729
 
@@ -1851,7 +1873,7 @@ async def test_trade_cancellation(wallet_environments: WalletTestFramework) -> N
1851
1873
  chia_and_cat_for_something: OfferSummary = {
1852
1874
  env_maker.wallet_aliases["xch"]: -5,
1853
1875
  env_maker.wallet_aliases["cat"]: -6,
1854
- bytes32([0] * 32): 1, # Doesn't matter
1876
+ bytes32.zeros: 1, # Doesn't matter
1855
1877
  }
1856
1878
 
1857
1879
  # Now we're going to create the other way around for test coverage sake
@@ -1861,7 +1883,7 @@ async def test_trade_cancellation(wallet_environments: WalletTestFramework) -> N
1861
1883
  success, trade_make, error = await trade_manager_maker.create_offer_for_ids(
1862
1884
  chia_and_cat_for_something,
1863
1885
  action_scope,
1864
- driver_dict={bytes32([0] * 32): PuzzleInfo({"type": AssetType.CAT.value, "tail": "0x" + bytes(32).hex()})},
1886
+ driver_dict={bytes32.zeros: PuzzleInfo({"type": AssetType.CAT.value, "tail": "0x" + bytes(32).hex()})},
1865
1887
  )
1866
1888
  assert error is None
1867
1889
  assert success is True
@@ -1876,8 +1898,8 @@ async def test_trade_cancellation(wallet_environments: WalletTestFramework) -> N
1876
1898
  total_spend = SpendBundle.aggregate(
1877
1899
  [tx.spend_bundle for tx in action_scope.side_effects.transactions if tx.spend_bundle is not None]
1878
1900
  )
1879
- all_conditions: List[Program] = []
1880
- creations: List[CreateCoinAnnouncement] = []
1901
+ all_conditions: list[Program] = []
1902
+ creations: list[CreateCoinAnnouncement] = []
1881
1903
  announcement_nonce = std_hash(trade_make.trade_id)
1882
1904
  for spend in total_spend.coin_spends:
1883
1905
  all_conditions.extend(
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import List, Tuple
4
-
5
3
  import pytest
6
4
 
7
5
  from chia.server.server import ChiaServer
@@ -19,7 +17,7 @@ from chia.wallet.wallet_node import WalletNode
19
17
  )
20
18
  @pytest.mark.anyio
21
19
  async def test_missing_decorator(
22
- simulator_and_wallet: Tuple[List[FullNodeSimulator], List[Tuple[WalletNode, ChiaServer]], BlockTools],
20
+ simulator_and_wallet: tuple[list[FullNodeSimulator], list[tuple[WalletNode, ChiaServer]], BlockTools],
23
21
  trusted: bool,
24
22
  self_hostname: str,
25
23
  ) -> None:
@@ -39,7 +37,7 @@ async def test_missing_decorator(
39
37
  )
40
38
  @pytest.mark.anyio
41
39
  async def test_unknown_decorator(
42
- simulator_and_wallet: Tuple[List[FullNodeSimulator], List[Tuple[WalletNode, ChiaServer]], BlockTools],
40
+ simulator_and_wallet: tuple[list[FullNodeSimulator], list[tuple[WalletNode, ChiaServer]], BlockTools],
43
41
  trusted: bool,
44
42
  self_hostname: str,
45
43
  ) -> None:
@@ -59,7 +57,7 @@ async def test_unknown_decorator(
59
57
  )
60
58
  @pytest.mark.anyio
61
59
  async def test_decorator(
62
- simulator_and_wallet: Tuple[List[FullNodeSimulator], List[Tuple[WalletNode, ChiaServer]], BlockTools],
60
+ simulator_and_wallet: tuple[list[FullNodeSimulator], list[tuple[WalletNode, ChiaServer]], BlockTools],
63
61
  trusted: bool,
64
62
  self_hostname: str,
65
63
  ) -> None: