chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.6.0rc2__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 (531) 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_blockchain_transactions.py +5 -2
  6. chia/_tests/blockchain/test_build_chains.py +2 -4
  7. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  8. chia/_tests/clvm/coin_store.py +4 -7
  9. chia/_tests/clvm/test_clvm_step.py +4 -4
  10. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  11. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  12. chia/_tests/clvm/test_singletons.py +2 -4
  13. chia/_tests/clvm/test_spend_sim.py +2 -2
  14. chia/_tests/cmds/cmd_test_utils.py +27 -45
  15. chia/_tests/cmds/test_cmd_framework.py +6 -6
  16. chia/_tests/cmds/test_daemon.py +3 -3
  17. chia/_tests/cmds/test_show.py +4 -4
  18. chia/_tests/cmds/test_tx_config_args.py +1 -2
  19. chia/_tests/cmds/testing_classes.py +4 -5
  20. chia/_tests/cmds/wallet/test_did.py +24 -27
  21. chia/_tests/cmds/wallet/test_nft.py +12 -10
  22. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  23. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  24. chia/_tests/conftest.py +66 -31
  25. chia/_tests/connection_utils.py +2 -2
  26. chia/_tests/core/cmds/test_beta.py +4 -4
  27. chia/_tests/core/cmds/test_keys.py +2 -3
  28. chia/_tests/core/cmds/test_wallet.py +15 -15
  29. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  30. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  31. chia/_tests/core/daemon/test_daemon.py +11 -11
  32. chia/_tests/core/data_layer/conftest.py +2 -2
  33. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  34. chia/_tests/core/data_layer/test_data_store.py +10 -10
  35. chia/_tests/core/data_layer/util.py +11 -11
  36. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  37. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  38. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  39. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  40. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  41. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  42. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  43. chia/_tests/core/full_node/test_conditions.py +21 -23
  44. chia/_tests/core/full_node/test_full_node.py +273 -70
  45. chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
  46. chia/_tests/core/full_node/test_hint_management.py +2 -4
  47. chia/_tests/core/full_node/test_performance.py +0 -1
  48. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  49. chia/_tests/core/full_node/test_transactions.py +1 -2
  50. chia/_tests/core/full_node/test_tx_processing_queue.py +198 -30
  51. chia/_tests/core/mempool/test_mempool.py +54 -50
  52. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  53. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  54. chia/_tests/core/mempool/test_mempool_manager.py +988 -854
  55. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  56. chia/_tests/core/server/serve.py +7 -7
  57. chia/_tests/core/server/test_dos.py +1 -2
  58. chia/_tests/core/server/test_event_loop.py +12 -4
  59. chia/_tests/core/server/test_loop.py +7 -8
  60. chia/_tests/core/server/test_rate_limits.py +9 -8
  61. chia/_tests/core/server/test_server.py +61 -1
  62. chia/_tests/core/services/test_services.py +2 -2
  63. chia/_tests/core/ssl/test_ssl.py +2 -2
  64. chia/_tests/core/test_cost_calculation.py +2 -6
  65. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  66. chia/_tests/core/test_filter.py +0 -1
  67. chia/_tests/core/test_full_node_rpc.py +2 -2
  68. chia/_tests/core/test_merkle_set.py +1 -2
  69. chia/_tests/core/test_seeder.py +4 -4
  70. chia/_tests/core/util/test_config.py +4 -4
  71. chia/_tests/core/util/test_jsonify.py +2 -2
  72. chia/_tests/core/util/test_keychain.py +3 -3
  73. chia/_tests/core/util/test_lockfile.py +2 -1
  74. chia/_tests/core/util/test_log_exceptions.py +1 -2
  75. chia/_tests/core/util/test_streamable.py +17 -17
  76. chia/_tests/db/test_db_wrapper.py +3 -2
  77. chia/_tests/environments/wallet.py +14 -14
  78. chia/_tests/ether.py +4 -3
  79. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  80. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  81. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  82. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  83. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  84. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  85. chia/_tests/harvester/test_harvester_api.py +11 -4
  86. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  87. chia/_tests/plot_sync/test_receiver.py +11 -10
  88. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  89. chia/_tests/plot_sync/util.py +1 -2
  90. chia/_tests/plotting/test_plot_manager.py +7 -6
  91. chia/_tests/plotting/test_prover.py +30 -38
  92. chia/_tests/pools/test_pool_cmdline.py +4 -6
  93. chia/_tests/pools/test_pool_rpc.py +203 -61
  94. chia/_tests/pools/test_pool_wallet.py +3 -3
  95. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  96. chia/_tests/process_junit.py +2 -2
  97. chia/_tests/rpc/test_rpc_client.py +4 -4
  98. chia/_tests/rpc/test_rpc_server.py +3 -3
  99. chia/_tests/simulation/test_simulation.py +12 -25
  100. chia/_tests/solver/test_solver_service.py +13 -4
  101. chia/_tests/testconfig.py +2 -2
  102. chia/_tests/timelord/test_new_peak.py +22 -11
  103. chia/_tests/tools/test_run_block.py +0 -2
  104. chia/_tests/tools/test_virtual_project.py +2 -1
  105. chia/_tests/util/benchmarks.py +1 -0
  106. chia/_tests/util/blockchain.py +38 -36
  107. chia/_tests/util/blockchain_mock.py +11 -11
  108. chia/_tests/util/build_network_protocol_files.py +2 -1
  109. chia/_tests/util/coin_store.py +2 -1
  110. chia/_tests/util/config.py +1 -1
  111. chia/_tests/util/db_connection.py +2 -3
  112. chia/_tests/util/full_sync.py +9 -11
  113. chia/_tests/util/gen_ssl_certs.py +4 -5
  114. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  115. chia/_tests/util/misc.py +24 -24
  116. chia/_tests/util/network_protocol_data.py +20 -3
  117. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  118. chia/_tests/util/protocol_messages_json.py +292 -3
  119. chia/_tests/util/setup_nodes.py +62 -47
  120. chia/_tests/util/spend_sim.py +57 -57
  121. chia/_tests/util/test_async_pool.py +2 -3
  122. chia/_tests/util/test_chia_version.py +1 -3
  123. chia/_tests/util/test_config.py +3 -3
  124. chia/_tests/util/test_full_block_utils.py +6 -3
  125. chia/_tests/util/test_limited_semaphore.py +1 -2
  126. chia/_tests/util/test_misc.py +2 -2
  127. chia/_tests/util/test_network.py +1 -2
  128. chia/_tests/util/test_priority_mutex.py +3 -3
  129. chia/_tests/util/test_recursive_replace.py +5 -6
  130. chia/_tests/util/test_replace_str_to_bytes.py +9 -10
  131. chia/_tests/util/test_testnet_overrides.py +3 -3
  132. chia/_tests/util/time_out_assert.py +2 -2
  133. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  134. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  135. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  136. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  137. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  138. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  139. chia/_tests/wallet/conftest.py +6 -6
  140. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  141. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  142. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  145. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  146. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  147. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  148. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  149. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  150. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  151. chia/_tests/wallet/sync/test_wallet_sync.py +63 -60
  152. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  153. chia/_tests/wallet/test_coin_management.py +2 -2
  154. chia/_tests/wallet/test_conditions.py +45 -51
  155. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  156. chia/_tests/wallet/test_new_wallet_protocol.py +17 -17
  157. chia/_tests/wallet/test_notifications.py +14 -14
  158. chia/_tests/wallet/test_signer_protocol.py +5 -5
  159. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  160. chia/_tests/wallet/test_transaction_store.py +20 -20
  161. chia/_tests/wallet/test_util.py +2 -2
  162. chia/_tests/wallet/test_wallet.py +380 -228
  163. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  164. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  165. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  166. chia/_tests/wallet/test_wallet_node.py +16 -15
  167. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  168. chia/_tests/wallet/test_wallet_utils.py +2 -3
  169. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  170. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  171. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  172. chia/_tests/wallet/wallet_block_tools.py +12 -11
  173. chia/_tests/weight_proof/config.py +1 -0
  174. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  175. chia/apis/__init__.py +21 -0
  176. chia/apis/farmer_stub.py +102 -0
  177. chia/apis/full_node_stub.py +374 -0
  178. chia/apis/harvester_stub.py +57 -0
  179. chia/apis/introducer_stub.py +35 -0
  180. chia/apis/solver_stub.py +30 -0
  181. chia/apis/stub_protocol_registry.py +21 -0
  182. chia/apis/timelord_stub.py +39 -0
  183. chia/apis/wallet_stub.py +161 -0
  184. chia/cmds/beta.py +3 -4
  185. chia/cmds/beta_funcs.py +4 -3
  186. chia/cmds/check_wallet_db.py +4 -4
  187. chia/cmds/chia.py +1 -2
  188. chia/cmds/cmd_classes.py +11 -13
  189. chia/cmds/cmd_helpers.py +11 -11
  190. chia/cmds/cmds_util.py +15 -15
  191. chia/cmds/coin_funcs.py +6 -7
  192. chia/cmds/coins.py +2 -3
  193. chia/cmds/configure.py +1 -2
  194. chia/cmds/data.py +42 -42
  195. chia/cmds/data_funcs.py +81 -81
  196. chia/cmds/db.py +4 -5
  197. chia/cmds/db_backup_func.py +2 -2
  198. chia/cmds/db_upgrade_func.py +3 -3
  199. chia/cmds/db_validate_func.py +2 -2
  200. chia/cmds/dev/data.py +4 -4
  201. chia/cmds/dev/gh.py +5 -5
  202. chia/cmds/dev/installers.py +2 -3
  203. chia/cmds/dev/mempool.py +3 -4
  204. chia/cmds/dev/mempool_funcs.py +4 -4
  205. chia/cmds/dev/sim.py +8 -8
  206. chia/cmds/dump_keyring.py +3 -3
  207. chia/cmds/farm.py +6 -8
  208. chia/cmds/farm_funcs.py +25 -24
  209. chia/cmds/init_funcs.py +4 -4
  210. chia/cmds/keys.py +16 -18
  211. chia/cmds/keys_funcs.py +36 -36
  212. chia/cmds/netspace.py +1 -3
  213. chia/cmds/netspace_funcs.py +1 -2
  214. chia/cmds/options.py +3 -2
  215. chia/cmds/param_types.py +17 -16
  216. chia/cmds/passphrase.py +6 -7
  217. chia/cmds/passphrase_funcs.py +11 -13
  218. chia/cmds/peer.py +1 -3
  219. chia/cmds/peer_funcs.py +3 -3
  220. chia/cmds/plotnft.py +6 -7
  221. chia/cmds/plotnft_funcs.py +37 -26
  222. chia/cmds/rpc.py +3 -3
  223. chia/cmds/show.py +3 -5
  224. chia/cmds/show_funcs.py +9 -9
  225. chia/cmds/sim_funcs.py +25 -26
  226. chia/cmds/solver.py +1 -3
  227. chia/cmds/solver_funcs.py +1 -2
  228. chia/cmds/start_funcs.py +2 -2
  229. chia/cmds/wallet.py +76 -81
  230. chia/cmds/wallet_funcs.py +206 -177
  231. chia/consensus/augmented_chain.py +6 -6
  232. chia/consensus/block_body_validation.py +19 -15
  233. chia/consensus/block_creation.py +25 -21
  234. chia/consensus/block_header_validation.py +27 -13
  235. chia/consensus/block_height_map.py +3 -6
  236. chia/consensus/block_height_map_protocol.py +2 -2
  237. chia/consensus/block_record.py +2 -4
  238. chia/consensus/blockchain.py +58 -40
  239. chia/consensus/blockchain_interface.py +7 -7
  240. chia/consensus/coin_store_protocol.py +5 -6
  241. chia/consensus/condition_tools.py +4 -4
  242. chia/consensus/cost_calculator.py +2 -3
  243. chia/consensus/default_constants.py +19 -13
  244. chia/consensus/deficit.py +1 -3
  245. chia/consensus/difficulty_adjustment.py +3 -5
  246. chia/consensus/find_fork_point.py +2 -4
  247. chia/consensus/full_block_to_block_record.py +11 -13
  248. chia/consensus/generator_tools.py +2 -3
  249. chia/consensus/get_block_challenge.py +50 -26
  250. chia/consensus/get_block_generator.py +2 -3
  251. chia/consensus/make_sub_epoch_summary.py +8 -7
  252. chia/consensus/multiprocess_validation.py +31 -20
  253. chia/consensus/pos_quality.py +6 -23
  254. chia/consensus/pot_iterations.py +17 -44
  255. chia/consensus/signage_point.py +4 -5
  256. chia/consensus/vdf_info_computation.py +2 -4
  257. chia/daemon/client.py +8 -8
  258. chia/daemon/keychain_proxy.py +31 -37
  259. chia/daemon/server.py +32 -33
  260. chia/daemon/windows_signal.py +4 -3
  261. chia/data_layer/data_layer.py +86 -77
  262. chia/data_layer/data_layer_rpc_api.py +9 -9
  263. chia/data_layer/data_layer_rpc_client.py +13 -15
  264. chia/data_layer/data_layer_server.py +3 -3
  265. chia/data_layer/data_layer_util.py +14 -14
  266. chia/data_layer/data_layer_wallet.py +94 -101
  267. chia/data_layer/data_store.py +50 -50
  268. chia/data_layer/dl_wallet_store.py +9 -12
  269. chia/data_layer/download_data.py +8 -9
  270. chia/data_layer/s3_plugin_service.py +5 -9
  271. chia/data_layer/start_data_layer.py +5 -5
  272. chia/farmer/farmer.py +31 -31
  273. chia/farmer/farmer_api.py +45 -33
  274. chia/farmer/farmer_rpc_api.py +5 -4
  275. chia/farmer/farmer_rpc_client.py +6 -6
  276. chia/farmer/start_farmer.py +6 -6
  277. chia/full_node/block_store.py +13 -16
  278. chia/full_node/check_fork_next_block.py +1 -2
  279. chia/full_node/coin_store.py +15 -16
  280. chia/full_node/eligible_coin_spends.py +3 -3
  281. chia/full_node/fee_estimate_store.py +2 -3
  282. chia/full_node/fee_tracker.py +1 -2
  283. chia/full_node/full_block_utils.py +4 -4
  284. chia/full_node/full_node.py +239 -223
  285. chia/full_node/full_node_api.py +197 -152
  286. chia/full_node/full_node_rpc_api.py +34 -32
  287. chia/full_node/full_node_rpc_client.py +18 -19
  288. chia/full_node/full_node_store.py +45 -43
  289. chia/full_node/hard_fork_utils.py +44 -0
  290. chia/full_node/hint_management.py +2 -2
  291. chia/full_node/mempool.py +17 -19
  292. chia/full_node/mempool_manager.py +89 -42
  293. chia/full_node/pending_tx_cache.py +2 -3
  294. chia/full_node/start_full_node.py +5 -5
  295. chia/full_node/sync_store.py +3 -4
  296. chia/full_node/tx_processing_queue.py +120 -36
  297. chia/full_node/weight_proof.py +61 -48
  298. chia/harvester/harvester.py +25 -24
  299. chia/harvester/harvester_api.py +61 -38
  300. chia/harvester/harvester_rpc_api.py +10 -10
  301. chia/harvester/start_harvester.py +4 -4
  302. chia/introducer/introducer.py +3 -3
  303. chia/introducer/introducer_api.py +6 -4
  304. chia/introducer/start_introducer.py +4 -4
  305. chia/legacy/keyring.py +3 -3
  306. chia/plot_sync/delta.py +1 -2
  307. chia/plot_sync/receiver.py +20 -17
  308. chia/plot_sync/sender.py +15 -10
  309. chia/plotters/bladebit.py +7 -7
  310. chia/plotters/chiapos.py +2 -2
  311. chia/plotters/madmax.py +4 -4
  312. chia/plotters/plotters.py +4 -4
  313. chia/plotters/plotters_util.py +3 -3
  314. chia/plotting/cache.py +20 -14
  315. chia/plotting/check_plots.py +26 -35
  316. chia/plotting/create_plots.py +22 -23
  317. chia/plotting/manager.py +21 -14
  318. chia/plotting/prover.py +59 -42
  319. chia/plotting/util.py +16 -16
  320. chia/pools/pool_config.py +2 -1
  321. chia/pools/pool_puzzles.py +11 -12
  322. chia/pools/pool_wallet.py +34 -57
  323. chia/pools/pool_wallet_info.py +39 -10
  324. chia/protocols/farmer_protocol.py +8 -9
  325. chia/protocols/fee_estimate.py +3 -4
  326. chia/protocols/full_node_protocol.py +3 -4
  327. chia/protocols/harvester_protocol.py +27 -15
  328. chia/protocols/outbound_message.py +3 -3
  329. chia/protocols/pool_protocol.py +8 -9
  330. chia/protocols/shared_protocol.py +1 -2
  331. chia/protocols/solver_protocol.py +9 -2
  332. chia/protocols/timelord_protocol.py +4 -7
  333. chia/protocols/wallet_protocol.py +11 -12
  334. chia/rpc/rpc_client.py +9 -9
  335. chia/rpc/rpc_server.py +17 -17
  336. chia/rpc/util.py +2 -2
  337. chia/seeder/crawler.py +8 -8
  338. chia/seeder/crawler_api.py +21 -27
  339. chia/seeder/crawler_rpc_api.py +2 -2
  340. chia/seeder/dns_server.py +21 -21
  341. chia/seeder/start_crawler.py +4 -4
  342. chia/server/address_manager.py +15 -16
  343. chia/server/api_protocol.py +11 -11
  344. chia/server/chia_policy.py +46 -26
  345. chia/server/introducer_peers.py +2 -3
  346. chia/server/node_discovery.py +19 -19
  347. chia/server/rate_limit_numbers.py +4 -5
  348. chia/server/rate_limits.py +4 -4
  349. chia/server/resolve_peer_info.py +4 -4
  350. chia/server/server.py +49 -52
  351. chia/server/signal_handlers.py +6 -6
  352. chia/server/start_service.py +17 -17
  353. chia/server/upnp.py +4 -6
  354. chia/server/ws_connection.py +52 -37
  355. chia/simulator/add_blocks_in_batches.py +1 -3
  356. chia/simulator/block_tools.py +312 -200
  357. chia/simulator/full_node_simulator.py +56 -35
  358. chia/simulator/keyring.py +2 -3
  359. chia/simulator/setup_services.py +15 -15
  360. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  361. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  362. chia/simulator/simulator_protocol.py +1 -2
  363. chia/simulator/simulator_test_tools.py +3 -3
  364. chia/simulator/start_simulator.py +7 -7
  365. chia/simulator/wallet_tools.py +10 -10
  366. chia/solver/solver.py +10 -10
  367. chia/solver/solver_api.py +10 -8
  368. chia/solver/solver_rpc_api.py +2 -2
  369. chia/solver/start_solver.py +4 -4
  370. chia/ssl/cacert.pem +148 -90
  371. chia/ssl/chia_ca.crt +14 -10
  372. chia/ssl/chia_ca_old.crt +19 -0
  373. chia/ssl/create_ssl.py +4 -4
  374. chia/ssl/renewedselfsignedca.conf +4 -0
  375. chia/ssl/ssl_check.py +1 -2
  376. chia/timelord/iters_from_block.py +1 -4
  377. chia/timelord/start_timelord.py +4 -4
  378. chia/timelord/timelord.py +44 -40
  379. chia/timelord/timelord_api.py +6 -4
  380. chia/timelord/timelord_launcher.py +2 -2
  381. chia/timelord/timelord_rpc_api.py +2 -2
  382. chia/timelord/timelord_state.py +11 -12
  383. chia/types/block_protocol.py +1 -3
  384. chia/types/blockchain_format/coin.py +1 -3
  385. chia/types/blockchain_format/program.py +11 -8
  386. chia/types/blockchain_format/proof_of_space.py +123 -76
  387. chia/types/blockchain_format/tree_hash.py +3 -3
  388. chia/types/blockchain_format/vdf.py +1 -2
  389. chia/types/coin_spend.py +3 -3
  390. chia/types/mempool_item.py +5 -5
  391. chia/types/mempool_submission_status.py +2 -3
  392. chia/types/peer_info.py +1 -2
  393. chia/types/unfinished_header_block.py +3 -4
  394. chia/types/validation_state.py +1 -2
  395. chia/util/action_scope.py +8 -8
  396. chia/util/async_pool.py +5 -5
  397. chia/util/bech32m.py +1 -2
  398. chia/util/beta_metrics.py +2 -2
  399. chia/util/block_cache.py +4 -4
  400. chia/util/chia_logging.py +2 -2
  401. chia/util/chia_version.py +1 -2
  402. chia/util/config.py +15 -16
  403. chia/util/db_wrapper.py +26 -27
  404. chia/util/default_root.py +1 -2
  405. chia/util/errors.py +3 -3
  406. chia/util/file_keyring.py +14 -14
  407. chia/util/files.py +2 -3
  408. chia/util/hash.py +4 -4
  409. chia/util/initial-config.yaml +4 -5
  410. chia/util/inline_executor.py +2 -1
  411. chia/util/ip_address.py +1 -2
  412. chia/util/keychain.py +25 -27
  413. chia/util/keyring_wrapper.py +18 -19
  414. chia/util/lock.py +3 -4
  415. chia/util/log_exceptions.py +1 -2
  416. chia/util/lru_cache.py +2 -2
  417. chia/util/network.py +6 -6
  418. chia/util/path.py +2 -3
  419. chia/util/priority_mutex.py +2 -2
  420. chia/util/profiler.py +1 -2
  421. chia/util/safe_cancel_task.py +1 -2
  422. chia/util/streamable.py +24 -10
  423. chia/util/task_referencer.py +1 -1
  424. chia/util/timing.py +3 -3
  425. chia/util/virtual_project_analysis.py +6 -5
  426. chia/util/ws_message.py +2 -2
  427. chia/wallet/cat_wallet/cat_info.py +3 -4
  428. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  429. chia/wallet/cat_wallet/cat_utils.py +3 -4
  430. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  431. chia/wallet/cat_wallet/lineage_store.py +3 -4
  432. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  433. chia/wallet/coin_selection.py +9 -10
  434. chia/wallet/conditions.py +142 -106
  435. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  436. chia/wallet/derivation_record.py +1 -2
  437. chia/wallet/derive_keys.py +2 -4
  438. chia/wallet/did_wallet/did_info.py +10 -11
  439. chia/wallet/did_wallet/did_wallet.py +36 -82
  440. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  441. chia/wallet/driver_protocol.py +5 -7
  442. chia/wallet/lineage_proof.py +4 -4
  443. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  444. chia/wallet/nft_wallet/nft_info.py +8 -9
  445. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  446. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  447. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  448. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  449. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  450. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  451. chia/wallet/notification_manager.py +3 -3
  452. chia/wallet/notification_store.py +44 -61
  453. chia/wallet/outer_puzzles.py +6 -7
  454. chia/wallet/puzzle_drivers.py +34 -6
  455. chia/wallet/puzzles/clawback/drivers.py +6 -6
  456. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  457. chia/wallet/puzzles/load_clvm.py +1 -1
  458. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  459. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  460. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  461. chia/wallet/puzzles/tails.py +3 -3
  462. chia/wallet/singleton.py +5 -7
  463. chia/wallet/singleton_record.py +3 -3
  464. chia/wallet/start_wallet.py +5 -5
  465. chia/wallet/trade_manager.py +37 -58
  466. chia/wallet/trade_record.py +4 -4
  467. chia/wallet/trading/offer.py +59 -46
  468. chia/wallet/trading/trade_store.py +8 -9
  469. chia/wallet/transaction_record.py +8 -8
  470. chia/wallet/uncurried_puzzle.py +1 -2
  471. chia/wallet/util/clvm_streamable.py +12 -12
  472. chia/wallet/util/compute_hints.py +4 -5
  473. chia/wallet/util/curry_and_treehash.py +1 -2
  474. chia/wallet/util/merkle_tree.py +2 -3
  475. chia/wallet/util/peer_request_cache.py +8 -8
  476. chia/wallet/util/signing.py +85 -0
  477. chia/wallet/util/tx_config.py +15 -6
  478. chia/wallet/util/wallet_sync_utils.py +14 -16
  479. chia/wallet/util/wallet_types.py +2 -2
  480. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  481. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  482. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  483. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  484. chia/wallet/vc_wallet/vc_store.py +5 -6
  485. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  486. chia/wallet/wallet.py +50 -78
  487. chia/wallet/wallet_action_scope.py +11 -11
  488. chia/wallet/wallet_blockchain.py +12 -12
  489. chia/wallet/wallet_coin_record.py +12 -6
  490. chia/wallet/wallet_coin_store.py +24 -25
  491. chia/wallet/wallet_interested_store.py +3 -5
  492. chia/wallet/wallet_nft_store.py +10 -11
  493. chia/wallet/wallet_node.py +53 -61
  494. chia/wallet/wallet_node_api.py +5 -3
  495. chia/wallet/wallet_protocol.py +23 -23
  496. chia/wallet/wallet_puzzle_store.py +15 -18
  497. chia/wallet/wallet_request_types.py +778 -114
  498. chia/wallet/wallet_retry_store.py +1 -3
  499. chia/wallet/wallet_rpc_api.py +572 -909
  500. chia/wallet/wallet_rpc_client.py +87 -279
  501. chia/wallet/wallet_singleton_store.py +3 -4
  502. chia/wallet/wallet_state_manager.py +332 -106
  503. chia/wallet/wallet_transaction_store.py +11 -14
  504. chia/wallet/wallet_user_store.py +4 -6
  505. chia/wallet/wallet_weight_proof_handler.py +4 -4
  506. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/METADATA +6 -5
  507. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
  508. chia/apis.py +0 -21
  509. chia/consensus/check_time_locks.py +0 -57
  510. chia/data_layer/puzzles/__init__.py +0 -0
  511. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  512. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  513. chia/types/coin_record.py +0 -44
  514. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  515. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  516. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  517. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  518. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  520. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  521. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  522. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  524. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  525. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  526. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  527. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  528. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  529. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/WHEEL +0 -0
  530. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
  531. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
