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
@@ -2,16 +2,16 @@ from __future__ import annotations
2
2
 
3
3
  import io
4
4
  import re
5
+ from collections.abc import Callable
5
6
  from dataclasses import dataclass, field, fields
6
7
  from enum import Enum
7
- from typing import Any, Callable, ClassVar, Optional, get_type_hints
8
+ from typing import Any, ClassVar, Literal, get_args, get_type_hints
8
9
 
9
10
  import pytest
10
11
  from chia_rs import FullBlock, G1Element, SubEpochChallengeSegment
11
12
  from chia_rs.sized_bytes import bytes4, bytes32
12
13
  from chia_rs.sized_ints import uint8, uint32, uint64
13
14
  from clvm_tools import binutils
14
- from typing_extensions import Literal, get_args
15
15
 
16
16
  from chia.protocols.wallet_protocol import RespondRemovals
17
17
  from chia.simulator.block_tools import BlockTools, test_constants
@@ -374,8 +374,8 @@ def test_not_lists() -> None:
374
374
 
375
375
 
376
376
  def test_basic_optional() -> None:
377
- assert is_type_SpecificOptional(Optional[int])
378
- assert is_type_SpecificOptional(Optional[int])
377
+ assert is_type_SpecificOptional(int | None)
378
+ assert is_type_SpecificOptional(int | None)
379
379
  assert not is_type_SpecificOptional(list[int])
380
380
 
381
381
 
@@ -418,10 +418,10 @@ class PostInitTestClassBad(Streamable):
418
418
  @streamable
419
419
  @dataclass(frozen=True)
420
420
  class PostInitTestClassOptional(Streamable):
421
- a: Optional[uint8]
422
- b: Optional[uint8]
423
- c: Optional[uint8]
424
- d: Optional[uint8]
421
+ a: uint8 | None
422
+ b: uint8 | None
423
+ c: uint8 | None
424
+ d: uint8 | None
425
425
 
426
426
 
427
427
  @streamable
@@ -537,8 +537,8 @@ def test_basic() -> None:
537
537
  b: uint32
538
538
  c: list[uint32]
539
539
  d: list[list[uint32]]
540
- e: Optional[uint32]
541
- f: Optional[uint32]
540
+ e: uint32 | None
541
+ f: uint32 | None
542
542
  g: tuple[uint32, str, bytes]
543
543
  h: dict[uint32, str]
544
544
  i: IntegerEnum
@@ -590,9 +590,9 @@ def test_json(bt: BlockTools) -> None:
590
590
  @streamable
591
591
  @dataclass(frozen=True)
592
592
  class OptionalTestClass(Streamable):
593
- a: Optional[str]
594
- b: Optional[bool]
595
- c: Optional[list[Optional[str]]]
593
+ a: str | None
594
+ b: bool | None
595
+ c: list[str | None] | None
596
596
 
597
597
 
598
598
  @pytest.mark.parametrize(
@@ -606,7 +606,7 @@ class OptionalTestClass(Streamable):
606
606
  (None, None, None),
607
607
  ],
608
608
  )
609
- def test_optional_json(a: Optional[str], b: Optional[bool], c: Optional[list[Optional[str]]]) -> None:
609
+ def test_optional_json(a: str | None, b: bool | None, c: list[str | None] | None) -> None:
610
610
  obj: OptionalTestClass = OptionalTestClass.from_json_dict({"a": a, "b": b, "c": c})
611
611
  assert obj.a == a
612
612
  assert obj.b == b
@@ -623,7 +623,7 @@ class TestClassRecursive1(Streamable):
623
623
  @dataclass(frozen=True)
624
624
  class TestClassRecursive2(Streamable):
625
625
  a: uint32
626
- b: list[Optional[list[TestClassRecursive1]]]
626
+ b: list[list[TestClassRecursive1] | None]
627
627
  c: bytes32
628
628
 
629
629
 
@@ -637,7 +637,7 @@ def test_recursive_json() -> None:
637
637
 
638
638
 
639
639
  def test_recursive_types() -> None:
640
- coin: Optional[Coin] = None
640
+ coin: Coin | None = None
641
641
  l1 = [(bytes32([2] * 32), coin)]
