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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. chia/__init__.py +8 -4
  2. chia/_tests/blockchain/blockchain_test_utils.py +6 -8
  3. chia/_tests/blockchain/test_augmented_chain.py +4 -4
  4. chia/_tests/blockchain/test_blockchain.py +165 -190
  5. chia/_tests/blockchain/test_build_chains.py +2 -4
  6. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  7. chia/_tests/clvm/coin_store.py +4 -7
  8. chia/_tests/clvm/test_clvm_step.py +4 -4
  9. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  10. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  11. chia/_tests/clvm/test_singletons.py +2 -4
  12. chia/_tests/clvm/test_spend_sim.py +2 -2
  13. chia/_tests/cmds/cmd_test_utils.py +27 -45
  14. chia/_tests/cmds/test_cmd_framework.py +6 -6
  15. chia/_tests/cmds/test_daemon.py +3 -3
  16. chia/_tests/cmds/test_show.py +4 -4
  17. chia/_tests/cmds/test_tx_config_args.py +1 -2
  18. chia/_tests/cmds/testing_classes.py +4 -5
  19. chia/_tests/cmds/wallet/test_did.py +24 -27
  20. chia/_tests/cmds/wallet/test_nft.py +12 -10
  21. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  22. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  23. chia/_tests/conftest.py +59 -30
  24. chia/_tests/connection_utils.py +2 -2
  25. chia/_tests/core/cmds/test_beta.py +4 -4
  26. chia/_tests/core/cmds/test_keys.py +2 -3
  27. chia/_tests/core/cmds/test_wallet.py +15 -15
  28. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  29. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  30. chia/_tests/core/daemon/test_daemon.py +11 -11
  31. chia/_tests/core/data_layer/conftest.py +2 -2
  32. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  33. chia/_tests/core/data_layer/test_data_store.py +10 -10
  34. chia/_tests/core/data_layer/util.py +11 -11
  35. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  36. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  37. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  38. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  39. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  40. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  41. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  42. chia/_tests/core/full_node/test_conditions.py +21 -23
  43. chia/_tests/core/full_node/test_full_node.py +225 -62
  44. chia/_tests/core/full_node/test_hint_management.py +2 -4
  45. chia/_tests/core/full_node/test_performance.py +0 -1
  46. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  47. chia/_tests/core/full_node/test_transactions.py +1 -2
  48. chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
  49. chia/_tests/core/mempool/test_mempool.py +29 -37
  50. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  51. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  52. chia/_tests/core/mempool/test_mempool_manager.py +963 -839
  53. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  54. chia/_tests/core/server/serve.py +7 -7
  55. chia/_tests/core/server/test_dos.py +1 -2
  56. chia/_tests/core/server/test_event_loop.py +12 -4
  57. chia/_tests/core/server/test_loop.py +7 -8
  58. chia/_tests/core/server/test_rate_limits.py +9 -8
  59. chia/_tests/core/server/test_server.py +61 -1
  60. chia/_tests/core/services/test_services.py +2 -2
  61. chia/_tests/core/ssl/test_ssl.py +2 -2
  62. chia/_tests/core/test_cost_calculation.py +2 -6
  63. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  64. chia/_tests/core/test_filter.py +0 -1
  65. chia/_tests/core/test_full_node_rpc.py +2 -2
  66. chia/_tests/core/test_merkle_set.py +1 -2
  67. chia/_tests/core/test_seeder.py +4 -4
  68. chia/_tests/core/util/test_config.py +4 -4
  69. chia/_tests/core/util/test_jsonify.py +2 -2
  70. chia/_tests/core/util/test_keychain.py +3 -3
  71. chia/_tests/core/util/test_lockfile.py +2 -1
  72. chia/_tests/core/util/test_log_exceptions.py +1 -2
  73. chia/_tests/core/util/test_streamable.py +17 -17
  74. chia/_tests/db/test_db_wrapper.py +3 -2
  75. chia/_tests/environments/wallet.py +14 -14
  76. chia/_tests/ether.py +4 -3
  77. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  78. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  79. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  80. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  81. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  82. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  83. chia/_tests/harvester/test_harvester_api.py +11 -4
  84. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  85. chia/_tests/plot_sync/test_receiver.py +11 -10
  86. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  87. chia/_tests/plot_sync/util.py +1 -2
  88. chia/_tests/plotting/test_plot_manager.py +7 -6
  89. chia/_tests/plotting/test_prover.py +30 -38
  90. chia/_tests/pools/test_pool_cmdline.py +4 -6
  91. chia/_tests/pools/test_pool_rpc.py +203 -61
  92. chia/_tests/pools/test_pool_wallet.py +3 -3
  93. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  94. chia/_tests/process_junit.py +2 -2
  95. chia/_tests/rpc/test_rpc_client.py +4 -4
  96. chia/_tests/rpc/test_rpc_server.py +3 -3
  97. chia/_tests/simulation/test_simulation.py +12 -25
  98. chia/_tests/solver/test_solver_service.py +13 -4
  99. chia/_tests/testconfig.py +2 -2
  100. chia/_tests/timelord/test_new_peak.py +22 -11
  101. chia/_tests/tools/test_run_block.py +0 -2
  102. chia/_tests/tools/test_virtual_project.py +2 -1
  103. chia/_tests/util/benchmarks.py +1 -0
  104. chia/_tests/util/blockchain.py +38 -36
  105. chia/_tests/util/blockchain_mock.py +11 -11
  106. chia/_tests/util/build_network_protocol_files.py +2 -1
  107. chia/_tests/util/coin_store.py +2 -1
  108. chia/_tests/util/config.py +1 -1
  109. chia/_tests/util/db_connection.py +2 -3
  110. chia/_tests/util/full_sync.py +9 -11
  111. chia/_tests/util/gen_ssl_certs.py +4 -5
  112. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  113. chia/_tests/util/misc.py +24 -24
  114. chia/_tests/util/network_protocol_data.py +20 -3
  115. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  116. chia/_tests/util/protocol_messages_json.py +292 -3
  117. chia/_tests/util/setup_nodes.py +62 -47
  118. chia/_tests/util/spend_sim.py +57 -57
  119. chia/_tests/util/test_async_pool.py +2 -3
  120. chia/_tests/util/test_chia_version.py +1 -3
  121. chia/_tests/util/test_config.py +3 -3
  122. chia/_tests/util/test_full_block_utils.py +6 -3
  123. chia/_tests/util/test_limited_semaphore.py +1 -2
  124. chia/_tests/util/test_misc.py +2 -2
  125. chia/_tests/util/test_network.py +1 -2
  126. chia/_tests/util/test_priority_mutex.py +3 -3
  127. chia/_tests/util/test_recursive_replace.py +5 -6
  128. chia/_tests/util/test_replace_str_to_bytes.py +8 -10
  129. chia/_tests/util/test_testnet_overrides.py +3 -3
  130. chia/_tests/util/time_out_assert.py +2 -2
  131. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  132. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  133. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  134. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  135. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  136. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  137. chia/_tests/wallet/conftest.py +6 -6
  138. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  139. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  140. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  141. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  142. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  145. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  146. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  147. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  148. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  149. chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
  150. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  151. chia/_tests/wallet/test_coin_management.py +2 -2
  152. chia/_tests/wallet/test_conditions.py +45 -51
  153. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  154. chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
  155. chia/_tests/wallet/test_notifications.py +14 -14
  156. chia/_tests/wallet/test_signer_protocol.py +5 -5
  157. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  158. chia/_tests/wallet/test_transaction_store.py +20 -20
  159. chia/_tests/wallet/test_util.py +2 -2
  160. chia/_tests/wallet/test_wallet.py +380 -228
  161. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  162. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  163. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  164. chia/_tests/wallet/test_wallet_node.py +14 -14
  165. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  166. chia/_tests/wallet/test_wallet_utils.py +2 -3
  167. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  168. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  169. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  170. chia/_tests/wallet/wallet_block_tools.py +12 -11
  171. chia/_tests/weight_proof/config.py +1 -0
  172. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  173. chia/apis/__init__.py +21 -0
  174. chia/apis/farmer_stub.py +102 -0
  175. chia/apis/full_node_stub.py +372 -0
  176. chia/apis/harvester_stub.py +57 -0
  177. chia/apis/introducer_stub.py +35 -0
  178. chia/apis/solver_stub.py +30 -0
  179. chia/apis/stub_protocol_registry.py +21 -0
  180. chia/apis/timelord_stub.py +39 -0
  181. chia/apis/wallet_stub.py +161 -0
  182. chia/cmds/beta.py +3 -4
  183. chia/cmds/beta_funcs.py +4 -3
  184. chia/cmds/check_wallet_db.py +4 -4
  185. chia/cmds/chia.py +1 -2
  186. chia/cmds/cmd_classes.py +11 -13
  187. chia/cmds/cmd_helpers.py +11 -11
  188. chia/cmds/cmds_util.py +15 -15
  189. chia/cmds/coin_funcs.py +6 -7
  190. chia/cmds/coins.py +2 -3
  191. chia/cmds/configure.py +1 -2
  192. chia/cmds/data.py +42 -42
  193. chia/cmds/data_funcs.py +81 -81
  194. chia/cmds/db.py +4 -5
  195. chia/cmds/db_backup_func.py +2 -2
  196. chia/cmds/db_upgrade_func.py +3 -3
  197. chia/cmds/db_validate_func.py +2 -2
  198. chia/cmds/dev/data.py +4 -4
  199. chia/cmds/dev/gh.py +5 -5
  200. chia/cmds/dev/installers.py +2 -3
  201. chia/cmds/dev/mempool.py +3 -4
  202. chia/cmds/dev/mempool_funcs.py +4 -4
  203. chia/cmds/dev/sim.py +8 -8
  204. chia/cmds/dump_keyring.py +3 -3
  205. chia/cmds/farm.py +6 -8
  206. chia/cmds/farm_funcs.py +25 -24
  207. chia/cmds/init_funcs.py +4 -4
  208. chia/cmds/keys.py +16 -18
  209. chia/cmds/keys_funcs.py +36 -36
  210. chia/cmds/netspace.py +1 -3
  211. chia/cmds/netspace_funcs.py +1 -2
  212. chia/cmds/options.py +3 -2
  213. chia/cmds/param_types.py +17 -16
  214. chia/cmds/passphrase.py +6 -7
  215. chia/cmds/passphrase_funcs.py +11 -13
  216. chia/cmds/peer.py +1 -3
  217. chia/cmds/peer_funcs.py +3 -3
  218. chia/cmds/plotnft.py +6 -7
  219. chia/cmds/plotnft_funcs.py +37 -26
  220. chia/cmds/rpc.py +3 -3
  221. chia/cmds/show.py +3 -5
  222. chia/cmds/show_funcs.py +9 -9
  223. chia/cmds/sim_funcs.py +25 -26
  224. chia/cmds/solver.py +1 -3
  225. chia/cmds/solver_funcs.py +1 -2
  226. chia/cmds/start_funcs.py +2 -2
  227. chia/cmds/wallet.py +76 -81
  228. chia/cmds/wallet_funcs.py +206 -177
  229. chia/consensus/augmented_chain.py +6 -6
  230. chia/consensus/block_body_validation.py +19 -15
  231. chia/consensus/block_creation.py +25 -21
  232. chia/consensus/block_header_validation.py +27 -13
  233. chia/consensus/block_height_map.py +3 -6
  234. chia/consensus/block_height_map_protocol.py +2 -2
  235. chia/consensus/block_record.py +2 -4
  236. chia/consensus/blockchain.py +58 -40
  237. chia/consensus/blockchain_interface.py +7 -7
  238. chia/consensus/coin_store_protocol.py +5 -6
  239. chia/consensus/condition_tools.py +4 -4
  240. chia/consensus/cost_calculator.py +2 -3
  241. chia/consensus/default_constants.py +16 -13
  242. chia/consensus/deficit.py +1 -3
  243. chia/consensus/difficulty_adjustment.py +3 -5
  244. chia/consensus/find_fork_point.py +2 -4
  245. chia/consensus/full_block_to_block_record.py +11 -13
  246. chia/consensus/generator_tools.py +2 -3
  247. chia/consensus/get_block_challenge.py +42 -26
  248. chia/consensus/get_block_generator.py +2 -3
  249. chia/consensus/make_sub_epoch_summary.py +8 -7
  250. chia/consensus/multiprocess_validation.py +31 -20
  251. chia/consensus/pos_quality.py +6 -23
  252. chia/consensus/pot_iterations.py +17 -44
  253. chia/consensus/signage_point.py +4 -5
  254. chia/consensus/vdf_info_computation.py +2 -4
  255. chia/daemon/client.py +8 -8
  256. chia/daemon/keychain_proxy.py +31 -37
  257. chia/daemon/server.py +32 -33
  258. chia/daemon/windows_signal.py +4 -3
  259. chia/data_layer/data_layer.py +86 -77
  260. chia/data_layer/data_layer_rpc_api.py +9 -9
  261. chia/data_layer/data_layer_rpc_client.py +13 -15
  262. chia/data_layer/data_layer_server.py +3 -3
  263. chia/data_layer/data_layer_util.py +14 -14
  264. chia/data_layer/data_layer_wallet.py +94 -101
  265. chia/data_layer/data_store.py +50 -50
  266. chia/data_layer/dl_wallet_store.py +9 -12
  267. chia/data_layer/download_data.py +8 -9
  268. chia/data_layer/s3_plugin_service.py +5 -9
  269. chia/data_layer/start_data_layer.py +5 -5
  270. chia/farmer/farmer.py +31 -31
  271. chia/farmer/farmer_api.py +45 -33
  272. chia/farmer/farmer_rpc_api.py +5 -4
  273. chia/farmer/farmer_rpc_client.py +6 -6
  274. chia/farmer/start_farmer.py +6 -6
  275. chia/full_node/block_store.py +13 -16
  276. chia/full_node/check_fork_next_block.py +1 -2
  277. chia/full_node/coin_store.py +15 -16
  278. chia/full_node/eligible_coin_spends.py +3 -3
  279. chia/full_node/fee_estimate_store.py +2 -3
  280. chia/full_node/fee_tracker.py +1 -2
  281. chia/full_node/full_block_utils.py +4 -4
  282. chia/full_node/full_node.py +238 -224
  283. chia/full_node/full_node_api.py +193 -150
  284. chia/full_node/full_node_rpc_api.py +53 -31
  285. chia/full_node/full_node_rpc_client.py +18 -19
  286. chia/full_node/full_node_store.py +45 -43
  287. chia/full_node/hint_management.py +2 -2
  288. chia/full_node/mempool.py +17 -19
  289. chia/full_node/mempool_manager.py +89 -42
  290. chia/full_node/pending_tx_cache.py +2 -3
  291. chia/full_node/start_full_node.py +5 -5
  292. chia/full_node/sync_store.py +3 -4
  293. chia/full_node/tx_processing_queue.py +34 -13
  294. chia/full_node/weight_proof.py +61 -48
  295. chia/harvester/harvester.py +25 -24
  296. chia/harvester/harvester_api.py +61 -38
  297. chia/harvester/harvester_rpc_api.py +10 -10
  298. chia/harvester/start_harvester.py +4 -4
  299. chia/introducer/introducer.py +3 -3
  300. chia/introducer/introducer_api.py +6 -4
  301. chia/introducer/start_introducer.py +4 -4
  302. chia/legacy/keyring.py +3 -3
  303. chia/plot_sync/delta.py +1 -2
  304. chia/plot_sync/receiver.py +20 -17
  305. chia/plot_sync/sender.py +15 -10
  306. chia/plotters/bladebit.py +7 -7
  307. chia/plotters/chiapos.py +2 -2
  308. chia/plotters/madmax.py +4 -4
  309. chia/plotters/plotters.py +4 -4
  310. chia/plotters/plotters_util.py +3 -3
  311. chia/plotting/cache.py +20 -14
  312. chia/plotting/check_plots.py +26 -35
  313. chia/plotting/create_plots.py +22 -23
  314. chia/plotting/manager.py +21 -14
  315. chia/plotting/prover.py +59 -42
  316. chia/plotting/util.py +16 -16
  317. chia/pools/pool_config.py +2 -1
  318. chia/pools/pool_puzzles.py +11 -12
  319. chia/pools/pool_wallet.py +34 -57
  320. chia/pools/pool_wallet_info.py +39 -10
  321. chia/protocols/farmer_protocol.py +8 -9
  322. chia/protocols/fee_estimate.py +3 -4
  323. chia/protocols/full_node_protocol.py +3 -4
  324. chia/protocols/harvester_protocol.py +27 -15
  325. chia/protocols/outbound_message.py +3 -3
  326. chia/protocols/pool_protocol.py +8 -9
  327. chia/protocols/shared_protocol.py +1 -2
  328. chia/protocols/solver_protocol.py +9 -2
  329. chia/protocols/timelord_protocol.py +4 -7
  330. chia/protocols/wallet_protocol.py +11 -12
  331. chia/rpc/rpc_client.py +9 -9
  332. chia/rpc/rpc_server.py +17 -17
  333. chia/rpc/util.py +2 -2
  334. chia/seeder/crawler.py +8 -8
  335. chia/seeder/crawler_api.py +21 -27
  336. chia/seeder/crawler_rpc_api.py +2 -2
  337. chia/seeder/dns_server.py +21 -21
  338. chia/seeder/start_crawler.py +4 -4
  339. chia/server/address_manager.py +15 -16
  340. chia/server/api_protocol.py +11 -11
  341. chia/server/chia_policy.py +46 -26
  342. chia/server/introducer_peers.py +2 -3
  343. chia/server/node_discovery.py +19 -19
  344. chia/server/rate_limit_numbers.py +4 -5
  345. chia/server/rate_limits.py +4 -4
  346. chia/server/resolve_peer_info.py +4 -4
  347. chia/server/server.py +49 -52
  348. chia/server/signal_handlers.py +6 -6
  349. chia/server/start_service.py +17 -17
  350. chia/server/upnp.py +4 -6
  351. chia/server/ws_connection.py +52 -37
  352. chia/simulator/add_blocks_in_batches.py +1 -3
  353. chia/simulator/block_tools.py +312 -200
  354. chia/simulator/full_node_simulator.py +56 -35
  355. chia/simulator/keyring.py +2 -3
  356. chia/simulator/setup_services.py +15 -15
  357. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  358. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  359. chia/simulator/simulator_protocol.py +1 -2
  360. chia/simulator/simulator_test_tools.py +3 -3
  361. chia/simulator/start_simulator.py +7 -7
  362. chia/simulator/wallet_tools.py +10 -10
  363. chia/solver/solver.py +10 -10
  364. chia/solver/solver_api.py +10 -8
  365. chia/solver/solver_rpc_api.py +2 -2
  366. chia/solver/start_solver.py +4 -4
  367. chia/ssl/cacert.pem +148 -90
  368. chia/ssl/chia_ca.crt +14 -10
  369. chia/ssl/chia_ca_old.crt +19 -0
  370. chia/ssl/create_ssl.py +4 -4
  371. chia/ssl/renewedselfsignedca.conf +4 -0
  372. chia/ssl/ssl_check.py +1 -2
  373. chia/timelord/iters_from_block.py +1 -4
  374. chia/timelord/start_timelord.py +4 -4
  375. chia/timelord/timelord.py +44 -40
  376. chia/timelord/timelord_api.py +6 -4
  377. chia/timelord/timelord_launcher.py +2 -2
  378. chia/timelord/timelord_rpc_api.py +2 -2
  379. chia/timelord/timelord_state.py +11 -12
  380. chia/types/block_protocol.py +1 -3
  381. chia/types/blockchain_format/coin.py +1 -3
  382. chia/types/blockchain_format/program.py +11 -8
  383. chia/types/blockchain_format/proof_of_space.py +123 -76
  384. chia/types/blockchain_format/tree_hash.py +3 -3
  385. chia/types/blockchain_format/vdf.py +1 -2
  386. chia/types/coin_spend.py +3 -3
  387. chia/types/mempool_item.py +5 -5
  388. chia/types/mempool_submission_status.py +2 -3
  389. chia/types/peer_info.py +1 -2
  390. chia/types/unfinished_header_block.py +3 -4
  391. chia/types/validation_state.py +1 -2
  392. chia/util/action_scope.py +8 -8
  393. chia/util/async_pool.py +5 -5
  394. chia/util/bech32m.py +1 -2
  395. chia/util/beta_metrics.py +2 -2
  396. chia/util/block_cache.py +4 -4
  397. chia/util/chia_logging.py +2 -2
  398. chia/util/chia_version.py +1 -2
  399. chia/util/config.py +15 -16
  400. chia/util/db_wrapper.py +26 -27
  401. chia/util/default_root.py +1 -2
  402. chia/util/errors.py +3 -3
  403. chia/util/file_keyring.py +14 -14
  404. chia/util/files.py +2 -3
  405. chia/util/hash.py +4 -4
  406. chia/util/initial-config.yaml +3 -5
  407. chia/util/inline_executor.py +2 -1
  408. chia/util/ip_address.py +1 -2
  409. chia/util/keychain.py +25 -27
  410. chia/util/keyring_wrapper.py +18 -19
  411. chia/util/lock.py +3 -4
  412. chia/util/log_exceptions.py +1 -2
  413. chia/util/lru_cache.py +2 -2
  414. chia/util/network.py +6 -6
  415. chia/util/path.py +2 -3
  416. chia/util/priority_mutex.py +2 -2
  417. chia/util/profiler.py +1 -2
  418. chia/util/safe_cancel_task.py +1 -2
  419. chia/util/streamable.py +22 -8
  420. chia/util/task_referencer.py +1 -1
  421. chia/util/timing.py +3 -3
  422. chia/util/virtual_project_analysis.py +6 -5
  423. chia/util/ws_message.py +2 -2
  424. chia/wallet/cat_wallet/cat_info.py +3 -4
  425. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  426. chia/wallet/cat_wallet/cat_utils.py +3 -4
  427. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  428. chia/wallet/cat_wallet/lineage_store.py +3 -4
  429. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  430. chia/wallet/coin_selection.py +9 -10
  431. chia/wallet/conditions.py +120 -105
  432. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  433. chia/wallet/derivation_record.py +1 -2
  434. chia/wallet/derive_keys.py +2 -4
  435. chia/wallet/did_wallet/did_info.py +10 -11
  436. chia/wallet/did_wallet/did_wallet.py +36 -82
  437. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  438. chia/wallet/driver_protocol.py +5 -7
  439. chia/wallet/lineage_proof.py +4 -4
  440. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  441. chia/wallet/nft_wallet/nft_info.py +8 -9
  442. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  443. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  444. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  445. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  446. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  447. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  448. chia/wallet/notification_manager.py +3 -3
  449. chia/wallet/notification_store.py +44 -61
  450. chia/wallet/outer_puzzles.py +6 -7
  451. chia/wallet/puzzle_drivers.py +34 -6
  452. chia/wallet/puzzles/clawback/drivers.py +6 -6
  453. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  454. chia/wallet/puzzles/load_clvm.py +1 -1
  455. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  456. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  457. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  458. chia/wallet/puzzles/tails.py +3 -3
  459. chia/wallet/singleton.py +5 -7
  460. chia/wallet/singleton_record.py +3 -3
  461. chia/wallet/start_wallet.py +5 -5
  462. chia/wallet/trade_manager.py +37 -58
  463. chia/wallet/trade_record.py +4 -4
  464. chia/wallet/trading/offer.py +59 -46
  465. chia/wallet/trading/trade_store.py +8 -9
  466. chia/wallet/transaction_record.py +8 -8
  467. chia/wallet/uncurried_puzzle.py +1 -2
  468. chia/wallet/util/clvm_streamable.py +12 -12
  469. chia/wallet/util/compute_hints.py +4 -5
  470. chia/wallet/util/curry_and_treehash.py +1 -2
  471. chia/wallet/util/merkle_tree.py +2 -3
  472. chia/wallet/util/peer_request_cache.py +8 -8
  473. chia/wallet/util/signing.py +85 -0
  474. chia/wallet/util/tx_config.py +15 -6
  475. chia/wallet/util/wallet_sync_utils.py +14 -16
  476. chia/wallet/util/wallet_types.py +2 -2
  477. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  478. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  479. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  480. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  481. chia/wallet/vc_wallet/vc_store.py +5 -6
  482. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  483. chia/wallet/wallet.py +50 -78
  484. chia/wallet/wallet_action_scope.py +11 -11
  485. chia/wallet/wallet_blockchain.py +12 -12
  486. chia/wallet/wallet_coin_record.py +12 -6
  487. chia/wallet/wallet_coin_store.py +24 -25
  488. chia/wallet/wallet_interested_store.py +3 -5
  489. chia/wallet/wallet_nft_store.py +10 -11
  490. chia/wallet/wallet_node.py +53 -61
  491. chia/wallet/wallet_node_api.py +5 -3
  492. chia/wallet/wallet_protocol.py +23 -23
  493. chia/wallet/wallet_puzzle_store.py +15 -18
  494. chia/wallet/wallet_request_types.py +778 -114
  495. chia/wallet/wallet_retry_store.py +1 -3
  496. chia/wallet/wallet_rpc_api.py +572 -909
  497. chia/wallet/wallet_rpc_client.py +87 -279
  498. chia/wallet/wallet_singleton_store.py +3 -4
  499. chia/wallet/wallet_state_manager.py +332 -106
  500. chia/wallet/wallet_transaction_store.py +11 -14
  501. chia/wallet/wallet_user_store.py +4 -6
  502. chia/wallet/wallet_weight_proof_handler.py +4 -4
  503. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
  504. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
  505. chia/apis.py +0 -21
  506. chia/consensus/check_time_locks.py +0 -57
  507. chia/data_layer/puzzles/__init__.py +0 -0
  508. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  509. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  510. chia/types/coin_record.py +0 -44
  511. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  512. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  513. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  514. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  515. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  516. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  517. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  518. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  520. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  521. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  522. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  524. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  525. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  526. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
  527. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
  528. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import TYPE_CHECKING, ClassVar, Optional, cast
