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
@@ -1,11 +1,16 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import pytest
4
+ from chia_rs import Program as SerializedProgram
5
+ from chia_rs import SpendBundleConditions, SpendConditions
3
6
  from chia_rs.sized_bytes import bytes32
4
7
  from chia_rs.sized_ints import uint32, uint64
5
8
 
9
+ from chia.consensus.generator_tools import tx_removals_and_additions
10
+ from chia.full_node.mempool_check_conditions import get_spends_for_block, get_spends_for_block_with_conditions
11
+ from chia.simulator.block_tools import test_constants
6
12
  from chia.types.blockchain_format.coin import Coin
7
- from chia.types.spend_bundle_conditions import SpendBundleConditions, SpendConditions
8
- from chia.util.generator_tools import tx_removals_and_additions
13
+ from chia.types.generator_types import BlockGenerator
9
14
  from chia.util.hash import std_hash
10
15
 
11
16
  coin_ids = [std_hash(i.to_bytes(4, "big")) for i in range(10)]
@@ -36,6 +41,8 @@ spends: list[SpendConditions] = [
36
41
  [],
37
42
  [],
38
43
  0,
44
+ execution_cost=0,
45
+ condition_cost=0,
39
46
  ),
40
47
  SpendConditions(
41
48
  coin_ids[1],
@@ -61,6 +68,8 @@ spends: list[SpendConditions] = [
61
68
  [],
62
69
  [],
63
70
  0,
71
+ execution_cost=0,
72
+ condition_cost=0,
64
73
  ),
65
74
  ]
66
75
 
@@ -81,3 +90,24 @@ def test_tx_removals_and_additions() -> None:
81
90
 
82
91
  def test_empty_conditions() -> None:
83
92
  assert tx_removals_and_additions(None) == ([], [])
93
+
94
+
95
+ # this is a malicious generator which should fail
96
+ TEST_GENERATOR = BlockGenerator(
97
+ SerializedProgram.fromhex(
98
+ "ff02ffff01ff02ffff01ff04ffff04ffff04ffff01a00101010101010101010101010101010101010101010101010101010101010101ffff04ffff04ffff0101ffff02ff02ffff04ff02ffff04ff05ffff04ff0bffff04ff17ff80808080808080ffff01ff7bffff80ffff018080808080ff8080ff8080ffff04ffff01ff02ffff03ff17ffff01ff04ff05ffff04ff0bffff02ff02ffff04ff02ffff04ff05ffff04ff0bffff04ffff11ff17ffff010180ff8080808080808080ff8080ff0180ff018080ffff04ffff01ff42ff24ff8568656c6c6fffa0010101010101010101010101010101010101010101010101010101010101010180ffff04ffff01ff43ff24ff8568656c6c6fffa0010101010101010101010101010101010101010101010101010101010101010180ffff04ffff01830f4240ff0180808080"
99
+ ),
100
+ [],
101
+ )
102
+
103
+
104
+ def test_get_spends_for_block(caplog: pytest.LogCaptureFixture) -> None:
105
+ conditions = get_spends_for_block(TEST_GENERATOR, 100, test_constants)
106
+ assert conditions == []
107
+ assert "get_spends_for_block() encountered a puzzle we couldn't serialize: " in caplog.text
108
+
109
+
110
+ def test_get_spends_for_block_with_conditions(caplog: pytest.LogCaptureFixture) -> None:
111
+ conditions = get_spends_for_block_with_conditions(TEST_GENERATOR, 100, test_constants)
112
+ assert conditions == []
113
+ assert "get_spends_for_block_with_conditions() encountered a puzzle we couldn't serialize: " in caplog.text
@@ -3,11 +3,11 @@ from __future__ import annotations
3
3
  from typing import Optional
4
4
 
5
5
  import pytest
6
+ from chia_rs import BlockRecord
6
7
  from chia_rs.sized_bytes import bytes32
7
8
  from chia_rs.sized_ints import uint32, uint64
8
9
 
9
10
  from chia._tests.blockchain.blockchain_test_utils import _validate_and_add_block
10
- from chia.consensus.block_record import BlockRecord
11
11
  from chia.consensus.blockchain import Blockchain, StateChangeSummary
12
12
  from chia.full_node.hint_management import get_hints_and_subscription_coin_ids
13
13
  from chia.simulator.block_tools import BlockTools
@@ -8,27 +8,26 @@ from chia._tests.util.time_out_assert import time_out_assert
8
8
  from chia.types.peer_info import PeerInfo
