chia-blockchain 2.5.4rc1__py3-none-any.whl → 2.5.5__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 (453) hide show
  1. chia/_tests/blockchain/blockchain_test_utils.py +2 -3
  2. chia/_tests/blockchain/test_augmented_chain.py +2 -3
  3. chia/_tests/blockchain/test_blockchain.py +261 -44
  4. chia/_tests/blockchain/test_blockchain_transactions.py +4 -3
  5. chia/_tests/blockchain/test_build_chains.py +197 -1
  6. chia/_tests/blockchain/test_get_block_generator.py +1 -1
  7. chia/_tests/blockchain/test_lookup_fork_chain.py +1 -1
  8. chia/_tests/clvm/benchmark_costs.py +1 -1
  9. chia/_tests/clvm/coin_store.py +3 -4
  10. chia/_tests/clvm/test_message_conditions.py +2 -2
  11. chia/_tests/clvm/test_puzzle_compression.py +2 -3
  12. chia/_tests/clvm/test_puzzles.py +1 -2
  13. chia/_tests/clvm/test_singletons.py +2 -3
  14. chia/_tests/clvm/test_spend_sim.py +7 -7
  15. chia/_tests/cmds/cmd_test_utils.py +30 -25
  16. chia/_tests/cmds/test_dev_gh.py +1 -1
  17. chia/_tests/cmds/test_farm_cmd.py +1 -1
  18. chia/_tests/cmds/test_show.py +1 -2
  19. chia/_tests/cmds/wallet/test_did.py +101 -56
  20. chia/_tests/cmds/wallet/test_nft.py +109 -84
  21. chia/_tests/cmds/wallet/test_notifications.py +1 -1
  22. chia/_tests/cmds/wallet/test_offer.toffer +1 -1
  23. chia/_tests/cmds/wallet/test_vcs.py +8 -8
  24. chia/_tests/cmds/wallet/test_wallet.py +100 -46
  25. chia/_tests/conftest.py +31 -20
  26. chia/_tests/connection_utils.py +1 -1
  27. chia/_tests/core/consensus/stores/__init__.py +0 -0
  28. chia/_tests/core/consensus/stores/test_coin_store_protocol.py +40 -0
  29. chia/_tests/core/consensus/test_block_creation.py +2 -31
  30. chia/_tests/core/consensus/test_pot_iterations.py +38 -3
  31. chia/_tests/core/custom_types/test_proof_of_space.py +154 -26
  32. chia/_tests/core/custom_types/test_spend_bundle.py +2 -3
  33. chia/_tests/core/daemon/test_daemon.py +80 -0
  34. chia/_tests/core/data_layer/test_data_layer.py +1 -1
  35. chia/_tests/core/data_layer/test_data_layer_util.py +1 -1
  36. chia/_tests/core/data_layer/test_data_rpc.py +14 -10
  37. chia/_tests/core/data_layer/test_data_store.py +5 -5
  38. chia/_tests/core/farmer/test_farmer_api.py +2 -2
  39. chia/_tests/core/full_node/full_sync/test_full_sync.py +446 -406
  40. chia/_tests/core/full_node/ram_db.py +3 -1
  41. chia/_tests/core/full_node/stores/test_block_store.py +28 -16
  42. chia/_tests/core/full_node/stores/test_coin_store.py +277 -185
  43. chia/_tests/core/full_node/stores/test_full_node_store.py +11 -4
  44. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  45. chia/_tests/core/full_node/test_address_manager.py +200 -27
  46. chia/_tests/core/full_node/test_block_height_map.py +2 -2
  47. chia/_tests/core/full_node/test_conditions.py +7 -6
  48. chia/_tests/core/full_node/test_full_node.py +456 -40
  49. chia/_tests/core/full_node/test_generator_tools.py +32 -2
  50. chia/_tests/core/full_node/test_hint_management.py +1 -1
  51. chia/_tests/core/full_node/test_node_load.py +20 -21
  52. chia/_tests/core/full_node/test_performance.py +3 -4
  53. chia/_tests/core/full_node/test_prev_tx_block.py +43 -0
  54. chia/_tests/core/full_node/test_subscriptions.py +1 -2
  55. chia/_tests/core/full_node/test_transactions.py +9 -5
  56. chia/_tests/core/full_node/test_tx_processing_queue.py +1 -2
  57. chia/_tests/core/large_block.py +1 -2
  58. chia/_tests/core/make_block_generator.py +3 -4
  59. chia/_tests/core/mempool/test_mempool.py +36 -86
  60. chia/_tests/core/mempool/test_mempool_fee_estimator.py +1 -1
  61. chia/_tests/core/mempool/test_mempool_item_queries.py +1 -3
  62. chia/_tests/core/mempool/test_mempool_manager.py +529 -69
  63. chia/_tests/core/mempool/test_mempool_performance.py +3 -2
  64. chia/_tests/core/mempool/test_singleton_fast_forward.py +61 -132
  65. chia/_tests/core/server/flood.py +1 -1
  66. chia/_tests/core/server/test_dos.py +1 -1
  67. chia/_tests/core/server/test_node_discovery.py +41 -27
  68. chia/_tests/core/server/test_rate_limits.py +1 -1
  69. chia/_tests/core/server/test_server.py +1 -1
  70. chia/_tests/core/services/test_services.py +5 -5
  71. chia/_tests/core/ssl/test_ssl.py +1 -1
  72. chia/_tests/core/test_cost_calculation.py +6 -6
  73. chia/_tests/core/test_crawler.py +2 -2
  74. chia/_tests/core/test_crawler_rpc.py +1 -1
  75. chia/_tests/core/test_db_conversion.py +3 -1
  76. chia/_tests/core/test_db_validation.py +5 -3
  77. chia/_tests/core/test_farmer_harvester_rpc.py +15 -15
  78. chia/_tests/core/test_filter.py +4 -1
  79. chia/_tests/core/test_full_node_rpc.py +99 -82
  80. chia/_tests/core/test_program.py +2 -2
  81. chia/_tests/core/util/test_block_cache.py +1 -1
  82. chia/_tests/core/util/test_keychain.py +2 -2
  83. chia/_tests/core/util/test_lockfile.py +1 -1
  84. chia/_tests/core/util/test_log_exceptions.py +5 -5
  85. chia/_tests/core/util/test_streamable.py +81 -22
  86. chia/_tests/db/test_db_wrapper.py +1 -3
  87. chia/_tests/environments/wallet.py +5 -5
  88. chia/_tests/farmer_harvester/test_farmer.py +9 -7
  89. chia/_tests/farmer_harvester/test_farmer_harvester.py +11 -4
  90. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  91. chia/_tests/farmer_harvester/test_third_party_harvesters.py +15 -9
  92. chia/_tests/fee_estimation/test_fee_estimation_integration.py +1 -2
  93. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +7 -5
  94. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -1
  95. chia/_tests/generator/test_compression.py +1 -2
  96. chia/_tests/generator/test_rom.py +8 -4
  97. chia/_tests/plot_sync/test_plot_sync.py +3 -3
  98. chia/_tests/plot_sync/test_receiver.py +3 -3
  99. chia/_tests/plot_sync/test_sender.py +1 -1
  100. chia/_tests/plot_sync/test_sync_simulated.py +3 -3
  101. chia/_tests/plot_sync/util.py +2 -2
  102. chia/_tests/pools/test_pool_cmdline.py +48 -21
  103. chia/_tests/pools/test_pool_puzzles_lifecycle.py +2 -3
  104. chia/_tests/pools/test_pool_rpc.py +237 -105
  105. chia/_tests/pools/test_pool_wallet.py +11 -2
  106. chia/_tests/pools/test_wallet_pool_store.py +5 -4
  107. chia/_tests/rpc/test_rpc_client.py +1 -1
  108. chia/_tests/simulation/test_simulation.py +13 -8
  109. chia/_tests/simulation/test_simulator.py +2 -2
  110. chia/_tests/timelord/test_new_peak.py +191 -47
  111. chia/_tests/timelord/test_timelord.py +1 -1
  112. chia/_tests/tools/test_full_sync.py +0 -2
  113. chia/_tests/tools/test_run_block.py +3 -1
  114. chia/_tests/util/benchmark_cost.py +3 -3
  115. chia/_tests/util/benchmarks.py +2 -2
  116. chia/_tests/util/blockchain.py +11 -5
  117. chia/_tests/util/blockchain_mock.py +1 -4
  118. chia/_tests/util/coin_store.py +29 -0
  119. chia/_tests/util/constants.py +2 -18
  120. chia/_tests/util/full_sync.py +3 -3
  121. chia/_tests/util/generator_tools_testing.py +2 -3
  122. chia/_tests/util/key_tool.py +2 -3
  123. chia/_tests/util/misc.py +33 -31
  124. chia/_tests/util/network_protocol_data.py +19 -17
  125. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  126. chia/_tests/util/protocol_messages_json.py +3 -1
  127. chia/_tests/util/run_block.py +2 -2
  128. chia/_tests/util/setup_nodes.py +7 -7
  129. chia/_tests/util/spend_sim.py +47 -55
  130. chia/_tests/util/test_condition_tools.py +5 -4
  131. chia/_tests/util/test_config.py +2 -2
  132. chia/_tests/util/test_dump_keyring.py +1 -1
  133. chia/_tests/util/test_full_block_utils.py +12 -14
  134. chia/_tests/util/test_misc.py +2 -2
  135. chia/_tests/util/test_paginator.py +4 -4
  136. chia/_tests/util/test_priority_mutex.py +2 -2
  137. chia/_tests/util/test_replace_str_to_bytes.py +15 -5
  138. chia/_tests/util/test_ssl_check.py +1 -1
  139. chia/_tests/util/test_testnet_overrides.py +13 -3
  140. chia/_tests/util/time_out_assert.py +4 -2
  141. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +1 -1
  142. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -2
  143. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +352 -432
  144. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +3 -6
  145. chia/_tests/wallet/cat_wallet/test_trades.py +53 -77
  146. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -1
  147. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +3 -3
  148. chia/_tests/wallet/clawback/test_clawback_metadata.py +4 -2
  149. chia/_tests/wallet/conftest.py +11 -12
  150. chia/_tests/wallet/db_wallet/test_db_graftroot.py +11 -4
  151. chia/_tests/wallet/db_wallet/test_dl_offers.py +433 -130
  152. chia/_tests/wallet/db_wallet/test_dl_wallet.py +3 -3
  153. chia/_tests/wallet/did_wallet/test_did.py +2132 -2000
  154. chia/_tests/wallet/nft_wallet/config.py +1 -1
  155. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1610 -742
  156. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +486 -907
  157. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +4 -4
  158. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +517 -294
  159. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +133 -62
  160. chia/_tests/wallet/rpc/test_wallet_rpc.py +495 -265
  161. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +10 -6
  162. chia/_tests/wallet/sync/test_wallet_sync.py +89 -60
  163. chia/_tests/wallet/test_clvm_casts.py +88 -0
  164. chia/_tests/wallet/test_coin_management.py +1 -1
  165. chia/_tests/wallet/test_coin_selection.py +1 -1
  166. chia/_tests/wallet/test_conditions.py +1 -1
  167. chia/_tests/wallet/test_new_wallet_protocol.py +13 -11
  168. chia/_tests/wallet/test_notifications.py +5 -3
  169. chia/_tests/wallet/test_sign_coin_spends.py +6 -6
  170. chia/_tests/wallet/test_signer_protocol.py +13 -12
  171. chia/_tests/wallet/test_singleton.py +1 -1
  172. chia/_tests/wallet/test_singleton_lifecycle_fast.py +5 -7
  173. chia/_tests/wallet/test_util.py +2 -2
  174. chia/_tests/wallet/test_wallet.py +108 -29
  175. chia/_tests/wallet/test_wallet_action_scope.py +9 -2
  176. chia/_tests/wallet/test_wallet_blockchain.py +2 -3
  177. chia/_tests/wallet/test_wallet_key_val_store.py +1 -2
  178. chia/_tests/wallet/test_wallet_node.py +2 -4
  179. chia/_tests/wallet/test_wallet_retry.py +4 -2
  180. chia/_tests/wallet/test_wallet_state_manager.py +191 -5
  181. chia/_tests/wallet/test_wallet_test_framework.py +1 -1
  182. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +8 -8
  183. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -12
  184. chia/_tests/wallet/wallet_block_tools.py +6 -6
  185. chia/_tests/weight_proof/test_weight_proof.py +10 -48
  186. chia/apis.py +1 -1
  187. chia/cmds/beta.py +1 -1
  188. chia/cmds/chia.py +9 -9
  189. chia/cmds/cmd_classes.py +12 -11
  190. chia/cmds/cmd_helpers.py +1 -1
  191. chia/cmds/cmds_util.py +12 -9
  192. chia/cmds/coin_funcs.py +2 -2
  193. chia/cmds/configure.py +2 -2
  194. chia/cmds/data.py +0 -2
  195. chia/cmds/data_funcs.py +1 -1
  196. chia/cmds/db_validate_func.py +1 -2
  197. chia/cmds/dev/__init__.py +0 -0
  198. chia/cmds/dev/data.py +273 -0
  199. chia/cmds/{gh.py → dev/gh.py} +5 -5
  200. chia/cmds/dev/main.py +22 -0
  201. chia/cmds/dev/mempool.py +78 -0
  202. chia/cmds/dev/mempool_funcs.py +63 -0
  203. chia/cmds/farm_funcs.py +5 -4
  204. chia/cmds/init_funcs.py +11 -11
  205. chia/cmds/keys.py +2 -2
  206. chia/cmds/keys_funcs.py +4 -4
  207. chia/cmds/netspace_funcs.py +1 -1
  208. chia/cmds/peer_funcs.py +2 -2
  209. chia/cmds/plotnft_funcs.py +72 -26
  210. chia/cmds/rpc.py +1 -1
  211. chia/cmds/show_funcs.py +5 -5
  212. chia/cmds/signer.py +8 -7
  213. chia/cmds/sim_funcs.py +8 -9
  214. chia/cmds/wallet.py +2 -2
  215. chia/cmds/wallet_funcs.py +165 -131
  216. chia/{util → consensus}/augmented_chain.py +1 -2
  217. chia/consensus/block_body_validation.py +54 -40
  218. chia/consensus/block_creation.py +42 -76
  219. chia/consensus/block_header_validation.py +32 -26
  220. chia/consensus/block_record.py +0 -3
  221. chia/consensus/blockchain.py +23 -32
  222. chia/consensus/blockchain_interface.py +1 -5
  223. chia/consensus/check_time_locks.py +57 -0
  224. chia/consensus/coin_store_protocol.py +151 -0
  225. chia/consensus/coinbase.py +0 -6
  226. chia/consensus/condition_costs.py +4 -0
  227. chia/{util → consensus}/condition_tools.py +4 -5
  228. chia/consensus/cost_calculator.py +1 -1
  229. chia/consensus/default_constants.py +32 -9
  230. chia/consensus/deficit.py +1 -3
  231. chia/consensus/difficulty_adjustment.py +1 -2
  232. chia/consensus/find_fork_point.py +1 -3
  233. chia/consensus/full_block_to_block_record.py +1 -6
  234. chia/{util → consensus}/generator_tools.py +1 -3
  235. chia/consensus/get_block_challenge.py +30 -7
  236. chia/consensus/make_sub_epoch_summary.py +1 -5
  237. chia/consensus/multiprocess_validation.py +21 -20
  238. chia/consensus/pot_iterations.py +74 -13
  239. chia/{util → consensus}/prev_transaction_block.py +1 -1
  240. chia/consensus/vdf_info_computation.py +1 -3
  241. chia/daemon/keychain_proxy.py +5 -5
  242. chia/daemon/server.py +22 -5
  243. chia/data_layer/data_layer.py +92 -51
  244. chia/{rpc → data_layer}/data_layer_rpc_api.py +1 -1
  245. chia/{rpc → data_layer}/data_layer_rpc_util.py +3 -6
  246. chia/data_layer/data_layer_util.py +4 -6
  247. chia/data_layer/data_layer_wallet.py +42 -69
  248. chia/data_layer/dl_wallet_store.py +12 -6
  249. chia/data_layer/download_data.py +3 -3
  250. chia/data_layer/s3_plugin_service.py +0 -1
  251. chia/farmer/farmer.py +3 -4
  252. chia/farmer/farmer_api.py +11 -7
  253. chia/{rpc → farmer}/farmer_rpc_client.py +1 -1
  254. chia/full_node/block_height_map.py +7 -6
  255. chia/full_node/block_store.py +5 -7
  256. chia/full_node/bundle_tools.py +1 -2
  257. chia/full_node/coin_store.py +153 -124
  258. chia/{types → full_node}/eligible_coin_spends.py +39 -70
  259. chia/full_node/fee_estimator.py +1 -1
  260. chia/full_node/fee_estimator_interface.py +0 -8
  261. chia/full_node/fee_tracker.py +25 -25
  262. chia/full_node/full_node.py +70 -53
  263. chia/full_node/full_node_api.py +57 -40
  264. chia/{rpc → full_node}/full_node_rpc_api.py +87 -8
  265. chia/{rpc → full_node}/full_node_rpc_client.py +7 -6
  266. chia/full_node/full_node_store.py +23 -8
  267. chia/full_node/mempool.py +206 -53
  268. chia/full_node/mempool_check_conditions.py +20 -63
  269. chia/full_node/mempool_manager.py +53 -47
  270. chia/full_node/subscriptions.py +1 -3
  271. chia/full_node/tx_processing_queue.py +50 -3
  272. chia/full_node/weight_proof.py +46 -37
  273. chia/harvester/harvester.py +1 -1
  274. chia/harvester/harvester_api.py +22 -7
  275. chia/introducer/introducer.py +1 -1
  276. chia/introducer/introducer_api.py +1 -1
  277. chia/plot_sync/exceptions.py +1 -1
  278. chia/plot_sync/receiver.py +1 -1
  279. chia/plot_sync/sender.py +2 -2
  280. chia/pools/pool_puzzles.py +13 -18
  281. chia/pools/pool_wallet.py +23 -46
  282. chia/protocols/farmer_protocol.py +11 -3
  283. chia/protocols/full_node_protocol.py +1 -4
  284. chia/protocols/harvester_protocol.py +3 -3
  285. chia/protocols/pool_protocol.py +1 -2
  286. chia/protocols/shared_protocol.py +3 -3
  287. chia/protocols/timelord_protocol.py +1 -3
  288. chia/protocols/wallet_protocol.py +3 -3
  289. chia/rpc/rpc_client.py +7 -8
  290. chia/rpc/rpc_server.py +3 -3
  291. chia/rpc/util.py +3 -1
  292. chia/seeder/crawler.py +1 -1
  293. chia/seeder/crawler_api.py +1 -1
  294. chia/seeder/dns_server.py +2 -0
  295. chia/seeder/start_crawler.py +3 -3
  296. chia/server/address_manager.py +286 -38
  297. chia/server/address_manager_store.py +0 -215
  298. chia/{types → server}/aliases.py +7 -7
  299. chia/server/api_protocol.py +1 -1
  300. chia/server/chia_policy.py +1 -1
  301. chia/server/node_discovery.py +76 -113
  302. chia/server/rate_limits.py +1 -1
  303. chia/server/resolve_peer_info.py +43 -0
  304. chia/server/server.py +5 -5
  305. chia/server/start_data_layer.py +4 -4
  306. chia/server/start_farmer.py +5 -4
  307. chia/server/start_full_node.py +5 -4
  308. chia/server/start_harvester.py +7 -5
  309. chia/server/start_introducer.py +2 -2
  310. chia/server/start_service.py +1 -1
  311. chia/server/start_timelord.py +7 -5
  312. chia/server/start_wallet.py +7 -5
  313. chia/server/ws_connection.py +1 -1
  314. chia/simulator/add_blocks_in_batches.py +2 -2
  315. chia/simulator/block_tools.py +245 -201
  316. chia/simulator/full_node_simulator.py +38 -10
  317. chia/simulator/setup_services.py +12 -12
  318. chia/simulator/simulator_full_node_rpc_api.py +2 -2
  319. chia/simulator/simulator_full_node_rpc_client.py +2 -2
  320. chia/simulator/simulator_test_tools.py +2 -2
  321. chia/simulator/start_simulator.py +1 -1
  322. chia/simulator/wallet_tools.py +10 -18
  323. chia/ssl/create_ssl.py +1 -1
  324. chia/timelord/iters_from_block.py +14 -14
  325. chia/timelord/timelord.py +15 -11
  326. chia/timelord/timelord_api.py +14 -2
  327. chia/timelord/timelord_state.py +20 -14
  328. chia/types/blockchain_format/program.py +53 -10
  329. chia/types/blockchain_format/proof_of_space.py +73 -19
  330. chia/types/coin_spend.py +3 -56
  331. chia/types/generator_types.py +28 -0
  332. chia/types/internal_mempool_item.py +1 -2
  333. chia/types/mempool_item.py +12 -7
  334. chia/types/unfinished_header_block.py +1 -2
  335. chia/types/validation_state.py +1 -2
  336. chia/types/weight_proof.py +1 -3
  337. chia/util/action_scope.py +3 -3
  338. chia/util/block_cache.py +1 -2
  339. chia/util/byte_types.py +1 -1
  340. chia/util/casts.py +21 -0
  341. chia/util/config.py +0 -37
  342. chia/util/db_wrapper.py +8 -1
  343. chia/util/errors.py +3 -2
  344. chia/util/initial-config.yaml +21 -5
  345. chia/util/keychain.py +6 -7
  346. chia/util/keyring_wrapper.py +5 -5
  347. chia/util/limited_semaphore.py +1 -1
  348. chia/util/priority_mutex.py +1 -1
  349. chia/util/streamable.py +63 -5
  350. chia/util/task_timing.py +1 -1
  351. chia/util/virtual_project_analysis.py +1 -1
  352. chia/wallet/cat_wallet/cat_info.py +7 -3
  353. chia/wallet/cat_wallet/cat_outer_puzzle.py +9 -5
  354. chia/wallet/cat_wallet/cat_utils.py +1 -1
  355. chia/wallet/cat_wallet/cat_wallet.py +44 -36
  356. chia/wallet/cat_wallet/lineage_store.py +7 -0
  357. chia/wallet/cat_wallet/r_cat_wallet.py +274 -0
  358. chia/wallet/conditions.py +5 -10
  359. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -4
  360. chia/wallet/derivation_record.py +33 -0
  361. chia/wallet/derive_keys.py +3 -3
  362. chia/wallet/did_wallet/did_info.py +12 -3
  363. chia/wallet/did_wallet/did_wallet.py +132 -101
  364. chia/wallet/did_wallet/did_wallet_puzzles.py +9 -9
  365. chia/wallet/driver_protocol.py +3 -1
  366. chia/{types/spend_bundle.py → wallet/estimate_fees.py} +2 -7
  367. chia/wallet/nft_wallet/metadata_outer_puzzle.py +5 -3
  368. chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
  369. chia/wallet/nft_wallet/nft_wallet.py +69 -112
  370. chia/wallet/nft_wallet/ownership_outer_puzzle.py +5 -3
  371. chia/wallet/nft_wallet/singleton_outer_puzzle.py +6 -4
  372. chia/wallet/nft_wallet/transfer_program_puzzle.py +4 -2
  373. chia/wallet/nft_wallet/uncurry_nft.py +4 -6
  374. chia/wallet/notification_manager.py +2 -3
  375. chia/wallet/outer_puzzles.py +7 -2
  376. chia/wallet/puzzle_drivers.py +1 -1
  377. chia/wallet/puzzles/clawback/drivers.py +5 -4
  378. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -1
  379. chia/wallet/puzzles/singleton_top_layer.py +2 -1
  380. chia/wallet/puzzles/singleton_top_layer_v1_1.py +2 -1
  381. chia/wallet/puzzles/tails.py +1 -3
  382. chia/wallet/signer_protocol.py +5 -6
  383. chia/wallet/singleton.py +5 -4
  384. chia/wallet/singleton_record.py +1 -1
  385. chia/wallet/trade_manager.py +18 -20
  386. chia/wallet/trade_record.py +3 -6
  387. chia/wallet/trading/offer.py +12 -13
  388. chia/wallet/uncurried_puzzle.py +2 -2
  389. chia/wallet/util/compute_additions.py +58 -0
  390. chia/wallet/util/compute_hints.py +3 -3
  391. chia/wallet/util/compute_memos.py +4 -4
  392. chia/wallet/util/curry_and_treehash.py +2 -1
  393. chia/wallet/util/debug_spend_bundle.py +1 -1
  394. chia/wallet/util/merkle_tree.py +1 -1
  395. chia/wallet/util/peer_request_cache.py +1 -2
  396. chia/wallet/util/tx_config.py +3 -8
  397. chia/wallet/util/wallet_sync_utils.py +10 -5
  398. chia/wallet/util/wallet_types.py +1 -0
  399. chia/wallet/vc_wallet/cr_cat_drivers.py +17 -18
  400. chia/wallet/vc_wallet/cr_cat_wallet.py +30 -28
  401. chia/wallet/vc_wallet/cr_outer_puzzle.py +5 -3
  402. chia/wallet/vc_wallet/vc_drivers.py +50 -8
  403. chia/wallet/vc_wallet/vc_store.py +3 -5
  404. chia/wallet/vc_wallet/vc_wallet.py +15 -22
  405. chia/wallet/wallet.py +36 -46
  406. chia/wallet/wallet_action_scope.py +73 -4
  407. chia/wallet/wallet_blockchain.py +1 -3
  408. chia/wallet/wallet_interested_store.py +1 -1
  409. chia/wallet/wallet_nft_store.py +3 -3
  410. chia/wallet/wallet_node.py +17 -16
  411. chia/wallet/wallet_node_api.py +4 -5
  412. chia/wallet/wallet_pool_store.py +1 -1
  413. chia/wallet/wallet_protocol.py +2 -0
  414. chia/wallet/wallet_puzzle_store.py +1 -1
  415. chia/{rpc → wallet}/wallet_request_types.py +670 -81
  416. chia/{rpc → wallet}/wallet_rpc_api.py +735 -766
  417. chia/{rpc → wallet}/wallet_rpc_client.py +268 -420
  418. chia/wallet/wallet_singleton_store.py +8 -7
  419. chia/wallet/wallet_spend_bundle.py +4 -3
  420. chia/wallet/wallet_state_manager.py +320 -191
  421. chia/wallet/wallet_weight_proof_handler.py +1 -2
  422. chia/wallet/wsm_apis.py +98 -0
  423. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/METADATA +7 -7
  424. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/RECORD +443 -436
  425. mozilla-ca/cacert.pem +3 -165
  426. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +0 -145
  427. chia/cmds/dev.py +0 -18
  428. chia/types/blockchain_format/slots.py +0 -9
  429. chia/types/blockchain_format/sub_epoch_summary.py +0 -5
  430. chia/types/end_of_slot_bundle.py +0 -5
  431. chia/types/full_block.py +0 -5
  432. chia/types/header_block.py +0 -5
  433. chia/types/spend_bundle_conditions.py +0 -7
  434. chia/types/transaction_queue_entry.py +0 -56
  435. chia/types/unfinished_block.py +0 -5
  436. /chia/cmds/{installers.py → dev/installers.py} +0 -0
  437. /chia/cmds/{sim.py → dev/sim.py} +0 -0
  438. /chia/{util → cmds}/dump_keyring.py +0 -0
  439. /chia/{full_node → consensus}/signage_point.py +0 -0
  440. /chia/{rpc → data_layer}/data_layer_rpc_client.py +0 -0
  441. /chia/{rpc → farmer}/farmer_rpc_api.py +0 -0
  442. /chia/{util → full_node}/full_block_utils.py +0 -0
  443. /chia/{rpc → harvester}/harvester_rpc_api.py +0 -0
  444. /chia/{rpc → harvester}/harvester_rpc_client.py +0 -0
  445. /chia/{full_node → protocols}/fee_estimate.py +0 -0
  446. /chia/{server → protocols}/outbound_message.py +0 -0
  447. /chia/{rpc → seeder}/crawler_rpc_api.py +0 -0
  448. /chia/{util → simulator}/vdf_prover.py +0 -0
  449. /chia/{util → ssl}/ssl_check.py +0 -0
  450. /chia/{rpc → timelord}/timelord_rpc_api.py +0 -0
  451. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/LICENSE +0 -0
  452. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/WHEEL +0 -0
  453. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/entry_points.txt +0 -0
