chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5rc2__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 +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 +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 +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.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/METADATA +7 -7
  424. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.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.5rc2.dist-info}/LICENSE +0 -0
  452. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/WHEEL +0 -0
  453. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/entry_points.txt +0 -0
@@ -6,7 +6,7 @@ from collections.abc import AsyncIterator
6
6
  from typing import Optional
7
7
 
8
8
  import pytest
9
- from chia_rs import ConsensusConstants
9
+ from chia_rs import ConsensusConstants, FullBlock, UnfinishedBlock
10
10
  from chia_rs.sized_bytes import bytes32
11
11
  from chia_rs.sized_ints import uint8, uint16, uint32, uint64, uint128
12
12
 
@@ -20,14 +20,12 @@ from chia.consensus.difficulty_adjustment import get_next_sub_slot_iters_and_dif
20
20
  from chia.consensus.find_fork_point import find_fork_point_in_chain
21
21
  from chia.consensus.multiprocess_validation import PreValidationResult
22
22
  from chia.consensus.pot_iterations import is_overflow_block
23
+ from chia.consensus.signage_point import SignagePoint
23
24
  from chia.full_node.full_node_store import FullNodeStore, UnfinishedBlockEntry, find_best_block
24
- from chia.full_node.signage_point import SignagePoint
25
25
  from chia.protocols import timelord_protocol
26
26
  from chia.protocols.timelord_protocol import NewInfusionPointVDF
27
27
  from chia.simulator.block_tools import BlockTools, create_block_tools_async, get_signage_point, make_unfinished_block
28
28
  from chia.simulator.keyring import TempKeyring
29
- from chia.types.full_block import FullBlock
30
- from chia.types.unfinished_block import UnfinishedBlock
31
29
  from chia.util.hash import std_hash
32
30
  from chia.util.recursive_replace import recursive_replace
33
31
 
@@ -675,6 +673,8 @@ async def test_basic_store(
675
673
  )
676
674
  assert sp.cc_vdf is not None
677
675
  saved_sp_hash = sp.cc_vdf.output.get_hash()
676
+ saved_index = uint8(i)
677
+ saved_challenge = sp.cc_vdf.challenge
678
678
  assert store.new_signage_point(uint8(i), blockchain, peak, peak.sub_slot_iters, sp)
679
679
 
680
680
  # Test adding future signage point (bad)