642
642
  rr = RespondRemovals(uint32(1), bytes32([1] * 32), l1, None)
643
643
  RespondRemovals(rr.height, rr.header_hash, rr.coins, rr.proofs)
@@ -650,7 +650,7 @@ def test_ambiguous_deserialization_optionals() -> None:
650
650
  @streamable
651
651
  @dataclass(frozen=True)
652
652
  class TestClassOptional(Streamable):
653
- a: Optional[uint8]
653
+ a: uint8 | None
654
654
 
655
655
  # Does not have the required elements
656
656
  with pytest.raises(AssertionError):
@@ -2,8 +2,9 @@ from __future__ import annotations
2
2
 
3
3
  import asyncio
4
4
  import contextlib
5
+ from collections.abc import Callable
5
6
  from dataclasses import dataclass
6
- from typing import TYPE_CHECKING, Callable, Optional
7
+ from typing import TYPE_CHECKING
7
8
 
8
9
  import aiosqlite
9
10
  import pytest
@@ -494,7 +495,7 @@ async def test_foreign_key_pragma_rolls_back_on_foreign_key_error() -> None:
494
495
  @dataclass
495
496
  class RowFactoryCase:
496
497
  id: str
497
- factory: Optional[type[aiosqlite.Row]]
498
+ factory: type[aiosqlite.Row] | None
498
499
  marks: Marks = ()
499
500
 
500
501
 
@@ -6,7 +6,7 @@ import operator
6
6
  import unittest
7
7
  from collections.abc import Iterator
8
8
  from dataclasses import asdict, dataclass, field
9
- from typing import TYPE_CHECKING, Any, ClassVar, Union, cast
9
+ from typing import TYPE_CHECKING, Any, ClassVar, cast
10
10
 
11
11
  from chia_rs.sized_bytes import bytes32
12
12
  from chia_rs.sized_ints import uint32, uint64
@@ -50,9 +50,9 @@ OPP_DICT = {"<": operator.lt, ">": operator.gt, "<=": operator.le, ">=": operato
50
50
 
51
51
 
52
52
  class BalanceCheckingError(Exception):
53
- errors: dict[Union[int, str], list[str]]
53
+ errors: dict[int | str, list[str]]
54
54
 
55
- def __init__(self, errors: dict[Union[int, str], list[str]]) -> None:
55
+ def __init__(self, errors: dict[int | str, list[str]]) -> None:
56
56
  self.errors = errors
57
57
 
58
58
  def __repr__(self) -> str:
@@ -69,10 +69,10 @@ class WalletState:
69
69
 
70
70
  @dataclass
71
71
  class WalletStateTransition:
72
- pre_block_balance_updates: dict[Union[int, str], dict[str, int]] = field(default_factory=dict)
73
- post_block_balance_updates: dict[Union[int, str], dict[str, int]] = field(default_factory=dict)
74
- pre_block_additional_balance_info: dict[Union[int, str], dict[str, int]] = field(default_factory=dict)
75
- post_block_additional_balance_info: dict[Union[int, str], dict[str, int]] = field(default_factory=dict)
72
+ pre_block_balance_updates: dict[int | str, dict[str, int]] = field(default_factory=dict)
73
+ post_block_balance_updates: dict[int | str, dict[str, int]] = field(default_factory=dict)
74
+ pre_block_additional_balance_info: dict[int | str, dict[str, int]] = field(default_factory=dict)
75
+ post_block_additional_balance_info: dict[int | str, dict[str, int]] = field(default_factory=dict)
76
76
 
77
77
 
78
78
  @dataclass
@@ -121,7 +121,7 @@ class WalletEnvironment:
121
121
  def xch_wallet(self) -> Wallet:
122
122
  return self.service._node.wallet_state_manager.main_wallet
123
123
 
124
- def dealias_wallet_id(self, wallet_id_or_alias: Union[int, str]) -> uint32:
124
+ def dealias_wallet_id(self, wallet_id_or_alias: int | str) -> uint32:
125
125
  """
126
126
  This function turns something that is either a wallet id or a wallet alias into a wallet id.
127
127
  """
@@ -131,7 +131,7 @@ class WalletEnvironment:
131
131
  else uint32(self.wallet_aliases[wallet_id_or_alias])
132
132
  )