3
+ from typing import TYPE_CHECKING, ClassVar, cast
4
4
 
5
5
  from chia_rs import BlockRecord, FullBlock
6
6
  from chia_rs.sized_bytes import bytes32
@@ -34,7 +34,7 @@ class AugmentedBlockchain:
34
34
  self._extra_blocks = {}
35
35
  self._height_to_hash = {}
36
36
 
37
- def _get_block_record(self, header_hash: bytes32) -> Optional[BlockRecord]:
37
+ def _get_block_record(self, header_hash: bytes32) -> BlockRecord | None:
38
38
  eb = self._extra_blocks.get(header_hash)
39
39
  if eb is None:
40
40
  return None
@@ -64,7 +64,7 @@ class AugmentedBlockchain:
64
64
  # traverse the additional blocks (if any) and resolve heights into
65
65
  # generators
66
66
  to_remove = []
67
- curr: Optional[tuple[FullBlock, BlockRecord]] = self._extra_blocks.get(header_hash)
67
+ curr: tuple[FullBlock, BlockRecord] | None = self._extra_blocks.get(header_hash)
68
68
  while curr is not None:
69
69
  b = curr[0]
70
70
  if b.height in generator_refs:
@@ -81,7 +81,7 @@ class AugmentedBlockchain:
81
81
  generators.update(await self._underlying.lookup_block_generators(header_hash, generator_refs))