@@ -6,20 +6,25 @@ from collections.abc import Awaitable, Collection
6
6
  from dataclasses import dataclass, field
7
7
  from typing import Callable, Optional, Union
8
8
 
9
- from chia_rs import ConsensusConstants, SpendBundleConditions, compute_merkle_set_root
9
+ from chia_rs import (
10
+ BlockRecord,
11
+ ConsensusConstants,
12
+ FullBlock,
13
+ SpendBundleConditions,
14
+ UnfinishedBlock,
15
+ compute_merkle_set_root,
16
+ is_canonical_serialization,
17
+ )
10
18
  from chia_rs.sized_bytes import bytes32
11
19
  from chia_rs.sized_ints import uint32, uint64
12
20
  from chiabip158 import PyBIP158
13
21
 
14
- from chia.consensus.block_record import BlockRecord
15
22
  from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
16
23
  from chia.consensus.blockchain_interface import BlockRecordsProtocol
24
+ from chia.consensus.check_time_locks import check_time_locks
17
25
  from chia.consensus.coinbase import create_farmer_coin, create_pool_coin
18
- from chia.full_node.mempool_check_conditions import mempool_check_time_locks
19
26
  from chia.types.blockchain_format.coin import Coin, hash_coin_ids
20
27
  from chia.types.coin_record import CoinRecord
