chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.5.8rc1__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 (528) hide show
  1. chia/__init__.py +8 -4
  2. chia/_tests/blockchain/blockchain_test_utils.py +6 -8
  3. chia/_tests/blockchain/test_augmented_chain.py +4 -4
  4. chia/_tests/blockchain/test_blockchain.py +165 -190
  5. chia/_tests/blockchain/test_build_chains.py +2 -4
  6. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  7. chia/_tests/clvm/coin_store.py +4 -7
  8. chia/_tests/clvm/test_clvm_step.py +4 -4
  9. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  10. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  11. chia/_tests/clvm/test_singletons.py +2 -4
  12. chia/_tests/clvm/test_spend_sim.py +2 -2
  13. chia/_tests/cmds/cmd_test_utils.py +27 -45
  14. chia/_tests/cmds/test_cmd_framework.py +6 -6
  15. chia/_tests/cmds/test_daemon.py +3 -3
  16. chia/_tests/cmds/test_show.py +4 -4
  17. chia/_tests/cmds/test_tx_config_args.py +1 -2
  18. chia/_tests/cmds/testing_classes.py +4 -5
  19. chia/_tests/cmds/wallet/test_did.py +24 -27
  20. chia/_tests/cmds/wallet/test_nft.py +12 -10
  21. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  22. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  23. chia/_tests/conftest.py +59 -30
  24. chia/_tests/connection_utils.py +2 -2
  25. chia/_tests/core/cmds/test_beta.py +4 -4
  26. chia/_tests/core/cmds/test_keys.py +2 -3
  27. chia/_tests/core/cmds/test_wallet.py +15 -15
  28. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  29. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  30. chia/_tests/core/daemon/test_daemon.py +11 -11
  31. chia/_tests/core/data_layer/conftest.py +2 -2
  32. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  33. chia/_tests/core/data_layer/test_data_store.py +10 -10
  34. chia/_tests/core/data_layer/util.py +11 -11
  35. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  36. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  37. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  38. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  39. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  40. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  41. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  42. chia/_tests/core/full_node/test_conditions.py +21 -23
  43. chia/_tests/core/full_node/test_full_node.py +225 -62
  44. chia/_tests/core/full_node/test_hint_management.py +2 -4
  45. chia/_tests/core/full_node/test_performance.py +0 -1
  46. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  47. chia/_tests/core/full_node/test_transactions.py +1 -2
  48. chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
  49. chia/_tests/core/mempool/test_mempool.py +29 -37
  50. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  51. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  52. chia/_tests/core/mempool/test_mempool_manager.py +963 -839
  53. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  54. chia/_tests/core/server/serve.py +7 -7
  55. chia/_tests/core/server/test_dos.py +1 -2
  56. chia/_tests/core/server/test_event_loop.py +12 -4
  57. chia/_tests/core/server/test_loop.py +7 -8
  58. chia/_tests/core/server/test_rate_limits.py +9 -8
  59. chia/_tests/core/server/test_server.py +61 -1
  60. chia/_tests/core/services/test_services.py +2 -2
  61. chia/_tests/core/ssl/test_ssl.py +2 -2
  62. chia/_tests/core/test_cost_calculation.py +2 -6
  63. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  64. chia/_tests/core/test_filter.py +0 -1
  65. chia/_tests/core/test_full_node_rpc.py +2 -2
  66. chia/_tests/core/test_merkle_set.py +1 -2
  67. chia/_tests/core/test_seeder.py +4 -4
  68. chia/_tests/core/util/test_config.py +4 -4
  69. chia/_tests/core/util/test_jsonify.py +2 -2
  70. chia/_tests/core/util/test_keychain.py +3 -3
  71. chia/_tests/core/util/test_lockfile.py +2 -1
  72. chia/_tests/core/util/test_log_exceptions.py +1 -2
  73. chia/_tests/core/util/test_streamable.py +17 -17
  74. chia/_tests/db/test_db_wrapper.py +3 -2
  75. chia/_tests/environments/wallet.py +14 -14
  76. chia/_tests/ether.py +4 -3
  77. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  78. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  79. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  80. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  81. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  82. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  83. chia/_tests/harvester/test_harvester_api.py +11 -4
  84. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  85. chia/_tests/plot_sync/test_receiver.py +11 -10
  86. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  87. chia/_tests/plot_sync/util.py +1 -2
  88. chia/_tests/plotting/test_plot_manager.py +7 -6
  89. chia/_tests/plotting/test_prover.py +30 -38
  90. chia/_tests/pools/test_pool_cmdline.py +4 -6
  91. chia/_tests/pools/test_pool_rpc.py +203 -61
  92. chia/_tests/pools/test_pool_wallet.py +3 -3
  93. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  94. chia/_tests/process_junit.py +2 -2
  95. chia/_tests/rpc/test_rpc_client.py +4 -4
  96. chia/_tests/rpc/test_rpc_server.py +3 -3
  97. chia/_tests/simulation/test_simulation.py +12 -25
  98. chia/_tests/solver/test_solver_service.py +13 -4
  99. chia/_tests/testconfig.py +2 -2
  100. chia/_tests/timelord/test_new_peak.py +22 -11
  101. chia/_tests/tools/test_run_block.py +0 -2
  102. chia/_tests/tools/test_virtual_project.py +2 -1
  103. chia/_tests/util/benchmarks.py +1 -0
  104. chia/_tests/util/blockchain.py +38 -36
  105. chia/_tests/util/blockchain_mock.py +11 -11
  106. chia/_tests/util/build_network_protocol_files.py +2 -1
  107. chia/_tests/util/coin_store.py +2 -1
  108. chia/_tests/util/config.py +1 -1
  109. chia/_tests/util/db_connection.py +2 -3
  110. chia/_tests/util/full_sync.py +9 -11
  111. chia/_tests/util/gen_ssl_certs.py +4 -5
  112. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  113. chia/_tests/util/misc.py +24 -24
  114. chia/_tests/util/network_protocol_data.py +20 -3
  115. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  116. chia/_tests/util/protocol_messages_json.py +292 -3
  117. chia/_tests/util/setup_nodes.py +62 -47
  118. chia/_tests/util/spend_sim.py +57 -57
  119. chia/_tests/util/test_async_pool.py +2 -3
  120. chia/_tests/util/test_chia_version.py +1 -3
  121. chia/_tests/util/test_config.py +3 -3
  122. chia/_tests/util/test_full_block_utils.py +6 -3
  123. chia/_tests/util/test_limited_semaphore.py +1 -2
  124. chia/_tests/util/test_misc.py +2 -2
  125. chia/_tests/util/test_network.py +1 -2
  126. chia/_tests/util/test_priority_mutex.py +3 -3
  127. chia/_tests/util/test_recursive_replace.py +5 -6
  128. chia/_tests/util/test_replace_str_to_bytes.py +8 -10
  129. chia/_tests/util/test_testnet_overrides.py +3 -3
  130. chia/_tests/util/time_out_assert.py +2 -2
  131. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  132. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  133. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  134. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  135. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  136. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  137. chia/_tests/wallet/conftest.py +6 -6
  138. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  139. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  140. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  141. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  142. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  145. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  146. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  147. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  148. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  149. chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
  150. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  151. chia/_tests/wallet/test_coin_management.py +2 -2
  152. chia/_tests/wallet/test_conditions.py +45 -51
  153. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  154. chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
  155. chia/_tests/wallet/test_notifications.py +14 -14
  156. chia/_tests/wallet/test_signer_protocol.py +5 -5
  157. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  158. chia/_tests/wallet/test_transaction_store.py +20 -20
  159. chia/_tests/wallet/test_util.py +2 -2
  160. chia/_tests/wallet/test_wallet.py +380 -228
  161. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  162. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  163. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  164. chia/_tests/wallet/test_wallet_node.py +14 -14
  165. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  166. chia/_tests/wallet/test_wallet_utils.py +2 -3
  167. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  168. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  169. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  170. chia/_tests/wallet/wallet_block_tools.py +12 -11
  171. chia/_tests/weight_proof/config.py +1 -0
  172. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  173. chia/apis/__init__.py +21 -0
  174. chia/apis/farmer_stub.py +102 -0
  175. chia/apis/full_node_stub.py +372 -0
  176. chia/apis/harvester_stub.py +57 -0
  177. chia/apis/introducer_stub.py +35 -0
  178. chia/apis/solver_stub.py +30 -0
  179. chia/apis/stub_protocol_registry.py +21 -0
  180. chia/apis/timelord_stub.py +39 -0
  181. chia/apis/wallet_stub.py +161 -0
  182. chia/cmds/beta.py +3 -4
  183. chia/cmds/beta_funcs.py +4 -3
  184. chia/cmds/check_wallet_db.py +4 -4
  185. chia/cmds/chia.py +1 -2
  186. chia/cmds/cmd_classes.py +11 -13
  187. chia/cmds/cmd_helpers.py +11 -11
  188. chia/cmds/cmds_util.py +15 -15
  189. chia/cmds/coin_funcs.py +6 -7
  190. chia/cmds/coins.py +2 -3
  191. chia/cmds/configure.py +1 -2
  192. chia/cmds/data.py +42 -42
  193. chia/cmds/data_funcs.py +81 -81
  194. chia/cmds/db.py +4 -5
  195. chia/cmds/db_backup_func.py +2 -2
  196. chia/cmds/db_upgrade_func.py +3 -3
  197. chia/cmds/db_validate_func.py +2 -2
  198. chia/cmds/dev/data.py +4 -4
  199. chia/cmds/dev/gh.py +5 -5
  200. chia/cmds/dev/installers.py +2 -3
  201. chia/cmds/dev/mempool.py +3 -4
  202. chia/cmds/dev/mempool_funcs.py +4 -4
  203. chia/cmds/dev/sim.py +8 -8
  204. chia/cmds/dump_keyring.py +3 -3
  205. chia/cmds/farm.py +6 -8
  206. chia/cmds/farm_funcs.py +25 -24
  207. chia/cmds/init_funcs.py +4 -4
  208. chia/cmds/keys.py +16 -18
  209. chia/cmds/keys_funcs.py +36 -36
  210. chia/cmds/netspace.py +1 -3
  211. chia/cmds/netspace_funcs.py +1 -2
  212. chia/cmds/options.py +3 -2
  213. chia/cmds/param_types.py +17 -16
  214. chia/cmds/passphrase.py +6 -7
  215. chia/cmds/passphrase_funcs.py +11 -13
  216. chia/cmds/peer.py +1 -3
  217. chia/cmds/peer_funcs.py +3 -3
  218. chia/cmds/plotnft.py +6 -7
  219. chia/cmds/plotnft_funcs.py +37 -26
  220. chia/cmds/rpc.py +3 -3
  221. chia/cmds/show.py +3 -5
  222. chia/cmds/show_funcs.py +9 -9
  223. chia/cmds/sim_funcs.py +25 -26
  224. chia/cmds/solver.py +1 -3
  225. chia/cmds/solver_funcs.py +1 -2
  226. chia/cmds/start_funcs.py +2 -2
  227. chia/cmds/wallet.py +76 -81
  228. chia/cmds/wallet_funcs.py +206 -177
  229. chia/consensus/augmented_chain.py +6 -6
  230. chia/consensus/block_body_validation.py +19 -15
  231. chia/consensus/block_creation.py +25 -21
  232. chia/consensus/block_header_validation.py +27 -13
  233. chia/consensus/block_height_map.py +3 -6
  234. chia/consensus/block_height_map_protocol.py +2 -2
  235. chia/consensus/block_record.py +2 -4
  236. chia/consensus/blockchain.py +58 -40
  237. chia/consensus/blockchain_interface.py +7 -7
  238. chia/consensus/coin_store_protocol.py +5 -6
  239. chia/consensus/condition_tools.py +4 -4
  240. chia/consensus/cost_calculator.py +2 -3
  241. chia/consensus/default_constants.py +16 -13
  242. chia/consensus/deficit.py +1 -3
  243. chia/consensus/difficulty_adjustment.py +3 -5
  244. chia/consensus/find_fork_point.py +2 -4
  245. chia/consensus/full_block_to_block_record.py +11 -13
  246. chia/consensus/generator_tools.py +2 -3
  247. chia/consensus/get_block_challenge.py +42 -26
  248. chia/consensus/get_block_generator.py +2 -3
  249. chia/consensus/make_sub_epoch_summary.py +8 -7
  250. chia/consensus/multiprocess_validation.py +31 -20
  251. chia/consensus/pos_quality.py +6 -23
  252. chia/consensus/pot_iterations.py +17 -44
  253. chia/consensus/signage_point.py +4 -5
  254. chia/consensus/vdf_info_computation.py +2 -4
  255. chia/daemon/client.py +8 -8
  256. chia/daemon/keychain_proxy.py +31 -37
  257. chia/daemon/server.py +32 -33
  258. chia/daemon/windows_signal.py +4 -3
  259. chia/data_layer/data_layer.py +86 -77
  260. chia/data_layer/data_layer_rpc_api.py +9 -9
  261. chia/data_layer/data_layer_rpc_client.py +13 -15
  262. chia/data_layer/data_layer_server.py +3 -3
  263. chia/data_layer/data_layer_util.py +14 -14
  264. chia/data_layer/data_layer_wallet.py +94 -101
  265. chia/data_layer/data_store.py +50 -50
  266. chia/data_layer/dl_wallet_store.py +9 -12
  267. chia/data_layer/download_data.py +8 -9
  268. chia/data_layer/s3_plugin_service.py +5 -9
  269. chia/data_layer/start_data_layer.py +5 -5
  270. chia/farmer/farmer.py +31 -31
  271. chia/farmer/farmer_api.py +45 -33
  272. chia/farmer/farmer_rpc_api.py +5 -4
  273. chia/farmer/farmer_rpc_client.py +6 -6
  274. chia/farmer/start_farmer.py +6 -6
  275. chia/full_node/block_store.py +13 -16
  276. chia/full_node/check_fork_next_block.py +1 -2
  277. chia/full_node/coin_store.py +15 -16
  278. chia/full_node/eligible_coin_spends.py +3 -3
  279. chia/full_node/fee_estimate_store.py +2 -3
  280. chia/full_node/fee_tracker.py +1 -2
  281. chia/full_node/full_block_utils.py +4 -4
  282. chia/full_node/full_node.py +238 -224
  283. chia/full_node/full_node_api.py +193 -150
  284. chia/full_node/full_node_rpc_api.py +53 -31
  285. chia/full_node/full_node_rpc_client.py +18 -19
  286. chia/full_node/full_node_store.py +45 -43
  287. chia/full_node/hint_management.py +2 -2
  288. chia/full_node/mempool.py +17 -19
  289. chia/full_node/mempool_manager.py +89 -42
  290. chia/full_node/pending_tx_cache.py +2 -3
  291. chia/full_node/start_full_node.py +5 -5
  292. chia/full_node/sync_store.py +3 -4
  293. chia/full_node/tx_processing_queue.py +34 -13
  294. chia/full_node/weight_proof.py +61 -48
  295. chia/harvester/harvester.py +25 -24
  296. chia/harvester/harvester_api.py +61 -38
  297. chia/harvester/harvester_rpc_api.py +10 -10
  298. chia/harvester/start_harvester.py +4 -4
  299. chia/introducer/introducer.py +3 -3
  300. chia/introducer/introducer_api.py +6 -4
  301. chia/introducer/start_introducer.py +4 -4
  302. chia/legacy/keyring.py +3 -3
  303. chia/plot_sync/delta.py +1 -2
  304. chia/plot_sync/receiver.py +20 -17
  305. chia/plot_sync/sender.py +15 -10
  306. chia/plotters/bladebit.py +7 -7
  307. chia/plotters/chiapos.py +2 -2
  308. chia/plotters/madmax.py +4 -4
  309. chia/plotters/plotters.py +4 -4
  310. chia/plotters/plotters_util.py +3 -3
  311. chia/plotting/cache.py +20 -14
  312. chia/plotting/check_plots.py +26 -35
  313. chia/plotting/create_plots.py +22 -23
  314. chia/plotting/manager.py +21 -14
  315. chia/plotting/prover.py +59 -42
  316. chia/plotting/util.py +16 -16
  317. chia/pools/pool_config.py +2 -1
  318. chia/pools/pool_puzzles.py +11 -12
  319. chia/pools/pool_wallet.py +34 -57
  320. chia/pools/pool_wallet_info.py +39 -10
  321. chia/protocols/farmer_protocol.py +8 -9
  322. chia/protocols/fee_estimate.py +3 -4
  323. chia/protocols/full_node_protocol.py +3 -4
  324. chia/protocols/harvester_protocol.py +27 -15
  325. chia/protocols/outbound_message.py +3 -3
  326. chia/protocols/pool_protocol.py +8 -9
  327. chia/protocols/shared_protocol.py +1 -2
  328. chia/protocols/solver_protocol.py +9 -2
  329. chia/protocols/timelord_protocol.py +4 -7
  330. chia/protocols/wallet_protocol.py +11 -12
  331. chia/rpc/rpc_client.py +9 -9
  332. chia/rpc/rpc_server.py +17 -17
  333. chia/rpc/util.py +2 -2
  334. chia/seeder/crawler.py +8 -8
  335. chia/seeder/crawler_api.py +21 -27
  336. chia/seeder/crawler_rpc_api.py +2 -2
  337. chia/seeder/dns_server.py +21 -21
  338. chia/seeder/start_crawler.py +4 -4
  339. chia/server/address_manager.py +15 -16
  340. chia/server/api_protocol.py +11 -11
  341. chia/server/chia_policy.py +46 -26
  342. chia/server/introducer_peers.py +2 -3
  343. chia/server/node_discovery.py +19 -19
  344. chia/server/rate_limit_numbers.py +4 -5
  345. chia/server/rate_limits.py +4 -4
  346. chia/server/resolve_peer_info.py +4 -4
  347. chia/server/server.py +49 -52
  348. chia/server/signal_handlers.py +6 -6
  349. chia/server/start_service.py +17 -17
  350. chia/server/upnp.py +4 -6
  351. chia/server/ws_connection.py +52 -37
  352. chia/simulator/add_blocks_in_batches.py +1 -3
  353. chia/simulator/block_tools.py +312 -200
  354. chia/simulator/full_node_simulator.py +56 -35
  355. chia/simulator/keyring.py +2 -3
  356. chia/simulator/setup_services.py +15 -15
  357. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  358. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  359. chia/simulator/simulator_protocol.py +1 -2
  360. chia/simulator/simulator_test_tools.py +3 -3
  361. chia/simulator/start_simulator.py +7 -7
  362. chia/simulator/wallet_tools.py +10 -10
  363. chia/solver/solver.py +10 -10
  364. chia/solver/solver_api.py +10 -8
  365. chia/solver/solver_rpc_api.py +2 -2
  366. chia/solver/start_solver.py +4 -4
  367. chia/ssl/cacert.pem +148 -90
  368. chia/ssl/chia_ca.crt +14 -10
  369. chia/ssl/chia_ca_old.crt +19 -0
  370. chia/ssl/create_ssl.py +4 -4
  371. chia/ssl/renewedselfsignedca.conf +4 -0
  372. chia/ssl/ssl_check.py +1 -2
  373. chia/timelord/iters_from_block.py +1 -4
  374. chia/timelord/start_timelord.py +4 -4
  375. chia/timelord/timelord.py +44 -40
  376. chia/timelord/timelord_api.py +6 -4
  377. chia/timelord/timelord_launcher.py +2 -2
  378. chia/timelord/timelord_rpc_api.py +2 -2
  379. chia/timelord/timelord_state.py +11 -12
  380. chia/types/block_protocol.py +1 -3
  381. chia/types/blockchain_format/coin.py +1 -3
  382. chia/types/blockchain_format/program.py +11 -8
  383. chia/types/blockchain_format/proof_of_space.py +123 -76
  384. chia/types/blockchain_format/tree_hash.py +3 -3
  385. chia/types/blockchain_format/vdf.py +1 -2
  386. chia/types/coin_spend.py +3 -3
  387. chia/types/mempool_item.py +5 -5
  388. chia/types/mempool_submission_status.py +2 -3
  389. chia/types/peer_info.py +1 -2
  390. chia/types/unfinished_header_block.py +3 -4
  391. chia/types/validation_state.py +1 -2
  392. chia/util/action_scope.py +8 -8
  393. chia/util/async_pool.py +5 -5
  394. chia/util/bech32m.py +1 -2
  395. chia/util/beta_metrics.py +2 -2
  396. chia/util/block_cache.py +4 -4
  397. chia/util/chia_logging.py +2 -2
  398. chia/util/chia_version.py +1 -2
  399. chia/util/config.py +15 -16
  400. chia/util/db_wrapper.py +26 -27
  401. chia/util/default_root.py +1 -2
  402. chia/util/errors.py +3 -3
  403. chia/util/file_keyring.py +14 -14
  404. chia/util/files.py +2 -3
  405. chia/util/hash.py +4 -4
  406. chia/util/initial-config.yaml +3 -5
  407. chia/util/inline_executor.py +2 -1
  408. chia/util/ip_address.py +1 -2
  409. chia/util/keychain.py +25 -27
  410. chia/util/keyring_wrapper.py +18 -19
  411. chia/util/lock.py +3 -4
  412. chia/util/log_exceptions.py +1 -2
  413. chia/util/lru_cache.py +2 -2
  414. chia/util/network.py +6 -6
  415. chia/util/path.py +2 -3
  416. chia/util/priority_mutex.py +2 -2
  417. chia/util/profiler.py +1 -2
  418. chia/util/safe_cancel_task.py +1 -2
  419. chia/util/streamable.py +22 -8
  420. chia/util/task_referencer.py +1 -1
  421. chia/util/timing.py +3 -3
  422. chia/util/virtual_project_analysis.py +6 -5
  423. chia/util/ws_message.py +2 -2
  424. chia/wallet/cat_wallet/cat_info.py +3 -4
  425. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  426. chia/wallet/cat_wallet/cat_utils.py +3 -4
  427. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  428. chia/wallet/cat_wallet/lineage_store.py +3 -4
  429. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  430. chia/wallet/coin_selection.py +9 -10
  431. chia/wallet/conditions.py +120 -105
  432. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  433. chia/wallet/derivation_record.py +1 -2
  434. chia/wallet/derive_keys.py +2 -4
  435. chia/wallet/did_wallet/did_info.py +10 -11
  436. chia/wallet/did_wallet/did_wallet.py +36 -82
  437. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  438. chia/wallet/driver_protocol.py +5 -7
  439. chia/wallet/lineage_proof.py +4 -4
  440. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  441. chia/wallet/nft_wallet/nft_info.py +8 -9
  442. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  443. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  444. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  445. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  446. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  447. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  448. chia/wallet/notification_manager.py +3 -3
  449. chia/wallet/notification_store.py +44 -61
  450. chia/wallet/outer_puzzles.py +6 -7
  451. chia/wallet/puzzle_drivers.py +34 -6
  452. chia/wallet/puzzles/clawback/drivers.py +6 -6
  453. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  454. chia/wallet/puzzles/load_clvm.py +1 -1
  455. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  456. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  457. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  458. chia/wallet/puzzles/tails.py +3 -3
  459. chia/wallet/singleton.py +5 -7
  460. chia/wallet/singleton_record.py +3 -3
  461. chia/wallet/start_wallet.py +5 -5
  462. chia/wallet/trade_manager.py +37 -58
  463. chia/wallet/trade_record.py +4 -4
  464. chia/wallet/trading/offer.py +59 -46
  465. chia/wallet/trading/trade_store.py +8 -9
  466. chia/wallet/transaction_record.py +8 -8
  467. chia/wallet/uncurried_puzzle.py +1 -2
  468. chia/wallet/util/clvm_streamable.py +12 -12
  469. chia/wallet/util/compute_hints.py +4 -5
  470. chia/wallet/util/curry_and_treehash.py +1 -2
  471. chia/wallet/util/merkle_tree.py +2 -3
  472. chia/wallet/util/peer_request_cache.py +8 -8
  473. chia/wallet/util/signing.py +85 -0
  474. chia/wallet/util/tx_config.py +15 -6
  475. chia/wallet/util/wallet_sync_utils.py +14 -16
  476. chia/wallet/util/wallet_types.py +2 -2
  477. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  478. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  479. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  480. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  481. chia/wallet/vc_wallet/vc_store.py +5 -6
  482. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  483. chia/wallet/wallet.py +50 -78
  484. chia/wallet/wallet_action_scope.py +11 -11
  485. chia/wallet/wallet_blockchain.py +12 -12
  486. chia/wallet/wallet_coin_record.py +12 -6
  487. chia/wallet/wallet_coin_store.py +24 -25
  488. chia/wallet/wallet_interested_store.py +3 -5
  489. chia/wallet/wallet_nft_store.py +10 -11
  490. chia/wallet/wallet_node.py +53 -61
  491. chia/wallet/wallet_node_api.py +5 -3
  492. chia/wallet/wallet_protocol.py +23 -23
  493. chia/wallet/wallet_puzzle_store.py +15 -18
  494. chia/wallet/wallet_request_types.py +778 -114
  495. chia/wallet/wallet_retry_store.py +1 -3
  496. chia/wallet/wallet_rpc_api.py +572 -909
  497. chia/wallet/wallet_rpc_client.py +87 -279
  498. chia/wallet/wallet_singleton_store.py +3 -4
  499. chia/wallet/wallet_state_manager.py +332 -106
  500. chia/wallet/wallet_transaction_store.py +11 -14
  501. chia/wallet/wallet_user_store.py +4 -6
  502. chia/wallet/wallet_weight_proof_handler.py +4 -4
  503. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
  504. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
  505. chia/apis.py +0 -21
  506. chia/consensus/check_time_locks.py +0 -57
  507. chia/data_layer/puzzles/__init__.py +0 -0
  508. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  509. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  510. chia/types/coin_record.py +0 -44
  511. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  512. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  513. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  514. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  515. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  516. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  517. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  518. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  520. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  521. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  522. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  524. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  525. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  526. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
  527. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
  528. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