82
82
  return generators
83
83
 
84
- async def get_block_record_from_db(self, header_hash: bytes32) -> Optional[BlockRecord]:
84
+ async def get_block_record_from_db(self, header_hash: bytes32) -> BlockRecord | None:
85
85
  ret = self._get_block_record(header_hash)
86
86
  if ret is not None:
87
87
  return ret
@@ -97,7 +97,7 @@ class AugmentedBlockchain:
97
97
  del self._extra_blocks[hh]
98
98
 
99
99
  # BlockRecordsProtocol
100
- def try_block_record(self, header_hash: bytes32) -> Optional[BlockRecord]:
100
+ def try_block_record(self, header_hash: bytes32) -> BlockRecord | None:
101
101
  ret = self._get_block_record(header_hash)
102
102
  if ret is not None:
103
103
  return ret
@@ -118,7 +118,7 @@ class AugmentedBlockchain:
118
118
  return self._underlying.block_record(header_hash)
119
119
  return self._underlying.height_to_block_record(height)
120
120
 
121
- def height_to_hash(self, height: uint32) -> Optional[bytes32]:
121
+ def height_to_hash(self, height: uint32) -> bytes32 | None:
122
122
  ret = self._height_to_hash.get(height)
123
123
  if ret is not None:
124
124
  return ret