21
- from chia.types.full_block import FullBlock
22
- from chia.types.unfinished_block import UnfinishedBlock
23
28
  from chia.util.errors import Err
24
29
  from chia.util.hash import std_hash
25
30
 
@@ -44,6 +49,8 @@ class ForkAdd:
44
49
  timestamp: uint64
45
50
  hint: Optional[bytes]
46
51
  is_coinbase: bool
52
+ # This means matching parent puzzle hash and amount
53
+ same_as_parent: bool
47
54
 
48
55
 
49
56
  @dataclass(frozen=True)
@@ -82,61 +89,64 @@ class ForkInfo:
82
89
  self.removals_since_fork = {}
83
90
  self.block_hashes = []
84
91
 
85
- def include_spends(self, conds: Optional[SpendBundleConditions], block: FullBlock, header_hash: bytes32) -> None:
86
- height = block.height
87
-
88
- assert self.peak_height == height - 1
89
-
92
+ def update_fork_peak(self, block: FullBlock, header_hash: bytes32) -> None:
93
+ """Updates `self` with `block`'s height and `header_hash`."""
94
+ assert self.peak_height == block.height - 1
90
95
  assert len(self.block_hashes) == self.peak_height - self.fork_height
91
96
  assert block.height == self.fork_height + 1 + len(self.block_hashes)
