chia-blockchain 2.5.7rc3__py3-none-any.whl → 2.5.8rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. chia/__init__.py +8 -4
  2. chia/_tests/blockchain/blockchain_test_utils.py +6 -8
  3. chia/_tests/blockchain/test_augmented_chain.py +4 -4
  4. chia/_tests/blockchain/test_blockchain.py +165 -190
  5. chia/_tests/blockchain/test_build_chains.py +2 -4
  6. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  7. chia/_tests/clvm/coin_store.py +4 -7
  8. chia/_tests/clvm/test_clvm_step.py +4 -4
  9. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  10. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  11. chia/_tests/clvm/test_singletons.py +2 -4
  12. chia/_tests/clvm/test_spend_sim.py +2 -2
  13. chia/_tests/cmds/cmd_test_utils.py +27 -45
  14. chia/_tests/cmds/test_cmd_framework.py +6 -6
  15. chia/_tests/cmds/test_daemon.py +3 -3
  16. chia/_tests/cmds/test_show.py +4 -4
  17. chia/_tests/cmds/test_tx_config_args.py +1 -2
  18. chia/_tests/cmds/testing_classes.py +4 -5
  19. chia/_tests/cmds/wallet/test_did.py +24 -27
  20. chia/_tests/cmds/wallet/test_nft.py +12 -10
  21. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  22. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  23. chia/_tests/conftest.py +59 -30
  24. chia/_tests/connection_utils.py +2 -2
  25. chia/_tests/core/cmds/test_beta.py +4 -4
  26. chia/_tests/core/cmds/test_keys.py +2 -3
  27. chia/_tests/core/cmds/test_wallet.py +15 -15
  28. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  29. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  30. chia/_tests/core/daemon/test_daemon.py +11 -11
  31. chia/_tests/core/data_layer/conftest.py +2 -2
  32. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  33. chia/_tests/core/data_layer/test_data_store.py +10 -10
  34. chia/_tests/core/data_layer/util.py +11 -11
  35. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  36. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  37. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  38. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  39. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  40. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  41. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  42. chia/_tests/core/full_node/test_conditions.py +21 -23
  43. chia/_tests/core/full_node/test_full_node.py +225 -62
  44. chia/_tests/core/full_node/test_hint_management.py +2 -4
  45. chia/_tests/core/full_node/test_performance.py +0 -1
  46. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  47. chia/_tests/core/full_node/test_transactions.py +1 -2
  48. chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
  49. chia/_tests/core/mempool/test_mempool.py +29 -37
  50. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  51. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  52. chia/_tests/core/mempool/test_mempool_manager.py +963 -839
  53. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  54. chia/_tests/core/server/serve.py +7 -7
  55. chia/_tests/core/server/test_dos.py +1 -2
  56. chia/_tests/core/server/test_event_loop.py +12 -4
  57. chia/_tests/core/server/test_loop.py +7 -8
  58. chia/_tests/core/server/test_rate_limits.py +9 -8
  59. chia/_tests/core/server/test_server.py +61 -1
  60. chia/_tests/core/services/test_services.py +2 -2
  61. chia/_tests/core/ssl/test_ssl.py +2 -2
  62. chia/_tests/core/test_cost_calculation.py +2 -6
  63. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  64. chia/_tests/core/test_filter.py +0 -1
  65. chia/_tests/core/test_full_node_rpc.py +2 -2
  66. chia/_tests/core/test_merkle_set.py +1 -2
  67. chia/_tests/core/test_seeder.py +4 -4
  68. chia/_tests/core/util/test_config.py +4 -4
  69. chia/_tests/core/util/test_jsonify.py +2 -2
  70. chia/_tests/core/util/test_keychain.py +3 -3
  71. chia/_tests/core/util/test_lockfile.py +2 -1
  72. chia/_tests/core/util/test_log_exceptions.py +1 -2
  73. chia/_tests/core/util/test_streamable.py +17 -17
  74. chia/_tests/db/test_db_wrapper.py +3 -2
  75. chia/_tests/environments/wallet.py +14 -14
  76. chia/_tests/ether.py +4 -3
  77. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  78. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  79. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  80. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  81. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  82. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  83. chia/_tests/harvester/test_harvester_api.py +11 -4
  84. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  85. chia/_tests/plot_sync/test_receiver.py +11 -10
  86. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  87. chia/_tests/plot_sync/util.py +1 -2
  88. chia/_tests/plotting/test_plot_manager.py +7 -6
  89. chia/_tests/plotting/test_prover.py +30 -38
  90. chia/_tests/pools/test_pool_cmdline.py +4 -6
  91. chia/_tests/pools/test_pool_rpc.py +203 -61
  92. chia/_tests/pools/test_pool_wallet.py +3 -3
  93. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  94. chia/_tests/process_junit.py +2 -2
  95. chia/_tests/rpc/test_rpc_client.py +4 -4
  96. chia/_tests/rpc/test_rpc_server.py +3 -3
  97. chia/_tests/simulation/test_simulation.py +12 -25
  98. chia/_tests/solver/test_solver_service.py +13 -4
  99. chia/_tests/testconfig.py +2 -2
  100. chia/_tests/timelord/test_new_peak.py +22 -11
  101. chia/_tests/tools/test_run_block.py +0 -2
  102. chia/_tests/tools/test_virtual_project.py +2 -1
  103. chia/_tests/util/benchmarks.py +1 -0
  104. chia/_tests/util/blockchain.py +38 -36
  105. chia/_tests/util/blockchain_mock.py +11 -11
  106. chia/_tests/util/build_network_protocol_files.py +2 -1
  107. chia/_tests/util/coin_store.py +2 -1
  108. chia/_tests/util/config.py +1 -1
  109. chia/_tests/util/db_connection.py +2 -3
  110. chia/_tests/util/full_sync.py +9 -11
  111. chia/_tests/util/gen_ssl_certs.py +4 -5
  112. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  113. chia/_tests/util/misc.py +24 -24
  114. chia/_tests/util/network_protocol_data.py +20 -3
  115. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  116. chia/_tests/util/protocol_messages_json.py +292 -3
  117. chia/_tests/util/setup_nodes.py +62 -47
  118. chia/_tests/util/spend_sim.py +57 -57
  119. chia/_tests/util/test_async_pool.py +2 -3
  120. chia/_tests/util/test_chia_version.py +1 -3
  121. chia/_tests/util/test_config.py +3 -3
  122. chia/_tests/util/test_full_block_utils.py +6 -3
  123. chia/_tests/util/test_limited_semaphore.py +1 -2
  124. chia/_tests/util/test_misc.py +2 -2
  125. chia/_tests/util/test_network.py +1 -2
  126. chia/_tests/util/test_priority_mutex.py +3 -3
  127. chia/_tests/util/test_recursive_replace.py +5 -6
  128. chia/_tests/util/test_replace_str_to_bytes.py +8 -10
  129. chia/_tests/util/test_testnet_overrides.py +3 -3
  130. chia/_tests/util/time_out_assert.py +2 -2
  131. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  132. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  133. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  134. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  135. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  136. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  137. chia/_tests/wallet/conftest.py +6 -6
  138. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  139. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  140. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  141. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  142. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  145. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  146. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  147. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  148. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  149. chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
  150. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  151. chia/_tests/wallet/test_coin_management.py +2 -2
  152. chia/_tests/wallet/test_conditions.py +45 -51
  153. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  154. chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
  155. chia/_tests/wallet/test_notifications.py +14 -14
  156. chia/_tests/wallet/test_signer_protocol.py +5 -5
  157. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  158. chia/_tests/wallet/test_transaction_store.py +20 -20
  159. chia/_tests/wallet/test_util.py +2 -2
  160. chia/_tests/wallet/test_wallet.py +380 -228
  161. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  162. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  163. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  164. chia/_tests/wallet/test_wallet_node.py +14 -14
  165. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  166. chia/_tests/wallet/test_wallet_utils.py +2 -3
  167. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  168. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  169. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  170. chia/_tests/wallet/wallet_block_tools.py +12 -11
  171. chia/_tests/weight_proof/config.py +1 -0
  172. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  173. chia/apis/__init__.py +21 -0
  174. chia/apis/farmer_stub.py +102 -0
  175. chia/apis/full_node_stub.py +372 -0
  176. chia/apis/harvester_stub.py +57 -0
  177. chia/apis/introducer_stub.py +35 -0
  178. chia/apis/solver_stub.py +30 -0
  179. chia/apis/stub_protocol_registry.py +21 -0
  180. chia/apis/timelord_stub.py +39 -0
  181. chia/apis/wallet_stub.py +161 -0
  182. chia/cmds/beta.py +3 -4
  183. chia/cmds/beta_funcs.py +4 -3
  184. chia/cmds/check_wallet_db.py +4 -4
  185. chia/cmds/chia.py +1 -2
  186. chia/cmds/cmd_classes.py +11 -13
  187. chia/cmds/cmd_helpers.py +11 -11
  188. chia/cmds/cmds_util.py +15 -15
  189. chia/cmds/coin_funcs.py +6 -7
  190. chia/cmds/coins.py +2 -3
  191. chia/cmds/configure.py +1 -2
  192. chia/cmds/data.py +42 -42
  193. chia/cmds/data_funcs.py +81 -81
  194. chia/cmds/db.py +4 -5
  195. chia/cmds/db_backup_func.py +2 -2
  196. chia/cmds/db_upgrade_func.py +3 -3
  197. chia/cmds/db_validate_func.py +2 -2
  198. chia/cmds/dev/data.py +4 -4
  199. chia/cmds/dev/gh.py +5 -5
  200. chia/cmds/dev/installers.py +2 -3
  201. chia/cmds/dev/mempool.py +3 -4
  202. chia/cmds/dev/mempool_funcs.py +4 -4
  203. chia/cmds/dev/sim.py +8 -8
  204. chia/cmds/dump_keyring.py +3 -3
  205. chia/cmds/farm.py +6 -8
  206. chia/cmds/farm_funcs.py +25 -24
  207. chia/cmds/init_funcs.py +4 -4
  208. chia/cmds/keys.py +16 -18
  209. chia/cmds/keys_funcs.py +36 -36
  210. chia/cmds/netspace.py +1 -3
  211. chia/cmds/netspace_funcs.py +1 -2
  212. chia/cmds/options.py +3 -2
  213. chia/cmds/param_types.py +17 -16
  214. chia/cmds/passphrase.py +6 -7
  215. chia/cmds/passphrase_funcs.py +11 -13
  216. chia/cmds/peer.py +1 -3
  217. chia/cmds/peer_funcs.py +3 -3
  218. chia/cmds/plotnft.py +6 -7
  219. chia/cmds/plotnft_funcs.py +37 -26
  220. chia/cmds/rpc.py +3 -3
  221. chia/cmds/show.py +3 -5
  222. chia/cmds/show_funcs.py +9 -9
  223. chia/cmds/sim_funcs.py +25 -26
  224. chia/cmds/solver.py +1 -3
  225. chia/cmds/solver_funcs.py +1 -2
  226. chia/cmds/start_funcs.py +2 -2
  227. chia/cmds/wallet.py +76 -81
  228. chia/cmds/wallet_funcs.py +206 -177
  229. chia/consensus/augmented_chain.py +6 -6
  230. chia/consensus/block_body_validation.py +19 -15
  231. chia/consensus/block_creation.py +25 -21
  232. chia/consensus/block_header_validation.py +27 -13
  233. chia/consensus/block_height_map.py +3 -6
  234. chia/consensus/block_height_map_protocol.py +2 -2
  235. chia/consensus/block_record.py +2 -4
  236. chia/consensus/blockchain.py +58 -40
  237. chia/consensus/blockchain_interface.py +7 -7
  238. chia/consensus/coin_store_protocol.py +5 -6
  239. chia/consensus/condition_tools.py +4 -4
  240. chia/consensus/cost_calculator.py +2 -3
  241. chia/consensus/default_constants.py +16 -13
  242. chia/consensus/deficit.py +1 -3
  243. chia/consensus/difficulty_adjustment.py +3 -5
  244. chia/consensus/find_fork_point.py +2 -4
  245. chia/consensus/full_block_to_block_record.py +11 -13
  246. chia/consensus/generator_tools.py +2 -3
  247. chia/consensus/get_block_challenge.py +42 -26
  248. chia/consensus/get_block_generator.py +2 -3
  249. chia/consensus/make_sub_epoch_summary.py +8 -7
  250. chia/consensus/multiprocess_validation.py +31 -20
  251. chia/consensus/pos_quality.py +6 -23
  252. chia/consensus/pot_iterations.py +17 -44
  253. chia/consensus/signage_point.py +4 -5
  254. chia/consensus/vdf_info_computation.py +2 -4
  255. chia/daemon/client.py +8 -8
  256. chia/daemon/keychain_proxy.py +31 -37
  257. chia/daemon/server.py +32 -33
  258. chia/daemon/windows_signal.py +4 -3
  259. chia/data_layer/data_layer.py +86 -77
  260. chia/data_layer/data_layer_rpc_api.py +9 -9
  261. chia/data_layer/data_layer_rpc_client.py +13 -15
  262. chia/data_layer/data_layer_server.py +3 -3
  263. chia/data_layer/data_layer_util.py +14 -14
  264. chia/data_layer/data_layer_wallet.py +94 -101
  265. chia/data_layer/data_store.py +50 -50
  266. chia/data_layer/dl_wallet_store.py +9 -12
  267. chia/data_layer/download_data.py +8 -9
  268. chia/data_layer/s3_plugin_service.py +5 -9
  269. chia/data_layer/start_data_layer.py +5 -5
  270. chia/farmer/farmer.py +31 -31
  271. chia/farmer/farmer_api.py +45 -33
  272. chia/farmer/farmer_rpc_api.py +5 -4
  273. chia/farmer/farmer_rpc_client.py +6 -6
  274. chia/farmer/start_farmer.py +12 -7
  275. chia/full_node/block_store.py +13 -16
  276. chia/full_node/check_fork_next_block.py +1 -2
  277. chia/full_node/coin_store.py +15 -16
  278. chia/full_node/eligible_coin_spends.py +3 -3
  279. chia/full_node/fee_estimate_store.py +2 -3
  280. chia/full_node/fee_tracker.py +1 -2
  281. chia/full_node/full_block_utils.py +4 -4
  282. chia/full_node/full_node.py +238 -224
  283. chia/full_node/full_node_api.py +193 -150
  284. chia/full_node/full_node_rpc_api.py +53 -31
  285. chia/full_node/full_node_rpc_client.py +18 -19
  286. chia/full_node/full_node_store.py +45 -43
  287. chia/full_node/hint_management.py +2 -2
  288. chia/full_node/mempool.py +17 -19
  289. chia/full_node/mempool_manager.py +89 -42
  290. chia/full_node/pending_tx_cache.py +2 -3
  291. chia/full_node/start_full_node.py +5 -5
  292. chia/full_node/sync_store.py +3 -4
  293. chia/full_node/tx_processing_queue.py +34 -13
  294. chia/full_node/weight_proof.py +61 -48
  295. chia/harvester/harvester.py +25 -24
  296. chia/harvester/harvester_api.py +61 -38
  297. chia/harvester/harvester_rpc_api.py +10 -10
  298. chia/harvester/start_harvester.py +4 -4
  299. chia/introducer/introducer.py +3 -3
  300. chia/introducer/introducer_api.py +6 -4
  301. chia/introducer/start_introducer.py +4 -4
  302. chia/legacy/keyring.py +3 -3
  303. chia/plot_sync/delta.py +1 -2
  304. chia/plot_sync/receiver.py +20 -17
  305. chia/plot_sync/sender.py +15 -10
  306. chia/plotters/bladebit.py +7 -7
  307. chia/plotters/chiapos.py +2 -2
  308. chia/plotters/madmax.py +4 -4
  309. chia/plotters/plotters.py +4 -4
  310. chia/plotters/plotters_util.py +3 -3
  311. chia/plotting/cache.py +20 -14
  312. chia/plotting/check_plots.py +26 -35
  313. chia/plotting/create_plots.py +22 -23
  314. chia/plotting/manager.py +21 -14
  315. chia/plotting/prover.py +59 -42
  316. chia/plotting/util.py +16 -16
  317. chia/pools/pool_config.py +2 -1
  318. chia/pools/pool_puzzles.py +11 -12
  319. chia/pools/pool_wallet.py +34 -57
  320. chia/pools/pool_wallet_info.py +39 -10
  321. chia/protocols/farmer_protocol.py +8 -9
  322. chia/protocols/fee_estimate.py +3 -4
  323. chia/protocols/full_node_protocol.py +3 -4
  324. chia/protocols/harvester_protocol.py +27 -15
  325. chia/protocols/outbound_message.py +3 -3
  326. chia/protocols/pool_protocol.py +8 -9
  327. chia/protocols/shared_protocol.py +1 -2
  328. chia/protocols/solver_protocol.py +9 -2
  329. chia/protocols/timelord_protocol.py +4 -7
  330. chia/protocols/wallet_protocol.py +11 -12
  331. chia/rpc/rpc_client.py +9 -9
  332. chia/rpc/rpc_server.py +17 -17
  333. chia/rpc/util.py +2 -2
  334. chia/seeder/crawler.py +8 -8
  335. chia/seeder/crawler_api.py +21 -27
  336. chia/seeder/crawler_rpc_api.py +2 -2
  337. chia/seeder/dns_server.py +21 -21
  338. chia/seeder/start_crawler.py +4 -4
  339. chia/server/address_manager.py +15 -16
  340. chia/server/api_protocol.py +11 -11
  341. chia/server/chia_policy.py +46 -26
  342. chia/server/introducer_peers.py +2 -3
  343. chia/server/node_discovery.py +19 -19
  344. chia/server/rate_limit_numbers.py +4 -5
  345. chia/server/rate_limits.py +4 -4
  346. chia/server/resolve_peer_info.py +4 -4
  347. chia/server/server.py +49 -52
  348. chia/server/signal_handlers.py +6 -6
  349. chia/server/start_service.py +17 -17
  350. chia/server/upnp.py +4 -6
  351. chia/server/ws_connection.py +52 -37
  352. chia/simulator/add_blocks_in_batches.py +1 -3
  353. chia/simulator/block_tools.py +312 -200
  354. chia/simulator/full_node_simulator.py +56 -35
  355. chia/simulator/keyring.py +2 -3
  356. chia/simulator/setup_services.py +16 -15
  357. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  358. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  359. chia/simulator/simulator_protocol.py +1 -2
  360. chia/simulator/simulator_test_tools.py +3 -3
  361. chia/simulator/start_simulator.py +7 -7
  362. chia/simulator/wallet_tools.py +10 -10
  363. chia/solver/solver.py +10 -10
  364. chia/solver/solver_api.py +10 -8
  365. chia/solver/solver_rpc_api.py +2 -2
  366. chia/solver/start_solver.py +4 -4
  367. chia/ssl/cacert.pem +148 -90
  368. chia/ssl/chia_ca.crt +14 -10
  369. chia/ssl/chia_ca_old.crt +19 -0
  370. chia/ssl/create_ssl.py +4 -4
  371. chia/ssl/renewedselfsignedca.conf +4 -0
  372. chia/ssl/ssl_check.py +1 -2
  373. chia/timelord/iters_from_block.py +1 -4
  374. chia/timelord/start_timelord.py +4 -4
  375. chia/timelord/timelord.py +44 -40
  376. chia/timelord/timelord_api.py +6 -4
  377. chia/timelord/timelord_launcher.py +2 -2
  378. chia/timelord/timelord_rpc_api.py +2 -2
  379. chia/timelord/timelord_state.py +11 -12
  380. chia/types/block_protocol.py +1 -3
  381. chia/types/blockchain_format/coin.py +1 -3
  382. chia/types/blockchain_format/program.py +11 -8
  383. chia/types/blockchain_format/proof_of_space.py +123 -76
  384. chia/types/blockchain_format/tree_hash.py +3 -3
  385. chia/types/blockchain_format/vdf.py +1 -2
  386. chia/types/coin_spend.py +3 -3
  387. chia/types/mempool_item.py +5 -5
  388. chia/types/mempool_submission_status.py +2 -3
  389. chia/types/peer_info.py +1 -2
  390. chia/types/unfinished_header_block.py +3 -4
  391. chia/types/validation_state.py +1 -2
  392. chia/util/action_scope.py +8 -8
  393. chia/util/async_pool.py +5 -5
  394. chia/util/bech32m.py +1 -2
  395. chia/util/beta_metrics.py +2 -2
  396. chia/util/block_cache.py +4 -4
  397. chia/util/chia_logging.py +2 -2
  398. chia/util/chia_version.py +1 -2
  399. chia/util/config.py +15 -16
  400. chia/util/db_wrapper.py +26 -27
  401. chia/util/default_root.py +1 -2
  402. chia/util/errors.py +3 -3
  403. chia/util/file_keyring.py +14 -14
  404. chia/util/files.py +2 -3
  405. chia/util/hash.py +4 -4
  406. chia/util/initial-config.yaml +3 -5
  407. chia/util/inline_executor.py +2 -1
  408. chia/util/ip_address.py +1 -2
  409. chia/util/keychain.py +25 -27
  410. chia/util/keyring_wrapper.py +18 -19
  411. chia/util/lock.py +3 -4
  412. chia/util/log_exceptions.py +1 -2
  413. chia/util/lru_cache.py +2 -2
  414. chia/util/network.py +6 -6
  415. chia/util/path.py +2 -3
  416. chia/util/priority_mutex.py +2 -2
  417. chia/util/profiler.py +1 -2
  418. chia/util/safe_cancel_task.py +1 -2
  419. chia/util/streamable.py +22 -8
  420. chia/util/task_referencer.py +1 -1
  421. chia/util/timing.py +3 -3
  422. chia/util/virtual_project_analysis.py +6 -5
  423. chia/util/ws_message.py +2 -2
  424. chia/wallet/cat_wallet/cat_info.py +3 -4
  425. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  426. chia/wallet/cat_wallet/cat_utils.py +3 -4
  427. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  428. chia/wallet/cat_wallet/lineage_store.py +3 -4
  429. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  430. chia/wallet/coin_selection.py +9 -10
  431. chia/wallet/conditions.py +120 -105
  432. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  433. chia/wallet/derivation_record.py +1 -2
  434. chia/wallet/derive_keys.py +2 -4
  435. chia/wallet/did_wallet/did_info.py +10 -11
  436. chia/wallet/did_wallet/did_wallet.py +36 -82
  437. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  438. chia/wallet/driver_protocol.py +5 -7
  439. chia/wallet/lineage_proof.py +4 -4
  440. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  441. chia/wallet/nft_wallet/nft_info.py +8 -9
  442. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  443. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  444. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  445. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  446. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  447. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  448. chia/wallet/notification_manager.py +3 -3
  449. chia/wallet/notification_store.py +44 -61
  450. chia/wallet/outer_puzzles.py +6 -7
  451. chia/wallet/puzzle_drivers.py +34 -6
  452. chia/wallet/puzzles/clawback/drivers.py +6 -6
  453. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  454. chia/wallet/puzzles/load_clvm.py +1 -1
  455. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  456. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  457. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  458. chia/wallet/puzzles/tails.py +3 -3
  459. chia/wallet/singleton.py +5 -7
  460. chia/wallet/singleton_record.py +3 -3
  461. chia/wallet/start_wallet.py +5 -5
  462. chia/wallet/trade_manager.py +37 -58
  463. chia/wallet/trade_record.py +4 -4
  464. chia/wallet/trading/offer.py +59 -46
  465. chia/wallet/trading/trade_store.py +8 -9
  466. chia/wallet/transaction_record.py +8 -8
  467. chia/wallet/uncurried_puzzle.py +1 -2
  468. chia/wallet/util/clvm_streamable.py +12 -12
  469. chia/wallet/util/compute_hints.py +4 -5
  470. chia/wallet/util/curry_and_treehash.py +1 -2
  471. chia/wallet/util/merkle_tree.py +2 -3
  472. chia/wallet/util/peer_request_cache.py +8 -8
  473. chia/wallet/util/signing.py +85 -0
  474. chia/wallet/util/tx_config.py +15 -6
  475. chia/wallet/util/wallet_sync_utils.py +14 -16
  476. chia/wallet/util/wallet_types.py +2 -2
  477. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  478. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  479. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  480. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  481. chia/wallet/vc_wallet/vc_store.py +5 -6
  482. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  483. chia/wallet/wallet.py +50 -78
  484. chia/wallet/wallet_action_scope.py +11 -11
  485. chia/wallet/wallet_blockchain.py +12 -12
  486. chia/wallet/wallet_coin_record.py +12 -6
  487. chia/wallet/wallet_coin_store.py +24 -25
  488. chia/wallet/wallet_interested_store.py +3 -5
  489. chia/wallet/wallet_nft_store.py +10 -11
  490. chia/wallet/wallet_node.py +53 -61
  491. chia/wallet/wallet_node_api.py +5 -3
  492. chia/wallet/wallet_protocol.py +23 -23
  493. chia/wallet/wallet_puzzle_store.py +15 -18
  494. chia/wallet/wallet_request_types.py +778 -114
  495. chia/wallet/wallet_retry_store.py +1 -3
  496. chia/wallet/wallet_rpc_api.py +572 -909
  497. chia/wallet/wallet_rpc_client.py +87 -279
  498. chia/wallet/wallet_singleton_store.py +3 -4
  499. chia/wallet/wallet_state_manager.py +332 -106
  500. chia/wallet/wallet_transaction_store.py +11 -14
  501. chia/wallet/wallet_user_store.py +4 -6
  502. chia/wallet/wallet_weight_proof_handler.py +4 -4
  503. {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
  504. {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
  505. chia/apis.py +0 -21
  506. chia/consensus/check_time_locks.py +0 -57
  507. chia/data_layer/puzzles/__init__.py +0 -0
  508. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  509. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  510. chia/types/coin_record.py +0 -44
  511. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  512. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  513. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  514. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  515. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  516. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  517. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  518. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  520. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  521. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  522. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  524. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  525. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  526. {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
  527. {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
  528. {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from collections.abc import Collection
4
- from typing import Optional
5
4
 
6
5
  from chia_rs import FullBlock, HeaderBlock, SpendBundleConditions
7
6
  from chia_rs.sized_bytes import bytes32
@@ -12,7 +11,7 @@ from chia.types.blockchain_format.coin import Coin
12
11
 
13
12
 
14
13
  def get_block_header(
15
- block: FullBlock, removals_and_additions: Optional[tuple[Collection[bytes32], Collection[Coin]]] = None
14
+ block: FullBlock, removals_and_additions: tuple[Collection[bytes32], Collection[Coin]] | None = None
16
15
  ) -> HeaderBlock:
17
16
  """
18
17
  Returns a HeaderBlock from a FullBlock.
@@ -51,7 +50,7 @@ def get_block_header(
51
50
  )
52
51
 
53
52
 
54
- def tx_removals_and_additions(results: Optional[SpendBundleConditions]) -> tuple[list[bytes32], list[Coin]]:
53
+ def tx_removals_and_additions(results: SpendBundleConditions | None) -> tuple[list[bytes32], list[Coin]]:
55
54
  """
56
55
  Doesn't return farmer and pool reward.
57
56
  """
@@ -1,11 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import Optional, Union
5
4
 
6
5
  from chia_rs import BlockRecord, ConsensusConstants, FullBlock, HeaderBlock, UnfinishedBlock
7
6
  from chia_rs.sized_bytes import bytes32
8
- from chia_rs.sized_ints import uint32, uint64
7
+ from chia_rs.sized_ints import uint8, uint32, uint64
9
8
 
10
9
  from chia.consensus.blockchain_interface import BlockRecordsProtocol
11
10
  from chia.types.unfinished_header_block import UnfinishedHeaderBlock
@@ -14,7 +13,7 @@ log = logging.getLogger(__name__)
14
13
 
15
14
 
16
15
  def final_eos_is_already_included(
17
- header_block: Union[UnfinishedHeaderBlock, UnfinishedBlock, HeaderBlock, FullBlock],
16
+ header_block: UnfinishedHeaderBlock | UnfinishedBlock | HeaderBlock | FullBlock,
18
17
  blocks: BlockRecordsProtocol,
19
18
  sub_slot_iters: uint64,
20
19
  ) -> bool:
@@ -52,7 +51,7 @@ def final_eos_is_already_included(
52
51
 
53
52
  def get_block_challenge(
54
53
  constants: ConsensusConstants,
55
- header_block: Union[UnfinishedHeaderBlock, UnfinishedBlock, HeaderBlock, FullBlock],
54
+ header_block: UnfinishedHeaderBlock | UnfinishedBlock | HeaderBlock | FullBlock,
56
55
  blocks: BlockRecordsProtocol,
57
56
  genesis_block: bool,
58
57
  overflow: bool,
@@ -102,28 +101,45 @@ def get_block_challenge(
102
101
  return challenge
103
102
 
104
103
 
105
- def prev_tx_block(
104
+ # Returns the previous transaction block up to the blocks signage point
105
+ # we use this for block validation since when the block is farmed we do not know the latest transaction block
106
+ # since a new one might be infused by the time the block is infused
107
+ def pre_sp_tx_block(
108
+ constants: ConsensusConstants,
109
+ blocks: BlockRecordsProtocol,
110
+ *,
111
+ prev_b_hash: bytes32,
112
+ sp_index: uint8,
113
+ first_in_sub_slot: bool,
114
+ ) -> BlockRecord | None:
115
+ if prev_b_hash == constants.GENESIS_CHALLENGE:
116
+ return None
117
+ curr = blocks.block_record(prev_b_hash)
118
+ before_slot = first_in_sub_slot
119
+ while curr.height > 0:
120
+ if curr.is_transaction_block and (before_slot or curr.signage_point_index < sp_index):
121
+ break
122
+ if curr.first_in_sub_slot:
123
+ before_slot = True
124
+ curr = blocks.block_record(curr.prev_hash)
125
+ return curr
126
+
127
+
128
+ def pre_sp_tx_block_height(
129
+ constants: ConsensusConstants,
106
130
  blocks: BlockRecordsProtocol,
107
- prev_b: Optional[Union[BlockRecord, FullBlock, HeaderBlock]],
131
+ *,
132
+ prev_b_hash: bytes32,
133
+ sp_index: uint8,
134
+ first_in_sub_slot: bool,
108
135
  ) -> uint32:
109
- # todo add check to make sure we dont return tx block from same sp as block we are validating
110
- if prev_b is None:
136
+ latest_tx_block = pre_sp_tx_block(
137
+ constants=constants,
138
+ blocks=blocks,
139
+ prev_b_hash=prev_b_hash,
140
+ sp_index=sp_index,
141
+ first_in_sub_slot=first_in_sub_slot,
142
+ )
143
+ if latest_tx_block is None:
111
144
  return uint32(0)
112
- if isinstance(prev_b, BlockRecord):
113
- if prev_b.prev_transaction_block_hash is not None:
114
- return prev_b.height
115
- else:
116
- curr = prev_b
117
- elif isinstance(prev_b, FullBlock):
118
- if prev_b.foliage_transaction_block is not None:
119
- return prev_b.height
120
- else:
121
- curr = blocks.block_record(prev_b.header_hash)
122
- elif isinstance(prev_b, HeaderBlock):
123
- if prev_b.foliage_transaction_block is not None:
124
- return prev_b.height
125
- else:
126
- curr = blocks.block_record(prev_b.header_hash)
127
- while curr.is_transaction_block is False and curr.height > 0:
128
- curr = blocks.block_record(curr.prev_hash)
129
- return curr.height
145
+ return latest_tx_block.height
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections.abc import Awaitable
4
- from typing import Callable, Optional
3
+ from collections.abc import Awaitable, Callable
5
4
 
6
5
  from chia_rs.sized_bytes import bytes32
7
6
  from chia_rs.sized_ints import uint32
@@ -13,7 +12,7 @@ from chia.types.generator_types import BlockGenerator
13
12
  async def get_block_generator(
14
13
  lookup_block_generators: Callable[[bytes32, set[uint32]], Awaitable[dict[uint32, bytes]]],
15
14
  block: BlockInfo,
16
- ) -> Optional[BlockGenerator]:
15
+ ) -> BlockGenerator | None:
17
16
  ref_list = block.transactions_generator_ref_list
18
17
  if block.transactions_generator is None:
19
18
  assert len(ref_list) == 0
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import Optional, Union
5
4
 
6
5
  from chia_rs import BlockRecord, ConsensusConstants, FullBlock, SubEpochSummary, UnfinishedBlock
7
6
  from chia_rs.sized_ints import uint8, uint32, uint64, uint128
@@ -25,9 +24,9 @@ def make_sub_epoch_summary(
25
24
  blocks: BlockRecordsProtocol,
26
25
  blocks_included_height: uint32,
27
26
  prev_prev_block: BlockRecord,
28
- new_difficulty: Optional[uint64],
29
- new_sub_slot_iters: Optional[uint64],
30
- prev_ses_block: Optional[BlockRecord] = None,
27
+ new_difficulty: uint64 | None,
28
+ new_sub_slot_iters: uint64 | None,
29
+ prev_ses_block: BlockRecord | None = None,
31
30
  ) -> SubEpochSummary:
32
31
  """
33
32
  Creates a sub-epoch-summary object, assuming that the first block in the new sub-epoch is at height
@@ -53,6 +52,7 @@ def make_sub_epoch_summary(
53
52
  uint8(0),
54
53
  None,
55
54
  None,
55
+ None,
56
56
  )
57
57
  if prev_ses_block is None:
58
58
  curr: BlockRecord = prev_prev_block
@@ -70,6 +70,7 @@ def make_sub_epoch_summary(
70
70
  uint8(prev_ses_block.height % constants.SUB_EPOCH_BLOCKS),
71
71
  new_difficulty,
72
72
  new_sub_slot_iters,
73
+ None, # challenge_merkle_root
73
74
  )
74
75
 
75
76
 
@@ -77,9 +78,9 @@ def next_sub_epoch_summary(
77
78
  constants: ConsensusConstants,
78
79
  blocks: BlockRecordsProtocol,
79
80
  required_iters: uint64,
80
- block: Union[UnfinishedBlock, FullBlock],
81
+ block: UnfinishedBlock | FullBlock,
81
82
  can_finish_soon: bool = False,
82
- ) -> Optional[SubEpochSummary]:
83
+ ) -> SubEpochSummary | None:
83
84
  """
84
85
  Returns the sub-epoch summary that can be included in the block after block. If it should include one. Block
85
86
  must be eligible to be the last block in the epoch. If not, returns None. Assumes that there is a new slot
@@ -97,7 +98,7 @@ def next_sub_epoch_summary(
97
98
  object: the new sub-epoch summary
98
99
  """
99
100
  signage_point_index = block.reward_chain_block.signage_point_index
100
- prev_b: Optional[BlockRecord] = blocks.try_block_record(block.prev_header_hash)
101
+ prev_b: BlockRecord | None = blocks.try_block_record(block.prev_header_hash)
101
102
  if prev_b is None or prev_b.height == 0:
102
103
  return None
103
104
 
@@ -8,7 +8,6 @@ import traceback
8
8
  from collections.abc import Awaitable, Collection
9
9
  from concurrent.futures import Executor
10
10
  from dataclasses import dataclass
11
- from typing import Optional
12
11
 
13
12
  from chia_rs import (
14
13
  BlockRecord,
@@ -28,7 +27,7 @@ from chia.consensus.block_header_validation import validate_finished_header_bloc
28
27
  from chia.consensus.blockchain_interface import BlockRecordsProtocol
29
28
  from chia.consensus.full_block_to_block_record import block_to_block_record
30
29
  from chia.consensus.generator_tools import get_block_header, tx_removals_and_additions
31
- from chia.consensus.get_block_challenge import get_block_challenge, prev_tx_block
30
+ from chia.consensus.get_block_challenge import get_block_challenge, pre_sp_tx_block_height
32
31
  from chia.consensus.get_block_generator import get_block_generator
33
32
  from chia.consensus.pot_iterations import (
34
33
  is_overflow_block,
@@ -46,9 +45,9 @@ log = logging.getLogger(__name__)
46
45
  @streamable
47
46
  @dataclass(frozen=True)
48
47
  class PreValidationResult(Streamable):
49
- error: Optional[uint16]
50
- required_iters: Optional[uint64] # Iff error is None
51
- conds: Optional[SpendBundleConditions] # Iff error is None and block is a transaction block
48
+ error: uint16 | None
49
+ required_iters: uint64 | None # Iff error is None
50
+ conds: SpendBundleConditions | None # Iff error is None and block is a transaction block
52
51
  timing: uint32 # the time (in milliseconds) it took to pre-validate the block
53
52
 
54
53
  @property
@@ -60,11 +59,11 @@ class PreValidationResult(Streamable):
60
59
 
61
60
  # this layer of abstraction is here to let wallet tests monkeypatch it
62
61
  def _run_block(
63
- block: FullBlock, prev_generators: list[bytes], constants: ConsensusConstants
64
- ) -> tuple[Optional[int], Optional[SpendBundleConditions]]:
62
+ block: FullBlock, prev_generators: list[bytes], prev_tx_height: uint32, constants: ConsensusConstants
63
+ ) -> tuple[int | None, SpendBundleConditions | None]:
65
64
  assert block.transactions_generator is not None
66
65
  assert block.transactions_info is not None
67
- flags = get_flags_for_height_and_constants(block.height, constants)
66
+ flags = get_flags_for_height_and_constants(prev_tx_height, constants)
68
67
  if block.height >= constants.HARD_FORK_HEIGHT:
69
68
  run_block = run_block_generator2
70
69
  else:
@@ -84,8 +83,8 @@ def _pre_validate_block(
84
83
  constants: ConsensusConstants,
85
84
  blockchain: BlockRecordsProtocol,
86
85
  block: FullBlock,
87
- prev_generators: Optional[list[bytes]],
88
- conds: Optional[SpendBundleConditions],
86
+ prev_generators: list[bytes] | None,
87
+ conds: SpendBundleConditions | None,
89
88
  expected_vs: ValidationState,
90
89
  ) -> PreValidationResult:
91
90
  """
@@ -101,7 +100,7 @@ def _pre_validate_block(
101
100
 
102
101
  try:
103
102
  validation_start = time.monotonic()
104
- removals_and_additions: Optional[tuple[Collection[bytes32], Collection[Coin]]] = None
103
+ removals_and_additions: tuple[Collection[bytes32], Collection[Coin]] | None = None
105
104
  if conds is not None:
106
105
  assert conds.validated_signature is True
107
106
  assert block.transactions_generator is not None
@@ -116,7 +115,14 @@ def _pre_validate_block(
116
115
  uint16(Err.BLOCK_COST_EXCEEDS_MAX.value), None, None, uint32(validation_time * 1000)
117
116
  )
118
117
 
119
- err, conds = _run_block(block, prev_generators, constants)
118
+ prev_tx_height = pre_sp_tx_block_height(
119
+ constants=constants,
120
+ blocks=blockchain,
121
+ prev_b_hash=block.prev_header_hash,
122
+ sp_index=block.reward_chain_block.signage_point_index,
123
+ first_in_sub_slot=len(block.finished_sub_slots) > 0,
124
+ )
125
+ err, conds = _run_block(block, prev_generators, prev_tx_height, constants)
120
126
 
121
127
  assert (err is None) != (conds is None)
122
128
  if err is not None:
@@ -137,7 +143,7 @@ def _pre_validate_block(
137
143
  True, # check_filter
138
144
  expected_vs,
139
145
  )
140
- error_int: Optional[uint16] = None
146
+ error_int: uint16 | None = None
141
147
  if error is not None:
142
148
  error_int = uint16(error.code.value)
143
149
 
@@ -160,10 +166,10 @@ async def pre_validate_block(
160
166
  blockchain: AugmentedBlockchain,
161
167
  block: FullBlock,
162
168
  pool: Executor,
163
- conds: Optional[SpendBundleConditions],
169
+ conds: SpendBundleConditions | None,
164
170
  vs: ValidationState,
165
171
  *,
166
- wp_summaries: Optional[list[SubEpochSummary]] = None,
172
+ wp_summaries: list[SubEpochSummary] | None = None,
167
173
  ) -> Awaitable[PreValidationResult]:
168
174
  """
169
175
  This method must be called under the blockchain lock
@@ -189,7 +195,7 @@ async def pre_validate_block(
189
195
  wp_summaries:
190
196
  validate_signatures:
191
197
  """
192
- prev_b: Optional[BlockRecord] = None
198
+ prev_b: BlockRecord | None = None
193
199
 
194
200
  async def return_error(error_code: Err) -> PreValidationResult:
195
201
  return PreValidationResult(uint16(error_code.value), None, None, uint32(0))
@@ -220,8 +226,13 @@ async def pre_validate_block(
220
226
  cc_sp_hash,
221
227
  block.height,
222
228
  vs.difficulty,
223
- vs.ssi,
224
- prev_tx_block(blockchain, prev_b),
229
+ pre_sp_tx_block_height(
230
+ constants=constants,
231
+ blocks=blockchain,
232
+ prev_b_hash=block.prev_header_hash,
233
+ sp_index=block.reward_chain_block.signage_point_index,
234
+ first_in_sub_slot=len(block.finished_sub_slots) > 0,
235
+ ),
225
236
  )
226
237
  if required_iters is None:
227
238
  return return_error(Err.INVALID_POSPACE)
@@ -248,10 +259,10 @@ async def pre_validate_block(
248
259
  blockchain.add_extra_block(block, block_rec) # Temporarily add block to chain
249
260
  prev_b = block_rec
250
261
 
251
- previous_generators: Optional[list[bytes]] = None
262
+ previous_generators: list[bytes] | None = None
252
263
 
253
264
  try:
254
- block_generator: Optional[BlockGenerator] = await get_block_generator(blockchain.lookup_block_generators, block)
265
+ block_generator: BlockGenerator | None = await get_block_generator(blockchain.lookup_block_generators, block)
255
266
  if block_generator is not None:
256
267
  previous_generators = block_generator.generator_refs
257
268
  except ValueError:
@@ -1,28 +1,14 @@
1
1
  from __future__ import annotations
2
2
 
3
- from chia_rs import PlotSize
3
+ from chia_rs import ConsensusConstants, PlotParam
4
4
  from chia_rs.sized_ints import uint64
5
5
 
6
6
  # The actual space in bytes of a plot, is _expected_plot_size(k) * UI_ACTUAL_SPACE_CONSTANT_FACTO
7
7
  # This is not used in consensus, only for display purposes
8
8
  UI_ACTUAL_SPACE_CONSTANT_FACTOR = 0.78
9
9
 
10
- # TODO: todo_v2_plots these values prelimenary. When the plotter is complete,
11
- # replace this table with a closed form formula
12
- v2_plot_sizes: dict[int, uint64] = {
13
- 16: uint64(222_863),
14
- 18: uint64(1_048_737),
15
- 20: uint64(4_824_084),
16
- 22: uint64(21_812_958),
17
- 24: uint64(97_318_160),
18
- 26: uint64(429_539_960),
19
- 28: uint64(1_879_213_114),
20
- 30: uint64(8_161_097_549),
21
- 32: uint64(35_221_370_574),
22
- }
23
10
 
24
-
25
- def _expected_plot_size(size: PlotSize) -> uint64:
11
+ def _expected_plot_size(size: PlotParam, constants: ConsensusConstants) -> uint64:
26
12
  """
27
13
  Given the plot size parameter k (which is between 32 and 59), computes the
28
14
  expected size of the plot in bytes (times a constant factor). This is based on efficient encoding
@@ -36,10 +22,7 @@ def _expected_plot_size(size: PlotSize) -> uint64:
36
22
  k = size.size_v1
37
23
  return uint64(((2 * k) + 1) * (2 ** (k - 1)))
38
24
  else:
39
- assert size.size_v2 is not None
40
- k = size.size_v2
41
- if k in v2_plot_sizes:
42
- return v2_plot_sizes[k]
43
- else:
44
- # TODO: todo_v2_plots support test plots with lower k-values
45
- return uint64(0)
25
+ k = constants.PLOT_SIZE_V2
26
+ # TODO: todo_v2_plots this formula may change slightly before the
27
+ # final version of the plotter. Revisit this when the plotter is complete
28
+ return uint64((2**k) * (k + 1.46) / 8)
@@ -1,8 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
- from chia_rs import ConsensusConstants, PlotSize, ProofOfSpace
3
+ from chia_rs import ConsensusConstants, PlotParam, ProofOfSpace
6
4
  from chia_rs.sized_bytes import bytes32
7
5
  from chia_rs.sized_ints import uint8, uint32, uint64
8
6
 
@@ -28,25 +26,6 @@ def calculate_sp_iters(constants: ConsensusConstants, sub_slot_iters: uint64, si
28
26
  return uint64(calculate_sp_interval_iters(constants, sub_slot_iters) * signage_point_index)
29
27
 
30
28
 
31
- def calculate_phase_out(
32
- constants: ConsensusConstants,
33
- sub_slot_iters: uint64,
34
- prev_transaction_block_height: uint32,
35
- ) -> uint64:
36
- if prev_transaction_block_height <= constants.HARD_FORK2_HEIGHT:
37
- return uint64(0)
38
- elif uint32(prev_transaction_block_height - constants.HARD_FORK2_HEIGHT) >= constants.PLOT_V1_PHASE_OUT:
39
- return uint64(calculate_sp_interval_iters(constants, sub_slot_iters))
40
-
41
- return uint64(
42
- (
43
- uint32(prev_transaction_block_height - constants.HARD_FORK2_HEIGHT)
44
- * calculate_sp_interval_iters(constants, sub_slot_iters)
45
- )
46
- // constants.PLOT_V1_PHASE_OUT
47
- )
48
-
49
-
50
29
  def calculate_ip_iters(
51
30
  constants: ConsensusConstants,
52
31
  sub_slot_iters: uint64,
@@ -75,11 +54,17 @@ def validate_pospace_and_get_required_iters(
75
54
  cc_sp_hash: bytes32,
76
55
  height: uint32,
77
56
  difficulty: uint64,
78
- sub_slot_iters: uint64,
79
57
  prev_transaction_block_height: uint32, # this is the height of the last tx block before the current block SP
80
- ) -> Optional[uint64]:
81
- q_str: Optional[bytes32] = verify_and_get_quality_string(
82
- proof_of_space, constants, challenge, cc_sp_hash, height=height
58
+ height_agnostic: bool = False,
59
+ ) -> uint64 | None:
60
+ q_str: bytes32 | None = verify_and_get_quality_string(
61
+ proof_of_space,
62
+ constants,
63
+ challenge,
64
+ cc_sp_hash,
65
+ height=height,
66
+ prev_transaction_block_height=prev_transaction_block_height,
67
+ height_agnostic=height_agnostic,
83
68
  )
84
69
  if q_str is None:
85
70
  return None
@@ -87,41 +72,29 @@ def validate_pospace_and_get_required_iters(
87
72
  return calculate_iterations_quality(
88
73
  constants,
89
74
  q_str,
90
- proof_of_space.size(),
75
+ proof_of_space.param(),
91
76
  difficulty,
92
77
  cc_sp_hash,
93
- sub_slot_iters,
94
- prev_transaction_block_height,
95
78
  )
96
79
 
97
80
 
98
81
  def calculate_iterations_quality(
99
82
  constants: ConsensusConstants,
100
83
  quality_string: bytes32,
101
- size: PlotSize,
84
+ size: PlotParam,
102
85
  difficulty: uint64,
103
86
  cc_sp_output_hash: bytes32,
104
- ssi: uint64,
105
- prev_transaction_block_height: uint32, # this is the height of the last tx block before the current block SP
106
87
  ) -> uint64:
107
88
  """
108
89
  Calculates the number of iterations from the quality. This is derives as the difficulty times the constant factor
109
90
  times a random number between 0 and 1 (based on quality string), divided by plot size.
110
91
  """
111
- if size.size_v1 is not None:
112
- assert size.size_v2 is None
113
- phase_out = calculate_phase_out(constants, ssi, prev_transaction_block_height)
114
- else:
115
- phase_out = uint64(0)
116
92
 
117
93
  sp_quality_string: bytes32 = std_hash(quality_string + cc_sp_output_hash)
118
94
  iters = uint64(
119
- (
120
- int(difficulty)
121
- * int(constants.DIFFICULTY_CONSTANT_FACTOR)
122
- * int.from_bytes(sp_quality_string, "big", signed=False)
123
- // (int(pow(2, 256)) * int(_expected_plot_size(size)))
124
- )
125
- + phase_out
95
+ int(difficulty)
96
+ * int(constants.DIFFICULTY_CONSTANT_FACTOR)
97
+ * int.from_bytes(sp_quality_string, "big", signed=False)
98
+ // (int(pow(2, 256)) * int(_expected_plot_size(size, constants)))
126
99
  )
127
100
  return max(iters, uint64(1))
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Optional
5
4
 
6
5
  from chia.types.blockchain_format.vdf import VDFInfo, VDFProof
7
6
  from chia.util.streamable import Streamable, streamable
@@ -10,7 +9,7 @@ from chia.util.streamable import Streamable, streamable
10
9
  @streamable
11
10
  @dataclass(frozen=True)
12
11
  class SignagePoint(Streamable):
13
- cc_vdf: Optional[VDFInfo]
14
- cc_proof: Optional[VDFProof]
15
- rc_vdf: Optional[VDFInfo]
16
- rc_proof: Optional[VDFProof]
12
+ cc_vdf: VDFInfo | None
13
+ cc_proof: VDFProof | None
14
+ rc_vdf: VDFInfo | None
15
+ rc_proof: VDFProof | None
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  from chia_rs import BlockRecord, ConsensusConstants, EndOfSubSlotBundle
6
4
  from chia_rs.sized_bytes import bytes32
7
5
  from chia_rs.sized_ints import uint64, uint128
@@ -14,7 +12,7 @@ def get_signage_point_vdf_info(
14
12
  constants: ConsensusConstants,
15
13
  finished_sub_slots: list[EndOfSubSlotBundle],
16
14
  overflow: bool,
17
- prev_b: Optional[BlockRecord],
15
+ prev_b: BlockRecord | None,
18
16
  blocks: BlockRecordsProtocol,
19
17
  sp_total_iters: uint128,
20
18
  sp_iters: uint64,
@@ -90,7 +88,7 @@ def get_signage_point_vdf_info(
90
88
  )
91
89
  else:
92
90
  found_sub_slots = []
93
- sp_pre_sb: Optional[BlockRecord] = None
91
+ sp_pre_sb: BlockRecord | None = None
94
92
  while len(found_sub_slots) < 2 and curr.height > 0:
95
93
  if sp_pre_sb is None and curr.total_iters < sp_total_iters:
96
94
  sp_pre_sb = curr
chia/daemon/client.py CHANGED
@@ -6,7 +6,7 @@ import ssl
6
6
  from collections.abc import AsyncIterator
7
7
  from contextlib import asynccontextmanager
8
8
  from pathlib import Path
9
- from typing import Any, Optional
9
+ from typing import Any
10
10
 
11
11
  import aiohttp
12
12
  from chia_rs.sized_ints import uint32
@@ -20,7 +20,7 @@ class DaemonProxy:
20
20
  def __init__(
21
21
  self,
22
22
  uri: str,
23
- ssl_context: Optional[ssl.SSLContext],
23
+ ssl_context: ssl.SSLContext | None,
24
24
  heartbeat: int,
25
25
  max_message_size: int = 50 * 1000 * 1000,
26
26
  ):
@@ -29,8 +29,8 @@ class DaemonProxy:
29
29
  self.response_dict: dict[str, WsRpcMessage] = {}
30
30
  self.ssl_context = ssl_context
31
31
  self.heartbeat = heartbeat
32
- self.client_session: Optional[aiohttp.ClientSession] = None
33
- self.websocket: Optional[aiohttp.ClientWebSocketResponse] = None
32
+ self.client_session: aiohttp.ClientSession | None = None
33
+ self.websocket: aiohttp.ClientWebSocketResponse | None = None
34
34
  self.max_message_size = max_message_size
35
35
 
36
36
  def format_request(self, command: str, data: dict[str, Any]) -> WsRpcMessage:
@@ -164,7 +164,7 @@ class DaemonProxy:
164
164
  request = self.format_request("exit", {})
165
165
  return await self._get(request)
166
166
 
167
- async def get_keys_for_plotting(self, fingerprints: Optional[list[uint32]] = None) -> WsRpcMessage:
167
+ async def get_keys_for_plotting(self, fingerprints: list[uint32] | None = None) -> WsRpcMessage:
168
168
  data = {"fingerprints": fingerprints} if fingerprints else {}
169
169
  request = self.format_request("get_keys_for_plotting", data)
170
170
  response = await self._get(request)
@@ -196,7 +196,7 @@ async def connect_to_daemon(
196
196
 
197
197
  async def connect_to_daemon_and_validate(
198
198
  root_path: Path, config: dict[str, Any], quiet: bool = False, wait_for_start: bool = False
199
- ) -> Optional[DaemonProxy]:
199
+ ) -> DaemonProxy | None:
200
200
  """
201
201
  Connect to the local daemon and do a ping to ensure that something is really
202
202
  there and running.
@@ -233,7 +233,7 @@ async def connect_to_daemon_and_validate(
233
233
  @asynccontextmanager
234
234
  async def acquire_connection_to_daemon(
235
235
  root_path: Path, config: dict[str, Any], quiet: bool = False
236
- ) -> AsyncIterator[Optional[DaemonProxy]]:
236
+ ) -> AsyncIterator[DaemonProxy | None]:
237
237
  """
238
238
  Asynchronous context manager which attempts to create a connection to the daemon.
239
239
  The connection object (DaemonProxy) is yielded to the caller. After the caller's
@@ -241,7 +241,7 @@ async def acquire_connection_to_daemon(
241
241
  closed.
242
242
  """
243
243
 
244
- daemon: Optional[DaemonProxy] = None
244
+ daemon: DaemonProxy | None = None
245
245
  try:
246
246
  daemon = await connect_to_daemon_and_validate(root_path, config, quiet=quiet)
247
247
  yield daemon # <----