@@ -2,16 +2,17 @@ from __future__ import annotations
2
2
 
3
3
  import collections
4
4
  import logging
5
- from collections.abc import Awaitable, Collection
5
+ from collections.abc import Awaitable, Callable, Collection
6
6
  from dataclasses import dataclass, field
7
- from typing import Callable, Optional, Union
8
7
 
9
8
  from chia_rs import (
10
9
  BlockRecord,
10
+ CoinRecord,
11
11
  ConsensusConstants,
12
12
  FullBlock,
13
13
  SpendBundleConditions,
14
14
  UnfinishedBlock,
15
+ check_time_locks,
15
16
  compute_merkle_set_root,
16
17
  is_canonical_serialization,
17
18
  )
@@ -21,10 +22,8 @@ from chiabip158 import PyBIP158
21
22
 
22
23
  from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
23
24
  from chia.consensus.blockchain_interface import BlockRecordsProtocol
24
- from chia.consensus.check_time_locks import check_time_locks
25
25
  from chia.consensus.coinbase import create_farmer_coin, create_pool_coin
26
26
  from chia.types.blockchain_format.coin import Coin, hash_coin_ids
27
- from chia.types.coin_record import CoinRecord
28
27
  from chia.util.errors import Err
29
28
  from chia.util.hash import std_hash