92
97
  self.block_hashes.append(header_hash)
93
-
94
98
  self.peak_height = int(block.height)
95
99
  self.peak_hash = header_hash
96
100
 
101
+ def include_reward_coins(self, block: FullBlock) -> None:
102
+ """Updates `self` with `block`'s reward coins."""
103
+ for coin in block.get_included_reward_coins():
104
+ assert block.foliage_transaction_block is not None
105
+ timestamp = block.foliage_transaction_block.timestamp
106
+ coin_id = coin.name()
107
+ assert coin_id not in self.additions_since_fork
108
+ self.additions_since_fork[coin_id] = ForkAdd(
109
+ coin, block.height, timestamp, hint=None, is_coinbase=True, same_as_parent=False
110
+ )
111
+
112
+ def include_spends(self, conds: Optional[SpendBundleConditions], block: FullBlock, header_hash: bytes32) -> None:
113
+ self.update_fork_peak(block, header_hash)
97
114
  if conds is not None:
98
115
  assert block.foliage_transaction_block is not None
99
116
  timestamp = block.foliage_transaction_block.timestamp
100
117
  for spend in conds.spends:
101
- self.removals_since_fork[bytes32(spend.coin_id)] = ForkRem(bytes32(spend.puzzle_hash), height)
118
+ spend_coin_id = bytes32(spend.coin_id)
119
+ self.removals_since_fork[spend_coin_id] = ForkRem(bytes32(spend.puzzle_hash), block.height)
102
120
  for puzzle_hash, amount, hint in spend.create_coin:
103
- coin = Coin(bytes32(spend.coin_id), bytes32(puzzle_hash), uint64(amount))
104
- self.additions_since_fork[coin.name()] = ForkAdd(coin, height, timestamp, hint, False)
105
- for coin in block.get_included_reward_coins():
106
- assert block.foliage_transaction_block is not None
107
- timestamp = block.foliage_transaction_block.timestamp
108
- assert coin.name() not in self.additions_since_fork
109
- self.additions_since_fork[coin.name()] = ForkAdd(coin, block.height, timestamp, None, True)
121
+ coin = Coin(spend_coin_id, bytes32(puzzle_hash), uint64(amount))
122
+ same_as_parent = coin.puzzle_hash == spend.puzzle_hash and amount == spend.coin_amount
123
+ self.additions_since_fork[coin.name()] = ForkAdd(
124
+ coin, block.height, timestamp, hint=hint, is_coinbase=False, same_as_parent=same_as_parent
125
+ )
126
+ self.include_reward_coins(block)
110
127
 
111
128
  def include_block(
112
129
  self,
113
130
  additions: list[tuple[Coin, Optional[bytes]]],
114
- removals: list[Coin],
131
+ removals: list[tuple[bytes32, Coin]],
115
132
  block: FullBlock,
116
133
  header_hash: bytes32,
117
134
  ) -> None:
118
- height = block.height
119
-
120
- assert self.peak_height == height - 1
121
-
122
- assert len(self.block_hashes) == self.peak_height - self.fork_height
123
- assert block.height == self.fork_height + 1 + len(self.block_hashes)
124
- self.block_hashes.append(header_hash)
125
-
126
- self.peak_height = int(block.height)
127
- self.peak_hash = header_hash
128
-
135
+ self.update_fork_peak(block, header_hash)
129
136
  if block.foliage_transaction_block is not None:
130
137
  timestamp = block.foliage_transaction_block.timestamp
131
- for spend in removals:
132
- self.removals_since_fork[bytes32(spend.name())] = ForkRem(bytes32(spend.puzzle_hash), height)
138
+ spent_coins: dict[bytes32, Coin] = {}
139
+ for spend_id, spend in removals:
140
+ spent_coins[bytes32(spend_id)] = spend
141
+ self.removals_since_fork[bytes32(spend_id)] = ForkRem(bytes32(spend.puzzle_hash), block.height)
133
142
  for coin, hint in additions:
134
- self.additions_since_fork[coin.name()] = ForkAdd(coin, height, timestamp, hint, False)
135
- for coin in block.get_included_reward_coins():
136
- assert block.foliage_transaction_block is not None
137
- timestamp = block.foliage_transaction_block.timestamp
138
- assert coin.name() not in self.additions_since_fork
139
- self.additions_since_fork[coin.name()] = ForkAdd(coin, block.height, timestamp, None, True)
143
+ parent = spent_coins.get(coin.parent_coin_info)
144
+ assert parent is not None
145
+ same_as_parent = coin.puzzle_hash == parent.puzzle_hash and coin.amount == parent.amount
146
+ self.additions_since_fork[coin.name()] = ForkAdd(
147
+ coin, block.height, timestamp, hint=hint, is_coinbase=False, same_as_parent=same_as_parent
148
+ )
149
+ self.include_reward_coins(block)
140
150
 
141
151
  def rollback(self, header_hash: bytes32, height: int) -> None:
142
152
  assert height <= self.peak_height
