chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5rc1__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 +421 -69
  63. chia/_tests/core/mempool/test_mempool_performance.py +3 -2
  64. chia/_tests/core/mempool/test_singleton_fast_forward.py +60 -131
  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 +305 -184
  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 +143 -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 +26 -40
  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 +273 -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.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/METADATA +7 -7
  424. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.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.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/LICENSE +0 -0
  452. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/WHEEL +0 -0
  453. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/entry_points.txt +0 -0
@@ -11,6 +11,7 @@ from chia_rs.sized_bytes import bytes32
11
11
 
12
12
  from chia._tests.util.benchmarks import rand_g1, rand_hash
13
13
  from chia.pools.pool_wallet import PoolWallet
14
+ from chia.wallet.wallet_action_scope import WalletActionScope
14
15
 
15
16
 
16
17
  @dataclass
@@ -54,6 +55,14 @@ class MockPoolWalletInfo:
54
55
  current: MockPoolState
55
56
 
56
57
 
58
+ @dataclass
59
+ class MockActionScope:
60
+ payout_instructions_ph: bytes32
61
+
62
+ async def get_puzzle_hash(self, wallet_state_manager: Any) -> bytes32:
63
+ return self.payout_instructions_ph
64
+
65
+
57
66
  @pytest.mark.anyio
58
67
  async def test_update_pool_config_new_config(monkeypatch: Any) -> None:
59
68
  """
@@ -108,7 +117,7 @@ async def test_update_pool_config_new_config(monkeypatch: Any) -> None:
108
117
  wallet_id=MagicMock(),
109
118
  )
110
119
 
111
- await wallet.update_pool_config()
120
+ await wallet.update_pool_config(cast(WalletActionScope, MockActionScope(payout_instructions_ph)))
112
121
 
113
122
  assert len(updated_configs) == 1
114
123
  assert updated_configs[0].launcher_id == launcher_id
@@ -191,7 +200,7 @@ async def test_update_pool_config_existing_payout_instructions(monkeypatch: Any)
191
200
  wallet_id=MagicMock(),
192
201
  )
193
202
 
194
- await wallet.update_pool_config()
203
+ await wallet.update_pool_config(MagicMock())
195
204
 
196
205
  assert len(updated_configs) == 1
197
206
  assert updated_configs[0].launcher_id == launcher_id
@@ -5,6 +5,7 @@ from dataclasses import dataclass, field
5
5
  from typing import Optional
6
6
 
7
7
  import pytest
8
+ from chia_rs import CoinSpend
8
9
  from chia_rs.sized_bytes import bytes32
9
10
  from chia_rs.sized_ints import uint32, uint64
10
11
  from clvm_tools import binutils
@@ -12,8 +13,8 @@ from clvm_tools import binutils
12
13
  from chia._tests.util.db_connection import DBConnection
13
14
  from chia.types.blockchain_format.coin import Coin
14
15
  from chia.types.blockchain_format.program import Program
15
- from chia.types.blockchain_format.serialized_program import SerializedProgram
16
- from chia.types.coin_spend import CoinSpend, compute_additions, make_spend
16
+ from chia.types.coin_spend import make_spend
17
+ from chia.wallet.util.compute_additions import compute_additions
17
18
  from chia.wallet.wallet_pool_store import WalletPoolStore
18
19
 
19
20
 
@@ -30,8 +31,8 @@ def make_child_solution(
30
31
  new_coin = compute_additions(coin_spend)[0]
31
32
  sol: CoinSpend = make_spend(
32
33
  new_coin,
33
- SerializedProgram.from_program(puzzle_prog),
34
- SerializedProgram.from_program(solution_prog),
34
+ puzzle_prog,
35
+ solution_prog,
35
36
  )
36
37
  return sol
37
38
 
@@ -9,9 +9,9 @@ import pytest
9
9
  from chia_rs.sized_ints import uint16
10
10
 
11
11
  from chia._tests.util.misc import Marks, RecordingWebServer, datacases
12
+ from chia.protocols.outbound_message import NodeType
12
13
  from chia.rpc.rpc_client import ResponseFailureError, RpcClient
13
14
  from chia.rpc.rpc_server import RpcServer
14
- from chia.server.outbound_message import NodeType
15
15
 
16
16
  non_fetch_client_methods = {
17
17
  RpcClient.create,
@@ -10,6 +10,7 @@ import dns.rdatatype
10
10
  import dns.rdtypes.IN.A
11
11
  import dns.rdtypes.IN.AAAA
12
12
  import pytest
13
+ from chia_rs import BlockRecord
13
14
  from chia_rs.sized_bytes import bytes32
14
15
  from chia_rs.sized_ints import uint8, uint16, uint32, uint64
15
16
 
@@ -17,12 +18,11 @@ from chia._tests.core.node_height import node_height_at_least
17
18
  from chia._tests.util.setup_nodes import FullSystem, OldSimulatorsAndWallets
18
19
  from chia._tests.util.time_out_assert import time_out_assert
19
20
  from chia.cmds.units import units
20
- from chia.consensus.block_record import BlockRecord
21
21
  from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
22
22
  from chia.daemon.server import WebSocketServer
23
23
  from chia.full_node.full_node import FullNode
24
24
  from chia.full_node.full_node_api import FullNodeAPI
25
- from chia.server.outbound_message import NodeType
25
+ from chia.protocols.outbound_message import NodeType
26
26
  from chia.server.server import ChiaServer
27
27
  from chia.simulator.block_tools import BlockTools, create_block_tools_async, test_constants
28
28
  from chia.simulator.full_node_simulator import FullNodeSimulator
@@ -43,10 +43,11 @@ test_constants_modified = test_constants.replace(
43
43
  WEIGHT_PROOF_THRESHOLD=uint8(2),
44
44
  WEIGHT_PROOF_RECENT_BLOCKS=uint32(350),
45
45
  MAX_SUB_SLOT_BLOCKS=uint32(50),
46
- NUM_SPS_SUB_SLOT=uint32(32), # Must be a power of 2
46
+ NUM_SPS_SUB_SLOT=uint8(32), # Must be a power of 2
47
47
  EPOCH_BLOCKS=uint32(280),
48
48
  SUB_SLOT_ITERS_STARTING=uint64(2**20),
49
- NUMBER_ZERO_BITS_PLOT_FILTER=uint8(5),
49
+ NUMBER_ZERO_BITS_PLOT_FILTER_V1=uint8(5),
50
+ NUMBER_ZERO_BITS_PLOT_FILTER_V2=uint8(5),
50
51
  )
51
52
 
52
53
 
@@ -211,7 +212,9 @@ class TestSimulation:
211
212
  wallet_node, server_2 = wallets[0]
212
213
  wallet_node_2, _server_3 = wallets[1]
213
214
  wallet = wallet_node.wallet_state_manager.main_wallet
214
- ph = await wallet.get_new_puzzlehash()
215
+ wallet_2 = wallet_node_2.wallet_state_manager.main_wallet
216
+ async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
217
+ ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
215
218
  wallet_node.config["trusted_peers"] = {}
216
219
  wallet_node_2.config["trusted_peers"] = {}
217
220
 
@@ -227,10 +230,12 @@ class TestSimulation:
227
230
 
228
231
  await time_out_assert(10, wallet.get_confirmed_balance, funds)
229
232
  await time_out_assert(5, wallet.get_unconfirmed_balance, funds)
233
+ async with wallet_2.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
234
+ ph_2 = await action_scope.get_puzzle_hash(wallet_2.wallet_state_manager)
230
235
  async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
231
236
  await wallet.generate_signed_transaction(
232
237
  [uint64(10)],
233
- [await wallet_node_2.wallet_state_manager.main_wallet.get_new_puzzlehash()],
238
+ [ph_2],
234
239
  action_scope,
235
240
  uint64(0),
236
241
  )
@@ -406,7 +411,7 @@ class TestSimulation:
406
411
  async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
407
412
  await wallet.generate_signed_transaction(
408
413
  amounts=[uint64(tx_amount)],
409
- puzzle_hashes=[await wallet_node.wallet_state_manager.main_wallet.get_new_puzzlehash()],
414
+ puzzle_hashes=[await action_scope.get_puzzle_hash(wallet.wallet_state_manager)],
410
415
  action_scope=action_scope,
411
416
  coins={coin},
412
417
  )
@@ -455,7 +460,7 @@ class TestSimulation:
455
460
  for coin in coins:
456
461
  await wallet.generate_signed_transaction(
457
462
  amounts=[uint64(tx_amount)],
458
- puzzle_hashes=[await wallet_node.wallet_state_manager.main_wallet.get_new_puzzlehash()],
463
+ puzzle_hashes=[await action_scope.get_puzzle_hash(wallet.wallet_state_manager)],
459
464
  action_scope=action_scope,
460
465
  coins={coin},
461
466
  )
@@ -128,7 +128,7 @@ async def test_wait_transaction_records_entered_mempool(
128
128
  async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
129
129
  await wallet.generate_signed_transaction(
130
130
  amounts=[uint64(tx_amount)],
131
- puzzle_hashes=[await wallet_node.wallet_state_manager.main_wallet.get_new_puzzlehash()],
131
+ puzzle_hashes=[await action_scope.get_puzzle_hash(wallet.wallet_state_manager)],
132
132
  action_scope=action_scope,
133
133
  coins={coin},
134
134
  )
@@ -164,7 +164,7 @@ async def test_process_transaction_records(
164
164
  async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
165
165
  await wallet.generate_signed_transaction(
166
166
  amounts=[uint64(tx_amount)],
167
- puzzle_hashes=[await wallet_node.wallet_state_manager.main_wallet.get_new_puzzlehash()],
167
+ puzzle_hashes=[await action_scope.get_puzzle_hash(wallet.wallet_state_manager)],
168
168
  action_scope=action_scope,
169
169
  coins={coin},
170
170
  )
@@ -3,65 +3,94 @@ from __future__ import annotations
3
3
  from typing import Optional
4
4
 
5
5
  import pytest
6
+ from chia_rs import BlockRecord, FullBlock, SubEpochSummary, UnfinishedBlock
6
7
  from chia_rs.sized_bytes import bytes32
7
- from chia_rs.sized_ints import uint128
8
+ from chia_rs.sized_ints import uint64, uint128
8
9
 
9
10
  from chia._tests.blockchain.blockchain_test_utils import _validate_and_add_block
10
11
  from chia._tests.util.blockchain import create_blockchain
11
12
  from chia._tests.util.time_out_assert import time_out_assert
12
- from chia.consensus.block_record import BlockRecord
13
13
  from chia.consensus.blockchain import Blockchain
14
14
  from chia.consensus.difficulty_adjustment import get_next_sub_slot_iters_and_difficulty
15
15
  from chia.consensus.make_sub_epoch_summary import next_sub_epoch_summary
16
16
  from chia.protocols import timelord_protocol
17
+ from chia.server.aliases import FullNodeService
17
18
  from chia.server.server import ChiaServer
18
19
  from chia.simulator.block_tools import BlockTools
19
20
  from chia.simulator.full_node_simulator import FullNodeSimulator
21
+ from chia.simulator.wallet_tools import WalletTool
20
22
  from chia.timelord.timelord_api import TimelordAPI
21
- from chia.types.aliases import FullNodeService
22
- from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
23
- from chia.types.full_block import FullBlock
24
- from chia.types.unfinished_block import UnfinishedBlock
25
23
 
26
24
 
27
25
  class TestNewPeak:
28
26
  @pytest.mark.anyio
29
27
  async def test_timelord_new_peak_basic(
30
- self, bt: BlockTools, timelord: tuple[TimelordAPI, ChiaServer], default_1000_blocks: list[FullBlock]
28
+ self,
29
+ timelord: tuple[TimelordAPI, ChiaServer],
30
+ default_1000_blocks: list[FullBlock],
31
+ one_node: tuple[list[FullNodeService], list[FullNodeSimulator], BlockTools],
31
32
  ) -> None:
33
+ [full_node_service], _, bt = one_node
34
+ full_node = full_node_service._node
32
35
  async with create_blockchain(bt.constants, 2) as (b1, _):
33
36
  async with create_blockchain(bt.constants, 2) as (b2, _):
34
37
  timelord_api, _ = timelord
35
38
  for block in default_1000_blocks:
36
39
  await _validate_and_add_block(b1, block)
37
40
  await _validate_and_add_block(b2, block)
41
+ await full_node.add_block(block)
38
42
 
39
43
  peak = timelord_peak_from_block(b1, default_1000_blocks[-1])
40
44
  assert peak is not None
41
45
  assert timelord_api.timelord.new_peak is None
42
46
  await timelord_api.new_peak_timelord(peak)
43
- assert timelord_api.timelord.new_peak is not None
44
- assert timelord_api.timelord.new_peak.reward_chain_block.height == peak.reward_chain_block.height
47
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
48
+ assert timelord_api.timelord.last_state.peak is not None
49
+ assert (
50
+ timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
51
+ == peak.reward_chain_block.get_hash()
52
+ )
45
53
  blocks = bt.get_consecutive_blocks(1, default_1000_blocks)
46
54
  await _validate_and_add_block(b1, blocks[-1])
47
55
  await _validate_and_add_block(b2, blocks[-1])
48
56
 
49
57
  await timelord_api.new_peak_timelord(timelord_peak_from_block(b1, blocks[-1]))
50
- assert timelord_api.timelord.new_peak.reward_chain_block.height == blocks[-1].height
58
+ await full_node.add_block(blocks[-1])
59
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
60
+ assert timelord_api.timelord.last_state.peak is not None
61
+ assert (
62
+ timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
63
+ == blocks[-1].reward_chain_block.get_hash()
64
+ )
65
+ fn_peak = full_node.blockchain.get_peak()
66
+ assert fn_peak is not None and fn_peak.header_hash == blocks[-1].header_hash
51
67
 
52
68
  blocks_1 = bt.get_consecutive_blocks(2, blocks)
53
69
  await _validate_and_add_block(b1, blocks_1[-2])
54
70
  await _validate_and_add_block(b1, blocks_1[-1])
55
71
  await timelord_api.new_peak_timelord(timelord_peak_from_block(b1, blocks_1[-2]))
72
+ await full_node.add_block(blocks_1[-2])
56
73
  await timelord_api.new_peak_timelord(timelord_peak_from_block(b1, blocks_1[-1]))
57
- assert timelord_api.timelord.new_peak.reward_chain_block.height == blocks_1[-1].height
74
+ await full_node.add_block(blocks_1[-1])
75
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
76
+ assert timelord_api.timelord.last_state.peak is not None
77
+ assert (
78
+ timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
79
+ == blocks_1[-1].reward_chain_block.get_hash()
80
+ )
81
+ fn_peak = full_node.blockchain.get_peak()
82
+ assert fn_peak is not None and fn_peak.header_hash == blocks_1[-1].header_hash
58
83
 
59
84
  # new unknown peak, weight less then curr peak
60
85
  blocks_2 = bt.get_consecutive_blocks(1, blocks)
61
86
  await _validate_and_add_block(b2, blocks_2[-1])
62
87
  await timelord_api.new_peak_timelord(timelord_peak_from_block(b2, blocks_2[-1]))
88
+ await full_node.add_block(blocks_2[-1])
89
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
63
90
  assert timelord_api.timelord.last_state.last_weight == blocks_1[-1].weight
64
91
  assert timelord_api.timelord.last_state.total_iters == blocks_1[-1].reward_chain_block.total_iters
92
+ fn_peak = full_node.blockchain.get_peak()
93
+ assert fn_peak is not None and fn_peak.header_hash == blocks_1[-1].header_hash
65
94
 
66
95
  @pytest.mark.anyio
67
96
  async def test_timelord_new_peak_unfinished_not_orphaned(
@@ -87,14 +116,11 @@ class TestNewPeak:
87
116
  await _validate_and_add_block(b1, block_2)
88
117
 
89
118
  block_record = b1.block_record(block_2.header_hash)
90
- sub_slot_iters, difficulty = get_next_sub_slot_iters_and_difficulty(
91
- bt.constants, len(block_1.finished_sub_slots) > 0, b1.block_record(block_1.prev_header_hash), b1
92
- )
93
119
 
94
120
  timelord_unf_block = timelord_protocol.NewUnfinishedBlockTimelord(
95
121
  block_1.reward_chain_block.get_unfinished(),
96
- difficulty,
97
- sub_slot_iters,
122
+ uint64(block_record.weight - default_1000_blocks[-1].weight),
123
+ block_record.sub_slot_iters,
98
124
  block_1.foliage,
99
125
  next_sub_epoch_summary(bt.constants, b1, block_record.required_iters, block_1, True),
100
126
  await get_rc_prev(b1, block_1),
@@ -106,7 +132,7 @@ class TestNewPeak:
106
132
  assert timelord_unf_block.reward_chain_block.total_iters <= new_peak.reward_chain_block.total_iters
107
133
  await timelord_api.new_peak_timelord(new_peak)
108
134
 
109
- await time_out_assert(60, peak_new_peak_is_none, True, timelord_api)
135
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
110
136
 
111
137
  assert (
112
138
  timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
@@ -135,8 +161,11 @@ class TestNewPeak:
135
161
  assert timelord_api.timelord.new_peak is None
136
162
  await timelord_api.new_peak_timelord(peak)
137
163
  assert timelord_api.timelord.new_peak is not None
164
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
165
+ assert timelord_api.timelord.last_state.peak is not None
138
166
  assert (
139
- timelord_api.timelord.new_peak.reward_chain_block.get_hash() == peak.reward_chain_block.get_hash()
167
+ timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
168
+ == peak.reward_chain_block.get_hash()
140
169
  )
141
170
 
142
171
  # make two new blocks on tip, block_2 has higher total iterations
@@ -154,17 +183,11 @@ class TestNewPeak:
154
183
  await _validate_and_add_block(b2, block_2)
155
184
 
156
185
  block_record_1 = b1.block_record(block_1.header_hash)
157
- sub_slot_iters, difficulty = get_next_sub_slot_iters_and_difficulty(
158
- bt.constants,
159
- len(block_1.finished_sub_slots) > 0,
160
- b1.block_record(block_1.prev_header_hash),
161
- b1,
162
- )
163
186
 
164
187
  timelord_unf_block = timelord_protocol.NewUnfinishedBlockTimelord(
165
188
  block_1.reward_chain_block.get_unfinished(),
166
- difficulty,
167
- sub_slot_iters,
189
+ uint64(block_record_1.weight - default_1000_blocks[-1].weight),
190
+ block_record_1.sub_slot_iters,
168
191
  block_1.foliage,
169
192
  next_sub_epoch_summary(bt.constants, b1, block_record_1.required_iters, block_1, True),
170
193
  await get_rc_prev(b1, block_1),
@@ -177,7 +200,7 @@ class TestNewPeak:
177
200
  # add block_2 peak and make sure we skip it and prefer to finish block_1
178
201
  assert timelord_unf_block.reward_chain_block.total_iters <= new_peak.reward_chain_block.total_iters
179
202
  await timelord_api.new_peak_timelord(new_peak)
180
- await time_out_assert(60, peak_new_peak_is_none, True, timelord_api)
203
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
181
204
 
182
205
  # check that peak did not change
183
206
  assert (
@@ -238,15 +261,22 @@ class TestNewPeak:
238
261
  assert peak is not None
239
262
  assert timelord_api.timelord.new_peak is None
240
263
  await timelord_api.new_peak_timelord(peak)
241
- assert timelord_api.timelord.new_peak is not None
264
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
265
+ assert timelord_api.timelord.last_state.peak is not None
242
266
  assert (
243
- timelord_api.timelord.new_peak.reward_chain_block.get_hash() == peak.reward_chain_block.get_hash()
267
+ timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
268
+ == peak.reward_chain_block.get_hash()
244
269
  )
245
270
 
246
271
  # make two new blocks on tip
247
272
  block_1 = bt.get_consecutive_blocks(1, default_1000_blocks, time_per_block=9, force_overflow=True)[-1]
248
273
  block_2 = bt.get_consecutive_blocks(
249
- 1, default_1000_blocks, seed=b"data", time_per_block=50, skip_slots=1
274
+ 1,
275
+ default_1000_blocks,
276
+ seed=b"data",
277
+ time_per_block=50,
278
+ skip_slots=1,
279
+ min_signage_point=block_1.reward_chain_block.signage_point_index,
250
280
  )[-1]
251
281
  # make sure block_2 has higher iterations
252
282
  assert block_2.total_iters >= block_1.total_iters
@@ -275,9 +305,10 @@ class TestNewPeak:
275
305
  assert timelord_api.timelord.overflow_blocks[-1].get_hash() == timelord_unf_block.get_hash()
276
306
  new_peak = timelord_peak_from_block(b2, block_2)
277
307
  assert timelord_unf_block.reward_chain_block.total_iters <= new_peak.reward_chain_block.total_iters
308
+ assert block_1.reward_chain_block.get_hash() != new_peak.reward_chain_block.get_hash()
278
309
  await timelord_api.new_peak_timelord(new_peak)
279
310
 
280
- await time_out_assert(60, peak_new_peak_is_none, True, timelord_api)
311
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
281
312
 
282
313
  assert (
283
314
  timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
@@ -286,22 +317,30 @@ class TestNewPeak:
286
317
 
287
318
  @pytest.mark.anyio
288
319
  async def test_timelord_new_peak_unfinished_eos(
289
- self, bt: BlockTools, timelord: tuple[TimelordAPI, ChiaServer], default_1000_blocks: list[FullBlock]
320
+ self,
321
+ one_node: tuple[list[FullNodeService], list[FullNodeSimulator], BlockTools],
322
+ timelord: tuple[TimelordAPI, ChiaServer],
323
+ default_1000_blocks: list[FullBlock],
290
324
  ) -> None:
325
+ [full_node_service], _, bt = one_node
326
+ full_node = full_node_service._node
291
327
  async with create_blockchain(bt.constants, 2) as (b1, _):
292
328
  async with create_blockchain(bt.constants, 2) as (b2, _):
293
329
  timelord_api, _ = timelord
294
330
  for block in default_1000_blocks:
295
331
  await _validate_and_add_block(b1, block)
296
332
  await _validate_and_add_block(b2, block)
333
+ await full_node.add_block(block)
297
334
 
298
335
  peak = timelord_peak_from_block(b1, default_1000_blocks[-1])
299
336
  assert peak is not None
300
337
  assert timelord_api.timelord.new_peak is None
301
338
  await timelord_api.new_peak_timelord(peak)
302
- assert timelord_api.timelord.new_peak is not None
339
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
340
+ assert timelord_api.timelord.last_state.peak is not None
303
341
  assert (
304
- timelord_api.timelord.new_peak.reward_chain_block.get_hash() == peak.reward_chain_block.get_hash()
342
+ timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
343
+ == peak.reward_chain_block.get_hash()
305
344
  )
306
345
 
307
346
  # make two new blocks on tip, block_2 is in a new slot
@@ -315,19 +354,15 @@ class TestNewPeak:
315
354
 
316
355
  await _validate_and_add_block(b1, block_1)
317
356
  await _validate_and_add_block(b2, block_2)
357
+ await full_node.add_block(block_2)
358
+ fn_peak = full_node.blockchain.get_peak()
359
+ assert fn_peak is not None and fn_peak.header_hash == block_2.header_hash
318
360
 
319
361
  block_record = b2.block_record(block_2.header_hash)
320
- sub_slot_iters, difficulty = get_next_sub_slot_iters_and_difficulty(
321
- bt.constants,
322
- len(block_2.finished_sub_slots) > 0,
323
- b1.block_record(block_2.prev_header_hash),
324
- b1,
325
- )
326
-
327
362
  timelord_unf_block = timelord_protocol.NewUnfinishedBlockTimelord(
328
363
  block_2.reward_chain_block.get_unfinished(),
329
- difficulty,
330
- sub_slot_iters,
364
+ uint64(block_record.weight - default_1000_blocks[-1].weight),
365
+ block_record.sub_slot_iters,
331
366
  block_2.foliage,
332
367
  next_sub_epoch_summary(bt.constants, b1, block_record.required_iters, block_2, True),
333
368
  await get_rc_prev(b2, block_2),
@@ -340,7 +375,8 @@ class TestNewPeak:
340
375
  new_peak = timelord_peak_from_block(b1, block_1)
341
376
  assert timelord_unf_block.reward_chain_block.total_iters >= new_peak.reward_chain_block.total_iters
342
377
  await timelord_api.new_peak_timelord(new_peak)
343
- await time_out_assert(60, peak_new_peak_is_none, True, timelord_api)
378
+ await full_node.add_block(block_1)
379
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
344
380
 
345
381
  # make sure we switch to lower iteration peak
346
382
  assert (
@@ -348,6 +384,9 @@ class TestNewPeak:
348
384
  == new_peak.reward_chain_block.get_hash()
349
385
  )
350
386
 
387
+ fn_peak = full_node.blockchain.get_peak()
388
+ assert fn_peak is not None and fn_peak.header_hash == block_1.header_hash
389
+
351
390
  @pytest.mark.anyio
352
391
  async def test_timelord_new_peak_node_sync(
353
392
  self,
@@ -373,7 +412,7 @@ class TestNewPeak:
373
412
  assert (
374
413
  timelord_api.timelord.new_peak.reward_chain_block.get_hash() == peak.reward_chain_block.get_hash()
375
414
  )
376
- await time_out_assert(60, peak_new_peak_is_none, True, timelord_api)
415
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
377
416
  # make two new blocks on tip, block_2 has higher total iterations
378
417
  block_1 = bt.get_consecutive_blocks(1, default_1000_blocks)[-1]
379
418
  block_2 = bt.get_consecutive_blocks(
@@ -394,7 +433,7 @@ class TestNewPeak:
394
433
  assert timelord_api.timelord.new_peak is not None
395
434
  assert peak.header_hash == block_2.header_hash
396
435
  assert peak_tl.reward_chain_block.get_hash() == peak.reward_chain_block.get_hash()
397
- await time_out_assert(60, peak_new_peak_is_none, True, timelord_api)
436
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
398
437
 
399
438
  await full_node.add_block(block_1)
400
439
  await _validate_and_add_block(b1, block_1)
@@ -406,6 +445,111 @@ class TestNewPeak:
406
445
  peak_tl = timelord_api.timelord.new_peak
407
446
  assert peak_tl.reward_chain_block.get_hash() == peak.reward_chain_block.get_hash()
408
447
 
448
+ @pytest.mark.anyio
449
+ @pytest.mark.parametrize("different_foliage", [False, True])
450
+ async def test_timelord_new_peak_is_in_unfinished_cache(
451
+ self,
452
+ one_node: tuple[list[FullNodeService], list[FullNodeSimulator], BlockTools],
453
+ timelord: tuple[TimelordAPI, ChiaServer],
454
+ default_1000_blocks: list[FullBlock],
455
+ different_foliage: bool,
456
+ ) -> None:
457
+ _, _, bt = one_node
458
+ wallet = WalletTool(bt.constants)
459
+ coinbase_puzzlehash = wallet.get_new_puzzlehash()
460
+ timelord_api, _ = timelord
461
+ blocks = bt.get_consecutive_blocks(
462
+ num_blocks=10,
463
+ block_list_input=default_1000_blocks,
464
+ skip_overflow=True,
465
+ force_overflow=False,
466
+ farmer_reward_puzzle_hash=coinbase_puzzlehash,
467
+ guarantee_transaction_block=True,
468
+ )
469
+ async with create_blockchain(bt.constants, 2) as (b1, _):
470
+ for block in blocks:
471
+ await _validate_and_add_block(b1, block)
472
+
473
+ peak = timelord_peak_from_block(b1, blocks[-1])
474
+ assert peak is not None and timelord_api.timelord.new_peak is None
475
+ await timelord_api.new_peak_timelord(peak)
476
+ assert timelord_api.timelord.new_peak is not None
477
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
478
+ assert (
479
+ timelord_api.timelord.last_state.peak is not None
480
+ and timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
481
+ == peak.reward_chain_block.get_hash()
482
+ )
483
+
484
+ block_1 = bt.get_consecutive_blocks(
485
+ block_list_input=blocks,
486
+ num_blocks=1,
487
+ farmer_reward_puzzle_hash=coinbase_puzzlehash,
488
+ guarantee_transaction_block=True,
489
+ skip_overflow=True,
490
+ )[-1]
491
+
492
+ await _validate_and_add_block(b1, block_1)
493
+ block_record_1 = b1.block_record(block_1.header_hash)
494
+ if len(block_1.finished_sub_slots) > 0:
495
+ timelord_api.timelord.last_state.set_state(block_1.finished_sub_slots[-1])
496
+
497
+ block_1_diffrent_foliage = None
498
+ if not different_foliage:
499
+ timelord_unf_block = timelord_protocol.NewUnfinishedBlockTimelord(
500
+ block_1.reward_chain_block.get_unfinished(),
501
+ uint64(block_record_1.weight - blocks[-1].weight),
502
+ block_record_1.sub_slot_iters,
503
+ block_1.foliage,
504
+ next_sub_epoch_summary(bt.constants, b1, block_record_1.required_iters, block_1, True),
505
+ await get_rc_prev(b1, block_1),
506
+ )
507
+ else:
508
+ spend_coin = None
509
+ for coin in blocks[-8].get_included_reward_coins():
510
+ if coin.puzzle_hash == coinbase_puzzlehash:
511
+ spend_coin = coin
512
+
513
+ assert spend_coin is not None
514
+ sb = wallet.generate_signed_transaction(uint64(1000), bytes32(b"0" * 32), spend_coin)
515
+ block_1_diffrent_foliage = bt.get_consecutive_blocks(
516
+ block_list_input=blocks,
517
+ num_blocks=1,
518
+ farmer_reward_puzzle_hash=coinbase_puzzlehash,
519
+ guarantee_transaction_block=True,
520
+ transaction_data=sb,
521
+ skip_overflow=True,
522
+ )[-1]
523
+ assert block_1_diffrent_foliage.header_hash != block_1.header_hash
524
+ timelord_unf_block = timelord_protocol.NewUnfinishedBlockTimelord(
525
+ block_1_diffrent_foliage.reward_chain_block.get_unfinished(),
526
+ uint64(block_1_diffrent_foliage.weight - blocks[-1].weight),
527
+ block_record_1.sub_slot_iters,
528
+ block_1_diffrent_foliage.foliage,
529
+ next_sub_epoch_summary(bt.constants, b1, block_record_1.required_iters, block_1, True),
530
+ await get_rc_prev(b1, block_1),
531
+ )
532
+
533
+ await timelord_api.new_unfinished_block_timelord(timelord_unf_block)
534
+ assert timelord_api.timelord.unfinished_blocks[-1].get_hash() == timelord_unf_block.get_hash()
535
+ assert (
536
+ timelord_api.timelord.unfinished_blocks[-1].reward_chain_block.get_hash()
537
+ == timelord_unf_block.reward_chain_block.get_hash()
538
+ )
539
+
540
+ new_peak = timelord_peak_from_block(b1, block_1)
541
+ assert timelord_unf_block.reward_chain_block.total_iters == new_peak.reward_chain_block.total_iters
542
+ await timelord_api.new_peak_timelord(new_peak)
543
+ await time_out_assert(60, tl_new_peak_is_none, True, timelord_api)
544
+
545
+ # check that peak was not skipped
546
+ assert (
547
+ timelord_api.timelord.last_state.peak.reward_chain_block.get_hash()
548
+ == new_peak.reward_chain_block.get_hash()
549
+ )
550
+ # check unfinished block_1 is not in cache
551
+ assert len(timelord_api.timelord.unfinished_blocks) == 0
552
+
409
553
 
410
554
  async def get_rc_prev(blockchain: Blockchain, block: FullBlock) -> bytes32:
411
555
  if block.reward_chain_block.signage_point_index == 0:
@@ -491,5 +635,5 @@ def timelord_peak_from_block(
491
635
  )
492
636
 
493
637
 
494
- def peak_new_peak_is_none(timelord: TimelordAPI) -> bool:
638
+ def tl_new_peak_is_none(timelord: TimelordAPI) -> bool:
495
639
  return timelord.timelord.new_peak is None
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import pytest
4
4
 
5
- from chia.types.aliases import TimelordService
5
+ from chia.server.aliases import TimelordService
6
6
 
7
7
 
8
8
  @pytest.mark.anyio
@@ -1,5 +1,3 @@
1
- #!/usr/bin/env python3
2
-
3
1
  from __future__ import annotations
4
2
 
5
3
  import asyncio
@@ -33,7 +33,9 @@ constants = DEFAULT_CONSTANTS.replace(
33
33
  "d23da14695a188ae5708dd152263c4db883eb27edeb936178d4d988b8f3ce5fc"
34
34
  ),
35
35
  MEMPOOL_BLOCK_BUFFER=uint8(10),
36
- MIN_PLOT_SIZE=uint8(18),
36
+ MIN_PLOT_SIZE_V1=uint8(18),
37
+ # TODO: todo_v2_plots decide on v2 test plot k-size
38
+ MIN_PLOT_SIZE_V2=uint8(18),
37
39
  )
38
40
  retire_bytes = (
39
41
  b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
@@ -115,7 +115,7 @@ if __name__ == "__main__":
115
115
  seeded_random = random.Random()
116
116
  seeded_random.seed(a=0, version=2)
117
117
 
118
- for i in range(0, 1000):
118
+ for i in range(1000):
119
119
  private_key: PrivateKey = master_sk_to_wallet_sk(secret_key, uint32(i))
120
120
  public_key = private_key.get_g1()
121
121
  solution = wallet_tool.make_solution(
@@ -134,7 +134,7 @@ if __name__ == "__main__":
134
134
  # Run Puzzle 1000 times
135
135
  puzzle_start = time.time()
136
136
  clvm_cost = 0
137
- for i in range(0, 1000):
137
+ for i in range(1000):
138
138
  cost_run, _ = puzzles[i].run_with_cost(INFINITE_COST, solutions[i])
139
139
  clvm_cost += cost_run
140
140
 
@@ -152,7 +152,7 @@ if __name__ == "__main__":
152
152
  # Run AggSig 1000 times
153
153
  agg_sig_start = time.time()
154
154
  agg_sig_cost = 0
155
- for i in range(0, 1000):
155
+ for i in range(1000):
156
156
  valid = AugSchemeMPL.verify(public_key, message, signature)
157
157
  assert valid
158
158
  agg_sig_cost += 20