9
9
 
10
10
 
11
- class TestNodeLoad:
12
- @pytest.mark.anyio
13
- async def test_blocks_load(self, two_nodes, self_hostname, benchmark_runner: BenchmarkRunner):
14
- num_blocks = 50
15
- full_node_1, full_node_2, server_1, server_2, bt = two_nodes
16
- blocks = bt.get_consecutive_blocks(num_blocks)
17
- await full_node_1.full_node.add_block(blocks[0])
18
- await time_out_assert(10, node_height_at_least, True, full_node_1, 0)
19
- await server_2.start_client(
20
- PeerInfo(self_hostname, server_1.get_port()), on_connect=full_node_2.full_node.on_connect
21
- )
11
+ @pytest.mark.anyio
12
+ async def test_blocks_load(two_nodes, self_hostname, benchmark_runner: BenchmarkRunner):
13
+ num_blocks = 50
14
+ full_node_1, full_node_2, server_1, server_2, bt = two_nodes
15
+ blocks = bt.get_consecutive_blocks(num_blocks)
16
+ await full_node_1.full_node.add_block(blocks[0])
17
+ await time_out_assert(10, node_height_at_least, True, full_node_1, 0)
18
+ await server_2.start_client(
19
+ PeerInfo(self_hostname, server_1.get_port()), on_connect=full_node_2.full_node.on_connect
20
+ )
22
21
 
23
- async def num_connections():
24
- return len(server_2.get_connections())
22
+ async def num_connections():
23
+ return len(server_2.get_connections())
25
24
 
26
- await time_out_assert(10, num_connections, 1)
27
- await time_out_assert(10, node_height_at_least, True, full_node_2, 0)
25
+ await time_out_assert(10, num_connections, 1)
26
+ await time_out_assert(10, node_height_at_least, True, full_node_2, 0)
28
27
 
29
- with benchmark_runner.assert_runtime(seconds=100) as runtime_results_future:
30
- for i in range(1, num_blocks):
31
- await full_node_1.full_node.add_block(blocks[i])
32
- await full_node_2.full_node.add_block(blocks[i])
33
- runtime_results = runtime_results_future.result(timeout=0)
34
- print(f"Time taken to process {num_blocks} is {runtime_results.duration}")
28
+ with benchmark_runner.assert_runtime(seconds=100) as runtime_results_future:
29
+ for i in range(1, num_blocks):
30
+ await full_node_1.full_node.add_block(blocks[i])
31
+ await full_node_2.full_node.add_block(blocks[i])
32
+ runtime_results = runtime_results_future.result(timeout=0)
33
+ print(f"Time taken to process {num_blocks} is {runtime_results.duration}")
@@ -4,20 +4,19 @@ import logging
4
4
  import random
5
5
 
6
6
  import pytest
7
+ from chia_rs import BlockRecord, UnfinishedBlock
7
8
  from chia_rs.sized_ints import uint64
8
- from clvm.casts import int_to_bytes
9
9
 
10
10
  from chia._tests.connection_utils import add_dummy_connection
11
11
  from chia._tests.core.full_node.stores.test_coin_store import get_future_reward_coins
12
12
  from chia._tests.core.node_height import node_height_at_least
13
13
  from chia._tests.util.misc import BenchmarkRunner
14
14
  from chia._tests.util.time_out_assert import time_out_assert
15
- from chia.consensus.block_record import BlockRecord
16
15
  from chia.consensus.pot_iterations import is_overflow_block
17
16
  from chia.protocols import full_node_protocol as fnp
18
17
  from chia.types.condition_opcodes import ConditionOpcode
19
18
  from chia.types.condition_with_args import ConditionWithArgs
20
- from chia.types.unfinished_block import UnfinishedBlock
19
+ from chia.util.casts import int_to_bytes
21
20
 
22
21
  log = logging.getLogger(__name__)
23
22
 
@@ -123,7 +122,7 @@ class TestPerformance:
123
122
  curr: BlockRecord = peak
124
123
  while not curr.is_transaction_block:
125
124
  curr = full_node_1.full_node.blockchain.block_record(curr.prev_hash)
126
- mempool_bundle = await full_node_1.full_node.mempool_manager.create_bundle_from_mempool(curr.header_hash)
125
+ mempool_bundle = full_node_1.full_node.mempool_manager.create_bundle_from_mempool(curr.header_hash)
127
126
  if mempool_bundle is None:
128
127
  spend_bundle = None
129
128
  else:
@@ -0,0 +1,43 @@
1
+ from __future__ import annotations
2
+
3
+ from chia_rs.sized_ints import uint32
4
+
5
+ from chia.consensus.generator_tools import get_block_header
6
+ from chia.consensus.get_block_challenge import prev_tx_block
7
+ from chia.simulator.block_tools import BlockTools, load_block_list
8
+ from chia.util.block_cache import BlockCache
9
+
10
+
11
+ def test_prev_tx_block_none() -> None:
12
+ # If prev_b is None, should return 0
13
+ assert prev_tx_block(BlockCache({}), None) == uint32(0)
14
+
15
+
16
+ def test_prev_tx_block_blockrecord_tx(bt: BlockTools) -> None:
17
+ # If prev_b is BlockRecord and prev_transaction_block_hash is not None, return its height
18
+ block_list = bt.get_consecutive_blocks(
19
+ 10,
20
+ block_list_input=[],
21
+ guarantee_transaction_block=True,
22
+ )
23
+ _, _, blocks = load_block_list(block_list, bt.constants)
24
+ assert prev_tx_block(BlockCache(blocks), block_list[-1]) == uint32(9)
25
+ assert prev_tx_block(BlockCache(blocks), blocks[block_list[-1].header_hash]) == uint32(9)
26
+ assert prev_tx_block(BlockCache(blocks), get_block_header(block_list[-1])) == uint32(9)
27
+
28
+
29
+ def test_prev_tx_block_blockrecord_not_tx(bt: BlockTools) -> None:
30
+ # If prev_b is BlockRecord and prev_transaction_block_hash is not None, return its height
31
+ block_list = bt.get_consecutive_blocks(
32
+ 8,
33
+ block_list_input=[],
34
+ guarantee_transaction_block=True,
35
+ )
36
+ block_list = bt.get_consecutive_blocks(
37
+ 2,
38
+ block_list_input=block_list,
39
+ )
40
+ _, _, blocks = load_block_list(block_list, bt.constants)
41
+ assert prev_tx_block(BlockCache(blocks), block_list[-1]) == uint32(7)
42
+ assert prev_tx_block(BlockCache(blocks), blocks[block_list[-1].header_hash]) == uint32(7)
43
+ assert prev_tx_block(BlockCache(blocks), get_block_header(block_list[-1])) == uint32(7)
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from chia_rs import AugSchemeMPL, Coin, CoinSpend, G2Element, Program
3
+ from chia_rs import AugSchemeMPL, Coin, CoinSpend, G2Element, Program, SpendBundle
4
4
  from chia_rs.sized_bytes import bytes32
5
5
  from chia_rs.sized_ints import uint32, uint64
6
6
 
@@ -9,7 +9,6 @@ from chia.consensus.default_constants import DEFAULT_CONSTANTS
9
9
  from chia.full_node.bundle_tools import simple_solution_generator
10
10
  from chia.full_node.subscriptions import PeerSubscriptions, peers_for_spend_bundle
11
11
  from chia.types.blockchain_format.program import INFINITE_COST
12
- from chia.types.spend_bundle import SpendBundle
13
12
 
14
13
  IDENTITY_PUZZLE = Program.to(1)
15
14
  IDENTITY_PUZZLE_HASH = IDENTITY_PUZZLE.get_tree_hash()
@@ -5,11 +5,11 @@ import random
5
5
  from typing import Optional
6
6
 
7
7
  import pytest
8
+ from chia_rs import BlockRecord
8
9
  from chia_rs.sized_bytes import bytes32
9
10
  from chia_rs.sized_ints import uint32
10
11
 
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.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
14
14
  from chia.full_node.full_node_api import FullNodeAPI
15
15
  from chia.simulator.simulator_protocol import FarmNewBlockProtocol
@@ -25,7 +25,8 @@ async def test_wallet_coinbase(simulator_and_wallet, self_hostname):
25
25
  full_node_server = full_node_api.server
26
26
  wallet_node, server_2 = wallets[0]
27
27
  wallet = wallet_node.wallet_state_manager.main_wallet
28
- ph = await wallet.get_new_puzzlehash()
28
+ async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
29
+ ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
29
30
 
30
31
  await server_2.start_client(PeerInfo(self_hostname, full_node_server.get_port()), None)
31
32
  for i in range(num_blocks):