30
29
 
@@ -47,7 +46,7 @@ class ForkAdd:
47
46
  coin: Coin
48
47
  confirmed_height: uint32
49
48
  timestamp: uint64
50
- hint: Optional[bytes]
49
+ hint: bytes | None
51
50
  is_coinbase: bool
52
51
  # This means matching parent puzzle hash and amount
53
52
  same_as_parent: bool
@@ -109,7 +108,7 @@ class ForkInfo:
109
108
  coin, block.height, timestamp, hint=None, is_coinbase=True, same_as_parent=False
110
109
  )
111
110
 
112
- def include_spends(self, conds: Optional[SpendBundleConditions], block: FullBlock, header_hash: bytes32) -> None:
111
+ def include_spends(self, conds: SpendBundleConditions | None, block: FullBlock, header_hash: bytes32) -> None:
113
112
  self.update_fork_peak(block, header_hash)
114
113
  if conds is not None:
115
114
  assert block.foliage_transaction_block is not None
@@ -127,7 +126,7 @@ class ForkInfo:
127
126
 
128
127
  def include_block(
129
128
  self,
130
- additions: list[tuple[Coin, Optional[bytes]]],
129
+ additions: list[tuple[Coin, bytes | None]],
131
130
  removals: list[tuple[bytes32, Coin]],
132
131
  block: FullBlock,
133
132
  header_hash: bytes32,
@@ -161,7 +160,7 @@ def validate_block_merkle_roots(
161
160
  block_removals_root: bytes32,
162
161
  tx_additions: list[tuple[Coin, bytes32]],
163
162
  tx_removals: list[bytes32],
164
- ) -> Optional[Err]:
163
+ ) -> Err | None:
165
164
  # Create addition Merkle set
166
165
  puzzlehash_coins_map: dict[bytes32, list[bytes32]] = {}
167
166
 
