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
@@ -2,17 +2,16 @@ from __future__ import annotations
2
2
 
3
3
  from collections.abc import AsyncIterator
4
4
  from contextlib import asynccontextmanager
5
+ from dataclasses import dataclass
5
6
 
6
7
  import pytest
7
- from chia_rs import G2Element
8
+ from chia_rs import CoinState, G2Element
8
9
  from chia_rs.sized_bytes import bytes32
9
10
  from chia_rs.sized_ints import uint32, uint64
10
11
 
11
12
  from chia._tests.environments.wallet import WalletStateTransition, WalletTestFramework
12
13
  from chia._tests.util.setup_nodes import OldSimulatorsAndWallets
13
- from chia.protocols.wallet_protocol import CoinState
14
- from chia.rpc.wallet_request_types import PushTransactions
15
- from chia.server.outbound_message import NodeType
14
+ from chia.protocols.outbound_message import NodeType
16
15
  from chia.types.blockchain_format.coin import Coin
17
16
  from chia.types.blockchain_format.program import Program
18
17
  from chia.types.coin_spend import make_spend
@@ -22,6 +21,8 @@ from chia.wallet.derive_keys import master_sk_to_wallet_sk, master_sk_to_wallet_
22
21
  from chia.wallet.transaction_record import TransactionRecord
23
22
  from chia.wallet.util.transaction_type import TransactionType
24
23
  from chia.wallet.util.wallet_types import WalletType
24
+ from chia.wallet.wallet_request_types import PushTransactions
25
+ from chia.wallet.wallet_rpc_api import MAX_DERIVATION_INDEX_DELTA
25
26
  from chia.wallet.wallet_spend_bundle import WalletSpendBundle
26
27
  from chia.wallet.wallet_state_manager import WalletStateManager
27
28
 
@@ -221,7 +222,7 @@ async def test_confirming_txs_not_ours(wallet_environments: WalletTestFramework)
221
222
  async with env_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=False) as action_scope:
222
223
  await env_1.xch_wallet.generate_signed_transaction(
223
224
  [uint64(1)],
224
- [await env_1.xch_wallet.get_puzzle_hash(new=False)],
225
+ [await action_scope.get_puzzle_hash(env_1.wallet_state_manager)],
225
226
  action_scope,
226
227
  )
227
228
 
@@ -257,3 +258,188 @@ async def test_confirming_txs_not_ours(wallet_environments: WalletTestFramework)
257
258
  ),
258
259
  ]
259
260
  )