@@ -7,7 +7,7 @@ import dataclasses
7
7
  import json
8
8
  import logging
9
9
  from os.path import dirname
10
- from typing import Optional, Union, cast
10
+ from typing import cast
11
11
 
12
12
  import pytest
13
13
  from chia_rs import (
@@ -52,7 +52,7 @@ from chia.types.validation_state import ValidationState
52
52
  from chia.util.bech32m import decode_puzzle_hash
53
53
  from chia.util.hash import std_hash
54
54
 
55
- SPType = Union[timelord_protocol.NewEndOfSubSlotVDF, timelord_protocol.NewSignagePointVDF]
55
+ SPType = timelord_protocol.NewEndOfSubSlotVDF | timelord_protocol.NewSignagePointVDF
56
56
  SPList = list[SPType]
57
57
 
58
58
 
@@ -61,8 +61,8 @@ async def test_harvester_receive_source_signing_data(
61
61
  farmer_harvester_2_simulators_zero_bits_plot_filter: tuple[
62
62
  FarmerService,
63
63
  HarvesterService,
64
- Union[FullNodeService, SimulatorFullNodeService],
65
- Union[FullNodeService, SimulatorFullNodeService],
64
+ FullNodeService | SimulatorFullNodeService,
65
+ FullNodeService | SimulatorFullNodeService,
66
66
  BlockTools,
67
67
  ],
68
68
  ) -> None:
@@ -121,12 +121,12 @@ async def test_harvester_receive_source_signing_data(
121
121
 
122
122
  async def intercept_harvester_request_signatures(
123
123
  self: HarvesterAPI, request: harvester_protocol.RequestSignatures
124
- ) -> Optional[Message]:
124
+ ) -> Message | None:
125
125
  nonlocal harvester
126
126
  nonlocal farmer_reward_address
127
127
 
128
128
  validate_harvester_request_signatures(request)
129
- result_msg: Optional[Message] = await HarvesterAPI.request_signatures(
129
+ result_msg: Message | None = await HarvesterAPI.request_signatures(
130
130
  cast(HarvesterAPI, harvester.server.api), request
131
131
  )
132
132
  assert result_msg is not None
@@ -158,15 +158,14 @@ async def test_harvester_receive_source_signing_data(
158
158
  assert hash
159
159
  assert src
160
160
 
161
- data: Optional[
162
- Union[
163
- FoliageBlockData,
164
- FoliageTransactionBlock,
165
- ClassgroupElement,
166
- ChallengeChainSubSlot,
167
- RewardChainSubSlot,
168
- ]
169
- ] = None
161
+ data: (
162
+ FoliageBlockData
163
+ | FoliageTransactionBlock
164
+ | ClassgroupElement
165
+ | ChallengeChainSubSlot
166
+ | RewardChainSubSlot
167
+ | None
168
+ ) = None
170
169
  if src.kind == uint8(SigningDataKind.FOLIAGE_BLOCK_DATA):
171
170
  data = FoliageBlockData.from_bytes(src.data)
172
171
  assert (
@@ -227,7 +226,7 @@ async def test_harvester_receive_source_signing_data(
227
226
 
228
227
  async def intercept_farmer_request_signed_values(
229
228
  self: FarmerAPI, request: farmer_protocol.RequestSignedValues
230
- ) -> Optional[Message]:
229
+ ) -> Message | None:
231
230
  nonlocal farmer
232
231
  nonlocal farmer_reward_address
233
232
  nonlocal full_node_2
@@ -284,8 +283,8 @@ async def test_harvester_fee_convention(
284
283
  farmer_harvester_2_simulators_zero_bits_plot_filter: tuple[
285
284
  FarmerService,
286
285
  HarvesterService,
287
- Union[FullNodeService, SimulatorFullNodeService],
288
- Union[FullNodeService, SimulatorFullNodeService],
286
+ FullNodeService | SimulatorFullNodeService,
287
+ FullNodeService | SimulatorFullNodeService,
289
288
  BlockTools,
290
289
  ],
291
290
  caplog: pytest.LogCaptureFixture,
@@ -314,8 +313,8 @@ async def test_harvester_fee_invalid_convention(
314
313
  farmer_harvester_2_simulators_zero_bits_plot_filter: tuple[
315
314
  FarmerService,
316
315
  HarvesterService,
317
- Union[FullNodeService, SimulatorFullNodeService],
318
- Union[FullNodeService, SimulatorFullNodeService],
316
+ FullNodeService | SimulatorFullNodeService,
317
+ FullNodeService | SimulatorFullNodeService,
319
318
  BlockTools,
320
319
  ],
321
320
  caplog: pytest.LogCaptureFixture,
@@ -437,7 +436,7 @@ def node_type_connected(server: ChiaServer, node_type: NodeType) -> bool:
437
436
 
438
437
  def decode_sp(
439
438
  is_sub_slot: bool, sp64: str
440
- ) -> Union[timelord_protocol.NewEndOfSubSlotVDF, timelord_protocol.NewSignagePointVDF]:
439
+ ) -> timelord_protocol.NewEndOfSubSlotVDF | timelord_protocol.NewSignagePointVDF:
441
440
  sp_bytes = base64.b64decode(sp64)
442
441
  if is_sub_slot:
443
442
  return timelord_protocol.NewEndOfSubSlotVDF.from_bytes(sp_bytes)
@@ -496,7 +495,7 @@ async def inject_signage_points(signage_points: SPList, full_node_1: FullNode, f
496
495
  api2 = cast(FullNodeAPI, full_node_2.server.api)
497
496
 
498
497
  for i, sp in enumerate(signage_points):
499
- req: Union[full_node_protocol.RespondEndOfSubSlot, full_node_protocol.RespondSignagePoint]
498
+ req: full_node_protocol.RespondEndOfSubSlot | full_node_protocol.RespondSignagePoint
500
499
 
501
500
  if isinstance(sp, timelord_protocol.NewEndOfSubSlotVDF):
502
501
  full_node_1.log.info(f"Injecting SP for end of sub-slot @ {i}")
@@ -214,28 +214,28 @@ def test_current_block_height_new_block_then_new_height() -> None:
214
214
 
215
215
  @pytest.mark.anyio
216
216
  async def test_mm_new_peak_changes_fee_estimator_block_height() -> None:
217
- mempool_manager = await instantiate_mempool_manager(zero_calls_get_coin_records)
218
- block2 = create_test_block_record(height=uint32(2))
219
- await mempool_manager.new_peak(block2, None)
220
- assert mempool_manager.mempool.fee_estimator.block_height == uint32(2) # type: ignore[attr-defined]
217
+ async with instantiate_mempool_manager(zero_calls_get_coin_records) as mempool_manager:
218
+ block2 = create_test_block_record(height=uint32(2))
219
+ await mempool_manager.new_peak(block2, None)
220
+ assert mempool_manager.mempool.fee_estimator.block_height == uint32(2) # type: ignore[attr-defined]
221
221
 
222
222
 
223
223
  @pytest.mark.anyio
224
224
  async def test_mm_calls_new_block_height() -> None:
225
- mempool_manager = await instantiate_mempool_manager(zero_calls_get_coin_records)
226
- new_block_height_called = False
227
-
228
- def test_new_block_height_called(self: FeeEstimatorInterface, height: uint32) -> None:
229
- nonlocal new_block_height_called
230
- new_block_height_called = True
231
-
232
- # Replace new_block_height with test function
233
- mempool_manager.fee_estimator.new_block_height = types.MethodType( # type: ignore[method-assign]
234
- test_new_block_height_called, mempool_manager.fee_estimator
235
- )
236
- block2 = create_test_block_record(height=uint32(2))
237
- await mempool_manager.new_peak(block2, None)
238
- assert new_block_height_called
225
+ async with instantiate_mempool_manager(zero_calls_get_coin_records) as mempool_manager:
226
+ new_block_height_called = False
227
+
228
+ def test_new_block_height_called(self: FeeEstimatorInterface, height: uint32) -> None:
229
+ nonlocal new_block_height_called
230
+ new_block_height_called = True
231
+
232
+ # Replace new_block_height with test function
233
+ mempool_manager.fee_estimator.new_block_height = types.MethodType( # type: ignore[method-assign]
234
+ test_new_block_height_called, mempool_manager.fee_estimator
235
+ )
236
+ block2 = create_test_block_record(height=uint32(2))
237
+ await mempool_manager.new_peak(block2, None)
238
+ assert new_block_height_called
239
239
 
240
240
 
241
241
  def test_add_tx_called() -> None:
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import re
4
+ from collections.abc import AsyncGenerator
4
5
  from typing import Any
5
6
 
6
7
  import pytest
@@ -23,28 +24,29 @@ from chia.wallet.wallet_service import WalletService
23
24
  @pytest.fixture(scope="function")
24
25
  async def setup_node_and_rpc(
25
26
  two_wallet_nodes_services: tuple[list[SimulatorFullNodeService], list[WalletService], BlockTools],
26
- ) -> tuple[FullNodeRpcClient, FullNodeRpcApi]:
27
+ ) -> AsyncGenerator[tuple[FullNodeRpcClient, FullNodeRpcApi], None]:
27
28
  full_nodes, wallets, bt = two_wallet_nodes_services
28
29
  wallet = wallets[0]._node.wallet_state_manager.main_wallet
29
30
  full_node_apis = [full_node_service._api for full_node_service in full_nodes]
30
31
  full_node_api: FullNodeSimulator = full_node_apis[0]
31
32
  full_node_service_1 = full_nodes[0]
32
33
  assert full_node_service_1.rpc_server is not None
33
- client = await FullNodeRpcClient.create(
34
+
35
+ async with FullNodeRpcClient.create_as_context(
34
36
  bt.config["self_hostname"],
35
37
  full_node_service_1.rpc_server.listen_port,
36
38
  full_node_service_1.root_path,
37
39
  full_node_service_1.config,
38
- )
39
- full_node_rpc_api = FullNodeRpcApi(full_node_api.full_node)
40
+ ) as client:
41
+ full_node_rpc_api = FullNodeRpcApi(full_node_api.full_node)
40
42
 
41
- async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
42
- ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
43
+ async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
44
+ ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
43
45
 
44
- for i in range(4):
45
- await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
46
+ for i in range(4):
47
+ await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
46
48
 
47
- return client, full_node_rpc_api
49
+ yield client, full_node_rpc_api
48
50
 
49
51
 
50
52
  @pytest.fixture(scope="function")
@@ -15,6 +15,7 @@ from chia._tests.conftest import HarvesterFarmerEnvironment
15
15
  from chia._tests.plotting.util import get_test_plots
16
16
  from chia._tests.util.time_out_assert import time_out_assert
17
17
  from chia.harvester.harvester_api import HarvesterAPI
18
+ from chia.plotting.prover import V1Prover, V2Prover
18
19
  from chia.plotting.util import PlotInfo
19
20
  from chia.protocols import harvester_protocol
20
21
  from chia.protocols.harvester_protocol import PoolDifficulty
@@ -85,10 +86,16 @@ def create_test_setup(
85
86
 
86
87
  @contextmanager
87
88
  def mock_successful_proof(plot_info: PlotInfo) -> Iterator[None]:
88
- with patch.object(plot_info.prover, "get_full_proof") as mock_get_proof:
89
- mock_proof = MagicMock(spec=ProofOfSpace)
90
- mock_get_proof.return_value = mock_proof, None
91
- yield
89
+ if isinstance(plot_info.prover, V1Prover):
90
+ with patch.object(plot_info.prover, "get_full_proof") as mock_get_proof:
91
+ mock_proof = MagicMock(spec=ProofOfSpace)
92
+ mock_get_proof.return_value = mock_proof, None
93
+ yield
94
+ elif isinstance(plot_info.prover, V2Prover):
95
+ with patch.object(plot_info.prover, "get_partial_proof") as mock_get_proof:
96
+ mock_proof = MagicMock(spec=ProofOfSpace)
97
+ mock_get_proof.return_value = [uint64(1)] * 64, None
98
+ yield
92
99
 
93
100
 
94
101
  def assert_farming_info_sent(mock_peer: MagicMock) -> None:
@@ -3,14 +3,14 @@ from __future__ import annotations
3
3
  import asyncio
4
4
  import contextlib
5
5
  import functools
6
- from collections.abc import AsyncIterator
6
+ from collections.abc import AsyncIterator, Callable
7
7
  from dataclasses import dataclass, field, replace
8
8
  from pathlib import Path
9
9
  from shutil import copy
10
- from typing import Any, Callable, Optional
10
+ from typing import Any
11
11
 
12
12
  import pytest
13
- from chia_rs import G1Element
13
+ from chia_rs import G1Element, PlotParam
14
14
  from chia_rs.sized_bytes import bytes32
15
15
  from chia_rs.sized_ints import uint8, uint32, uint64
16
16
 
@@ -109,6 +109,10 @@ class ExpectedResult:
109
109
  self.duplicates_delta.removals += [str(x) for x in list_paths]
110
110
 
111
111
 
112
+ def equal_param(a: PlotParam, b: PlotParam) -> bool:
113
+ return a.size_v1 == b.size_v1 and a.strength_v2 == b.strength_v2
114
+
115
+
112
116
  @dataclass
113
117
  class Environment:
114
118
  root_path: Path
@@ -127,7 +131,7 @@ class Environment:
127
131
  split_farmer_service_manager: SplitAsyncManager[FarmerService]
128
132
  split_harvester_managers: list[SplitAsyncManager[Harvester]]
129
133
 
130
- def get_harvester(self, peer_id: bytes32) -> Optional[Harvester]:
134
+ def get_harvester(self, peer_id: bytes32) -> Harvester | None:
131
135
  for harvester in self.harvesters:
132
136
  assert harvester.server is not None
133
137
  if harvester.server.node_id == peer_id:
@@ -183,10 +187,10 @@ class Environment:
183
187
  self.remove_directory(harvester_index, self.dir_invalid, State.invalid)
184
188
  self.remove_directory(harvester_index, self.dir_duplicates, State.duplicates)
185
189
 
186
- async def plot_sync_callback(self, peer_id: bytes32, delta: Optional[Delta]) -> None:
190
+ async def plot_sync_callback(self, peer_id: bytes32, delta: Delta | None) -> None:
187
191
  if delta is None:
188
192
  return
189
- harvester: Optional[Harvester] = self.get_harvester(peer_id)
193
+ harvester: Harvester | None = self.get_harvester(peer_id)
190
194
  assert harvester is not None
191
195
  expected = self.expected[self.harvesters.index(harvester)]
192
196
  assert len(expected.valid_delta.additions) == len(delta.valid.additions)
@@ -195,8 +199,7 @@ class Environment:
195
199
  plot = harvester.plot_manager.plots.get(Path(path), None)
196
200
  assert plot is not None
197
201
  assert plot.prover.get_filename() == delta.valid.additions[path].filename
198
- # TODO: todo_v2_plots support v2 plots
199
- assert plot.prover.get_size().size_v1 == delta.valid.additions[path].size
202
+ assert equal_param(plot.prover.get_param(), delta.valid.additions[path].param())
200
203
  assert plot.prover.get_id() == delta.valid.additions[path].plot_id
201
204
  assert plot.prover.get_compression_level() == delta.valid.additions[path].compression_level
202
205
  assert plot.pool_public_key == delta.valid.additions[path].pool_public_key
@@ -257,8 +260,7 @@ class Environment:
257
260
  for path, plot_info in plot_manager.plots.items():
258
261
  assert str(path) in receiver.plots()
259
262
  assert plot_info.prover.get_filename() == receiver.plots()[str(path)].filename
260
- # TODO: todo_v2_plots support v2 plots
261
- assert plot_info.prover.get_size().size_v1 == receiver.plots()[str(path)].size
263
+ assert equal_param(plot_info.prover.get_param(), receiver.plots()[str(path)].param())
262
264
  assert plot_info.prover.get_id() == receiver.plots()[str(path)].plot_id
263
265
  assert plot_info.prover.get_compression_level() == receiver.plots()[str(path)].compression_level
264
266
  assert plot_info.pool_public_key == receiver.plots()[str(path)].pool_public_key
@@ -431,7 +433,7 @@ async def test_sync_keys_missing(environment: Environment) -> None:
431
433
  # Run again two times to make sure we still get the same results in repeated refresh intervals
432
434
  await env.run_sync_test()
433
435
  await env.run_sync_test()
434
- # Drop all but 2 plots with missing keys and test sync inbetween
436
+ # Drop all but 2 plots with missing keys and test sync in between
435
437
  assert len(env.dir_keys_missing) > 2
436
438
  for _ in range(len(env.dir_keys_missing) - 2):
437
439
  drop_plot = env.dir_keys_missing.path_list()[0]
@@ -4,14 +4,16 @@ import dataclasses
4
4
  import logging
5
5
  import random
6
6
  import time
7
- from typing import Any, Callable, Union
7
+ from collections.abc import Callable
8
+ from typing import Any
8
9
 
9
10
  import pytest
10
- from chia_rs import G1Element, PlotSize
11
+ from chia_rs import G1Element
11
12
  from chia_rs.sized_bytes import bytes32
12
13
  from chia_rs.sized_ints import uint8, uint32, uint64
13
14
 
14
15
  from chia._tests.plot_sync.util import get_dummy_connection
16
+ from chia.consensus.default_constants import DEFAULT_CONSTANTS
15
17
  from chia.consensus.pos_quality import UI_ACTUAL_SPACE_CONSTANT_FACTOR, _expected_plot_size
16
18
  from chia.plot_sync.delta import Delta
17
19
  from chia.plot_sync.receiver import Receiver, Sync, get_list_or_len
@@ -89,7 +91,7 @@ def assert_error_response(plot_sync: Receiver, error_code: ErrorCodes) -> None:
89
91
  assert response.error.code == error_code.value
90
92
 
91
93
 
92
- def pre_function_validate(receiver: Receiver, data: Union[list[Plot], list[str]], expected_state: State) -> None:
94
+ def pre_function_validate(receiver: Receiver, data: list[Plot] | list[str], expected_state: State) -> None:
93
95
  if expected_state == State.loaded:
94
96
  for plot_info in data:
95
97
  assert type(plot_info) is Plot
@@ -108,7 +110,7 @@ def pre_function_validate(receiver: Receiver, data: Union[list[Plot], list[str]]
108
110
  assert path not in receiver.duplicates()
109
111
 
110
112
 
111
- def post_function_validate(receiver: Receiver, data: Union[list[Plot], list[str]], expected_state: State) -> None:
113
+ def post_function_validate(receiver: Receiver, data: list[Plot] | list[str], expected_state: State) -> None:
112
114
  if expected_state == State.loaded:
113
115
  for plot_info in data:
114
116
  assert type(plot_info) is Plot
@@ -163,7 +165,7 @@ async def run_sync_step(receiver: Receiver, sync_step: SyncStepData) -> None:
163
165
 
164
166
  def plot_sync_setup(seeded_random: random.Random) -> tuple[Receiver, list[SyncStepData]]:
165
167
  harvester_connection = get_dummy_connection(NodeType.HARVESTER, bytes32.random(seeded_random))
166
- receiver = Receiver(harvester_connection, dummy_callback) # type:ignore[arg-type]
168
+ receiver = Receiver(harvester_connection, dummy_callback, DEFAULT_CONSTANTS) # type:ignore[arg-type]
167
169
 
168
170
  # Create example plot data
169
171
  path_list = [str(x) for x in range(40)]
@@ -188,7 +190,7 @@ def plot_sync_setup(seeded_random: random.Random) -> tuple[Receiver, list[SyncSt
188
190
  # TODO: todo_v2_plots support v2 plots
189
191
  receiver._total_effective_plot_size = int(
190
192
  sum(
191
- UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(PlotSize.make_v1(plot.size)))
193
+ UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(plot.param(), DEFAULT_CONSTANTS))
192
194
  for plot in receiver.plots().values()
193
195
  )
194
196
  )
@@ -221,6 +223,7 @@ def test_default_values(seeded_random: random.Random) -> None:
221
223
  bytes32.random(seeded_random),
222
224
  ), # type:ignore[arg-type]
223
225
  dummy_callback, # type:ignore[arg-type]
226
+ DEFAULT_CONSTANTS,
224
227
  )
225
228
  )
226
229
 
@@ -270,9 +273,8 @@ async def test_to_dict(counts_only: bool, seeded_random: random.Random) -> None:
270
273
  assert get_list_or_len(plot_sync_dict_1["duplicates"], not counts_only) == 0
271
274
  assert plot_sync_dict_1["total_plot_size"] == sum(plot.file_size for plot in receiver.plots().values())
272
275
  assert plot_sync_dict_1["total_effective_plot_size"] == int(
273
- # TODO: todo_v2_plots support v2 plots
274
276
  sum(
275
- UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(PlotSize.make_v1(plot.size)))
277
+ UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(plot.param(), DEFAULT_CONSTANTS))
276
278
  for plot in receiver.plots().values()
277
279
  )
278
280
  )
@@ -320,10 +322,9 @@ async def test_to_dict(counts_only: bool, seeded_random: random.Random) -> None:
320
322
  assert get_list_or_len(sync_steps[State.duplicates].args[0], counts_only) == plot_sync_dict_3["duplicates"]
321
323
 
322
324
  assert plot_sync_dict_3["total_plot_size"] == sum(plot.file_size for plot in receiver.plots().values())
323
- # TODO: todo_v2_plots support v2 plots
324
325
  assert plot_sync_dict_3["total_effective_plot_size"] == int(
325
326
  sum(
326
- UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(PlotSize.make_v1(plot.size)))
327
+ UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(plot.param(), DEFAULT_CONSTANTS))
327
328
  for plot in receiver.plots().values()
328
329
  )
329
330
  )