133
133
 
134
- def alias_wallet_id(self, wallet_id: uint32) -> Union[uint32, str]:
134
+ def alias_wallet_id(self, wallet_id: uint32) -> uint32 | str:
135
135
  """
136
136
  This function turns a wallet id into an alias if one is available or the same wallet id if one is not.
137
137
  """
@@ -141,7 +141,7 @@ class WalletEnvironment:
141
141
  else:
142
142
  return wallet_id
143
143
 
144
- async def check_balances(self, additional_balance_info: dict[Union[int, str], dict[str, int]] = {}) -> None:
144
+ async def check_balances(self, additional_balance_info: dict[int | str, dict[str, int]] = {}) -> None:
145
145
  """
146
146
  This function checks the internal representation of what the balances should be against the balances that the
147
147
  wallet actually returns via the RPC.
@@ -151,7 +151,7 @@ class WalletEnvironment:
151
151
  dealiased_additional_balance_info: dict[uint32, dict[str, int]] = {
152
152
  self.dealias_wallet_id(k): v for k, v in additional_balance_info.items()
153
153
  }
154
- errors: dict[Union[int, str], list[str]] = {}
154
+ errors: dict[int | str, list[str]] = {}
155
155
  for wallet_id in self.wallet_state_manager.wallets:
156
156
  if wallet_id not in self.wallet_states:
157
157
  raise KeyError(f"No wallet state for wallet id {wallet_id} (alias: {self.alias_wallet_id(wallet_id)})")
@@ -189,7 +189,7 @@ class WalletEnvironment:
189
189
  if errors != {}:
190
190
  raise BalanceCheckingError(errors)
191
191
 
192
- async def change_balances(self, update_dictionary: dict[Union[int, str], dict[str, int]]) -> None:
192
+ async def change_balances(self, update_dictionary: dict[int | str, dict[str, int]]) -> None:
193
193
  """
194
194
  This method changes the internal representation of what the wallet balances should be. This is probably
195
195
  necessary to call before check_balances as most wallet operations will result in a balance change that causes
@@ -228,7 +228,7 @@ class WalletEnvironment:
228
228
  )
229
229
  else:
230
230
  for key, change in kwargs.items():
231
- if key in "set_remainder":
231
+ if key in {"set_remainder", "init"}:
232
232
  continue
233
233
  if "#" in key:
234
234
  opp: str = key[0 : key.index("#")]
@@ -347,7 +347,7 @@ class WalletTestFramework:
347
347
  1) Ensures all pending transactions have entered the mempool
348
348
  2) Checks that all balances have changed properly prior to a block being farmed
349
349
  3) Farms a block (to no one in particular)
350
- 4) Chacks that all balances have changed properly after the block was farmed
350
+ 4) Checks that all balances have changed properly after the block was farmed
351
351
  5) Checks that all pending transactions that were gathered in step 1 are now confirmed
352
352
  6) Checks that if `reuse_puzhash` was set, no new derivations were created
353
353
  7) Ensures the wallet is in a synced state before progressing to the rest of the test
chia/_tests/ether.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import TYPE_CHECKING, Callable, Optional
3
+ from collections.abc import Callable
4
+ from typing import TYPE_CHECKING
4
5
 
5
6
  if TYPE_CHECKING:
6
7
  from chia._tests.util.misc import TestId
@@ -15,5 +16,5 @@ if TYPE_CHECKING:
15
16
  # result in you likely getting the default `None` values since they are not
16
17
  # populated until tests are running.
17
18
 
18
- record_property: Optional[Callable[[str, object], None]] = None
19
- test_id: Optional[TestId] = None
19
+ record_property: Callable[[str, object], None] | None = None
20
+ test_id: TestId | None = None
@@ -5,11 +5,11 @@ import logging
5
5
  from dataclasses import dataclass
6
6
  from time import time
7
7
  from types import TracebackType
8
- from typing import Any, Optional, Union, cast
8
+ from typing import Any, cast
9
9
  from unittest.mock import ANY
10
10
 
11
11
  import pytest