@@ -7,11 +7,12 @@ from collections.abc import AsyncIterator
7
7
  from contextlib import asynccontextmanager
8
8
  from dataclasses import dataclass
9
9
  from pathlib import Path
10
- from typing import Any, Optional
10
+ from typing import Any
11
11
 
12
12
  import anyio
13
13
  from chia_rs import (
14
14
  DONT_VALIDATE_SIGNATURE,
15
+ CoinRecord,
15
16
  CoinSpend,
16
17
  ConsensusConstants,
17
18
  G2Element,
@@ -34,7 +35,6 @@ from chia.full_node.mempool import Mempool
34
35
  from chia.full_node.mempool_manager import MempoolManager
35
36
  from chia.types.blockchain_format.coin import Coin
36
37
  from chia.types.blockchain_format.program import INFINITE_COST
37
- from chia.types.coin_record import CoinRecord
38
38
  from chia.types.generator_types import BlockGenerator
39
39
  from chia.types.mempool_inclusion_status import MempoolInclusionStatus
40
40
  from chia.types.mempool_item import MempoolItem
@@ -58,7 +58,7 @@ and is designed so that you could test with it and then swap in a real rpc clien
58
58
 
59
59
  @asynccontextmanager
60
60
  async def sim_and_client(
61
- db_path: Optional[Path] = None, defaults: ConsensusConstants = DEFAULT_CONSTANTS, pass_prefarm: bool = True
61
+ db_path: Path | None = None, defaults: ConsensusConstants = DEFAULT_CONSTANTS, pass_prefarm: bool = True
62
62
  ) -> AsyncIterator[tuple[SpendSim, SimClient]]:
63
63
  async with SpendSim.managed(db_path, defaults) as sim:
64
64
  client: SimClient = SimClient(sim)
@@ -103,7 +103,7 @@ class CostLogger:
103
103
  @streamable
104
104
  @dataclass(frozen=True)
105
105
  class SimFullBlock(Streamable):
106
- transactions_generator: Optional[BlockGenerator]
106
+ transactions_generator: BlockGenerator | None
107
107
  height: uint32 # Note that height is not on a regular FullBlock
108
108
 
109
109
 
@@ -155,7 +155,7 @@ class SpendSim:
155
155
  @classmethod
156
156
  @contextlib.asynccontextmanager
157
157
  async def managed(
158
- cls, db_path: Optional[Path] = None, defaults: ConsensusConstants = DEFAULT_CONSTANTS
158
+ cls, db_path: Path | None = None, defaults: ConsensusConstants = DEFAULT_CONSTANTS
159
159
  ) -> AsyncIterator[Self]:
160
160
  self = cls()
161
161
  if db_path is None:
@@ -166,44 +166,44 @@ class SpendSim:
166
166
  async with DBWrapper2.managed(database=uri, uri=True, reader_count=1, db_version=2) as self.db_wrapper:
167
167
  self.coin_store = await CoinStore.create(self.db_wrapper)
168
168
  self.hint_store = await HintStore.create(self.db_wrapper)
169
- self.mempool_manager = MempoolManager(
170
- self.coin_store.get_coin_records, self.coin_store.get_unspent_lineage_info_for_puzzle_hash, defaults
171
- )
172
169
  self.defaults = defaults
173
170
 
174
- # Load the next data if there is any
175
- async with self.db_wrapper.writer_maybe_transaction() as conn:
176
- await conn.execute("CREATE TABLE IF NOT EXISTS block_data(data blob PRIMARY KEY)")
177
- cursor = await conn.execute("SELECT * from block_data")
178
- row = await cursor.fetchone()
179
- await cursor.close()
180
- if row is not None:
181
- store_data = SimStore.from_bytes(row[0])
182
- self.timestamp = store_data.timestamp
183
- self.block_height = store_data.block_height
184
- self.block_records = store_data.block_records
185
- self.blocks = store_data.blocks
186
- self.mempool_manager.peak = self.block_records[-1]
187
- else:
188
- self.timestamp = uint64(1)
189
- self.block_height = uint32(0)
190
- self.block_records = []
191
- self.blocks = []
192
-
193
- try:
194
- yield self
195
- finally:
196
- with anyio.CancelScope(shield=True):
197
- async with self.db_wrapper.writer_maybe_transaction() as conn:
198
- c = await conn.execute("DELETE FROM block_data")
199
- await c.close()
200
- c = await conn.execute(
201
- "INSERT INTO block_data VALUES(?)",
202
- (bytes(SimStore(self.timestamp, self.block_height, self.block_records, self.blocks)),),
203
- )
204
- await c.close()
205
-
206
- async def new_peak(self, spent_coins_ids: Optional[list[bytes32]]) -> None:
171
+ async with MempoolManager.managed(
172
+ self.coin_store.get_coin_records, self.coin_store.get_unspent_lineage_info_for_puzzle_hash, defaults
173
+ ) as self.mempool_manager:
174
+ # Load the next data if there is any
175
+ async with self.db_wrapper.writer_maybe_transaction() as conn:
176
+ await conn.execute("CREATE TABLE IF NOT EXISTS block_data(data blob PRIMARY KEY)")
177
+ cursor = await conn.execute("SELECT * from block_data")
178
+ row = await cursor.fetchone()
179
+ await cursor.close()
180
+ if row is not None:
181
+ store_data = SimStore.from_bytes(row[0])
182
+ self.timestamp = store_data.timestamp
183
+ self.block_height = store_data.block_height
184
+ self.block_records = store_data.block_records
185
+ self.blocks = store_data.blocks
186
+ self.mempool_manager.peak = self.block_records[-1]
187
+ else:
188
+ self.timestamp = uint64(1)
189
+ self.block_height = uint32(0)
190
+ self.block_records = []
191
+ self.blocks = []
192
+
193
+ try:
194
+ yield self
195
+ finally:
196
+ with anyio.CancelScope(shield=True):
197
+ async with self.db_wrapper.writer_maybe_transaction() as conn:
198
+ c = await conn.execute("DELETE FROM block_data")
199
+ await c.close()
200
+ c = await conn.execute(
201
+ "INSERT INTO block_data VALUES(?)",
202
+ (bytes(SimStore(self.timestamp, self.block_height, self.block_records, self.blocks)),),
203
+ )
204
+ await c.close()
205
+
206
+ async def new_peak(self, spent_coins_ids: list[bytes32] | None) -> None:
207
207
  await self.mempool_manager.new_peak(self.block_records[-1], spent_coins_ids)
208
208
 
209
209
  def new_coin_record(self, coin: Coin, coinbase: bool = False) -> CoinRecord:
@@ -229,7 +229,7 @@ class SpendSim:
229
229
  coins.add(coin)
230
230
  return list(coins)
231
231
 
232
- async def generate_transaction_generator(self, bundle: Optional[SpendBundle]) -> Optional[BlockGenerator]:
232
+ async def generate_transaction_generator(self, bundle: SpendBundle | None) -> BlockGenerator | None:
233
233
  if bundle is None:
234
234
  return None
235
235
  return simple_solution_generator(bundle)
@@ -257,7 +257,7 @@ class SpendSim:
257
257
  ),