@@ -10,7 +10,7 @@ from collections.abc import AsyncIterator
10
10
  from dataclasses import dataclass, field
11
11
  from enum import Enum
12
12
  from pathlib import Path
13
- from typing import Any, Optional
13
+ from typing import Any
14
14
 
15
15
  import pytest
16
16
  from chia_rs import G1Element
@@ -102,7 +102,7 @@ class TestData:
102
102
  batch_size = self.harvester.plot_manager.refresh_parameter.batch_size
103
103
 
104
104
  # Used to capture the sync id in `run_internal`
105
- sync_id: Optional[uint64] = None
105
+ sync_id: uint64 | None = None
106
106
 
107
107
  def run_internal() -> None:
108
108
  nonlocal sync_id
@@ -4,7 +4,6 @@ import contextlib
4
4
  import time
5
5
  from collections.abc import AsyncIterator
6
6
  from dataclasses import dataclass
7
- from typing import Optional
8
7
 
9
8
  from chia_rs.sized_bytes import bytes32
10
9
  from chia_rs.sized_ints import uint16, uint64
@@ -25,7 +24,7 @@ class WSChiaConnectionDummy:
25
24
  connection_type: NodeType
26
25
  peer_node_id: bytes32
27
26
  peer_info: PeerInfo = PeerInfo("127.0.0.1", uint16(0))