@@ -54,8 +55,10 @@ async def test_tx_propagation(three_nodes_two_wallets, self_hostname, seeded_ran
54
55
  full_node_api_2 = full_nodes[2]
55
56
  server_2 = full_node_api_2.server
56
57
 
57
- ph = await wallet_0.wallet_state_manager.main_wallet.get_new_puzzlehash()
58
- ph1 = await wallet_1.wallet_state_manager.main_wallet.get_new_puzzlehash()
58
+ async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
59
+ ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
60
+ async with wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
61
+ ph1 = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
59
62
 
60
63
  #
61
64
  # wallet0 <-> sever0 <-> server1 <-> server2 <-> wallet1
@@ -134,7 +137,8 @@ async def test_mempool_tx_sync(three_nodes_two_wallets, self_hostname, seeded_ra
134
137
  full_node_api_2 = full_nodes[2]
135
138
  server_2 = full_node_api_2.server
136
139
 
137
- ph = await wallet_0.wallet_state_manager.main_wallet.get_new_puzzlehash()
140
+ async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
141
+ ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
138
142
 
139
143
  # wallet0 <-> sever0 <-> server1
140
144
 
@@ -9,8 +9,7 @@ from typing import Optional, cast
9
9
  import pytest
10
10
  from chia_rs.sized_bytes import bytes32
11
11
 
12
- from chia.full_node.tx_processing_queue import TransactionQueue, TransactionQueueFull
13
- from chia.types.transaction_queue_entry import TransactionQueueEntry
12
+ from chia.full_node.tx_processing_queue import TransactionQueue, TransactionQueueEntry, TransactionQueueFull
14
13
  from chia.util.task_referencer import create_referenced_task
15
14
 
16
15
  log = logging.getLogger(__name__)
@@ -1,8 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import zstd
4
-
5
- from chia.types.full_block import FullBlock
4
+ from chia_rs import FullBlock
6
5
 
7
6
  LARGE_BLOCK: FullBlock = FullBlock.from_bytes_unchecked(
8
7
  zstd.decompress(
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from chia_rs import G1Element, G2Element, PrivateKey
3
+ from chia_rs import G1Element, G2Element, PrivateKey, SpendBundle
4
4
  from chia_rs.sized_bytes import bytes32
5
5
  from chia_rs.sized_ints import uint64
6
6
 
@@ -11,7 +11,6 @@ from chia.types.blockchain_format.serialized_program import SerializedProgram
11
11
  from chia.types.coin_spend import make_spend
12
12
  from chia.types.condition_opcodes import ConditionOpcode
13
13
  from chia.types.generator_types import BlockGenerator
14
- from chia.types.spend_bundle import SpendBundle
15
14
  from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import puzzle_for_pk, solution_for_conditions
16
15
 
17
16
  GROUP_ORDER = 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001
@@ -25,7 +24,7 @@ def int_to_public_key(index: int) -> G1Element:
25
24
 
26
25
  def puzzle_hash_for_index(index: int, puzzle_hash_db: dict[bytes32, SerializedProgram]) -> bytes32:
27
26
  public_key: G1Element = int_to_public_key(index)
28
- puzzle = SerializedProgram.from_program(puzzle_for_pk(public_key))
27
+ puzzle = puzzle_for_pk(public_key).to_serialized()
29
28
  puzzle_hash: bytes32 = puzzle.get_tree_hash()
30
29
  puzzle_hash_db[puzzle_hash] = puzzle
31
30
  return puzzle_hash
@@ -57,7 +56,7 @@ def make_spend_bundle(count: int) -> SpendBundle:
57
56
  for coin in coins:
58
57
  puzzle_reveal = puzzle_hash_db[coin.puzzle_hash]
59
58
  conditions = conditions_for_payment(coin)
60
- solution = SerializedProgram.from_program(solution_for_conditions(conditions))
59
+ solution = solution_for_conditions(conditions).to_serialized()
61
60
  coin_spend = make_spend(coin, puzzle_reveal, solution)
62
61
  coin_spends.append(coin_spend)
63
62
 
@@ -7,18 +7,18 @@ from typing import Callable, Optional
7
7
 
8
8
  import pytest
9
9
  from chia_rs import (
10
- ELIGIBLE_FOR_FF,
11
- ENABLE_KECCAK,
12
10
  ENABLE_KECCAK_OPS_OUTSIDE_GUARD,
13
11
  AugSchemeMPL,
12
+ CoinSpend,
13
+ FullBlock,
14
14
  G1Element,
15
15
  G2Element,
16
- get_flags_for_height_and_constants,
16
+ SpendBundle,
17
+ SpendBundleConditions,
17
18
  run_block_generator2,
18
19
  )
19
20
  from chia_rs.sized_bytes import bytes32
20
21
  from chia_rs.sized_ints import uint32, uint64
21
- from clvm.casts import int_to_bytes
22
22
  from clvm_tools import binutils
23
23
  from clvm_tools.binutils import assemble
24
24
 
@@ -42,6 +42,7 @@ from chia.consensus.condition_costs import ConditionCost
42
42
  from chia.consensus.cost_calculator import NPCResult
43
43
  from chia.consensus.default_constants import DEFAULT_CONSTANTS
44
44
  from chia.full_node.bitcoin_fee_estimator import create_bitcoin_fee_estimator
45
+ from chia.full_node.eligible_coin_spends import run_for_cost
45
46
  from chia.full_node.fee_estimation import EmptyMempoolInfo, MempoolInfo
46
47
  from chia.full_node.full_node_api import FullNodeAPI
47
48
  from chia.full_node.mempool import Mempool
@@ -49,9 +50,9 @@ from chia.full_node.mempool_check_conditions import get_puzzle_and_solution_for_
49
50
  from chia.full_node.mempool_manager import MEMPOOL_MIN_FEE_INCREASE, LineageInfoCache
50
51
  from chia.full_node.pending_tx_cache import ConflictTxCache, PendingTxCache
51
52
  from chia.protocols import full_node_protocol, wallet_protocol
53
+ from chia.protocols.outbound_message import Message
52
54
  from chia.protocols.wallet_protocol import TransactionAck
53
55
  from chia.server.api_protocol import ApiMetadata
54
- from chia.server.outbound_message import Message
55
56
  from chia.server.server import ChiaServer
56
57
  from chia.server.ws_connection import WSChiaConnection
57
58
  from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
@@ -63,21 +64,19 @@ from chia.types.blockchain_format.coin import Coin
63
64
  from chia.types.blockchain_format.program import Program
64
65
  from chia.types.blockchain_format.serialized_program import SerializedProgram
65
66
  from chia.types.clvm_cost import CLVMCost
66
- from chia.types.coin_spend import CoinSpend, make_spend
67
+ from chia.types.coin_spend import make_spend
67
68
  from chia.types.condition_opcodes import ConditionOpcode
68
69
  from chia.types.condition_with_args import ConditionWithArgs
69
- from chia.types.eligible_coin_spends import UnspentLineageInfo, run_for_cost
70
70
  from chia.types.fee_rate import FeeRate
71
- from chia.types.full_block import FullBlock
72
71
  from chia.types.generator_types import BlockGenerator
73
72
  from chia.types.mempool_inclusion_status import MempoolInclusionStatus
74
- from chia.types.mempool_item import MempoolItem
75
- from chia.types.spend_bundle import SpendBundle, estimate_fees
76
- from chia.types.spend_bundle_conditions import SpendBundleConditions
73
+ from chia.types.mempool_item import MempoolItem, UnspentLineageInfo
74
+ from chia.util.casts import int_to_bytes
77
75
  from chia.util.errors import Err
78
76
  from chia.util.hash import std_hash
79
77
  from chia.util.recursive_replace import recursive_replace
80
78
  from chia.wallet.conditions import AssertCoinAnnouncement, AssertPuzzleAnnouncement
79
+ from chia.wallet.estimate_fees import estimate_fees
81
80
 
82
81
  BURN_PUZZLE_HASH = bytes32(b"0" * 32)
83
82
  BURN_PUZZLE_HASH_2 = bytes32(b"1" * 32)
@@ -1153,7 +1152,7 @@ class TestMempoolManager:
1153
1152
  assert sb1 is None
1154
1153
  assert status == MempoolInclusionStatus.FAILED
1155
1154
 
1156
- for i in range(0, 4):
1155
+ for i in range(4):
1157
1156
  await full_node_1.farm_new_transaction_block(FarmNewBlockProtocol(bytes32(32 * b"0")))
1158
1157
 
1159
1158
  tx2: full_node_protocol.RespondTransaction = full_node_protocol.RespondTransaction(spend_bundle1)
@@ -2864,10 +2863,10 @@ class TestMaliciousGenerators:
2864
2863
  c = cs.coin
2865
2864
  coin_0 = Coin(c.parent_coin_info, bytes32([1] * 32), c.amount)
2866
2865
  coin_spend_0 = make_spend(coin_0, cs.puzzle_reveal, cs.solution)
2867
- new_bundle = recursive_replace(spend_bundle, "coin_spends", [coin_spend_0] + spend_bundle.coin_spends[1:])
2866
+ new_bundle = recursive_replace(spend_bundle, "coin_spends", [coin_spend_0, *spend_bundle.coin_spends[1:]])
2868
2867
  assert spend_bundle is not None
2869
2868
  res = await full_node_1.full_node.add_transaction(new_bundle, new_bundle.name(), test=True)
2870
- assert res == (MempoolInclusionStatus.FAILED, Err.INVALID_SPEND_BUNDLE)
2869
+ assert res == (MempoolInclusionStatus.FAILED, Err.WRONG_PUZZLE_HASH)
2871
2870
 
2872
2871
 
2873
2872
  coins = make_test_coins()
@@ -2932,10 +2931,8 @@ def test_items_by_feerate(items: list[MempoolItem], expected: list[Coin]) -> Non
2932
2931
  last_fpc = mi.fee_per_cost
2933
2932
 
2934
2933
 
2935
- # make sure that after failing to pick 3 fast-forward spends, we skip
2936
- # FF spends
2937
- @pytest.mark.anyio
2938
- async def test_skip_error_items() -> None:
2934
+ @pytest.mark.parametrize("old", [True, False])
2935
+ def test_timeout(old: bool) -> None:
2939
2936
  fee_estimator = create_bitcoin_fee_estimator(uint64(11000000000))
2940
2937
  mempool_info = MempoolInfo(
2941
2938
  CLVMCost(uint64(11000000000 * 3)),
@@ -2944,25 +2941,16 @@ async def test_skip_error_items() -> None:
2944
2941
  )
2945
2942
  mempool = Mempool(mempool_info, fee_estimator)
2946
2943
 
2947
- # all 50 items support fast forward
2948
2944
  for i in range(50):
2949
- item = mk_item(coins[i : i + 1], flags=[ELIGIBLE_FOR_FF], fee=0, cost=50)
2945
+ item = mk_item(coins[i : i + 1], flags=[0], fee=0, cost=50)
2950
2946
  add_info = mempool.add_to_pool(item)
2951
2947
  assert add_info.error is None
2952
2948
 
2953
- called = 0
2954
-
2955
- async def local_get_unspent_lineage_info(ph: bytes32) -> Optional[UnspentLineageInfo]:
2956
- nonlocal called
2957
- called += 1
2958
- raise RuntimeError("failed to find fast forward coin")
2959
-
2960
- result = await mempool.create_block_generator(local_get_unspent_lineage_info, DEFAULT_CONSTANTS, uint32(10))
2961
- assert result is not None
2962
- generator, _, _, _ = result
2949
+ create_block = mempool.create_block_generator if old else mempool.create_block_generator2
2963
2950
 
2964
- assert called == 3
2965
- assert generator.program == SerializedProgram.from_bytes(bytes.fromhex("ff01ff8080"))
2951
+ # the timeout is set to 0, we should *always* fail with a timeout
2952
+ generator = create_block(DEFAULT_CONSTANTS, uint32(10), 0.0)
2953
+ assert generator is None
2966
2954
 
2967
2955
 
2968
2956
  def rand_hash() -> bytes32:
@@ -3146,11 +3134,7 @@ def make_test_spendbundle(coin: Coin, *, fee: int = 0, with_higher_cost: bool =
3146
3134
  return sb
3147
3135
 
3148
3136
 
3149
- @pytest.mark.anyio
3150
- async def test_aggregating_on_a_solution_then_a_more_cost_saving_one_appears() -> None:
3151
- async def get_unspent_lineage_info_for_puzzle_hash(_: bytes32) -> Optional[UnspentLineageInfo]:
3152
- assert False # pragma: no cover
3153
-
3137
+ def test_aggregating_on_a_solution_then_a_more_cost_saving_one_appears() -> None:
3154
3138
  def agg_and_add_sb_returning_cost_info(mempool: Mempool, spend_bundles: list[SpendBundle]) -> uint64:
3155
3139
  sb = SpendBundle.aggregate(spend_bundles)
3156
3140
  mi = mempool_item_from_spendbundle(sb)
@@ -3181,9 +3165,7 @@ async def test_aggregating_on_a_solution_then_a_more_cost_saving_one_appears() -
3181
3165
  sb_low_rate = make_test_spendbundle(coins[2], fee=highest_fee // 5)
3182
3166
  saved_cost_on_solution_A = agg_and_add_sb_returning_cost_info(mempool, [sb_A, sb_low_rate])
3183
3167
  invariant_check_mempool(mempool)
3184
- result = await mempool.create_bundle_from_mempool_items(
3185
- get_unspent_lineage_info_for_puzzle_hash, test_constants, uint32(0)
3186
- )
3168
+ result = mempool.create_bundle_from_mempool_items(test_constants, uint32(0))
3187
3169
  assert result is not None
3188
3170
  agg, _ = result
3189
3171
  # Make sure both items would be processed
@@ -3202,9 +3184,7 @@ async def test_aggregating_on_a_solution_then_a_more_cost_saving_one_appears() -
3202
3184
  # If we process everything now, the 3 x ~3 FPC items get skipped because
3203
3185
  # sb_A1 gets picked before them (~10 FPC), so from then on only sb_A2 (~2 FPC)
3204
3186
  # would get picked
3205
- result = await mempool.create_bundle_from_mempool_items(
3206
- get_unspent_lineage_info_for_puzzle_hash, test_constants, uint32(0)
3207
- )
3187
+ result = mempool.create_bundle_from_mempool_items(test_constants, uint32(0))
3208
3188
  assert result is not None
3209
3189
  agg, _ = result
3210
3190
  # The 3 items got skipped here
@@ -3221,11 +3201,8 @@ def test_get_puzzle_and_solution_for_coin_failure() -> None:
3221
3201
  get_puzzle_and_solution_for_coin(BlockGenerator(SerializedProgram.to(None), []), TEST_COIN, 0, test_constants)
3222
3202
 
3223
3203
 
3224
- @pytest.mark.anyio
3225
- async def test_create_block_generator() -> None:
3226
- async def get_unspent_lineage_info_for_puzzle_hash(_: bytes32) -> Optional[UnspentLineageInfo]:
3227
- assert False # pragma: no cover
3228
-
3204
+ @pytest.mark.parametrize("old", [True, False])
3205
+ def test_create_block_generator(old: bool) -> None:
3229
3206
  mempool_info = MempoolInfo(
3230
3207
  CLVMCost(uint64(11000000000 * 3)),
3231
3208
  FeeRate(uint64(1000000)),
@@ -3247,21 +3224,20 @@ async def test_create_block_generator() -> None:
3247
3224
  mempool.add_to_pool(mi)
3248
3225
  invariant_check_mempool(mempool)
3249
3226
 
3250
- block = await mempool.create_block_generator(get_unspent_lineage_info_for_puzzle_hash, test_constants, uint32(0))
3251
- assert block is not None
3252
- generator, signature, additions, _ = block
3253
-
3254
- assert set(additions) == expected_additions
3227
+ create_block = mempool.create_block_generator if old else mempool.create_block_generator2
3228
+ generator = create_block(test_constants, uint32(0), 10.0)
3229
+ assert generator is not None
3255
3230
 
3256
- assert len(additions) == len(expected_additions)
3257
- assert signature == expected_signature
3231
+ assert set(generator.additions) == expected_additions
3232
+ assert len(generator.additions) == len(expected_additions)
3233
+ assert generator.signature == expected_signature
3258
3234
 
3259
3235
  err, conds = run_block_generator2(
3260
3236
  bytes(generator.program),
3261
3237
  generator.generator_refs,
3262
3238
  test_constants.MAX_BLOCK_COST_CLVM,
3263
3239
  0,
3264
- signature,
3240
+ generator.signature,
3265
3241
  None,
3266
3242
  test_constants,
3267
3243
  )
@@ -3278,26 +3254,14 @@ async def test_create_block_generator() -> None:
3278
3254
  assert Coin(spend.coin_id, add2[0], uint64(add2[1])) in expected_additions
3279
3255
  num_additions += 1
3280
3256
 
3281
- assert num_additions == len(additions)
3257
+ assert num_additions == len(generator.additions)
3282
3258
  invariant_check_mempool(mempool)
3283
3259
 
3284
3260
 
3285
- def test_flags_for_height() -> None:
3286
- # the keccak operator is supposed to be enabled at soft-fork 6 height
3287
- flags = get_flags_for_height_and_constants(DEFAULT_CONSTANTS.SOFT_FORK6_HEIGHT, DEFAULT_CONSTANTS)
3288
- print(f"{flags:x}")
3289
- assert (flags & ENABLE_KECCAK) != 0
3290
-
3291
- flags = get_flags_for_height_and_constants(DEFAULT_CONSTANTS.SOFT_FORK6_HEIGHT - 1, DEFAULT_CONSTANTS)
3292
- print(f"{flags:x}")
3293
- assert (flags & ENABLE_KECCAK) == 0
3294
-
3295
-
3296
3261
  def test_keccak() -> None:
3297
3262
  # the keccak operator is 62. The assemble() function doesn't support it
3298
3263
  # (yet)
3299
3264
 
3300
- # keccak256 is available when the softfork has activated
3301
3265
  keccak_prg = Program.to(
3302
3266
  assemble(
3303
3267
  "(softfork (q . 1134) (q . 1) (q a (i "
@@ -3308,11 +3272,6 @@ def test_keccak() -> None:
3308
3272
  )
3309
3273
  )
3310
3274
 
3311
- cost, ret = keccak_prg.run_with_flags(1215, ENABLE_KECCAK, [])
3312
- assert cost == 1215
3313
- assert ret.atom == b""
3314
-
3315
- # keccak is ignored when the softfork has not activated
3316
3275
  cost, ret = keccak_prg.run_with_flags(1215, 0, [])
3317
3276
  assert cost == 1215
3318
3277
  assert ret.atom == b""
@@ -3327,12 +3286,7 @@ def test_keccak() -> None:
3327
3286
  )
3328
3287
  )
3329
3288
  with pytest.raises(ValueError, match="clvm raise"):
3330
- keccak_prg.run_with_flags(1215, ENABLE_KECCAK, [])
3331
-
3332
- # keccak is ignored when the softfork has not activated
3333
- cost, ret = keccak_prg.run_with_flags(1215, 0, [])
3334
- assert cost == 1215
3335
- assert ret.atom == b""
3289
+ keccak_prg.run_with_flags(1215, 0, [])
3336
3290
 
3337
3291
  # === HARD FORK ===
3338
3292
  # new operators *outside* the softfork guard
@@ -3346,7 +3300,7 @@ def test_keccak() -> None:
3346
3300
  )
3347
3301
  )
3348
3302
 
3349
- cost, ret = keccak_prg.run_with_flags(994, ENABLE_KECCAK | ENABLE_KECCAK_OPS_OUTSIDE_GUARD, [])
3303
+ cost, ret = keccak_prg.run_with_flags(994, ENABLE_KECCAK_OPS_OUTSIDE_GUARD, [])
3350
3304
  assert cost == 994
3351
3305
  assert ret.atom == b""
3352
3306
 
@@ -3356,11 +3310,7 @@ async def test_lineage_cache(seeded_random: random.Random) -> None:
3356
3310
  called = 0
3357
3311
 
3358
3312
  info1 = UnspentLineageInfo(
3359
- bytes32.random(seeded_random),
3360
- uint64.from_bytes(seeded_random.randbytes(8)),
3361
- bytes32.random(seeded_random),
3362
- uint64.from_bytes(seeded_random.randbytes(8)),
3363
- bytes32.random(seeded_random),
3313
+ bytes32.random(seeded_random), bytes32.random(seeded_random), bytes32.random(seeded_random)
3364
3314
  )
3365
3315
 
3366
3316
  async def callback1(ph: bytes32) -> Optional[UnspentLineageInfo]:
@@ -74,7 +74,7 @@ async def test_fee_increase() -> None:
74
74
  for i in range(300, 700):
75
75
  i = uint32(i)
76
76
  items = []
77
- for _ in range(0, 20):
77
+ for _ in range(20):
78
78
  fee = uint64(0)
79
79
  included_height = uint32(random.randint(i - 60, i - 1))
80
80
  cost = uint64(5000000)
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from chia_rs import AugSchemeMPL, Coin, Program
3
+ from chia_rs import AugSchemeMPL, Coin, CoinSpend, Program, SpendBundle
4
4
  from chia_rs.sized_bytes import bytes32
5
5
  from chia_rs.sized_ints import uint32, uint64
6
6
 
@@ -13,10 +13,8 @@ from chia.full_node.fee_estimation import MempoolInfo
13
13
  from chia.full_node.mempool import Mempool
14
14
  from chia.types.blockchain_format.program import INFINITE_COST
15
15
  from chia.types.clvm_cost import CLVMCost
16
- from chia.types.coin_spend import CoinSpend
17
16
  from chia.types.fee_rate import FeeRate
18
17
  from chia.types.mempool_item import MempoolItem
19
- from chia.types.spend_bundle import SpendBundle
20
18
 
21
19
  MEMPOOL_INFO = MempoolInfo(
22
20
  max_size_in_cost=CLVMCost(uint64(INFINITE_COST * 10)),