258
258
  ]
259
259
  # Coin store gets updated
260
- generator_bundle: Optional[SpendBundle] = None
260
+ generator_bundle: SpendBundle | None = None
261
261
  tx_additions = []
262
262
  tx_removals = []
263
263
  spent_coins_ids = None
@@ -295,7 +295,7 @@ class SpendSim:
295
295
  tx_removals=spent_coins_ids if spent_coins_ids is not None else [],
296
296
  )
297
297
  # SimBlockRecord is created
298
- generator: Optional[BlockGenerator] = await self.generate_transaction_generator(generator_bundle)
298
+ generator: BlockGenerator | None = await self.generate_transaction_generator(generator_bundle)
299
299
  self.block_records.append(SimBlockRecord.create(included_reward_coins, next_block_height, self.timestamp))
300
300
  self.blocks.append(SimFullBlock(generator, next_block_height))
301
301
 
@@ -336,7 +336,7 @@ class SimClient:
336
336
  def __init__(self, service: SpendSim) -> None:
337
337
  self.service = service
338
338
 
339
- async def push_tx(self, spend_bundle: SpendBundle) -> tuple[MempoolInclusionStatus, Optional[Err]]:
339
+ async def push_tx(self, spend_bundle: SpendBundle) -> tuple[MempoolInclusionStatus, Err | None]:
340
340
  try:
341
341
  spend_bundle_id = spend_bundle.name()
342
342
  sbc = await self.service.mempool_manager.pre_validate_spendbundle(spend_bundle, spend_bundle_id)
@@ -348,14 +348,14 @@ class SimClient:
348
348
  )
349
349
  return info.status, info.error
350
350
 
351
- async def get_coin_record_by_name(self, name: bytes32) -> Optional[CoinRecord]:
351
+ async def get_coin_record_by_name(self, name: bytes32) -> CoinRecord | None:
352
352
  return await self.service.coin_store.get_coin_record(name)
353
353
 
354
354
  async def get_coin_records_by_names(
355
355
  self,
356
356
  names: list[bytes32],
357
- start_height: Optional[int] = None,
358
- end_height: Optional[int] = None,
357
+ start_height: int | None = None,
358
+ end_height: int | None = None,
359
359
  include_spent_coins: bool = False,
360
360
  ) -> list[CoinRecord]:
361
361
  kwargs: dict[str, Any] = {"include_spent_coins": include_spent_coins, "names": names}
@@ -368,8 +368,8 @@ class SimClient:
368
368
  async def get_coin_records_by_parent_ids(
369
369
  self,
370
370
  parent_ids: list[bytes32],
371
- start_height: Optional[int] = None,
372
- end_height: Optional[int] = None,
371
+ start_height: int | None = None,
372
+ end_height: int | None = None,
373
373
  include_spent_coins: bool = False,
374
374
  ) -> list[CoinRecord]:
375
375
  kwargs: dict[str, Any] = {"include_spent_coins": include_spent_coins, "parent_ids": parent_ids}
@@ -383,8 +383,8 @@ class SimClient:
383
383
  self,
384
384
  puzzle_hash: bytes32,
385
385
  include_spent_coins: bool = True,
386
- start_height: Optional[int] = None,
387
- end_height: Optional[int] = None,
386
+ start_height: int | None = None,
387
+ end_height: int | None = None,
388
388
  ) -> list[CoinRecord]:
389
389
  kwargs: dict[str, Any] = {"include_spent_coins": include_spent_coins, "puzzle_hash": puzzle_hash}
390
390
  if start_height is not None:
@@ -397,8 +397,8 @@ class SimClient:
397
397
  self,
398
398
  puzzle_hashes: list[bytes32],
399
399
  include_spent_coins: bool = True,
400
- start_height: Optional[int] = None,
401
- end_height: Optional[int] = None,
400
+ start_height: int | None = None,
401
+ end_height: int | None = None,
402
402
  ) -> list[CoinRecord]:
403
403
  kwargs: dict[str, Any] = {"include_spent_coins": include_spent_coins, "puzzle_hashes": puzzle_hashes}
404
404
  if start_height is not None:
@@ -460,7 +460,7 @@ class SimClient:
460
460
  spends[item.name] = item