28
- last_sent_message: Optional[Message] = None
27
+ last_sent_message: Message | None = None
29
28
 
30
29
  async def send_message(self, message: Message) -> None:
31
30
  self.last_sent_message = message
@@ -3,12 +3,12 @@ from __future__ import annotations
3
3
  import logging
4
4
  import sys
5
5
  import time
6
- from collections.abc import Iterator
6
+ from collections.abc import Callable, Iterator
7
7
  from dataclasses import dataclass, replace
8
8
  from os import unlink
9
9
  from pathlib import Path
10
10
  from shutil import copy, move
11
- from typing import Callable, Optional, cast
11
+ from typing import cast
12
12
 
13
13
  import pytest
14
14
  from chia_rs import G1Element
@@ -18,6 +18,7 @@ from chiapos import DiskProver
18
18
  from chia._tests.plotting.util import get_test_plots
19
19
  from chia._tests.util.misc import boolean_datacases
20
20
  from chia._tests.util.time_out_assert import time_out_assert
21
+ from chia.consensus.default_constants import DEFAULT_CONSTANTS
21
22
  from chia.plotting.cache import CURRENT_VERSION, CacheDataV1
22
23
  from chia.plotting.manager import Cache, PlotManager
23
24
  from chia.plotting.prover import V1Prover