12
- from chia_rs import AugSchemeMPL, G1Element, G2Element, PlotSize, PrivateKey, ProofOfSpace
12
+ from chia_rs import AugSchemeMPL, G1Element, G2Element, PlotParam, PrivateKey, ProofOfSpace
13
13
  from chia_rs.sized_bytes import bytes32
14
14
  from chia_rs.sized_ints import uint8, uint16, uint32, uint64
15
15
  from pytest_mock import MockerFixture
@@ -57,7 +57,7 @@ class IncrementPoolStatsCase:
57
57
  name: str
58
58
  current_time: float
59
59
  count: int
60
- value: Optional[Union[int, dict[str, Any]]]
60
+ value: int | dict[str, Any] | None
61
61
  expected_result: Any
62
62
 
63
63
  def __init__(
@@ -66,7 +66,7 @@ class IncrementPoolStatsCase:
66
66
  name: str,
67
67
  current_time: float,
68
68
  count: int,
69
- value: Optional[Union[int, dict[str, Any]]],
69
+ value: int | dict[str, Any] | None,
70
70
  expected_result: Any,
71
71
  ):
72
72
  prepared_p2_singleton_puzzle_hash = std_hash(b"11223344")
@@ -134,16 +134,16 @@ class NewProofOfSpaceCase:
134
134
  plot_identifier: str
135
135
  signage_point_index: uint8
136
136
  plot_id: bytes32
137
- plot_size: PlotSize
137
+ plot_size: PlotParam
138
138
  plot_challenge: bytes32
139
139
  plot_public_key: G1Element
140
- pool_public_key: Optional[G1Element]
140
+ pool_public_key: G1Element | None
141
141
  pool_contract_puzzle_hash: bytes32
142
142
  height: uint32
143
143
  proof: bytes
144
144
  pool_config: PoolWalletConfig
145
- pool_difficulty: Optional[uint64]
146
- authentication_token_timeout: Optional[uint8]
145
+ pool_difficulty: uint64 | None
146
+ authentication_token_timeout: uint8 | None
147
147
  farmer_private_keys: list[PrivateKey]
148
148
  authentication_keys: dict[bytes32, PrivateKey]
149
149
  use_invalid_peer_response: bool
@@ -157,8 +157,8 @@ class NewProofOfSpaceCase:
157
157
  difficulty: uint64,
158
158
  sub_slot_iters: uint64,
159
159
  pool_url: str,
160
- pool_difficulty: Optional[uint64],
161
- authentication_token_timeout: Optional[uint8],
160
+ pool_difficulty: uint64 | None,
161
+ authentication_token_timeout: uint8 | None,
162
162
  use_invalid_peer_response: bool,
163
163
  has_valid_authentication_keys: bool,
164
164
  expected_pool_stats: dict[str, Any],
@@ -189,7 +189,7 @@ class NewProofOfSpaceCase:
189
189
  plot_identifier="test",
190
190
  signage_point_index=uint8(1),
191
191
  plot_id=bytes32.fromhex("baaa6780c53d4b3739b8807b4ae79a76644ddf0d9e03dc7d0a6a0e613e764d9f"),
192
- plot_size=PlotSize.make_v1(32),
192
+ plot_size=PlotParam.make_v1(32),
193
193
  plot_challenge=bytes32.fromhex("7580e4c366dc2c94c37ce44943f9629a3cd6e027d7b24cd014adeaa578d4b0a2"),