261
+
262
+
263
+ @dataclass
264
+ class PuzzleHashState:
265
+ highest_index: int
266
+ used_up_to_index: int
267
+
268
+
269
+ @pytest.mark.parametrize(
270
+ "wallet_environments",
271
+ [{"num_environments": 1, "blocks_needed": [1], "trusted": True, "reuse_puzhash": True}],
272
+ indirect=True,
273
+ )
274
+ @pytest.mark.limit_consensus_modes(reason="irrelevant")
275
+ @pytest.mark.anyio
276
+ async def test_puzzle_hash_requests(wallet_environments: WalletTestFramework) -> None:
277
+ wsm = wallet_environments.environments[0].wallet_state_manager
278
+
279
+ async def get_puzzle_hash_state() -> PuzzleHashState:
280
+ last_index = await wsm.puzzle_store.get_last_derivation_path_for_wallet(wsm.main_wallet.id())
281
+ assert last_index is not None
282
+ return PuzzleHashState(
283
+ last_index,
284
+ int((await wsm.puzzle_store.get_used_count(wsm.main_wallet.id())) / 2) - 1, # hardened + unhardened
285
+ )
286
+
287
+ expected_state = await get_puzzle_hash_state()
288
+
289
+ # `create_more_puzzle_hashes`
290
+ # No-op
291
+ result = await wsm.create_more_puzzle_hashes()
292
+ await result.commit(wsm)
293
+ assert await get_puzzle_hash_state() == expected_state
294
+
295
+ # Ensure the window continues to expand
296
+ await wsm.puzzle_store.set_used_up_to(uint32(expected_state.used_up_to_index + 1))
297
+ result = await wsm.create_more_puzzle_hashes()
298
+ await result.commit(wsm)
299
+ expected_state = PuzzleHashState(expected_state.highest_index + 1, expected_state.used_up_to_index + 1)
300
+ assert await get_puzzle_hash_state() == expected_state
301
+
302
+ # Explicitly make 1 extra
303
+ result = await wsm.create_more_puzzle_hashes(num_additional_phs=wsm.initial_num_public_keys + 1)
304
+ await result.commit(wsm)
305
+ expected_state = PuzzleHashState(expected_state.highest_index + 1, expected_state.used_up_to_index)
306
+ assert await get_puzzle_hash_state() == expected_state
307
+
308
+ # Make sure window doesn't expand on next use
309
+ await wsm.puzzle_store.set_used_up_to(uint32(expected_state.used_up_to_index + 1))
310
+ result = await wsm.create_more_puzzle_hashes()
311
+ await result.commit(wsm)
312
+ expected_state = PuzzleHashState(expected_state.highest_index, expected_state.used_up_to_index + 1)
313
+ assert await get_puzzle_hash_state() == expected_state
314
+
315
+ # Make sure `up_to_index` works
316
+ result = await wsm.create_more_puzzle_hashes(
317
+ up_to_index=uint32(expected_state.highest_index + 100), mark_existing_as_used=False
318
+ )
319
+ await result.commit(wsm)
320
+ expected_state = PuzzleHashState(
321
+ expected_state.highest_index + 100 + wsm.initial_num_public_keys, expected_state.used_up_to_index
322
+ )
323
+ assert await get_puzzle_hash_state() == expected_state
324
+
325
+ # Make sure `mark_existing_as_used` works
326
+ result = await wsm.create_more_puzzle_hashes(
327
+ up_to_index=uint32(expected_state.highest_index + 1), mark_existing_as_used=True
328
+ )
329
+ await result.commit(wsm)
330
+ expected_state = PuzzleHashState(
331
+ expected_state.highest_index + 1 + wsm.initial_num_public_keys, expected_state.highest_index
332
+ )
333
+ assert await get_puzzle_hash_state() == expected_state
334
+
335
+ # Test basic transactionality
336
+ result = await wsm.create_more_puzzle_hashes(
337
+ up_to_index=uint32(expected_state.highest_index + 1), mark_existing_as_used=False
338
+ )
339
+ result = await wsm.create_more_puzzle_hashes(
340
+ num_additional_phs=(expected_state.highest_index - expected_state.used_up_to_index)
341
+ + wsm.initial_num_public_keys
342
+ + 1,
343
+ mark_existing_as_used=False,
344
+ previous_result=result,
345
+ )
346
+ await result.commit(wsm)
347
+ expected_state = PuzzleHashState(
348
+ expected_state.highest_index + 1 + wsm.initial_num_public_keys + 1, expected_state.used_up_to_index
349
+ )
350
+ assert await get_puzzle_hash_state() == expected_state
351
+
352
+ # Test error using two different "config"s
353
+ result = await wsm.create_more_puzzle_hashes(mark_existing_as_used=False)
354
+ with pytest.raises(ValueError, match="different configuration"):
355
+ await wsm.create_more_puzzle_hashes(mark_existing_as_used=True, previous_result=result)
356
+
357
+ # Test generation with no local data
358
+ await wsm.puzzle_store.delete_wallet(wsm.main_wallet.id())
359
+ result = await wsm.create_more_puzzle_hashes()
360
+ await result.commit(wsm)
361
+ expected_state = PuzzleHashState(
362
+ wsm.initial_num_public_keys, -1
363
+ ) # -1 being no puzzle hashes used, not even at index 0
364
+ assert await get_puzzle_hash_state() == expected_state
365
+
366
+ # Test `from_zero` fills in gaps
367
+ async with wsm.puzzle_store.db_wrapper.writer() as conn:
368
+ await conn.execute(
369
+ "DELETE FROM derivation_paths WHERE derivation_index=?",
370
+ (0,),
371
+ )
372
+ assert await get_puzzle_hash_state() == expected_state
373
+ assert (
374
+ len(list(await wsm.puzzle_store.get_all_puzzle_hashes())) == (expected_state.highest_index) * 2
375
+ ) # 0 inclusive
376
+ result = await wsm.create_more_puzzle_hashes(
377
+ from_zero=True, mark_existing_as_used=False, up_to_index=uint32(expected_state.highest_index)
378
+ )
379
+ await result.commit(wsm)
380
+ expected_state = PuzzleHashState(expected_state.highest_index + wsm.initial_num_public_keys, -1)
381
+ assert await get_puzzle_hash_state() == expected_state
382
+ assert len(list(await wsm.puzzle_store.get_all_puzzle_hashes())) == (expected_state.highest_index + 1) * 2
383
+
384
+ # `get_unused_derivation_record`
385
+ # Assert index increases
386
+ assert expected_state.highest_index > expected_state.used_up_to_index
387
+ await wsm.get_unused_derivation_record(wsm.main_wallet.id())
388
+ expected_state = PuzzleHashState(expected_state.highest_index, expected_state.used_up_to_index + 1)
389
+ assert await get_puzzle_hash_state() == expected_state
390
+
391
+ # Assert more puzzle hashes get made
392
+ await wsm.puzzle_store.set_used_up_to(uint32(expected_state.highest_index))
393
+ await wsm.get_unused_derivation_record(wsm.main_wallet.id())
394
+ expected_state = PuzzleHashState(
395
+ expected_state.highest_index + wsm.initial_num_public_keys + 1, expected_state.highest_index + 1
396
+ )
397
+ assert await get_puzzle_hash_state() == expected_state
398
+
399
+ # Test transactionality
400
+ previous_result = None
401
+ for _ in range(wsm.initial_num_public_keys): # all currently unused
402
+ previous_result = await wsm._get_unused_derivation_record(wsm.main_wallet.id(), previous_result=previous_result)
403
+ assert previous_result is not None
404
+ await previous_result.commit(wsm)
405
+ expected_state = PuzzleHashState(
406
+ expected_state.highest_index + wsm.initial_num_public_keys, expected_state.highest_index
407
+ )
408
+ assert await get_puzzle_hash_state() == expected_state
409
+
410
+ # `extend_derivation_index`
411
+ # Check malformed request
412
+ rpc_client = wallet_environments.environments[0].rpc_client
413
+ with pytest.raises(ValueError):
414
+ await rpc_client.fetch("extend_derivation_index", {})
415
+
416
+ # Test no existing derivation paths
417
+ async with wsm.puzzle_store.db_wrapper.writer() as conn:
418
+ await conn.execute(
419
+ "DELETE FROM derivation_paths WHERE derivation_index=?",
420
+ (0,),
421
+ )
422
+ with pytest.raises(ValueError):
423
+ await rpc_client.extend_derivation_index(0)
424
+
425
+ # Reset to a normal state
426
+ await wsm.puzzle_store.delete_wallet(wsm.main_wallet.id())
427
+ result = await wsm.create_more_puzzle_hashes()
428
+ await result.commit(wsm)
429
+ expected_state = PuzzleHashState(wsm.initial_num_public_keys, -1)
430
+ assert await get_puzzle_hash_state() == expected_state
431
+
432
+ # Test an index already created
433
+ with pytest.raises(ValueError):
434
+ await rpc_client.extend_derivation_index(0)
435
+
436
+ # Test an index too far in the future
437
+ with pytest.raises(ValueError):
438
+ await rpc_client.extend_derivation_index(MAX_DERIVATION_INDEX_DELTA + expected_state.highest_index + 1)
439
+
440
+ # Test the actual functionality
441
+ assert await rpc_client.extend_derivation_index(expected_state.highest_index + 5) == str(
442
+ expected_state.highest_index + 5
443
+ )
444
+ expected_state = PuzzleHashState(expected_state.highest_index + 5, expected_state.used_up_to_index)
445
+ assert await get_puzzle_hash_state() == expected_state
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import pytest
4
+ from chia_rs import BlockRecord
4
5
 