@@ -728,7 +728,10 @@ async def test_basic_store(
728
728
  # Get signage point by hash
729
729
  assert saved_sp_hash is not None
730
730
  assert store.get_signage_point(saved_sp_hash) is not None
731
+ assert store.get_signage_point_by_index_and_cc_output(saved_sp_hash, saved_challenge, saved_index) is not None
732
+
731
733
  assert store.get_signage_point(std_hash(b"2")) is None
734
+ assert store.get_signage_point_by_index_and_cc_output(std_hash(b"2"), saved_challenge, saved_index) is None
732
735
 
733
736
  # Test adding signage points before genesis
734
737
  store.initialize_genesis_sub_slot()
@@ -1026,6 +1029,10 @@ async def test_basic_store(
1026
1029
  assert sp_to_check is not None
1027
1030
  assert sp_to_check.cc_vdf is not None
1028
1031
  fetched = store.get_signage_point(sp_to_check.cc_vdf.output.get_hash())
1032
+ fetched_new = store.get_signage_point_by_index_and_cc_output(
1033
+ sp_to_check.cc_vdf.output.get_hash(), sp_to_check.cc_vdf.challenge, uint8(sp_index)
1034
+ )
1035
+ assert fetched_new == fetched
1029
1036
  assert (fetched is None) == is_none
1030
1037
  if fetched is not None:
1031
1038
  assert fetched == sp_to_check
@@ -5,7 +5,6 @@ import logging
5
5
  import pytest
6
6
  from chia_rs.sized_bytes import bytes32
7
7
  from chia_rs.sized_ints import uint64
8
- from clvm.casts import int_to_bytes
9
8
 
10
9
  from chia._tests.util.db_connection import DBConnection
11
10
  from chia.full_node.hint_store import HintStore
@@ -16,6 +15,7 @@ from chia.simulator.wallet_tools import WalletTool
16
15
  from chia.types.blockchain_format.coin import Coin
17
16
  from chia.types.condition_opcodes import ConditionOpcode
18
17
  from chia.types.condition_with_args import ConditionWithArgs
18
+ from chia.util.casts import int_to_bytes
19
19
 
20
20
  log = logging.getLogger(__name__)
21
21
 
@@ -91,7 +91,7 @@ async def test_duplicates(db_version: int) -> None:
91
91
  hint_0 = 32 * b"\0"
92
92
  coin_id_0 = bytes32(32 * b"\4")
93
93
 
94
- for i in range(0, 2):
94
+ for i in range(2):
95
95
  hints = [(coin_id_0, hint_0), (coin_id_0, hint_0)]
96
96
  await hint_store.add_hints(hints)
97
97
  coins_for_hint_0 = await hint_store.get_coin_ids(hint_0)
@@ -1,15 +1,23 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import contextlib
4
+ import io
3
5
  import math
4
6
  import time
5
7
  from pathlib import Path
6
8
 
7
9
  import pytest
8
- from chia_rs.sized_ints import uint16, uint64
9
-
10
- from chia.server.address_manager import AddressManager, ExtendedPeerInfo
11
- from chia.server.address_manager_store import AddressManagerStore
10
+ from chia_rs.sized_ints import uint16, uint32, uint64
11
+
12
+ from chia.server.address_manager import (
13
+ BUCKET_SIZE,
14
+ NEW_BUCKET_COUNT,
15
+ AddressManager,
16
+ ExtendedPeerInfo,
17
+ )
18
+ from chia.server.address_manager_store import PeerDataSerialization
12
19
  from chia.types.peer_info import PeerInfo, TimestampedPeerInfo
20
+ from chia.util.files import write_file_async
13
21
 
14
22
 
15
23
  class AddressManagerTest(AddressManager):
@@ -526,13 +534,35 @@ class TestPeerManager:
526
534
  await addrman.resolve_tried_collisions()
527
535
  assert await addrman.select_tried_collision() is None
528
536
 
537
+ async def check_retrieved_peers(self, wanted_peers: list[ExtendedPeerInfo], addrman: AddressManager) -> bool:
538
+ retrieved_peers = []
539
+ for _ in range(50):
540
+ peer = await addrman.select_peer()
541
+ if peer not in retrieved_peers:
542
+ retrieved_peers.append(peer)
543
+ if len(retrieved_peers) == 3:
544
+ break
545
+ if len(retrieved_peers) != 3: # pragma: no cover
546
+ return False # pragma: no cover
547
+ recovered = 0
548
+ for target_peer in wanted_peers:
549
+ for current_peer in retrieved_peers:
550
+ if (
551
+ current_peer is not None
552
+ and current_peer.peer_info == target_peer.peer_info
553
+ and current_peer.src == target_peer.src
554
+ and current_peer.timestamp == target_peer.timestamp
555
+ ):
556
+ recovered += 1
557
+ return recovered == 3
558
+
529
559
  @pytest.mark.anyio
530
560
  # use tmp_path pytest fixture to create a temporary directory
531
561
  async def test_serialization(self, tmp_path: Path):
532
562
  addrman = AddressManagerTest()
533
563
  now = int(math.floor(time.time()))
534
564
  t_peer1 = TimestampedPeerInfo("250.7.1.1", uint16(8333), uint64(now - 10000))
535
- t_peer2 = TimestampedPeerInfo("250.7.2.2", uint16(9999), uint64(now - 20000))
565
+ t_peer2 = TimestampedPeerInfo("1050:0000:0000:0000:0005:0600:300c:326b", uint16(9999), uint64(now - 20000))
536
566
  t_peer3 = TimestampedPeerInfo("250.7.3.3", uint16(9999), uint64(now - 30000))
537
567
  source = PeerInfo("252.5.1.1", uint16(8333))
538
568
  await addrman.add_to_new_table([t_peer1, t_peer2, t_peer3], source)
@@ -542,36 +572,84 @@ class TestPeerManager:
542
572
  if peers_dat_filename.exists():
543
573
  peers_dat_filename.unlink()
544
574
  # Write out the serialized peer data
545
- await AddressManagerStore.serialize(addrman, peers_dat_filename)
575
+ serialised_bytes = addrman.serialize_bytes()
576
+ await write_file_async(peers_dat_filename, serialised_bytes, file_mode=0o644)
546
577
  # Read in the serialized peer data
547
- addrman2 = await AddressManagerStore.create_address_manager(peers_dat_filename)
548
-
549
- retrieved_peers = []
550
- for _ in range(50):
551
- peer = await addrman2.select_peer()
552
- if peer not in retrieved_peers:
553
- retrieved_peers.append(peer)
554
- if len(retrieved_peers) == 3:
555
- break
556
- assert len(retrieved_peers) == 3
578
+ addrman2 = await AddressManager.create_address_manager(peers_dat_filename)
557
579
  wanted_peers = [
558
580
  ExtendedPeerInfo(t_peer1, source),
559
581
  ExtendedPeerInfo(t_peer2, source),
560
582
  ExtendedPeerInfo(t_peer3, source),
561
583
  ]
562
- recovered = 0
563
- for target_peer in wanted_peers:
564
- for current_peer in retrieved_peers:
565
- if (
566
- current_peer is not None
567
- and current_peer.peer_info == target_peer.peer_info
568
- and current_peer.src == target_peer.src
569
- and current_peer.timestamp == target_peer.timestamp
570
- ):
571
- recovered += 1
572
- assert recovered == 3
584
+ assert await self.check_retrieved_peers(wanted_peers, addrman2)
573
585
  peers_dat_filename.unlink()
574
586
 
587
+ @pytest.mark.anyio
588
+ async def test_bad_ip_encoding(self, tmp_path: Path):
589
+ addrman = AddressManagerTest()
590
+ now = int(math.floor(time.time()))
591
+ t_peer1 = TimestampedPeerInfo("250.7.1.1", uint16(8333), uint64(now - 10000))
592
+ t_peer2 = TimestampedPeerInfo("1050:0000:0000:0000:0005:0600:300c:326b", uint16(9999), uint64(now - 20000))
593
+ t_peer3 = TimestampedPeerInfo("250.7.3.3", uint16(9999), uint64(now - 30000))
594
+ source = PeerInfo("252.5.1.1", uint16(8333))
595
+ await addrman.add_to_new_table([t_peer1, t_peer2, t_peer3], source)
596
+ await addrman.mark_good(PeerInfo("250.7.1.1", uint16(8333)))
597
+
598
+ peers_dat_filename = tmp_path / "peers.dat"
599
+ with contextlib.suppress(FileNotFoundError):
600
+ peers_dat_filename.unlink()
601
+ # Write out the serialized peer data but use a bad IP type
602
+ out = io.BytesIO()
603
+ nodes = io.BytesIO()
604
+ trieds = io.BytesIO()
605
+ new_table = io.BytesIO()
606
+ unique_ids: dict[int, int] = {}
607
+ count_ids: int = 0
608
+
609
+ for node_id, info in addrman.map_info.items():
610
+ unique_ids[node_id] = count_ids
611
+ if info.ref_count > 0:
612
+ assert count_ids != addrman.new_count
613
+ nodes.write(b"\x02") # this is the bad byte
614
+ nodes.write(info.peer_info._ip._inner.packed)
615
+ info.peer_info.port.stream(nodes)
616
+ uint64(info.timestamp).stream(nodes)
617
+ nodes.write(info.encode_ip_type(info.src._ip))
618
+ nodes.write(info.src._ip._inner.packed)
619
+ info.src.port.stream(nodes)
620
+ count_ids += 1
621
+ if info.is_tried:
622
+ info.stream(nodes)
623
+
624
+ out.write(addrman.key.to_bytes(32, byteorder="big"))
625
+ uint64(count_ids).stream(out)
626
+
627
+ count = 0
628
+ for bucket in range(NEW_BUCKET_COUNT):
629
+ for i in range(BUCKET_SIZE):
630
+ if addrman.new_matrix[bucket][i] != -1:
631
+ count += 1
632
+ uint64(unique_ids[addrman.new_matrix[bucket][i]]).stream(new_table)
633
+ uint64(bucket).stream(new_table)
634
+
635
+ # give ourselves a clue how long the new_table is
636
+ uint32(count).stream(out)
637
+ out.write(new_table.getvalue())
638
+
639
+ out.write(nodes.getvalue())
640
+ out.write(trieds.getvalue())
641
+ await write_file_async(peers_dat_filename, out.getvalue(), file_mode=0o644)
642
+ addrman2 = await AddressManager.create_address_manager(peers_dat_filename)
643
+ assert len(addrman2.map_info) == 0
644
+
645
+ @pytest.mark.anyio
646
+ async def test_load_missing_file(self, tmp_path: Path):
647
+ peers_dat_filename = tmp_path / "peers.dat"
648
+ with contextlib.suppress(FileNotFoundError):
649
+ peers_dat_filename.unlink()
650
+ addrman = await AddressManager.create_address_manager(peers_dat_filename)
651
+ assert isinstance(addrman, AddressManager)
652
+
575
653
  @pytest.mark.anyio
576
654
  async def test_cleanup(self):
577
655
  addrman = AddressManagerTest()
@@ -586,3 +664,98 @@ class TestPeerManager:
586
664
  await addrman.attempt(PeerInfo(peer1.host, peer1.port), True, time.time() - 61)
587
665
  addrman.cleanup(7 * 3600 * 24, 5)
588
666
  assert await addrman.size() == 1
667
+
668
+ @pytest.mark.anyio
669
+ async def test_migration(self, tmp_path):
670
+ # the old serialize function
671
+ async def old_serialize(address_manager: AddressManager, peers_file_path: Path) -> None:
672
+ """
673
+ Serialize the address manager's peer data to a file.
674
+ """
675
+ metadata: list[tuple[str, str]] = []
676
+ nodes: list[tuple[int, ExtendedPeerInfo]] = []
677
+ new_table_entries: list[tuple[int, int]] = []
678
+ unique_ids: dict[int, int] = {}
679
+ count_ids: int = 0
680
+
681
+ metadata.append(("key", str(address_manager.key)))
682
+
683
+ for node_id, info in address_manager.map_info.items():
684
+ unique_ids[node_id] = count_ids
685
+ if info.ref_count > 0:
686
+ assert count_ids != address_manager.new_count
687
+ nodes.append((count_ids, info))
688
+ count_ids += 1
689
+ metadata.append(("new_count", str(count_ids)))
690
+
691
+ tried_ids = 0
692
+ for node_id, info in address_manager.map_info.items():
693
+ if info.is_tried:
694
+ assert info is not None
695
+ assert tried_ids != address_manager.tried_count
696
+ nodes.append((count_ids, info))
697
+ count_ids += 1
698
+ tried_ids += 1
699
+ metadata.append(("tried_count", str(tried_ids)))
700
+
701
+ for bucket in range(NEW_BUCKET_COUNT):
702
+ for i in range(BUCKET_SIZE):
703
+ if address_manager.new_matrix[bucket][i] != -1:
704
+ index = unique_ids[address_manager.new_matrix[bucket][i]]
705
+ new_table_entries.append((index, bucket))
706
+
707
+ # Ensure the parent directory exists
708
+ peers_file_path.parent.mkdir(parents=True, exist_ok=True)
709
+
710
+ transformed_nodes: list[tuple[uint64, str]] = []
711
+ transformed_new_table: list[tuple[uint64, uint64]] = []
712
+
713
+ # these lines used to be in another function that was only called as part of the serialization
714
+ # I've inlined them here for clarity
715
+
716
+ for index, [node_id, peer_info] in enumerate(nodes):
717
+ transformed_nodes.append((uint64(node_id), peer_info.to_string()))
718
+
719
+ for index, [node_id, bucket_id] in enumerate(new_table_entries):
720
+ transformed_new_table.append((uint64(node_id), uint64(bucket_id)))
721
+
722
+ # this was also previously its own function, now inlined
723
+ serialized_bytes: bytes = bytes(PeerDataSerialization(metadata, transformed_nodes, transformed_new_table))
724
+ await write_file_async(peers_file_path, serialized_bytes, file_mode=0o644)
725
+
726
+ # create a file with the old serialization, then migrate to new serialization
727
+ addrman = AddressManagerTest()
728
+ now = int(math.floor(time.time()))
729
+ t_peer1 = TimestampedPeerInfo("250.7.1.1", uint16(8333), uint64(now - 10000))
730
+ t_peer2 = TimestampedPeerInfo("1050:0000:0000:0000:0005:0600:300c:326b", uint16(9999), uint64(now - 20000))
731
+ t_peer3 = TimestampedPeerInfo("250.7.3.3", uint16(9999), uint64(now - 30000))
732
+ source = PeerInfo("252.5.1.1", uint16(8333))
733
+ await addrman.add_to_new_table([t_peer1, t_peer2, t_peer3], source)
734
+ await addrman.mark_good(PeerInfo("250.7.1.1", uint16(8333)))
735
+
736
+ peers_dat_filename = tmp_path / "peers.dat"
737
+ with contextlib.suppress(FileNotFoundError):
738
+ peers_dat_filename.unlink()
739
+ # Write out the serialized peer data in the old format
740
+ await old_serialize(addrman, peers_dat_filename)
741
+
742
+ # Load the old serialization
743
+ addrman2 = await AddressManager.create_address_manager(peers_dat_filename)
744
+ wanted_peers = [
745
+ ExtendedPeerInfo(t_peer1, source),
746
+ ExtendedPeerInfo(t_peer2, source),
747
+ ExtendedPeerInfo(t_peer3, source),
748
+ ]
749
+ assert await self.check_retrieved_peers(wanted_peers, addrman2)
750
+
751
+ # Delete the old serialization
752
+ peers_dat_filename = tmp_path / "peers.dat"
753
+ if peers_dat_filename.exists():
754
+ peers_dat_filename.unlink()
755
+
756
+ # Create the new serialization (this would happen automatically through scheduled task)
757
+ serialised_bytes = addrman.serialize_bytes()
758
+ await write_file_async(peers_dat_filename, serialised_bytes, file_mode=0o644)
759
+ # Load and check the new serialization
760
+ addrman3 = await AddressManager.create_address_manager(peers_dat_filename)
761
+ assert await self.check_retrieved_peers(wanted_peers, addrman3)
@@ -6,12 +6,12 @@ from pathlib import Path
6
6
  from typing import Optional
7
7
 
8
8
  import pytest
9
+ from chia_rs import SubEpochSummary
9
10
  from chia_rs.sized_bytes import bytes32
10
11
  from chia_rs.sized_ints import uint8, uint32
11
12
 
12
13
  from chia._tests.util.db_connection import DBConnection
13
14
  from chia.full_node.block_height_map import BlockHeightMap, SesCache
14
- from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
15
15
  from chia.util.db_wrapper import DBWrapper2
16
16
  from chia.util.files import write_file_async
17
17
 
@@ -511,7 +511,7 @@ class TestBlockHeightMap:
511
511
  assert len(new_heights) == 4000 * 32
512
512
  # pytest doesn't behave very well comparing large buffers
513
513
  # (when the test fails). Compare small portions at a time instead
514
- for idx in range(0, 2000):
514
+ for idx in range(2000):
515
515
  assert new_heights[idx * 32 : idx * 32 + 32] == gen_block_hash(idx)
516
516
 
517
517
 
@@ -9,14 +9,14 @@ import logging
9
9
  from typing import Optional
10
10
 
11
11
  import pytest
12
- from chia_rs import AugSchemeMPL, G2Element
12
+ from chia_rs import AugSchemeMPL, FullBlock, G2Element, SpendBundle
13
13
  from chia_rs.sized_ints import uint32, uint64
14
- from clvm.casts import int_to_bytes
15
14
  from clvm_tools.binutils import assemble
16
15
 
17
16
  from chia._tests.blockchain.blockchain_test_utils import _validate_and_add_block
18
17
  from chia._tests.conftest import ConsensusMode
19
18
  from chia._tests.core.full_node.ram_db import create_ram_blockchain
19
+ from chia.consensus.condition_tools import agg_sig_additional_data
20
20
  from chia.simulator.block_tools import BlockTools
21
21
  from chia.simulator.keyring import TempKeyring
22
22
  from chia.types.blockchain_format.program import Program
@@ -24,9 +24,7 @@ from chia.types.blockchain_format.serialized_program import SerializedProgram
24
24
  from chia.types.coin_record import CoinRecord
25
25
  from chia.types.coin_spend import make_spend
26
26
  from chia.types.condition_opcodes import ConditionOpcode
27
- from chia.types.full_block import FullBlock
28
- from chia.types.spend_bundle import SpendBundle
29
- from chia.util.condition_tools import agg_sig_additional_data
27
+ from chia.util.casts import int_to_bytes
30
28
  from chia.util.errors import Err
31
29
  from chia.wallet.conditions import AssertCoinAnnouncement, AssertPuzzleAnnouncement
32
30
 
@@ -106,7 +104,7 @@ async def check_conditions(
106
104
  blocks = await initial_blocks(bt)
107
105
  coin = blocks[spend_reward_index].get_included_reward_coins()[0]
108
106
 
109
- coin_spend = make_spend(coin, EASY_PUZZLE, SerializedProgram.from_program(condition_solution))
107
+ coin_spend = make_spend(coin, EASY_PUZZLE, condition_solution)
110
108
  spend_bundle = SpendBundle([coin_spend], aggsig)
111
109
 
112
110
  # now let's try to create a block with the spend bundle and ensure that it doesn't validate
@@ -358,6 +356,9 @@ class TestConditions:
358
356
  ("", "(66 0x3f {msg} {coin})", "(67 0x3f {msg} {coin})", 513, Err.TOO_MANY_ANNOUNCEMENTS),
359
357
  ],
360
358
  )
359
+ @pytest.mark.limit_consensus_modes(
360
+ allowed=[ConsensusMode.HARD_FORK_2_0], reason="announce conditions limit was removed in hard-fork 3.0"
361
+ )
361
362
  async def test_announce_conditions_limit(
362
363
  self,
363
364
  consensus_mode: ConsensusMode,