@@ -90,7 +91,7 @@ class PlotRefreshTester:
90
91
  expected_result_matched: bool
91
92
 
92
93
  def __init__(self, root_path: Path):
93
- self.plot_manager = PlotManager(root_path, self.refresh_callback)
94
+ self.plot_manager = PlotManager(root_path, self.refresh_callback, DEFAULT_CONSTANTS)
94
95
  # Set a very high refresh interval here to avoid unintentional refresh cycles
95
96
  self.plot_manager.refresh_parameter = replace(
96
97
  self.plot_manager.refresh_parameter, interval_seconds=uint32(10000)
@@ -508,8 +509,8 @@ async def test_plot_info_caching(environment, bt):
508
509
  assert plot_manager.plots[path].prover.get_filename() == plot_info.prover.get_filename()
509
510
  assert plot_manager.plots[path].prover.get_id() == plot_info.prover.get_id()
510
511
  assert plot_manager.plots[path].prover.get_memo() == plot_info.prover.get_memo()
511
- assert plot_manager.plots[path].prover.get_size().size_v1 == plot_info.prover.get_size().size_v1
512
- assert plot_manager.plots[path].prover.get_size().size_v2 == plot_info.prover.get_size().size_v2
512
+ assert plot_manager.plots[path].prover.get_param().size_v1 == plot_info.prover.get_param().size_v1
513
+ assert plot_manager.plots[path].prover.get_param().strength_v2 == plot_info.prover.get_param().strength_v2
513
514
  assert plot_manager.plots[path].prover.get_compression_level() == plot_info.prover.get_compression_level()
514
515
  assert plot_manager.plots[path].pool_public_key == plot_info.pool_public_key
515
516
  assert plot_manager.plots[path].pool_contract_puzzle_hash == plot_info.pool_contract_puzzle_hash
@@ -663,7 +664,7 @@ async def test_cache_lifetime(environment: Environment) -> None:
663
664
  )
