chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import asyncio
4
4
  from math import floor
5
5
  from pathlib import Path
6
- from typing import Any, Dict, List, Optional, Tuple
6
+ from typing import Any, Optional
7
7
 
8
8
  import pytest
9
9
  from chia_rs import G1Element
@@ -32,19 +32,19 @@ def farmer_is_started(farmer: Farmer) -> bool:
32
32
  return farmer.started
33
33
 
34
34
 
35
- async def get_harvester_config(harvester_rpc_port: Optional[int], root_path: Path) -> Dict[str, Any]:
36
- async with get_any_service_client(HarvesterRpcClient, harvester_rpc_port, root_path) as (harvester_client, _):
35
+ async def get_harvester_config(harvester_rpc_port: Optional[int], root_path: Path) -> dict[str, Any]:
36
+ async with get_any_service_client(HarvesterRpcClient, root_path, harvester_rpc_port) as (harvester_client, _):
37
37
  return await harvester_client.get_harvester_config()
38
38
 
39
39
 
40
- async def update_harvester_config(harvester_rpc_port: Optional[int], root_path: Path, config: Dict[str, Any]) -> bool:
41
- async with get_any_service_client(HarvesterRpcClient, harvester_rpc_port, root_path) as (harvester_client, _):
40
+ async def update_harvester_config(harvester_rpc_port: Optional[int], root_path: Path, config: dict[str, Any]) -> bool:
41
+ async with get_any_service_client(HarvesterRpcClient, root_path, harvester_rpc_port) as (harvester_client, _):
42
42
  return await harvester_client.update_harvester_config(config)
43
43
 
44
44
 
45
45
  @pytest.mark.anyio
46
46
  async def test_start_with_empty_keychain(
47
- farmer_one_harvester_not_started: Tuple[List[HarvesterService], FarmerService, BlockTools]
47
+ farmer_one_harvester_not_started: tuple[list[HarvesterService], FarmerService, BlockTools],
48
48
  ) -> None:
49
49
  _, farmer_service, bt = farmer_one_harvester_not_started
50
50
  farmer: Farmer = farmer_service._node