@@ -192,13 +191,13 @@ async def validate_block_body(
192
191
  constants: ConsensusConstants,
193
192
  records: BlockRecordsProtocol,
194
193
  get_coin_records: Callable[[Collection[bytes32]], Awaitable[list[CoinRecord]]],
195
- block: Union[FullBlock, UnfinishedBlock],
194
+ block: FullBlock | UnfinishedBlock,
196
195
  height: uint32,
197
- conds: Optional[SpendBundleConditions],
196
+ conds: SpendBundleConditions | None,
198
197
  fork_info: ForkInfo,
199
198
  *,
200
199
  log_coins: bool = False,
201
- ) -> Optional[Err]:
200
+ ) -> Err | None:
202
201
  """
203
202
  This assumes the header block has been completely validated.
204
203
  Validates the transactions and body of the block.
@@ -227,7 +226,7 @@ async def validate_block_body(
227
226
  ):
228
227
  return Err.NOT_BLOCK_BUT_HAS_DATA
229
228
 
230
- prev_tb: Optional[BlockRecord] = records.block_record(block.prev_header_hash)
229
+ prev_tb: BlockRecord | None = records.block_record(block.prev_header_hash)
231
230
  assert prev_tb is not None
232
231
  while not prev_tb.is_transaction_block:
233
232
  prev_tb = records.block_record(prev_tb.prev_hash)
@@ -341,10 +340,14 @@ async def validate_block_body(
341
340
  # the generator ref list for this block (or 'one' bytes [0x01] if no generator)
342
341
  # 8b. The generator ref list length must be less than or equal to MAX_GENERATOR_REF_LIST_SIZE entries
343
342
  # 8c. The generator ref list must not point to a height >= this block's height
344
- if block.transactions_generator_ref_list in (None, []):
343
+ if block.transactions_generator_ref_list == []:
345
344
  if block.transactions_info.generator_refs_root != bytes([1] * 32):
346
345
  return Err.INVALID_TRANSACTIONS_GENERATOR_REFS_ROOT
347
346
  else:
347
+ # With hard fork 2 we ban transactions_generator_ref_list.
348
+ if prev_transaction_block_height >= constants.HARD_FORK2_HEIGHT:
349
+ return Err.TOO_MANY_GENERATOR_REFS
350
+
348
351
  # If we have a generator reference list, we must have a generator
349
352
  if block.transactions_generator is None:
350
353
  return Err.INVALID_TRANSACTIONS_GENERATOR_REFS_ROOT
@@ -558,14 +561,15 @@ async def validate_block_body(
558
561
  # 21. Verify conditions
559
562
  # verify absolute/relative height/time conditions
560
563
  if conds is not None:
561
- error = check_time_locks(
564
+ error: int | None = check_time_locks(
562
565
  removal_coin_records,
563
566
  conds,
564
567
  prev_transaction_block_height,
565
568
  prev_transaction_block_timestamp,
566
569
  )
567
570
  if error is not None:
568
- return error
571
+ # TODO: standardise errors across Rust and Python so cast is not necesary here
572
+ return Err(error)
569
573
 
570
574
  # 22. Verify aggregated signature is done in pre-validation
571
575
  if not block.transactions_info.aggregated_signature:
@@ -2,8 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
  import random
5
- from collections.abc import Sequence
6
- from typing import Callable, Optional
5
+ from collections.abc import Callable, Sequence
7
6
 
8
7
  import chia_rs
9
8
  from chia_rs import (
@@ -54,18 +53,18 @@ def compute_block_fee(additions: Sequence[Coin], removals: Sequence[Coin]) -> ui
54
53
  def create_foliage(
55
54
  constants: ConsensusConstants,
56
55
  reward_block_unfinished: RewardChainBlockUnfinished,
57
- new_block_gen: Optional[NewBlockGenerator],
58
- prev_block: Optional[BlockRecord],
56
+ new_block_gen: NewBlockGenerator | None,
57
+ prev_block: BlockRecord | None,
59
58
  blocks: BlockRecordsProtocol,
60
59
  total_iters_sp: uint128,
61
60
  timestamp: uint64,
62
61
  farmer_reward_puzzlehash: bytes32,
63
62
  pool_target: PoolTarget,
64
63
  get_plot_signature: Callable[[bytes32, G1Element], G2Element],
65
- get_pool_signature: Callable[[PoolTarget, Optional[G1Element]], Optional[G2Element]],
64
+ get_pool_signature: Callable[[PoolTarget, G1Element | None], G2Element | None],
66
65
  seed: bytes,
67
66
  compute_fees: Callable[[Sequence[Coin], Sequence[Coin]], uint64],
68
- ) -> tuple[Foliage, Optional[FoliageTransactionBlock], Optional[TransactionsInfo]]:
67
+ ) -> tuple[Foliage, FoliageTransactionBlock | None, TransactionsInfo | None]:
69
68
  """
70
69
  Creates a foliage for a given reward chain block. This may or may not be a tx block. In the case of a tx block,
71
70
  the return values are not None. This is called at the signage point, so some of this information may be