664
665
  @pytest.mark.anyio
665
666
  async def test_callback_event_raises(environment, event_to_raise: PlotRefreshEvents):
666
- last_event_fired: Optional[PlotRefreshEvents] = None
667
+ last_event_fired: PlotRefreshEvents | None = None
667
668
 
668
669
  def raising_callback(event: PlotRefreshEvents, _: PlotRefreshResult):
669
670
  nonlocal last_event_fired
@@ -12,44 +12,57 @@ from chia.plotting.prover import PlotVersion, V1Prover, V2Prover, get_prover_fro
12
12
 
13
13
 
14
14
  class TestProver:
15
+ def test_get_prover_from_file_with_plot1_still_works(self) -> None:
16
+ with tempfile.NamedTemporaryFile(suffix=".plot", delete=False) as f:
17
+ temp_path = f.name
18
+ try:
19
+ with pytest.raises(Exception) as exc_info:
20
+ get_prover_from_file(temp_path)
21
+ assert not isinstance(exc_info.value, NotImplementedError)
22
+ finally:
23
+ Path(temp_path).unlink()
24
+
25
+ def test_unsupported_file_extension_raises_value_error(self) -> None:
26
+ with pytest.raises(ValueError, match="Unsupported plot file"):
27
+ get_prover_from_file("/nonexistent/path/test.txt")
28
+
29
+
30
+ # TODO: todo_v2_plots enable these tests once we have test plots we can load
31
+ @pytest.mark.skip("we don't have v2 test plots yet")
32
+ class TestV2Prover:
15
33
  def test_v2_prover_init_with_nonexistent_file(self) -> None:
16
- prover = V2Prover("/nonexistent/path/test.plot2")
34
+ prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
17
35
  assert prover.get_version() == PlotVersion.V2
18
36
  assert prover.get_filename() == "/nonexistent/path/test.plot2"
19
37
 
20
- def test_v2_prover_get_size_raises_error(self) -> None:
21
- prover = V2Prover("/nonexistent/path/test.plot2")
38
+ def test_v2_prover_get_param_raises_error(self) -> None:
39
+ prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
22
40
  with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
23
- prover.get_size()
41
+ prover.get_param()
24
42
 
25
43
  def test_v2_prover_get_memo_raises_error(self) -> None:
26
- prover = V2Prover("/nonexistent/path/test.plot2")
44
+ prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
27
45
  with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
28
46
  prover.get_memo()
29
47
 
30
48
  def test_v2_prover_get_compression_level(self) -> None:
31
- prover = V2Prover("/nonexistent/path/test.plot2")
49
+ prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
32
50
  assert prover.get_compression_level() == uint8(0)
33
51
 
34
52
  def test_v2_prover_get_id_raises_error(self) -> None:
35
- prover = V2Prover("/nonexistent/path/test.plot2")
53
+ prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
36
54
  with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
37
55
  prover.get_id()
38
56
 