@@ -366,6 +376,10 @@ async def validate_block_body(
366
376
  assert conds is not None
367
377
  assert conds.validated_signature
368
378
 
379
+ if prev_transaction_block_height >= constants.HARD_FORK2_HEIGHT:
380
+ if not is_canonical_serialization(bytes(block.transactions_generator)):
381
+ return Err.INVALID_TRANSACTIONS_GENERATOR_ENCODING
382
+
369
383
  for spend in conds.spends:
370
384
  removals.append(bytes32(spend.coin_id))
371
385
  removals_puzzle_dic[bytes32(spend.coin_id)] = bytes32(spend.puzzle_hash)
@@ -545,7 +559,7 @@ async def validate_block_body(
545
559
  # 21. Verify conditions
546
560
  # verify absolute/relative height/time conditions
547
561
  if conds is not None:
548
- error = mempool_check_time_locks(
562
+ error = check_time_locks(
549
563
  removal_coin_records,
550
564
  conds,
551
565
  prev_transaction_block_height,
@@ -7,67 +7,40 @@ from typing import Callable, Optional
7
7
 
8
8
  import chia_rs
9
9
  from chia_rs import (
10
- DONT_VALIDATE_SIGNATURE,
11
- MEMPOOL_MODE,
10
+ BlockRecord,
12
11
  ConsensusConstants,
12
+ EndOfSubSlotBundle,
13
13
  Foliage,
14
14
  FoliageBlockData,
15
15
  FoliageTransactionBlock,
16
+ FullBlock,
16
17
  G1Element,
17
18
  G2Element,
18
19
  PoolTarget,
20
+ ProofOfSpace,
19
21
  RewardChainBlock,
20
22
  RewardChainBlockUnfinished,
21
23
  TransactionsInfo,
24
+ UnfinishedBlock,
22
25
  compute_merkle_set_root,
23
- get_flags_for_height_and_constants,
24
- run_block_generator,
25
- run_block_generator2,
26
26
  )
27
27
  from chia_rs.sized_bytes import bytes32
28
28
  from chia_rs.sized_ints import uint8, uint32, uint64, uint128
29
29
  from chiabip158 import PyBIP158
30
30
 
31
- from chia.consensus.block_record import BlockRecord
32
31
  from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
33
32
  from chia.consensus.blockchain_interface import BlockRecordsProtocol
34
33
  from chia.consensus.coinbase import create_farmer_coin, create_pool_coin
35
- from chia.full_node.signage_point import SignagePoint
34
+ from chia.consensus.prev_transaction_block import get_prev_transaction_block
35
+ from chia.consensus.signage_point import SignagePoint
36
36
  from chia.types.blockchain_format.coin import Coin, hash_coin_ids
37
- from chia.types.blockchain_format.proof_of_space import ProofOfSpace
38
37
  from chia.types.blockchain_format.vdf import VDFInfo, VDFProof
39
- from chia.types.end_of_slot_bundle import EndOfSubSlotBundle
40
- from chia.types.full_block import FullBlock
41
- from chia.types.generator_types import BlockGenerator
42
- from chia.types.unfinished_block import UnfinishedBlock
38
+ from chia.types.generator_types import NewBlockGenerator
43
39
  from chia.util.hash import std_hash
44
- from chia.util.prev_transaction_block import get_prev_transaction_block
45
40
 
46
41
  log = logging.getLogger(__name__)
47
42
 
48
43
 
49
- def compute_block_cost(generator: BlockGenerator, constants: ConsensusConstants, height: uint32) -> uint64:
50
- flags = get_flags_for_height_and_constants(height, constants) | MEMPOOL_MODE | DONT_VALIDATE_SIGNATURE
51
-
52
- if height >= constants.HARD_FORK_HEIGHT:
53
- run_block = run_block_generator2
54
- else:
55
- run_block = run_block_generator
56
-
57
- err, conds = run_block(
58
- bytes(generator.program),
59
- generator.generator_refs,
60
- constants.MAX_BLOCK_COST_CLVM,
61
- flags,
62
- G2Element(),
63
- None,
64
- constants,
65
- )
66
- if conds is None: # pragma: no cover
67
- log.error(f"unexpected error while computing block cost: {err} height: {height} generator: {generator.program}")
68
- return uint64(0 if conds is None else conds.cost)
69
-
70
-
71
44
  def compute_block_fee(additions: Sequence[Coin], removals: Sequence[Coin]) -> uint64:
72
45
  removal_amount = 0
73
46
  addition_amount = 0
@@ -81,10 +54,7 @@ def compute_block_fee(additions: Sequence[Coin], removals: Sequence[Coin]) -> ui
81
54
  def create_foliage(
82
55
  constants: ConsensusConstants,
83
56
  reward_block_unfinished: RewardChainBlockUnfinished,
84
- block_generator: Optional[BlockGenerator],
85
- aggregate_sig: G2Element,
86
- additions: list[Coin],
87
- removals: list[Coin],
57
+ new_block_gen: Optional[NewBlockGenerator],
88
58
  prev_block: Optional[BlockRecord],
89
59
  blocks: BlockRecordsProtocol,
90
60
  total_iters_sp: uint128,
@@ -94,7 +64,6 @@ def create_foliage(
94
64
  get_plot_signature: Callable[[bytes32, G1Element], G2Element],
95
65
  get_pool_signature: Callable[[PoolTarget, Optional[G1Element]], Optional[G2Element]],
96
66
  seed: bytes,
97
- compute_cost: Callable[[BlockGenerator, ConsensusConstants, uint32], uint64],
98
67
  compute_fees: Callable[[Sequence[Coin], Sequence[Coin]], uint64],
99
68
  ) -> tuple[Foliage, Optional[FoliageTransactionBlock], Optional[TransactionsInfo]]:
100
69
  """
@@ -105,8 +74,7 @@ def create_foliage(
105
74
  Args:
106
75
  constants: consensus constants being used for this chain
107
76
  reward_block_unfinished: the reward block to look at, potentially at the signage point
108
- block_generator: transactions to add to the foliage block, if created
109
- aggregate_sig: aggregate of all transactions (or infinity element)
77
+ new_block_gen: transactions to add to the foliage block, if created, including aggregate signature
110
78
  prev_block: the previous block at the signage point
111
79
  blocks: dict from header hash to blocks, of all ancestor blocks
112
80
  total_iters_sp: total iters at the signage point
@@ -164,18 +132,21 @@ def create_foliage(
164
132
  assert prev_block is not None
165
133
  prev_block_hash = prev_block.header_hash
166
134
 
135
+ generator_block_heights_list: list[uint32] = []
136
+
167
137
  foliage_transaction_block_hash: Optional[bytes32]
168
138
 
169
139
  if is_transaction_block:
170
- cost = uint64(0)
140
+ cost: uint64
141
+ spend_bundle_fees: uint64
171
142
 
172
143
  # Calculate the cost of transactions
173
- if block_generator is not None:
174
- cost = compute_cost(block_generator, constants, height)
175
-
176
- spend_bundle_fees = compute_fees(additions, removals)
144
+ if new_block_gen is not None:
145
+ cost = new_block_gen.cost
146
+ spend_bundle_fees = compute_fees(new_block_gen.additions, new_block_gen.removals)
177
147
  else:
178
148
  spend_bundle_fees = uint64(0)
149
+ cost = uint64(0)
179
150
 
180
151
  reward_claims_incorporated = []
181
152
  if height > 0:
@@ -217,14 +188,20 @@ def create_foliage(
217
188
  )
218
189
  reward_claims_incorporated += [pool_coin, farmer_coin]
219
190
  curr = blocks.block_record(curr.prev_hash)
220
- additions.extend(reward_claims_incorporated.copy())
221
- for coin in additions:
191
+
192
+ for coin in reward_claims_incorporated:
222
193
  tx_additions.append(coin)
223
194
  byte_array_tx.append(bytearray(coin.puzzle_hash))
224
- for coin in removals:
225
- cname = coin.name()
226
- tx_removals.append(cname)
227
- byte_array_tx.append(bytearray(cname))
195
+
196
+ if new_block_gen is not None:
197
+ generator_block_heights_list = new_block_gen.block_refs
198
+ for coin in new_block_gen.additions:
199
+ tx_additions.append(coin)
200
+ byte_array_tx.append(bytearray(coin.puzzle_hash))
201
+ for coin in new_block_gen.removals:
202
+ cname = coin.name()
203
+ tx_removals.append(cname)
204
+ byte_array_tx.append(bytearray(cname))
228
205
 
229
206
  bip158: PyBIP158 = PyBIP158(byte_array_tx)
230
207
  encoded = bytes(bip158.GetEncoded())
@@ -249,16 +226,20 @@ def create_foliage(
249
226
  removals_root = bytes32(compute_merkle_set_root(tx_removals))
250
227
 
251
228
  generator_hash = bytes32.zeros
252
- if block_generator is not None:
253
- generator_hash = std_hash(block_generator.program)
229
+ if new_block_gen is not None:
230
+ generator_hash = std_hash(new_block_gen.program)
254
231
 
255
232
  generator_refs_hash = bytes32([1] * 32)
233
+ if generator_block_heights_list not in (None, []):
234
+ generator_ref_list_bytes = b"".join([i.stream_to_bytes() for i in generator_block_heights_list])
235
+ generator_refs_hash = std_hash(generator_ref_list_bytes)
236
+
256
237
  filter_hash: bytes32 = std_hash(encoded)
257
238
 
258
239
  transactions_info: Optional[TransactionsInfo] = TransactionsInfo(
259
240
  generator_hash,
260
241
  generator_refs_hash,
261
- aggregate_sig,
242
+ new_block_gen.signature if new_block_gen else G2Element(),
262
243
  spend_bundle_fees,
263
244
  cost,
264
245
  reward_claims_incorporated,
@@ -320,13 +301,9 @@ def create_unfinished_block(
320
301
  timestamp: uint64,
321
302
  blocks: BlockRecordsProtocol,
322
303
  seed: bytes = b"",
323
- block_generator: Optional[BlockGenerator] = None,
324
- aggregate_sig: G2Element = G2Element(),
325
- additions: Optional[list[Coin]] = None,
326
- removals: Optional[list[Coin]] = None,
304
+ new_block_gen: Optional[NewBlockGenerator] = None,
327
305
  prev_block: Optional[BlockRecord] = None,
328
306
  finished_sub_slots_input: Optional[list[EndOfSubSlotBundle]] = None,
329
- compute_cost: Callable[[BlockGenerator, ConsensusConstants, uint32], uint64] = compute_block_cost,
330
307
  compute_fees: Callable[[Sequence[Coin], Sequence[Coin]], uint64] = compute_block_fee,
331
308
  ) -> UnfinishedBlock:
332
309
  """
@@ -349,10 +326,7 @@ def create_unfinished_block(
349
326
  signage_point: signage point information (VDFs)
350
327
  timestamp: timestamp to add to the foliage block, if created
351
328
  seed: seed to randomize chain
352
- block_generator: transactions to add to the foliage block, if created
353
- aggregate_sig: aggregate of all transactions (or infinity element)
354
- additions: Coins added in spend_bundle
355
- removals: Coins removed in spend_bundle
329
+ new_block_gen: transactions to add to the foliage block, if created, including aggregate signature
356
330
  prev_block: previous block (already in chain) from the signage point
357
331
  blocks: dictionary from header hash to SBR of all included SBR
358
332
  finished_sub_slots_input: finished_sub_slots at the signage point
@@ -411,17 +385,10 @@ def create_unfinished_block(
411
385
  signage_point.rc_vdf,
412
386
  rc_sp_signature,
413
387
  )
414
- if additions is None:
415
- additions = []
416
- if removals is None:
417
- removals = []
418
388
  (foliage, foliage_transaction_block, transactions_info) = create_foliage(
419
389
  constants,
420
390
  rc_block,
421
- block_generator,
422
- aggregate_sig,
423
- additions,
424
- removals,
391
+ new_block_gen,
425
392
  prev_block,
426
393
  blocks,
427
394
  total_iters_sp,
@@ -431,7 +398,6 @@ def create_unfinished_block(
431
398
  get_plot_signature,
432
399
  get_pool_signature,
433
400
  seed,
434
- compute_cost,
435
401
  compute_fees,
436
402
  )
437
403
  return UnfinishedBlock(
@@ -442,8 +408,8 @@ def create_unfinished_block(
442
408
  foliage,
443
409
  foliage_transaction_block,
444
410
  transactions_info,
445
- block_generator.program if block_generator else None,
446
- [], # generator_refs
411
+ new_block_gen.program if new_block_gen else None,
412
+ new_block_gen.block_refs if new_block_gen else [],
447
413
  )
448
414
 
449
415
 
@@ -4,30 +4,34 @@ import logging
4
4
  import time
5
5
  from typing import Optional
6
6
 
7
- from chia_rs import AugSchemeMPL, ConsensusConstants
7
+ from chia_rs import (
8
+ AugSchemeMPL,
9
+ BlockRecord,
10
+ ChallengeChainSubSlot,
11
+ ConsensusConstants,
12
+ EndOfSubSlotBundle,
13
+ HeaderBlock,
14
+ RewardChainSubSlot,
15
+ SubSlotProofs,
16
+ )
8
17
  from chia_rs.sized_bytes import bytes32
9
18
  from chia_rs.sized_ints import uint8, uint32, uint64, uint128
10
19
 
11
- from chia.consensus.block_record import BlockRecord
12
20
  from chia.consensus.blockchain_interface import BlockRecordsProtocol
13
21
  from chia.consensus.deficit import calculate_deficit
14
22
  from chia.consensus.difficulty_adjustment import can_finish_sub_and_full_epoch
15
- from chia.consensus.get_block_challenge import final_eos_is_already_included, get_block_challenge
23
+ from chia.consensus.get_block_challenge import final_eos_is_already_included, get_block_challenge, prev_tx_block
16
24
  from chia.consensus.make_sub_epoch_summary import make_sub_epoch_summary
17
25
  from chia.consensus.pot_iterations import (
18
26
  calculate_ip_iters,
19
- calculate_iterations_quality,
20
27
  calculate_sp_interval_iters,
21
28
  calculate_sp_iters,
22
29
  is_overflow_block,
30
+ validate_pospace_and_get_required_iters,
23
31
  )
24
32
  from chia.consensus.vdf_info_computation import get_signage_point_vdf_info
25
33
  from chia.types.blockchain_format.classgroup import ClassgroupElement
26
- from chia.types.blockchain_format.proof_of_space import verify_and_get_quality_string
27
- from chia.types.blockchain_format.slots import ChallengeChainSubSlot, RewardChainSubSlot, SubSlotProofs
28
34
  from chia.types.blockchain_format.vdf import VDFInfo, VDFProof, validate_vdf
29
- from chia.types.end_of_slot_bundle import EndOfSubSlotBundle
30
- from chia.types.header_block import HeaderBlock
31
35
  from chia.types.unfinished_header_block import UnfinishedHeaderBlock
32
36
  from chia.types.validation_state import ValidationState
33
37
  from chia.util.errors import Err, ValidationError
@@ -58,6 +62,15 @@ def validate_unfinished_header_block(
58
62
  skip_overflow_last_ss_validation must be set to True. This will skip validation of end of slots, sub-epochs,
59
63
  and lead to other small tweaks in validation.
60
64
  """
65
+
66
+ # some of the checks numbers may be out of order this is because all
67
+ # checks need to be valid regardless of order and the numbers are reflecting the numbers as written in the chia docs
68
+
69
+ # 6. check signage point index
70
+ # no need to check negative values as this is uint 8
71
+ if header_block.reward_chain_block.signage_point_index >= constants.NUM_SPS_SUB_SLOT:
72
+ return None, ValidationError(Err.INVALID_SP_INDEX)
73
+
61
74
  # 1. Check that the previous block exists in the blockchain, or that it is correct
62
75
 
63
76
  prev_b = blocks.try_block_record(header_block.prev_header_hash)
@@ -486,25 +499,18 @@ def validate_unfinished_header_block(
486
499
  else:
487
500
  cc_sp_hash = header_block.reward_chain_block.challenge_chain_sp_vdf.output.get_hash()
488
501
 
489
- q_str: Optional[bytes32] = verify_and_get_quality_string(
490
- header_block.reward_chain_block.proof_of_space, constants, challenge, cc_sp_hash, height=height
491
- )
492
- if q_str is None:
493
- return None, ValidationError(Err.INVALID_POSPACE)
494
-
495
- # 6. check signage point index
496
- # no need to check negative values as this is uint 8
497
- if header_block.reward_chain_block.signage_point_index >= constants.NUM_SPS_SUB_SLOT:
498
- return None, ValidationError(Err.INVALID_SP_INDEX)
499
-
500
- # Note that required iters might be from the previous slot (if we are in an overflow block)
501
- required_iters: uint64 = calculate_iterations_quality(
502
- constants.DIFFICULTY_CONSTANT_FACTOR,
503
- q_str,
504
- header_block.reward_chain_block.proof_of_space.size,
505
- expected_vs.difficulty,
502
+ required_iters = validate_pospace_and_get_required_iters(
503
+ constants,
504
+ header_block.reward_chain_block.proof_of_space,
505
+ challenge,
506
506
  cc_sp_hash,
507
+ height,
508
+ expected_vs.difficulty,
509
+ expected_vs.ssi,
510
+ prev_tx_block(blocks, prev_b),
507
511
  )
512
+ if required_iters is None:
513
+ return None, ValidationError(Err.INVALID_POSPACE)
508
514
 
509
515
  # 7. check required iters
510
516
  if required_iters >= calculate_sp_interval_iters(constants, expected_vs.ssi):
@@ -824,7 +830,7 @@ def validate_unfinished_header_block(
824
830
  assert prev_transaction_b.timestamp is not None
825
831
  if header_block.foliage_transaction_block.timestamp <= prev_transaction_b.timestamp:
826
832
  return None, ValidationError(Err.TIMESTAMP_TOO_FAR_IN_PAST)
827
- return required_iters, None # Valid unfinished header block
833
+ return required_iters, None
828
834
 
829
835
 
830
836
  def validate_finished_header_block(
@@ -2,13 +2,10 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Optional
4
4
 
5
- import chia_rs
6
5
  from chia_rs.sized_bytes import bytes32
7
6
  from chia_rs.sized_ints import uint32, uint64
8
7
  from typing_extensions import Protocol
9
8
 
10
- BlockRecord = chia_rs.BlockRecord
11
-
12
9
 
13
10
  class BlockRecordProtocol(Protocol):
14
11
  @property