5
6
  from chia._tests.environments.wallet import (
6
7
  BalanceCheckingError,
@@ -8,7 +9,6 @@ from chia._tests.environments.wallet import (
8
9
  WalletStateTransition,
9
10
  WalletTestFramework,
10
11
  )
11
- from chia.consensus.block_record import BlockRecord
12
12
  from chia.wallet.cat_wallet.cat_wallet import CATWallet
13
13
 
14
14
 
@@ -4,14 +4,14 @@ import itertools
4
4
  from typing import Optional
5
5
 
6
6
  import pytest
7
- from chia_rs import G2Element
7
+ from chia_rs import CoinSpend, G2Element
8
8
  from chia_rs.sized_bytes import bytes32
9
9
  from chia_rs.sized_ints import uint32, uint64
10
10
 
11
11
  from chia._tests.util.spend_sim import CostLogger, sim_and_client
12
12
  from chia.types.blockchain_format.coin import Coin
13
- from chia.types.blockchain_format.program import Program
14
- from chia.types.coin_spend import CoinSpend, make_spend
13
+ from chia.types.blockchain_format.program import Program, run
14
+ from chia.types.coin_spend import make_spend
15
15
  from chia.types.mempool_inclusion_status import MempoolInclusionStatus
16
16
  from chia.util.errors import Err
17
17
  from chia.util.hash import std_hash
@@ -301,10 +301,10 @@ async def test_did_tp(cost_logger: CostLogger) -> None:
301
301
 
302
302
  remark_condition: Program = next(
303
303
  condition
304
- for condition in successful_spend.coin_spends[0]
305
- .puzzle_reveal.to_program()
306
- .run(successful_spend.coin_spends[0].solution.to_program())
307
- .as_iter()
304
+ for condition in run(
305
+ successful_spend.coin_spends[0].puzzle_reveal,
306
+ Program.from_serialized(successful_spend.coin_spends[0].solution),
307
+ ).as_iter()
308
308
  if condition.first() == Program.to(1)
309
309
  )
310
310
  assert remark_condition == Program.to([1, (MOCK_LAUNCHER_ID, new_metadata), new_tp_hash])
@@ -399,7 +399,7 @@ async def test_revocation_layer(cost_logger: CostLogger) -> None:
399
399
  @pytest.mark.parametrize("num_proofs", range(1, 6))
400
400
  async def test_proofs_checker(cost_logger: CostLogger, num_proofs: int) -> None:
401
401
  async with sim_and_client() as (sim, client):
402
- flags: list[str] = [str(i) for i in range(0, num_proofs)]
402
+ flags: list[str] = [str(i) for i in range(num_proofs)]
403
403
  proofs_checker: ProofsChecker = ProofsChecker(flags)
404
404
 
405
405
  # (mod (PROOFS_CHECKER proofs) (if (a PROOFS_CHECKER (list proofs)) () (x)))
@@ -12,8 +12,6 @@ from typing_extensions import Literal
12
12
 
13
13
  from chia._tests.environments.wallet import WalletEnvironment, WalletStateTransition, WalletTestFramework
14
14
  from chia._tests.util.time_out_assert import time_out_assert_not_none
15
- from chia.rpc.wallet_request_types import VCAddProofs, VCGet, VCGetList, VCGetProofsForRoot, VCMint, VCRevoke, VCSpend
16
- from chia.rpc.wallet_rpc_client import WalletRpcClient
17
15
  from chia.simulator.full_node_simulator import FullNodeSimulator
18
16
  from chia.types.blockchain_format.coin import coin_as_list
19
17
  from chia.types.blockchain_format.program import Program
@@ -25,13 +23,23 @@ from chia.wallet.cat_wallet.cat_wallet import CATWallet
25
23
  from chia.wallet.did_wallet.did_wallet import DIDWallet
26
24
  from chia.wallet.util.query_filter import TransactionTypeFilter
27
25
  from chia.wallet.util.transaction_type import TransactionType
28
- from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
26
+ from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG, TXConfig
29
27
  from chia.wallet.util.wallet_types import WalletType
30
28
  from chia.wallet.vc_wallet.cr_cat_drivers import ProofsChecker, construct_cr_layer
31
29
  from chia.wallet.vc_wallet.cr_cat_wallet import CRCATWallet
32
30
  from chia.wallet.vc_wallet.vc_store import VCProofs, VCRecord
33
31
  from chia.wallet.wallet import Wallet
34
32
  from chia.wallet.wallet_node import WalletNode
33
+ from chia.wallet.wallet_request_types import (
34
+ VCAddProofs,
35
+ VCGet,
36
+ VCGetList,
37
+ VCGetProofsForRoot,
38
+ VCMint,
39
+ VCRevoke,
40
+ VCSpend,
41
+ )
42
+ from chia.wallet.wallet_rpc_client import WalletRpcClient
35
43
  from chia.wallet.wallet_spend_bundle import WalletSpendBundle
36
44
 
37
45
 
@@ -41,11 +49,13 @@ async def mint_cr_cat(
41
49
  wallet_node_0: WalletNode,
42
50
  client_0: WalletRpcClient,
43
51
  full_node_api: FullNodeSimulator,
52
+ tx_config: TXConfig,
44
53
  authorized_providers: list[bytes32] = [],
45
54
  tail: Program = Program.to(None),
46
55
  proofs_checker: ProofsChecker = ProofsChecker(["foo", "bar"]),
47
56
  ) -> None:
48
- our_puzzle: Program = await wallet_0.get_new_puzzle()
57
+ async with wallet_0.wallet_state_manager.new_action_scope(tx_config, push=True) as action_scope:
58
+ our_puzzle = await action_scope.get_puzzle(wallet_0.wallet_state_manager)
49
59
  cat_puzzle: Program = construct_cat_puzzle(
50
60
  CAT_MOD,
51
61
  tail.get_tree_hash(),
@@ -62,7 +72,7 @@ async def mint_cr_cat(
62
72
  "amount": CAT_AMOUNT_0,
63
73
  }
64
74
  ],
65
- DEFAULT_TX_CONFIG,
75
+ tx_config,
66
76
  wallet_id=1,
67
77
  )