194
194
  plot_public_key=G1Element.from_bytes(
195
195
  bytes.fromhex(
@@ -626,7 +626,14 @@ async def test_farmer_new_proof_of_space_for_pool_stats(
626
626
  }
627
627
 
628
628
  assert (
629
- verify_and_get_quality_string(pos, DEFAULT_CONSTANTS, case.challenge_hash, case.sp_hash, height=uint32(1))
629
+ verify_and_get_quality_string(
630
+ pos,
631
+ DEFAULT_CONSTANTS,
632
+ case.challenge_hash,
633
+ case.sp_hash,
634
+ height=uint32(1),
635
+ prev_transaction_block_height=uint32(1),
636
+ )
630
637
  is not None
631
638
  )
632
639
 
@@ -669,9 +676,9 @@ async def test_farmer_new_proof_of_space_for_pool_stats(
669
676
  class DummyPoolResponse:
670
677
  ok: bool
671
678
  status: int
672
- error_code: Optional[int] = None
673
- error_message: Optional[str] = None
674
- new_difficulty: Optional[int] = None
679
+ error_code: int | None = None
680
+ error_message: str | None = None
681
+ new_difficulty: int | None = None
675
682
 
676
683
  async def text(self) -> str:
677
684
  json_dict: dict[str, Any] = dict()
@@ -688,9 +695,9 @@ class DummyPoolResponse:
688
695
 
689
696
  async def __aexit__(
690
697
  self,
691
- exc_type: Optional[type[BaseException]],
692
- exc_val: Optional[BaseException],
693
- exc_tb: Optional[TracebackType],
698
+ exc_type: type[BaseException] | None,
699
+ exc_val: BaseException | None,
700
+ exc_tb: TracebackType | None,
694
701
  ) -> None:
695
702
  pass
696
703
 
@@ -883,7 +890,12 @@ async def test_farmer_pool_response(
883
890
 
884
891
  assert (
885
892
  verify_and_get_quality_string(
886
- pos, DEFAULT_CONSTANTS, sp.challenge_hash, sp.challenge_chain_sp, height=uint32(1)
893
+ pos,
894
+ DEFAULT_CONSTANTS,
895
+ sp.challenge_hash,
896
+ sp.challenge_chain_sp,
897
+ height=uint32(1),
898
+ prev_transaction_block_height=uint32(1),
887
899
  )
888
900
  is not None
889
901
  )
@@ -998,7 +1010,7 @@ class DummyPoolInfoResponse:
998
1010
  ok: bool
999
1011
  status: int
1000
1012
  url: URL
1001
- pool_info: Optional[dict[str, Any]] = None
1013
+ pool_info: dict[str, Any] | None = None
1002
1014
  history: tuple[DummyClientResponse, ...] = ()
1003
1015
 
1004
1016
  async def text(self) -> str:
@@ -1012,9 +1024,9 @@ class DummyPoolInfoResponse:
1012
1024
 
1013
1025
  async def __aexit__(
1014
1026
  self,
1015
- exc_type: Optional[type[BaseException]],
1016
- exc_val: Optional[BaseException],
1017
- exc_tb: Optional[TracebackType],
1027
+ exc_type: type[BaseException] | None,
1028
+ exc_val: BaseException | None,
1029
+ exc_tb: TracebackType | None,
1018
1030
  ) -> None:
1019
1031
  pass
1020
1032
 
@@ -1251,7 +1263,12 @@ async def test_farmer_additional_headers_on_partial_submit(
1251
1263
 
1252
1264
  assert (
1253
1265
  verify_and_get_quality_string(
1254
- pos, DEFAULT_CONSTANTS, sp.challenge_hash, sp.challenge_chain_sp, height=uint32(1)
1266
+ pos,
1267
+ DEFAULT_CONSTANTS,
1268
+ sp.challenge_hash,
1269
+ sp.challenge_chain_sp,
1270
+ height=uint32(1),
1271
+ prev_transaction_block_height=uint32(1),
1255
1272
  )
1256
1273
  is not None
1257
1274
  )
@@ -4,11 +4,11 @@ import asyncio
4
4
  import unittest.mock
5
5
  from math import floor
6
6
  from pathlib import Path
7
- from typing import Any, Optional
7
+ from typing import Any
8
8
  from unittest.mock import AsyncMock, Mock
9
9
 
10
10
  import pytest
11
- from chia_rs import G1Element
11
+ from chia_rs import G1Element, PartialProof
12
12
  from chia_rs.sized_bytes import bytes32
13
13
  from chia_rs.sized_ints import uint8, uint32, uint64
14
14
 
@@ -56,12 +56,12 @@ def farmer_is_started(farmer: Farmer) -> bool:
56
56
  return farmer.started
57
57
 
58
58
 
59
- async def get_harvester_config(harvester_rpc_port: Optional[int], root_path: Path) -> dict[str, Any]:
59
+ async def get_harvester_config(harvester_rpc_port: int | None, root_path: Path) -> dict[str, Any]:
60
60
  async with get_any_service_client(HarvesterRpcClient, root_path, harvester_rpc_port) as (harvester_client, _):
61
61
  return await harvester_client.get_harvester_config()
62
62
 
63
63
 
64
- async def update_harvester_config(harvester_rpc_port: Optional[int], root_path: Path, config: dict[str, Any]) -> bool:
64
+ async def update_harvester_config(harvester_rpc_port: int | None, root_path: Path, config: dict[str, Any]) -> bool:
65
65
  async with get_any_service_client(HarvesterRpcClient, root_path, harvester_rpc_port) as (harvester_client, _):
66
66
  return await harvester_client.update_harvester_config(config)
67
67
 
@@ -325,6 +325,10 @@ async def test_harvester_has_no_server(
325
325
  assert harvester_server.webserver is None
326
326
 
327
327
 
328
+ test_partial_proof = PartialProof([uint64(256)] * 64)
329
+ test_partial_proof2 = PartialProof([uint64(4096)] * 64)
330
+
331
+
328
332
  @pytest.mark.anyio
329
333
  async def test_v2_partial_proofs_new_sp_hash(
330
334
  farmer_one_harvester_solver: tuple[list[HarvesterService], FarmerService, SolverService, BlockTools],
@@ -338,9 +342,11 @@ async def test_v2_partial_proofs_new_sp_hash(
338
342
  challenge_hash=bytes32(b"2" * 32),
339
343
  sp_hash=sp_hash,
340
344
  plot_identifier="test_plot_id",
341
- partial_proofs=[b"test_partial_proof_1"],
345
+ partial_proofs=[test_partial_proof],
342
346
  signage_point_index=uint8(0),
343
347
  plot_size=uint8(32),
348
+ strength=uint8(5),
349
+ plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
344
350
  pool_public_key=None,
345
351
  pool_contract_puzzle_hash=bytes32(b"4" * 32),
346
352
  plot_public_key=G1Element(),
@@ -367,9 +373,11 @@ async def test_v2_partial_proofs_missing_sp_hash(
367
373
  challenge_hash=bytes32(b"2" * 32),
368
374
  sp_hash=sp_hash,
369
375
  plot_identifier="test_plot_id",
370
- partial_proofs=[b"test_partial_proof_1"],
376
+ partial_proofs=[test_partial_proof],
371
377
  signage_point_index=uint8(0),
372
378
  plot_size=uint8(32),
379
+ plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
380
+ strength=uint8(5),
373
381
  pool_public_key=None,
374
382
  pool_contract_puzzle_hash=bytes32(b"4" * 32),
375
383
  plot_public_key=G1Element(),
@@ -409,9 +417,14 @@ async def test_v2_partial_proofs_with_existing_sp(
409
417
  challenge_hash=challenge_hash,
410
418
  sp_hash=sp_hash,
411
419
  plot_identifier="test_plot_id",
412
- partial_proofs=[b"test_partial_proof_1", b"test_partial_proof_2"],
420
+ partial_proofs=[
421
+ test_partial_proof,
422
+ test_partial_proof2,
423
+ ],
413
424
  signage_point_index=uint8(0),
414
425
  plot_size=uint8(32),
426
+ plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
427
+ strength=uint8(5),
415
428
  pool_public_key=G1Element(),
416
429
  pool_contract_puzzle_hash=bytes32(b"4" * 32),
417
430
  plot_public_key=G1Element(),
@@ -441,9 +454,11 @@ async def test_solution_response_handler(
441
454
  challenge_hash=challenge_hash,
442
455
  sp_hash=sp_hash,
443
456
  plot_identifier="test_plot_id",
444
- partial_proofs=[b"test_partial_proof_for_quality"],
457
+ partial_proofs=[test_partial_proof],
445
458
  signage_point_index=uint8(0),
446
459
  plot_size=uint8(32),
460
+ plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
461
+ strength=uint8(5),
447
462
  pool_public_key=G1Element(),
448
463
  pool_contract_puzzle_hash=bytes32(b"4" * 32),
449
464
  plot_public_key=G1Element(),
@@ -452,7 +467,8 @@ async def test_solution_response_handler(
452
467
  harvester_peer = await get_harvester_peer(farmer)
453
468
 
454
469
  # manually add pending request
455
- farmer.pending_solver_requests[partial_proofs.partial_proofs[0]] = {
470
+ key = bytes(partial_proofs.partial_proofs[0])
471
+ farmer.pending_solver_requests[key] = {
456
472
  "proof_data": partial_proofs,
457
473
  "peer": harvester_peer,
458
474
  }
@@ -477,7 +493,8 @@ async def test_solution_response_handler(
477
493
  assert original_peer == harvester_peer
478
494
 
479
495
  # verify pending request was removed
480
- assert partial_proofs.partial_proofs[0] not in farmer.pending_solver_requests
496
+ key = bytes(partial_proofs.partial_proofs[0])
497
+ assert key not in farmer.pending_solver_requests
481
498
 
482
499
 
483
500
  @pytest.mark.anyio
@@ -492,7 +509,10 @@ async def test_solution_response_unknown_quality(
492
509
  solver_peer = await get_solver_peer(farmer)
493
510
 
494
511
  # create solution response with unknown quality
495
- solution_response = solver_protocol.SolverResponse(partial_proof=bytes(b"1" * 32), proof=b"test_proof")
512
+ solution_response = solver_protocol.SolverResponse(
513
+ partial_proof=test_partial_proof,
514
+ proof=b"test_proof",
515
+ )
496
516
 
497
517
  with unittest.mock.patch.object(farmer_api, "new_proof_of_space", new_callable=AsyncMock) as mock_new_proof:
498
518
  await farmer_api.solution_response(solution_response, solver_peer)
@@ -518,9 +538,14 @@ async def test_solution_response_empty_proof(
518
538
  challenge_hash=challenge_hash,
519
539
  sp_hash=sp_hash,
520
540
  plot_identifier="test_plot_id",
521
- partial_proofs=[b"test_partial_proof_for_quality"],
541
+ partial_proofs=[
542
+ test_partial_proof,
543
+ test_partial_proof2,
544
+ ],
522
545
  signage_point_index=uint8(0),
523
546
  plot_size=uint8(32),
547
+ plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
548
+ strength=uint8(5),
524
549
  pool_public_key=G1Element(),
525
550
  pool_contract_puzzle_hash=bytes32(b"4" * 32),
526
551
  plot_public_key=G1Element(),
@@ -530,8 +555,9 @@ async def test_solution_response_empty_proof(
530
555
  harvester_peer.peer_node_id = "harvester_peer"
531
556
 
532
557
  # manually add pending request
533
- farmer.pending_solver_requests[partial_proofs.partial_proofs[0]] = {
534
- "proof_data": partial_proofs.partial_proofs[0],
558
+ key = bytes(partial_proofs.partial_proofs[0])
559
+ farmer.pending_solver_requests[key] = {
560
+ "proof_data": partial_proofs,
535
561
  "peer": harvester_peer,
536
562
  }
537
563
 
@@ -548,7 +574,8 @@ async def test_solution_response_empty_proof(
548
574
  mock_new_proof.assert_not_called()
549
575
 
550
576
  # verify pending request was removed (cleanup still happens)
551
- assert partial_proofs.partial_proofs[0] not in farmer.pending_solver_requests
577
+ key = bytes(partial_proofs.partial_proofs[0])
578
+ assert key not in farmer.pending_solver_requests
552
579
 
553
580
 
554
581
  @pytest.mark.anyio
@@ -579,9 +606,14 @@ async def test_v2_partial_proofs_solver_exception(
579
606
  challenge_hash=challenge_hash,
580
607
  sp_hash=sp_hash,
581
608
  plot_identifier="test_plot_id",
582
- partial_proofs=[b"test_partial_proof_1"],
609
+ partial_proofs=[
610
+ test_partial_proof,
611
+ test_partial_proof2,
612
+ ],
583
613
  signage_point_index=uint8(0),
584
614
  plot_size=uint8(32),
615
+ plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
616
+ strength=uint8(5),
585
617
  pool_public_key=G1Element(),
586
618
  pool_contract_puzzle_hash=bytes32(b"4" * 32),
587
619
  plot_public_key=G1Element(),
@@ -594,4 +626,5 @@ async def test_v2_partial_proofs_solver_exception(
594
626
  await farmer_api.partial_proofs(partial_proofs, harvester_peer)
595
627
 
596
628
  # verify pending request was cleaned up after exception
597
- assert partial_proofs.partial_proofs[0] not in farmer.pending_solver_requests
629
+ key = bytes(partial_proofs.partial_proofs[0])
630
+ assert key not in farmer.pending_solver_requests
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from collections.abc import AsyncIterator
4
4
  from pathlib import Path
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
 
7
7
  import pytest
8
8
  from chia_rs import FullBlock
@@ -55,33 +55,33 @@ async def farmer_harvester_with_filter_size_9(
55
55
  async def have_connections() -> bool:
56
56
  return len(await farmer_rpc_cl.get_connections()) > 0
57
57
 
58
- local_b_tools = await create_block_tools_async(
58
+ async with create_block_tools_async(
59
59
  constants=test_constants.replace(NUMBER_ZERO_BITS_PLOT_FILTER_V1=uint8(9)), keychain=get_temp_keyring
60
- )
61
- new_config = local_b_tools._config
62
- local_b_tools.change_config(new_config)
63
- async with setup_farmer_solver_multi_harvester(
64
- local_b_tools, 1, tmp_path, local_b_tools.constants, start_services=True
65
- ) as (harvesters, farmer_service, _):
66
- harvester_service = harvesters[0]
67
- assert farmer_service.rpc_server is not None
68
- farmer_rpc_cl = await FarmerRpcClient.create(
69
- self_hostname, farmer_service.rpc_server.listen_port, farmer_service.root_path, farmer_service.config
70
- )
71
- assert harvester_service.rpc_server is not None
72
- harvester_rpc_cl = await HarvesterRpcClient.create(
73
- self_hostname,
74
- harvester_service.rpc_server.listen_port,
75
- harvester_service.root_path,
76
- harvester_service.config,
77
- )
78
- await time_out_assert(15, have_connections, True)
79
- yield harvester_service, farmer_service._api
60
+ ) as local_b_tools:
61
+ new_config = local_b_tools._config
62
+ local_b_tools.change_config(new_config)
63
+ async with setup_farmer_solver_multi_harvester(
64
+ local_b_tools, 1, tmp_path, local_b_tools.constants, start_services=True
65
+ ) as (harvesters, farmer_service, _):
66
+ harvester_service = harvesters[0]
67
+ assert farmer_service.rpc_server is not None
68
+ farmer_rpc_cl = await FarmerRpcClient.create(
69
+ self_hostname, farmer_service.rpc_server.listen_port, farmer_service.root_path, farmer_service.config
70
+ )
71
+ assert harvester_service.rpc_server is not None
72
+ harvester_rpc_cl = await HarvesterRpcClient.create(
73
+ self_hostname,
74
+ harvester_service.rpc_server.listen_port,
75
+ harvester_service.root_path,
76
+ harvester_service.config,
77
+ )
78
+ await time_out_assert(15, have_connections, True)
79
+ yield harvester_service, farmer_service._api
80
80
 
81
- farmer_rpc_cl.close()
82
- harvester_rpc_cl.close()
83
- await farmer_rpc_cl.await_closed()
84
- await harvester_rpc_cl.await_closed()
81
+ farmer_rpc_cl.close()
82
+ harvester_rpc_cl.close()
83
+ await farmer_rpc_cl.await_closed()
84
+ await harvester_rpc_cl.await_closed()
85
85
 
86
86
 
87
87
  @pytest.mark.parametrize(argnames=["peak_height", "eligible_plots"], argvalues=[(5495999, 0), (5496000, 1)])
@@ -94,7 +94,7 @@ async def test_filter_prefix_bits_with_farmer_harvester(
94
94
  state_change = None
95
95
  state_change_data = None
96
96
 
97
- def state_changed_callback(change: str, change_data: Optional[dict[str, Any]]) -> None:
97
+ def state_changed_callback(change: str, change_data: dict[str, Any] | None) -> None:
98
98
  nonlocal state_change, state_change_data
99
99
  state_change = change
100
100
  state_change_data = change_data