@@ -67,7 +67,7 @@ async def test_start_with_empty_keychain(
67
67
 
68
68
  @pytest.mark.anyio
69
69
  async def test_harvester_handshake(
70
- farmer_one_harvester_not_started: Tuple[List[HarvesterService], FarmerService, BlockTools]
70
+ farmer_one_harvester_not_started: tuple[list[HarvesterService], FarmerService, BlockTools],
71
71
  ) -> None:
72
72
  harvesters, farmer_service, bt = farmer_one_harvester_not_started
73
73
  harvester_service = harvesters[0]
@@ -169,8 +169,8 @@ async def test_farmer_respond_signatures(
169
169
 
170
170
 
171
171
  @pytest.mark.anyio
172
- async def test_harvester_config(farmer_one_harvester: Tuple[List[HarvesterService], FarmerService, BlockTools]) -> None:
173
- harvester_services, farmer_service, bt = farmer_one_harvester
172
+ async def test_harvester_config(farmer_one_harvester: tuple[list[HarvesterService], FarmerService, BlockTools]) -> None:
173
+ harvester_services, _farmer_service, bt = farmer_one_harvester
174
174
  harvester_service = harvester_services[0]
175
175
 
176
176
  assert harvester_service.rpc_server and harvester_service.rpc_server.webserver
@@ -179,7 +179,7 @@ async def test_harvester_config(farmer_one_harvester: Tuple[List[HarvesterServic
179
179
  harvester_config = await get_harvester_config(harvester_rpc_port, bt.root_path)
180
180
  assert harvester_config["success"] is True
181
181
 
182
- def check_config_match(config1: Dict[str, Any], config2: Dict[str, Any]) -> None:
182
+ def check_config_match(config1: dict[str, Any], config2: dict[str, Any]) -> None:
183
183
  assert config1["harvester"]["use_gpu_harvesting"] == config2["use_gpu_harvesting"]
184
184
  assert config1["harvester"]["gpu_index"] == config2["gpu_index"]
185
185
  assert config1["harvester"]["enforce_gpu_index"] == config2["enforce_gpu_index"]
@@ -202,7 +202,7 @@ async def test_harvester_config(farmer_one_harvester: Tuple[List[HarvesterServic
202
202
  harvester_config["parallel_decompressor_count"] += 1
203
203
  harvester_config["decompressor_thread_count"] += 1
204
204
  harvester_config["recursive_plot_scan"] = not harvester_config["recursive_plot_scan"]
205
- harvester_config["refresh_parameter_interval_seconds"] = harvester_config["refresh_parameter_interval_seconds"] + 1
205
+ harvester_config["refresh_parameter_interval_seconds"] += 1
206
206
 
207
207
  res = await update_harvester_config(harvester_rpc_port, bt.root_path, harvester_config)
208
208
  assert res is True
@@ -212,13 +212,13 @@ async def test_harvester_config(farmer_one_harvester: Tuple[List[HarvesterServic
212
212
 
213
213
  @pytest.mark.anyio
214
214
  async def test_missing_signage_point(
215
- farmer_one_harvester: Tuple[List[HarvesterService], FarmerService, BlockTools]
215
+ farmer_one_harvester: tuple[list[HarvesterService], FarmerService, BlockTools],
216
216
  ) -> None:
217
- _, farmer_service, bt = farmer_one_harvester
217
+ _, farmer_service, _bt = farmer_one_harvester
218
218
  farmer_api = farmer_service._api
219
219
  farmer = farmer_api.farmer
220
220
 
221
- def create_sp(index: int, challenge_hash: bytes32) -> Tuple[uint64, farmer_protocol.NewSignagePoint]:
221
+ def create_sp(index: int, challenge_hash: bytes32) -> tuple[uint64, farmer_protocol.NewSignagePoint]:
222
222
  time = uint64(index + 1)
223
223
  sp = farmer_protocol.NewSignagePoint(
224
224
  challenge_hash, std_hash(b"2"), std_hash(b"3"), uint64(1), uint64(1000000), uint8(index), uint32(1)
@@ -271,7 +271,7 @@ async def test_missing_signage_point(
271
271
  assert original_state_changed_callback is not None
272
272
  number_of_missing_sps: uint32 = uint32(0)
273
273
 
274
- def state_changed(change: str, data: Dict[str, Any]) -> None:
274
+ def state_changed(change: str, data: dict[str, Any]) -> None:
275
275
  nonlocal number_of_missing_sps
276
276
  number_of_missing_sps = data["missing_signage_points"][1]
277
277
  original_state_changed_callback(change, data)
@@ -284,9 +284,9 @@ async def test_missing_signage_point(
284
284
 
285
285
  @pytest.mark.anyio
286
286
  async def test_harvester_has_no_server(
287
- farmer_one_harvester: Tuple[List[FarmerService], HarvesterService, BlockTools],
287
+ farmer_one_harvester: tuple[list[FarmerService], HarvesterService, BlockTools],
288
288
  ) -> None:
289
- harvesters, _, bt = farmer_one_harvester
289
+ harvesters, _, _bt = farmer_one_harvester
290
290
  harvester_server = harvesters[0]._server
291
291
 
292
292
  assert harvester_server.webserver is None
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from collections.abc import AsyncIterator
3
4
  from pathlib import Path
4
- from typing import Any, AsyncIterator, Dict, List, Optional, Tuple
5
+ from typing import Any, Optional
5
6
 
6
7
  import pytest
7
8
 
@@ -31,7 +32,7 @@ from chia.util.keychain import Keychain
31
32
  argnames=["filter_prefix_bits", "should_pass"], argvalues=[(9, 34), (8, 89), (7, 162), (6, 295), (5, 579)]
32
33
  )
33
34
  def test_filter_prefix_bits_on_blocks(
34
- default_10000_blocks: List[FullBlock], filter_prefix_bits: uint8, should_pass: int
35
+ default_10000_blocks: list[FullBlock], filter_prefix_bits: uint8, should_pass: int
35
36
  ) -> None:
36
37
  passed = 0
37
38
  for block in default_10000_blocks:
@@ -50,7 +51,7 @@ def test_filter_prefix_bits_on_blocks(
50
51
  @pytest.fixture(scope="function")
51
52
  async def farmer_harvester_with_filter_size_9(
52
53
  get_temp_keyring: Keychain, tmp_path: Path, self_hostname: str
53
- ) -> AsyncIterator[Tuple[HarvesterService, FarmerAPI]]:
54
+ ) -> AsyncIterator[tuple[HarvesterService, FarmerAPI]]:
54
55
  async def have_connections() -> bool:
55
56
  return len(await farmer_rpc_cl.get_connections()) > 0
56
57
 
@@ -86,14 +87,14 @@ async def farmer_harvester_with_filter_size_9(
86
87
  @pytest.mark.parametrize(argnames=["peak_height", "eligible_plots"], argvalues=[(5495999, 0), (5496000, 1)])
87
88
  @pytest.mark.anyio
88
89
  async def test_filter_prefix_bits_with_farmer_harvester(
89
- farmer_harvester_with_filter_size_9: Tuple[HarvesterService, FarmerAPI],
90
+ farmer_harvester_with_filter_size_9: tuple[HarvesterService, FarmerAPI],
90
91
  peak_height: uint32,
91
92
  eligible_plots: int,
92
93
  ) -> None:
93
94
  state_change = None
94
95
  state_change_data = None
95
96
 
96
- def state_changed_callback(change: str, change_data: Optional[Dict[str, Any]]) -> None:
97
+ def state_changed_callback(change: str, change_data: Optional[dict[str, Any]]) -> None:
97
98
  nonlocal state_change, state_change_data
98
99
  state_change = change
99
100
  state_change_data = change_data
@@ -2,20 +2,22 @@ from __future__ import annotations
2
2
 
3
3
  import asyncio
4
4
  import base64
5
+ import contextlib
5
6
  import dataclasses
6
7
  import json
7
8
  import logging
8
9
  from os.path import dirname
9
- from typing import Any, List, Optional, Tuple, Union, cast
10
+ from typing import Optional, Union, cast
10
11
 
11
12
  import pytest
12
13
  from chia_rs import G1Element
13
- from pytest_mock import MockerFixture
14
14
 
15
+ from chia._tests.util.misc import patch_request_handler
15
16
  from chia._tests.util.time_out_assert import time_out_assert
17
+ from chia.consensus.block_body_validation import ForkInfo
16
18
  from chia.consensus.blockchain import AddBlockResult
17
19
  from chia.consensus.difficulty_adjustment import get_next_sub_slot_iters_and_difficulty
18
- from chia.consensus.multiprocess_validation import PreValidationResult, pre_validate_blocks_multiprocessing
20
+ from chia.consensus.multiprocess_validation import PreValidationResult, pre_validate_block
19
21
  from chia.farmer.farmer import Farmer, calculate_harvester_fee_quality
20
22
  from chia.farmer.farmer_api import FarmerAPI
21
23
  from chia.full_node.full_node import FullNode
@@ -23,7 +25,6 @@ from chia.full_node.full_node_api import FullNodeAPI
23
25
  from chia.harvester.harvester import Harvester
24
26
  from chia.harvester.harvester_api import HarvesterAPI
25
27
  from chia.protocols import farmer_protocol, full_node_protocol, harvester_protocol, timelord_protocol
26
- from chia.protocols.farmer_protocol import RequestSignedValues
27
28
  from chia.protocols.harvester_protocol import ProofOfSpaceFeeInfo, RespondSignatures, SigningDataKind
28
29
  from chia.protocols.protocol_message_types import ProtocolMessageTypes
29
30
  from chia.server.outbound_message import Message, NodeType, make_msg
@@ -39,24 +40,25 @@ from chia.types.blockchain_format.sized_bytes import bytes32
39
40
  from chia.types.blockchain_format.slots import ChallengeChainSubSlot, RewardChainSubSlot
40
41
  from chia.types.full_block import FullBlock
41
42
  from chia.types.peer_info import UnresolvedPeerInfo
43
+ from chia.types.validation_state import ValidationState
44
+ from chia.util.augmented_chain import AugmentedBlockchain
42
45
  from chia.util.bech32m import decode_puzzle_hash
43
46
  from chia.util.hash import std_hash
44
47
  from chia.util.ints import uint8, uint32, uint64
45
48
 
46
49
  SPType = Union[timelord_protocol.NewEndOfSubSlotVDF, timelord_protocol.NewSignagePointVDF]
47
- SPList = List[SPType]
50
+ SPList = list[SPType]
48
51
 
49
52
 
50
53
  @pytest.mark.anyio
51
54
  async def test_harvester_receive_source_signing_data(
52
- farmer_harvester_2_simulators_zero_bits_plot_filter: Tuple[
55
+ farmer_harvester_2_simulators_zero_bits_plot_filter: tuple[
53
56
  FarmerService,
54
57
  HarvesterService,
55
58
  Union[FullNodeService, SimulatorFullNodeService],
56
59
  Union[FullNodeService, SimulatorFullNodeService],
57
60
  BlockTools,
58
61
  ],
59
- mocker: MockerFixture,
60
62
  ) -> None:
61
63
  """
62
64
  Tests that the source data for the signatures requests sent to the
@@ -90,7 +92,7 @@ async def test_harvester_receive_source_signing_data(
90
92
  await wait_until_node_type_connected(full_node_1.server, NodeType.FULL_NODE)
91
93
 
92
94
  # Prepare test data
93
- blocks: List[FullBlock]
95
+ blocks: list[FullBlock]
94
96
  signage_points: SPList
95
97
 
96
98
  (blocks, signage_points) = load_test_data()
@@ -112,8 +114,9 @@ async def test_harvester_receive_source_signing_data(
112
114
  finished_validating_data = False
113
115
  farmer_reward_address = decode_puzzle_hash("txch1psqeaw0h244v5sy2r4se8pheyl62n8778zl6t5e7dep0xch9xfkqhx2mej")
114
116
 
115
- async def intercept_harvester_request_signatures(*args: Any) -> Message:
116
- request: harvester_protocol.RequestSignatures = harvester_protocol.RequestSignatures.from_bytes(args[0])
117
+ async def intercept_harvester_request_signatures(
118
+ self: HarvesterAPI, request: harvester_protocol.RequestSignatures
119
+ ) -> Optional[Message]:
117
120
  nonlocal harvester
118
121
  nonlocal farmer_reward_address
119
122
 
@@ -207,24 +210,23 @@ async def test_harvester_receive_source_signing_data(
207
210
  data_hash = data.get_hash()
208
211
  assert data_hash == hash
209
212
 
210
- async def intercept_farmer_new_proof_of_space(*args: Any) -> None:
213
+ async def intercept_farmer_new_proof_of_space(
214
+ self: HarvesterAPI, request: harvester_protocol.NewProofOfSpace, peer: WSChiaConnection
215
+ ) -> None:
211
216
  nonlocal farmer
212
217
  nonlocal farmer_reward_address
213
218
 
214
- request: harvester_protocol.NewProofOfSpace = dataclasses.replace(
215
- harvester_protocol.NewProofOfSpace.from_bytes(args[0]), farmer_reward_address_override=farmer_reward_address
216
- )
217
- peer: WSChiaConnection = args[1]
219
+ request = dataclasses.replace(request, farmer_reward_address_override=farmer_reward_address)
218
220
 
219
221
  await FarmerAPI.new_proof_of_space(farmer.server.api, request, peer)
220
222
 
221
- async def intercept_farmer_request_signed_values(*args: Any) -> Optional[Message]:
223
+ async def intercept_farmer_request_signed_values(
224
+ self: FarmerAPI, request: farmer_protocol.RequestSignedValues
225
+ ) -> Optional[Message]:
222
226
  nonlocal farmer
223
227
  nonlocal farmer_reward_address
224
228
  nonlocal full_node_2
225
229
 
226
- request: RequestSignedValues = RequestSignedValues.from_bytes(args[0])
227
-
228
230
  # Ensure the FullNode included the source data for the signatures
229
231
  assert request.foliage_block_data
230
232
  assert request.foliage_block_data.get_hash() == request.foliage_block_data_hash
@@ -239,23 +241,42 @@ async def test_harvester_receive_source_signing_data(
239
241
 
240
242
  return await FarmerAPI.request_signed_values(farmer.server.api, request)
241
243
 
242
- mocker.patch.object(farmer.server.api, "request_signed_values", side_effect=intercept_farmer_request_signed_values)
243
- mocker.patch.object(farmer.server.api, "new_proof_of_space", side_effect=intercept_farmer_new_proof_of_space)
244
- mocker.patch.object(harvester.server.api, "request_signatures", side_effect=intercept_harvester_request_signatures)
244
+ with contextlib.ExitStack() as exit_stack:
245
+ exit_stack.enter_context(
246
+ patch_request_handler(
247
+ api=farmer.server.api,
248
+ handler=intercept_farmer_request_signed_values,
249
+ request_type=ProtocolMessageTypes.request_signed_values,
250
+ )
251
+ )
252
+ exit_stack.enter_context(
253
+ patch_request_handler(
254
+ api=farmer.server.api,
255
+ handler=intercept_farmer_new_proof_of_space,
256
+ request_type=ProtocolMessageTypes.new_proof_of_space,
257
+ )
258
+ )
259
+ exit_stack.enter_context(
260
+ patch_request_handler(
261
+ api=harvester.server.api,
262
+ handler=intercept_harvester_request_signatures,
263
+ request_type=ProtocolMessageTypes.request_signatures,
264
+ )
265
+ )
245
266
 
246
- # Start injecting signage points
247
- await inject_signage_points(signage_points, full_node_1, full_node_2)
267
+ # Start injecting signage points
268
+ await inject_signage_points(signage_points, full_node_1, full_node_2)
248
269
 
249
- # Wait until test finishes
250
- def did_finished_validating_data() -> bool:
251
- return finished_validating_data
270
+ # Wait until test finishes
271
+ def did_finished_validating_data() -> bool:
272
+ return finished_validating_data
252
273
 
253
- await time_out_assert(60 * 60, did_finished_validating_data, True)
274
+ await time_out_assert(60, did_finished_validating_data, True)
254
275
 
255
276
 
256
277
  @pytest.mark.anyio
257
278
  async def test_harvester_fee_convention(
258
- farmer_harvester_2_simulators_zero_bits_plot_filter: Tuple[
279
+ farmer_harvester_2_simulators_zero_bits_plot_filter: tuple[
259
280
  FarmerService,
260
281
  HarvesterService,
261
282
  Union[FullNodeService, SimulatorFullNodeService],
@@ -285,7 +306,7 @@ async def test_harvester_fee_convention(
285
306
 
286
307
  @pytest.mark.anyio
287
308
  async def test_harvester_fee_invalid_convention(
288
- farmer_harvester_2_simulators_zero_bits_plot_filter: Tuple[
309
+ farmer_harvester_2_simulators_zero_bits_plot_filter: tuple[
289
310
  FarmerService,
290
311
  HarvesterService,
291
312
  Union[FullNodeService, SimulatorFullNodeService],
@@ -318,7 +339,7 @@ async def test_harvester_fee_invalid_convention(
318
339
 
319
340
  def prepare_sp_and_pos_for_fee_test(
320
341
  fee_threshold_offset: int,
321
- ) -> Tuple[farmer_protocol.NewSignagePoint, harvester_protocol.NewProofOfSpace]:
342
+ ) -> tuple[farmer_protocol.NewSignagePoint, harvester_protocol.NewProofOfSpace]:
322
343
  proof = std_hash(b"1")
323
344
  challenge = std_hash(b"1")
324
345
 
@@ -419,7 +440,7 @@ def decode_sp(
419
440
  return timelord_protocol.NewSignagePointVDF.from_bytes(sp_bytes)
420
441
 
421
442
 
422
- async def add_test_blocks_into_full_node(blocks: List[FullBlock], full_node: FullNode) -> None:
443
+ async def add_test_blocks_into_full_node(blocks: list[FullBlock], full_node: FullNode) -> None:
423
444
  # Inject full node with a pre-existing block to skip initial genesis sub-slot
424
445
  # so that we have blocks generated that have our farmer reward address, instead
425
446
  # of the GENESIS_PRE_FARM_FARMER_PUZZLE_HASH.
@@ -435,31 +456,37 @@ async def add_test_blocks_into_full_node(blocks: List[FullBlock], full_node: Ful
435
456
  prev_ses_block = curr
436
457
  new_slot = len(block.finished_sub_slots) > 0
437
458
  ssi, diff = get_next_sub_slot_iters_and_difficulty(full_node.constants, new_slot, prev_b, full_node.blockchain)
438
- pre_validation_results: List[PreValidationResult] = await pre_validate_blocks_multiprocessing(
439
- full_node.blockchain.constants,
440
- full_node.blockchain,
441
- blocks,
442
- full_node.blockchain.pool,
443
- {},
444
- sub_slot_iters=ssi,
445
- difficulty=diff,
446
- prev_ses_block=prev_ses_block,
447
- validate_signatures=True,
448
- )
459
+ futures = []
460
+ chain = AugmentedBlockchain(full_node.blockchain)
461
+ for block in blocks:
462
+ futures.append(
463
+ await pre_validate_block(
464
+ full_node.blockchain.constants,
465
+ chain,
466
+ block,
467
+ full_node.blockchain.pool,
468
+ None,
469
+ ValidationState(ssi, diff, prev_ses_block),
470
+ )
471
+ )
472
+ pre_validation_results: list[PreValidationResult] = list(await asyncio.gather(*futures))
449
473
  assert pre_validation_results is not None and len(pre_validation_results) == len(blocks)
450
474
  for i in range(len(blocks)):
451
475
  block = blocks[i]
452
476
  if block.height != 0 and len(block.finished_sub_slots) > 0: # pragma: no cover
453
477
  if block.finished_sub_slots[0].challenge_chain.new_sub_slot_iters is not None:
454
478
  ssi = block.finished_sub_slots[0].challenge_chain.new_sub_slot_iters
455
- r, _, _ = await full_node.blockchain.add_block(blocks[i], pre_validation_results[i], None, sub_slot_iters=ssi)
479
+ fork_info = ForkInfo(block.height - 1, block.height - 1, block.prev_header_hash)
480
+ r, _, _ = await full_node.blockchain.add_block(
481
+ blocks[i], pre_validation_results[i], sub_slot_iters=ssi, fork_info=fork_info
482
+ )
456
483
  assert r == AddBlockResult.NEW_PEAK
457
484
 
458
485
 
459
486
  async def inject_signage_points(signage_points: SPList, full_node_1: FullNode, full_node_2: FullNode) -> None:
460
- full_node_2_peer_1 = [
487
+ full_node_2_peer_1 = next(
461
488
  n for n in list(full_node_2.server.all_connections.values()) if n.local_type == NodeType.FULL_NODE
462
- ][0]
489
+ )
463
490
 
464
491
  api2 = cast(FullNodeAPI, full_node_2.server.api)
465
492
 
@@ -491,7 +518,7 @@ async def inject_signage_points(signage_points: SPList, full_node_1: FullNode, f
491
518
  # A FullBlock is also included which is infused already in the chain so
492
519
  # that the next NewEndOfSubSlotVDF is valid.
493
520
  # This block has to be added to the test FullNode before injecting the signage points.
494
- def load_test_data() -> Tuple[List[FullBlock], SPList]:
521
+ def load_test_data() -> tuple[list[FullBlock], SPList]:
495
522
  file_path: str = dirname(__file__) + "/test_third_party_harvesters_data.json"
496
523
  with open(file_path) as f:
497
524
  data = json.load(f)
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import types
4
- from typing import Dict, List
5
4
 
6
5
  import pytest
7
6
  from chia_rs import Coin
@@ -41,8 +40,8 @@ def make_mempoolitem() -> MempoolItem:
41
40
  block_height = 1
42
41
 
43
42
  fee = uint64(10000000)
44
- spends: List[SpendConditions] = []
45
- conds = SpendBundleConditions(spends, 0, 0, 0, None, None, [], cost, 0, 0, False)
43
+ spends: list[SpendConditions] = []
44
+ conds = SpendBundleConditions(spends, 0, 0, 0, None, None, [], cost, 0, 0, False, 0, 0)
46
45
  mempool_item = MempoolItem(
47
46
  spend_bundle,
48
47
  fee,
@@ -125,7 +124,7 @@ def test_item_not_removed_if_not_added() -> None:
125
124
 
126
125
 
127
126
  def test_mempool_fee_estimator_remove_item() -> None:
128
- should_call_fee_estimator_remove: Dict[MempoolRemoveReason, int] = {
127
+ should_call_fee_estimator_remove: dict[MempoolRemoveReason, int] = {
129
128
  MempoolRemoveReason.BLOCK_INCLUSION: 0,
130
129
  MempoolRemoveReason.CONFLICT: 1,
131
130
  MempoolRemoveReason.POOL_FULL: 1,
@@ -188,7 +187,7 @@ def test_current_block_height_new_block() -> None:
188
187
  fee_estimator = FeeEstimatorInterfaceIntegrationVerificationObject()
189
188
  mempool = Mempool(test_mempool_info, fee_estimator)
190
189
  height = uint32(10)
191
- included_items: List[MempoolItemInfo] = []
190
+ included_items: list[MempoolItemInfo] = []
192
191
  mempool.fee_estimator.new_block(FeeBlockInfo(height, included_items))
193
192
  assert mempool.fee_estimator.current_block_height == height # type: ignore[attr-defined]
194
193
 
@@ -197,7 +196,7 @@ def test_current_block_height_new_height_then_new_block() -> None:
197
196
  fee_estimator = FeeEstimatorInterfaceIntegrationVerificationObject()
198
197
  mempool = Mempool(test_mempool_info, fee_estimator)
199
198
  height = uint32(11)
200
- included_items: List[MempoolItemInfo] = []
199
+ included_items: list[MempoolItemInfo] = []
201
200
  fee_estimator.new_block_height(uint32(height - 1))
202
201
  mempool.fee_estimator.new_block(FeeBlockInfo(height, included_items))
203
202
  assert mempool.fee_estimator.current_block_height == height # type: ignore[attr-defined]
@@ -207,7 +206,7 @@ def test_current_block_height_new_block_then_new_height() -> None:
207
206
  fee_estimator = FeeEstimatorInterfaceIntegrationVerificationObject()
208
207
  mempool = Mempool(test_mempool_info, fee_estimator)
209
208
  height = uint32(12)
210
- included_items: List[MempoolItemInfo] = []
209
+ included_items: list[MempoolItemInfo] = []
211
210
  fee_estimator.new_block_height(uint32(height - 1))
212
211
  mempool.fee_estimator.new_block(FeeBlockInfo(height, included_items))
213
212
  fee_estimator.new_block_height(uint32(height + 1))
@@ -254,7 +253,8 @@ def test_add_tx_called() -> None:
254
253
 
255
254
  # Replace with test method
256
255
  mempool.fee_estimator.tracker.add_tx = types.MethodType( # type: ignore[attr-defined]
257
- add_tx_called_fun, mempool.fee_estimator.tracker # type: ignore[attr-defined]
256
+ add_tx_called_fun,
257
+ mempool.fee_estimator.tracker, # type: ignore[attr-defined]
258
258
  )
259
259
 
260
260
  mempool.add_to_pool(item)