68
78
  ).signed_tx
@@ -161,11 +171,13 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
161
171
  )
162
172
 
163
173
  # Mint a VC
174
+ async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
175
+ ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
164
176
  vc_record = (
165
177
  await client_0.vc_mint(
166
178
  VCMint(
167
179
  did_id=encode_puzzle_hash(did_id, "did"),
168
- target_address=encode_puzzle_hash(await wallet_0.get_new_puzzlehash(), "txch"),
180
+ target_address=encode_puzzle_hash(ph, "txch"),
169
181
  fee=uint64(1_750_000_000_000),
170
182
  push=True,
171
183
  ),
@@ -311,7 +323,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
311
323
  assert get_list_reponse.proof_dict[proof_root] == proofs.key_value_pairs
312
324
 
313
325
  # Mint CR-CAT
314
- await mint_cr_cat(1, wallet_0, wallet_node_0, client_0, full_node_api, [did_id])
326
+ await mint_cr_cat(1, wallet_0, wallet_node_0, client_0, full_node_api, wallet_environments.tx_config, [did_id])
315
327
  await wallet_environments.process_pending_states(
316
328
  [
317
329
  WalletStateTransition(
@@ -360,7 +372,8 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
360
372
  "flags_needed": cr_cat_wallet_0.info.proofs_checker.flags,
361
373
  } == (await client_0.get_wallets(wallet_type=cr_cat_wallet_0.type()))[0]
362
374
  assert await wallet_node_0.wallet_state_manager.get_wallet_for_asset_id(cr_cat_wallet_0.get_asset_id()) is not None
363
- wallet_1_ph = await wallet_1.get_new_puzzlehash()
375
+ async with wallet_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
376
+ wallet_1_ph = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
364
377
  wallet_1_addr = encode_puzzle_hash(wallet_1_ph, "txch")
365
378
  txs = (
366
379
  await client_0.cat_spend(
@@ -446,8 +459,10 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
446
459
  assert len(pending_tx) == 1
447
460
 
448
461
  # Send the VC to wallet_1 to use for the CR-CATs
462
+ async with wallet_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
463
+ ph = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
449
464
  await client_0.vc_spend(
450
- VCSpend(vc_id=vc_record.vc.launcher_id, new_puzhash=await wallet_1.get_new_puzzlehash(), push=True),
465
+ VCSpend(vc_id=vc_record.vc.launcher_id, new_puzhash=ph, push=True),
451
466
  wallet_environments.tx_config,
452
467
  )
453
468
  await wallet_environments.process_pending_states(
@@ -682,11 +697,13 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
682
697
  )
683
698
  did_id: bytes32 = bytes32.from_hexstr(did_wallet.get_my_DID())
684
699
 
700
+ async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
701
+ ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
685
702
  vc_record = (
686
703
  await client_0.vc_mint(
687
704
  VCMint(
688
705
  did_id=encode_puzzle_hash(did_id, "did"),
689
- target_address=encode_puzzle_hash(await wallet_0.get_new_puzzlehash(), "txch"),
706
+ target_address=encode_puzzle_hash(ph, "txch"),
690
707
  fee=uint64(200),
691
708
  push=True,
692
709
  ),
@@ -720,7 +737,7 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
720
737
  ) as action_scope:
721
738
  await (await wallet_node_0.wallet_state_manager.get_or_create_vc_wallet()).generate_signed_transaction(
722
739
  [uint64(1)],
723
- [await wallet_0.get_puzzle_hash(new=not action_scope.config.tx_config.reuse_puzhash)],
740
+ [await action_scope.get_puzzle_hash(wallet_node_0.wallet_state_manager)],
724
741
  action_scope,
725
742
  vc_id=new_vc_record.vc.launcher_id,
726
743
  new_proof_hash=bytes32.zeros,
@@ -815,7 +832,7 @@ async def test_cat_wallet_conversion(
815
832
  )
816
833
 
817
834
  did_id = bytes32.zeros
818
- await mint_cr_cat(num_blocks, wallet_0, wallet_node_0, client_0, full_node_api, [did_id])
835
+ await mint_cr_cat(num_blocks, wallet_0, wallet_node_0, client_0, full_node_api, DEFAULT_TX_CONFIG, [did_id])
819
836
  await full_node_api.farm_blocks_to_wallet(count=num_blocks, wallet=wallet_0)
820
837
  await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node_0, timeout=20)
821
838
 
@@ -4,23 +4,27 @@ import time
4
4
  from typing import Any, Optional
5
5
 
6
6
  from chia_rs import (
7
+ BlockRecord,
7
8
  ConsensusConstants,
8
9
  Foliage,
9
10
  FoliageBlockData,
10
11
  FoliageTransactionBlock,
12
+ FullBlock,
11
13
  G1Element,
12
14
  G2Element,
13
15
  PoolTarget,
16
+ ProofOfSpace,
14
17
  RewardChainBlock,
15
18
  RewardChainBlockUnfinished,
19
+ SpendBundle,
16
20
  TransactionsInfo,
21
+ UnfinishedBlock,
17
22
  compute_merkle_set_root,
18
23
  )
19
24
  from chia_rs.sized_bytes import bytes32, bytes100
20
25
  from chia_rs.sized_ints import uint8, uint32, uint64, uint128
21
26
  from chiabip158 import PyBIP158
22
27
 
23
- from chia.consensus.block_record import BlockRecord
24
28
  from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
25
29
  from chia.consensus.coinbase import create_farmer_coin, create_pool_coin
26
30
  from chia.consensus.full_block_to_block_record import block_to_block_record
@@ -28,12 +32,8 @@ from chia.full_node.bundle_tools import simple_solution_generator
28
32
  from chia.simulator.block_tools import BlockTools, compute_additions_unchecked
29
33
  from chia.types.blockchain_format.classgroup import ClassgroupElement
30
34
  from chia.types.blockchain_format.coin import Coin, hash_coin_ids
31
- from chia.types.blockchain_format.proof_of_space import ProofOfSpace
32
35
  from chia.types.blockchain_format.vdf import VDFInfo, VDFProof
33
- from chia.types.full_block import FullBlock
34
36
  from chia.types.generator_types import BlockGenerator
35
- from chia.types.spend_bundle import SpendBundle
36
- from chia.types.unfinished_block import UnfinishedBlock
37
37
  from chia.util.block_cache import BlockCache
38
38
  from chia.util.hash import std_hash
39
39
 
@@ -94,7 +94,7 @@ class WalletBlockTools(BlockTools):
94
94
  latest_block = None
95
95
  last_timestamp = uint64((int(time.time()) if genesis_timestamp is None else genesis_timestamp) - 20)
96
96
 
97
- for _ in range(0, num_blocks):
97
+ for _ in range(num_blocks):
98
98
  additions = []
99
99
  removals = []
100
100
  block_generator: Optional[BlockGenerator] = None
@@ -1,24 +1,16 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  import pytest
6
- from chia_rs import ConsensusConstants
4
+ from chia_rs import BlockRecord, ConsensusConstants, FullBlock, HeaderBlock, SubEpochSummary
7
5
  from chia_rs.sized_bytes import bytes32
8
- from chia_rs.sized_ints import uint8, uint32, uint64
6
+ from chia_rs.sized_ints import uint32
9
7
 
10
8
  from chia._tests.util.blockchain_mock import BlockchainMock
11
- from chia.consensus.block_record import BlockRecord
12
- from chia.consensus.default_constants import DEFAULT_CONSTANTS
13
9
  from chia.consensus.full_block_to_block_record import block_to_block_record
14
- from chia.consensus.pot_iterations import calculate_iterations_quality
10
+ from chia.consensus.generator_tools import get_block_header
11
+ from chia.consensus.pot_iterations import validate_pospace_and_get_required_iters
15
12
  from chia.full_node.weight_proof import WeightProofHandler, _map_sub_epoch_summaries, _validate_summaries_weight
16
13
  from chia.simulator.block_tools import BlockTools
17
- from chia.types.blockchain_format.proof_of_space import calculate_prefix_bits, verify_and_get_quality_string
18
- from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
19
- from chia.types.full_block import FullBlock
20
- from chia.types.header_block import HeaderBlock
21
- from chia.util.generator_tools import get_block_header
22
14
 
23
15
 
24
16
  async def load_blocks_dont_validate(
@@ -48,22 +40,17 @@ async def load_blocks_dont_validate(
48
40
  else:
49
41
  cc_sp = block.reward_chain_block.challenge_chain_sp_vdf.output.get_hash()
50
42
 
51
- quality_string: Optional[bytes32] = verify_and_get_quality_string(
52
- block.reward_chain_block.proof_of_space,
43
+ required_iters = validate_pospace_and_get_required_iters(
53
44
  constants,
45
+ block.reward_chain_block.proof_of_space,
54
46
  block.reward_chain_block.pos_ss_cc_challenge_hash,
55
47
  cc_sp,
56
- height=block.height,
57
- )
58
- assert quality_string is not None
59
-
60
- required_iters: uint64 = calculate_iterations_quality(
61
- constants.DIFFICULTY_CONSTANT_FACTOR,
62
- quality_string,
63
- block.reward_chain_block.proof_of_space.size,
48
+ block.height,
64
49
  difficulty,
65
- cc_sp,
50
+ sub_slot_iters,
51
+ uint32(0), # prev_tx_block(blocks, prev_b), todo need to get height of prev tx block somehow here
66
52
  )
53
+ assert required_iters is not None
67
54
 
68
55
  sub_block = block_to_block_record(
69
56
  constants,
@@ -501,28 +488,3 @@ class TestWeightProof:
501
488
  valid, fork_point, _ = await wpf.validate_weight_proof(new_wp)
502
489
  assert valid
503
490
  assert fork_point != 0
504
-
505
-
506
- @pytest.mark.parametrize("height,expected", [(0, 3), (5496000, 2), (10542000, 1), (15592000, 0), (20643000, 0)])
507
- def test_calculate_prefix_bits_clamp_zero(height: uint32, expected: int) -> None:
508
- constants = DEFAULT_CONSTANTS.replace(NUMBER_ZERO_BITS_PLOT_FILTER=uint8(3))
509
- assert calculate_prefix_bits(constants, height) == expected
510
-
511
-
512
- @pytest.mark.parametrize(
513
- argnames=["height", "expected"],
514
- argvalues=[
515
- (0, 9),
516
- (5495999, 9),
517
- (5496000, 8),
518
- (10541999, 8),
519
- (10542000, 7),
520
- (15591999, 7),
521
- (15592000, 6),
522
- (20642999, 6),
523
- (20643000, 5),
524
- ],
525
- )
526
- def test_calculate_prefix_bits_default(height: uint32, expected: int) -> None:
527
- constants = DEFAULT_CONSTANTS
528
- assert calculate_prefix_bits(constants, height) == expected
chia/apis.py CHANGED
@@ -4,8 +4,8 @@ from chia.farmer.farmer_api import FarmerAPI
4
4
  from chia.full_node.full_node_api import FullNodeAPI
5
5
  from chia.harvester.harvester_api import HarvesterAPI
6
6
  from chia.introducer.introducer_api import IntroducerAPI
7
+ from chia.protocols.outbound_message import NodeType
7
8
  from chia.server.api_protocol import ApiProtocol
8
- from chia.server.outbound_message import NodeType
9
9
  from chia.timelord.timelord_api import TimelordAPI
10
10
  from chia.wallet.wallet_node_api import WalletNodeAPI
11
11
 
chia/cmds/beta.py CHANGED
@@ -138,7 +138,7 @@ def prepare_submission_cmd(ctx: click.Context) -> None:
138
138
  user_input = input("Select the version you want to prepare for submission: ")
139
139
  try:
140
140
  if int(user_input) <= 0:
141
- raise IndexError()
141
+ raise IndexError
142
142
  prepare_result = available_results[int(user_input) - 1]
143
143
  except IndexError:
144
144
  raise click.ClickException(f"Invalid choice: {user_input}")
chia/cmds/chia.py CHANGED
@@ -12,7 +12,7 @@ from chia.cmds.completion import completion
12
12
  from chia.cmds.configure import configure_cmd
13
13
  from chia.cmds.data import data_cmd
14
14
  from chia.cmds.db import db_cmd
15
- from chia.cmds.dev import dev_cmd
15
+ from chia.cmds.dev.main import dev_cmd
16
16
  from chia.cmds.farm import farm_cmd
17
17
  from chia.cmds.init import init_cmd
18
18
  from chia.cmds.keys import keys_cmd
@@ -27,10 +27,10 @@ from chia.cmds.show import show_cmd
27
27
  from chia.cmds.start import start_cmd
28
28
  from chia.cmds.stop import stop_cmd
29
29
  from chia.cmds.wallet import wallet_cmd
30
+ from chia.ssl.ssl_check import check_ssl
30
31
  from chia.util.default_root import DEFAULT_KEYS_ROOT_PATH, resolve_root_path
31
32
  from chia.util.errors import KeychainCurrentPassphraseIsInvalid
32
33
  from chia.util.keychain import Keychain, set_keys_root_path
33
- from chia.util.ssl_check import check_ssl
34
34
 
35
35
  CONTEXT_SETTINGS = {
36
36
  "help_option_names": ["-h", "--help"],
@@ -53,24 +53,24 @@ CONTEXT_SETTINGS = {
53
53
  @click.option(
54
54
  "--keys-root-path", default=DEFAULT_KEYS_ROOT_PATH, help="Keyring file root", type=click.Path(), show_default=True
55
55
  )
56
- @click.option("--passphrase-file", type=click.File("r"), help="File or descriptor to read the keyring passphrase from")
56
+ @click.option("--passphrase-file", type=click.File("r"), help="File to read the keyring passphrase from")
57
57
  @click.pass_context
58
58
  def cli(
59
59
  ctx: click.Context,
60
60
  root_path: str,
61
- keys_root_path: Optional[str] = None,
61
+ keys_root_path: str,
62
62
  passphrase_file: Optional[TextIOWrapper] = None,
63
63
  ) -> None:
64
64
  from pathlib import Path
65
65
 
66
66
  context = ChiaCliContext.set_default(ctx=ctx)
67
67
  context.root_path = Path(root_path)
68
+ context.keys_root_path = Path(keys_root_path)
68
69
 
69
- # keys_root_path and passphrase_file will be None if the passphrase options have been
70
- # scrubbed from the CLI options
71
- if keys_root_path is not None:
72
- set_keys_root_path(Path(keys_root_path))
70
+ set_keys_root_path(Path(keys_root_path))
73
71
 
72
+ # passphrase_file will be None if the passphrase options have been
73
+ # scrubbed from the CLI options
74
74
  if passphrase_file is not None:
75
75
  import sys
76
76
 
@@ -81,7 +81,7 @@ def cli(
81
81
  if Keychain.master_passphrase_is_valid(passphrase):
82
82
  cache_passphrase(passphrase)
83
83
  else:
84
- raise KeychainCurrentPassphraseIsInvalid()
84
+ raise KeychainCurrentPassphraseIsInvalid
85
85
  except KeychainCurrentPassphraseIsInvalid:
86
86
  if Path(passphrase_file.name).is_file():
87
87
  print(f'Invalid passphrase found in "{passphrase_file.name}"')