@@ -90,7 +89,7 @@ def create_foliage(
90
89
  if prev_block is not None:
91
90
  res = get_prev_transaction_block(prev_block, blocks, total_iters_sp)
92
91
  is_transaction_block: bool = res[0]
93
- prev_transaction_block: Optional[BlockRecord] = res[1]
92
+ prev_transaction_block: BlockRecord | None = res[1]
94
93
  else:
95
94
  # Genesis is a transaction block
96
95
  prev_transaction_block = None
@@ -110,7 +109,7 @@ def create_foliage(
110
109
  tx_additions: list[Coin] = []
111
110
  tx_removals: list[bytes32] = []
112
111
 
113
- pool_target_signature: Optional[G2Element] = get_pool_signature(
112
+ pool_target_signature: G2Element | None = get_pool_signature(
114
113
  pool_target, reward_block_unfinished.proof_of_space.pool_public_key
115
114
  )
116
115
 
@@ -134,7 +133,7 @@ def create_foliage(
134
133
 
135
134
  generator_block_heights_list: list[uint32] = []
136
135
 
137
- foliage_transaction_block_hash: Optional[bytes32]
136
+ foliage_transaction_block_hash: bytes32 | None
138
137
 
139
138
  if is_transaction_block:
140
139
  cost: uint64
@@ -236,7 +235,7 @@ def create_foliage(
236
235
 
237
236
  filter_hash: bytes32 = std_hash(encoded)
238
237
 
239
- transactions_info: Optional[TransactionsInfo] = TransactionsInfo(
238
+ transactions_info: TransactionsInfo | None = TransactionsInfo(
240
239
  generator_hash,
241
240
  generator_refs_hash,
242
241
  new_block_gen.signature if new_block_gen else G2Element(),
@@ -250,7 +249,7 @@ def create_foliage(
250
249
  prev_transaction_block_hash = prev_transaction_block.header_hash
251
250
 
252
251
  assert transactions_info is not None
253
- foliage_transaction_block: Optional[FoliageTransactionBlock] = FoliageTransactionBlock(
252
+ foliage_transaction_block: FoliageTransactionBlock | None = FoliageTransactionBlock(
254
253
  prev_transaction_block_hash,
255
254
  timestamp,
256
255
  filter_hash,
@@ -261,7 +260,7 @@ def create_foliage(
261
260
  assert foliage_transaction_block is not None
262
261
 
263
262
  foliage_transaction_block_hash = foliage_transaction_block.get_hash()
264
- foliage_transaction_block_signature: Optional[G2Element] = get_plot_signature(
263
+ foliage_transaction_block_signature: G2Element | None = get_plot_signature(
265
264
  foliage_transaction_block_hash, reward_block_unfinished.proof_of_space.plot_public_key
266
265
  )
267
266
  assert foliage_transaction_block_signature is not None
@@ -296,14 +295,14 @@ def create_unfinished_block(
296
295
  farmer_reward_puzzle_hash: bytes32,
297
296
  pool_target: PoolTarget,
298
297
  get_plot_signature: Callable[[bytes32, G1Element], G2Element],
299
- get_pool_signature: Callable[[PoolTarget, Optional[G1Element]], Optional[G2Element]],
298
+ get_pool_signature: Callable[[PoolTarget, G1Element | None], G2Element | None],
300
299
  signage_point: SignagePoint,
301
300
  timestamp: uint64,
302
301
  blocks: BlockRecordsProtocol,
303
302
  seed: bytes = b"",
304
- new_block_gen: Optional[NewBlockGenerator] = None,
305
- prev_block: Optional[BlockRecord] = None,
306
- finished_sub_slots_input: Optional[list[EndOfSubSlotBundle]] = None,
303
+ new_block_gen: NewBlockGenerator | None = None,
304
+ prev_block: BlockRecord | None = None,
305
+ finished_sub_slots_input: list[EndOfSubSlotBundle] | None = None,
307
306
  compute_fees: Callable[[Sequence[Coin], Sequence[Coin]], uint64] = compute_block_fee,
308
307
  ) -> UnfinishedBlock:
309
308
  """
@@ -346,6 +345,10 @@ def create_unfinished_block(
346
345
 
347
346
  cc_sp_hash: bytes32 = slot_cc_challenge
348
347
 
348
+ if proof_of_space.param().strength_v2 is not None:
349
+ # v2 plots don't support pool public key
350
+ assert proof_of_space.pool_public_key is None
351
+
349
352
  # Only enters this if statement if we are in testing mode (making VDF proofs here)
350
353
  if signage_point.cc_vdf is not None:
351
354
  assert signage_point.rc_vdf is not None
@@ -366,8 +369,8 @@ def create_unfinished_block(
366
369
  rc_sp_hash = curr.finished_reward_slot_hashes[-1]
367
370
  signage_point = SignagePoint(None, None, None, None)
368
371
 
369
- cc_sp_signature: Optional[G2Element] = get_plot_signature(cc_sp_hash, proof_of_space.plot_public_key)
370
- rc_sp_signature: Optional[G2Element] = get_plot_signature(rc_sp_hash, proof_of_space.plot_public_key)
372
+ cc_sp_signature: G2Element | None = get_plot_signature(cc_sp_hash, proof_of_space.plot_public_key)
373
+ rc_sp_signature: G2Element | None = get_plot_signature(rc_sp_hash, proof_of_space.plot_public_key)
371
374
  assert cc_sp_signature is not None
372
375
  assert rc_sp_signature is not None
373
376
  assert chia_rs.AugSchemeMPL.verify(proof_of_space.plot_public_key, cc_sp_hash, cc_sp_signature)
@@ -418,10 +421,10 @@ def unfinished_block_to_full_block(
418
421
  cc_ip_proof: VDFProof,
419
422
  rc_ip_vdf: VDFInfo,
420
423
  rc_ip_proof: VDFProof,
421
- icc_ip_vdf: Optional[VDFInfo],
422
- icc_ip_proof: Optional[VDFProof],
424
+ icc_ip_vdf: VDFInfo | None,
425
+ icc_ip_proof: VDFProof | None,
423
426
  finished_sub_slots: list[EndOfSubSlotBundle],
424
- prev_block: Optional[BlockRecord],
427
+ prev_block: BlockRecord | None,
425
428
  blocks: BlockRecordsProtocol,
426
429
  total_iters_sp: uint128,
427
430
  difficulty: uint64,
@@ -482,6 +485,7 @@ def unfinished_block_to_full_block(
482
485
  unfinished_block.reward_chain_block.reward_chain_sp_signature,
483
486
  rc_ip_vdf,
484
487
  icc_ip_vdf,
488
+ None,
485
489
  is_transaction_block,
486
490
  )
487
491
  if prev_block is None:
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
  import time
5
- from typing import Optional
6
5
 
7
6
  from chia_rs import (
8
7
  AugSchemeMPL,
@@ -20,7 +19,11 @@ from chia_rs.sized_ints import uint8, uint32, uint64, uint128
20
19
  from chia.consensus.blockchain_interface import BlockRecordsProtocol
21
20
  from chia.consensus.deficit import calculate_deficit
22
21
  from chia.consensus.difficulty_adjustment import can_finish_sub_and_full_epoch
23
- from chia.consensus.get_block_challenge import final_eos_is_already_included, get_block_challenge, prev_tx_block
22
+ from chia.consensus.get_block_challenge import (
23
+ final_eos_is_already_included,
24
+ get_block_challenge,
25
+ pre_sp_tx_block_height,
26
+ )
24
27
  from chia.consensus.make_sub_epoch_summary import make_sub_epoch_summary
25
28
  from chia.consensus.pot_iterations import (
26
29
  calculate_ip_iters,
@@ -50,7 +53,7 @@ def validate_unfinished_header_block(
50
53
  skip_overflow_last_ss_validation: bool = False,
51
54
  skip_vdf_is_valid: bool = False,
52
55
  check_sub_epoch_summary: bool = True,
53
- ) -> tuple[Optional[uint64], Optional[ValidationError]]:
56
+ ) -> tuple[uint64 | None, ValidationError | None]:
54
57
  """
55
58
  Validates an unfinished header block. This is a block without the infusion VDFs (unfinished)
56
59
  and without transactions and transaction info (header). Returns (required_iters, error).
@@ -114,7 +117,7 @@ def validate_unfinished_header_block(
114
117
  can_finish_epoch = False
115
118
 
116
119
  # 2. Check finished slots that have been crossed since prev_b
117
- ses_hash: Optional[bytes32] = None
120
+ ses_hash: bytes32 | None = None
118
121
  if new_sub_slot and not skip_overflow_last_ss_validation:
119
122
  # Finished a slot(s) since previous block. The first sub-slot must have at least one block, and all
120
123
  # subsequent sub-slots must be empty
@@ -151,9 +154,9 @@ def validate_unfinished_header_block(
151
154
  return None, ValidationError(Err.SHOULD_NOT_HAVE_ICC)
152
155
  else:
153
156
  assert prev_b is not None
154
- icc_iters_committed: Optional[uint64] = None
155
- icc_iters_proof: Optional[uint64] = None
156
- icc_challenge_hash: Optional[bytes32] = None
157
+ icc_iters_committed: uint64 | None = None
158
+ icc_iters_proof: uint64 | None = None
159
+ icc_challenge_hash: bytes32 | None = None
157
160
  icc_vdf_input = None
158
161
  if prev_b.deficit < constants.MIN_BLOCKS_PER_CHALLENGE_BLOCK:
159
162
  # There should be no ICC chain if the last block's deficit is 16
@@ -502,8 +505,13 @@ def validate_unfinished_header_block(
502
505
  cc_sp_hash,
503
506
  height,
504
507
  expected_vs.difficulty,
505
- expected_vs.ssi,
506
- prev_tx_block(blocks, prev_b),
508
+ pre_sp_tx_block_height(
509
+ constants=constants,
510
+ blocks=blocks,
511
+ prev_b_hash=header_block.prev_header_hash,
512
+ sp_index=header_block.reward_chain_block.signage_point_index,
513
+ first_in_sub_slot=len(header_block.finished_sub_slots) > 0,
514
+ ),
507
515
  )
508
516
  if required_iters is None:
509
517
  return None, ValidationError(Err.INVALID_POSPACE)
@@ -756,10 +764,16 @@ def validate_unfinished_header_block(
756
764
  != constants.GENESIS_PRE_FARM_FARMER_PUZZLE_HASH
757
765
  ):
758
766
  return None, ValidationError(Err.INVALID_PREFARM)
759
- # 20b. If pospace has a pool pk, heck pool target signature. Should not check this for genesis block.
767
+ # 20b. If pospace has a pool pk, check pool target signature. Should not check this for genesis block.
760
768
  elif header_block.reward_chain_block.proof_of_space.pool_public_key is not None:
761
769
  assert header_block.reward_chain_block.proof_of_space.pool_contract_puzzle_hash is None
762
770
  assert header_block.foliage.foliage_block_data.pool_signature is not None
771
+
772
+ # v2 plots require pool contract puzzle hash, not pool pk
773
+ # TODO: todo_v2_plots add test coverage of this check
774
+ if header_block.reward_chain_block.proof_of_space.param().strength_v2 is not None:
775
+ return None, ValidationError(Err.INVALID_POOL_TARGET)
776
+
763
777
  if not AugSchemeMPL.verify(
764
778
  header_block.reward_chain_block.proof_of_space.pool_public_key,
765
779
  bytes(header_block.foliage.foliage_block_data.pool_target),
@@ -834,7 +848,7 @@ def validate_finished_header_block(
834
848
  check_filter: bool,
835
849
  expected_vs: ValidationState,
836
850
  check_sub_epoch_summary: bool = True,
837
- ) -> tuple[Optional[uint64], Optional[ValidationError]]:
851
+ ) -> tuple[uint64 | None, ValidationError | None]:
838
852
  """
839
853
  Fully validates the header of a block. A header block is the same as a full block, but
840
854
  without transactions and transaction info. Returns (required_iters, error).
@@ -866,7 +880,7 @@ def validate_finished_header_block(
866
880
  assert required_iters is not None
867
881
 
868
882
  if header_block.height == 0:
869
- prev_b: Optional[BlockRecord] = None
883
+ prev_b: BlockRecord | None = None
870
884
  genesis_block = True
871
885
  else:
872
886
  prev_b = blocks.block_record(header_block.prev_header_hash)
@@ -1009,7 +1023,7 @@ def validate_finished_header_block(
1009
1023
  last_ss = header_block.finished_sub_slots[-1]
1010
1024
  assert last_ss.infused_challenge_chain is not None
1011
1025
  icc_vdf_challenge: bytes32 = last_ss.infused_challenge_chain.get_hash()
1012
- icc_vdf_input: Optional[ClassgroupElement] = ClassgroupElement.get_default_element()
1026
+ icc_vdf_input: ClassgroupElement | None = ClassgroupElement.get_default_element()
1013
1027
  else:
1014
1028
  assert prev_b is not None
1015
1029
  if prev_b.is_challenge_block(constants):
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
  import logging
4
4
  from dataclasses import dataclass
5
5
  from pathlib import Path
6
- from typing import Optional
7
6
 
8
7
  import aiofiles
9
8
  from chia_rs import SubEpochSummary
@@ -57,9 +56,7 @@ class BlockHeightMap(BlockHeightMapProtocol):
57
56
  __ses_filename: Path
58
57
 
59
58
  @classmethod
60
- async def create(
61
- cls, blockchain_dir: Path, db: DBWrapper2, selected_network: Optional[str] = None
62
- ) -> BlockHeightMap:
59
+ async def create(cls, blockchain_dir: Path, db: DBWrapper2, selected_network: str | None = None) -> BlockHeightMap:
63
60
  if db.db_version != 2:
64
61
  raise RuntimeError(f"BlockHeightMap does not support database schema v{db.db_version}")
65
62
  self = BlockHeightMap()
@@ -138,7 +135,7 @@ class BlockHeightMap(BlockHeightMapProtocol):
138
135
 
139
136
  return self
140
137
 
141
- def update_height(self, height: uint32, header_hash: bytes32, ses: Optional[SubEpochSummary]) -> None:
138
+ def update_height(self, height: uint32, header_hash: bytes32, ses: SubEpochSummary | None) -> None:
142
139
  # we're only updating the last hash. If we've reorged, we already rolled
143
140
  # back, making this the new peak
144
141
  assert height * 32 <= len(self.__height_to_hash)
@@ -196,7 +193,7 @@ class BlockHeightMap(BlockHeightMapProtocol):
196
193
  async with self.db.reader_no_transaction() as conn:
197
194
  async with conn.execute(query, (window_end, height)) as cursor:
198
195
  # maps block-hash -> (height, prev-hash, sub-epoch-summary)
199
- ordered: dict[bytes32, tuple[uint32, bytes32, Optional[bytes]]] = {}
196
+ ordered: dict[bytes32, tuple[uint32, bytes32, bytes | None]] = {}
200
197
 
201
198
  for r in await cursor.fetchall():
202
199
  ordered[r[0]] = (r[2], r[1], r[3])
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional, Protocol
3
+ from typing import Protocol
4
4
 
5
5
  from chia_rs import SubEpochSummary
6
6
  from chia_rs.sized_bytes import bytes32
@@ -8,7 +8,7 @@ from chia_rs.sized_ints import uint32
8
8
 
9
9
 
10
10
  class BlockHeightMapProtocol(Protocol):
11
- def update_height(self, height: uint32, header_hash: bytes32, ses: Optional[SubEpochSummary]) -> None: ...
11
+ def update_height(self, height: uint32, header_hash: bytes32, ses: SubEpochSummary | None) -> None: ...
12
12
 
13
13
  def get_hash(self, height: uint32) -> bytes32: ...
14
14
 
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  from chia_rs.sized_bytes import bytes32
6
4
  from chia_rs.sized_ints import uint32, uint64
7
5
  from typing_extensions import Protocol
@@ -15,13 +13,13 @@ class BlockRecordProtocol(Protocol):
15
13
  def height(self) -> uint32: ...
16
14
 
17
15
  @property
18
- def timestamp(self) -> Optional[uint64]: ...
16
+ def timestamp(self) -> uint64 | None: ...
19
17
 
20
18
  @property
21
19
  def prev_transaction_block_height(self) -> uint32: ...
22
20
 
23
21
  @property
24
- def prev_transaction_block_hash(self) -> Optional[bytes32]: ...
22
+ def prev_transaction_block_hash(self) -> bytes32 | None: ...
25
23
 
26
24
  @property
27
25
  def is_transaction_block(self) -> bool: ...