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
@@ -5,13 +5,18 @@ from dataclasses import dataclass
5
5
  from typing import Optional
6
6
 
7
7
  import pytest
8
- from chia_rs import G1Element
8
+ from chia_rs import G1Element, PlotSize, ProofOfSpace
9
9
  from chia_rs.sized_bytes import bytes32, bytes48
10
10
  from chia_rs.sized_ints import uint8, uint32
11
11
 
12
12
  from chia._tests.util.misc import Marks, datacases
13
13
  from chia.consensus.default_constants import DEFAULT_CONSTANTS
14
- from chia.types.blockchain_format.proof_of_space import ProofOfSpace, passes_plot_filter, verify_and_get_quality_string
14
+ from chia.types.blockchain_format.proof_of_space import (
15
+ calculate_plot_difficulty,
16
+ calculate_prefix_bits,
17
+ passes_plot_filter,
18
+ verify_and_get_quality_string,
19
+ )
15
20
 
16
21
 
17
22
  @dataclass
@@ -27,6 +32,15 @@ class ProofOfSpaceCase:
27
32
  marks: Marks = ()
28
33
 
29
34
 
35
+ def g1(key: str) -> G1Element:
36
+ return G1Element.from_bytes_unchecked(bytes48.from_hexstr(key))
37
+
38
+
39
+ def b32(key: str) -> bytes32:
40
+ return bytes32.from_hexstr(key)
41
+
42
+
43
+ # TODO: todo_v2_plots more test cases
30
44
  @datacases(
31
45
  ProofOfSpaceCase(
32
46
  id="Neither pool public key nor pool contract puzzle hash",
@@ -70,37 +84,57 @@ class ProofOfSpaceCase:
70
84
  ),
71
85
  ProofOfSpaceCase(
72
86
  id="Not passing the plot filter with size 9",
73
- pos_challenge=bytes32.from_hexstr("08b23cc2844dfb92d2eedaa705a1ce665d571ee753bd81cbb67b92caa6d34722"),
87
+ pos_challenge=b32("08b23cc2844dfb92d2eedaa705a1ce665d571ee753bd81cbb67b92caa6d34722"),
74
88
  plot_size=uint8(42),
75
- pool_public_key=G1Element.from_bytes_unchecked(
76
- bytes48.from_hexstr(
77
- "b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0"
78
- )
89
+ pool_public_key=g1(
90
+ "b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0"
79
91
  ),
80
- plot_public_key=G1Element.from_bytes_unchecked(
81
- bytes48.from_hexstr(
82
- "b17d368f5400230b2b01464807825bf4163c5c159bd7d4465f935912e538ac9fb996dd9a9c479bd8aa6256bdca1fed96"
83
- )
92
+ plot_public_key=g1(
93
+ "b17d368f5400230b2b01464807825bf4163c5c159bd7d4465f935912e538ac9fb996dd9a9c479bd8aa6256bdca1fed96"
84
94
  ),
85
95
  height=uint32(5495999),
86
96
  expected_error="Did not pass the plot filter",
87
97
  ),
88
98
  ProofOfSpaceCase(
89
99
  id="Passing the plot filter with size 8",
90
- pos_challenge=bytes32.from_hexstr("08b23cc2844dfb92d2eedaa705a1ce665d571ee753bd81cbb67b92caa6d34722"),
100
+ pos_challenge=b32("08b23cc2844dfb92d2eedaa705a1ce665d571ee753bd81cbb67b92caa6d34722"),
91
101
  plot_size=uint8(42),
92
- pool_public_key=G1Element.from_bytes_unchecked(
93
- bytes48.from_hexstr(
94
- "b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0"
95
- )
102
+ pool_public_key=g1(
103
+ "b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0"
96
104
  ),
97
- plot_public_key=G1Element.from_bytes_unchecked(
98
- bytes48.from_hexstr(
99
- "b17d368f5400230b2b01464807825bf4163c5c159bd7d4465f935912e538ac9fb996dd9a9c479bd8aa6256bdca1fed96"
100
- )
105
+ plot_public_key=g1(
106
+ "b17d368f5400230b2b01464807825bf4163c5c159bd7d4465f935912e538ac9fb996dd9a9c479bd8aa6256bdca1fed96"
101
107
  ),
102
108
  height=uint32(5496000),
103
109
  ),
110
+ ProofOfSpaceCase(
111
+ id="v2 plot size 0",
112
+ pos_challenge=bytes32(b"1" * 32),
113
+ plot_size=uint8(0x80),
114
+ plot_public_key=G1Element(),
115
+ pool_public_key=G1Element(),
116
+ expected_error="Plot size is lower than the minimum",
117
+ ),
118
+ ProofOfSpaceCase(
119
+ id="v2 plot size 34",
120
+ pos_challenge=bytes32(b"1" * 32),
121
+ plot_size=uint8(0x80 | 34),
122
+ plot_public_key=G1Element(),
123
+ pool_public_key=G1Element(),
124
+ expected_error="Plot size is higher than the maximum",
125
+ ),
126
+ ProofOfSpaceCase(
127
+ id="Not passing the plot filter v2",
128
+ pos_challenge=b32("3d29ea79d19b3f7e99ebf764ae53697cbe143603909873946af6ab1ece606861"),
129
+ plot_size=uint8(0x80 | 32),
130
+ pool_public_key=g1(
131
+ "b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0"
132
+ ),
133
+ plot_public_key=g1(
134
+ "879526b4e7b616cfd64984d8ad140d0798b048392a6f11e2faf09054ef467ea44dc0dab5e5edb2afdfa850c5c8b629cc"
135
+ ),
136
+ expected_error="Did not pass the plot filter",
137
+ ),
104
138
  )
105
139
  def test_verify_and_get_quality_string(caplog: pytest.LogCaptureFixture, case: ProofOfSpaceCase) -> None:
106
140
  pos = ProofOfSpace(
@@ -108,24 +142,87 @@ def test_verify_and_get_quality_string(caplog: pytest.LogCaptureFixture, case: P
108
142
  pool_public_key=case.pool_public_key,
109
143
  pool_contract_puzzle_hash=case.pool_contract_puzzle_hash,
110
144
  plot_public_key=case.plot_public_key,
111
- size=case.plot_size,
145
+ version_and_size=case.plot_size,
112
146
  proof=b"1",
113
147
  )
114
148
  quality_string = verify_and_get_quality_string(
115
149
  pos=pos,
116
150
  constants=DEFAULT_CONSTANTS,
117
- original_challenge_hash=bytes32.from_hexstr(
118
- "0x73490e166d0b88347c37d921660b216c27316aae9a3450933d3ff3b854e5831a"
119
- ),
120
- signage_point=bytes32.from_hexstr("0x7b3e23dbd438f9aceefa9827e2c5538898189987f49b06eceb7a43067e77b531"),
151
+ original_challenge_hash=b32("0x73490e166d0b88347c37d921660b216c27316aae9a3450933d3ff3b854e5831a"),
152
+ signage_point=b32("0x7b3e23dbd438f9aceefa9827e2c5538898189987f49b06eceb7a43067e77b531"),
121
153
  height=case.height,
122
154
  )
123
155
  assert quality_string is None
124
156
  assert len(caplog.text) == 0 if case.expected_error is None else case.expected_error in caplog.text
125
157
 
126
158
 
159
+ @datacases(
160
+ ProofOfSpaceCase(
161
+ id="v2 plot are not implemented",
162
+ plot_size=uint8(0x80 | 30),
163
+ pos_challenge=b32("47deb938e145d25d7b3b3c85ca9e3972b76c01aeeb78a02fe5d3b040d282317e"),
164
+ plot_public_key=g1(
165
+ "afa3aaf09c03885154be49216ee7fb2e4581b9c4a4d7e9cc402e27280bf0cfdbdf1b9ba674e301fd1d1450234b3b1868"
166
+ ),
167
+ pool_public_key=g1(
168
+ "b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0"
169
+ ),
170
+ expected_error="NotImplementedError",
171
+ ),
172
+ )
173
+ def test_verify_and_get_quality_string_v2(caplog: pytest.LogCaptureFixture, case: ProofOfSpaceCase) -> None:
174
+ pos = ProofOfSpace(
175
+ challenge=case.pos_challenge,
176
+ pool_public_key=case.pool_public_key,
177
+ pool_contract_puzzle_hash=case.pool_contract_puzzle_hash,
178
+ plot_public_key=case.plot_public_key,
179
+ version_and_size=case.plot_size,
180
+ proof=b"1",
181
+ )
182
+ size = pos.size()
183
+ assert size.size_v2 is not None
184
+ assert size.size_v1 is None
185
+ try:
186
+ quality_string = verify_and_get_quality_string(
187
+ pos=pos,
188
+ constants=DEFAULT_CONSTANTS,
189
+ original_challenge_hash=b32("0x73490e166d0b88347c37d921660b216c27316aae9a3450933d3ff3b854e5831a"),
190
+ signage_point=b32("0x7b3e23dbd438f9aceefa9827e2c5538898189987f49b06eceb7a43067e77b531"),
191
+ height=case.height,
192
+ )
193
+ except NotImplementedError as e:
194
+ assert case.expected_error is not None
195
+ assert case.expected_error in repr(e)
196
+ else:
197
+ assert quality_string is None
198
+ assert len(caplog.text) == 0 if case.expected_error is None else case.expected_error in caplog.text
199
+
200
+
201
+ @pytest.mark.parametrize(
202
+ "height, difficulty",
203
+ [
204
+ (0, 2),
205
+ (DEFAULT_CONSTANTS.HARD_FORK_HEIGHT, 2),
206
+ (DEFAULT_CONSTANTS.HARD_FORK2_HEIGHT, 2),
207
+ (DEFAULT_CONSTANTS.PLOT_DIFFICULTY_4_HEIGHT - 1, 2),
208
+ (DEFAULT_CONSTANTS.PLOT_DIFFICULTY_4_HEIGHT, 4),
209
+ (DEFAULT_CONSTANTS.PLOT_DIFFICULTY_5_HEIGHT - 1, 4),
210
+ (DEFAULT_CONSTANTS.PLOT_DIFFICULTY_5_HEIGHT, 5),
211
+ (DEFAULT_CONSTANTS.PLOT_DIFFICULTY_6_HEIGHT - 1, 5),
212
+ (DEFAULT_CONSTANTS.PLOT_DIFFICULTY_6_HEIGHT, 6),
213
+ (DEFAULT_CONSTANTS.PLOT_DIFFICULTY_7_HEIGHT - 1, 6),
214
+ (DEFAULT_CONSTANTS.PLOT_DIFFICULTY_7_HEIGHT, 7),
215
+ (DEFAULT_CONSTANTS.PLOT_DIFFICULTY_8_HEIGHT - 1, 7),
216
+ (DEFAULT_CONSTANTS.PLOT_DIFFICULTY_8_HEIGHT, 8),
217
+ (DEFAULT_CONSTANTS.PLOT_DIFFICULTY_8_HEIGHT + 1000000, 8),
218
+ ],
219
+ )
220
+ def test_calculate_plot_difficulty(height: uint32, difficulty: uint8) -> None:
221
+ assert calculate_plot_difficulty(DEFAULT_CONSTANTS, height) == difficulty
222
+
223
+
127
224
  class TestProofOfSpace:
128
- @pytest.mark.parametrize("prefix_bits", [DEFAULT_CONSTANTS.NUMBER_ZERO_BITS_PLOT_FILTER, 8, 7, 6, 5, 1, 0])
225
+ @pytest.mark.parametrize("prefix_bits", [DEFAULT_CONSTANTS.NUMBER_ZERO_BITS_PLOT_FILTER_V1, 8, 7, 6, 5, 1, 0])
129
226
  def test_can_create_proof(self, prefix_bits: int, seeded_random: random.Random) -> None:
130
227
  """
131
228
  Tests that the change of getting a correct proof is exactly 1/target_filter.
@@ -142,3 +239,34 @@ class TestProofOfSpace:
142
239
  success_count += 1
143
240
 
144
241
  assert abs((success_count * target_filter / num_trials) - 1) < 0.35
242
+
243
+
244
+ @pytest.mark.parametrize("height,expected", [(0, 3), (5496000, 2), (10542000, 1), (15592000, 0), (20643000, 0)])
245
+ @pytest.mark.parametrize("plot_size", [PlotSize.make_v1(32), PlotSize.make_v2(28)])
246
+ def test_calculate_prefix_bits_clamp_zero(height: uint32, expected: int, plot_size: PlotSize) -> None:
247
+ constants = DEFAULT_CONSTANTS.replace(NUMBER_ZERO_BITS_PLOT_FILTER_V1=uint8(3))
248
+ if plot_size.size_v2 is not None:
249
+ expected = constants.NUMBER_ZERO_BITS_PLOT_FILTER_V2
250
+ assert calculate_prefix_bits(constants, height, plot_size) == expected
251
+
252
+
253
+ @pytest.mark.parametrize(
254
+ argnames=["height", "expected"],
255
+ argvalues=[
256
+ (0, 9),
257
+ (5495999, 9),
258
+ (5496000, 8),
259
+ (10541999, 8),
260
+ (10542000, 7),
261
+ (15591999, 7),
262
+ (15592000, 6),
263
+ (20642999, 6),
264
+ (20643000, 5),
265
+ ],
266
+ )
267
+ @pytest.mark.parametrize("plot_size", [PlotSize.make_v1(32), PlotSize.make_v2(28)])
268
+ def test_calculate_prefix_bits_default(height: uint32, expected: int, plot_size: PlotSize) -> None:
269
+ constants = DEFAULT_CONSTANTS
270
+ if plot_size.size_v2 is not None:
271
+ expected = DEFAULT_CONSTANTS.NUMBER_ZERO_BITS_PLOT_FILTER_V2
272
+ assert calculate_prefix_bits(constants, height, plot_size) == expected
@@ -4,15 +4,14 @@ import random
4
4
  import unittest
5
5
 
6
6
  import pytest
7
- from chia_rs import G2Element
7
+ from chia_rs import CoinSpend, G2Element, SpendBundle
8
8
  from chia_rs.sized_bytes import bytes32
9
9
  from chia_rs.sized_ints import uint64
10
10
 
11
11
  from chia.types.blockchain_format.coin import Coin
12
12
  from chia.types.blockchain_format.program import Program
13
- from chia.types.coin_spend import CoinSpend, make_spend
13
+ from chia.types.coin_spend import make_spend
14
14
  from chia.types.condition_opcodes import ConditionOpcode
15
- from chia.types.spend_bundle import SpendBundle
16
15
 
17
16
  BLANK_SPEND_BUNDLE = SpendBundle(coin_spends=[], aggregated_signature=G2Element())
18
17
  NULL_SIGNATURE = "0xc" + "0" * 191
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import importlib.metadata
4
4
  import json
5
+ import logging
5
6
  from dataclasses import dataclass, field, replace
6
7
  from pathlib import Path
7
8
  from typing import Any, Optional, Union, cast
@@ -2126,3 +2127,82 @@ def test_run_plotter_bladebit(
2126
2127
  assert mock_run_plotter.call_args.args[1] == "bladebit"
2127
2128
  assert mock_run_plotter.call_args.args[2][1:] == case.expected_raw_command_args()
2128
2129
  mock_run_plotter.assert_called_once()
2130
+
2131
+
2132
+ @pytest.mark.anyio
2133
+ async def test_message_logging_redaction(
2134
+ daemon_connection_and_temp_keychain: tuple[aiohttp.ClientWebSocketResponse, Keychain],
2135
+ caplog: pytest.LogCaptureFixture,
2136
+ ) -> None:
2137
+ ws, _ = daemon_connection_and_temp_keychain
2138
+
2139
+ with caplog.at_level(logging.DEBUG, logger="chia.daemon.server"):
2140
+ sensitive_payload = create_payload(
2141
+ "test_command",
2142
+ {
2143
+ "password": "secret_password",
2144
+ "private_key": "sensitive_key_data",
2145
+ "secret_value": "very_secret",
2146
+ "mnemonic": "test_mnemonic_phrase",
2147
+ "normal_field": "normal_value",
2148
+ "nested_object": {
2149
+ "passphrase": "nested_secret",
2150
+ "api_key": "nested_api_key",
2151
+ "seed_mnemonic": "nested_mnemonic",
2152
+ "safe_field": "safe_value",
2153
+ },
2154
+ },
2155
+ "test",
2156
+ "daemon",
2157
+ )
2158
+
2159
+ original_message = json.loads(sensitive_payload)
2160
+ request_id = original_message["request_id"]
2161
+
2162
+ await ws.send_str(sensitive_payload)
2163
+ await ws.receive()
2164
+
2165
+ log_message = next(record for record in caplog.records if "Received message:" in record.message).message
2166
+ _, _, ws_message_str = log_message.partition("Received message: ")
2167
+
2168
+ # Build the expected redacted structure and sort keys like dict_to_json_str does
2169
+ expected_redacted_data = {
2170
+ "ack": False,
2171
+ "command": "test_command",
2172
+ "data": {
2173
+ "mnemonic": "***<redacted>***",
2174
+ "nested_object": {
2175
+ "api_key": "***<redacted>***",
2176
+ "passphrase": "***<redacted>***",
2177
+ "safe_field": "safe_value",
2178
+ "seed_mnemonic": "***<redacted>***",
2179
+ },
2180
+ "normal_field": "normal_value",
2181
+ "password": "***<redacted>***",
2182
+ "private_key": "***<redacted>***",
2183
+ "secret_value": "***<redacted>***",
2184
+ },
2185
+ "destination": "daemon",
2186
+ "origin": "test",
2187
+ "request_id": request_id,
2188
+ }
2189
+
2190
+ expected_ws_message = f"WSMessage(type=<WSMsgType.TEXT: 1>, data={expected_redacted_data!r}, extra='')"
2191
+
2192
+ assert ws_message_str == expected_ws_message
2193
+
2194
+
2195
+ @pytest.mark.anyio
2196
+ async def test_non_text_message_logging(
2197
+ daemon_connection_and_temp_keychain: tuple[aiohttp.ClientWebSocketResponse, Keychain],
2198
+ caplog: pytest.LogCaptureFixture,
2199
+ ) -> None:
2200
+ ws, _ = daemon_connection_and_temp_keychain
2201
+
2202
+ with caplog.at_level(logging.DEBUG, logger="chia.daemon.server"):
2203
+ # Close the websocket to trigger non-text message handling
2204
+ await ws.close()
2205
+
2206
+ non_text_logs = [record for record in caplog.records if "Received non-text message" in record.message]
2207
+
2208
+ assert len(non_text_logs) == 1, "Expected one 'Received non-text message' log entry"
@@ -9,7 +9,7 @@ from chia_rs.sized_bytes import bytes32
9
9
  from chia._tests.util.misc import RecordingWebServer
10
10
  from chia.data_layer.data_layer import DataLayer
11
11
  from chia.data_layer.data_layer_util import PluginRemote
12
- from chia.rpc.wallet_rpc_client import WalletRpcClient
12
+ from chia.wallet.wallet_rpc_client import WalletRpcClient
13
13
 
14
14
 
15
15
  async def create_sufficient_wallet_rpc_client() -> WalletRpcClient:
@@ -10,6 +10,7 @@ from _pytest.fixtures import SubRequest
10
10
  from chia_rs.sized_bytes import bytes32
11
11
 
12
12
  from chia._tests.util.misc import Marks, datacases, measure_runtime
13
+ from chia.data_layer.data_layer_rpc_util import MarshallableProtocol
13
14
  from chia.data_layer.data_layer_util import (
14
15
  ClearPendingRootsRequest,
15
16
  ClearPendingRootsResponse,
@@ -22,7 +23,6 @@ from chia.data_layer.data_layer_util import (
22
23
  key_hash,
23
24
  leaf_hash,
24
25
  )
25
- from chia.rpc.data_layer_rpc_util import MarshallableProtocol
26
26
  from chia.types.blockchain_format.program import Program
27
27
  from chia.types.blockchain_format.serialized_program import SerializedProgram
28
28
 
@@ -42,6 +42,8 @@ from chia.cmds.data_funcs import (
42
42
  from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
43
43
  from chia.data_layer.data_layer import DataLayer
44
44
  from chia.data_layer.data_layer_errors import KeyNotFoundError, OfferIntegrityError
45
+ from chia.data_layer.data_layer_rpc_api import DataLayerRpcApi
46
+ from chia.data_layer.data_layer_rpc_client import DataLayerRpcClient
45
47
  from chia.data_layer.data_layer_util import (
46
48
  HashOnlyProof,
47
49
  OfferStore,
@@ -54,14 +56,11 @@ from chia.data_layer.data_layer_util import (
54
56
  from chia.data_layer.data_layer_wallet import DataLayerWallet, verify_offer
55
57
  from chia.data_layer.data_store import DataStore
56
58
  from chia.data_layer.download_data import get_delta_filename_path, get_full_tree_filename_path
57
- from chia.rpc.data_layer_rpc_api import DataLayerRpcApi
58
- from chia.rpc.data_layer_rpc_client import DataLayerRpcClient
59
- from chia.rpc.wallet_rpc_api import WalletRpcApi
59
+ from chia.server.aliases import DataLayerService, WalletService
60
60
  from chia.server.start_data_layer import create_data_layer_service
61
61
  from chia.simulator.block_tools import BlockTools
62
62
  from chia.simulator.full_node_simulator import FullNodeSimulator
63
63
  from chia.simulator.simulator_protocol import FarmNewBlockProtocol
64
- from chia.types.aliases import DataLayerService, WalletService
65
64
  from chia.types.peer_info import PeerInfo
66
65
  from chia.util.byte_types import hexstr_to_bytes
67
66
  from chia.util.config import save_config
@@ -71,8 +70,11 @@ from chia.util.task_referencer import create_referenced_task
71
70
  from chia.util.timing import adjusted_timeout, backoff_times
72
71
  from chia.wallet.trading.offer import Offer as TradingOffer
73
72
  from chia.wallet.transaction_record import TransactionRecord
73
+ from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
74
74
  from chia.wallet.wallet import Wallet
75
75
  from chia.wallet.wallet_node import WalletNode
76
+ from chia.wallet.wallet_request_types import DLLatestSingleton
77
+ from chia.wallet.wallet_rpc_api import WalletRpcApi
76
78
 
77
79
  pytestmark = pytest.mark.data_layer
78
80
  nodes = tuple[WalletNode, FullNodeSimulator]
@@ -160,7 +162,8 @@ async def init_wallet_and_node(
160
162
  wallet_node = wallet_service._node
161
163
  full_node_api = full_node_service._api
162
164
  await wallet_node.server.start_client(PeerInfo(self_hostname, full_node_api.server.get_port()), None)
163
- ph = await wallet_node.wallet_state_manager.main_wallet.get_new_puzzlehash()
165
+ async with wallet_node.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
166
+ ph = await action_scope.get_puzzle_hash(wallet_node.wallet_state_manager)
164
167
  await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
165
168
  await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
166
169
  funds = calculate_pool_reward(uint32(1)) + calculate_base_farmer_reward(uint32(1))
@@ -213,7 +216,7 @@ async def check_coin_state(wallet_node: WalletNode, coin_id: bytes32) -> bool:
213
216
 
214
217
 
215
218
  async def check_singleton_confirmed(dl: DataLayer, store_id: bytes32) -> bool:
216
- return await dl.wallet_rpc.dl_latest_singleton(store_id, True) is not None
219
+ return (await dl.wallet_rpc.dl_latest_singleton(DLLatestSingleton(store_id, True))).singleton is not None
217
220
 
218
221
 
219
222
  async def process_block_and_check_offer_validity(offer: TradingOffer, offer_setup: OfferSetup) -> bool:
@@ -730,8 +733,9 @@ async def test_get_owned_stores(
730
733
  wallet_rpc_port = wallet_service.rpc_server.listen_port
731
734
  full_node_api = full_node_service._api
732
735
  await wallet_node.server.start_client(PeerInfo(self_hostname, full_node_api.server.get_port()), None)
733
- ph = await wallet_node.wallet_state_manager.main_wallet.get_new_puzzlehash()
734
- for i in range(0, num_blocks):
736
+ async with wallet_node.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
737
+ ph = await action_scope.get_puzzle_hash(wallet_node.wallet_state_manager)
738
+ for i in range(num_blocks):
735
739
  await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
736
740
  funds = sum(
737
741
  calculate_pool_reward(uint32(i)) + calculate_base_farmer_reward(uint32(i)) for i in range(1, num_blocks)
@@ -749,7 +753,7 @@ async def test_get_owned_stores(
749
753
  expected_store_ids.append(launcher_id)
750
754
 
751
755
  await time_out_assert(4, check_mempool_spend_count, True, full_node_api, 3)
752
- for i in range(0, num_blocks):
756
+ for i in range(num_blocks):
753
757
  await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
754
758
  await asyncio.sleep(0.5)
755
759
 
@@ -3785,7 +3789,7 @@ async def test_auto_subscribe_to_local_stores(
3785
3789
 
3786
3790
  with monkeypatch.context() as m:
3787
3791
  m.setattr("chia.data_layer.data_store.DataStore.get_store_ids", mock_get_store_ids)
3788
- m.setattr("chia.rpc.wallet_rpc_client.WalletRpcClient.dl_track_new", mock_dl_track_new)
3792
+ m.setattr("chia.wallet.wallet_rpc_client.WalletRpcClient.dl_track_new", mock_dl_track_new)
3789
3793
 
3790
3794
  config = bt.config
3791
3795
  config["data_layer"]["auto_subscribe_to_local_stores"] = auto_subscribe_to_local_stores
@@ -107,7 +107,7 @@ async def test_create_tree_accepts_bytes32(raw_data_store: DataStore) -> None:
107
107
  await raw_data_store.create_tree(store_id=store_id)
108
108
 
109
109
 
110
- @pytest.mark.parametrize(argnames=["length"], argvalues=[[length] for length in [*range(0, 32), *range(33, 48)]])
110
+ @pytest.mark.parametrize(argnames=["length"], argvalues=[[length] for length in [*range(32), *range(33, 48)]])
111
111
  @pytest.mark.anyio
112
112
  async def test_create_store_fails_for_not_bytes32(raw_data_store: DataStore, length: int) -> None:
113
113
  bad_store_id = b"\0" * length
@@ -1355,13 +1355,13 @@ async def test_server_http_ban(
1355
1355
  async def mock_http_download(
1356
1356
  target_filename_path: Path,
1357
1357
  filename: str,
1358
- proxy_url: str,
1358
+ proxy_url: Optional[str],
1359
1359
  server_info: ServerInfo,
1360
1360
  timeout: aiohttp.ClientTimeout,
1361
1361
  log: logging.Logger,
1362
1362
  ) -> None:
1363
1363
  if error:
1364
- raise aiohttp.ClientConnectionError()
1364
+ raise aiohttp.ClientConnectionError
1365
1365
 
1366
1366
  start_timestamp = int(time.time())
1367
1367
  with monkeypatch.context() as m:
@@ -1885,7 +1885,7 @@ async def test_insert_from_delta_file(
1885
1885
  async def mock_http_download(
1886
1886
  target_filename_path: Path,
1887
1887
  filename: str,
1888
- proxy_url: str,
1888
+ proxy_url: Optional[str],
1889
1889
  server_info: ServerInfo,
1890
1890
  timeout: int,
1891
1891
  log: logging.Logger,
@@ -1895,7 +1895,7 @@ async def test_insert_from_delta_file(
1895
1895
  async def mock_http_download_2(
1896
1896
  target_filename_path: Path,
1897
1897
  filename: str,
1898
- proxy_url: str,
1898
+ proxy_url: Optional[str],
1899
1899
  server_info: ServerInfo,
1900
1900
  timeout: int,
1901
1901
  log: logging.Logger,
@@ -17,8 +17,8 @@ from chia._tests.util.network_protocol_data import (
17
17
  )
18
18
  from chia.farmer.farmer_api import FarmerAPI
19
19
  from chia.protocols import farmer_protocol
20
+ from chia.protocols.outbound_message import Message, NodeType
20
21
  from chia.protocols.protocol_message_types import ProtocolMessageTypes
21
- from chia.server.outbound_message import Message, NodeType
22
22
  from chia.util.hash import std_hash
23
23
  from chia.util.task_referencer import create_referenced_task
24
24
 
@@ -46,7 +46,7 @@ async def test_farmer_ignores_concurrent_duplicate_signage_points(
46
46
  assert ProtocolMessageTypes(response).name == "harvester_handshake"
47
47
 
48
48
  sp = farmer_protocol.NewSignagePoint(
49
- std_hash(b"1"), std_hash(b"2"), std_hash(b"3"), uint64(1), uint64(1000000), uint8(2), uint32(1)
49
+ std_hash(b"1"), std_hash(b"2"), std_hash(b"3"), uint64(1), uint64(1000000), uint8(2), uint32(1), uint32(0)
50
50
  )
51
51
  await gather(
52
52
  farmer_api.new_signage_point(sp),