461
461
  return spends
462
462
 
463
- async def get_mempool_item_by_tx_id(self, tx_id: bytes32) -> Optional[dict[str, Any]]:
463
+ async def get_mempool_item_by_tx_id(self, tx_id: bytes32) -> dict[str, Any] | None:
464
464
  item = self.service.mempool_manager.get_mempool_item(tx_id)
465
465
  if item is None:
466
466
  return None
@@ -471,8 +471,8 @@ class SimClient:
471
471
  self,
472
472
  hint: bytes32,
473
473
  include_spent_coins: bool = True,
474
- start_height: Optional[int] = None,
475
- end_height: Optional[int] = None,
474
+ start_height: int | None = None,
475
+ end_height: int | None = None,
476
476
  ) -> list[CoinRecord]:
477
477
  """
478
478
  Retrieves coins by hint, by default returns unspent coins.
@@ -4,7 +4,6 @@ import asyncio
4
4
  import random
5
5
  import re
6
6
  from dataclasses import dataclass
7
- from typing import Optional
8
7
 
9
8
  import anyio
10
9
  import pytest
@@ -128,12 +127,12 @@ async def test_worker_exception_logged(caplog: pytest.LogCaptureFixture) -> None
128
127
  def __init__(self) -> None:
129
128
  super().__init__(expected_message)
130
129
 
131
- work_queue: asyncio.Queue[Optional[Exception]] = asyncio.Queue()
130
+ work_queue: asyncio.Queue[Exception | None] = asyncio.Queue()
132
131
  result_queue: asyncio.Queue[None] = asyncio.Queue()
133
132
 
134
133
  async def worker(
135
134
  worker_id: int,
136
- work_queue: asyncio.Queue[Optional[Exception]] = work_queue,
135
+ work_queue: asyncio.Queue[Exception | None] = work_queue,
137
136
  result_queue: asyncio.Queue[None] = result_queue,
138
137
  ) -> None:
139
138
  work = await work_queue.get()
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  import pytest
6
4
  from packaging.version import Version
7
5
 
@@ -46,5 +44,5 @@ def test_chia_short_version() -> None:
46
44
  ("something", "something"),
47
45
  ],
48
46
  )
49
- def test_chia_short_version_from_str(version: str, result: Optional[str]) -> None:
47
+ def test_chia_short_version_from_str(version: str, result: str | None) -> None:
50
48
  assert chia_short_version(version) == result
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Any, Optional
4
+ from typing import Any
5
5
 
6
6
  from chia_rs.sized_ints import uint16
7
7
 
@@ -158,8 +158,8 @@ class SetPeerInfoCase(DataCase):
158
158
  service_config: dict[str, Any]
159
159
  requested_node_type: NodeType
160
160
  expected_service_config: dict[str, Any]
161
- peer_host: Optional[str] = None
162
- peer_port: Optional[int] = None
161
+ peer_host: str | None = None
162
+ peer_port: int | None = None
163
163
  marks: Marks = ()
164
164
 
165
165
  @property
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  import random
4
4
  from collections.abc import Generator, Iterator
5
- from typing import Optional
6
5
 
7
6
  import pytest
8
7
  from chia_rs import (
@@ -101,6 +100,7 @@ def get_reward_chain_block(height: uint32) -> Generator[RewardChainBlock, None,
101
100
  g2(), # reward_chain_sp_signature
102
101
  vdf(), # reward_chain_ip_vdf
103
102
  infused_challenge_chain_ip_vdf,
103
+ None, # header_mmr_root
104
104
  has_transactions,
105
105
  )
106
106
 
@@ -135,7 +135,7 @@ def get_foliage() -> Generator[Foliage, None, None]:
135
135
  )
136
136
 
137
137
 
138
- def get_foliage_transaction_block() -> Generator[Optional[FoliageTransactionBlock], None, None]:
138
+ def get_foliage_transaction_block() -> Generator[FoliageTransactionBlock | None, None, None]:
139
139
  yield None
140
140
  timestamp = uint64(1631794488)
141
141
  yield FoliageTransactionBlock(
@@ -148,7 +148,7 @@ def get_foliage_transaction_block() -> Generator[Optional[FoliageTransactionBloc
148
148
  )
149
149
 
150
150
 
151
- def get_transactions_info(height: uint32, foliage_transaction_block: Optional[FoliageTransactionBlock]):
151
+ def get_transactions_info(height: uint32, foliage_transaction_block: FoliageTransactionBlock | None):
152
152
  if not foliage_transaction_block:
153
153
  yield None
154
154
  else:
@@ -255,6 +255,9 @@ def get_full_blocks() -> Iterator[FullBlock]:
255
255
 
256
256
 
257
257
  @pytest.mark.anyio
258
+ @pytest.mark.skip(
259
+ "Very slow test with limited usefulness: was used to ensure the cheap parser for FullBlock matched the regular one"
260
+ )
258
261
  async def test_parser():
259
262
  # loop over every combination of Optionals being set and not set
260
263
  # along with random values for the FullBlock fields. Ensure
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import asyncio
4
- from typing import Optional
5
4
 
6
5
  import pytest
7
6
 
@@ -18,7 +17,7 @@ async def test_stuff() -> None:
18
17
  semaphore = LimitedSemaphore.create(active_limit=active_limit, waiting_limit=waiting_limit)
19
18
  finish_event = asyncio.Event()
20
19
 
21
- async def acquire(entered_event: Optional[asyncio.Event] = None) -> None:
20
+ async def acquire(entered_event: asyncio.Event | None = None) -> None:
22
21
  async with semaphore.acquire():
23
22
  assert entered_event is not None
24
23
  entered_event.set()
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import contextlib
4
4
  from collections.abc import AsyncIterator, Iterator
5
- from typing import Optional, TypeVar
5
+ from typing import TypeVar
6
6
 
7
7
  import aiohttp
8
8
  import anyio
@@ -340,7 +340,7 @@ async def test_valued_event_wait_already_set() -> None:
340
340
  async def test_valued_event_wait_not_yet_set() -> None:
341
341
  valued_event = ValuedEvent[int]()
342
342
  value = 37
343
- result: Optional[int] = None
343
+ result: int | None = None
344
344
 
345
345
  async def wait(valued_event: ValuedEvent[int]) -> None:
346
346
  nonlocal result
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
  import os
4
4
  import sys
5
5
  from ipaddress import IPv4Address, IPv6Address
6
- from typing import Union
7
6
 
8
7
  import pytest
9
8
 
@@ -83,7 +82,7 @@ async def test_resolve6() -> None:
83
82
  ("93.184.216.34", IPv4Address),
84
83
  ],
85
84
  )
86
- def test_ip_address(address_string: str, expected_inner: type[Union[IPv4Address, IPv6Address]]) -> None:
85
+ def test_ip_address(address_string: str, expected_inner: type[IPv4Address | IPv6Address]) -> None:
87
86
  inner = expected_inner(address_string)
88
87
  ip = IPAddress.create(address_string)
89
88
  # Helpers
@@ -7,8 +7,8 @@ import itertools
7
7
  import logging
8
8
  import random
9
9
  import time
10
+ from collections.abc import Callable
10
11
  from dataclasses import dataclass
11
- from typing import Callable, Optional
12
12
 
13
13
  import anyio
14
14
  import pytest
@@ -119,8 +119,8 @@ class Request:
119
119
  # TODO: is the ID unneeded?
120
120
  id: str
121
121
  priority: MutexPriority
122
- acquisition_order: Optional[int] = None
123
- release_order: Optional[int] = None
122
+ acquisition_order: int | None = None
123
+ release_order: int | None = None
124
124
  order_counter: Callable[[], int] = counter.__next__
125
125
  # TODO: done may not be needed
126
126
  done: bool = False
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  import copy
4
4
  from dataclasses import dataclass
5
- from typing import Optional, Union
6
5
 
7
6
  import pytest
8
7
 
@@ -19,7 +18,7 @@ class TestC:
19
18
 
20
19
  # WARNING: this is just a simple stand in for rust classes and is not a good
21
20
  # reference for how such a method should be implemented in python
22
- def replace(self, **kwargs: Union[int, str, Optional[TestA]]) -> TestC:
21
+ def replace(self, **kwargs: int | str | TestA | None) -> TestC:
23
22
  ret = TestC(copy.deepcopy(self.a), copy.deepcopy(self.b))
24
23
  for key, value in kwargs.items():
25
24
  if key == "a":
@@ -36,22 +35,22 @@ class TestA:
36
35
  a: int
37
36
  b: str
38
37
  c: list[int]
39
- d: Optional[TestC]
38
+ d: TestC | None
40
39
 
41
40
 
42
41
  class TestB:
43
42
  a: int
44
43
  b: str
45
- c: Optional[TestA]
44
+ c: TestA | None
46
45
 
47
- def __init__(self, a: int, b: str, c: Optional[TestA]):
46
+ def __init__(self, a: int, b: str, c: TestA | None):
48
47
  self.a = a
49
48
  self.b = b
50
49
  self.c = c
51
50
 
52
51
  # WARNING: this is just a simple stand in for rust classes and is not a good
53
52
  # reference for how such a method should be implemented in python
54
- def replace(self, **kwargs: Union[int, str, Optional[TestA]]) -> TestB:
53
+ def replace(self, **kwargs: int | str | TestA | None) -> TestB:
55
54
  ret = TestB(copy.deepcopy(self.a), copy.deepcopy(self.b), copy.deepcopy(self.c))
56
55
  for key, value in kwargs.items():
57
56
  if key == "a": # pragma: no cover
@@ -27,8 +27,7 @@ test_constants = ConsensusConstants(
27
27
  NUMBER_ZERO_BITS_PLOT_FILTER_V2=uint8(9),
28
28
  MIN_PLOT_SIZE_V1=uint8(32),
29
29
  MAX_PLOT_SIZE_V1=uint8(50),
30
- MIN_PLOT_SIZE_V2=uint8(28),
31
- MAX_PLOT_SIZE_V2=uint8(32),
30
+ PLOT_SIZE_V2=uint8(18),
32
31
  SUB_SLOT_TIME_TARGET=uint16(600),
33
32
  NUM_SP_INTERVALS_EXTRA=uint8(3),
34
33
  MAX_FUTURE_TIME2=uint32(2 * 60),
@@ -56,21 +55,21 @@ test_constants = ConsensusConstants(
56
55
  BLOCKS_CACHE_SIZE=uint32(4608 + (128 * 4)),
57
56
  WEIGHT_PROOF_RECENT_BLOCKS=uint32(1000),
58
57
  MAX_BLOCK_COUNT_PER_REQUESTS=uint32(32),
59
- MAX_GENERATOR_SIZE=uint32(1000000),
60
58
  MAX_GENERATOR_REF_LIST_SIZE=uint32(512),
61
59
  POOL_SUB_SLOT_ITERS=uint64(37600000000),
62
60
  HARD_FORK_HEIGHT=uint32(5496000),
63
61
  HARD_FORK2_HEIGHT=uint32(0xFFFFFFFF),
64
- PLOT_V1_PHASE_OUT=uint32(1179648),
62
+ SOFT_FORK8_HEIGHT=uint32(8655000),
63
+ PLOT_V1_PHASE_OUT_EPOCH_BITS=uint8(8),
65
64
  PLOT_FILTER_128_HEIGHT=uint32(10542000),
66
65
  PLOT_FILTER_64_HEIGHT=uint32(15592000),
67
66
  PLOT_FILTER_32_HEIGHT=uint32(20643000),
68
- PLOT_STRENGTH_INITIAL=uint8(2),
69
- PLOT_STRENGTH_4_HEIGHT=uint32(0xFFFFFFFF),
70
- PLOT_STRENGTH_5_HEIGHT=uint32(0xFFFFFFFF),
71
- PLOT_STRENGTH_6_HEIGHT=uint32(0xFFFFFFFF),
72
- PLOT_STRENGTH_7_HEIGHT=uint32(0xFFFFFFFF),
73
- PLOT_STRENGTH_8_HEIGHT=uint32(0xFFFFFFFF),
67
+ MIN_PLOT_STRENGTH=uint8(2),
68
+ MAX_PLOT_STRENGTH=uint8(32),
69
+ QUALITY_PROOF_SCAN_FILTER=uint8(5),
70
+ PLOT_FILTER_V2_FIRST_ADJUSTMENT_HEIGHT=uint32(0xFFFFFFFA),
71
+ PLOT_FILTER_V2_SECOND_ADJUSTMENT_HEIGHT=uint32(0xFFFFFFFB),
72
+ PLOT_FILTER_V2_THIRD_ADJUSTMENT_HEIGHT=uint32(0xFFFFFFFC),
74
73
  )
75
74
 
76
75
 
@@ -8,19 +8,19 @@ from chia.consensus.default_constants import update_testnet_overrides
8
8
  def test_testnet11() -> None:
9
9
  overrides: dict[str, Any] = {}
10
10
  update_testnet_overrides("testnet11", overrides)
11
- assert overrides == {"MIN_PLOT_SIZE_V2": 18}
11
+ assert overrides == {"PLOT_SIZE_V2": 28, "SOFT_FORK8_HEIGHT": 3680000}
12
12
 
13
13
 
14
14
  def test_min_plot_size() -> None:
15
15
  overrides: dict[str, Any] = {"MIN_PLOT_SIZE": 18}
16
16
  update_testnet_overrides("testnet11", overrides)
17
- assert overrides == {"MIN_PLOT_SIZE_V1": 18, "MIN_PLOT_SIZE_V2": 18}
17
+ assert overrides == {"MIN_PLOT_SIZE_V1": 18, "PLOT_SIZE_V2": 28, "SOFT_FORK8_HEIGHT": 3680000}
18
18
 
19
19
 
20
20
  def test_max_plot_size() -> None:
21
21
  overrides: dict[str, Any] = {"MAX_PLOT_SIZE": 32}
22
22
  update_testnet_overrides("testnet11", overrides)
23
- assert overrides == {"MAX_PLOT_SIZE_V1": 32, "MIN_PLOT_SIZE_V2": 18}
23
+ assert overrides == {"MAX_PLOT_SIZE_V1": 32, "PLOT_SIZE_V2": 28, "SOFT_FORK8_HEIGHT": 3680000}
24
24
 
25
25
 
26
26
  def test_mainnet() -> None:
@@ -6,10 +6,10 @@ import json
6
6
  import logging
7
7
  import pathlib
8
8
  import time
9
- from collections.abc import Awaitable, Iterable
9
+ from collections.abc import Awaitable, Callable, Iterable
10
10
  from inspect import getframeinfo, stack
11
11
  from pathlib import Path
12
- from typing import TYPE_CHECKING, Any, Callable, ClassVar, Protocol, TypeVar, cast, final
12
+ from typing import TYPE_CHECKING, Any, ClassVar, Protocol, TypeVar, cast, final
13
13
 
14
14
  from typing_extensions import Self
15
15
 
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  import pytest
6
4
  from chia_rs import AugSchemeMPL, G2Element, PrivateKey
7
5
  from chia_rs.sized_ints import uint64
@@ -38,13 +36,13 @@ async def do_spend(
38
36
  coins: list[Coin],
39
37
  lineage_proofs: list[LineageProof],
40
38
  inner_solutions: list[Program],
41
- expected_result: tuple[MempoolInclusionStatus, Optional[Err]],
39
+ expected_result: tuple[MempoolInclusionStatus, Err | None],
42
40
  reveal_limitations_program: bool = True,
43
41
  signatures: list[G2Element] = [],
44
- extra_deltas: Optional[list[int]] = None,
42
+ extra_deltas: list[int] | None = None,
45
43
  additional_spends: list[WalletSpendBundle] = [],
46
- limitations_solutions: Optional[list[Program]] = None,
47
- cost_logger: Optional[CostLogger] = None,
44
+ limitations_solutions: list[Program] | None = None,
45
+ cost_logger: CostLogger | None = None,
48
46
  cost_log_msg: str = "",
49
47
  ) -> int:
50
48
  if limitations_solutions is None:
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  import pytest
6
4
  from chia_rs.sized_bytes import bytes32
7
5
  from chia_rs.sized_ints import uint64
@@ -22,12 +20,12 @@ def test_cat_outer_puzzle() -> None:
22
20
  cat_puzzle: Program = construct_cat_puzzle(CAT_MOD, tail, ACS)
23
21
  double_cat_puzzle: Program = construct_cat_puzzle(CAT_MOD, tail, cat_puzzle)
24
22
  uncurried_cat_puzzle = uncurry_puzzle(double_cat_puzzle)
25
- cat_driver: Optional[PuzzleInfo] = match_puzzle(uncurried_cat_puzzle)
23
+ cat_driver: PuzzleInfo | None = match_puzzle(uncurried_cat_puzzle)
26
24
 
27
25
  assert cat_driver is not None
28
26
  assert cat_driver.type() == "CAT"
29
27
  assert cat_driver["tail"] == tail
30
- inside_cat_driver: Optional[PuzzleInfo] = cat_driver.also()
28
+ inside_cat_driver: PuzzleInfo | None = cat_driver.also()
31
29
  assert inside_cat_driver is not None
32
30
  assert inside_cat_driver.type() == "CAT"
33
31
  assert inside_cat_driver["tail"] == tail