39
57
  def test_v2_prover_get_qualities_for_challenge_raises_error(self) -> None:
40
- prover = V2Prover("/nonexistent/path/test.plot2")
58
+ prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
41
59
  with pytest.raises(
42
60
  AssertionError, match="V2 plot format does not support qualities directly, use partial proofs"
43
61
  ):
44
- prover.get_qualities_for_challenge(bytes32(b"1" * 32))
45
-
46
- def test_v2_prover_get_full_proof_raises_error(self) -> None:
47
- prover = V2Prover("/nonexistent/path/test.plot2")
48
- with pytest.raises(AssertionError, match="V2 plot format require solver to get full proof"):
49
- prover.get_full_proof(bytes32(b"1" * 32), 0)
62
+ prover.get_qualities_for_challenge(bytes32(b"1" * 32), uint8(5))
50
63
 
51
64
  def test_v2_prover_bytes_raises_error(self) -> None:
52
- prover = V2Prover("/nonexistent/path/test.plot2")
65
+ prover = V2Prover.from_filename("/nonexistent/path/test.plot2")
53
66
  with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
54
67
  bytes(prover)
55
68
 
@@ -61,21 +74,7 @@ class TestProver:
61
74
  prover = get_prover_from_file("/nonexistent/path/test.plot2")
62
75
  assert prover.get_version() == PlotVersion.V2
63
76
  with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
64
- prover.get_size()
65
-
66
- def test_get_prover_from_file_with_plot1_still_works(self) -> None:
67
- with tempfile.NamedTemporaryFile(suffix=".plot", delete=False) as f:
68
- temp_path = f.name
69
- try:
70
- with pytest.raises(Exception) as exc_info:
71
- get_prover_from_file(temp_path)
72
- assert not isinstance(exc_info.value, NotImplementedError)
73
- finally:
74
- Path(temp_path).unlink()
75
-
76
- def test_unsupported_file_extension_raises_value_error(self) -> None:
77
- with pytest.raises(ValueError, match="Unsupported plot file"):
78
- get_prover_from_file("/nonexistent/path/test.txt")
77
+ prover.get_param()
79
78
 
80
79
 
81
80
  class TestV1Prover:
@@ -87,13 +86,6 @@ class TestV1Prover:
87
86
 
88
87
 
89
88
  class TestGetProverFromBytes:
90
- def test_get_prover_from_bytes_v2_plot(self) -> None:
91
- with patch("chia.plotting.prover.V2Prover.from_bytes") as mock_v2_from_bytes:
92
- mock_prover = MagicMock()
93
- mock_v2_from_bytes.return_value = mock_prover
94
- result = get_prover_from_bytes("test.plot2", b"test_data")
95
- assert result == mock_prover
96
-
97
89
  def test_get_prover_from_bytes_v1_plot(self) -> None:
98
90
  with patch("chia.plotting.prover.DiskProver") as mock_disk_prover_class:
99
91
  mock_disk_prover = MagicMock()
@@ -102,5 +94,5 @@ class TestGetProverFromBytes:
102
94
  assert isinstance(result, V1Prover)
103
95
 
104
96
  def test_get_prover_from_bytes_unsupported_extension(self) -> None:
105
- with pytest.raises(ValueError, match="Unsupported plot file"):
97
+ with pytest.raises((RuntimeError, ValueError)):
106
98
  get_prover_from_bytes("test.txt", b"test_data")
@@ -4,7 +4,7 @@ import json
4
4
  import re
5
5
  from dataclasses import dataclass
6
6
  from io import StringIO
7
- from typing import Optional, cast
7
+ from typing import cast
8
8
 
9
9
  import click
10
10
  import pytest
@@ -59,8 +59,8 @@ pytestmark = [pytest.mark.limit_consensus_modes(reason="irrelevant")]
59
59
  class StateUrlCase:
60
60
  id: str
61
61
  state: str
62
- pool_url: Optional[str]
63
- expected_error: Optional[str] = None
62
+ pool_url: str | None
63
+ expected_error: str | None = None
64
64
  marks: Marks = ()
65
65
 
66
66
 
@@ -992,9 +992,7 @@ async def test_plotnft_cli_misc(mocker: MockerFixture, consensus_mode: Consensus
992
992
  )
993
993
 
994
994
  # Test fall-through raise in create
995
- mocker.patch.object(
996
- test_rpc_client, "create_new_pool_wallet", create=True, side_effect=ValueError("Injected error")
997
- )
995
+ mocker.patch.object(test_rpc_client, "create_new_wallet", create=True, side_effect=ValueError("Injected error"))
998
996
  with pytest.raises(CliRpcConnectionError, match="Error creating plot NFT: Injected error"):
999
997
  await create(
1000
998
  wallet_info=WalletClientInfo(client=cast(WalletRpcClient, test_rpc_client), fingerprint=0, config=dict()),